n8n/packages/design-system/theme/preview/index.html
Alex Grozav dd6a4c956a
feat(editor): Migrate Design System and Editor UI to Vue 3 (#6476)
* feat: remove vue-fragment (no-changelog)

* feat: partial design-system migration

* feat: migrate info-accordion and info-tip components

* feat: migrate several components to vue 3

* feat: migrated several components

* feat: migrate several components

* feat: migrate several components

* feat: migrate several components

* feat: re-exported all design system components

* fix: fix design for popper components

* fix: editor kind of working, lots of issues to fix

* fix: fix several vue 3 migration issues

* fix: replace @change with @update:modelValue in several places

* fix: fix translation linking

* fix: fix inline-edit input

* fix: fix ndv and dialog design

* fix: update parameter input event bindings

* fix: rename deprecated lifecycle methods

* fix: fix json view mapping

* build: update lock file

* fix(editor): revisit last conflict with master and fix issues

* fix(editor): revisit last conflict with master and fix issues

* fix: fix expression editor bug causing code mirror to no longer be reactive

* fix: fix resource locator bug

* fix: fix vue-agile integration

* fix: remove global import for vue-agile

* fix: replace element-plus buttons with n8n-buttons everywhere

* fix(editor): Fix various element-plus styles (#6571)

* fix(editor): Fix various element-plus styles

Signed-off-by: Oleg Ivaniv <me@olegivaniv.com>

* Remove debugging code

Signed-off-by: Oleg Ivaniv <me@olegivaniv.com>

* Address PR comments

Signed-off-by: Oleg Ivaniv <me@olegivaniv.com>

---------

Signed-off-by: Oleg Ivaniv <me@olegivaniv.com>

* fix(editor): Fix loading in production mode [Vue 3] (#6578)

Signed-off-by: Oleg Ivaniv <me@olegivaniv.com>

* fix(editor): First round of e2e tests fixes with Vue 3 (#6579)

* fix(editor): Fix broken smoke and workflow list e2e tests
* ✔️ Fix failing canvas action tests. Updating some selectors used in credentials and workflow tests

* feat: add vue 3 eslint rules and fix issues

* fix: fix tags-dropdown

* fix: fix white-space issues caused by i18n-t

* fix: rename non-generic click events

* fix: fix search in resources list layout

* fix: fix datatable paginator

* fix: fix popper select caret and dropdown size

* fix: add width to action-dropdown

* fix: fix workflow settings icon not being hidden

* fix: refactor newly added code

* fix: fix merge issue

* fix: fix ndv credentials watcher

* fix: fix workflow saving and grabber notch

* fix: fix nodes list panel transition

* fix: fix node title visibility

* fix: fix data unpinning

* fix: fix value access

* fix: show  input panel only if trigger panel enabled or not trigger node

* fix: fix tags dropdown and executions status spcing

* fix(editor): Prevent execution list to load back when leaving the route (#6697)

fix(editor): prevent execution list to load back when leaving the route

* fix: fix drawer visibility

* fix: fix expression toggle padding

* fix: fix expressions editor styling

* chore: prepare for testing

* fix: fix styling for el-button without patching

* test: fix unit tests in design-system

* test: fix most unit tests

* fix: remove import cycle.

* fix: fix personalization modal tests

* fix further resource mapper test adjustments

* fix: fix multiple tests and n8n-route attr duplication

* fix: fix source control tets

* fix: fixed remaining unit tests

* fix: fix workflows and credentials e2e tests

* fix: fix localizeNodeNames

* fix: update ndv e2e tests

* fix: fix popper left placement arrow

* fix: fix 5-ndv e2e tests

* fix: fix 6-code-node e2e tests

* fix(editor): Drop click outside directive from NodeCreator (#6716)

* fix(editor): Drop click outside directive from NodeCreator

* fix(editor): make sure mouseup outside is unbound at least before the component is unmounted

* fix: fix 10-settings-log-streaming e2e tests

* fix: fix node redrawing

* fix: fix tooltip buttons styling

* fix: fix varous e2e suites

* fix: fix 15-scheduler-node e2e suite

* fix: fix route watcher

* fix: fixed param name update and credential edit

* feat: update event names

* refactor: Remove deprecated `$data` (#6576)

Co-authored-by: Alex Grozav <alex@grozav.com>

* fix: fix 17-sharing e2e suite

* fix: fix tags dropdown

* fix: fix tags manager

* fix(editor): move :deep selectors to a separate scoped style block

* fix: fix sticky component and inline text edit

* fix: update e2e tests

* fix: remove button override references

* fix(editor): Adjust spacing in templates for Vue 3 (#6744)

* fix(editor): Adjust spacing in templates

* fix: Undo unneeded change

* fix: Undo unneeded change

* fix(editor): Adjust NDV height for Vue 3 (#6742)

fix(editor): Adjust NDV height

* fix(editor): Restore collapsed sidebar items for Vue 3 (#6743)

fix(editor): Restore collapsed sidebar items

* fix: fix linting issues

* fix: fix design-system deps

* fix: post-merge fixes

* fix: update tests

* fix: increase timeout for executionslist tets

* chore: fix linting issue

* fix: fix 14-mapping e2e tests in ci

* fix: re-enable tests

* fix: fix workflow duplication e2e tests after tags update

* fix(editor): Change component prop to be typed

* fix: fix tags dropdown in duplicate wf modal

* fix: fix focus behaviour in tags selector

* fix: fix tag creation

* fix: fix log streaming e2e race condition

* fix(editor): Fix Vue 3 linting issues (#6748)

* fix(editor): Fix Vue 3 linting issues

Signed-off-by: Oleg Ivaniv <me@olegivaniv.com>

* fix MainSidebar linter issues

* revert pnpm lock

* update pnpm lock file

---------

Signed-off-by: Oleg Ivaniv <me@olegivaniv.com>
Co-authored-by: Alex Grozav <alex@grozav.com>

* fix(editor): Some css fixes for vue3 branch (#6749)

*  Fixing filter button height

*  Update input modal button position

*  Updating tags styling

*  Fix event logging settings spacing

* 👕 Fixing lint errors

* fix: fix linting issues

* Revert to `// eslint-disable-next-line @typescript-eslint/no-misused-promises` disabling of mixins init

Signed-off-by: Oleg Ivaniv <me@olegivaniv.com>

* fix: fix css issue

* fix(editor): Lint fix

* fix(editor): Fix settings initialisation (#6750)

Signed-off-by: Oleg Ivaniv <me@olegivaniv.com>

* fix: fix initial settings loading

* fix: replace realClick with click force

* fix: fix randomly failing mapping e2e tests

* fix(editor): Fix menu item event handling

* fix: fix resource filters dropdown events (#6752)

* fix: fix resource filters dropdown events

* fix: remove teleported:false

* fix: fix event selection event naming (#6753)

* fix: removed console.log (#6754)

* fix: rever await nextTick changes

* fix: redo linting changes

* fix(editor): Redraw node connections if adding more than one node to canvas (#6755)

* fix(editor): Redraw node connections if adding more than one node to canvas

Signed-off-by: Oleg Ivaniv <me@olegivaniv.com>

* Update position before connection two nodes

* Lint fix

---------

Signed-off-by: Oleg Ivaniv <me@olegivaniv.com>
Co-authored-by: Alex Grozav <alex@grozav.com>

* fix(editor): Fix `ResourceMapper` unit tests (#6758)

* ✔️ Fix matching columns test

* ✔️ Fix multiple matching columns test

* ✔️ Removing `skip` from the last test

* fix: Allow pasting a big workflow (#6760)

* fix: pasting a big workflow

* chore: update comment

* refactor: move try/catch to function

* refactor: move try/catch to function

* fix(editor): Fix modal layer width

* fix: fix position changes

* fix: undo it.only

* fix: make undo/redo multiple steps more verbose

* fix: Fix value survey styles (#6764)

* fix: fix value survey styles

* fix: lint

* Revert "fix: lint"

72869c431f

* fix: lint

* fix(editor): Fix collapsed sub menu

* fix: Fix drawer animation (#6767)

fix: drawer animation

* fix(editor): Fix source control buttons (#6769)

* fix(editor): Fix App loading & auth  (#6768)

* fix(editor): Fix App loading & auth

Signed-off-by: Oleg Ivaniv <me@olegivaniv.com>

* Await promises

Signed-off-by: Oleg Ivaniv <me@olegivaniv.com>

* Fix eslint error

Signed-off-by: Oleg Ivaniv <me@olegivaniv.com>

---------

Signed-off-by: Oleg Ivaniv <me@olegivaniv.com>

---------

Signed-off-by: Oleg Ivaniv <me@olegivaniv.com>
Co-authored-by: Csaba Tuncsik <csaba@n8n.io>
Co-authored-by: OlegIvaniv <me@olegivaniv.com>
Co-authored-by: Milorad FIlipović <milorad@n8n.io>
Co-authored-by: Iván Ovejero <ivov.src@gmail.com>
Co-authored-by: Mutasem Aldmour <4711238+mutdmour@users.noreply.github.com>
2023-07-28 09:51:07 +02:00

1335 lines
40 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Deprecated - Element UI Theme CSS Variable</title>
<!-- import CSS -->
<link rel="stylesheet" href="../dist/index.css" />
<link rel="stylesheet" href="./docs.min.css" />
</head>
<body>
<div id="app">
<el-container>
<el-container>
<el-main>
<div class="component-preview">
<h4>Color</h4>
<div class="color">
<el-row :gutter="12">
<el-col :span="4" v-for="(color, key) in colorLine" :key="key">
<div class="demo-color-box" :style="{ background: dataProxy(color) }">
{{color}}
<div class="value">{{dataProxy(color)}}</div>
<div class="bg-color-sub">
<div
class="bg-success-sub-item"
v-for="(item, key) in Array(2)"
:key="key"
:style="{ background: tintColor(dataProxy(color), (key + 8) / 10) }"
></div>
</div>
</div>
</el-col>
</el-row>
<el-row :gutter="12">
<el-col :span="4">
<div
class="demo-color-box demo-color-box-other"
:style="{ background: color_text_primary }"
>
Primary Text
<div class="value">{{color_text_primary}}</div>
</div>
</el-col>
<el-col :span="4">
<div
class="demo-color-box demo-color-box-other"
:style="{ background: color_text_regular }"
>
Regular Text
<div class="value">{{color_text_regular}}</div>
</div>
</el-col>
<el-col :span="4">
<div
class="demo-color-box demo-color-box-other"
:style="{ background: color_text_secondary }"
>
Secondary Text
<div class="value">{{color_text_secondary}}</div>
</div>
</el-col>
<el-col :span="4">
<div
class="demo-color-box demo-color-box-other"
:style="{ background: color_text_placeholder }"
>
Placeholder
<div class="value">{{color_text_placeholder}}</div>
</div>
</el-col>
</el-row>
<el-row :gutter="12">
<el-col :span="4">
<div
class="demo-color-box demo-color-box-other demo-color-box-lite"
:style="{ background: border_color_base }"
>
Border Base
<div class="value">{{border_color_base}}</div>
</div>
</el-col>
<el-col :span="4">
<div
class="demo-color-box demo-color-box-other demo-color-box-lite"
:style="{ background: border_color_light }"
>
Border Light
<div class="value">{{border_color_light}}</div>
</div>
</el-col>
<el-col :span="4">
<div
class="demo-color-box demo-color-box-other demo-color-box-lite"
:style="{ background: border_color_lighter }"
>
Border Lighter
<div class="value">{{border_color_lighter}}</div>
</div>
</el-col>
<el-col :span="4">
<div
class="demo-color-box demo-color-box-other demo-color-box-lite"
:style="{ background: border_color_extra_light }"
>
Border Extralight
<div class="value">{{border_color_extra_light}}</div>
</div>
</el-col>
</el-row>
<el-row :gutter="12" v-if="false">
<el-col :span="4">
<div
class="demo-color-box demo-color-box-other"
:style="{ background: color_black }"
>
Background B
<div class="value">{{color_black}}</div>
</div>
</el-col>
<el-col :span="4">
<div
class="demo-color-box demo-color-box-other"
:style="{ background: color_white, color: '#303133', border: '1px solid #eee' }"
>
Background W
<div class="value">{{color_white}}</div>
</div>
</el-col>
<el-col :span="4">
<div class="demo-color-box demo-color-box-other bg-transparent">
Background
<div class="value">Transparent</div>
</div>
</el-col>
</el-row>
</div>
<h4>Typography</h4>
<el-row :gutter="12">
<el-col :span="6" class="heading">
<div :style="{ fontSize: font_size_extra_large }">Heading1</div>
<div :style="{ fontSize: font_size_large }">Heading2</div>
<div :style="{ fontSize: font_size_medium }">Heading3</div>
<div :style="{ fontSize: font_size_base }">Heading4</div>
<div :style="{ fontSize: font_size_small }">Heading5</div>
<div :style="{ fontSize: font_size_extra_small }">Heading6</div>
</el-col>
<el-col :span="9">
<div class="title">Example body text</div>
<p
class="paragraph"
:style="{
fontSize: font_size_base,
fontWeight: font_weight_primary,
lineHeight: font_line_height_primary
}"
>
With MySpace becoming more popular every day, there is the constant need to be
different. There are millions of users. If MySpace layouts are chosen well, then
you can enhance your profile a great deal.
</p>
</el-col>
<el-col :span="9">
<div class="title">Example small text</div>
<p
class="paragraph"
:style="{
fontSize: font_size_small,
fontWeight: font_weight_secondary,
lineHeight: font_line_height_secondary
}"
>
Computers have become ubiquitous in almost every facet of our lives. At work,
desk jockeys spend hours in front of their desktops, while delivery people scan
bar codes with handhelds and workers in the field stay in touch with the central
office via their notebooks. Computer hardware weaves itself through the fabric
of our lives.
</p>
</el-col>
</el-row>
<h4>Button</h4>
<el-row class="demo-line">
<el-button>Default</el-button>
<el-button type="primary">Primary</el-button>
<el-button type="success">Success</el-button>
<el-button type="info">Info</el-button>
<el-button type="warning">Warning</el-button>
<el-button type="danger">Danger</el-button>
</el-row>
<el-row class="demo-line">
<el-button disabled>Default</el-button>
<el-button disabled type="primary">Primary</el-button>
<el-button disabled type="success">Success</el-button>
<el-button disabled type="info">Info</el-button>
<el-button disabled type="warning">Warning</el-button>
<el-button disabled type="danger">Danger</el-button>
</el-row>
<el-row class="demo-line">
<el-button plain>Plain</el-button>
<el-button type="primary" plain>Primary</el-button>
<el-button type="success" plain>Success</el-button>
<el-button type="info" plain>Info</el-button>
<el-button type="warning" plain>Warning</el-button>
<el-button type="danger" plain>Danger</el-button>
</el-row>
<el-row class="demo-line">
<el-button disabled plain>Plain</el-button>
<el-button disabled type="primary" plain>Primary</el-button>
<el-button disabled type="success" plain>Success</el-button>
<el-button disabled type="info" plain>Info</el-button>
<el-button disabled type="warning" plain>Warning</el-button>
<el-button disabled type="danger" plain>Danger</el-button>
</el-row>
<el-row class="demo-line">
<el-button round>Round</el-button>
<el-button type="primary" round>Primary</el-button>
<el-button type="success" round>Success</el-button>
<el-button type="info" round>Info</el-button>
<el-button type="warning" round>Warning</el-button>
<el-button type="danger" round>Danger</el-button>
</el-row>
<el-row class="demo-line">
<el-button icon="el-icon-search" circle></el-button>
<el-button type="primary" icon="el-icon-edit" circle></el-button>
<el-button type="success" icon="el-icon-check" circle></el-button>
<el-button type="info" icon="el-icon-message" circle></el-button>
<el-button type="warning" icon="el-icon-star-off" circle></el-button>
<el-button type="danger" icon="el-icon-delete" circle></el-button>
</el-row>
<el-row class="demo-line">
<el-button>Default</el-button>
<el-button size="medium">Medium</el-button>
<el-button size="small">Small</el-button>
<el-button size="mini">Mini</el-button>
</el-row>
<el-row>
<el-button type="text">文字按钮</el-button>
<el-button type="text" disabled>文字按钮</el-button>
</el-row>
<h4>Radio</h4>
<el-row class="demo-line">
<el-radio v-model="radio" label="1">Option A</el-radio>
<el-radio v-model="radio" label="2">Option B</el-radio>
</el-row>
<el-row class="demo-line">
<el-radio-group v-model="radio1">
<el-radio-button label="New York"></el-radio-button>
<el-radio-button label="Washington"></el-radio-button>
<el-radio-button label="Los Angeles"></el-radio-button>
<el-radio-button label="Chicago"></el-radio-button>
</el-radio-group>
</el-row>
<el-row class="demo-line">
<el-radio v-model="radio2" label="1" border>Option A</el-radio>
<el-radio v-model="radio2" label="2" border>Option B</el-radio>
</el-row>
<h4>Checkbox</h4>
<el-row class="demo-line">
<el-checkbox v-model="checked">Option</el-checkbox>
</el-row>
<el-row class="demo-line">
<el-checkbox-group v-model="checked1">
<el-checkbox-button
v-for="city in ['Shanghai', 'Beijing', 'Guangzhou', 'Shenzhen']"
:label="city"
:key="city"
>{{city}}</el-checkbox-button
>
</el-checkbox-group>
</el-row>
<el-row class="demo-line">
<el-checkbox v-model="checked2" label="Option1" border></el-checkbox>
</el-row>
<h4>Input</h4>
<el-row style="width: 180px">
<el-input placeholder="Please input" v-model="input"></el-input>
</el-row>
<h4>InputNumber</h4>
<el-row>
<el-input-number v-model="inputNumber" :min="1" :max="10"></el-input-number>
</el-row>
<h4>Select</h4>
<el-row>
<el-select v-model="selectValue" placeholder="Select">
<el-option
v-for="item in selectOptions"
:key="item.value"
:label="item.label"
:value="item.value"
>
</el-option>
</el-select>
</el-row>
<h4>Cascader</h4>
<el-row>
<el-cascader :options="cascadeOptions" v-model="cascaderValue"></el-cascader>
</el-row>
<h4>Switch</h4>
<el-row>
<el-switch v-model="switchValue"></el-switch>
<el-switch
style="margin-left: 40px"
v-model="switchValue"
active-text="Pay by month"
inactive-text="Pay by year"
>
</el-switch>
</el-row>
<h4>Slider</h4>
<el-row style="width: 380px">
<el-slider v-model="slider"></el-slider>
</el-row>
<h4>DatePicker</h4>
<el-row>
<el-date-picker v-model="datePicker" type="date"></el-date-picker>
</el-row>
<h4>Rate</h4>
<el-row>
<el-rate class="demo-line" v-model="rate"></el-rate>
<el-rate
class="demo-line"
v-model="rate"
show-score
text-color="#ff9900"
score-template="{value} points"
>
</el-rate>
</el-row>
<h4>Transfer</h4>
<el-row>
<el-transfer v-model="transfer" filterable :data="transferData">
<el-button class="transfer-footer" slot="left-footer" size="small"
>Operation</el-button
>
<el-button class="transfer-footer" slot="right-footer" size="small"
>Operation</el-button
>
</el-transfer>
</el-row>
<h4>Table</h4>
<el-row>
<el-table :data="tableData" style="width: 70%">
<el-table-column prop="date" label="Date" width="180"></el-table-column>
<el-table-column prop="name" label="Name" width="180"></el-table-column>
<el-table-column prop="address" label="Address"></el-table-column>
</el-table>
</el-row>
<h4>Tag</h4>
<el-row>
<el-tag class="demo-item" closable>Tag One</el-tag>
<el-tag class="demo-item" closable type="success">Tag Two</el-tag>
<el-tag class="demo-item" closable type="info">Tag Three</el-tag>
<el-tag class="demo-item" closable type="warning">Tag Four</el-tag>
<el-tag class="demo-item" closable type="danger">Tag Five</el-tag>
</el-row>
<h4>Progress</h4>
<el-row style="width: 380px">
<el-progress :percentage="20"></el-progress>
<el-progress :percentage="60" status="exception"></el-progress>
<el-progress :percentage="100" status="success"></el-progress>
</el-row>
<h4>Tree</h4>
<el-row style="width: 380px">
<el-tree :data="treeData" :props="defaultTreeProps"></el-tree>
</el-row>
<h4>Pagination</h4>
<el-row>
<el-pagination layout="prev, pager, next" :total="1000"></el-pagination>
</el-row>
<h4>Badge</h4>
<el-row>
<el-badge :value="12" class="demo-item">
<el-button size="small">comments</el-button>
</el-badge>
<el-badge :value="3" class="demo-item">
<el-button size="small">replies</el-button>
</el-badge>
<el-badge :value="1" class="demo-item" type="primary">
<el-button size="small">comments</el-button>
</el-badge>
<el-badge :value="2" class="demo-item" type="warning">
<el-button size="small">replies</el-button>
</el-badge>
</el-row>
<h4>Alert</h4>
<el-row style="width: 380px">
<el-alert
class="demo-item"
title="success alert"
type="success"
show-icon
></el-alert>
<el-alert
class="demo-item"
title="info alert"
type="info"
close-text="Gotcha"
show-icon
></el-alert>
<el-alert
class="demo-item"
title="warning alert"
type="warning"
show-icon
></el-alert>
<el-alert
class="demo-item"
title="error alert"
type="error"
description="more text description"
show-icon
>
</el-alert>
</el-row>
<h4>Loading</h4>
<el-row>
<el-table :data="tableData" style="width: 90%" v-loading="true">
<el-table-column prop="date" label="Date" width="180"></el-table-column>
<el-table-column prop="name" label="Name" width="180"></el-table-column>
<el-table-column prop="address" label="Address"></el-table-column>
</el-table>
</el-row>
<h4>Message</h4>
<el-row>
<div
role="alert"
class="demo-item el-message el-message--success el-message-fade-leave-active el-message-fade-leave-to"
style="
top: 0;
left: 0;
width: 100px;
opacity: 1;
position: relative;
transform: none;
"
>
<i class="el-message__icon el-icon-success"></i>
<p class="el-message__content">Congrats, this is a success message.</p>
<!---->
</div>
<div
role="alert"
class="demo-item el-message el-message--warning el-message-fade-leave-active el-message-fade-leave-to"
style="
top: 0;
left: 0;
width: 100px;
opacity: 1;
position: relative;
transform: none;
"
>
<i class="el-message__icon el-icon-warning"></i>
<p class="el-message__content">Warning, this is a warning message.</p>
<!---->
</div>
<div
role="alert"
class="demo-item el-message el-message--info el-message-fade-leave-active el-message-fade-leave-to"
style="
top: 0;
left: 0;
width: 100px;
opacity: 1;
position: relative;
transform: none;
"
>
<i class="el-message__icon el-icon-info"></i>
<p class="el-message__content">This is a message.</p>
<!---->
</div>
<div
role="alert"
class="demo-item el-message el-message--error is-closable el-message-fade-leave-active el-message-fade-leave-to"
style="
top: 0;
left: 0;
width: 100px;
opacity: 1;
position: relative;
transform: none;
"
>
<i class="el-message__icon el-icon-error"></i>
<p class="el-message__content">Oops, this is a error message.</p>
<i class="el-message__closeBtn el-icon-close"></i>
</div>
</el-row>
<h4>MessageBox</h4>
<el-row>
<div class="el-message-box">
<div class="el-message-box__header">
<div class="el-message-box__title"><!----><span>Warning</span></div>
<button type="button" aria-label="Close" class="el-message-box__headerbtn">
<i class="el-message-box__close el-icon-close"></i>
</button>
</div>
<div class="el-message-box__content">
<div class="el-message-box__status el-icon-warning"></div>
<div class="el-message-box__message">
<p>This will permanently delete the file. Continue?</p>
</div>
<div class="el-message-box__input" style="display: none">
<div class="el-input">
<!----><input
type="text"
autocomplete="off"
placeholder=""
class="el-input__inner"
/>
<!---->
<!---->
<!---->
</div>
<div class="el-message-box__errormsg" style="visibility: hidden"></div>
</div>
</div>
<div class="el-message-box__btns">
<button type="button" class="el-button el-button--default el-button--small">
<!---->
<!----><span> Cancel </span></button
><button
type="button"
class="el-button el-button--default el-button--small el-button--primary"
>
<!---->
<!----><span> OK </span>
</button>
</div>
</div>
</el-row>
<h4>Notification</h4>
<el-row>
<div role="alert" class="el-notification right" style="position: relative; left: 0">
<!---->
<div class="el-notification__group">
<span class="el-notification__title">Notification</span>
<div class="el-notification__content">
<div>This is a message</div>
</div>
<div class="el-notification__closeBtn el-icon-close"></div>
</div>
</div>
</el-row>
<h4>Menu</h4>
<el-row>
<el-menu :default-active="menu" class="el-menu-demo" mode="horizontal">
<el-menu-item index="1">Processing Center</el-menu-item>
<el-submenu index="2">
<template slot="title">Workspace</template>
<el-menu-item index="2-1">item one</el-menu-item>
<el-menu-item index="2-2">item two</el-menu-item>
<el-menu-item index="2-3">item three</el-menu-item>
<el-submenu index="2-4">
<template slot="title">item four</template>
<el-menu-item index="2-4-1">item one</el-menu-item>
<el-menu-item index="2-4-2">item two</el-menu-item>
<el-menu-item index="2-4-3">item three</el-menu-item>
</el-submenu>
</el-submenu>
<el-menu-item index="3" disabled>Info</el-menu-item>
<el-menu-item index="4">
<a href="https://www.ele.me" target="_blank">Orders</a>
</el-menu-item>
</el-menu>
<el-menu default-active="2" class="demo-line">
<el-submenu index="1">
<template slot="title">
<i class="el-icon-location"></i>
<span>Navigator One</span>
</template>
<el-menu-item-group title="Group One">
<el-menu-item index="1-1">item one</el-menu-item>
<el-menu-item index="1-2">item one</el-menu-item>
</el-menu-item-group>
<el-menu-item-group title="Group Two">
<el-menu-item index="1-3">item three</el-menu-item>
</el-menu-item-group>
<el-submenu index="1-4">
<template slot="title">item four</template>
<el-menu-item index="1-4-1">item one</el-menu-item>
</el-submenu>
</el-submenu>
<el-menu-item index="2">
<i class="el-icon-menu"></i>
<span>Navigator Two</span>
</el-menu-item>
<el-menu-item index="3" disabled>
<i class="el-icon-document"></i>
<span>Navigator Three</span>
</el-menu-item>
<el-menu-item index="4">
<i class="el-icon-setting"></i>
<span>Navigator Four</span>
</el-menu-item>
</el-menu>
</el-row>
<h4>Tabs</h4>
<el-row>
<el-tabs v-model="tab" class="demo-item">
<el-tab-pane label="User" name="first">User</el-tab-pane>
<el-tab-pane label="Config" name="second">Config</el-tab-pane>
<el-tab-pane label="Role" name="third">Role</el-tab-pane>
<el-tab-pane label="Task" name="fourth">Task</el-tab-pane>
</el-tabs>
<el-tabs type="card" class="demo-item">
<el-tab-pane label="User">User</el-tab-pane>
<el-tab-pane label="Config">Config</el-tab-pane>
<el-tab-pane label="Role">Role</el-tab-pane>
<el-tab-pane label="Task">Task</el-tab-pane>
</el-tabs>
</el-row>
<h4>Dialog</h4>
<el-row>
<div
role="dialog"
aria-modal="true"
aria-label="Tips"
class="el-dialog"
style="margin: 0"
>
<div class="el-dialog__header">
<span class="el-dialog__title">Tips</span
><button type="button" aria-label="Close" class="el-dialog__headerbtn">
<i class="el-dialog__close el-icon el-icon-close"></i>
</button>
</div>
<div class="el-dialog__body">
<span>This is a message</span>
</div>
<div class="el-dialog__footer">
<span class="dialog-footer"
><button type="button" class="el-button el-button--default">
<!---->
<!----><span>Cancel</span>
</button>
<button type="button" class="el-button el-button--primary">
<!---->
<!----><span>Confirm</span>
</button></span
>
</div>
</div>
</el-row>
<h4>Tooltip</h4>
<el-row>
<div
role="tooltip"
x-placement="top"
class="el-tooltip__popper is-dark"
style="position: relative; width: 40px; text-align: center"
>
Dark
<div x-arrow="" class="popper__arrow"></div>
</div>
<div
role="tooltip"
x-placement="top"
class="el-tooltip__popper is-light"
style="margin-top: 10px; position: relative; width: 40px; text-align: center"
>
Light
<div x-arrow="" class="popper__arrow"></div>
</div>
</el-row>
<h4>Popover</h4>
<el-row>
<div
role="tooltip"
x-placement="top"
id="el-popover-2936"
aria-hidden="true"
class="el-popover el-popper el-popover--plain"
tabindex="0"
style="width: 200px; position: relative"
>
<div class="el-popover__title">Title</div>
this is content, this is content, this is content
<div x-arrow="" class="popper__arrow"></div>
</div>
</el-row>
<h4>Card</h4>
<el-row>
<el-card class="box-card">
<div slot="header" class="clearfix">
<span>Card name</span>
</div>
</el-card>
</el-row>
<h4>Carousel</h4>
<el-row>
<el-carousel height="150px">
<el-carousel-item v-for="item in 4" :key="item">
<h3>{{ item }}</h3>
</el-carousel-item>
</el-carousel>
</el-row>
<h4>Collapse</h4>
<el-row>
<el-collapse v-model="collapse">
<el-collapse-item title="Consistent" name="1">
<div>
Consistent with real life: in line with the process and logic of real life,
and comply with languages and habits that the users are used to;
</div>
</el-collapse-item>
<el-collapse-item title="Feedback" name="2">
<div>
Operation feedback: enable the users to clearly perceive their operations by
style updates and interactive effects;
</div>
</el-collapse-item>
</el-collapse>
</el-row>
<h4>Avatar</h4>
<el-row class="demo-line avatar-demo">
<el-avatar icon="el-icon-user-solid" />
<el-avatar> avatar </el-avatar>
<el-avatar shape="square" fit="contain" :src="avatarData.url"></el-avatar>
<el-avatar size="large"> large </el-avatar>
<el-avatar size="medium"> medium </el-avatar>
<el-avatar size="small"> small </el-avatar>
</el-row>
<h4>Tree</h4>
<el-row class="demo-line">
<el-tree :data="treeData"></el-tree>
</el-row>
</div>
</el-main>
</el-container>
<el-aside width="400px">
<div class="color-wrap">
<el-card class="box-card">
<div slot="header" class="box-card-header">
<span>Color</span>
<el-button size="small" round type="primary" @click.native="copyCssVariables"
>复制变量</el-button
>
</div>
<el-row>
<p>color-primary 主题色</p>
<el-col :span="6">
<el-color-picker v-model="color_primary"></el-color-picker>
</el-col>
<el-col :span="18">
<el-input v-model="color_primary"></el-input>
</el-col>
</el-row>
<el-row>
<p>color-success 成功题色</p>
<el-col :span="6">
<el-color-picker v-model="color_success"></el-color-picker>
</el-col>
<el-col :span="18">
<el-input v-model="color_success"></el-input>
</el-col>
</el-row>
<el-row>
<p>color-warning 警告题色</p>
<el-col :span="6">
<el-color-picker v-model="color_warning"></el-color-picker>
</el-col>
<el-col :span="18">
<el-input v-model="color_warning"></el-input>
</el-col>
</el-row>
<el-row>
<p>color-danger 危险题色</p>
<el-col :span="6">
<el-color-picker v-model="color_danger"></el-color-picker>
</el-col>
<el-col :span="18">
<el-input v-model="color_danger"></el-input>
</el-col>
</el-row>
<el-row>
<p>color-info 信息题色</p>
<el-col :span="6">
<el-color-picker v-model="color_info"></el-color-picker>
</el-col>
<el-col :span="18">
<el-input v-model="color_info"></el-input>
</el-col>
</el-row>
<el-row>
<p>color-text-primary 主要文字颜色</p>
<el-col :span="6">
<el-color-picker v-model="color_text_primary"></el-color-picker>
</el-col>
<el-col :span="18">
<el-input v-model="color_text_primary"></el-input>
</el-col>
</el-row>
<el-row>
<p>color-text-regular 常规文字颜色</p>
<el-col :span="6">
<el-color-picker v-model="color_text_regular"></el-color-picker>
</el-col>
<el-col :span="18">
<el-input v-model="color_text_regular"></el-input>
</el-col>
</el-row>
<el-row>
<p>color-text-secondary 次要文字颜色</p>
<el-col :span="6">
<el-color-picker v-model="color_text_secondary"></el-color-picker>
</el-col>
<el-col :span="18">
<el-input v-model="color_text_secondary"></el-input>
</el-col>
</el-row>
<el-row>
<p>color-text-placeholder 占位文字颜色</p>
<el-col :span="6">
<el-color-picker v-model="color_text_placeholder"></el-color-picker>
</el-col>
<el-col :span="18">
<el-input v-model="color_text_placeholder"></el-input>
</el-col>
</el-row>
<el-row>
<p>border-color-base 一级边框颜色</p>
<el-col :span="6">
<el-color-picker v-model="border_color_base"></el-color-picker>
</el-col>
<el-col :span="18">
<el-input v-model="border_color_base"></el-input>
</el-col>
</el-row>
<el-row>
<p>border-color-light 二级边框颜色</p>
<el-col :span="6">
<el-color-picker v-model="border_color_light"></el-color-picker>
</el-col>
<el-col :span="18">
<el-input v-model="border_color_light"></el-input>
</el-col>
</el-row>
<el-row>
<p>border-color-lighter 三级边框颜色</p>
<el-col :span="6">
<el-color-picker v-model="border_color_lighter"></el-color-picker>
</el-col>
<el-col :span="18">
<el-input v-model="border_color_lighter"></el-input>
</el-col>
</el-row>
<el-row>
<p>border-color-xlight 四级边框颜色</p>
<el-col :span="6">
<el-color-picker v-model="border_color_extra_light"></el-color-picker>
</el-col>
<el-col :span="18">
<el-input v-model="border_color_extra_light"></el-input>
</el-col>
</el-row>
</el-card>
</div>
<el-dialog :visible.sync="visible" title="复制CSS变量">
<pre>{{ cssVariables}}</pre>
<small>使用方式将上面的代码通过style属性添加到项目的html标签上</small>
</el-dialog>
</el-aside>
</el-container>
</div>
</body>
<!-- import Vue before Element -->
<!-- <script src="https://unpkg.com/vue/dist/vue.js"></script> -->
<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
<!-- import JavaScript -->
<script src="https://unpkg.com/element-plus/lib/index.js"></script>
<script>
const original = {
color_primary: '#409EFF',
color_success: '#67C23A',
color_warning: '#E6A23C',
color_danger: '#F56C6C',
color_info: '#909399',
color_white: '#FFFFFF',
color_black: '#000000',
color_text_primary: '#303133',
color_text_regular: '#606266',
color_text_secondary: '#909399',
color_text_placeholder: '#C0C4CC',
border_color_base: '#DCDFE6',
border_color_light: '#E4E7ED',
border_color_lighter: '#EBEEF5',
border_color_extra_light: '#F2F6FC',
font_size_extra_large: '20px',
font_size_large: '18px',
font_size_medium: '16px',
font_size_base: '14px',
font_size_small: '13px',
font_size_extra_small: '12px',
font_weight_primary: 500,
font_weight_secondary: 100,
font_line_height_primary: '24px',
font_line_height_secondary: '16px',
};
Vue.config.devtools = true;
Vue.createApp({
data() {
return {
global: {},
colorLine: ['Primary', 'Success', 'Warning', 'Danger', 'Info'],
color_primary: '',
color_success: '',
color_warning: '',
color_danger: '',
color_info: '',
color_white: '',
color_black: '',
color_text_primary: '',
color_text_regular: '',
color_text_secondary: '',
color_text_placeholder: '',
border_color_base: '',
border_color_light: '',
border_color_lighter: '',
border_color_extra_light: '',
font_size_extra_large: '',
font_size_large: '',
font_size_medium: '',
font_size_base: '',
font_size_small: '',
font_size_extra_small: '',
font_weight_primary: 0,
font_weight_secondary: 0,
font_line_height_primary: '',
font_line_height_secondary: '',
radio: '1',
radio1: 'Washington',
radio2: '1',
checked: true,
checked1: ['Shanghai'],
checked2: true,
input: 'Element',
inputNumber: 1,
treeData: [
{
label: '一级 1',
children: [
{
label: '二级 1-1',
children: [
{
label: '三级 1-1-1',
},
],
},
],
},
{
label: '一级 2',
children: [
{
label: '二级 2-1',
children: [
{
label: '三级 2-1-1',
},
],
},
{
label: '二级 2-2',
children: [
{
label: '三级 2-2-1',
},
],
},
],
},
{
label: '一级 3',
children: [
{
label: '二级 3-1',
children: [
{
label: '三级 3-1-1',
},
],
},
{
label: '二级 3-2',
children: [
{
label: '三级 3-2-1',
},
],
},
],
},
],
selectOptions: [
{
value: 'Option1',
label: 'Option1',
},
{
value: 'Option2',
label: 'Option2',
},
{
value: 'Option3',
label: 'Option3',
},
{
value: 'Option4',
label: 'Option4',
},
{
value: 'Option5',
label: 'Option5',
},
],
selectValue: '',
cascadeOptions: [
{
value: 'guide',
label: 'Guide',
children: [
{
value: 'disciplines',
label: 'Disciplines',
children: [
{
value: 'consistency',
label: 'Consistency',
},
{
value: 'feedback',
label: 'Feedback',
},
],
},
],
},
{
value: 'resource',
label: 'Resource',
children: [
{
value: 'axure',
label: 'Axure Components',
},
{
value: 'sketch',
label: 'Sketch Templates',
},
{
value: 'docs',
label: 'Design Documentation',
},
],
},
],
cascaderValue: [],
switchValue: true,
slider: 28,
datePicker: '',
rate: null,
transferData: (() => {
const data = [];
for (let i = 1; i <= 15; i++) {
data.push({
key: i,
label: `Option ${i}`,
disabled: i % 4 === 0,
});
}
return data;
})(),
transfer: [1, 4],
tableData: [
{
date: '2016-05-03',
name: 'Tom',
address: 'No. 189, Grove St, Los Angeles',
},
{
date: '2016-05-02',
name: 'Tom',
address: 'No. 189, Grove St, Los Angeles',
},
{
date: '2016-05-04',
name: 'Tom',
address: 'No. 189, Grove St, Los Angeles',
},
{
date: '2016-05-01',
name: 'Tom',
address: 'No. 189, Grove St, Los Angeles',
},
],
menu: '1',
tab: 'first',
collapse: ['1'],
treeData: [
{
label: 'Level one 1',
children: [
{
label: 'Level two 1-1',
children: [
{
label: 'Level three 1-1-1',
},
],
},
],
},
{
label: 'Level one 2',
children: [
{
label: 'Level two 2-1',
children: [
{
label: 'Level three 2-1-1',
},
],
},
{
label: 'Level two 2-2',
children: [
{
label: 'Level three 2-2-1',
},
],
},
],
},
{
label: 'Level one 3',
children: [
{
label: 'Level two 3-1',
children: [
{
label: 'Level three 3-1-1',
},
],
},
{
label: 'Level two 3-2',
children: [
{
label: 'Level three 3-2-1',
},
],
},
],
},
],
defaultTreeProps: {
children: 'children',
label: 'label',
},
avatarData: {
url: 'https://fuss10.elemecdn.com/e/5d/4a731a90594a4af544c0c25941171jpeg.jpeg',
},
cssVariables: '',
visible: false,
};
},
watch: {
global: {
immediate: true,
handler(value) {
Object.keys(original).forEach((v) => {
const key = `$--${v.replace(/_/g, '-')}`;
if (value[key]) {
this[v] = value[key];
} else {
this[v] = original[v];
}
});
},
},
color_primary(v) {
this.setCssVariable('color-primary-base', v);
},
color_success(v) {
this.setCssVariable('color-success-base', v);
},
color_warning(v) {
this.setCssVariable('color-warning-base', v);
},
color_danger(v) {
this.setCssVariable('color-danger-base', v);
},
color_info(v) {
this.setCssVariable('color-info-base', v);
},
color_text_primary(v) {
this.setCssVariable('color-text-dark', v);
},
color_text_regular(v) {
this.setCssVariable('color-text-base', v);
},
color_text_secondary(v) {
this.setCssVariable('color-text-light', v);
},
color_text_placeholder(v) {
this.setCssVariable('color-text-lighter', v);
},
border_color_base(v) {
this.setCssVariable('border-color-base', v);
},
border_color_light(v) {
this.setCssVariable('border-color-light', v);
},
border_color_lighter(v) {
this.setCssVariable('border-color-lighter', v);
},
border_color_extra_light(v) {
this.setCssVariable('border-color-xlight', v);
},
},
methods: {
tintColor(a, b) {
return tintColor(a, b);
},
dataProxy(value) {
return this[`color_${value.toLowerCase()}`];
},
setGlobal() {
if (window.userThemeConfig) {
this.global = window.userThemeConfig.global;
}
},
tintColor(c, tint) {
const color = c.replace('#', '');
let red = parseInt(color.slice(0, 2), 16);
let green = parseInt(color.slice(2, 4), 16);
let blue = parseInt(color.slice(4, 6), 16);
if (tint === 0) {
// when primary color is in its rgb space
return [red, green, blue].join(',');
} else {
red += Math.round(tint * (255 - red));
green += Math.round(tint * (255 - green));
blue += Math.round(tint * (255 - blue));
red = red.toString(16);
green = green.toString(16);
blue = blue.toString(16);
return `#${red}${green}${blue}`;
}
},
hexToHSL(hex) {
var result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
var r = parseInt(result[1], 16);
var g = parseInt(result[2], 16);
var b = parseInt(result[3], 16);
(r /= 255), (g /= 255), (b /= 255);
var max = Math.max(r, g, b),
min = Math.min(r, g, b);
var h,
s,
l = (max + min) / 2;
if (max == min) {
h = s = 0; // achromatic
} else {
var d = max - min;
s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
switch (max) {
case r:
h = (g - b) / d + (g < b ? 6 : 0);
break;
case g:
h = (b - r) / d + 2;
break;
case b:
h = (r - g) / d + 4;
break;
}
h /= 6;
}
s = s * 100;
s = Math.round(s);
l = l * 100;
l = Math.round(l);
h = Math.round(360 * h);
return {
h: h,
s: s + '%',
l: l + '%',
};
},
setCssVariable(key, color) {
const hslColor = this.hexToHSL(color);
document.documentElement.style.setProperty(`--${key}-h`, hslColor.h);
document.documentElement.style.setProperty(`--${key}-s`, hslColor.s);
document.documentElement.style.setProperty(`--${key}-l`, hslColor.l);
},
copyCssVariables() {
const cssVariables = document.querySelector('html').getAttribute('style');
this.cssVariables = cssVariables ? cssVariables : '没有进行颜色修改,请先修改颜色!';
this.visible = true;
},
},
}).mount('#app');
</script>
</html>