├── .gitattributes
├── .vscode
└── extensions.json
├── postcss.config.js
├── auto-imports.d.ts
├── tsconfig.node.json
├── src
├── main.ts
├── assets
│ ├── style.scss
│ ├── vue.svg
│ └── preflight.css
├── vite-env.d.ts
├── App.vue
├── components
│ ├── settings-modal.vue
│ └── element-box.vue
└── utils
│ ├── theme.ts
│ └── gen-color.ts
├── index.html
├── tsconfig.json
├── vite.config.ts
├── package.json
├── tailwind.config.js
├── LICENSE
├── public
└── vite.svg
├── components.d.ts
├── .gitignore
├── README.md
└── pnpm-lock.yaml
/.gitattributes:
--------------------------------------------------------------------------------
1 | # Auto detect text files and perform LF normalization
2 | * text=auto
3 |
--------------------------------------------------------------------------------
/.vscode/extensions.json:
--------------------------------------------------------------------------------
1 | {
2 | "recommendations": ["Vue.volar", "Vue.vscode-typescript-vue-plugin"]
3 | }
4 |
--------------------------------------------------------------------------------
/postcss.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | plugins: {
3 | tailwindcss: {},
4 | autoprefixer: {},
5 | },
6 | }
7 |
--------------------------------------------------------------------------------
/auto-imports.d.ts:
--------------------------------------------------------------------------------
1 | /* eslint-disable */
2 | /* prettier-ignore */
3 | // @ts-nocheck
4 | // Generated by unplugin-auto-import
5 | export {}
6 | declare global {
7 |
8 | }
9 |
--------------------------------------------------------------------------------
/tsconfig.node.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "composite": true,
4 | "module": "ESNext",
5 | "moduleResolution": "Node",
6 | "allowSyntheticDefaultImports": true
7 | },
8 | "include": ["vite.config.ts"]
9 | }
10 |
--------------------------------------------------------------------------------
/src/main.ts:
--------------------------------------------------------------------------------
1 | import './assets/style.scss';
2 | import 'element-plus/theme-chalk/src/dark/css-vars.scss';
3 | import { createApp } from 'vue';
4 | import App from './App.vue';
5 | import { setTheme } from './utils/theme';
6 |
7 | setTheme();
8 |
9 | createApp(App).mount('#app');
10 |
--------------------------------------------------------------------------------
/src/assets/style.scss:
--------------------------------------------------------------------------------
1 | @use './preflight.css';
2 |
3 | @tailwind base;
4 | @tailwind components;
5 | @tailwind utilities;
6 |
7 | :root {
8 | font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif;
9 | font-size: 16px;
10 | background-color: var(--el-color-bg);
11 | }
12 |
13 |
--------------------------------------------------------------------------------
/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Vite + Vue + TS
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/src/assets/vue.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/vite-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 |
3 | declare module '*.vue' {
4 | import type { DefineComponent } from 'vue';
5 | const component: DefineComponent<
6 | Record,
7 | Record,
8 | SafeAny
9 | >;
10 | export default component;
11 | }
12 |
13 | declare module '*.css' {
14 | const value: SafeAny;
15 | export = value;
16 | }
17 |
18 | declare module '*.scss' {
19 | const value: SafeAny;
20 | export = value;
21 | }
22 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "ESNext",
4 | "useDefineForClassFields": true,
5 | "module": "ESNext",
6 | "moduleResolution": "Node",
7 | "strict": true,
8 | "jsx": "preserve",
9 | "resolveJsonModule": true,
10 | "isolatedModules": true,
11 | "esModuleInterop": true,
12 | "lib": ["ESNext", "DOM"],
13 | "skipLibCheck": true,
14 | "noEmit": true
15 | },
16 | "include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue"],
17 | "references": [{ "path": "./tsconfig.node.json" }]
18 | }
19 |
--------------------------------------------------------------------------------
/vite.config.ts:
--------------------------------------------------------------------------------
1 | import { defineConfig } from 'vite';
2 | import vue from '@vitejs/plugin-vue';
3 | import AutoImport from 'unplugin-auto-import/vite';
4 | import Components from 'unplugin-vue-components/vite';
5 | import { ElementPlusResolver } from 'unplugin-vue-components/resolvers';
6 |
7 | export default defineConfig({
8 | plugins: [
9 | vue(),
10 | AutoImport({
11 | resolvers: [ElementPlusResolver()],
12 | }),
13 | Components({
14 | resolvers: [
15 | ElementPlusResolver({
16 | importStyle: 'sass',
17 | }),
18 | ],
19 | }),
20 | ],
21 | server: {
22 | hmr: true,
23 | },
24 | });
25 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "elementplus-dynamic-theme",
3 | "private": true,
4 | "version": "0.0.0",
5 | "scripts": {
6 | "dev": "vite",
7 | "build": "vue-tsc && vite build",
8 | "preview": "vite preview"
9 | },
10 | "dependencies": {
11 | "@element-plus/icons-vue": "^2.1.0",
12 | "@types/lodash-es": "^4.17.7",
13 | "@vueuse/core": "^11.3.0",
14 | "element-plus": "^2.3.1",
15 | "lodash-es": "^4.17.21",
16 | "vue": "^3.2.47"
17 | },
18 | "devDependencies": {
19 | "@types/node": "^22.10.0",
20 | "@vitejs/plugin-vue": "^4.1.0",
21 | "autoprefixer": "^10.4.14",
22 | "postcss": "^8.4.21",
23 | "sass": "^1.60.0",
24 | "tailwindcss": "3.1.8",
25 | "typescript": "^4.9.3",
26 | "unplugin-auto-import": "^0.15.2",
27 | "unplugin-vue-components": "^0.24.1",
28 | "vite": "^4.2.0",
29 | "vue-tsc": "^1.2.0"
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/tailwind.config.js:
--------------------------------------------------------------------------------
1 | // 生成颜色css变量名
2 | function genSimilarColorsName(brandName) {
3 | return {
4 | lighter: `var(--${brandName}-lighter-color)`,
5 | light: `var(--${brandName}-light-color)`,
6 | DEFAULT: `var(--${brandName}-color)`,
7 | deep: `var(--${brandName}-deep-color)`,
8 | deeper: `var(--${brandName}-deeper-color)`
9 | };
10 | }
11 |
12 | /** @type {import('tailwindcss').Config} */
13 | module.exports = {
14 | content: ['./src/**/*.{js,jsx,ts,tsx,vue}'],
15 | theme: {
16 | extend: {},
17 | colors: {
18 | white: '#fff',
19 | black: '#191919',
20 | transparent: 'transparent',
21 | // 直接使用css变量
22 | primary: genSimilarColorsName('primary'),
23 | info: genSimilarColorsName('info'),
24 | success: genSimilarColorsName('success'),
25 | warning: genSimilarColorsName('warning'),
26 | danger: genSimilarColorsName('danger')
27 | }
28 | },
29 | corePlugins: {
30 | preflight: false
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2023 xzxldl55
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/src/App.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 | 动态主题色方案
7 |
13 |
14 |
15 |
18 |
19 |
20 |
27 |
28 |
29 |
30 |
38 |
--------------------------------------------------------------------------------
/public/vite.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/components.d.ts:
--------------------------------------------------------------------------------
1 | /* eslint-disable */
2 | /* prettier-ignore */
3 | // @ts-nocheck
4 | // Generated by unplugin-vue-components
5 | // Read more: https://github.com/vuejs/core/pull/3399
6 | import '@vue/runtime-core'
7 |
8 | export {}
9 |
10 | declare module '@vue/runtime-core' {
11 | export interface GlobalComponents {
12 | ElButton: typeof import('element-plus/es')['ElButton']
13 | ElCheckbox: typeof import('element-plus/es')['ElCheckbox']
14 | ElCheckboxGroup: typeof import('element-plus/es')['ElCheckboxGroup']
15 | ElCol: typeof import('element-plus/es')['ElCol']
16 | ElColorPicker: typeof import('element-plus/es')['ElColorPicker']
17 | ElDatePicker: typeof import('element-plus/es')['ElDatePicker']
18 | ElDialog: typeof import('element-plus/es')['ElDialog']
19 | ElementBox: typeof import('./src/components/element-box.vue')['default']
20 | ElForm: typeof import('element-plus/es')['ElForm']
21 | ElFormItem: typeof import('element-plus/es')['ElFormItem']
22 | ElInput: typeof import('element-plus/es')['ElInput']
23 | ElOption: typeof import('element-plus/es')['ElOption']
24 | ElRadio: typeof import('element-plus/es')['ElRadio']
25 | ElRadioGroup: typeof import('element-plus/es')['ElRadioGroup']
26 | ElRow: typeof import('element-plus/es')['ElRow']
27 | ElSelect: typeof import('element-plus/es')['ElSelect']
28 | ElSwitch: typeof import('element-plus/es')['ElSwitch']
29 | ElTag: typeof import('element-plus/es')['ElTag']
30 | ElTimePicker: typeof import('element-plus/es')['ElTimePicker']
31 | SettingsModal: typeof import('./src/components/settings-modal.vue')['default']
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/src/components/settings-modal.vue:
--------------------------------------------------------------------------------
1 |
2 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 | 适用配置
29 |
30 |
31 |
32 |
33 |
54 |
55 |
56 |
--------------------------------------------------------------------------------
/src/utils/theme.ts:
--------------------------------------------------------------------------------
1 | /**
2 | * 主题色相关
3 | */
4 |
5 | import { merge } from 'lodash-es';
6 | import { genMixColor } from './gen-color';
7 | import { useDark } from '@vueuse/core';
8 |
9 | const THEME_KEY = 'theme';
10 |
11 | export type Theme = {
12 | colors: {
13 | primary?: string;
14 | info?: string;
15 | warning?: string;
16 | success?: string;
17 | danger?: string;
18 | };
19 | };
20 |
21 | // 默认主题
22 | export const defaultThemeConfig: Theme = {
23 | colors: {
24 | primary: '#409EFF',
25 | info: '#eeeeee',
26 | warning: '#fbbd23',
27 | danger: '#f87272',
28 | success: '#36d399',
29 | },
30 | };
31 |
32 | // 设置css变量
33 | function setStyleProperty(propName: string, value: string) {
34 | document.documentElement.style.setProperty(propName, value);
35 | }
36 |
37 | function updateThemeColorVar({ colors }: Theme) {
38 | const isDark = useDark();
39 |
40 | // 遍历当前主题色,生成混合色,并更新到css变量(tailwind + elementPlus)
41 | for (const brand in colors) {
42 | updateBrandExtendColorsVar(
43 | colors[brand as keyof Theme['colors']] as string,
44 | brand
45 | );
46 | }
47 |
48 | function updateBrandExtendColorsVar(color: string, name: string) {
49 | let { DEFAULT, dark, light } = genMixColor(color, isDark.value);
50 |
51 | // 每种主题色由浅到深分为五个阶梯以供开发者使用。
52 | setStyleProperty(`--${name}-lighter-color`, light[5]);
53 | setStyleProperty(`--${name}-light-color`, light[3]);
54 | setStyleProperty(`--${name}-color`, DEFAULT);
55 | setStyleProperty(`--${name}-deep-color`, dark[2]);
56 | setStyleProperty(`--${name}-deeper-color`, dark[4]);
57 |
58 | // elementPlus主题色更新
59 | setStyleProperty(`--el-color-${name}`, DEFAULT);
60 | setStyleProperty(`--el-color-${name}-dark-2`, dark[2]);
61 | setStyleProperty(`--el-color-${name}-light-3`, light[3]);
62 | setStyleProperty(`--el-color-${name}-light-5`, light[5]);
63 | setStyleProperty(`--el-color-${name}-light-7`, light[7]);
64 | setStyleProperty(`--el-color-${name}-light-8`, light[8]);
65 | setStyleProperty(`--el-color-${name}-light-9`, light[9]);
66 | }
67 | }
68 |
69 | // 获取主题对象
70 | export const getTheme = (): Theme => {
71 | const theme = localStorage.getItem(THEME_KEY);
72 | return theme ? JSON.parse(theme) : defaultThemeConfig;
73 | };
74 |
75 | export const setTheme = (data: Theme = defaultThemeConfig) => {
76 | const oldTheme = getTheme();
77 |
78 | // 将传入配置与旧的主题合并,以填补缺省的值
79 | data = merge(oldTheme, data || {});
80 |
81 | // 将缓存到浏览器
82 | localStorage.setItem(THEME_KEY, JSON.stringify(data));
83 |
84 | // 将主题更新到css变量中,使之生效
85 | updateThemeColorVar(data);
86 | };
87 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 | lerna-debug.log*
8 | .pnpm-debug.log*
9 |
10 | # Diagnostic reports (https://nodejs.org/api/report.html)
11 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
12 |
13 | # Runtime data
14 | pids
15 | *.pid
16 | *.seed
17 | *.pid.lock
18 |
19 | # Directory for instrumented libs generated by jscoverage/JSCover
20 | lib-cov
21 |
22 | # Coverage directory used by tools like istanbul
23 | coverage
24 | *.lcov
25 |
26 | # nyc test coverage
27 | .nyc_output
28 |
29 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
30 | .grunt
31 |
32 | # Bower dependency directory (https://bower.io/)
33 | bower_components
34 |
35 | # node-waf configuration
36 | .lock-wscript
37 |
38 | # Compiled binary addons (https://nodejs.org/api/addons.html)
39 | build/Release
40 |
41 | # Dependency directories
42 | node_modules/
43 | jspm_packages/
44 |
45 | # Snowpack dependency directory (https://snowpack.dev/)
46 | web_modules/
47 |
48 | # TypeScript cache
49 | *.tsbuildinfo
50 |
51 | # Optional npm cache directory
52 | .npm
53 |
54 | # Optional eslint cache
55 | .eslintcache
56 |
57 | # Optional stylelint cache
58 | .stylelintcache
59 |
60 | # Microbundle cache
61 | .rpt2_cache/
62 | .rts2_cache_cjs/
63 | .rts2_cache_es/
64 | .rts2_cache_umd/
65 |
66 | # Optional REPL history
67 | .node_repl_history
68 |
69 | # Output of 'npm pack'
70 | *.tgz
71 |
72 | # Yarn Integrity file
73 | .yarn-integrity
74 |
75 | # dotenv environment variable files
76 | .env
77 | .env.development.local
78 | .env.test.local
79 | .env.production.local
80 | .env.local
81 |
82 | # parcel-bundler cache (https://parceljs.org/)
83 | .cache
84 | .parcel-cache
85 |
86 | # Next.js build output
87 | .next
88 | out
89 |
90 | # Nuxt.js build / generate output
91 | .nuxt
92 | dist
93 |
94 | # Gatsby files
95 | .cache/
96 | # Comment in the public line in if your project uses Gatsby and not Next.js
97 | # https://nextjs.org/blog/next-9-1#public-directory-support
98 | # public
99 |
100 | # vuepress build output
101 | .vuepress/dist
102 |
103 | # vuepress v2.x temp and cache directory
104 | .temp
105 | .cache
106 |
107 | # Serverless directories
108 | .serverless/
109 |
110 | # FuseBox cache
111 | .fusebox/
112 |
113 | # DynamoDB Local files
114 | .dynamodb/
115 |
116 | # TernJS port file
117 | .tern-port
118 |
119 | # Stores VSCode versions used for testing VSCode extensions
120 | .vscode-test
121 |
122 | # yarn v2
123 | .yarn/cache
124 | .yarn/unplugged
125 | .yarn/build-state.yml
126 | .yarn/install-state.gz
127 | .pnp.*
128 |
--------------------------------------------------------------------------------
/src/components/element-box.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | 按钮:
5 |
6 |
7 | primary 按钮
8 |
9 |
10 | success 按钮
11 |
12 |
13 | danger 按钮
14 |
15 |
16 | info 按钮
17 |
18 |
19 | warning 按钮
20 |
21 |
22 | 表单:
23 |
24 |
25 |
26 |
27 |
28 |
32 |
33 |
34 |
35 |
36 |
37 |
42 | -
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 | Create
67 | Cancel
68 |
69 |
70 | 标签:
71 |
72 | Dark
73 |
80 | {{ item.label }}
81 |
82 |
90 | {{ item.label }}
91 |
92 |
93 |
94 | Light
95 |
102 | {{ item.label }}
103 |
104 |
112 | {{ item.label }}
113 |
114 |
115 |
116 | Plain
117 |
124 | {{ item.label }}
125 |
126 |
134 | {{ item.label }}
135 |
136 |
137 |
138 |
139 |
168 |
169 |
174 |
--------------------------------------------------------------------------------
/src/assets/preflight.css:
--------------------------------------------------------------------------------
1 | /*
2 | Tailwindcss 的preflight样式,这里手动进行导入,并删除与element-plus冲突的部分样式(el-button)
3 | */
4 |
5 | /*
6 | 1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4)
7 | 2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116)
8 | */
9 |
10 | *,
11 | ::before,
12 | ::after {
13 | box-sizing: border-box; /* 1 */
14 | border-width: 0; /* 2 */
15 | border-style: solid; /* 2 */
16 | border-color: #ccc, currentColor; /* 2 */
17 | }
18 |
19 | ::before,
20 | ::after {
21 | --tw-content: '';
22 | }
23 |
24 | /*
25 | 1. Use a consistent sensible line-height in all browsers.
26 | 2. Prevent adjustments of font size after orientation changes in iOS.
27 | 3. Use a more readable tab size.
28 | 4. Use the user's configured `sans` font-family by default.
29 | */
30 |
31 | html {
32 | line-height: 1.5; /* 1 */
33 | -webkit-text-size-adjust: 100%; /* 2 */
34 | -moz-tab-size: 4; /* 3 */
35 | tab-size: 4; /* 3 */
36 | font-family: theme('fontFamily.sans'), ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; /* 4 */
37 | }
38 |
39 | /*
40 | 1. Remove the margin in all browsers.
41 | 2. Inherit line-height from `html` so users can set them as a class directly on the `html` element.
42 | */
43 |
44 | body {
45 | margin: 0; /* 1 */
46 | line-height: inherit; /* 2 */
47 | }
48 |
49 | /*
50 | 1. Add the correct height in Firefox.
51 | 2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)
52 | 3. Ensure horizontal rules are visible by default.
53 | */
54 |
55 | hr {
56 | height: 0; /* 1 */
57 | color: inherit; /* 2 */
58 | border-top-width: 1px; /* 3 */
59 | }
60 |
61 | /*
62 | Add the correct text decoration in Chrome, Edge, and Safari.
63 | */
64 |
65 | abbr:where([title]) {
66 | text-decoration: underline dotted;
67 | }
68 |
69 | /*
70 | Remove the default font size and weight for headings.
71 | */
72 |
73 | /* h1,
74 | h2,
75 | h3,
76 | h4,
77 | h5,
78 | h6 {
79 | font-size: inherit;
80 | font-weight: inherit;
81 | } */
82 |
83 | /*
84 | Reset links to optimize for opt-in styling instead of opt-out.
85 | */
86 |
87 | a {
88 | color: inherit;
89 | text-decoration: inherit;
90 | }
91 |
92 | /*
93 | Add the correct font weight in Edge and Safari.
94 | */
95 |
96 | b,
97 | strong {
98 | font-weight: bolder;
99 | }
100 |
101 | /*
102 | 1. Use the user's configured `mono` font family by default.
103 | 2. Correct the odd `em` font sizing in all browsers.
104 | */
105 |
106 | code,
107 | kbd,
108 | samp,
109 | pre {
110 | font-family: theme('fontFamily.mono'), ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; /* 1 */
111 | font-size: 1em; /* 2 */
112 | }
113 |
114 | /*
115 | Add the correct font size in all browsers.
116 | */
117 |
118 | small {
119 | font-size: 80%;
120 | }
121 |
122 | /*
123 | Prevent `sub` and `sup` elements from affecting the line height in all browsers.
124 | */
125 |
126 | sub,
127 | sup {
128 | font-size: 75%;
129 | line-height: 0;
130 | position: relative;
131 | vertical-align: baseline;
132 | }
133 |
134 | sub {
135 | bottom: -0.25em;
136 | }
137 |
138 | sup {
139 | top: -0.5em;
140 | }
141 |
142 | /*
143 | 1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297)
144 | 2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016)
145 | 3. Remove gaps between table borders by default.
146 | */
147 |
148 | table {
149 | text-indent: 0; /* 1 */
150 | border-color: inherit; /* 2 */
151 | border-collapse: collapse; /* 3 */
152 | }
153 |
154 | /*
155 | 1. Change the font styles in all browsers.
156 | 2. Remove the margin in Firefox and Safari.
157 | 3. Remove default padding in all browsers.
158 | */
159 |
160 | button,
161 | input,
162 | optgroup,
163 | select,
164 | textarea {
165 | font-family: inherit; /* 1 */
166 | font-size: 100%; /* 1 */
167 | font-weight: inherit; /* 1 */
168 | line-height: inherit; /* 1 */
169 | color: inherit; /* 1 */
170 | margin: 0; /* 2 */
171 | padding: 0; /* 3 */
172 | }
173 |
174 | /*
175 | Remove the inheritance of text transform in Edge and Firefox.
176 | */
177 |
178 | button,
179 | select {
180 | text-transform: none;
181 | }
182 |
183 | /*
184 | Use the modern Firefox focus style for all focusable elements.
185 | */
186 |
187 | :-moz-focusring {
188 | outline: auto;
189 | }
190 |
191 | /*
192 | Remove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737)
193 | */
194 |
195 | :-moz-ui-invalid {
196 | box-shadow: none;
197 | }
198 |
199 | /*
200 | Add the correct vertical alignment in Chrome and Firefox.
201 | */
202 |
203 | progress {
204 | vertical-align: baseline;
205 | }
206 |
207 | /*
208 | Correct the cursor style of increment and decrement buttons in Safari.
209 | */
210 |
211 | ::-webkit-inner-spin-button,
212 | ::-webkit-outer-spin-button {
213 | height: auto;
214 | }
215 |
216 | /*
217 | 1. Correct the odd appearance in Chrome and Safari.
218 | 2. Correct the outline style in Safari.
219 | */
220 |
221 | [type='search'] {
222 | -webkit-appearance: textfield; /* 1 */
223 | outline-offset: -2px; /* 2 */
224 | }
225 |
226 | /*
227 | Remove the inner padding in Chrome and Safari on macOS.
228 | */
229 |
230 | ::-webkit-search-decoration {
231 | -webkit-appearance: none;
232 | }
233 |
234 | /*
235 | 1. Correct the inability to style clickable types in iOS and Safari.
236 | 2. Change font properties to `inherit` in Safari.
237 | */
238 |
239 | ::-webkit-file-upload-button {
240 | -webkit-appearance: button; /* 1 */
241 | font: inherit; /* 2 */
242 | }
243 |
244 | /*
245 | Add the correct display in Chrome and Safari.
246 | */
247 |
248 | summary {
249 | display: list-item;
250 | }
251 |
252 | /*
253 | Removes the default spacing and border for appropriate elements.
254 | */
255 |
256 | blockquote,
257 | dl,
258 | dd,
259 | h1,
260 | h2,
261 | h3,
262 | h4,
263 | h5,
264 | h6,
265 | hr,
266 | figure,
267 | p,
268 | pre {
269 | margin: 0;
270 | }
271 |
272 | fieldset {
273 | margin: 0;
274 | padding: 0;
275 | }
276 |
277 | legend {
278 | padding: 0;
279 | }
280 |
281 | ol,
282 | ul,
283 | menu {
284 | list-style: none;
285 | margin: 0;
286 | padding: 0;
287 | }
288 |
289 | /*
290 | Prevent resizing textareas horizontally by default.
291 | */
292 |
293 | textarea {
294 | resize: vertical;
295 | }
296 |
297 | /*
298 | 1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300)
299 | 2. Set the default placeholder color to the user's configured gray 400 color.
300 | */
301 |
302 | input::placeholder,
303 | textarea::placeholder {
304 | opacity: 1; /* 1 */
305 | color: #ccc, #9ca3af; /* 2 */
306 | }
307 |
308 | /*
309 | Set the default cursor for buttons.
310 | */
311 |
312 | button,
313 | [role="button"] {
314 | cursor: pointer;
315 | }
316 |
317 | /*
318 | Make sure disabled buttons don't get the pointer cursor.
319 | */
320 | :disabled {
321 | cursor: default;
322 | }
323 |
324 | /*
325 | 1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14)
326 | 2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210)
327 | This can trigger a poorly considered lint error in some tools but is included by design.
328 | */
329 |
330 | img,
331 | svg,
332 | video,
333 | canvas,
334 | audio,
335 | iframe,
336 | embed,
337 | object {
338 | display: block; /* 1 */
339 | vertical-align: middle; /* 2 */
340 | }
341 |
342 | /*
343 | Constrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14)
344 | */
345 |
346 | img,
347 | video {
348 | max-width: 100%;
349 | height: auto;
350 | }
--------------------------------------------------------------------------------
/src/utils/gen-color.ts:
--------------------------------------------------------------------------------
1 | /**
2 | * 颜色生成
3 | */
4 |
5 | type RGB = {
6 | r: number;
7 | g: number;
8 | b: number;
9 | };
10 | type HSL = {
11 | h: number;
12 | s: number;
13 | l: number;
14 | };
15 |
16 | type HEX_VALUE =
17 | | '0'
18 | | '1'
19 | | '2'
20 | | '3'
21 | | '4'
22 | | '5'
23 | | '6'
24 | | '7'
25 | | '8'
26 | | '9'
27 | | 'A'
28 | | 'B'
29 | | 'C'
30 | | 'D'
31 | | 'E'
32 | | 'F';
33 |
34 | // 组合字符串类型枚举的数量太多了,没办法限定了直接string
35 | // type HEX =
36 | // | `#${HEX_VALUE}${HEX_VALUE}${HEX_VALUE}`
37 | // | `#${HEX_VALUE}${HEX_VALUE}${HEX_VALUE}${HEX_VALUE}${HEX_VALUE}${HEX_VALUE}`;
38 | type HEX = string;
39 |
40 | type GenColorList = {
41 | 1: string;
42 | 2: string;
43 | 3: string;
44 | 4: string;
45 | 5: string;
46 | 6: string;
47 | 7: string;
48 | 8: string;
49 | 9: string;
50 | };
51 |
52 | const RGBUnit = 255;
53 | const HEX_MAP: Record = {
54 | 0: 0,
55 | 1: 1,
56 | 2: 2,
57 | 3: 3,
58 | 4: 4,
59 | 5: 5,
60 | 6: 6,
61 | 7: 7,
62 | 8: 8,
63 | 9: 9,
64 | A: 10,
65 | B: 11,
66 | C: 12,
67 | D: 13,
68 | E: 14,
69 | F: 15,
70 | };
71 |
72 | // 归一化处理,统一返回 HEX 类型的颜色值
73 | function normalizationColor(color: string): HEX {
74 | const prefix = /^(#|hsl|rgb|rgba)/i.exec(color)?.[1];
75 |
76 | if (!prefix) {
77 | throw new TypeError('color is invalid.');
78 | }
79 |
80 | const colorVal = color.replace(prefix, '').trim();
81 | if (prefix === '#') {
82 | return fixHexVal(colorVal);
83 | } else if (prefix.toLocaleLowerCase() === 'hsl') {
84 | return fixHslVal(colorVal);
85 | } else {
86 | return fixRgbVal(colorVal);
87 | }
88 |
89 | function fixHexVal(val: string) {
90 | const len = val.length;
91 | if (len === 8) {
92 | return `#${val.substring(0, 6)}`; // 舍弃掉透明度
93 | } else if (len === 6) {
94 | return `#${val}`;
95 | } else if (len === 3) {
96 | return val.split('').reduce((pre, cur) => `${pre}${cur + cur}`, '#');
97 | } else {
98 | throw new TypeError('hex color is invalid.');
99 | }
100 | }
101 |
102 | function fixHslVal(val: string) {
103 | const hslVal = val
104 | .substring(1, val.length - 1)
105 | .split(',')
106 | .map((v) => parseInt(v.trim()));
107 | return hslToHex({
108 | h: hslVal[0],
109 | s: hslVal[1],
110 | l: hslVal[2],
111 | });
112 | }
113 |
114 | function fixRgbVal(val: string) {
115 | const rgb = val
116 | .substring(1, val.length - 1)
117 | .split(',')
118 | .map((v) => parseInt(v.trim()));
119 |
120 | // 舍弃掉alphe
121 | return rgbToHex({
122 | r: rgb[0],
123 | g: rgb[1],
124 | b: rgb[2],
125 | });
126 | }
127 | }
128 |
129 | /**
130 | * RGB颜色转HSL颜色值
131 | * @param r 红色值
132 | * @param g 绿色值
133 | * @param b 蓝色值
134 | * @returns { h: [0, 360]; s: [0, 1]; l: [0, 1] }
135 | */
136 | function rgbToHsl(rgb: RGB): HSL {
137 | let { r, g, b } = rgb;
138 | const hsl = {
139 | h: 0,
140 | s: 0,
141 | l: 0,
142 | };
143 |
144 | // 计算rgb基数 ∈ [0, 1]
145 | r /= RGBUnit;
146 | g /= RGBUnit;
147 | b /= RGBUnit;
148 | const max = Math.max(r, g, b);
149 | const min = Math.min(r, g, b);
150 |
151 | // 计算h
152 | if (max === min) {
153 | hsl.h = 0;
154 | } else if (max === r) {
155 | hsl.h = 60 * ((g - b) / (max - min)) + (g >= b ? 0 : 360);
156 | } else if (max === g) {
157 | hsl.h = 60 * ((b - r) / (max - min)) + 120;
158 | } else {
159 | hsl.h = 60 * ((r - g) / (max - min)) + 240;
160 | }
161 | hsl.h = hsl.h > 360 ? hsl.h - 360 : hsl.h;
162 |
163 | // 计算l
164 | hsl.l = (max + min) / 2;
165 |
166 | // 计算s
167 | if (hsl.l === 0 || max === min) {
168 | // 灰/白/黑
169 | hsl.s = 0;
170 | } else if (hsl.l > 0 && hsl.l <= 0.5) {
171 | hsl.s = (max - min) / (max + min);
172 | } else {
173 | hsl.s = (max - min) / (2 - (max + min));
174 | }
175 |
176 | return hsl;
177 | }
178 |
179 | /**
180 | * hsl -> rgb
181 | * @param h [0, 360]
182 | * @param s [0, 1]
183 | * @param l [0, 1]
184 | * @returns RGB
185 | */
186 | function hslToRgb(hsl: HSL): RGB {
187 | const { h, s, l } = hsl;
188 | const q = l < 0.5 ? l * (1 + s) : l + s - l * s;
189 | const p = 2 * l - q;
190 | const hUnit = h / 360; // 色相转换为 [0, 1]
191 |
192 | const Cr = fillCircleVal(hUnit + 1 / 3);
193 | const Cg = fillCircleVal(hUnit);
194 | const Cb = fillCircleVal(hUnit - 1 / 3);
195 |
196 | // 保持 [0, 1] 环状取值
197 | function fillCircleVal(val: number): number {
198 | return val < 0 ? val + 1 : val > 1 ? val - 1 : val;
199 | }
200 |
201 | function computedRgb(val: number): number {
202 | let colorVal: number;
203 | if (val < 1 / 6) {
204 | colorVal = p + (q - p) * 6 * val;
205 | } else if (val >= 1 / 6 && val < 1 / 2) {
206 | colorVal = q;
207 | } else if (val >= 1 / 2 && val < 2 / 3) {
208 | colorVal = p + (q - p) * 6 * (2 / 3 - val);
209 | } else {
210 | colorVal = p;
211 | }
212 | return colorVal * 255;
213 | }
214 |
215 | return {
216 | r: Number(computedRgb(Cr).toFixed(0)),
217 | g: Number(computedRgb(Cg).toFixed(0)),
218 | b: Number(computedRgb(Cb).toFixed(0)),
219 | };
220 | }
221 |
222 | /**
223 | * 16进制颜色转换RGB
224 | * @param color #rrggbb
225 | * @returns RGB
226 | */
227 | function hexToRGB(hex: HEX): RGB {
228 | hex = hex.toUpperCase();
229 | const hexRegExp = /^#([0-9A-F]{6})$/;
230 | if (!hexRegExp.test(hex)) {
231 | throw new Error('请传入合法的16进制颜色值,eg: #FF0000');
232 | }
233 |
234 | const hexValArr = (hexRegExp.exec(hex)?.[1] || '000000').split(
235 | ''
236 | ) as Array;
237 |
238 | return {
239 | r: HEX_MAP[hexValArr[0]] * 16 + HEX_MAP[hexValArr[1]],
240 | g: HEX_MAP[hexValArr[2]] * 16 + HEX_MAP[hexValArr[3]],
241 | b: HEX_MAP[hexValArr[4]] * 16 + HEX_MAP[hexValArr[5]],
242 | };
243 | }
244 |
245 | /**
246 | * rgb 转 16进制
247 | * @param rgb RGB
248 | * @returns #HEX{6}
249 | */
250 | function rgbToHex(rgb: RGB): HEX {
251 | const HEX_MAP_REVERSE: Record = {};
252 | for (const key in HEX_MAP) {
253 | HEX_MAP_REVERSE[HEX_MAP[key as HEX_VALUE]] = key as HEX_VALUE;
254 | }
255 | function getRemainderAndQuotient(val: number): `${HEX_VALUE}${HEX_VALUE}` {
256 | val = Math.round(val);
257 | return `${HEX_MAP_REVERSE[Math.floor(val / 16)]}${
258 | HEX_MAP_REVERSE[val % 16]
259 | }`;
260 | }
261 |
262 | return `#${getRemainderAndQuotient(rgb.r)}${getRemainderAndQuotient(
263 | rgb.g
264 | )}${getRemainderAndQuotient(rgb.b)}`;
265 | }
266 |
267 | // hsl 转 16进制
268 | function hslToHex(hsl: HSL): HEX {
269 | return rgbToHex(hslToRgb(hsl));
270 | }
271 |
272 | // 16进制 转 hsl
273 | function hexToHsl(hex: HEX): HSL {
274 | return rgbToHsl(hexToRGB(hex));
275 | }
276 |
277 | // 混合基础色获取
278 | function getMixColorFromVar(isDark?: boolean) {
279 | const VAR_WHITE = '--el-color-white';
280 | const VAR_BLACK = '--el-color-black';
281 | const VAR_BG = '--el-bg-color';
282 |
283 | let mixLightColor, mixDarkColor;
284 |
285 | if (isDark) {
286 | mixLightColor = getComputedStyle(document.documentElement)
287 | .getPropertyValue(VAR_BG)
288 | .trim();
289 | mixDarkColor = getComputedStyle(document.documentElement)
290 | .getPropertyValue(VAR_WHITE)
291 | .trim();
292 | } else {
293 | mixLightColor = getComputedStyle(document.documentElement)
294 | .getPropertyValue(VAR_WHITE)
295 | .trim();
296 | mixDarkColor = getComputedStyle(document.documentElement)
297 | .getPropertyValue(VAR_BLACK)
298 | .trim();
299 | }
300 |
301 | mixLightColor = hexToRGB(normalizationColor(mixLightColor));
302 | mixDarkColor = hexToRGB(normalizationColor(mixDarkColor));
303 |
304 | return {
305 | mixLightColor,
306 | mixDarkColor,
307 | };
308 | }
309 |
310 | // 生成混合色(混黑 + 混白)
311 | function genMixColor(
312 | base: string,
313 | isDark?: boolean
314 | ): {
315 | DEFAULT: HEX;
316 | dark: GenColorList;
317 | light: GenColorList;
318 | } {
319 | // 基准色统一转换为RGB
320 | base = normalizationColor(base);
321 | const rgbBase = hexToRGB(base);
322 |
323 | const { mixLightColor, mixDarkColor } = getMixColorFromVar(isDark);
324 |
325 | // 混合色
326 | function mix(color: RGB, mixColor: RGB, weight: number): RGB {
327 | return {
328 | r: color.r * (1 - weight) + mixColor.r * weight,
329 | g: color.g * (1 - weight) + mixColor.g * weight,
330 | b: color.b * (1 - weight) + mixColor.b * weight,
331 | };
332 | }
333 |
334 | return {
335 | DEFAULT: base,
336 | dark: {
337 | 1: rgbToHex(mix(rgbBase, mixDarkColor, 0.1)),
338 | 2: rgbToHex(mix(rgbBase, mixDarkColor, 0.2)),
339 | 3: rgbToHex(mix(rgbBase, mixDarkColor, 0.3)),
340 | 4: rgbToHex(mix(rgbBase, mixDarkColor, 0.4)),
341 | 5: rgbToHex(mix(rgbBase, mixDarkColor, 0.5)),
342 | 6: rgbToHex(mix(rgbBase, mixDarkColor, 0.6)),
343 | 7: rgbToHex(mix(rgbBase, mixDarkColor, 0.7)),
344 | 8: rgbToHex(mix(rgbBase, mixDarkColor, 0.8)),
345 | 9: rgbToHex(mix(rgbBase, mixDarkColor, 0.9)),
346 | },
347 | light: {
348 | 1: rgbToHex(mix(rgbBase, mixLightColor, 0.1)),
349 | 2: rgbToHex(mix(rgbBase, mixLightColor, 0.2)),
350 | 3: rgbToHex(mix(rgbBase, mixLightColor, 0.3)),
351 | 4: rgbToHex(mix(rgbBase, mixLightColor, 0.4)),
352 | 5: rgbToHex(mix(rgbBase, mixLightColor, 0.5)),
353 | 6: rgbToHex(mix(rgbBase, mixLightColor, 0.6)),
354 | 7: rgbToHex(mix(rgbBase, mixLightColor, 0.7)),
355 | 8: rgbToHex(mix(rgbBase, mixLightColor, 0.8)),
356 | 9: rgbToHex(mix(rgbBase, mixLightColor, 0.9)),
357 | },
358 | };
359 | }
360 |
361 | export {
362 | genMixColor,
363 | rgbToHsl,
364 | rgbToHex,
365 | hslToRgb,
366 | hslToHex,
367 | hexToRGB,
368 | hexToHsl,
369 | };
370 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | 具体项目详解可查看:
2 |
3 | [基于elementPlus + Tailwindcss的动态主题配置方案](https://juejin.cn/post/7216217118588321853)
4 |
5 | [elementPlus 自定义主题在暗黑模式下的问题探究](https://juejin.cn/post/7442573821444390949)
6 |
7 | # 基于elementPlus + Tailwindcss的动态主题配置方案
8 | elementPlus + tailwind 动态主题色配置方案
9 |
10 | ## 依赖安装
11 |
12 | ### 1. tailwindcss安装
13 |
14 | - 依赖安装
15 |
16 | > pnpm install -D tailwindcss@latest postcss@latest autoprefixer@latest
17 |
18 | - 配置初始化
19 |
20 | > npx tailwindcss init -p
21 |
22 | **上述操作将自动在项目添加 `postcss.config.js` 与 `tailwind.config.js` 配置文件,将 `tailwindcss` 引入项目,具体配置内容我们暂时无需修改使用默认的即可**
23 |
24 | - 项目CSS中引入`tailwindcss`的样式内容
25 |
26 | ```css
27 | /* index.css(入口文件中引入该入口样式文件) */
28 | @tailwind base;
29 | @tailwind components;
30 | @tailwind utilities;
31 | /* ...其他样式 */
32 | ```
33 |
34 | - 至此`tailwindcss`已经引入项目,但要使得其在我们的vue项目中生效还需要最后一步,在`tailwind.config.js`中修改`content`字段
35 |
36 | ```js
37 | /** @type {import('tailwindcss').Config} */
38 | module.exports = {
39 | content: ['./src/**/*.{js,jsx,ts,tsx,vue}'], // 这里配置要使用Tailwind className的文件地址(tailwind亦将根据这些文件自动进行purge,移除未使用过的类名)
40 | theme: {
41 | extend: {},
42 | },
43 | plugins: []
44 | }
45 |
46 | ```
47 |
48 | ### 2. ElementPlus安装
49 |
50 | - 依赖安装
51 |
52 | > pnpm add element-plus
53 |
54 | - 引入到项目
55 |
56 | **这里我们用自动按需导入,从而可以引出另一个Tailwind + ElementPlus的问题**
57 |
58 | > pnpm add -D unplugin-vue-components unplugin-auto-import
59 |
60 | 安装自动导入插件,并在`vite.config.ts`使用
61 |
62 | ```ts
63 | import { defineConfig } from 'vite';
64 | import vue from '@vitejs/plugin-vue';
65 | import AutoImport from 'unplugin-auto-import/vite';
66 | import Components from 'unplugin-vue-components/vite';
67 | import { ElementPlusResolver } from 'unplugin-vue-components/resolvers';
68 |
69 | export default defineConfig({
70 | plugins: [
71 | vue(),
72 | AutoImport({
73 | resolvers: [ElementPlusResolver()],
74 | }),
75 | Components({
76 | resolvers: [ElementPlusResolver()],
77 | }),
78 | ],
79 | });
80 | ```
81 |
82 | 到这里,我们就可以直接在项目中使用 `ElementPlus` 的组件了
83 |
84 | **elementPlus与Tailwind冲突问题(最新版本无该问题)**
85 |
86 | 默认情况下`tailwind`会自动导入一份初始化的样式文件(类似我们常用的`reset.css`),其中对各种`html`标签样式进行了初始化。
87 |
88 | 该初始化文件对`button`标签做了样式处理,与`el-button`组件的样式出现冲突,且由于`tailwind`导入的初始化样式文件`preflight.css`时机要晚与`elementPlus`的样式导入时机,所以导致按钮样式出现问题(样式被`preflight.css`覆盖了)。
89 |
90 | **解决方案:**禁止自动导入`preflight.css`,改为手动导入,将其时机提前解决覆盖问题即可。
91 |
92 | > `tailwind.config.js`
93 |
94 | ```js
95 | module.exports = {
96 | // ...
97 | corePlugins: {
98 | preflight: false // 禁用 Preflight
99 | }
100 | }
101 | ```
102 |
103 | > `index.css`
104 |
105 | ```css
106 | /* 手动引入 preflight.css */
107 | @import url("./preflight.css"); /* 可在我的github仓库查看,或在tailwind官网直接获取(https://tailwindcss.com/docs/preflight) */
108 |
109 | @tailwind base;
110 | @tailwind components;
111 | @tailwind utilities;
112 | ```
113 |
114 | `最新版本的elementPlus + tailwindcss下,该问题已修复,如使用过往版本,复现该问题可使用这里的方案修改`
115 |
116 | PS:同理,如果出现`tailwind`样式与其他库的样式出现冲突时,也可以使用该方案,修改 `preflight.css`
117 |
118 | ## 主题方案设计
119 |
120 | ### 方案选择背景
121 |
122 | 1. 一般而言,主题方案有几种:
123 | 1. 预先定义好一批当前项目需要使用的颜色变量,后续各种组件颜色都直接使用变量,需要切换颜色时,直接修改变量即可。
124 | 2. 设计好我们需要进行主题配置化的各个组件模块,从而定义 `theme.css` 在其中进行样式覆盖,通过加载不同的 `themeXXX.css`来实现主题替换,这种方案灵活性很高,可以通过修改`theme.css`实现各种定制化需求。
125 | 3. `Vue3 SFC`中我们可以使用 `v-bind()`在 `
634 | ```
635 |
636 |
637 | 
638 |
639 | 可以看到,按钮颜色正是我们配置的主题色。
640 |
641 | #### 6. `Tailwind` 引用主题色
642 |
643 | 想要在项目里舒舒服服的使用主题色,我们还差了临门一脚 —— 在 `TailwindCss` 引用主题色变量。
644 |
645 | ```js
646 | // tailwind.config.js
647 | // 生成颜色css变量名
648 | function genSimilarColorsName(brandName) {
649 | return {
650 | lighter: `var(--${brandName}-lighter-color)`,
651 | light: `var(--${brandName}-light-color)`,
652 | DEFAULT: `var(--${brandName}-color)`,
653 | deep: `var(--${brandName}-deep-color)`,
654 | deeper: `var(--${brandName}-deeper-color)`
655 | };
656 | }
657 |
658 | /** @type {import('tailwindcss').Config} */
659 | module.exports = {
660 | // ...
661 | theme: {
662 | // ...
663 | // 修改Tailwind主题色配置,使用我们设计的这一套颜色
664 | colors: {
665 | white: '#fff',
666 | black: '#191919',
667 | transparent: 'transparent',
668 | // 直接使用css变量
669 | primary: genSimilarColorsName('primary'),
670 | info: genSimilarColorsName('info'),
671 | success: genSimilarColorsName('success'),
672 | warning: genSimilarColorsName('warning'),
673 | danger: genSimilarColorsName('danger')
674 | }
675 | },
676 | // ...
677 | }
678 | ```
679 |
680 | 在项目中预览效果
681 |
682 | ```vue
683 |
684 | ...
685 |
686 |
687 | ...
688 |
691 | 我只是个渐变色
692 |
693 |
694 | ...
695 | ```
696 |
697 |
698 | 
699 |
700 | 这样就完成了整个项目中的动态主题使用了,我们可以编写一个简单的页面来查看效果。
701 |
702 | ### 编写预览代码
703 |
704 | ```vue
705 |
706 |
707 |
708 |
709 | 按钮:
710 |
711 |
712 | primary 按钮
713 |
714 |
715 | success 按钮
716 |
717 |
718 | danger 按钮
719 |
720 |
721 | info 按钮
722 |
723 |
724 | warning 按钮
725 |
726 |
727 | 表单:
728 |
729 |
730 |
731 |
732 |
733 |
737 |
738 |
739 |
740 |
741 |
742 |
747 | -
748 |
749 |
750 |
751 |
752 |
753 |
754 |
755 |
756 |
757 |
758 |
759 |
760 |
761 |
762 |
763 |
764 |
765 |
766 |
767 |
768 |
769 |
770 |
771 | Create
772 | Cancel
773 |
774 |
775 | 标签:
776 |
777 | Dark
778 |
785 | {{ item.label }}
786 |
787 |
795 | {{ item.label }}
796 |
797 |
798 |
799 | Light
800 |
807 | {{ item.label }}
808 |
809 |
817 | {{ item.label }}
818 |
819 |
820 |
821 | Plain
822 |
829 | {{ item.label }}
830 |
831 |
839 | {{ item.label }}
840 |
841 |
842 |
843 |
844 |
873 |
874 |
879 | ```
880 |
881 |
882 | 
883 |
884 | ### 编写测试主题切换代码
885 |
886 | 这里在前端简单编写一个修改主题颜色的组件,来测试我们的动态主题效果。
887 |
888 | 真实业务逻辑中,该功能也许在后台管理系统中,配置完成后,保存到数据库,前端在初始化时,通过接口来获取主题再调用`setTheme(theme)`设置主题。
889 |
890 | ```vue
891 |
892 |
893 |
900 |
901 |
902 |
903 |
904 |
905 |
906 |
907 |
908 |
909 |
910 |
911 |
912 |
913 |
914 |
915 |
916 | 适用配置
917 |
918 |
919 |
920 |
921 |
937 |
938 |
939 | ```
940 |
941 | `App.vue`调用组件
942 |
943 | ```vue
944 |
945 |
946 |
947 |
950 | 动态主题色方案
951 |
952 |
953 |
954 |
955 |
956 |
957 |
964 |
965 |
966 |
967 |
975 | ```
976 |
977 | 
978 |
979 | 我们尝试修改一下主题色:
980 |
981 | 修改一套紫色主题色,保存,查看效果,可以看到已经修改为我们期待的颜色了。
982 |
983 | 
984 | **这样,我们的主题切换系统就完成啦!**
985 |
--------------------------------------------------------------------------------
/pnpm-lock.yaml:
--------------------------------------------------------------------------------
1 | lockfileVersion: 5.4
2 |
3 | specifiers:
4 | '@element-plus/icons-vue': ^2.1.0
5 | '@types/lodash-es': ^4.17.7
6 | '@types/node': ^22.10.0
7 | '@vitejs/plugin-vue': ^4.1.0
8 | '@vueuse/core': ^11.3.0
9 | autoprefixer: ^10.4.14
10 | element-plus: ^2.3.1
11 | lodash-es: ^4.17.21
12 | postcss: ^8.4.21
13 | sass: ^1.60.0
14 | tailwindcss: 3.1.8
15 | typescript: ^4.9.3
16 | unplugin-auto-import: ^0.15.2
17 | unplugin-vue-components: ^0.24.1
18 | vite: ^4.2.0
19 | vue: ^3.2.47
20 | vue-tsc: ^1.2.0
21 |
22 | dependencies:
23 | '@element-plus/icons-vue': 2.1.0_vue@3.2.47
24 | '@types/lodash-es': 4.17.7
25 | '@vueuse/core': 11.3.0_vue@3.2.47
26 | element-plus: 2.3.1_vue@3.2.47
27 | lodash-es: 4.17.21
28 | vue: 3.2.47
29 |
30 | devDependencies:
31 | '@types/node': 22.10.0
32 | '@vitejs/plugin-vue': 4.1.0_vite@4.2.1+vue@3.2.47
33 | autoprefixer: 10.4.14_postcss@8.4.21
34 | postcss: 8.4.21
35 | sass: 1.60.0
36 | tailwindcss: 3.1.8_postcss@8.4.21
37 | typescript: 4.9.5
38 | unplugin-auto-import: 0.15.2_@vueuse+core@11.3.0
39 | unplugin-vue-components: 0.24.1_vue@3.2.47
40 | vite: 4.2.1_bwqi2un3jyfcarsigy6kbjw6yi
41 | vue-tsc: 1.2.0_typescript@4.9.5
42 |
43 | packages:
44 |
45 | /@antfu/utils/0.7.2:
46 | resolution: {integrity: sha512-vy9fM3pIxZmX07dL+VX1aZe7ynZ+YyB0jY+jE6r3hOK6GNY2t6W8rzpFC4tgpbXUYABkFQwgJq2XYXlxbXAI0g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/@antfu/utils/-/utils-0.7.2.tgz}
47 | dev: true
48 |
49 | /@babel/helper-string-parser/7.19.4:
50 | resolution: {integrity: sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz}
51 | engines: {node: '>=6.9.0'}
52 |
53 | /@babel/helper-validator-identifier/7.19.1:
54 | resolution: {integrity: sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz}
55 | engines: {node: '>=6.9.0'}
56 |
57 | /@babel/parser/7.21.3:
58 | resolution: {integrity: sha512-lobG0d7aOfQRXh8AyklEAgZGvA4FShxo6xQbUrrT/cNBPUdIDojlokwJsQyCC/eKia7ifqM0yP+2DRZ4WKw2RQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/@babel/parser/-/parser-7.21.3.tgz}
59 | engines: {node: '>=6.0.0'}
60 | hasBin: true
61 | dependencies:
62 | '@babel/types': 7.21.3
63 |
64 | /@babel/types/7.21.3:
65 | resolution: {integrity: sha512-sBGdETxC+/M4o/zKC0sl6sjWv62WFR/uzxrJ6uYyMLZOUlPnwzw0tKgVHOXxaAd5l2g8pEDM5RZ495GPQI77kg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/@babel/types/-/types-7.21.3.tgz}
66 | engines: {node: '>=6.9.0'}
67 | dependencies:
68 | '@babel/helper-string-parser': 7.19.4
69 | '@babel/helper-validator-identifier': 7.19.1
70 | to-fast-properties: 2.0.0
71 |
72 | /@ctrl/tinycolor/3.6.0:
73 | resolution: {integrity: sha512-/Z3l6pXthq0JvMYdUFyX9j0MaCltlIn6mfh9jLyQwg5aPKxkyNa0PTHtU1AlFXLNk55ZuAeJRcpvq+tmLfKmaQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/@ctrl/tinycolor/-/tinycolor-3.6.0.tgz}
74 | engines: {node: '>=10'}
75 | dev: false
76 |
77 | /@element-plus/icons-vue/2.1.0_vue@3.2.47:
78 | resolution: {integrity: sha512-PSBn3elNoanENc1vnCfh+3WA9fimRC7n+fWkf3rE5jvv+aBohNHABC/KAR5KWPecxWxDTVT1ERpRbOMRcOV/vA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/@element-plus/icons-vue/-/icons-vue-2.1.0.tgz}
79 | peerDependencies:
80 | vue: ^3.2.0
81 | dependencies:
82 | vue: 3.2.47
83 | dev: false
84 |
85 | /@esbuild/android-arm/0.17.14:
86 | resolution: {integrity: sha512-0CnlwnjDU8cks0yJLXfkaU/uoLyRf9VZJs4p1PskBr2AlAHeEsFEwJEo0of/Z3g+ilw5mpyDwThlxzNEIxOE4g==}
87 | engines: {node: '>=12'}
88 | cpu: [arm]
89 | os: [android]
90 | requiresBuild: true
91 | dev: true
92 | optional: true
93 |
94 | /@esbuild/android-arm64/0.17.14:
95 | resolution: {integrity: sha512-eLOpPO1RvtsP71afiFTvS7tVFShJBCT0txiv/xjFBo5a7R7Gjw7X0IgIaFoLKhqXYAXhahoXm7qAmRXhY4guJg==}
96 | engines: {node: '>=12'}
97 | cpu: [arm64]
98 | os: [android]
99 | requiresBuild: true
100 | dev: true
101 | optional: true
102 |
103 | /@esbuild/android-x64/0.17.14:
104 | resolution: {integrity: sha512-nrfQYWBfLGfSGLvRVlt6xi63B5IbfHm3tZCdu/82zuFPQ7zez4XjmRtF/wIRYbJQ/DsZrxJdEvYFE67avYXyng==}
105 | engines: {node: '>=12'}
106 | cpu: [x64]
107 | os: [android]
108 | requiresBuild: true
109 | dev: true
110 | optional: true
111 |
112 | /@esbuild/darwin-arm64/0.17.14:
113 | resolution: {integrity: sha512-eoSjEuDsU1ROwgBH/c+fZzuSyJUVXQTOIN9xuLs9dE/9HbV/A5IqdXHU1p2OfIMwBwOYJ9SFVGGldxeRCUJFyw==}
114 | engines: {node: '>=12'}
115 | cpu: [arm64]
116 | os: [darwin]
117 | requiresBuild: true
118 | dev: true
119 | optional: true
120 |
121 | /@esbuild/darwin-x64/0.17.14:
122 | resolution: {integrity: sha512-zN0U8RWfrDttdFNkHqFYZtOH8hdi22z0pFm0aIJPsNC4QQZv7je8DWCX5iA4Zx6tRhS0CCc0XC2m7wKsbWEo5g==}
123 | engines: {node: '>=12'}
124 | cpu: [x64]
125 | os: [darwin]
126 | requiresBuild: true
127 | dev: true
128 | optional: true
129 |
130 | /@esbuild/freebsd-arm64/0.17.14:
131 | resolution: {integrity: sha512-z0VcD4ibeZWVQCW1O7szaLxGsx54gcCnajEJMdYoYjLiq4g1jrP2lMq6pk71dbS5+7op/L2Aod+erw+EUr28/A==}
132 | engines: {node: '>=12'}
133 | cpu: [arm64]
134 | os: [freebsd]
135 | requiresBuild: true
136 | dev: true
137 | optional: true
138 |
139 | /@esbuild/freebsd-x64/0.17.14:
140 | resolution: {integrity: sha512-hd9mPcxfTgJlolrPlcXkQk9BMwNBvNBsVaUe5eNUqXut6weDQH8whcNaKNF2RO8NbpT6GY8rHOK2A9y++s+ehw==}
141 | engines: {node: '>=12'}
142 | cpu: [x64]
143 | os: [freebsd]
144 | requiresBuild: true
145 | dev: true
146 | optional: true
147 |
148 | /@esbuild/linux-arm/0.17.14:
149 | resolution: {integrity: sha512-BNTl+wSJ1omsH8s3TkQmIIIQHwvwJrU9u1ggb9XU2KTVM4TmthRIVyxSp2qxROJHhZuW/r8fht46/QE8hU8Qvg==}
150 | engines: {node: '>=12'}
151 | cpu: [arm]
152 | os: [linux]
153 | requiresBuild: true
154 | dev: true
155 | optional: true
156 |
157 | /@esbuild/linux-arm64/0.17.14:
158 | resolution: {integrity: sha512-FhAMNYOq3Iblcj9i+K0l1Fp/MHt+zBeRu/Qkf0LtrcFu3T45jcwB6A1iMsemQ42vR3GBhjNZJZTaCe3VFPbn9g==}
159 | engines: {node: '>=12'}
160 | cpu: [arm64]
161 | os: [linux]
162 | requiresBuild: true
163 | dev: true
164 | optional: true
165 |
166 | /@esbuild/linux-ia32/0.17.14:
167 | resolution: {integrity: sha512-91OK/lQ5y2v7AsmnFT+0EyxdPTNhov3y2CWMdizyMfxSxRqHazXdzgBKtlmkU2KYIc+9ZK3Vwp2KyXogEATYxQ==}
168 | engines: {node: '>=12'}
169 | cpu: [ia32]
170 | os: [linux]
171 | requiresBuild: true
172 | dev: true
173 | optional: true
174 |
175 | /@esbuild/linux-loong64/0.17.14:
176 | resolution: {integrity: sha512-vp15H+5NR6hubNgMluqqKza85HcGJgq7t6rMH7O3Y6ApiOWPkvW2AJfNojUQimfTp6OUrACUXfR4hmpcENXoMQ==}
177 | engines: {node: '>=12'}
178 | cpu: [loong64]
179 | os: [linux]
180 | requiresBuild: true
181 | dev: true
182 | optional: true
183 |
184 | /@esbuild/linux-mips64el/0.17.14:
185 | resolution: {integrity: sha512-90TOdFV7N+fgi6c2+GO9ochEkmm9kBAKnuD5e08GQMgMINOdOFHuYLPQ91RYVrnWwQ5683sJKuLi9l4SsbJ7Hg==}
186 | engines: {node: '>=12'}
187 | cpu: [mips64el]
188 | os: [linux]
189 | requiresBuild: true
190 | dev: true
191 | optional: true
192 |
193 | /@esbuild/linux-ppc64/0.17.14:
194 | resolution: {integrity: sha512-NnBGeoqKkTugpBOBZZoktQQ1Yqb7aHKmHxsw43NddPB2YWLAlpb7THZIzsRsTr0Xw3nqiPxbA1H31ZMOG+VVPQ==}
195 | engines: {node: '>=12'}
196 | cpu: [ppc64]
197 | os: [linux]
198 | requiresBuild: true
199 | dev: true
200 | optional: true
201 |
202 | /@esbuild/linux-riscv64/0.17.14:
203 | resolution: {integrity: sha512-0qdlKScLXA8MGVy21JUKvMzCYWovctuP8KKqhtE5A6IVPq4onxXhSuhwDd2g5sRCzNDlDjitc5sX31BzDoL5Fw==}
204 | engines: {node: '>=12'}
205 | cpu: [riscv64]
206 | os: [linux]
207 | requiresBuild: true
208 | dev: true
209 | optional: true
210 |
211 | /@esbuild/linux-s390x/0.17.14:
212 | resolution: {integrity: sha512-Hdm2Jo1yaaOro4v3+6/zJk6ygCqIZuSDJHdHaf8nVH/tfOuoEX5Riv03Ka15LmQBYJObUTNS1UdyoMk0WUn9Ww==}
213 | engines: {node: '>=12'}
214 | cpu: [s390x]
215 | os: [linux]
216 | requiresBuild: true
217 | dev: true
218 | optional: true
219 |
220 | /@esbuild/linux-x64/0.17.14:
221 | resolution: {integrity: sha512-8KHF17OstlK4DuzeF/KmSgzrTWQrkWj5boluiiq7kvJCiQVzUrmSkaBvcLB2UgHpKENO2i6BthPkmUhNDaJsVw==}
222 | engines: {node: '>=12'}
223 | cpu: [x64]
224 | os: [linux]
225 | requiresBuild: true
226 | dev: true
227 | optional: true
228 |
229 | /@esbuild/netbsd-x64/0.17.14:
230 | resolution: {integrity: sha512-nVwpqvb3yyXztxIT2+VsxJhB5GCgzPdk1n0HHSnchRAcxqKO6ghXwHhJnr0j/B+5FSyEqSxF4q03rbA2fKXtUQ==}
231 | engines: {node: '>=12'}
232 | cpu: [x64]
233 | os: [netbsd]
234 | requiresBuild: true
235 | dev: true
236 | optional: true
237 |
238 | /@esbuild/openbsd-x64/0.17.14:
239 | resolution: {integrity: sha512-1RZ7uQQ9zcy/GSAJL1xPdN7NDdOOtNEGiJalg/MOzeakZeTrgH/DoCkbq7TaPDiPhWqnDF+4bnydxRqQD7il6g==}
240 | engines: {node: '>=12'}
241 | cpu: [x64]
242 | os: [openbsd]
243 | requiresBuild: true
244 | dev: true
245 | optional: true
246 |
247 | /@esbuild/sunos-x64/0.17.14:
248 | resolution: {integrity: sha512-nqMjDsFwv7vp7msrwWRysnM38Sd44PKmW8EzV01YzDBTcTWUpczQg6mGao9VLicXSgW/iookNK6AxeogNVNDZA==}
249 | engines: {node: '>=12'}
250 | cpu: [x64]
251 | os: [sunos]
252 | requiresBuild: true
253 | dev: true
254 | optional: true
255 |
256 | /@esbuild/win32-arm64/0.17.14:
257 | resolution: {integrity: sha512-xrD0mccTKRBBIotrITV7WVQAwNJ5+1va6L0H9zN92v2yEdjfAN7864cUaZwJS7JPEs53bDTzKFbfqVlG2HhyKQ==}
258 | engines: {node: '>=12'}
259 | cpu: [arm64]
260 | os: [win32]
261 | requiresBuild: true
262 | dev: true
263 | optional: true
264 |
265 | /@esbuild/win32-ia32/0.17.14:
266 | resolution: {integrity: sha512-nXpkz9bbJrLLyUTYtRotSS3t5b+FOuljg8LgLdINWFs3FfqZMtbnBCZFUmBzQPyxqU87F8Av+3Nco/M3hEcu1w==}
267 | engines: {node: '>=12'}
268 | cpu: [ia32]
269 | os: [win32]
270 | requiresBuild: true
271 | dev: true
272 | optional: true
273 |
274 | /@esbuild/win32-x64/0.17.14:
275 | resolution: {integrity: sha512-gPQmsi2DKTaEgG14hc3CHXHp62k8g6qr0Pas+I4lUxRMugGSATh/Bi8Dgusoz9IQ0IfdrvLpco6kujEIBoaogA==}
276 | engines: {node: '>=12'}
277 | cpu: [x64]
278 | os: [win32]
279 | requiresBuild: true
280 | dev: true
281 | optional: true
282 |
283 | /@floating-ui/core/1.2.5:
284 | resolution: {integrity: sha512-qrcbyfnRVziRlB6IYwjCopYhO7Vud750JlJyuljruIXcPxr22y8zdckcJGsuOdnQ639uVD1tTXddrcH3t3QYIQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/@floating-ui/core/-/core-1.2.5.tgz}
285 | dev: false
286 |
287 | /@floating-ui/dom/1.2.5:
288 | resolution: {integrity: sha512-+sAUfpQ3Frz+VCbPCqj+cZzvEESy3fjSeT/pDWkYCWOBXYNNKZfuVsHuv8/JO2zze8+Eb/Q7a6hZVgzS81fLbQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/@floating-ui/dom/-/dom-1.2.5.tgz}
289 | dependencies:
290 | '@floating-ui/core': 1.2.5
291 | dev: false
292 |
293 | /@jridgewell/sourcemap-codec/1.4.14:
294 | resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz}
295 | dev: true
296 |
297 | /@nodelib/fs.scandir/2.1.5:
298 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz}
299 | engines: {node: '>= 8'}
300 | dependencies:
301 | '@nodelib/fs.stat': 2.0.5
302 | run-parallel: 1.2.0
303 | dev: true
304 |
305 | /@nodelib/fs.stat/2.0.5:
306 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz}
307 | engines: {node: '>= 8'}
308 | dev: true
309 |
310 | /@nodelib/fs.walk/1.2.8:
311 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz}
312 | engines: {node: '>= 8'}
313 | dependencies:
314 | '@nodelib/fs.scandir': 2.1.5
315 | fastq: 1.15.0
316 | dev: true
317 |
318 | /@rollup/pluginutils/5.0.2:
319 | resolution: {integrity: sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz}
320 | engines: {node: '>=14.0.0'}
321 | peerDependencies:
322 | rollup: ^1.20.0||^2.0.0||^3.0.0
323 | peerDependenciesMeta:
324 | rollup:
325 | optional: true
326 | dependencies:
327 | '@types/estree': 1.0.0
328 | estree-walker: 2.0.2
329 | picomatch: 2.3.1
330 | dev: true
331 |
332 | /@sxzz/popperjs-es/2.11.7:
333 | resolution: {integrity: sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==}
334 | dev: false
335 |
336 | /@types/estree/1.0.0:
337 | resolution: {integrity: sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/@types/estree/-/estree-1.0.0.tgz}
338 | dev: true
339 |
340 | /@types/lodash-es/4.17.7:
341 | resolution: {integrity: sha512-z0ptr6UI10VlU6l5MYhGwS4mC8DZyYer2mCoyysZtSF7p26zOX8UpbrV0YpNYLGS8K4PUFIyEr62IMFFjveSiQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/@types/lodash-es/-/lodash-es-4.17.7.tgz}
342 | dependencies:
343 | '@types/lodash': 4.14.192
344 | dev: false
345 |
346 | /@types/lodash/4.14.192:
347 | resolution: {integrity: sha512-km+Vyn3BYm5ytMO13k9KTp27O75rbQ0NFw+U//g+PX7VZyjCioXaRFisqSIJRECljcTv73G3i6BpglNGHgUQ5A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/@types/lodash/-/lodash-4.14.192.tgz}
348 | dev: false
349 |
350 | /@types/node/22.10.0:
351 | resolution: {integrity: sha512-XC70cRZVElFHfIUB40FgZOBbgJYFKKMa5nb9lxcwYstFG/Mi+/Y0bGS+rs6Dmhmkpq4pnNiLiuZAbc02YCOnmA==}
352 | dependencies:
353 | undici-types: 6.20.0
354 | dev: true
355 |
356 | /@types/web-bluetooth/0.0.16:
357 | resolution: {integrity: sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ==}
358 | dev: false
359 |
360 | /@types/web-bluetooth/0.0.20:
361 | resolution: {integrity: sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==}
362 |
363 | /@vitejs/plugin-vue/4.1.0_vite@4.2.1+vue@3.2.47:
364 | resolution: {integrity: sha512-++9JOAFdcXI3lyer9UKUV4rfoQ3T1RN8yDqoCLar86s0xQct5yblxAE+yWgRnU5/0FOlVCpTZpYSBV/bGWrSrQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/@vitejs/plugin-vue/-/plugin-vue-4.1.0.tgz}
365 | engines: {node: ^14.18.0 || >=16.0.0}
366 | peerDependencies:
367 | vite: ^4.0.0
368 | vue: ^3.2.25
369 | dependencies:
370 | vite: 4.2.1_bwqi2un3jyfcarsigy6kbjw6yi
371 | vue: 3.2.47
372 | dev: true
373 |
374 | /@volar/language-core/1.3.0-alpha.0:
375 | resolution: {integrity: sha512-W3uMzecHPcbwddPu4SJpUcPakRBK/y/BP+U0U6NiPpUX1tONLC4yCawt+QBJqtgJ+sfD6ztf5PyvPL3hQRqfOA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/@volar/language-core/-/language-core-1.3.0-alpha.0.tgz}
376 | dependencies:
377 | '@volar/source-map': 1.3.0-alpha.0
378 | dev: true
379 |
380 | /@volar/source-map/1.3.0-alpha.0:
381 | resolution: {integrity: sha512-jSdizxWFvDTvkPYZnO6ew3sBZUnS0abKCbuopkc0JrIlFbznWC/fPH3iPFIMS8/IIkRxq1Jh9VVG60SmtsdaMQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/@volar/source-map/-/source-map-1.3.0-alpha.0.tgz}
382 | dependencies:
383 | muggle-string: 0.2.2
384 | dev: true
385 |
386 | /@volar/typescript/1.3.0-alpha.0:
387 | resolution: {integrity: sha512-5UItyW2cdH2mBLu4RrECRNJRgtvvzKrSCn2y3v/D61QwIDkGx4aeil6x8RFuUL5TFtV6QvVHXnsOHxNgd+sCow==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/@volar/typescript/-/typescript-1.3.0-alpha.0.tgz}
388 | dependencies:
389 | '@volar/language-core': 1.3.0-alpha.0
390 | dev: true
391 |
392 | /@volar/vue-language-core/1.2.0:
393 | resolution: {integrity: sha512-w7yEiaITh2WzKe6u8ZdeLKCUz43wdmY/OqAmsB/PGDvvhTcVhCJ6f0W/RprZL1IhqH8wALoWiwEh/Wer7ZviMQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/@volar/vue-language-core/-/vue-language-core-1.2.0.tgz}
394 | dependencies:
395 | '@volar/language-core': 1.3.0-alpha.0
396 | '@volar/source-map': 1.3.0-alpha.0
397 | '@vue/compiler-dom': 3.2.47
398 | '@vue/compiler-sfc': 3.2.47
399 | '@vue/reactivity': 3.2.47
400 | '@vue/shared': 3.2.47
401 | minimatch: 6.2.0
402 | muggle-string: 0.2.2
403 | vue-template-compiler: 2.7.14
404 | dev: true
405 |
406 | /@volar/vue-typescript/1.2.0:
407 | resolution: {integrity: sha512-zjmRi9y3J1EkG+pfuHp8IbHmibihrKK485cfzsHjiuvJMGrpkWvlO5WVEk8oslMxxeGC5XwBFE9AOlvh378EPA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/@volar/vue-typescript/-/vue-typescript-1.2.0.tgz}
408 | dependencies:
409 | '@volar/typescript': 1.3.0-alpha.0
410 | '@volar/vue-language-core': 1.2.0
411 | dev: true
412 |
413 | /@vue/compiler-core/3.2.47:
414 | resolution: {integrity: sha512-p4D7FDnQb7+YJmO2iPEv0SQNeNzcbHdGByJDsT4lynf63AFkOTFN07HsiRSvjGo0QrxR/o3d0hUyNCUnBU2Tig==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/@vue/compiler-core/-/compiler-core-3.2.47.tgz}
415 | dependencies:
416 | '@babel/parser': 7.21.3
417 | '@vue/shared': 3.2.47
418 | estree-walker: 2.0.2
419 | source-map: 0.6.1
420 |
421 | /@vue/compiler-dom/3.2.47:
422 | resolution: {integrity: sha512-dBBnEHEPoftUiS03a4ggEig74J2YBZ2UIeyfpcRM2tavgMWo4bsEfgCGsu+uJIL/vax9S+JztH8NmQerUo7shQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/@vue/compiler-dom/-/compiler-dom-3.2.47.tgz}
423 | dependencies:
424 | '@vue/compiler-core': 3.2.47
425 | '@vue/shared': 3.2.47
426 |
427 | /@vue/compiler-sfc/3.2.47:
428 | resolution: {integrity: sha512-rog05W+2IFfxjMcFw10tM9+f7i/+FFpZJJ5XHX72NP9eC2uRD+42M3pYcQqDXVYoj74kHMSEdQ/WmCjt8JFksQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/@vue/compiler-sfc/-/compiler-sfc-3.2.47.tgz}
429 | dependencies:
430 | '@babel/parser': 7.21.3
431 | '@vue/compiler-core': 3.2.47
432 | '@vue/compiler-dom': 3.2.47
433 | '@vue/compiler-ssr': 3.2.47
434 | '@vue/reactivity-transform': 3.2.47
435 | '@vue/shared': 3.2.47
436 | estree-walker: 2.0.2
437 | magic-string: 0.25.9
438 | postcss: 8.4.21
439 | source-map: 0.6.1
440 |
441 | /@vue/compiler-ssr/3.2.47:
442 | resolution: {integrity: sha512-wVXC+gszhulcMD8wpxMsqSOpvDZ6xKXSVWkf50Guf/S+28hTAXPDYRTbLQ3EDkOP5Xz/+SY37YiwDquKbJOgZw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/@vue/compiler-ssr/-/compiler-ssr-3.2.47.tgz}
443 | dependencies:
444 | '@vue/compiler-dom': 3.2.47
445 | '@vue/shared': 3.2.47
446 |
447 | /@vue/reactivity-transform/3.2.47:
448 | resolution: {integrity: sha512-m8lGXw8rdnPVVIdIFhf0LeQ/ixyHkH5plYuS83yop5n7ggVJU+z5v0zecwEnX7fa7HNLBhh2qngJJkxpwEEmYA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/@vue/reactivity-transform/-/reactivity-transform-3.2.47.tgz}
449 | dependencies:
450 | '@babel/parser': 7.21.3
451 | '@vue/compiler-core': 3.2.47
452 | '@vue/shared': 3.2.47
453 | estree-walker: 2.0.2
454 | magic-string: 0.25.9
455 |
456 | /@vue/reactivity/3.2.47:
457 | resolution: {integrity: sha512-7khqQ/75oyyg+N/e+iwV6lpy1f5wq759NdlS1fpAhFXa8VeAIKGgk2E/C4VF59lx5b+Ezs5fpp/5WsRYXQiKxQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/@vue/reactivity/-/reactivity-3.2.47.tgz}
458 | dependencies:
459 | '@vue/shared': 3.2.47
460 |
461 | /@vue/runtime-core/3.2.47:
462 | resolution: {integrity: sha512-RZxbLQIRB/K0ev0K9FXhNbBzT32H9iRtYbaXb0ZIz2usLms/D55dJR2t6cIEUn6vyhS3ALNvNthI+Q95C+NOpA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/@vue/runtime-core/-/runtime-core-3.2.47.tgz}
463 | dependencies:
464 | '@vue/reactivity': 3.2.47
465 | '@vue/shared': 3.2.47
466 |
467 | /@vue/runtime-dom/3.2.47:
468 | resolution: {integrity: sha512-ArXrFTjS6TsDei4qwNvgrdmHtD930KgSKGhS5M+j8QxXrDJYLqYw4RRcDy1bz1m1wMmb6j+zGLifdVHtkXA7gA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/@vue/runtime-dom/-/runtime-dom-3.2.47.tgz}
469 | dependencies:
470 | '@vue/runtime-core': 3.2.47
471 | '@vue/shared': 3.2.47
472 | csstype: 2.6.21
473 |
474 | /@vue/server-renderer/3.2.47_vue@3.2.47:
475 | resolution: {integrity: sha512-dN9gc1i8EvmP9RCzvneONXsKfBRgqFeFZLurmHOveL7oH6HiFXJw5OGu294n1nHc/HMgTy6LulU/tv5/A7f/LA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/@vue/server-renderer/-/server-renderer-3.2.47.tgz}
476 | peerDependencies:
477 | vue: 3.2.47
478 | dependencies:
479 | '@vue/compiler-ssr': 3.2.47
480 | '@vue/shared': 3.2.47
481 | vue: 3.2.47
482 |
483 | /@vue/shared/3.2.47:
484 | resolution: {integrity: sha512-BHGyyGN3Q97EZx0taMQ+OLNuZcW3d37ZEVmEAyeoA9ERdGvm9Irc/0Fua8SNyOtV1w6BS4q25wbMzJujO9HIfQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/@vue/shared/-/shared-3.2.47.tgz}
485 |
486 | /@vueuse/core/11.3.0_vue@3.2.47:
487 | resolution: {integrity: sha512-7OC4Rl1f9G8IT6rUfi9JrKiXy4bfmHhZ5x2Ceojy0jnd3mHNEvV4JaRygH362ror6/NZ+Nl+n13LPzGiPN8cKA==}
488 | dependencies:
489 | '@types/web-bluetooth': 0.0.20
490 | '@vueuse/metadata': 11.3.0
491 | '@vueuse/shared': 11.3.0_vue@3.2.47
492 | vue-demi: 0.14.10_vue@3.2.47
493 | transitivePeerDependencies:
494 | - '@vue/composition-api'
495 | - vue
496 |
497 | /@vueuse/core/9.13.0_vue@3.2.47:
498 | resolution: {integrity: sha512-pujnclbeHWxxPRqXWmdkKV5OX4Wk4YeK7wusHqRwU0Q7EFusHoqNA/aPhB6KCh9hEqJkLAJo7bb0Lh9b+OIVzw==}
499 | dependencies:
500 | '@types/web-bluetooth': 0.0.16
501 | '@vueuse/metadata': 9.13.0
502 | '@vueuse/shared': 9.13.0_vue@3.2.47
503 | vue-demi: 0.14.10_vue@3.2.47
504 | transitivePeerDependencies:
505 | - '@vue/composition-api'
506 | - vue
507 | dev: false
508 |
509 | /@vueuse/metadata/11.3.0:
510 | resolution: {integrity: sha512-pwDnDspTqtTo2HwfLw4Rp6yywuuBdYnPYDq+mO38ZYKGebCUQC/nVj/PXSiK9HX5otxLz8Fn7ECPbjiRz2CC3g==}
511 |
512 | /@vueuse/metadata/9.13.0:
513 | resolution: {integrity: sha512-gdU7TKNAUVlXXLbaF+ZCfte8BjRJQWPCa2J55+7/h+yDtzw3vOoGQDRXzI6pyKyo6bXFT5/QoPE4hAknExjRLQ==}
514 | dev: false
515 |
516 | /@vueuse/shared/11.3.0_vue@3.2.47:
517 | resolution: {integrity: sha512-P8gSSWQeucH5821ek2mn/ciCk+MS/zoRKqdQIM3bHq6p7GXDAJLmnRRKmF5F65sAVJIfzQlwR3aDzwCn10s8hA==}
518 | dependencies:
519 | vue-demi: 0.14.10_vue@3.2.47
520 | transitivePeerDependencies:
521 | - '@vue/composition-api'
522 | - vue
523 |
524 | /@vueuse/shared/9.13.0_vue@3.2.47:
525 | resolution: {integrity: sha512-UrnhU+Cnufu4S6JLCPZnkWh0WwZGUp72ktOF2DFptMlOs3TOdVv8xJN53zhHGARmVOsz5KqOls09+J1NR6sBKw==}
526 | dependencies:
527 | vue-demi: 0.14.10_vue@3.2.47
528 | transitivePeerDependencies:
529 | - '@vue/composition-api'
530 | - vue
531 | dev: false
532 |
533 | /acorn-node/1.8.2:
534 | resolution: {integrity: sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/acorn-node/-/acorn-node-1.8.2.tgz}
535 | dependencies:
536 | acorn: 7.4.1
537 | acorn-walk: 7.2.0
538 | xtend: 4.0.2
539 | dev: true
540 |
541 | /acorn-walk/7.2.0:
542 | resolution: {integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/acorn-walk/-/acorn-walk-7.2.0.tgz}
543 | engines: {node: '>=0.4.0'}
544 | dev: true
545 |
546 | /acorn/7.4.1:
547 | resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/acorn/-/acorn-7.4.1.tgz}
548 | engines: {node: '>=0.4.0'}
549 | hasBin: true
550 | dev: true
551 |
552 | /acorn/8.8.2:
553 | resolution: {integrity: sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/acorn/-/acorn-8.8.2.tgz}
554 | engines: {node: '>=0.4.0'}
555 | hasBin: true
556 | dev: true
557 |
558 | /anymatch/3.1.3:
559 | resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/anymatch/-/anymatch-3.1.3.tgz}
560 | engines: {node: '>= 8'}
561 | dependencies:
562 | normalize-path: 3.0.0
563 | picomatch: 2.3.1
564 | dev: true
565 |
566 | /arg/5.0.2:
567 | resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/arg/-/arg-5.0.2.tgz}
568 | dev: true
569 |
570 | /async-validator/4.2.5:
571 | resolution: {integrity: sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/async-validator/-/async-validator-4.2.5.tgz}
572 | dev: false
573 |
574 | /autoprefixer/10.4.14_postcss@8.4.21:
575 | resolution: {integrity: sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/autoprefixer/-/autoprefixer-10.4.14.tgz}
576 | engines: {node: ^10 || ^12 || >=14}
577 | hasBin: true
578 | peerDependencies:
579 | postcss: ^8.1.0
580 | dependencies:
581 | browserslist: 4.21.5
582 | caniuse-lite: 1.0.30001472
583 | fraction.js: 4.2.0
584 | normalize-range: 0.1.2
585 | picocolors: 1.0.0
586 | postcss: 8.4.21
587 | postcss-value-parser: 4.2.0
588 | dev: true
589 |
590 | /balanced-match/1.0.2:
591 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/balanced-match/-/balanced-match-1.0.2.tgz}
592 | dev: true
593 |
594 | /binary-extensions/2.2.0:
595 | resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/binary-extensions/-/binary-extensions-2.2.0.tgz}
596 | engines: {node: '>=8'}
597 | dev: true
598 |
599 | /brace-expansion/2.0.1:
600 | resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/brace-expansion/-/brace-expansion-2.0.1.tgz}
601 | dependencies:
602 | balanced-match: 1.0.2
603 | dev: true
604 |
605 | /braces/3.0.2:
606 | resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/braces/-/braces-3.0.2.tgz}
607 | engines: {node: '>=8'}
608 | dependencies:
609 | fill-range: 7.0.1
610 | dev: true
611 |
612 | /browserslist/4.21.5:
613 | resolution: {integrity: sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/browserslist/-/browserslist-4.21.5.tgz}
614 | engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
615 | hasBin: true
616 | dependencies:
617 | caniuse-lite: 1.0.30001472
618 | electron-to-chromium: 1.4.341
619 | node-releases: 2.0.10
620 | update-browserslist-db: 1.0.10_browserslist@4.21.5
621 | dev: true
622 |
623 | /camelcase-css/2.0.1:
624 | resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/camelcase-css/-/camelcase-css-2.0.1.tgz}
625 | engines: {node: '>= 6'}
626 | dev: true
627 |
628 | /caniuse-lite/1.0.30001472:
629 | resolution: {integrity: sha512-xWC/0+hHHQgj3/vrKYY0AAzeIUgr7L9wlELIcAvZdDUHlhL/kNxMdnQLOSOQfP8R51ZzPhmHdyMkI0MMpmxCfg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/caniuse-lite/-/caniuse-lite-1.0.30001472.tgz}
630 | dev: true
631 |
632 | /chokidar/3.5.3:
633 | resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/chokidar/-/chokidar-3.5.3.tgz}
634 | engines: {node: '>= 8.10.0'}
635 | dependencies:
636 | anymatch: 3.1.3
637 | braces: 3.0.2
638 | glob-parent: 5.1.2
639 | is-binary-path: 2.1.0
640 | is-glob: 4.0.3
641 | normalize-path: 3.0.0
642 | readdirp: 3.6.0
643 | optionalDependencies:
644 | fsevents: 2.3.2
645 | dev: true
646 |
647 | /color-name/1.1.4:
648 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/color-name/-/color-name-1.1.4.tgz}
649 | dev: true
650 |
651 | /cssesc/3.0.0:
652 | resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/cssesc/-/cssesc-3.0.0.tgz}
653 | engines: {node: '>=4'}
654 | hasBin: true
655 | dev: true
656 |
657 | /csstype/2.6.21:
658 | resolution: {integrity: sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/csstype/-/csstype-2.6.21.tgz}
659 |
660 | /dayjs/1.11.7:
661 | resolution: {integrity: sha512-+Yw9U6YO5TQohxLcIkrXBeY73WP3ejHWVvx8XCk3gxvQDCTEmS48ZrSZCKciI7Bhl/uCMyxYtE9UqRILmFphkQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/dayjs/-/dayjs-1.11.7.tgz}
662 | dev: false
663 |
664 | /de-indent/1.0.2:
665 | resolution: {integrity: sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/de-indent/-/de-indent-1.0.2.tgz}
666 | dev: true
667 |
668 | /debug/4.3.4:
669 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/debug/-/debug-4.3.4.tgz}
670 | engines: {node: '>=6.0'}
671 | peerDependencies:
672 | supports-color: '*'
673 | peerDependenciesMeta:
674 | supports-color:
675 | optional: true
676 | dependencies:
677 | ms: 2.1.2
678 | dev: true
679 |
680 | /defined/1.0.1:
681 | resolution: {integrity: sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/defined/-/defined-1.0.1.tgz}
682 | dev: true
683 |
684 | /detective/5.2.1:
685 | resolution: {integrity: sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/detective/-/detective-5.2.1.tgz}
686 | engines: {node: '>=0.8.0'}
687 | hasBin: true
688 | dependencies:
689 | acorn-node: 1.8.2
690 | defined: 1.0.1
691 | minimist: 1.2.8
692 | dev: true
693 |
694 | /didyoumean/1.2.2:
695 | resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/didyoumean/-/didyoumean-1.2.2.tgz}
696 | dev: true
697 |
698 | /dlv/1.1.3:
699 | resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/dlv/-/dlv-1.1.3.tgz}
700 | dev: true
701 |
702 | /electron-to-chromium/1.4.341:
703 | resolution: {integrity: sha512-R4A8VfUBQY9WmAhuqY5tjHRf5fH2AAf6vqitBOE0y6u2PgHgqHSrhZmu78dIX3fVZtjqlwJNX1i2zwC3VpHtQQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/electron-to-chromium/-/electron-to-chromium-1.4.341.tgz}
704 | dev: true
705 |
706 | /element-plus/2.3.1_vue@3.2.47:
707 | resolution: {integrity: sha512-IBS7ic1mRyDXpOreRkredV4ByZSuax5HPb0zNOHm4qwKC4wm927yQv+Is0JbzxPzCW5zWaV4PLy9/Gl3E3v59w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/element-plus/-/element-plus-2.3.1.tgz}
708 | peerDependencies:
709 | vue: ^3.2.0
710 | dependencies:
711 | '@ctrl/tinycolor': 3.6.0
712 | '@element-plus/icons-vue': 2.1.0_vue@3.2.47
713 | '@floating-ui/dom': 1.2.5
714 | '@popperjs/core': /@sxzz/popperjs-es/2.11.7
715 | '@types/lodash': 4.14.192
716 | '@types/lodash-es': 4.17.7
717 | '@vueuse/core': 9.13.0_vue@3.2.47
718 | async-validator: 4.2.5
719 | dayjs: 1.11.7
720 | escape-html: 1.0.3
721 | lodash: 4.17.21
722 | lodash-es: 4.17.21
723 | lodash-unified: 1.0.3_tknf7errc3xdqocd3ryzzla7vq
724 | memoize-one: 6.0.0
725 | normalize-wheel-es: 1.2.0
726 | vue: 3.2.47
727 | transitivePeerDependencies:
728 | - '@vue/composition-api'
729 | dev: false
730 |
731 | /esbuild/0.17.14:
732 | resolution: {integrity: sha512-vOO5XhmVj/1XQR9NQ1UPq6qvMYL7QFJU57J5fKBKBKxp17uDt5PgxFDb4A2nEiXhr1qQs4x0F5+66hVVw4ruNw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/esbuild/-/esbuild-0.17.14.tgz}
733 | engines: {node: '>=12'}
734 | hasBin: true
735 | requiresBuild: true
736 | optionalDependencies:
737 | '@esbuild/android-arm': 0.17.14
738 | '@esbuild/android-arm64': 0.17.14
739 | '@esbuild/android-x64': 0.17.14
740 | '@esbuild/darwin-arm64': 0.17.14
741 | '@esbuild/darwin-x64': 0.17.14
742 | '@esbuild/freebsd-arm64': 0.17.14
743 | '@esbuild/freebsd-x64': 0.17.14
744 | '@esbuild/linux-arm': 0.17.14
745 | '@esbuild/linux-arm64': 0.17.14
746 | '@esbuild/linux-ia32': 0.17.14
747 | '@esbuild/linux-loong64': 0.17.14
748 | '@esbuild/linux-mips64el': 0.17.14
749 | '@esbuild/linux-ppc64': 0.17.14
750 | '@esbuild/linux-riscv64': 0.17.14
751 | '@esbuild/linux-s390x': 0.17.14
752 | '@esbuild/linux-x64': 0.17.14
753 | '@esbuild/netbsd-x64': 0.17.14
754 | '@esbuild/openbsd-x64': 0.17.14
755 | '@esbuild/sunos-x64': 0.17.14
756 | '@esbuild/win32-arm64': 0.17.14
757 | '@esbuild/win32-ia32': 0.17.14
758 | '@esbuild/win32-x64': 0.17.14
759 | dev: true
760 |
761 | /escalade/3.1.1:
762 | resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/escalade/-/escalade-3.1.1.tgz}
763 | engines: {node: '>=6'}
764 | dev: true
765 |
766 | /escape-html/1.0.3:
767 | resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/escape-html/-/escape-html-1.0.3.tgz}
768 | dev: false
769 |
770 | /escape-string-regexp/5.0.0:
771 | resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz}
772 | engines: {node: '>=12'}
773 | dev: true
774 |
775 | /estree-walker/2.0.2:
776 | resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/estree-walker/-/estree-walker-2.0.2.tgz}
777 |
778 | /fast-glob/3.2.12:
779 | resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/fast-glob/-/fast-glob-3.2.12.tgz}
780 | engines: {node: '>=8.6.0'}
781 | dependencies:
782 | '@nodelib/fs.stat': 2.0.5
783 | '@nodelib/fs.walk': 1.2.8
784 | glob-parent: 5.1.2
785 | merge2: 1.4.1
786 | micromatch: 4.0.5
787 | dev: true
788 |
789 | /fastq/1.15.0:
790 | resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/fastq/-/fastq-1.15.0.tgz}
791 | dependencies:
792 | reusify: 1.0.4
793 | dev: true
794 |
795 | /fill-range/7.0.1:
796 | resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/fill-range/-/fill-range-7.0.1.tgz}
797 | engines: {node: '>=8'}
798 | dependencies:
799 | to-regex-range: 5.0.1
800 | dev: true
801 |
802 | /fraction.js/4.2.0:
803 | resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/fraction.js/-/fraction.js-4.2.0.tgz}
804 | dev: true
805 |
806 | /fsevents/2.3.2:
807 | resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==}
808 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
809 | os: [darwin]
810 | requiresBuild: true
811 | dev: true
812 | optional: true
813 |
814 | /function-bind/1.1.1:
815 | resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/function-bind/-/function-bind-1.1.1.tgz}
816 | dev: true
817 |
818 | /glob-parent/5.1.2:
819 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/glob-parent/-/glob-parent-5.1.2.tgz}
820 | engines: {node: '>= 6'}
821 | dependencies:
822 | is-glob: 4.0.3
823 | dev: true
824 |
825 | /glob-parent/6.0.2:
826 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/glob-parent/-/glob-parent-6.0.2.tgz}
827 | engines: {node: '>=10.13.0'}
828 | dependencies:
829 | is-glob: 4.0.3
830 | dev: true
831 |
832 | /has/1.0.3:
833 | resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/has/-/has-1.0.3.tgz}
834 | engines: {node: '>= 0.4.0'}
835 | dependencies:
836 | function-bind: 1.1.1
837 | dev: true
838 |
839 | /he/1.2.0:
840 | resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/he/-/he-1.2.0.tgz}
841 | hasBin: true
842 | dev: true
843 |
844 | /immutable/4.3.0:
845 | resolution: {integrity: sha512-0AOCmOip+xgJwEVTQj1EfiDDOkPmuyllDuTuEX+DDXUgapLAsBIfkg3sxCYyCEA8mQqZrrxPUGjcOQ2JS3WLkg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/immutable/-/immutable-4.3.0.tgz}
846 | dev: true
847 |
848 | /is-binary-path/2.1.0:
849 | resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/is-binary-path/-/is-binary-path-2.1.0.tgz}
850 | engines: {node: '>=8'}
851 | dependencies:
852 | binary-extensions: 2.2.0
853 | dev: true
854 |
855 | /is-core-module/2.11.0:
856 | resolution: {integrity: sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/is-core-module/-/is-core-module-2.11.0.tgz}
857 | dependencies:
858 | has: 1.0.3
859 | dev: true
860 |
861 | /is-extglob/2.1.1:
862 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/is-extglob/-/is-extglob-2.1.1.tgz}
863 | engines: {node: '>=0.10.0'}
864 | dev: true
865 |
866 | /is-glob/4.0.3:
867 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/is-glob/-/is-glob-4.0.3.tgz}
868 | engines: {node: '>=0.10.0'}
869 | dependencies:
870 | is-extglob: 2.1.1
871 | dev: true
872 |
873 | /is-number/7.0.0:
874 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/is-number/-/is-number-7.0.0.tgz}
875 | engines: {node: '>=0.12.0'}
876 | dev: true
877 |
878 | /jsonc-parser/3.2.0:
879 | resolution: {integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz}
880 | dev: true
881 |
882 | /lilconfig/2.1.0:
883 | resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/lilconfig/-/lilconfig-2.1.0.tgz}
884 | engines: {node: '>=10'}
885 | dev: true
886 |
887 | /local-pkg/0.4.3:
888 | resolution: {integrity: sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/local-pkg/-/local-pkg-0.4.3.tgz}
889 | engines: {node: '>=14'}
890 | dev: true
891 |
892 | /lodash-es/4.17.21:
893 | resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/lodash-es/-/lodash-es-4.17.21.tgz}
894 | dev: false
895 |
896 | /lodash-unified/1.0.3_tknf7errc3xdqocd3ryzzla7vq:
897 | resolution: {integrity: sha512-WK9qSozxXOD7ZJQlpSqOT+om2ZfcT4yO+03FuzAHD0wF6S0l0090LRPDx3vhTTLZ8cFKpBn+IOcVXK6qOcIlfQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/lodash-unified/-/lodash-unified-1.0.3.tgz}
898 | peerDependencies:
899 | '@types/lodash-es': '*'
900 | lodash: '*'
901 | lodash-es: '*'
902 | dependencies:
903 | '@types/lodash-es': 4.17.7
904 | lodash: 4.17.21
905 | lodash-es: 4.17.21
906 | dev: false
907 |
908 | /lodash/4.17.21:
909 | resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/lodash/-/lodash-4.17.21.tgz}
910 | dev: false
911 |
912 | /magic-string/0.25.9:
913 | resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/magic-string/-/magic-string-0.25.9.tgz}
914 | dependencies:
915 | sourcemap-codec: 1.4.8
916 |
917 | /magic-string/0.30.0:
918 | resolution: {integrity: sha512-LA+31JYDJLs82r2ScLrlz1GjSgu66ZV518eyWT+S8VhyQn/JL0u9MeBOvQMGYiPk1DBiSN9DDMOcXvigJZaViQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/magic-string/-/magic-string-0.30.0.tgz}
919 | engines: {node: '>=12'}
920 | dependencies:
921 | '@jridgewell/sourcemap-codec': 1.4.14
922 | dev: true
923 |
924 | /memoize-one/6.0.0:
925 | resolution: {integrity: sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/memoize-one/-/memoize-one-6.0.0.tgz}
926 | dev: false
927 |
928 | /merge2/1.4.1:
929 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/merge2/-/merge2-1.4.1.tgz}
930 | engines: {node: '>= 8'}
931 | dev: true
932 |
933 | /micromatch/4.0.5:
934 | resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/micromatch/-/micromatch-4.0.5.tgz}
935 | engines: {node: '>=8.6'}
936 | dependencies:
937 | braces: 3.0.2
938 | picomatch: 2.3.1
939 | dev: true
940 |
941 | /minimatch/6.2.0:
942 | resolution: {integrity: sha512-sauLxniAmvnhhRjFwPNnJKaPFYyddAgbYdeUpHULtCT/GhzdCx/MDNy+Y40lBxTQUrMzDE8e0S43Z5uqfO0REg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/minimatch/-/minimatch-6.2.0.tgz}
943 | engines: {node: '>=10'}
944 | dependencies:
945 | brace-expansion: 2.0.1
946 | dev: true
947 |
948 | /minimatch/7.4.3:
949 | resolution: {integrity: sha512-5UB4yYusDtkRPbRiy1cqZ1IpGNcJCGlEMG17RKzPddpyiPKoCdwohbED8g4QXT0ewCt8LTkQXuljsUfQ3FKM4A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/minimatch/-/minimatch-7.4.3.tgz}
950 | engines: {node: '>=10'}
951 | dependencies:
952 | brace-expansion: 2.0.1
953 | dev: true
954 |
955 | /minimist/1.2.8:
956 | resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/minimist/-/minimist-1.2.8.tgz}
957 | dev: true
958 |
959 | /mlly/1.2.0:
960 | resolution: {integrity: sha512-+c7A3CV0KGdKcylsI6khWyts/CYrGTrRVo4R/I7u/cUsy0Conxa6LUhiEzVKIw14lc2L5aiO4+SeVe4TeGRKww==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/mlly/-/mlly-1.2.0.tgz}
961 | dependencies:
962 | acorn: 8.8.2
963 | pathe: 1.1.0
964 | pkg-types: 1.0.2
965 | ufo: 1.1.1
966 | dev: true
967 |
968 | /ms/2.1.2:
969 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/ms/-/ms-2.1.2.tgz}
970 | dev: true
971 |
972 | /muggle-string/0.2.2:
973 | resolution: {integrity: sha512-YVE1mIJ4VpUMqZObFndk9CJu6DBJR/GB13p3tXuNbwD4XExaI5EOuRl6BHeIDxIqXZVxSfAC+y6U1Z/IxCfKUg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/muggle-string/-/muggle-string-0.2.2.tgz}
974 | dev: true
975 |
976 | /nanoid/3.3.6:
977 | resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/nanoid/-/nanoid-3.3.6.tgz}
978 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
979 | hasBin: true
980 |
981 | /node-releases/2.0.10:
982 | resolution: {integrity: sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/node-releases/-/node-releases-2.0.10.tgz}
983 | dev: true
984 |
985 | /normalize-path/3.0.0:
986 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/normalize-path/-/normalize-path-3.0.0.tgz}
987 | engines: {node: '>=0.10.0'}
988 | dev: true
989 |
990 | /normalize-range/0.1.2:
991 | resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/normalize-range/-/normalize-range-0.1.2.tgz}
992 | engines: {node: '>=0.10.0'}
993 | dev: true
994 |
995 | /normalize-wheel-es/1.2.0:
996 | resolution: {integrity: sha512-Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/normalize-wheel-es/-/normalize-wheel-es-1.2.0.tgz}
997 | dev: false
998 |
999 | /object-hash/3.0.0:
1000 | resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/object-hash/-/object-hash-3.0.0.tgz}
1001 | engines: {node: '>= 6'}
1002 | dev: true
1003 |
1004 | /path-parse/1.0.7:
1005 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/path-parse/-/path-parse-1.0.7.tgz}
1006 | dev: true
1007 |
1008 | /pathe/1.1.0:
1009 | resolution: {integrity: sha512-ODbEPR0KKHqECXW1GoxdDb+AZvULmXjVPy4rt+pGo2+TnjJTIPJQSVS6N63n8T2Ip+syHhbn52OewKicV0373w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/pathe/-/pathe-1.1.0.tgz}
1010 | dev: true
1011 |
1012 | /picocolors/1.0.0:
1013 | resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/picocolors/-/picocolors-1.0.0.tgz}
1014 |
1015 | /picomatch/2.3.1:
1016 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/picomatch/-/picomatch-2.3.1.tgz}
1017 | engines: {node: '>=8.6'}
1018 | dev: true
1019 |
1020 | /pify/2.3.0:
1021 | resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/pify/-/pify-2.3.0.tgz}
1022 | engines: {node: '>=0.10.0'}
1023 | dev: true
1024 |
1025 | /pkg-types/1.0.2:
1026 | resolution: {integrity: sha512-hM58GKXOcj8WTqUXnsQyJYXdeAPbythQgEF3nTcEo+nkD49chjQ9IKm/QJy9xf6JakXptz86h7ecP2024rrLaQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/pkg-types/-/pkg-types-1.0.2.tgz}
1027 | dependencies:
1028 | jsonc-parser: 3.2.0
1029 | mlly: 1.2.0
1030 | pathe: 1.1.0
1031 | dev: true
1032 |
1033 | /postcss-import/14.1.0_postcss@8.4.21:
1034 | resolution: {integrity: sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/postcss-import/-/postcss-import-14.1.0.tgz}
1035 | engines: {node: '>=10.0.0'}
1036 | peerDependencies:
1037 | postcss: ^8.0.0
1038 | dependencies:
1039 | postcss: 8.4.21
1040 | postcss-value-parser: 4.2.0
1041 | read-cache: 1.0.0
1042 | resolve: 1.22.1
1043 | dev: true
1044 |
1045 | /postcss-js/4.0.1_postcss@8.4.21:
1046 | resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/postcss-js/-/postcss-js-4.0.1.tgz}
1047 | engines: {node: ^12 || ^14 || >= 16}
1048 | peerDependencies:
1049 | postcss: ^8.4.21
1050 | dependencies:
1051 | camelcase-css: 2.0.1
1052 | postcss: 8.4.21
1053 | dev: true
1054 |
1055 | /postcss-load-config/3.1.4_postcss@8.4.21:
1056 | resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz}
1057 | engines: {node: '>= 10'}
1058 | peerDependencies:
1059 | postcss: '>=8.0.9'
1060 | ts-node: '>=9.0.0'
1061 | peerDependenciesMeta:
1062 | postcss:
1063 | optional: true
1064 | ts-node:
1065 | optional: true
1066 | dependencies:
1067 | lilconfig: 2.1.0
1068 | postcss: 8.4.21
1069 | yaml: 1.10.2
1070 | dev: true
1071 |
1072 | /postcss-nested/5.0.6_postcss@8.4.21:
1073 | resolution: {integrity: sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/postcss-nested/-/postcss-nested-5.0.6.tgz}
1074 | engines: {node: '>=12.0'}
1075 | peerDependencies:
1076 | postcss: ^8.2.14
1077 | dependencies:
1078 | postcss: 8.4.21
1079 | postcss-selector-parser: 6.0.11
1080 | dev: true
1081 |
1082 | /postcss-selector-parser/6.0.11:
1083 | resolution: {integrity: sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz}
1084 | engines: {node: '>=4'}
1085 | dependencies:
1086 | cssesc: 3.0.0
1087 | util-deprecate: 1.0.2
1088 | dev: true
1089 |
1090 | /postcss-value-parser/4.2.0:
1091 | resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz}
1092 | dev: true
1093 |
1094 | /postcss/8.4.21:
1095 | resolution: {integrity: sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/postcss/-/postcss-8.4.21.tgz}
1096 | engines: {node: ^10 || ^12 || >=14}
1097 | dependencies:
1098 | nanoid: 3.3.6
1099 | picocolors: 1.0.0
1100 | source-map-js: 1.0.2
1101 |
1102 | /queue-microtask/1.2.3:
1103 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/queue-microtask/-/queue-microtask-1.2.3.tgz}
1104 | dev: true
1105 |
1106 | /quick-lru/5.1.1:
1107 | resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/quick-lru/-/quick-lru-5.1.1.tgz}
1108 | engines: {node: '>=10'}
1109 | dev: true
1110 |
1111 | /read-cache/1.0.0:
1112 | resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/read-cache/-/read-cache-1.0.0.tgz}
1113 | dependencies:
1114 | pify: 2.3.0
1115 | dev: true
1116 |
1117 | /readdirp/3.6.0:
1118 | resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/readdirp/-/readdirp-3.6.0.tgz}
1119 | engines: {node: '>=8.10.0'}
1120 | dependencies:
1121 | picomatch: 2.3.1
1122 | dev: true
1123 |
1124 | /resolve/1.22.1:
1125 | resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/resolve/-/resolve-1.22.1.tgz}
1126 | hasBin: true
1127 | dependencies:
1128 | is-core-module: 2.11.0
1129 | path-parse: 1.0.7
1130 | supports-preserve-symlinks-flag: 1.0.0
1131 | dev: true
1132 |
1133 | /reusify/1.0.4:
1134 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/reusify/-/reusify-1.0.4.tgz}
1135 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
1136 | dev: true
1137 |
1138 | /rollup/3.20.2:
1139 | resolution: {integrity: sha512-3zwkBQl7Ai7MFYQE0y1MeQ15+9jsi7XxfrqwTb/9EK8D9C9+//EBR4M+CuA1KODRaNbFez/lWxA5vhEGZp4MUg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/rollup/-/rollup-3.20.2.tgz}
1140 | engines: {node: '>=14.18.0', npm: '>=8.0.0'}
1141 | hasBin: true
1142 | optionalDependencies:
1143 | fsevents: 2.3.2
1144 | dev: true
1145 |
1146 | /run-parallel/1.2.0:
1147 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/run-parallel/-/run-parallel-1.2.0.tgz}
1148 | dependencies:
1149 | queue-microtask: 1.2.3
1150 | dev: true
1151 |
1152 | /sass/1.60.0:
1153 | resolution: {integrity: sha512-updbwW6fNb5gGm8qMXzVO7V4sWf7LMXnMly/JEyfbfERbVH46Fn6q02BX7/eHTdKpE7d+oTkMMQpFWNUMfFbgQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/sass/-/sass-1.60.0.tgz}
1154 | engines: {node: '>=12.0.0'}
1155 | hasBin: true
1156 | dependencies:
1157 | chokidar: 3.5.3
1158 | immutable: 4.3.0
1159 | source-map-js: 1.0.2
1160 | dev: true
1161 |
1162 | /scule/1.0.0:
1163 | resolution: {integrity: sha512-4AsO/FrViE/iDNEPaAQlb77tf0csuq27EsVpy6ett584EcRTp6pTDLoGWVxCD77y5iU5FauOvhsI4o1APwPoSQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/scule/-/scule-1.0.0.tgz}
1164 | dev: true
1165 |
1166 | /source-map-js/1.0.2:
1167 | resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/source-map-js/-/source-map-js-1.0.2.tgz}
1168 | engines: {node: '>=0.10.0'}
1169 |
1170 | /source-map/0.6.1:
1171 | resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/source-map/-/source-map-0.6.1.tgz}
1172 | engines: {node: '>=0.10.0'}
1173 |
1174 | /sourcemap-codec/1.4.8:
1175 | resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz}
1176 | deprecated: Please use @jridgewell/sourcemap-codec instead
1177 |
1178 | /strip-literal/1.0.1:
1179 | resolution: {integrity: sha512-QZTsipNpa2Ppr6v1AmJHESqJ3Uz247MUS0OjrnnZjFAvEoWqxuyFuXn2xLgMtRnijJShAa1HL0gtJyUs7u7n3Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/strip-literal/-/strip-literal-1.0.1.tgz}
1180 | dependencies:
1181 | acorn: 8.8.2
1182 | dev: true
1183 |
1184 | /supports-preserve-symlinks-flag/1.0.0:
1185 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz}
1186 | engines: {node: '>= 0.4'}
1187 | dev: true
1188 |
1189 | /tailwindcss/3.1.8_postcss@8.4.21:
1190 | resolution: {integrity: sha512-YSneUCZSFDYMwk+TGq8qYFdCA3yfBRdBlS7txSq0LUmzyeqRe3a8fBQzbz9M3WS/iFT4BNf/nmw9mEzrnSaC0g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/tailwindcss/-/tailwindcss-3.1.8.tgz}
1191 | engines: {node: '>=12.13.0'}
1192 | hasBin: true
1193 | peerDependencies:
1194 | postcss: ^8.0.9
1195 | dependencies:
1196 | arg: 5.0.2
1197 | chokidar: 3.5.3
1198 | color-name: 1.1.4
1199 | detective: 5.2.1
1200 | didyoumean: 1.2.2
1201 | dlv: 1.1.3
1202 | fast-glob: 3.2.12
1203 | glob-parent: 6.0.2
1204 | is-glob: 4.0.3
1205 | lilconfig: 2.1.0
1206 | normalize-path: 3.0.0
1207 | object-hash: 3.0.0
1208 | picocolors: 1.0.0
1209 | postcss: 8.4.21
1210 | postcss-import: 14.1.0_postcss@8.4.21
1211 | postcss-js: 4.0.1_postcss@8.4.21
1212 | postcss-load-config: 3.1.4_postcss@8.4.21
1213 | postcss-nested: 5.0.6_postcss@8.4.21
1214 | postcss-selector-parser: 6.0.11
1215 | postcss-value-parser: 4.2.0
1216 | quick-lru: 5.1.1
1217 | resolve: 1.22.1
1218 | transitivePeerDependencies:
1219 | - ts-node
1220 | dev: true
1221 |
1222 | /to-fast-properties/2.0.0:
1223 | resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz}
1224 | engines: {node: '>=4'}
1225 |
1226 | /to-regex-range/5.0.1:
1227 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/to-regex-range/-/to-regex-range-5.0.1.tgz}
1228 | engines: {node: '>=8.0'}
1229 | dependencies:
1230 | is-number: 7.0.0
1231 | dev: true
1232 |
1233 | /typescript/4.9.5:
1234 | resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/typescript/-/typescript-4.9.5.tgz}
1235 | engines: {node: '>=4.2.0'}
1236 | hasBin: true
1237 | dev: true
1238 |
1239 | /ufo/1.1.1:
1240 | resolution: {integrity: sha512-MvlCc4GHrmZdAllBc0iUDowff36Q9Ndw/UzqmEKyrfSzokTd9ZCy1i+IIk5hrYKkjoYVQyNbrw7/F8XJ2rEwTg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/ufo/-/ufo-1.1.1.tgz}
1241 | dev: true
1242 |
1243 | /undici-types/6.20.0:
1244 | resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==}
1245 | dev: true
1246 |
1247 | /unimport/3.0.4:
1248 | resolution: {integrity: sha512-eoof/HLiNJcIkVpnqc7sJbzKSLx39J6xTaP7E4ElgVQKeq2t9fPTkvJKcA55IJTaRPkEkDq8kcc/IZPmrypnFg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/unimport/-/unimport-3.0.4.tgz}
1249 | dependencies:
1250 | '@rollup/pluginutils': 5.0.2
1251 | escape-string-regexp: 5.0.0
1252 | fast-glob: 3.2.12
1253 | local-pkg: 0.4.3
1254 | magic-string: 0.30.0
1255 | mlly: 1.2.0
1256 | pathe: 1.1.0
1257 | pkg-types: 1.0.2
1258 | scule: 1.0.0
1259 | strip-literal: 1.0.1
1260 | unplugin: 1.3.1
1261 | transitivePeerDependencies:
1262 | - rollup
1263 | dev: true
1264 |
1265 | /unplugin-auto-import/0.15.2_@vueuse+core@11.3.0:
1266 | resolution: {integrity: sha512-Wivfu+xccgvEZG8QtZcIvt6napfX9wyOFqM//7FHOtev8+k+dp3ykiqsEl6TODgHmqTTBeQX4Ah1JvRgUNjlkg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/unplugin-auto-import/-/unplugin-auto-import-0.15.2.tgz}
1267 | engines: {node: '>=14'}
1268 | peerDependencies:
1269 | '@nuxt/kit': ^3.2.2
1270 | '@vueuse/core': '*'
1271 | peerDependenciesMeta:
1272 | '@nuxt/kit':
1273 | optional: true
1274 | '@vueuse/core':
1275 | optional: true
1276 | dependencies:
1277 | '@antfu/utils': 0.7.2
1278 | '@rollup/pluginutils': 5.0.2
1279 | '@vueuse/core': 11.3.0_vue@3.2.47
1280 | local-pkg: 0.4.3
1281 | magic-string: 0.30.0
1282 | minimatch: 7.4.3
1283 | unimport: 3.0.4
1284 | unplugin: 1.3.1
1285 | transitivePeerDependencies:
1286 | - rollup
1287 | dev: true
1288 |
1289 | /unplugin-vue-components/0.24.1_vue@3.2.47:
1290 | resolution: {integrity: sha512-T3A8HkZoIE1Cja95xNqolwza0yD5IVlgZZ1PVAGvVCx8xthmjsv38xWRCtHtwl+rvZyL9uif42SRkDGw9aCfMA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/unplugin-vue-components/-/unplugin-vue-components-0.24.1.tgz}
1291 | engines: {node: '>=14'}
1292 | peerDependencies:
1293 | '@babel/parser': ^7.15.8
1294 | '@nuxt/kit': ^3.2.2
1295 | vue: 2 || 3
1296 | peerDependenciesMeta:
1297 | '@babel/parser':
1298 | optional: true
1299 | '@nuxt/kit':
1300 | optional: true
1301 | dependencies:
1302 | '@antfu/utils': 0.7.2
1303 | '@rollup/pluginutils': 5.0.2
1304 | chokidar: 3.5.3
1305 | debug: 4.3.4
1306 | fast-glob: 3.2.12
1307 | local-pkg: 0.4.3
1308 | magic-string: 0.30.0
1309 | minimatch: 7.4.3
1310 | resolve: 1.22.1
1311 | unplugin: 1.3.1
1312 | vue: 3.2.47
1313 | transitivePeerDependencies:
1314 | - rollup
1315 | - supports-color
1316 | dev: true
1317 |
1318 | /unplugin/1.3.1:
1319 | resolution: {integrity: sha512-h4uUTIvFBQRxUKS2Wjys6ivoeofGhxzTe2sRWlooyjHXVttcVfV/JiavNd3d4+jty0SVV0dxGw9AkY9MwiaCEw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/unplugin/-/unplugin-1.3.1.tgz}
1320 | dependencies:
1321 | acorn: 8.8.2
1322 | chokidar: 3.5.3
1323 | webpack-sources: 3.2.3
1324 | webpack-virtual-modules: 0.5.0
1325 | dev: true
1326 |
1327 | /update-browserslist-db/1.0.10_browserslist@4.21.5:
1328 | resolution: {integrity: sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz}
1329 | hasBin: true
1330 | peerDependencies:
1331 | browserslist: '>= 4.21.0'
1332 | dependencies:
1333 | browserslist: 4.21.5
1334 | escalade: 3.1.1
1335 | picocolors: 1.0.0
1336 | dev: true
1337 |
1338 | /util-deprecate/1.0.2:
1339 | resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/util-deprecate/-/util-deprecate-1.0.2.tgz}
1340 | dev: true
1341 |
1342 | /vite/4.2.1_bwqi2un3jyfcarsigy6kbjw6yi:
1343 | resolution: {integrity: sha512-7MKhqdy0ISo4wnvwtqZkjke6XN4taqQ2TBaTccLIpOKv7Vp2h4Y+NpmWCnGDeSvvn45KxvWgGyb0MkHvY1vgbg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/vite/-/vite-4.2.1.tgz}
1344 | engines: {node: ^14.18.0 || >=16.0.0}
1345 | hasBin: true
1346 | peerDependencies:
1347 | '@types/node': '>= 14'
1348 | less: '*'
1349 | sass: '*'
1350 | stylus: '*'
1351 | sugarss: '*'
1352 | terser: ^5.4.0
1353 | peerDependenciesMeta:
1354 | '@types/node':
1355 | optional: true
1356 | less:
1357 | optional: true
1358 | sass:
1359 | optional: true
1360 | stylus:
1361 | optional: true
1362 | sugarss:
1363 | optional: true
1364 | terser:
1365 | optional: true
1366 | dependencies:
1367 | '@types/node': 22.10.0
1368 | esbuild: 0.17.14
1369 | postcss: 8.4.21
1370 | resolve: 1.22.1
1371 | rollup: 3.20.2
1372 | sass: 1.60.0
1373 | optionalDependencies:
1374 | fsevents: 2.3.2
1375 | dev: true
1376 |
1377 | /vue-demi/0.14.10_vue@3.2.47:
1378 | resolution: {integrity: sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==}
1379 | engines: {node: '>=12'}
1380 | hasBin: true
1381 | requiresBuild: true
1382 | peerDependencies:
1383 | '@vue/composition-api': ^1.0.0-rc.1
1384 | vue: ^3.0.0-0 || ^2.6.0
1385 | peerDependenciesMeta:
1386 | '@vue/composition-api':
1387 | optional: true
1388 | dependencies:
1389 | vue: 3.2.47
1390 |
1391 | /vue-template-compiler/2.7.14:
1392 | resolution: {integrity: sha512-zyA5Y3ArvVG0NacJDkkzJuPQDF8RFeRlzV2vLeSnhSpieO6LK2OVbdLPi5MPPs09Ii+gMO8nY4S3iKQxBxDmWQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/vue-template-compiler/-/vue-template-compiler-2.7.14.tgz}
1393 | dependencies:
1394 | de-indent: 1.0.2
1395 | he: 1.2.0
1396 | dev: true
1397 |
1398 | /vue-tsc/1.2.0_typescript@4.9.5:
1399 | resolution: {integrity: sha512-rIlzqdrhyPYyLG9zxsVRa+JEseeS9s8F2BbVVVWRRsTZvJO2BbhLEb2HW3MY+DFma0378tnIqs+vfTzbcQtRFw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/vue-tsc/-/vue-tsc-1.2.0.tgz}
1400 | hasBin: true
1401 | peerDependencies:
1402 | typescript: '*'
1403 | dependencies:
1404 | '@volar/vue-language-core': 1.2.0
1405 | '@volar/vue-typescript': 1.2.0
1406 | typescript: 4.9.5
1407 | dev: true
1408 |
1409 | /vue/3.2.47:
1410 | resolution: {integrity: sha512-60188y/9Dc9WVrAZeUVSDxRQOZ+z+y5nO2ts9jWXSTkMvayiWxCWOWtBQoYjLeccfXkiiPZWAHcV+WTPhkqJHQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/vue/-/vue-3.2.47.tgz}
1411 | dependencies:
1412 | '@vue/compiler-dom': 3.2.47
1413 | '@vue/compiler-sfc': 3.2.47
1414 | '@vue/runtime-dom': 3.2.47
1415 | '@vue/server-renderer': 3.2.47_vue@3.2.47
1416 | '@vue/shared': 3.2.47
1417 |
1418 | /webpack-sources/3.2.3:
1419 | resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/webpack-sources/-/webpack-sources-3.2.3.tgz}
1420 | engines: {node: '>=10.13.0'}
1421 | dev: true
1422 |
1423 | /webpack-virtual-modules/0.5.0:
1424 | resolution: {integrity: sha512-kyDivFZ7ZM0BVOUteVbDFhlRt7Ah/CSPwJdi8hBpkK7QLumUqdLtVfm/PX/hkcnrvr0i77fO5+TjZ94Pe+C9iw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/webpack-virtual-modules/-/webpack-virtual-modules-0.5.0.tgz}
1425 | dev: true
1426 |
1427 | /xtend/4.0.2:
1428 | resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/xtend/-/xtend-4.0.2.tgz}
1429 | engines: {node: '>=0.4'}
1430 | dev: true
1431 |
1432 | /yaml/1.10.2:
1433 | resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/yaml/-/yaml-1.10.2.tgz}
1434 | engines: {node: '>= 6'}
1435 | dev: true
1436 |
--------------------------------------------------------------------------------