├── .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 | 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 | 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 | 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 | ![image-20230329172450904.png](https://p1-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/66b9de233e5b4fb4a126f93b48cf3111~tplv-k3u1fbpfcp-watermark.image?) 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 | 694 | ... 695 | ``` 696 | 697 | 698 | ![image-20230329173016354.png](https://p6-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/038cee21be944ffea1f28cb65b97df01~tplv-k3u1fbpfcp-watermark.image?) 699 | 700 | 这样就完成了整个项目中的动态主题使用了,我们可以编写一个简单的页面来查看效果。 701 | 702 | ### 编写预览代码 703 | 704 | ```vue 705 | 706 | 843 | 844 | 873 | 874 | 879 | ``` 880 | 881 | 882 | ![image-20230330143346504.png](https://p9-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/c3c108453e6e4cd9b92b27edc717e69c~tplv-k3u1fbpfcp-watermark.image?) 883 | 884 | ### 编写测试主题切换代码 885 | 886 | 这里在前端简单编写一个修改主题颜色的组件,来测试我们的动态主题效果。 887 | 888 | 真实业务逻辑中,该功能也许在后台管理系统中,配置完成后,保存到数据库,前端在初始化时,通过接口来获取主题再调用`setTheme(theme)`设置主题。 889 | 890 | ```vue 891 | 892 | 920 | 921 | 937 | 938 | 939 | ``` 940 | 941 | `App.vue`调用组件 942 | 943 | ```vue 944 | 945 | 966 | 967 | 975 | ``` 976 | 977 | ![image-20230330143821084.png](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/b79cbe5530e74de5b634f0846d325daf~tplv-k3u1fbpfcp-watermark.image?) 978 | 979 | 我们尝试修改一下主题色: 980 | 981 | 修改一套紫色主题色,保存,查看效果,可以看到已经修改为我们期待的颜色了。 982 | 983 | ![image-20230330144347135.png](https://p9-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/dced07b68a07400582492f2d06a8930a~tplv-k3u1fbpfcp-watermark.image?) 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 | --------------------------------------------------------------------------------