├── .eslintignore ├── .eslintrc.js ├── .gitignore ├── .prettierignore ├── .prettierrc.js ├── .vscode └── extensions.json ├── README.md ├── index.html ├── package.json ├── pnpm-lock.yaml ├── public └── vite.svg ├── src ├── App.vue ├── assets │ └── vue.svg ├── components │ ├── EditTable.vue │ ├── EditTableColumn.vue │ └── GridList.vue ├── constants │ └── mime-type.ts ├── hooks │ ├── useCommandComponent.ts │ ├── useEventListener.ts │ ├── useExport.ts │ ├── useHotKey.ts │ ├── useReadFileContent.ts │ ├── useRouterCache.ts │ ├── useSelectFile.ts │ └── useVirtualGridList.ts ├── layout │ └── index.vue ├── main.ts ├── router │ ├── index.ts │ └── types.ts ├── style.css ├── utils │ ├── error.ts │ ├── file.ts │ └── index.ts ├── views │ ├── command-dialog │ │ ├── README.md │ │ ├── components │ │ │ ├── Comp.vue │ │ │ └── MyDialog.vue │ │ └── index.vue │ ├── edit-table │ │ ├── README.md │ │ └── index.vue │ ├── grid-list │ │ ├── README.md │ │ └── index.vue │ └── hot-key │ │ └── index.vue └── vite-env.d.ts ├── tsconfig.json ├── tsconfig.node.json └── vite.config.ts /.eslintignore: -------------------------------------------------------------------------------- 1 | dist 2 | coverage 3 | node_modules 4 | dest 5 | types 6 | lib 7 | public/ 8 | -------------------------------------------------------------------------------- /.eslintrc.js: -------------------------------------------------------------------------------- 1 | const { defineConfig } = require('eslint-define-config'); 2 | 3 | module.exports = defineConfig({ 4 | root: true, 5 | env: { 6 | node: true, 7 | browser: true, 8 | es2022: true, 9 | }, 10 | globals: { 11 | describe: true, 12 | it: true, 13 | expect: true, 14 | beforeEach: true, 15 | NodeJS: true, 16 | }, 17 | extends: ['plugin:vue/vue3-recommended', 'eslint:recommended', 'plugin:prettier/recommended'], 18 | parser: 'vue-eslint-parser', 19 | parserOptions: { 20 | ecmaVersion: 12, 21 | parser: '@typescript-eslint/parser', 22 | extraFileExtensions: ['.vue'], 23 | sourceType: 'module', 24 | project: ['./tsconfig.json'], 25 | }, 26 | plugins: ['vue', '@typescript-eslint', 'simple-import-sort', 'prettier'], 27 | ignorePatterns: ['.eslintrc.js'], 28 | rules: { 29 | // eslint (http://eslint.cn/docs/rules) 30 | 'no-var': ['error'], 31 | 'no-multiple-empty-lines': ['error', { max: 1 }], 32 | 'no-debugger': ['error'], 33 | 'no-extra-bind': ['error'], 34 | 35 | // typescript (http://typescript-eslint.io/rules) 36 | '@typescript-eslint/no-unused-vars': ['error'], 37 | '@typescript-eslint/class-literal-property-style': ['error', 'getters'], 38 | '@typescript-eslint/no-empty-function': ['off'], 39 | '@typescript-eslint/no-require-imports': ['off'], 40 | '@typescript-eslint/no-misused-promises': [ 41 | 'error', 42 | { 43 | checksVoidReturn: false, 44 | }, 45 | ], 46 | 47 | // vue (http://eslint.vuejs.org/rules) 48 | 'vue/one-component-per-file': ['error'], 49 | 'vue/require-default-prop': ['off'], 50 | 'vue/no-mutating-props': ['off'], 51 | 'vue/multi-word-component-names': ['off'], 52 | 'vue/padding-line-between-blocks': ['error'], 53 | 'vue/require-component-is': ['error'], 54 | 'vue/component-definition-name-casing': ['error', 'PascalCase'], 55 | 'vue/component-name-in-template-casing': ['error', 'PascalCase'], 56 | 'vue/component-options-name-casing': ['error', 'PascalCase'], 57 | 'vue/no-reserved-component-names': ['error', { disallowVue3BuiltInComponents: true }], 58 | 'vue/component-tags-order': ['error', { order: ['script:not([setup])', 'script[setup]', 'template', 'style'] }], 59 | 'vue/block-lang': ['error', { script: { lang: 'ts' } }], 60 | 'vue/no-template-shadow': ['off'], 61 | 'vue/attributes-order': [ 62 | 'error', 63 | { 64 | order: [ 65 | 'LIST_RENDERING', 66 | 'CONDITIONALS', 67 | 'RENDER_MODIFIERS', 68 | 'GLOBAL', 69 | 'UNIQUE', 70 | 'TWO_WAY_BINDING', 71 | 'DEFINITION', 72 | 'OTHER_ATTR', 73 | 'EVENTS', 74 | 'CONTENT', 75 | ], 76 | }, 77 | ], 78 | 'vue/order-in-components': [ 79 | 'error', 80 | { 81 | order: [ 82 | 'name', 83 | ['components', 'directives'], 84 | ['mixins', 'provide', 'inject'], 85 | 'props', 86 | 'emits', 87 | 'data', 88 | 'computed', 89 | 'watch', 90 | 'LIFECYCLE_HOOKS', 91 | 'methods', 92 | ['template', 'render'], 93 | 'renderError', 94 | ], 95 | }, 96 | ], 97 | 'vue/valid-attribute-name': ['off'], 98 | 'vue/no-v-html': ['error'], 99 | 'vue/no-unused-refs': ['error'], 100 | 'vue/no-unused-vars': ['error'], 101 | 'vue/no-undef-properties': ['error'], 102 | 'vue/no-lone-template': ['error'], 103 | 'vue/v-on-function-call': ['error'], 104 | 'vue/v-on-event-hyphenation': ['error', 'always', { autofix: true }], 105 | 106 | 'simple-import-sort/imports': [ 107 | 'error', 108 | { 109 | groups: [ 110 | ['./polyfills'], 111 | // Node.js builtins. You could also generate this regex if you use a `.js` config. 112 | // For example: `^(${require("module").builtinModules.join("|")})(/|$)` 113 | [ 114 | '^(assert|buffer|child_process|cluster|console|constants|crypto|dgram|dns|domain|events|fs|http|https|module|net|os|path|punycode|querystring|readline|repl|stream|string_decoder|sys|timers|tls|tty|url|util|vm|zlib|freelist|v8|process|async_hooks|http2|perf_hooks)(/.*|$)', 115 | ], 116 | // Packages. `react|vue` related packages come first. 117 | ['^(react|vue|vite)', '^@?\\w'], 118 | ['^(@tmagic)(/.*|$)'], 119 | // Internal packages. 120 | ['^(@|@editor)(/.*|$)'], 121 | // Side effect imports. 122 | ['^\\u0000'], 123 | // Parent imports. Put `..` last. 124 | ['^\\.\\.(?!/?$)', '^\\.\\./?$'], 125 | // Other relative imports. Put same-folder imports and `.` last. 126 | ['^\\./(?=.*/)(?!/?$)', '^\\.(?!/?$)', '^\\./?$'], 127 | // Style imports. 128 | ['^.+\\.s?css$'], 129 | ], 130 | }, 131 | ], 132 | 133 | 'prettier/prettier': [ 134 | 'error', 135 | { 136 | singleQuote: true, 137 | trailingComma: 'es5', 138 | semi: true, 139 | arrowParens: 'always', 140 | bracketSpacing: true, 141 | printWidth: 120, 142 | tabWidth: 2, 143 | useTabs: false, 144 | endOfLine: 'auto', 145 | vueIndentScriptAndStyle: false, 146 | vueIndentHTML: false, 147 | }, 148 | ], 149 | }, 150 | }); 151 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | pnpm-debug.log* 8 | lerna-debug.log* 9 | 10 | node_modules 11 | dist 12 | dist-ssr 13 | *.local 14 | 15 | # Editor directories and files 16 | .vscode/* 17 | !.vscode/extensions.json 18 | .idea 19 | .DS_Store 20 | *.suo 21 | *.ntvs* 22 | *.njsproj 23 | *.sln 24 | *.sw? 25 | -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | dist 2 | coverage 3 | node_modules 4 | dest 5 | types 6 | 7 | *.mjs 8 | *.mjs.map 9 | *.umd.js 10 | *.umd.js.map 11 | -------------------------------------------------------------------------------- /.prettierrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | singleQuote: true, 3 | trailingComma: 'es5', 4 | semi: true, 5 | arrowParens: 'always', 6 | bracketSpacing: true, 7 | printWidth: 120, 8 | tabWidth: 2, 9 | useTabs: false, 10 | endOfLine: 'auto', 11 | vueIndentScriptAndStyle: false, 12 | vueIndentHTML: false, 13 | }; 14 | -------------------------------------------------------------------------------- /.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | "recommendations": ["Vue.volar", "Vue.vscode-typescript-vue-plugin"] 3 | } 4 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Vue aide 2 | 3 | ## Components 4 | 5 | ### EditTable 6 | 7 | 阅读[《极致舒适的 Vue 可编辑表格》](https://juejin.cn/post/7242140832379584567)获取更多 EditTable 的信息 8 | 9 | #### 无编辑效果 10 | 11 | ![无编辑效果](https://cdn.staticaly.com/gh/JessYan0913/picx-images-hosting@master/Snipaste_2023-09-02_11-21-52.3r5pp82rg660.webp) 12 | 13 | #### 可编辑效果 14 | 15 | ![可编辑效果](https://cdn.staticaly.com/gh/JessYan0913/picx-images-hosting@master/Kapture-2023-09-02-at-11.30.59.2nhe801q0e60.gif) 16 | 17 | #### 删除效果 18 | 19 | ![删除效果](https://cdn.staticaly.com/gh/JessYan0913/picx-images-hosting@master/Kapture-2023-09-02-at-11.33.51.oj8lh5vmwqo.gif) 20 | 21 | #### 新增效果 22 | 23 | ![新增效果](https://cdn.staticaly.com/gh/JessYan0913/picx-images-hosting@master/Kapture-2023-09-02-at-11.37.56.5ile0v6cw2s0.gif) 24 | 25 | #### 表单校验效果 26 | 27 | ![表单校验效果](https://cdn.staticaly.com/gh/JessYan0913/picx-images-hosting@master/Kapture-2023-09-02-at-11.39.47.5qsl1p1kbo80.gif) 28 | 29 | #### 获取编辑结果 30 | 31 | ![获取编辑结果](https://cdn.staticaly.com/gh/JessYan0913/picx-images-hosting@master/Kapture-2023-09-02-at-11.42.26.6ugb99gesy80.gif) 32 | 33 | ### GridList 34 | 35 | 阅读[《极致舒适的 Vue 高性能列表》](https://juejin.cn/post/7248606302896832570)获取更多 GridList 的信息 36 | 37 | #### Grid 布局预览 38 | 39 | ![Grid布局预览](https://cdn.staticaly.com/gh/JessYan0913/picx-images-hosting@master/Kapture-2023-09-02-at-13.53.05.4evhtw5z0r60.gif) 40 | 41 | #### 单列布局预览 42 | 43 | ![单列布局预览](https://cdn.staticaly.com/gh/JessYan0913/picx-images-hosting@master/Kapture-2023-09-02-at-14.08.53.38380u8uhje0.gif) 44 | 45 | #### 分页加载预览 46 | 47 | ![Grid分页加载](https://cdn.staticaly.com/gh/JessYan0913/picx-images-hosting@master/Kapture-2023-09-02-at-13.58.05.lb1ug03rjj4.gif) 48 | 49 | #### 虚拟列表效果 50 | 51 | ![虚拟列表效果](https://cdn.staticaly.com/gh/JessYan0913/picx-images-hosting@master/Kapture-2023-09-02-at-14.05.15.2lamgisdfy40.gif) 52 | 53 | ## Hooks 54 | 55 | ### useHotkey 56 | 57 | ### useExport 58 | 59 | ### useSelectFile 60 | 61 | ### useExport 62 | 63 | ### useHotKey 64 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Vite + Vue + TS 8 | 9 | 10 |
11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "edit-table", 3 | "private": true, 4 | "version": "0.0.0", 5 | "scripts": { 6 | "dev": "vite", 7 | "build": "vite build", 8 | "build:github": "npm run build && npm run github", 9 | "preview": "vite preview", 10 | "lint": "eslint . --ext .js,.vue,.ts,.tsx", 11 | "lint:fix": "eslint . --fix --ext .js,.vue,.ts,.tsx", 12 | "github": "gh-pages -d dist -r https://github.com/JessYan0913/vue-aide.git" 13 | }, 14 | "dependencies": { 15 | "element-plus": "^2.2.28", 16 | "vue": "^3.3.4", 17 | "vue-router": "^4.2.4" 18 | }, 19 | "devDependencies": { 20 | "@types/node": "^18.11.18", 21 | "@typescript-eslint/eslint-plugin": "^5.48.0", 22 | "@typescript-eslint/parser": "^5.48.0", 23 | "@typescript-eslint/typescript-estree": "^5.48.0", 24 | "@vitejs/plugin-vue": "^4.1.0", 25 | "eslint": "^8.31.0", 26 | "eslint-config-prettier": "^8.6.0", 27 | "eslint-define-config": "^1.13.0", 28 | "eslint-plugin-import": "^2.26.0", 29 | "eslint-plugin-prettier": "^4.2.1", 30 | "eslint-plugin-simple-import-sort": "^8.0.0", 31 | "eslint-plugin-vue": "^9.8.0", 32 | "gh-pages": "^6.0.0", 33 | "prettier": "^2.8.2", 34 | "sass": "^1.63.3", 35 | "typescript": "^5.0.2", 36 | "vite": "^4.3.9", 37 | "vue-tsc": "^1.4.2" 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: 5.4 2 | 3 | specifiers: 4 | '@types/node': ^18.11.18 5 | '@typescript-eslint/eslint-plugin': ^5.48.0 6 | '@typescript-eslint/parser': ^5.48.0 7 | '@typescript-eslint/typescript-estree': ^5.48.0 8 | '@vitejs/plugin-vue': ^4.1.0 9 | element-plus: ^2.2.28 10 | eslint: ^8.31.0 11 | eslint-config-prettier: ^8.6.0 12 | eslint-define-config: ^1.13.0 13 | eslint-plugin-import: ^2.26.0 14 | eslint-plugin-prettier: ^4.2.1 15 | eslint-plugin-simple-import-sort: ^8.0.0 16 | eslint-plugin-vue: ^9.8.0 17 | gh-pages: ^6.0.0 18 | prettier: ^2.8.2 19 | sass: ^1.63.3 20 | typescript: ^5.0.2 21 | vite: ^4.3.9 22 | vue: ^3.3.4 23 | vue-router: ^4.2.4 24 | vue-tsc: ^1.4.2 25 | 26 | dependencies: 27 | element-plus: 2.3.6_vue@3.3.4 28 | vue: 3.3.4 29 | vue-router: 4.2.4_vue@3.3.4 30 | 31 | devDependencies: 32 | '@types/node': 18.17.13 33 | '@typescript-eslint/eslint-plugin': 5.62.0_udpy2hvbsts6xtoymztsifbu7e 34 | '@typescript-eslint/parser': 5.62.0_jkonsiqll5kf7uvjobvewtpypa 35 | '@typescript-eslint/typescript-estree': 5.62.0_typescript@5.1.3 36 | '@vitejs/plugin-vue': 4.2.3_vite@4.3.9+vue@3.3.4 37 | eslint: 8.48.0 38 | eslint-config-prettier: 8.10.0_eslint@8.48.0 39 | eslint-define-config: 1.23.0 40 | eslint-plugin-import: 2.28.1_ean2qamlavtp6bo3zeco4caumq 41 | eslint-plugin-prettier: 4.2.1_b7j5i5eung22avfvwixh6yzuzu 42 | eslint-plugin-simple-import-sort: 8.0.0_eslint@8.48.0 43 | eslint-plugin-vue: 9.17.0_eslint@8.48.0 44 | gh-pages: 6.0.0 45 | prettier: 2.8.8 46 | sass: 1.63.3 47 | typescript: 5.1.3 48 | vite: 4.3.9_3hkcy4cv6b7vyfga2q67aben5q 49 | vue-tsc: 1.6.5_typescript@5.1.3 50 | 51 | packages: 52 | 53 | /@aashutoshrathi/word-wrap/1.2.6: 54 | resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} 55 | engines: {node: '>=0.10.0'} 56 | dev: true 57 | 58 | /@babel/helper-string-parser/7.22.5: 59 | resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==} 60 | engines: {node: '>=6.9.0'} 61 | 62 | /@babel/helper-validator-identifier/7.22.5: 63 | resolution: {integrity: sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==} 64 | engines: {node: '>=6.9.0'} 65 | 66 | /@babel/parser/7.22.5: 67 | resolution: {integrity: sha512-DFZMC9LJUG9PLOclRC32G63UXwzqS2koQC8dkx+PLdmt1xSePYpbT/NbsrJy8Q/muXz7o/h/d4A7Fuyixm559Q==} 68 | engines: {node: '>=6.0.0'} 69 | hasBin: true 70 | dependencies: 71 | '@babel/types': 7.22.5 72 | 73 | /@babel/types/7.22.5: 74 | resolution: {integrity: sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==} 75 | engines: {node: '>=6.9.0'} 76 | dependencies: 77 | '@babel/helper-string-parser': 7.22.5 78 | '@babel/helper-validator-identifier': 7.22.5 79 | to-fast-properties: 2.0.0 80 | 81 | /@ctrl/tinycolor/3.6.0: 82 | resolution: {integrity: sha512-/Z3l6pXthq0JvMYdUFyX9j0MaCltlIn6mfh9jLyQwg5aPKxkyNa0PTHtU1AlFXLNk55ZuAeJRcpvq+tmLfKmaQ==} 83 | engines: {node: '>=10'} 84 | dev: false 85 | 86 | /@element-plus/icons-vue/2.1.0_vue@3.3.4: 87 | resolution: {integrity: sha512-PSBn3elNoanENc1vnCfh+3WA9fimRC7n+fWkf3rE5jvv+aBohNHABC/KAR5KWPecxWxDTVT1ERpRbOMRcOV/vA==} 88 | peerDependencies: 89 | vue: ^3.2.0 90 | dependencies: 91 | vue: 3.3.4 92 | dev: false 93 | 94 | /@esbuild/android-arm/0.17.19: 95 | resolution: {integrity: sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==} 96 | engines: {node: '>=12'} 97 | cpu: [arm] 98 | os: [android] 99 | requiresBuild: true 100 | dev: true 101 | optional: true 102 | 103 | /@esbuild/android-arm64/0.17.19: 104 | resolution: {integrity: sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==} 105 | engines: {node: '>=12'} 106 | cpu: [arm64] 107 | os: [android] 108 | requiresBuild: true 109 | dev: true 110 | optional: true 111 | 112 | /@esbuild/android-x64/0.17.19: 113 | resolution: {integrity: sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==} 114 | engines: {node: '>=12'} 115 | cpu: [x64] 116 | os: [android] 117 | requiresBuild: true 118 | dev: true 119 | optional: true 120 | 121 | /@esbuild/darwin-arm64/0.17.19: 122 | resolution: {integrity: sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==} 123 | engines: {node: '>=12'} 124 | cpu: [arm64] 125 | os: [darwin] 126 | requiresBuild: true 127 | dev: true 128 | optional: true 129 | 130 | /@esbuild/darwin-x64/0.17.19: 131 | resolution: {integrity: sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==} 132 | engines: {node: '>=12'} 133 | cpu: [x64] 134 | os: [darwin] 135 | requiresBuild: true 136 | dev: true 137 | optional: true 138 | 139 | /@esbuild/freebsd-arm64/0.17.19: 140 | resolution: {integrity: sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==} 141 | engines: {node: '>=12'} 142 | cpu: [arm64] 143 | os: [freebsd] 144 | requiresBuild: true 145 | dev: true 146 | optional: true 147 | 148 | /@esbuild/freebsd-x64/0.17.19: 149 | resolution: {integrity: sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==} 150 | engines: {node: '>=12'} 151 | cpu: [x64] 152 | os: [freebsd] 153 | requiresBuild: true 154 | dev: true 155 | optional: true 156 | 157 | /@esbuild/linux-arm/0.17.19: 158 | resolution: {integrity: sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==} 159 | engines: {node: '>=12'} 160 | cpu: [arm] 161 | os: [linux] 162 | requiresBuild: true 163 | dev: true 164 | optional: true 165 | 166 | /@esbuild/linux-arm64/0.17.19: 167 | resolution: {integrity: sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==} 168 | engines: {node: '>=12'} 169 | cpu: [arm64] 170 | os: [linux] 171 | requiresBuild: true 172 | dev: true 173 | optional: true 174 | 175 | /@esbuild/linux-ia32/0.17.19: 176 | resolution: {integrity: sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==} 177 | engines: {node: '>=12'} 178 | cpu: [ia32] 179 | os: [linux] 180 | requiresBuild: true 181 | dev: true 182 | optional: true 183 | 184 | /@esbuild/linux-loong64/0.17.19: 185 | resolution: {integrity: sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==} 186 | engines: {node: '>=12'} 187 | cpu: [loong64] 188 | os: [linux] 189 | requiresBuild: true 190 | dev: true 191 | optional: true 192 | 193 | /@esbuild/linux-mips64el/0.17.19: 194 | resolution: {integrity: sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==} 195 | engines: {node: '>=12'} 196 | cpu: [mips64el] 197 | os: [linux] 198 | requiresBuild: true 199 | dev: true 200 | optional: true 201 | 202 | /@esbuild/linux-ppc64/0.17.19: 203 | resolution: {integrity: sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==} 204 | engines: {node: '>=12'} 205 | cpu: [ppc64] 206 | os: [linux] 207 | requiresBuild: true 208 | dev: true 209 | optional: true 210 | 211 | /@esbuild/linux-riscv64/0.17.19: 212 | resolution: {integrity: sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==} 213 | engines: {node: '>=12'} 214 | cpu: [riscv64] 215 | os: [linux] 216 | requiresBuild: true 217 | dev: true 218 | optional: true 219 | 220 | /@esbuild/linux-s390x/0.17.19: 221 | resolution: {integrity: sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==} 222 | engines: {node: '>=12'} 223 | cpu: [s390x] 224 | os: [linux] 225 | requiresBuild: true 226 | dev: true 227 | optional: true 228 | 229 | /@esbuild/linux-x64/0.17.19: 230 | resolution: {integrity: sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==} 231 | engines: {node: '>=12'} 232 | cpu: [x64] 233 | os: [linux] 234 | requiresBuild: true 235 | dev: true 236 | optional: true 237 | 238 | /@esbuild/netbsd-x64/0.17.19: 239 | resolution: {integrity: sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==} 240 | engines: {node: '>=12'} 241 | cpu: [x64] 242 | os: [netbsd] 243 | requiresBuild: true 244 | dev: true 245 | optional: true 246 | 247 | /@esbuild/openbsd-x64/0.17.19: 248 | resolution: {integrity: sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==} 249 | engines: {node: '>=12'} 250 | cpu: [x64] 251 | os: [openbsd] 252 | requiresBuild: true 253 | dev: true 254 | optional: true 255 | 256 | /@esbuild/sunos-x64/0.17.19: 257 | resolution: {integrity: sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==} 258 | engines: {node: '>=12'} 259 | cpu: [x64] 260 | os: [sunos] 261 | requiresBuild: true 262 | dev: true 263 | optional: true 264 | 265 | /@esbuild/win32-arm64/0.17.19: 266 | resolution: {integrity: sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==} 267 | engines: {node: '>=12'} 268 | cpu: [arm64] 269 | os: [win32] 270 | requiresBuild: true 271 | dev: true 272 | optional: true 273 | 274 | /@esbuild/win32-ia32/0.17.19: 275 | resolution: {integrity: sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==} 276 | engines: {node: '>=12'} 277 | cpu: [ia32] 278 | os: [win32] 279 | requiresBuild: true 280 | dev: true 281 | optional: true 282 | 283 | /@esbuild/win32-x64/0.17.19: 284 | resolution: {integrity: sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==} 285 | engines: {node: '>=12'} 286 | cpu: [x64] 287 | os: [win32] 288 | requiresBuild: true 289 | dev: true 290 | optional: true 291 | 292 | /@eslint-community/eslint-utils/4.4.0_eslint@8.48.0: 293 | resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} 294 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 295 | peerDependencies: 296 | eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 297 | dependencies: 298 | eslint: 8.48.0 299 | eslint-visitor-keys: 3.4.3 300 | dev: true 301 | 302 | /@eslint-community/regexpp/4.8.0: 303 | resolution: {integrity: sha512-JylOEEzDiOryeUnFbQz+oViCXS0KsvR1mvHkoMiu5+UiBvy+RYX7tzlIIIEstF/gVa2tj9AQXk3dgnxv6KxhFg==} 304 | engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} 305 | dev: true 306 | 307 | /@eslint/eslintrc/2.1.2: 308 | resolution: {integrity: sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==} 309 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 310 | dependencies: 311 | ajv: 6.12.6 312 | debug: 4.3.4 313 | espree: 9.6.1 314 | globals: 13.21.0 315 | ignore: 5.2.4 316 | import-fresh: 3.3.0 317 | js-yaml: 4.1.0 318 | minimatch: 3.1.2 319 | strip-json-comments: 3.1.1 320 | transitivePeerDependencies: 321 | - supports-color 322 | dev: true 323 | 324 | /@eslint/js/8.48.0: 325 | resolution: {integrity: sha512-ZSjtmelB7IJfWD2Fvb7+Z+ChTIKWq6kjda95fLcQKNS5aheVHn4IkfgRQE3sIIzTcSLwLcLZUD9UBt+V7+h+Pw==} 326 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 327 | dev: true 328 | 329 | /@floating-ui/core/1.2.6: 330 | resolution: {integrity: sha512-EvYTiXet5XqweYGClEmpu3BoxmsQ4hkj3QaYA6qEnigCWffTP3vNRwBReTdrwDwo7OoJ3wM8Uoe9Uk4n+d4hfg==} 331 | dev: false 332 | 333 | /@floating-ui/dom/1.2.9: 334 | resolution: {integrity: sha512-sosQxsqgxMNkV3C+3UqTS6LxP7isRLwX8WMepp843Rb3/b0Wz8+MdUkxJksByip3C2WwLugLHN1b4ibn//zKwQ==} 335 | dependencies: 336 | '@floating-ui/core': 1.2.6 337 | dev: false 338 | 339 | /@humanwhocodes/config-array/0.11.11: 340 | resolution: {integrity: sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA==} 341 | engines: {node: '>=10.10.0'} 342 | dependencies: 343 | '@humanwhocodes/object-schema': 1.2.1 344 | debug: 4.3.4 345 | minimatch: 3.1.2 346 | transitivePeerDependencies: 347 | - supports-color 348 | dev: true 349 | 350 | /@humanwhocodes/module-importer/1.0.1: 351 | resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} 352 | engines: {node: '>=12.22'} 353 | dev: true 354 | 355 | /@humanwhocodes/object-schema/1.2.1: 356 | resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} 357 | dev: true 358 | 359 | /@jridgewell/sourcemap-codec/1.4.15: 360 | resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} 361 | 362 | /@nodelib/fs.scandir/2.1.5: 363 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 364 | engines: {node: '>= 8'} 365 | dependencies: 366 | '@nodelib/fs.stat': 2.0.5 367 | run-parallel: 1.2.0 368 | dev: true 369 | 370 | /@nodelib/fs.stat/2.0.5: 371 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 372 | engines: {node: '>= 8'} 373 | dev: true 374 | 375 | /@nodelib/fs.walk/1.2.8: 376 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 377 | engines: {node: '>= 8'} 378 | dependencies: 379 | '@nodelib/fs.scandir': 2.1.5 380 | fastq: 1.15.0 381 | dev: true 382 | 383 | /@sxzz/popperjs-es/2.11.7: 384 | resolution: {integrity: sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==} 385 | dev: false 386 | 387 | /@types/json-schema/7.0.12: 388 | resolution: {integrity: sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==} 389 | dev: true 390 | 391 | /@types/json5/0.0.29: 392 | resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} 393 | dev: true 394 | 395 | /@types/lodash-es/4.17.7: 396 | resolution: {integrity: sha512-z0ptr6UI10VlU6l5MYhGwS4mC8DZyYer2mCoyysZtSF7p26zOX8UpbrV0YpNYLGS8K4PUFIyEr62IMFFjveSiQ==} 397 | dependencies: 398 | '@types/lodash': 4.14.195 399 | dev: false 400 | 401 | /@types/lodash/4.14.195: 402 | resolution: {integrity: sha512-Hwx9EUgdwf2GLarOjQp5ZH8ZmblzcbTBC2wtQWNKARBSxM9ezRIAUpeDTgoQRAFB0+8CNWXVA9+MaSOzOF3nPg==} 403 | dev: false 404 | 405 | /@types/node/18.17.13: 406 | resolution: {integrity: sha512-SlLPDDe6YQl1JnQQy4hgsuJeo5q5c1TBU4be4jeBLXsqpjoDbfb0HesSfhMwnaxfSJ4txtfzJzW5/x/43fkkfQ==} 407 | dev: true 408 | 409 | /@types/semver/7.5.1: 410 | resolution: {integrity: sha512-cJRQXpObxfNKkFAZbJl2yjWtJCqELQIdShsogr1d2MilP8dKD9TE/nEKHkJgUNHdGKCQaf9HbIynuV2csLGVLg==} 411 | dev: true 412 | 413 | /@types/web-bluetooth/0.0.16: 414 | resolution: {integrity: sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ==} 415 | dev: false 416 | 417 | /@typescript-eslint/eslint-plugin/5.62.0_udpy2hvbsts6xtoymztsifbu7e: 418 | resolution: {integrity: sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==} 419 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 420 | peerDependencies: 421 | '@typescript-eslint/parser': ^5.0.0 422 | eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 423 | typescript: '*' 424 | peerDependenciesMeta: 425 | typescript: 426 | optional: true 427 | dependencies: 428 | '@eslint-community/regexpp': 4.8.0 429 | '@typescript-eslint/parser': 5.62.0_jkonsiqll5kf7uvjobvewtpypa 430 | '@typescript-eslint/scope-manager': 5.62.0 431 | '@typescript-eslint/type-utils': 5.62.0_jkonsiqll5kf7uvjobvewtpypa 432 | '@typescript-eslint/utils': 5.62.0_jkonsiqll5kf7uvjobvewtpypa 433 | debug: 4.3.4 434 | eslint: 8.48.0 435 | graphemer: 1.4.0 436 | ignore: 5.2.4 437 | natural-compare-lite: 1.4.0 438 | semver: 7.5.1 439 | tsutils: 3.21.0_typescript@5.1.3 440 | typescript: 5.1.3 441 | transitivePeerDependencies: 442 | - supports-color 443 | dev: true 444 | 445 | /@typescript-eslint/parser/5.62.0_jkonsiqll5kf7uvjobvewtpypa: 446 | resolution: {integrity: sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==} 447 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 448 | peerDependencies: 449 | eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 450 | typescript: '*' 451 | peerDependenciesMeta: 452 | typescript: 453 | optional: true 454 | dependencies: 455 | '@typescript-eslint/scope-manager': 5.62.0 456 | '@typescript-eslint/types': 5.62.0 457 | '@typescript-eslint/typescript-estree': 5.62.0_typescript@5.1.3 458 | debug: 4.3.4 459 | eslint: 8.48.0 460 | typescript: 5.1.3 461 | transitivePeerDependencies: 462 | - supports-color 463 | dev: true 464 | 465 | /@typescript-eslint/scope-manager/5.62.0: 466 | resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==} 467 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 468 | dependencies: 469 | '@typescript-eslint/types': 5.62.0 470 | '@typescript-eslint/visitor-keys': 5.62.0 471 | dev: true 472 | 473 | /@typescript-eslint/type-utils/5.62.0_jkonsiqll5kf7uvjobvewtpypa: 474 | resolution: {integrity: sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==} 475 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 476 | peerDependencies: 477 | eslint: '*' 478 | typescript: '*' 479 | peerDependenciesMeta: 480 | typescript: 481 | optional: true 482 | dependencies: 483 | '@typescript-eslint/typescript-estree': 5.62.0_typescript@5.1.3 484 | '@typescript-eslint/utils': 5.62.0_jkonsiqll5kf7uvjobvewtpypa 485 | debug: 4.3.4 486 | eslint: 8.48.0 487 | tsutils: 3.21.0_typescript@5.1.3 488 | typescript: 5.1.3 489 | transitivePeerDependencies: 490 | - supports-color 491 | dev: true 492 | 493 | /@typescript-eslint/types/5.62.0: 494 | resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==} 495 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 496 | dev: true 497 | 498 | /@typescript-eslint/typescript-estree/5.62.0_typescript@5.1.3: 499 | resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} 500 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 501 | peerDependencies: 502 | typescript: '*' 503 | peerDependenciesMeta: 504 | typescript: 505 | optional: true 506 | dependencies: 507 | '@typescript-eslint/types': 5.62.0 508 | '@typescript-eslint/visitor-keys': 5.62.0 509 | debug: 4.3.4 510 | globby: 11.1.0 511 | is-glob: 4.0.3 512 | semver: 7.5.1 513 | tsutils: 3.21.0_typescript@5.1.3 514 | typescript: 5.1.3 515 | transitivePeerDependencies: 516 | - supports-color 517 | dev: true 518 | 519 | /@typescript-eslint/utils/5.62.0_jkonsiqll5kf7uvjobvewtpypa: 520 | resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} 521 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 522 | peerDependencies: 523 | eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 524 | dependencies: 525 | '@eslint-community/eslint-utils': 4.4.0_eslint@8.48.0 526 | '@types/json-schema': 7.0.12 527 | '@types/semver': 7.5.1 528 | '@typescript-eslint/scope-manager': 5.62.0 529 | '@typescript-eslint/types': 5.62.0 530 | '@typescript-eslint/typescript-estree': 5.62.0_typescript@5.1.3 531 | eslint: 8.48.0 532 | eslint-scope: 5.1.1 533 | semver: 7.5.4 534 | transitivePeerDependencies: 535 | - supports-color 536 | - typescript 537 | dev: true 538 | 539 | /@typescript-eslint/visitor-keys/5.62.0: 540 | resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==} 541 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 542 | dependencies: 543 | '@typescript-eslint/types': 5.62.0 544 | eslint-visitor-keys: 3.4.3 545 | dev: true 546 | 547 | /@vitejs/plugin-vue/4.2.3_vite@4.3.9+vue@3.3.4: 548 | resolution: {integrity: sha512-R6JDUfiZbJA9cMiguQ7jxALsgiprjBeHL5ikpXfJCH62pPHtI+JdJ5xWj6Ev73yXSlYl86+blXn1kZHQ7uElxw==} 549 | engines: {node: ^14.18.0 || >=16.0.0} 550 | peerDependencies: 551 | vite: ^4.0.0 552 | vue: ^3.2.25 553 | dependencies: 554 | vite: 4.3.9_3hkcy4cv6b7vyfga2q67aben5q 555 | vue: 3.3.4 556 | dev: true 557 | 558 | /@volar/language-core/1.4.1: 559 | resolution: {integrity: sha512-EIY+Swv+TjsWpxOxujjMf1ZXqOjg9MT2VMXZ+1dKva0wD8W0L6EtptFFcCJdBbcKmGMFkr57Qzz9VNMWhs3jXQ==} 560 | dependencies: 561 | '@volar/source-map': 1.4.1 562 | dev: true 563 | 564 | /@volar/source-map/1.4.1: 565 | resolution: {integrity: sha512-bZ46ad72dsbzuOWPUtJjBXkzSQzzSejuR3CT81+GvTEI2E994D8JPXzM3tl98zyCNnjgs4OkRyliImL1dvJ5BA==} 566 | dependencies: 567 | muggle-string: 0.2.2 568 | dev: true 569 | 570 | /@volar/typescript/1.4.1-patch.2_typescript@5.1.3: 571 | resolution: {integrity: sha512-lPFYaGt8OdMEzNGJJChF40uYqMO4Z/7Q9fHPQC/NRVtht43KotSXLrkPandVVMf9aPbiJ059eAT+fwHGX16k4w==} 572 | peerDependencies: 573 | typescript: '*' 574 | dependencies: 575 | '@volar/language-core': 1.4.1 576 | typescript: 5.1.3 577 | dev: true 578 | 579 | /@volar/vue-language-core/1.6.5: 580 | resolution: {integrity: sha512-IF2b6hW4QAxfsLd5mePmLgtkXzNi+YnH6ltCd80gb7+cbdpFMjM1I+w+nSg2kfBTyfu+W8useCZvW89kPTBpzg==} 581 | dependencies: 582 | '@volar/language-core': 1.4.1 583 | '@volar/source-map': 1.4.1 584 | '@vue/compiler-dom': 3.3.4 585 | '@vue/compiler-sfc': 3.3.4 586 | '@vue/reactivity': 3.3.4 587 | '@vue/shared': 3.3.4 588 | minimatch: 9.0.1 589 | muggle-string: 0.2.2 590 | vue-template-compiler: 2.7.14 591 | dev: true 592 | 593 | /@volar/vue-typescript/1.6.5_typescript@5.1.3: 594 | resolution: {integrity: sha512-er9rVClS4PHztMUmtPMDTl+7c7JyrxweKSAEe/o/Noeq2bQx6v3/jZHVHBe8ZNUti5ubJL/+Tg8L3bzmlalV8A==} 595 | peerDependencies: 596 | typescript: '*' 597 | dependencies: 598 | '@volar/typescript': 1.4.1-patch.2_typescript@5.1.3 599 | '@volar/vue-language-core': 1.6.5 600 | typescript: 5.1.3 601 | dev: true 602 | 603 | /@vue/compiler-core/3.3.4: 604 | resolution: {integrity: sha512-cquyDNvZ6jTbf/+x+AgM2Arrp6G4Dzbb0R64jiG804HRMfRiFXWI6kqUVqZ6ZR0bQhIoQjB4+2bhNtVwndW15g==} 605 | dependencies: 606 | '@babel/parser': 7.22.5 607 | '@vue/shared': 3.3.4 608 | estree-walker: 2.0.2 609 | source-map-js: 1.0.2 610 | 611 | /@vue/compiler-dom/3.3.4: 612 | resolution: {integrity: sha512-wyM+OjOVpuUukIq6p5+nwHYtj9cFroz9cwkfmP9O1nzH68BenTTv0u7/ndggT8cIQlnBeOo6sUT/gvHcIkLA5w==} 613 | dependencies: 614 | '@vue/compiler-core': 3.3.4 615 | '@vue/shared': 3.3.4 616 | 617 | /@vue/compiler-sfc/3.3.4: 618 | resolution: {integrity: sha512-6y/d8uw+5TkCuzBkgLS0v3lSM3hJDntFEiUORM11pQ/hKvkhSKZrXW6i69UyXlJQisJxuUEJKAWEqWbWsLeNKQ==} 619 | dependencies: 620 | '@babel/parser': 7.22.5 621 | '@vue/compiler-core': 3.3.4 622 | '@vue/compiler-dom': 3.3.4 623 | '@vue/compiler-ssr': 3.3.4 624 | '@vue/reactivity-transform': 3.3.4 625 | '@vue/shared': 3.3.4 626 | estree-walker: 2.0.2 627 | magic-string: 0.30.0 628 | postcss: 8.4.24 629 | source-map-js: 1.0.2 630 | 631 | /@vue/compiler-ssr/3.3.4: 632 | resolution: {integrity: sha512-m0v6oKpup2nMSehwA6Uuu+j+wEwcy7QmwMkVNVfrV9P2qE5KshC6RwOCq8fjGS/Eak/uNb8AaWekfiXxbBB6gQ==} 633 | dependencies: 634 | '@vue/compiler-dom': 3.3.4 635 | '@vue/shared': 3.3.4 636 | 637 | /@vue/devtools-api/6.5.0: 638 | resolution: {integrity: sha512-o9KfBeaBmCKl10usN4crU53fYtC1r7jJwdGKjPT24t348rHxgfpZ0xL3Xm/gLUYnc0oTp8LAmrxOeLyu6tbk2Q==} 639 | dev: false 640 | 641 | /@vue/reactivity-transform/3.3.4: 642 | resolution: {integrity: sha512-MXgwjako4nu5WFLAjpBnCj/ieqcjE2aJBINUNQzkZQfzIZA4xn+0fV1tIYBJvvva3N3OvKGofRLvQIwEQPpaXw==} 643 | dependencies: 644 | '@babel/parser': 7.22.5 645 | '@vue/compiler-core': 3.3.4 646 | '@vue/shared': 3.3.4 647 | estree-walker: 2.0.2 648 | magic-string: 0.30.0 649 | 650 | /@vue/reactivity/3.3.4: 651 | resolution: {integrity: sha512-kLTDLwd0B1jG08NBF3R5rqULtv/f8x3rOFByTDz4J53ttIQEDmALqKqXY0J+XQeN0aV2FBxY8nJDf88yvOPAqQ==} 652 | dependencies: 653 | '@vue/shared': 3.3.4 654 | 655 | /@vue/runtime-core/3.3.4: 656 | resolution: {integrity: sha512-R+bqxMN6pWO7zGI4OMlmvePOdP2c93GsHFM/siJI7O2nxFRzj55pLwkpCedEY+bTMgp5miZ8CxfIZo3S+gFqvA==} 657 | dependencies: 658 | '@vue/reactivity': 3.3.4 659 | '@vue/shared': 3.3.4 660 | 661 | /@vue/runtime-dom/3.3.4: 662 | resolution: {integrity: sha512-Aj5bTJ3u5sFsUckRghsNjVTtxZQ1OyMWCr5dZRAPijF/0Vy4xEoRCwLyHXcj4D0UFbJ4lbx3gPTgg06K/GnPnQ==} 663 | dependencies: 664 | '@vue/runtime-core': 3.3.4 665 | '@vue/shared': 3.3.4 666 | csstype: 3.1.2 667 | 668 | /@vue/server-renderer/3.3.4_vue@3.3.4: 669 | resolution: {integrity: sha512-Q6jDDzR23ViIb67v+vM1Dqntu+HUexQcsWKhhQa4ARVzxOY2HbC7QRW/ggkDBd5BU+uM1sV6XOAP0b216o34JQ==} 670 | peerDependencies: 671 | vue: 3.3.4 672 | dependencies: 673 | '@vue/compiler-ssr': 3.3.4 674 | '@vue/shared': 3.3.4 675 | vue: 3.3.4 676 | 677 | /@vue/shared/3.3.4: 678 | resolution: {integrity: sha512-7OjdcV8vQ74eiz1TZLzZP4JwqM5fA94K6yntPS5Z25r9HDuGNzaGdgvwKYq6S+MxwF0TFRwe50fIR/MYnakdkQ==} 679 | 680 | /@vueuse/core/9.13.0_vue@3.3.4: 681 | resolution: {integrity: sha512-pujnclbeHWxxPRqXWmdkKV5OX4Wk4YeK7wusHqRwU0Q7EFusHoqNA/aPhB6KCh9hEqJkLAJo7bb0Lh9b+OIVzw==} 682 | dependencies: 683 | '@types/web-bluetooth': 0.0.16 684 | '@vueuse/metadata': 9.13.0 685 | '@vueuse/shared': 9.13.0_vue@3.3.4 686 | vue-demi: 0.14.5_vue@3.3.4 687 | transitivePeerDependencies: 688 | - '@vue/composition-api' 689 | - vue 690 | dev: false 691 | 692 | /@vueuse/metadata/9.13.0: 693 | resolution: {integrity: sha512-gdU7TKNAUVlXXLbaF+ZCfte8BjRJQWPCa2J55+7/h+yDtzw3vOoGQDRXzI6pyKyo6bXFT5/QoPE4hAknExjRLQ==} 694 | dev: false 695 | 696 | /@vueuse/shared/9.13.0_vue@3.3.4: 697 | resolution: {integrity: sha512-UrnhU+Cnufu4S6JLCPZnkWh0WwZGUp72ktOF2DFptMlOs3TOdVv8xJN53zhHGARmVOsz5KqOls09+J1NR6sBKw==} 698 | dependencies: 699 | vue-demi: 0.14.5_vue@3.3.4 700 | transitivePeerDependencies: 701 | - '@vue/composition-api' 702 | - vue 703 | dev: false 704 | 705 | /acorn-jsx/5.3.2_acorn@8.10.0: 706 | resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} 707 | peerDependencies: 708 | acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 709 | dependencies: 710 | acorn: 8.10.0 711 | dev: true 712 | 713 | /acorn/8.10.0: 714 | resolution: {integrity: sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==} 715 | engines: {node: '>=0.4.0'} 716 | hasBin: true 717 | dev: true 718 | 719 | /ajv/6.12.6: 720 | resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} 721 | dependencies: 722 | fast-deep-equal: 3.1.3 723 | fast-json-stable-stringify: 2.1.0 724 | json-schema-traverse: 0.4.1 725 | uri-js: 4.4.1 726 | dev: true 727 | 728 | /ansi-regex/5.0.1: 729 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 730 | engines: {node: '>=8'} 731 | dev: true 732 | 733 | /ansi-styles/4.3.0: 734 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 735 | engines: {node: '>=8'} 736 | dependencies: 737 | color-convert: 2.0.1 738 | dev: true 739 | 740 | /anymatch/3.1.3: 741 | resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} 742 | engines: {node: '>= 8'} 743 | dependencies: 744 | normalize-path: 3.0.0 745 | picomatch: 2.3.1 746 | dev: true 747 | 748 | /argparse/2.0.1: 749 | resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} 750 | dev: true 751 | 752 | /array-buffer-byte-length/1.0.0: 753 | resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==} 754 | dependencies: 755 | call-bind: 1.0.2 756 | is-array-buffer: 3.0.2 757 | dev: true 758 | 759 | /array-includes/3.1.6: 760 | resolution: {integrity: sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==} 761 | engines: {node: '>= 0.4'} 762 | dependencies: 763 | call-bind: 1.0.2 764 | define-properties: 1.2.0 765 | es-abstract: 1.22.1 766 | get-intrinsic: 1.2.1 767 | is-string: 1.0.7 768 | dev: true 769 | 770 | /array-union/1.0.2: 771 | resolution: {integrity: sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==} 772 | engines: {node: '>=0.10.0'} 773 | dependencies: 774 | array-uniq: 1.0.3 775 | dev: true 776 | 777 | /array-union/2.1.0: 778 | resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} 779 | engines: {node: '>=8'} 780 | dev: true 781 | 782 | /array-uniq/1.0.3: 783 | resolution: {integrity: sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==} 784 | engines: {node: '>=0.10.0'} 785 | dev: true 786 | 787 | /array.prototype.findlastindex/1.2.3: 788 | resolution: {integrity: sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==} 789 | engines: {node: '>= 0.4'} 790 | dependencies: 791 | call-bind: 1.0.2 792 | define-properties: 1.2.0 793 | es-abstract: 1.22.1 794 | es-shim-unscopables: 1.0.0 795 | get-intrinsic: 1.2.1 796 | dev: true 797 | 798 | /array.prototype.flat/1.3.1: 799 | resolution: {integrity: sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==} 800 | engines: {node: '>= 0.4'} 801 | dependencies: 802 | call-bind: 1.0.2 803 | define-properties: 1.2.0 804 | es-abstract: 1.22.1 805 | es-shim-unscopables: 1.0.0 806 | dev: true 807 | 808 | /array.prototype.flatmap/1.3.1: 809 | resolution: {integrity: sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==} 810 | engines: {node: '>= 0.4'} 811 | dependencies: 812 | call-bind: 1.0.2 813 | define-properties: 1.2.0 814 | es-abstract: 1.22.1 815 | es-shim-unscopables: 1.0.0 816 | dev: true 817 | 818 | /arraybuffer.prototype.slice/1.0.1: 819 | resolution: {integrity: sha512-09x0ZWFEjj4WD8PDbykUwo3t9arLn8NIzmmYEJFpYekOAQjpkGSyrQhNoRTcwwcFRu+ycWF78QZ63oWTqSjBcw==} 820 | engines: {node: '>= 0.4'} 821 | dependencies: 822 | array-buffer-byte-length: 1.0.0 823 | call-bind: 1.0.2 824 | define-properties: 1.2.0 825 | get-intrinsic: 1.2.1 826 | is-array-buffer: 3.0.2 827 | is-shared-array-buffer: 1.0.2 828 | dev: true 829 | 830 | /async-validator/4.2.5: 831 | resolution: {integrity: sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==} 832 | dev: false 833 | 834 | /async/3.2.4: 835 | resolution: {integrity: sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==} 836 | dev: true 837 | 838 | /available-typed-arrays/1.0.5: 839 | resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} 840 | engines: {node: '>= 0.4'} 841 | dev: true 842 | 843 | /balanced-match/1.0.2: 844 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 845 | dev: true 846 | 847 | /binary-extensions/2.2.0: 848 | resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} 849 | engines: {node: '>=8'} 850 | dev: true 851 | 852 | /boolbase/1.0.0: 853 | resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} 854 | dev: true 855 | 856 | /brace-expansion/1.1.11: 857 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 858 | dependencies: 859 | balanced-match: 1.0.2 860 | concat-map: 0.0.1 861 | dev: true 862 | 863 | /brace-expansion/2.0.1: 864 | resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} 865 | dependencies: 866 | balanced-match: 1.0.2 867 | dev: true 868 | 869 | /braces/3.0.2: 870 | resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} 871 | engines: {node: '>=8'} 872 | dependencies: 873 | fill-range: 7.0.1 874 | dev: true 875 | 876 | /call-bind/1.0.2: 877 | resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} 878 | dependencies: 879 | function-bind: 1.1.1 880 | get-intrinsic: 1.2.1 881 | dev: true 882 | 883 | /callsites/3.1.0: 884 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} 885 | engines: {node: '>=6'} 886 | dev: true 887 | 888 | /chalk/4.1.2: 889 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 890 | engines: {node: '>=10'} 891 | dependencies: 892 | ansi-styles: 4.3.0 893 | supports-color: 7.2.0 894 | dev: true 895 | 896 | /chokidar/3.5.3: 897 | resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} 898 | engines: {node: '>= 8.10.0'} 899 | dependencies: 900 | anymatch: 3.1.3 901 | braces: 3.0.2 902 | glob-parent: 5.1.2 903 | is-binary-path: 2.1.0 904 | is-glob: 4.0.3 905 | normalize-path: 3.0.0 906 | readdirp: 3.6.0 907 | optionalDependencies: 908 | fsevents: 2.3.2 909 | dev: true 910 | 911 | /color-convert/2.0.1: 912 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 913 | engines: {node: '>=7.0.0'} 914 | dependencies: 915 | color-name: 1.1.4 916 | dev: true 917 | 918 | /color-name/1.1.4: 919 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 920 | dev: true 921 | 922 | /commander/11.0.0: 923 | resolution: {integrity: sha512-9HMlXtt/BNoYr8ooyjjNRdIilOTkVJXB+GhxMTtOKwk0R4j4lS4NpjuqmRxroBfnfTSHQIHQB7wryHhXarNjmQ==} 924 | engines: {node: '>=16'} 925 | dev: true 926 | 927 | /commondir/1.0.1: 928 | resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} 929 | dev: true 930 | 931 | /concat-map/0.0.1: 932 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 933 | dev: true 934 | 935 | /cross-spawn/7.0.3: 936 | resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} 937 | engines: {node: '>= 8'} 938 | dependencies: 939 | path-key: 3.1.1 940 | shebang-command: 2.0.0 941 | which: 2.0.2 942 | dev: true 943 | 944 | /cssesc/3.0.0: 945 | resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} 946 | engines: {node: '>=4'} 947 | hasBin: true 948 | dev: true 949 | 950 | /csstype/3.1.2: 951 | resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==} 952 | 953 | /dayjs/1.11.8: 954 | resolution: {integrity: sha512-LcgxzFoWMEPO7ggRv1Y2N31hUf2R0Vj7fuy/m+Bg1K8rr+KAs1AEy4y9jd5DXe8pbHgX+srkHNS7TH6Q6ZhYeQ==} 955 | dev: false 956 | 957 | /de-indent/1.0.2: 958 | resolution: {integrity: sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==} 959 | dev: true 960 | 961 | /debug/3.2.7: 962 | resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} 963 | peerDependencies: 964 | supports-color: '*' 965 | peerDependenciesMeta: 966 | supports-color: 967 | optional: true 968 | dependencies: 969 | ms: 2.1.3 970 | dev: true 971 | 972 | /debug/4.3.4: 973 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} 974 | engines: {node: '>=6.0'} 975 | peerDependencies: 976 | supports-color: '*' 977 | peerDependenciesMeta: 978 | supports-color: 979 | optional: true 980 | dependencies: 981 | ms: 2.1.2 982 | dev: true 983 | 984 | /deep-is/0.1.4: 985 | resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} 986 | dev: true 987 | 988 | /define-properties/1.2.0: 989 | resolution: {integrity: sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==} 990 | engines: {node: '>= 0.4'} 991 | dependencies: 992 | has-property-descriptors: 1.0.0 993 | object-keys: 1.1.1 994 | dev: true 995 | 996 | /dir-glob/3.0.1: 997 | resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} 998 | engines: {node: '>=8'} 999 | dependencies: 1000 | path-type: 4.0.0 1001 | dev: true 1002 | 1003 | /doctrine/2.1.0: 1004 | resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} 1005 | engines: {node: '>=0.10.0'} 1006 | dependencies: 1007 | esutils: 2.0.3 1008 | dev: true 1009 | 1010 | /doctrine/3.0.0: 1011 | resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} 1012 | engines: {node: '>=6.0.0'} 1013 | dependencies: 1014 | esutils: 2.0.3 1015 | dev: true 1016 | 1017 | /element-plus/2.3.6_vue@3.3.4: 1018 | resolution: {integrity: sha512-GLz0pXUYI2zRfIgyI6W7SWmHk6dSEikP9yR++hsQUyy63+WjutoiGpA3SZD4cGPSXUzRFeKfVr8CnYhK5LqXZw==} 1019 | peerDependencies: 1020 | vue: ^3.2.0 1021 | dependencies: 1022 | '@ctrl/tinycolor': 3.6.0 1023 | '@element-plus/icons-vue': 2.1.0_vue@3.3.4 1024 | '@floating-ui/dom': 1.2.9 1025 | '@popperjs/core': /@sxzz/popperjs-es/2.11.7 1026 | '@types/lodash': 4.14.195 1027 | '@types/lodash-es': 4.17.7 1028 | '@vueuse/core': 9.13.0_vue@3.3.4 1029 | async-validator: 4.2.5 1030 | dayjs: 1.11.8 1031 | escape-html: 1.0.3 1032 | lodash: 4.17.21 1033 | lodash-es: 4.17.21 1034 | lodash-unified: 1.0.3_tknf7errc3xdqocd3ryzzla7vq 1035 | memoize-one: 6.0.0 1036 | normalize-wheel-es: 1.2.0 1037 | vue: 3.3.4 1038 | transitivePeerDependencies: 1039 | - '@vue/composition-api' 1040 | dev: false 1041 | 1042 | /email-addresses/5.0.0: 1043 | resolution: {integrity: sha512-4OIPYlA6JXqtVn8zpHpGiI7vE6EQOAg16aGnDMIAlZVinnoZ8208tW1hAbjWydgN/4PLTT9q+O1K6AH/vALJGw==} 1044 | dev: true 1045 | 1046 | /es-abstract/1.22.1: 1047 | resolution: {integrity: sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw==} 1048 | engines: {node: '>= 0.4'} 1049 | dependencies: 1050 | array-buffer-byte-length: 1.0.0 1051 | arraybuffer.prototype.slice: 1.0.1 1052 | available-typed-arrays: 1.0.5 1053 | call-bind: 1.0.2 1054 | es-set-tostringtag: 2.0.1 1055 | es-to-primitive: 1.2.1 1056 | function.prototype.name: 1.1.6 1057 | get-intrinsic: 1.2.1 1058 | get-symbol-description: 1.0.0 1059 | globalthis: 1.0.3 1060 | gopd: 1.0.1 1061 | has: 1.0.3 1062 | has-property-descriptors: 1.0.0 1063 | has-proto: 1.0.1 1064 | has-symbols: 1.0.3 1065 | internal-slot: 1.0.5 1066 | is-array-buffer: 3.0.2 1067 | is-callable: 1.2.7 1068 | is-negative-zero: 2.0.2 1069 | is-regex: 1.1.4 1070 | is-shared-array-buffer: 1.0.2 1071 | is-string: 1.0.7 1072 | is-typed-array: 1.1.12 1073 | is-weakref: 1.0.2 1074 | object-inspect: 1.12.3 1075 | object-keys: 1.1.1 1076 | object.assign: 4.1.4 1077 | regexp.prototype.flags: 1.5.0 1078 | safe-array-concat: 1.0.0 1079 | safe-regex-test: 1.0.0 1080 | string.prototype.trim: 1.2.7 1081 | string.prototype.trimend: 1.0.6 1082 | string.prototype.trimstart: 1.0.6 1083 | typed-array-buffer: 1.0.0 1084 | typed-array-byte-length: 1.0.0 1085 | typed-array-byte-offset: 1.0.0 1086 | typed-array-length: 1.0.4 1087 | unbox-primitive: 1.0.2 1088 | which-typed-array: 1.1.11 1089 | dev: true 1090 | 1091 | /es-set-tostringtag/2.0.1: 1092 | resolution: {integrity: sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==} 1093 | engines: {node: '>= 0.4'} 1094 | dependencies: 1095 | get-intrinsic: 1.2.1 1096 | has: 1.0.3 1097 | has-tostringtag: 1.0.0 1098 | dev: true 1099 | 1100 | /es-shim-unscopables/1.0.0: 1101 | resolution: {integrity: sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==} 1102 | dependencies: 1103 | has: 1.0.3 1104 | dev: true 1105 | 1106 | /es-to-primitive/1.2.1: 1107 | resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} 1108 | engines: {node: '>= 0.4'} 1109 | dependencies: 1110 | is-callable: 1.2.7 1111 | is-date-object: 1.0.5 1112 | is-symbol: 1.0.4 1113 | dev: true 1114 | 1115 | /esbuild/0.17.19: 1116 | resolution: {integrity: sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==} 1117 | engines: {node: '>=12'} 1118 | hasBin: true 1119 | requiresBuild: true 1120 | optionalDependencies: 1121 | '@esbuild/android-arm': 0.17.19 1122 | '@esbuild/android-arm64': 0.17.19 1123 | '@esbuild/android-x64': 0.17.19 1124 | '@esbuild/darwin-arm64': 0.17.19 1125 | '@esbuild/darwin-x64': 0.17.19 1126 | '@esbuild/freebsd-arm64': 0.17.19 1127 | '@esbuild/freebsd-x64': 0.17.19 1128 | '@esbuild/linux-arm': 0.17.19 1129 | '@esbuild/linux-arm64': 0.17.19 1130 | '@esbuild/linux-ia32': 0.17.19 1131 | '@esbuild/linux-loong64': 0.17.19 1132 | '@esbuild/linux-mips64el': 0.17.19 1133 | '@esbuild/linux-ppc64': 0.17.19 1134 | '@esbuild/linux-riscv64': 0.17.19 1135 | '@esbuild/linux-s390x': 0.17.19 1136 | '@esbuild/linux-x64': 0.17.19 1137 | '@esbuild/netbsd-x64': 0.17.19 1138 | '@esbuild/openbsd-x64': 0.17.19 1139 | '@esbuild/sunos-x64': 0.17.19 1140 | '@esbuild/win32-arm64': 0.17.19 1141 | '@esbuild/win32-ia32': 0.17.19 1142 | '@esbuild/win32-x64': 0.17.19 1143 | dev: true 1144 | 1145 | /escape-html/1.0.3: 1146 | resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} 1147 | dev: false 1148 | 1149 | /escape-string-regexp/1.0.5: 1150 | resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} 1151 | engines: {node: '>=0.8.0'} 1152 | dev: true 1153 | 1154 | /escape-string-regexp/4.0.0: 1155 | resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} 1156 | engines: {node: '>=10'} 1157 | dev: true 1158 | 1159 | /eslint-config-prettier/8.10.0_eslint@8.48.0: 1160 | resolution: {integrity: sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg==} 1161 | hasBin: true 1162 | peerDependencies: 1163 | eslint: '>=7.0.0' 1164 | dependencies: 1165 | eslint: 8.48.0 1166 | dev: true 1167 | 1168 | /eslint-define-config/1.23.0: 1169 | resolution: {integrity: sha512-4mMyu0JuBkQHsCtR+42irIQdFLmLIW+pMAVcyOV/gZRL4O1R8iuH0eMG3oL3Cbi1eo9fDAfT5CIHVHgdyxcf6w==} 1170 | engines: {node: ^16.13.0 || >=18.0.0, npm: '>=7.0.0', pnpm: '>= 8.6.0'} 1171 | dev: true 1172 | 1173 | /eslint-import-resolver-node/0.3.9: 1174 | resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} 1175 | dependencies: 1176 | debug: 3.2.7 1177 | is-core-module: 2.13.0 1178 | resolve: 1.22.4 1179 | transitivePeerDependencies: 1180 | - supports-color 1181 | dev: true 1182 | 1183 | /eslint-module-utils/2.8.0_n4v6wwusattt7fppostwrfgz5a: 1184 | resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} 1185 | engines: {node: '>=4'} 1186 | peerDependencies: 1187 | '@typescript-eslint/parser': '*' 1188 | eslint: '*' 1189 | eslint-import-resolver-node: '*' 1190 | eslint-import-resolver-typescript: '*' 1191 | eslint-import-resolver-webpack: '*' 1192 | peerDependenciesMeta: 1193 | '@typescript-eslint/parser': 1194 | optional: true 1195 | eslint: 1196 | optional: true 1197 | eslint-import-resolver-node: 1198 | optional: true 1199 | eslint-import-resolver-typescript: 1200 | optional: true 1201 | eslint-import-resolver-webpack: 1202 | optional: true 1203 | dependencies: 1204 | '@typescript-eslint/parser': 5.62.0_jkonsiqll5kf7uvjobvewtpypa 1205 | debug: 3.2.7 1206 | eslint: 8.48.0 1207 | eslint-import-resolver-node: 0.3.9 1208 | transitivePeerDependencies: 1209 | - supports-color 1210 | dev: true 1211 | 1212 | /eslint-plugin-import/2.28.1_ean2qamlavtp6bo3zeco4caumq: 1213 | resolution: {integrity: sha512-9I9hFlITvOV55alzoKBI+K9q74kv0iKMeY6av5+umsNwayt59fz692daGyjR+oStBQgx6nwR9rXldDev3Clw+A==} 1214 | engines: {node: '>=4'} 1215 | peerDependencies: 1216 | '@typescript-eslint/parser': '*' 1217 | eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 1218 | peerDependenciesMeta: 1219 | '@typescript-eslint/parser': 1220 | optional: true 1221 | dependencies: 1222 | '@typescript-eslint/parser': 5.62.0_jkonsiqll5kf7uvjobvewtpypa 1223 | array-includes: 3.1.6 1224 | array.prototype.findlastindex: 1.2.3 1225 | array.prototype.flat: 1.3.1 1226 | array.prototype.flatmap: 1.3.1 1227 | debug: 3.2.7 1228 | doctrine: 2.1.0 1229 | eslint: 8.48.0 1230 | eslint-import-resolver-node: 0.3.9 1231 | eslint-module-utils: 2.8.0_n4v6wwusattt7fppostwrfgz5a 1232 | has: 1.0.3 1233 | is-core-module: 2.13.0 1234 | is-glob: 4.0.3 1235 | minimatch: 3.1.2 1236 | object.fromentries: 2.0.7 1237 | object.groupby: 1.0.1 1238 | object.values: 1.1.7 1239 | semver: 6.3.1 1240 | tsconfig-paths: 3.14.2 1241 | transitivePeerDependencies: 1242 | - eslint-import-resolver-typescript 1243 | - eslint-import-resolver-webpack 1244 | - supports-color 1245 | dev: true 1246 | 1247 | /eslint-plugin-prettier/4.2.1_b7j5i5eung22avfvwixh6yzuzu: 1248 | resolution: {integrity: sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==} 1249 | engines: {node: '>=12.0.0'} 1250 | peerDependencies: 1251 | eslint: '>=7.28.0' 1252 | eslint-config-prettier: '*' 1253 | prettier: '>=2.0.0' 1254 | peerDependenciesMeta: 1255 | eslint-config-prettier: 1256 | optional: true 1257 | dependencies: 1258 | eslint: 8.48.0 1259 | eslint-config-prettier: 8.10.0_eslint@8.48.0 1260 | prettier: 2.8.8 1261 | prettier-linter-helpers: 1.0.0 1262 | dev: true 1263 | 1264 | /eslint-plugin-simple-import-sort/8.0.0_eslint@8.48.0: 1265 | resolution: {integrity: sha512-bXgJQ+lqhtQBCuWY/FUWdB27j4+lqcvXv5rUARkzbeWLwea+S5eBZEQrhnO+WgX3ZoJHVj0cn943iyXwByHHQw==} 1266 | peerDependencies: 1267 | eslint: '>=5.0.0' 1268 | dependencies: 1269 | eslint: 8.48.0 1270 | dev: true 1271 | 1272 | /eslint-plugin-vue/9.17.0_eslint@8.48.0: 1273 | resolution: {integrity: sha512-r7Bp79pxQk9I5XDP0k2dpUC7Ots3OSWgvGZNu3BxmKK6Zg7NgVtcOB6OCna5Kb9oQwJPl5hq183WD0SY5tZtIQ==} 1274 | engines: {node: ^14.17.0 || >=16.0.0} 1275 | peerDependencies: 1276 | eslint: ^6.2.0 || ^7.0.0 || ^8.0.0 1277 | dependencies: 1278 | '@eslint-community/eslint-utils': 4.4.0_eslint@8.48.0 1279 | eslint: 8.48.0 1280 | natural-compare: 1.4.0 1281 | nth-check: 2.1.1 1282 | postcss-selector-parser: 6.0.13 1283 | semver: 7.5.4 1284 | vue-eslint-parser: 9.3.1_eslint@8.48.0 1285 | xml-name-validator: 4.0.0 1286 | transitivePeerDependencies: 1287 | - supports-color 1288 | dev: true 1289 | 1290 | /eslint-scope/5.1.1: 1291 | resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} 1292 | engines: {node: '>=8.0.0'} 1293 | dependencies: 1294 | esrecurse: 4.3.0 1295 | estraverse: 4.3.0 1296 | dev: true 1297 | 1298 | /eslint-scope/7.2.2: 1299 | resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} 1300 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1301 | dependencies: 1302 | esrecurse: 4.3.0 1303 | estraverse: 5.3.0 1304 | dev: true 1305 | 1306 | /eslint-visitor-keys/3.4.3: 1307 | resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} 1308 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1309 | dev: true 1310 | 1311 | /eslint/8.48.0: 1312 | resolution: {integrity: sha512-sb6DLeIuRXxeM1YljSe1KEx9/YYeZFQWcV8Rq9HfigmdDEugjLEVEa1ozDjL6YDjBpQHPJxJzze+alxi4T3OLg==} 1313 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1314 | hasBin: true 1315 | dependencies: 1316 | '@eslint-community/eslint-utils': 4.4.0_eslint@8.48.0 1317 | '@eslint-community/regexpp': 4.8.0 1318 | '@eslint/eslintrc': 2.1.2 1319 | '@eslint/js': 8.48.0 1320 | '@humanwhocodes/config-array': 0.11.11 1321 | '@humanwhocodes/module-importer': 1.0.1 1322 | '@nodelib/fs.walk': 1.2.8 1323 | ajv: 6.12.6 1324 | chalk: 4.1.2 1325 | cross-spawn: 7.0.3 1326 | debug: 4.3.4 1327 | doctrine: 3.0.0 1328 | escape-string-regexp: 4.0.0 1329 | eslint-scope: 7.2.2 1330 | eslint-visitor-keys: 3.4.3 1331 | espree: 9.6.1 1332 | esquery: 1.5.0 1333 | esutils: 2.0.3 1334 | fast-deep-equal: 3.1.3 1335 | file-entry-cache: 6.0.1 1336 | find-up: 5.0.0 1337 | glob-parent: 6.0.2 1338 | globals: 13.21.0 1339 | graphemer: 1.4.0 1340 | ignore: 5.2.4 1341 | imurmurhash: 0.1.4 1342 | is-glob: 4.0.3 1343 | is-path-inside: 3.0.3 1344 | js-yaml: 4.1.0 1345 | json-stable-stringify-without-jsonify: 1.0.1 1346 | levn: 0.4.1 1347 | lodash.merge: 4.6.2 1348 | minimatch: 3.1.2 1349 | natural-compare: 1.4.0 1350 | optionator: 0.9.3 1351 | strip-ansi: 6.0.1 1352 | text-table: 0.2.0 1353 | transitivePeerDependencies: 1354 | - supports-color 1355 | dev: true 1356 | 1357 | /espree/9.6.1: 1358 | resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} 1359 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1360 | dependencies: 1361 | acorn: 8.10.0 1362 | acorn-jsx: 5.3.2_acorn@8.10.0 1363 | eslint-visitor-keys: 3.4.3 1364 | dev: true 1365 | 1366 | /esquery/1.5.0: 1367 | resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} 1368 | engines: {node: '>=0.10'} 1369 | dependencies: 1370 | estraverse: 5.3.0 1371 | dev: true 1372 | 1373 | /esrecurse/4.3.0: 1374 | resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} 1375 | engines: {node: '>=4.0'} 1376 | dependencies: 1377 | estraverse: 5.3.0 1378 | dev: true 1379 | 1380 | /estraverse/4.3.0: 1381 | resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} 1382 | engines: {node: '>=4.0'} 1383 | dev: true 1384 | 1385 | /estraverse/5.3.0: 1386 | resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} 1387 | engines: {node: '>=4.0'} 1388 | dev: true 1389 | 1390 | /estree-walker/2.0.2: 1391 | resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} 1392 | 1393 | /esutils/2.0.3: 1394 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} 1395 | engines: {node: '>=0.10.0'} 1396 | dev: true 1397 | 1398 | /fast-deep-equal/3.1.3: 1399 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} 1400 | dev: true 1401 | 1402 | /fast-diff/1.3.0: 1403 | resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} 1404 | dev: true 1405 | 1406 | /fast-glob/3.3.1: 1407 | resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==} 1408 | engines: {node: '>=8.6.0'} 1409 | dependencies: 1410 | '@nodelib/fs.stat': 2.0.5 1411 | '@nodelib/fs.walk': 1.2.8 1412 | glob-parent: 5.1.2 1413 | merge2: 1.4.1 1414 | micromatch: 4.0.5 1415 | dev: true 1416 | 1417 | /fast-json-stable-stringify/2.1.0: 1418 | resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} 1419 | dev: true 1420 | 1421 | /fast-levenshtein/2.0.6: 1422 | resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} 1423 | dev: true 1424 | 1425 | /fastq/1.15.0: 1426 | resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} 1427 | dependencies: 1428 | reusify: 1.0.4 1429 | dev: true 1430 | 1431 | /file-entry-cache/6.0.1: 1432 | resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} 1433 | engines: {node: ^10.12.0 || >=12.0.0} 1434 | dependencies: 1435 | flat-cache: 3.1.0 1436 | dev: true 1437 | 1438 | /filename-reserved-regex/2.0.0: 1439 | resolution: {integrity: sha512-lc1bnsSr4L4Bdif8Xb/qrtokGbq5zlsms/CYH8PP+WtCkGNF65DPiQY8vG3SakEdRn8Dlnm+gW/qWKKjS5sZzQ==} 1440 | engines: {node: '>=4'} 1441 | dev: true 1442 | 1443 | /filenamify/4.3.0: 1444 | resolution: {integrity: sha512-hcFKyUG57yWGAzu1CMt/dPzYZuv+jAJUT85bL8mrXvNe6hWj6yEHEc4EdcgiA6Z3oi1/9wXJdZPXF2dZNgwgOg==} 1445 | engines: {node: '>=8'} 1446 | dependencies: 1447 | filename-reserved-regex: 2.0.0 1448 | strip-outer: 1.0.1 1449 | trim-repeated: 1.0.0 1450 | dev: true 1451 | 1452 | /fill-range/7.0.1: 1453 | resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} 1454 | engines: {node: '>=8'} 1455 | dependencies: 1456 | to-regex-range: 5.0.1 1457 | dev: true 1458 | 1459 | /find-cache-dir/3.3.2: 1460 | resolution: {integrity: sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==} 1461 | engines: {node: '>=8'} 1462 | dependencies: 1463 | commondir: 1.0.1 1464 | make-dir: 3.1.0 1465 | pkg-dir: 4.2.0 1466 | dev: true 1467 | 1468 | /find-up/4.1.0: 1469 | resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} 1470 | engines: {node: '>=8'} 1471 | dependencies: 1472 | locate-path: 5.0.0 1473 | path-exists: 4.0.0 1474 | dev: true 1475 | 1476 | /find-up/5.0.0: 1477 | resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} 1478 | engines: {node: '>=10'} 1479 | dependencies: 1480 | locate-path: 6.0.0 1481 | path-exists: 4.0.0 1482 | dev: true 1483 | 1484 | /flat-cache/3.1.0: 1485 | resolution: {integrity: sha512-OHx4Qwrrt0E4jEIcI5/Xb+f+QmJYNj2rrK8wiIdQOIrB9WrrJL8cjZvXdXuBTkkEwEqLycb5BeZDV1o2i9bTew==} 1486 | engines: {node: '>=12.0.0'} 1487 | dependencies: 1488 | flatted: 3.2.7 1489 | keyv: 4.5.3 1490 | rimraf: 3.0.2 1491 | dev: true 1492 | 1493 | /flatted/3.2.7: 1494 | resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==} 1495 | dev: true 1496 | 1497 | /for-each/0.3.3: 1498 | resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} 1499 | dependencies: 1500 | is-callable: 1.2.7 1501 | dev: true 1502 | 1503 | /fs-extra/11.1.1: 1504 | resolution: {integrity: sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==} 1505 | engines: {node: '>=14.14'} 1506 | dependencies: 1507 | graceful-fs: 4.2.11 1508 | jsonfile: 6.1.0 1509 | universalify: 2.0.0 1510 | dev: true 1511 | 1512 | /fs.realpath/1.0.0: 1513 | resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} 1514 | dev: true 1515 | 1516 | /fsevents/2.3.2: 1517 | resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} 1518 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 1519 | os: [darwin] 1520 | requiresBuild: true 1521 | dev: true 1522 | optional: true 1523 | 1524 | /function-bind/1.1.1: 1525 | resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} 1526 | dev: true 1527 | 1528 | /function.prototype.name/1.1.6: 1529 | resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} 1530 | engines: {node: '>= 0.4'} 1531 | dependencies: 1532 | call-bind: 1.0.2 1533 | define-properties: 1.2.0 1534 | es-abstract: 1.22.1 1535 | functions-have-names: 1.2.3 1536 | dev: true 1537 | 1538 | /functions-have-names/1.2.3: 1539 | resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} 1540 | dev: true 1541 | 1542 | /get-intrinsic/1.2.1: 1543 | resolution: {integrity: sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==} 1544 | dependencies: 1545 | function-bind: 1.1.1 1546 | has: 1.0.3 1547 | has-proto: 1.0.1 1548 | has-symbols: 1.0.3 1549 | dev: true 1550 | 1551 | /get-symbol-description/1.0.0: 1552 | resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} 1553 | engines: {node: '>= 0.4'} 1554 | dependencies: 1555 | call-bind: 1.0.2 1556 | get-intrinsic: 1.2.1 1557 | dev: true 1558 | 1559 | /gh-pages/6.0.0: 1560 | resolution: {integrity: sha512-FXZWJRsvP/fK2HJGY+Di6FRNHvqFF6gOIELaopDjXXgjeOYSNURcuYwEO/6bwuq6koP5Lnkvnr5GViXzuOB89g==} 1561 | engines: {node: '>=10'} 1562 | hasBin: true 1563 | dependencies: 1564 | async: 3.2.4 1565 | commander: 11.0.0 1566 | email-addresses: 5.0.0 1567 | filenamify: 4.3.0 1568 | find-cache-dir: 3.3.2 1569 | fs-extra: 11.1.1 1570 | globby: 6.1.0 1571 | dev: true 1572 | 1573 | /glob-parent/5.1.2: 1574 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 1575 | engines: {node: '>= 6'} 1576 | dependencies: 1577 | is-glob: 4.0.3 1578 | dev: true 1579 | 1580 | /glob-parent/6.0.2: 1581 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} 1582 | engines: {node: '>=10.13.0'} 1583 | dependencies: 1584 | is-glob: 4.0.3 1585 | dev: true 1586 | 1587 | /glob/7.2.3: 1588 | resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} 1589 | dependencies: 1590 | fs.realpath: 1.0.0 1591 | inflight: 1.0.6 1592 | inherits: 2.0.4 1593 | minimatch: 3.1.2 1594 | once: 1.4.0 1595 | path-is-absolute: 1.0.1 1596 | dev: true 1597 | 1598 | /globals/13.21.0: 1599 | resolution: {integrity: sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==} 1600 | engines: {node: '>=8'} 1601 | dependencies: 1602 | type-fest: 0.20.2 1603 | dev: true 1604 | 1605 | /globalthis/1.0.3: 1606 | resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} 1607 | engines: {node: '>= 0.4'} 1608 | dependencies: 1609 | define-properties: 1.2.0 1610 | dev: true 1611 | 1612 | /globby/11.1.0: 1613 | resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} 1614 | engines: {node: '>=10'} 1615 | dependencies: 1616 | array-union: 2.1.0 1617 | dir-glob: 3.0.1 1618 | fast-glob: 3.3.1 1619 | ignore: 5.2.4 1620 | merge2: 1.4.1 1621 | slash: 3.0.0 1622 | dev: true 1623 | 1624 | /globby/6.1.0: 1625 | resolution: {integrity: sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw==} 1626 | engines: {node: '>=0.10.0'} 1627 | dependencies: 1628 | array-union: 1.0.2 1629 | glob: 7.2.3 1630 | object-assign: 4.1.1 1631 | pify: 2.3.0 1632 | pinkie-promise: 2.0.1 1633 | dev: true 1634 | 1635 | /gopd/1.0.1: 1636 | resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} 1637 | dependencies: 1638 | get-intrinsic: 1.2.1 1639 | dev: true 1640 | 1641 | /graceful-fs/4.2.11: 1642 | resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} 1643 | dev: true 1644 | 1645 | /graphemer/1.4.0: 1646 | resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} 1647 | dev: true 1648 | 1649 | /has-bigints/1.0.2: 1650 | resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} 1651 | dev: true 1652 | 1653 | /has-flag/4.0.0: 1654 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 1655 | engines: {node: '>=8'} 1656 | dev: true 1657 | 1658 | /has-property-descriptors/1.0.0: 1659 | resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==} 1660 | dependencies: 1661 | get-intrinsic: 1.2.1 1662 | dev: true 1663 | 1664 | /has-proto/1.0.1: 1665 | resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} 1666 | engines: {node: '>= 0.4'} 1667 | dev: true 1668 | 1669 | /has-symbols/1.0.3: 1670 | resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} 1671 | engines: {node: '>= 0.4'} 1672 | dev: true 1673 | 1674 | /has-tostringtag/1.0.0: 1675 | resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} 1676 | engines: {node: '>= 0.4'} 1677 | dependencies: 1678 | has-symbols: 1.0.3 1679 | dev: true 1680 | 1681 | /has/1.0.3: 1682 | resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} 1683 | engines: {node: '>= 0.4.0'} 1684 | dependencies: 1685 | function-bind: 1.1.1 1686 | dev: true 1687 | 1688 | /he/1.2.0: 1689 | resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} 1690 | hasBin: true 1691 | dev: true 1692 | 1693 | /ignore/5.2.4: 1694 | resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} 1695 | engines: {node: '>= 4'} 1696 | dev: true 1697 | 1698 | /immutable/4.3.0: 1699 | resolution: {integrity: sha512-0AOCmOip+xgJwEVTQj1EfiDDOkPmuyllDuTuEX+DDXUgapLAsBIfkg3sxCYyCEA8mQqZrrxPUGjcOQ2JS3WLkg==} 1700 | dev: true 1701 | 1702 | /import-fresh/3.3.0: 1703 | resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} 1704 | engines: {node: '>=6'} 1705 | dependencies: 1706 | parent-module: 1.0.1 1707 | resolve-from: 4.0.0 1708 | dev: true 1709 | 1710 | /imurmurhash/0.1.4: 1711 | resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} 1712 | engines: {node: '>=0.8.19'} 1713 | dev: true 1714 | 1715 | /inflight/1.0.6: 1716 | resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} 1717 | dependencies: 1718 | once: 1.4.0 1719 | wrappy: 1.0.2 1720 | dev: true 1721 | 1722 | /inherits/2.0.4: 1723 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} 1724 | dev: true 1725 | 1726 | /internal-slot/1.0.5: 1727 | resolution: {integrity: sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==} 1728 | engines: {node: '>= 0.4'} 1729 | dependencies: 1730 | get-intrinsic: 1.2.1 1731 | has: 1.0.3 1732 | side-channel: 1.0.4 1733 | dev: true 1734 | 1735 | /is-array-buffer/3.0.2: 1736 | resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} 1737 | dependencies: 1738 | call-bind: 1.0.2 1739 | get-intrinsic: 1.2.1 1740 | is-typed-array: 1.1.12 1741 | dev: true 1742 | 1743 | /is-bigint/1.0.4: 1744 | resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} 1745 | dependencies: 1746 | has-bigints: 1.0.2 1747 | dev: true 1748 | 1749 | /is-binary-path/2.1.0: 1750 | resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} 1751 | engines: {node: '>=8'} 1752 | dependencies: 1753 | binary-extensions: 2.2.0 1754 | dev: true 1755 | 1756 | /is-boolean-object/1.1.2: 1757 | resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} 1758 | engines: {node: '>= 0.4'} 1759 | dependencies: 1760 | call-bind: 1.0.2 1761 | has-tostringtag: 1.0.0 1762 | dev: true 1763 | 1764 | /is-callable/1.2.7: 1765 | resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} 1766 | engines: {node: '>= 0.4'} 1767 | dev: true 1768 | 1769 | /is-core-module/2.13.0: 1770 | resolution: {integrity: sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==} 1771 | dependencies: 1772 | has: 1.0.3 1773 | dev: true 1774 | 1775 | /is-date-object/1.0.5: 1776 | resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} 1777 | engines: {node: '>= 0.4'} 1778 | dependencies: 1779 | has-tostringtag: 1.0.0 1780 | dev: true 1781 | 1782 | /is-extglob/2.1.1: 1783 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 1784 | engines: {node: '>=0.10.0'} 1785 | dev: true 1786 | 1787 | /is-glob/4.0.3: 1788 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 1789 | engines: {node: '>=0.10.0'} 1790 | dependencies: 1791 | is-extglob: 2.1.1 1792 | dev: true 1793 | 1794 | /is-negative-zero/2.0.2: 1795 | resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} 1796 | engines: {node: '>= 0.4'} 1797 | dev: true 1798 | 1799 | /is-number-object/1.0.7: 1800 | resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} 1801 | engines: {node: '>= 0.4'} 1802 | dependencies: 1803 | has-tostringtag: 1.0.0 1804 | dev: true 1805 | 1806 | /is-number/7.0.0: 1807 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 1808 | engines: {node: '>=0.12.0'} 1809 | dev: true 1810 | 1811 | /is-path-inside/3.0.3: 1812 | resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} 1813 | engines: {node: '>=8'} 1814 | dev: true 1815 | 1816 | /is-regex/1.1.4: 1817 | resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} 1818 | engines: {node: '>= 0.4'} 1819 | dependencies: 1820 | call-bind: 1.0.2 1821 | has-tostringtag: 1.0.0 1822 | dev: true 1823 | 1824 | /is-shared-array-buffer/1.0.2: 1825 | resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} 1826 | dependencies: 1827 | call-bind: 1.0.2 1828 | dev: true 1829 | 1830 | /is-string/1.0.7: 1831 | resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} 1832 | engines: {node: '>= 0.4'} 1833 | dependencies: 1834 | has-tostringtag: 1.0.0 1835 | dev: true 1836 | 1837 | /is-symbol/1.0.4: 1838 | resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} 1839 | engines: {node: '>= 0.4'} 1840 | dependencies: 1841 | has-symbols: 1.0.3 1842 | dev: true 1843 | 1844 | /is-typed-array/1.1.12: 1845 | resolution: {integrity: sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==} 1846 | engines: {node: '>= 0.4'} 1847 | dependencies: 1848 | which-typed-array: 1.1.11 1849 | dev: true 1850 | 1851 | /is-weakref/1.0.2: 1852 | resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} 1853 | dependencies: 1854 | call-bind: 1.0.2 1855 | dev: true 1856 | 1857 | /isarray/2.0.5: 1858 | resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} 1859 | dev: true 1860 | 1861 | /isexe/2.0.0: 1862 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 1863 | dev: true 1864 | 1865 | /js-yaml/4.1.0: 1866 | resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} 1867 | hasBin: true 1868 | dependencies: 1869 | argparse: 2.0.1 1870 | dev: true 1871 | 1872 | /json-buffer/3.0.1: 1873 | resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} 1874 | dev: true 1875 | 1876 | /json-schema-traverse/0.4.1: 1877 | resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} 1878 | dev: true 1879 | 1880 | /json-stable-stringify-without-jsonify/1.0.1: 1881 | resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} 1882 | dev: true 1883 | 1884 | /json5/1.0.2: 1885 | resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} 1886 | hasBin: true 1887 | dependencies: 1888 | minimist: 1.2.8 1889 | dev: true 1890 | 1891 | /jsonfile/6.1.0: 1892 | resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} 1893 | dependencies: 1894 | universalify: 2.0.0 1895 | optionalDependencies: 1896 | graceful-fs: 4.2.11 1897 | dev: true 1898 | 1899 | /keyv/4.5.3: 1900 | resolution: {integrity: sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug==} 1901 | dependencies: 1902 | json-buffer: 3.0.1 1903 | dev: true 1904 | 1905 | /levn/0.4.1: 1906 | resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} 1907 | engines: {node: '>= 0.8.0'} 1908 | dependencies: 1909 | prelude-ls: 1.2.1 1910 | type-check: 0.4.0 1911 | dev: true 1912 | 1913 | /locate-path/5.0.0: 1914 | resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} 1915 | engines: {node: '>=8'} 1916 | dependencies: 1917 | p-locate: 4.1.0 1918 | dev: true 1919 | 1920 | /locate-path/6.0.0: 1921 | resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} 1922 | engines: {node: '>=10'} 1923 | dependencies: 1924 | p-locate: 5.0.0 1925 | dev: true 1926 | 1927 | /lodash-es/4.17.21: 1928 | resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==} 1929 | dev: false 1930 | 1931 | /lodash-unified/1.0.3_tknf7errc3xdqocd3ryzzla7vq: 1932 | resolution: {integrity: sha512-WK9qSozxXOD7ZJQlpSqOT+om2ZfcT4yO+03FuzAHD0wF6S0l0090LRPDx3vhTTLZ8cFKpBn+IOcVXK6qOcIlfQ==} 1933 | peerDependencies: 1934 | '@types/lodash-es': '*' 1935 | lodash: '*' 1936 | lodash-es: '*' 1937 | dependencies: 1938 | '@types/lodash-es': 4.17.7 1939 | lodash: 4.17.21 1940 | lodash-es: 4.17.21 1941 | dev: false 1942 | 1943 | /lodash.merge/4.6.2: 1944 | resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} 1945 | dev: true 1946 | 1947 | /lodash/4.17.21: 1948 | resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} 1949 | 1950 | /lru-cache/6.0.0: 1951 | resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} 1952 | engines: {node: '>=10'} 1953 | dependencies: 1954 | yallist: 4.0.0 1955 | dev: true 1956 | 1957 | /magic-string/0.30.0: 1958 | resolution: {integrity: sha512-LA+31JYDJLs82r2ScLrlz1GjSgu66ZV518eyWT+S8VhyQn/JL0u9MeBOvQMGYiPk1DBiSN9DDMOcXvigJZaViQ==} 1959 | engines: {node: '>=12'} 1960 | dependencies: 1961 | '@jridgewell/sourcemap-codec': 1.4.15 1962 | 1963 | /make-dir/3.1.0: 1964 | resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} 1965 | engines: {node: '>=8'} 1966 | dependencies: 1967 | semver: 6.3.1 1968 | dev: true 1969 | 1970 | /memoize-one/6.0.0: 1971 | resolution: {integrity: sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==} 1972 | dev: false 1973 | 1974 | /merge2/1.4.1: 1975 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 1976 | engines: {node: '>= 8'} 1977 | dev: true 1978 | 1979 | /micromatch/4.0.5: 1980 | resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} 1981 | engines: {node: '>=8.6'} 1982 | dependencies: 1983 | braces: 3.0.2 1984 | picomatch: 2.3.1 1985 | dev: true 1986 | 1987 | /minimatch/3.1.2: 1988 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 1989 | dependencies: 1990 | brace-expansion: 1.1.11 1991 | dev: true 1992 | 1993 | /minimatch/9.0.1: 1994 | resolution: {integrity: sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==} 1995 | engines: {node: '>=16 || 14 >=14.17'} 1996 | dependencies: 1997 | brace-expansion: 2.0.1 1998 | dev: true 1999 | 2000 | /minimist/1.2.8: 2001 | resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} 2002 | dev: true 2003 | 2004 | /ms/2.1.2: 2005 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} 2006 | dev: true 2007 | 2008 | /ms/2.1.3: 2009 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} 2010 | dev: true 2011 | 2012 | /muggle-string/0.2.2: 2013 | resolution: {integrity: sha512-YVE1mIJ4VpUMqZObFndk9CJu6DBJR/GB13p3tXuNbwD4XExaI5EOuRl6BHeIDxIqXZVxSfAC+y6U1Z/IxCfKUg==} 2014 | dev: true 2015 | 2016 | /nanoid/3.3.6: 2017 | resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==} 2018 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 2019 | hasBin: true 2020 | 2021 | /natural-compare-lite/1.4.0: 2022 | resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} 2023 | dev: true 2024 | 2025 | /natural-compare/1.4.0: 2026 | resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} 2027 | dev: true 2028 | 2029 | /normalize-path/3.0.0: 2030 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} 2031 | engines: {node: '>=0.10.0'} 2032 | dev: true 2033 | 2034 | /normalize-wheel-es/1.2.0: 2035 | resolution: {integrity: sha512-Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw==} 2036 | dev: false 2037 | 2038 | /nth-check/2.1.1: 2039 | resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} 2040 | dependencies: 2041 | boolbase: 1.0.0 2042 | dev: true 2043 | 2044 | /object-assign/4.1.1: 2045 | resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} 2046 | engines: {node: '>=0.10.0'} 2047 | dev: true 2048 | 2049 | /object-inspect/1.12.3: 2050 | resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==} 2051 | dev: true 2052 | 2053 | /object-keys/1.1.1: 2054 | resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} 2055 | engines: {node: '>= 0.4'} 2056 | dev: true 2057 | 2058 | /object.assign/4.1.4: 2059 | resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==} 2060 | engines: {node: '>= 0.4'} 2061 | dependencies: 2062 | call-bind: 1.0.2 2063 | define-properties: 1.2.0 2064 | has-symbols: 1.0.3 2065 | object-keys: 1.1.1 2066 | dev: true 2067 | 2068 | /object.fromentries/2.0.7: 2069 | resolution: {integrity: sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==} 2070 | engines: {node: '>= 0.4'} 2071 | dependencies: 2072 | call-bind: 1.0.2 2073 | define-properties: 1.2.0 2074 | es-abstract: 1.22.1 2075 | dev: true 2076 | 2077 | /object.groupby/1.0.1: 2078 | resolution: {integrity: sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==} 2079 | dependencies: 2080 | call-bind: 1.0.2 2081 | define-properties: 1.2.0 2082 | es-abstract: 1.22.1 2083 | get-intrinsic: 1.2.1 2084 | dev: true 2085 | 2086 | /object.values/1.1.7: 2087 | resolution: {integrity: sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==} 2088 | engines: {node: '>= 0.4'} 2089 | dependencies: 2090 | call-bind: 1.0.2 2091 | define-properties: 1.2.0 2092 | es-abstract: 1.22.1 2093 | dev: true 2094 | 2095 | /once/1.4.0: 2096 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} 2097 | dependencies: 2098 | wrappy: 1.0.2 2099 | dev: true 2100 | 2101 | /optionator/0.9.3: 2102 | resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} 2103 | engines: {node: '>= 0.8.0'} 2104 | dependencies: 2105 | '@aashutoshrathi/word-wrap': 1.2.6 2106 | deep-is: 0.1.4 2107 | fast-levenshtein: 2.0.6 2108 | levn: 0.4.1 2109 | prelude-ls: 1.2.1 2110 | type-check: 0.4.0 2111 | dev: true 2112 | 2113 | /p-limit/2.3.0: 2114 | resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} 2115 | engines: {node: '>=6'} 2116 | dependencies: 2117 | p-try: 2.2.0 2118 | dev: true 2119 | 2120 | /p-limit/3.1.0: 2121 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} 2122 | engines: {node: '>=10'} 2123 | dependencies: 2124 | yocto-queue: 0.1.0 2125 | dev: true 2126 | 2127 | /p-locate/4.1.0: 2128 | resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} 2129 | engines: {node: '>=8'} 2130 | dependencies: 2131 | p-limit: 2.3.0 2132 | dev: true 2133 | 2134 | /p-locate/5.0.0: 2135 | resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} 2136 | engines: {node: '>=10'} 2137 | dependencies: 2138 | p-limit: 3.1.0 2139 | dev: true 2140 | 2141 | /p-try/2.2.0: 2142 | resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} 2143 | engines: {node: '>=6'} 2144 | dev: true 2145 | 2146 | /parent-module/1.0.1: 2147 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} 2148 | engines: {node: '>=6'} 2149 | dependencies: 2150 | callsites: 3.1.0 2151 | dev: true 2152 | 2153 | /path-exists/4.0.0: 2154 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} 2155 | engines: {node: '>=8'} 2156 | dev: true 2157 | 2158 | /path-is-absolute/1.0.1: 2159 | resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} 2160 | engines: {node: '>=0.10.0'} 2161 | dev: true 2162 | 2163 | /path-key/3.1.1: 2164 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 2165 | engines: {node: '>=8'} 2166 | dev: true 2167 | 2168 | /path-parse/1.0.7: 2169 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} 2170 | dev: true 2171 | 2172 | /path-type/4.0.0: 2173 | resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} 2174 | engines: {node: '>=8'} 2175 | dev: true 2176 | 2177 | /picocolors/1.0.0: 2178 | resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} 2179 | 2180 | /picomatch/2.3.1: 2181 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 2182 | engines: {node: '>=8.6'} 2183 | dev: true 2184 | 2185 | /pify/2.3.0: 2186 | resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} 2187 | engines: {node: '>=0.10.0'} 2188 | dev: true 2189 | 2190 | /pinkie-promise/2.0.1: 2191 | resolution: {integrity: sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==} 2192 | engines: {node: '>=0.10.0'} 2193 | dependencies: 2194 | pinkie: 2.0.4 2195 | dev: true 2196 | 2197 | /pinkie/2.0.4: 2198 | resolution: {integrity: sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==} 2199 | engines: {node: '>=0.10.0'} 2200 | dev: true 2201 | 2202 | /pkg-dir/4.2.0: 2203 | resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} 2204 | engines: {node: '>=8'} 2205 | dependencies: 2206 | find-up: 4.1.0 2207 | dev: true 2208 | 2209 | /postcss-selector-parser/6.0.13: 2210 | resolution: {integrity: sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==} 2211 | engines: {node: '>=4'} 2212 | dependencies: 2213 | cssesc: 3.0.0 2214 | util-deprecate: 1.0.2 2215 | dev: true 2216 | 2217 | /postcss/8.4.24: 2218 | resolution: {integrity: sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg==} 2219 | engines: {node: ^10 || ^12 || >=14} 2220 | dependencies: 2221 | nanoid: 3.3.6 2222 | picocolors: 1.0.0 2223 | source-map-js: 1.0.2 2224 | 2225 | /prelude-ls/1.2.1: 2226 | resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} 2227 | engines: {node: '>= 0.8.0'} 2228 | dev: true 2229 | 2230 | /prettier-linter-helpers/1.0.0: 2231 | resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} 2232 | engines: {node: '>=6.0.0'} 2233 | dependencies: 2234 | fast-diff: 1.3.0 2235 | dev: true 2236 | 2237 | /prettier/2.8.8: 2238 | resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} 2239 | engines: {node: '>=10.13.0'} 2240 | hasBin: true 2241 | dev: true 2242 | 2243 | /punycode/2.3.0: 2244 | resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} 2245 | engines: {node: '>=6'} 2246 | dev: true 2247 | 2248 | /queue-microtask/1.2.3: 2249 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 2250 | dev: true 2251 | 2252 | /readdirp/3.6.0: 2253 | resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} 2254 | engines: {node: '>=8.10.0'} 2255 | dependencies: 2256 | picomatch: 2.3.1 2257 | dev: true 2258 | 2259 | /regexp.prototype.flags/1.5.0: 2260 | resolution: {integrity: sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==} 2261 | engines: {node: '>= 0.4'} 2262 | dependencies: 2263 | call-bind: 1.0.2 2264 | define-properties: 1.2.0 2265 | functions-have-names: 1.2.3 2266 | dev: true 2267 | 2268 | /resolve-from/4.0.0: 2269 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} 2270 | engines: {node: '>=4'} 2271 | dev: true 2272 | 2273 | /resolve/1.22.4: 2274 | resolution: {integrity: sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==} 2275 | hasBin: true 2276 | dependencies: 2277 | is-core-module: 2.13.0 2278 | path-parse: 1.0.7 2279 | supports-preserve-symlinks-flag: 1.0.0 2280 | dev: true 2281 | 2282 | /reusify/1.0.4: 2283 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} 2284 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 2285 | dev: true 2286 | 2287 | /rimraf/3.0.2: 2288 | resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} 2289 | hasBin: true 2290 | dependencies: 2291 | glob: 7.2.3 2292 | dev: true 2293 | 2294 | /rollup/3.24.1: 2295 | resolution: {integrity: sha512-REHe5dx30ERBRFS0iENPHy+t6wtSEYkjrhwNsLyh3qpRaZ1+aylvMUdMBUHWUD/RjjLmLzEvY8Z9XRlpcdIkHA==} 2296 | engines: {node: '>=14.18.0', npm: '>=8.0.0'} 2297 | hasBin: true 2298 | optionalDependencies: 2299 | fsevents: 2.3.2 2300 | dev: true 2301 | 2302 | /run-parallel/1.2.0: 2303 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 2304 | dependencies: 2305 | queue-microtask: 1.2.3 2306 | dev: true 2307 | 2308 | /safe-array-concat/1.0.0: 2309 | resolution: {integrity: sha512-9dVEFruWIsnie89yym+xWTAYASdpw3CJV7Li/6zBewGf9z2i1j31rP6jnY0pHEO4QZh6N0K11bFjWmdR8UGdPQ==} 2310 | engines: {node: '>=0.4'} 2311 | dependencies: 2312 | call-bind: 1.0.2 2313 | get-intrinsic: 1.2.1 2314 | has-symbols: 1.0.3 2315 | isarray: 2.0.5 2316 | dev: true 2317 | 2318 | /safe-regex-test/1.0.0: 2319 | resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} 2320 | dependencies: 2321 | call-bind: 1.0.2 2322 | get-intrinsic: 1.2.1 2323 | is-regex: 1.1.4 2324 | dev: true 2325 | 2326 | /sass/1.63.3: 2327 | resolution: {integrity: sha512-ySdXN+DVpfwq49jG1+hmtDslYqpS7SkOR5GpF6o2bmb1RL/xS+wvPmegMvMywyfsmAV6p7TgwXYGrCZIFFbAHg==} 2328 | engines: {node: '>=14.0.0'} 2329 | hasBin: true 2330 | dependencies: 2331 | chokidar: 3.5.3 2332 | immutable: 4.3.0 2333 | source-map-js: 1.0.2 2334 | dev: true 2335 | 2336 | /semver/6.3.1: 2337 | resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} 2338 | hasBin: true 2339 | dev: true 2340 | 2341 | /semver/7.5.1: 2342 | resolution: {integrity: sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==} 2343 | engines: {node: '>=10'} 2344 | hasBin: true 2345 | dependencies: 2346 | lru-cache: 6.0.0 2347 | dev: true 2348 | 2349 | /semver/7.5.4: 2350 | resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} 2351 | engines: {node: '>=10'} 2352 | hasBin: true 2353 | dependencies: 2354 | lru-cache: 6.0.0 2355 | dev: true 2356 | 2357 | /shebang-command/2.0.0: 2358 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 2359 | engines: {node: '>=8'} 2360 | dependencies: 2361 | shebang-regex: 3.0.0 2362 | dev: true 2363 | 2364 | /shebang-regex/3.0.0: 2365 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 2366 | engines: {node: '>=8'} 2367 | dev: true 2368 | 2369 | /side-channel/1.0.4: 2370 | resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} 2371 | dependencies: 2372 | call-bind: 1.0.2 2373 | get-intrinsic: 1.2.1 2374 | object-inspect: 1.12.3 2375 | dev: true 2376 | 2377 | /slash/3.0.0: 2378 | resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} 2379 | engines: {node: '>=8'} 2380 | dev: true 2381 | 2382 | /source-map-js/1.0.2: 2383 | resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} 2384 | engines: {node: '>=0.10.0'} 2385 | 2386 | /string.prototype.trim/1.2.7: 2387 | resolution: {integrity: sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==} 2388 | engines: {node: '>= 0.4'} 2389 | dependencies: 2390 | call-bind: 1.0.2 2391 | define-properties: 1.2.0 2392 | es-abstract: 1.22.1 2393 | dev: true 2394 | 2395 | /string.prototype.trimend/1.0.6: 2396 | resolution: {integrity: sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==} 2397 | dependencies: 2398 | call-bind: 1.0.2 2399 | define-properties: 1.2.0 2400 | es-abstract: 1.22.1 2401 | dev: true 2402 | 2403 | /string.prototype.trimstart/1.0.6: 2404 | resolution: {integrity: sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==} 2405 | dependencies: 2406 | call-bind: 1.0.2 2407 | define-properties: 1.2.0 2408 | es-abstract: 1.22.1 2409 | dev: true 2410 | 2411 | /strip-ansi/6.0.1: 2412 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} 2413 | engines: {node: '>=8'} 2414 | dependencies: 2415 | ansi-regex: 5.0.1 2416 | dev: true 2417 | 2418 | /strip-bom/3.0.0: 2419 | resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} 2420 | engines: {node: '>=4'} 2421 | dev: true 2422 | 2423 | /strip-json-comments/3.1.1: 2424 | resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} 2425 | engines: {node: '>=8'} 2426 | dev: true 2427 | 2428 | /strip-outer/1.0.1: 2429 | resolution: {integrity: sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==} 2430 | engines: {node: '>=0.10.0'} 2431 | dependencies: 2432 | escape-string-regexp: 1.0.5 2433 | dev: true 2434 | 2435 | /supports-color/7.2.0: 2436 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 2437 | engines: {node: '>=8'} 2438 | dependencies: 2439 | has-flag: 4.0.0 2440 | dev: true 2441 | 2442 | /supports-preserve-symlinks-flag/1.0.0: 2443 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} 2444 | engines: {node: '>= 0.4'} 2445 | dev: true 2446 | 2447 | /text-table/0.2.0: 2448 | resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} 2449 | dev: true 2450 | 2451 | /to-fast-properties/2.0.0: 2452 | resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} 2453 | engines: {node: '>=4'} 2454 | 2455 | /to-regex-range/5.0.1: 2456 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 2457 | engines: {node: '>=8.0'} 2458 | dependencies: 2459 | is-number: 7.0.0 2460 | dev: true 2461 | 2462 | /trim-repeated/1.0.0: 2463 | resolution: {integrity: sha512-pkonvlKk8/ZuR0D5tLW8ljt5I8kmxp2XKymhepUeOdCEfKpZaktSArkLHZt76OB1ZvO9bssUsDty4SWhLvZpLg==} 2464 | engines: {node: '>=0.10.0'} 2465 | dependencies: 2466 | escape-string-regexp: 1.0.5 2467 | dev: true 2468 | 2469 | /tsconfig-paths/3.14.2: 2470 | resolution: {integrity: sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==} 2471 | dependencies: 2472 | '@types/json5': 0.0.29 2473 | json5: 1.0.2 2474 | minimist: 1.2.8 2475 | strip-bom: 3.0.0 2476 | dev: true 2477 | 2478 | /tslib/1.14.1: 2479 | resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} 2480 | dev: true 2481 | 2482 | /tsutils/3.21.0_typescript@5.1.3: 2483 | resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} 2484 | engines: {node: '>= 6'} 2485 | peerDependencies: 2486 | typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' 2487 | dependencies: 2488 | tslib: 1.14.1 2489 | typescript: 5.1.3 2490 | dev: true 2491 | 2492 | /type-check/0.4.0: 2493 | resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} 2494 | engines: {node: '>= 0.8.0'} 2495 | dependencies: 2496 | prelude-ls: 1.2.1 2497 | dev: true 2498 | 2499 | /type-fest/0.20.2: 2500 | resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} 2501 | engines: {node: '>=10'} 2502 | dev: true 2503 | 2504 | /typed-array-buffer/1.0.0: 2505 | resolution: {integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==} 2506 | engines: {node: '>= 0.4'} 2507 | dependencies: 2508 | call-bind: 1.0.2 2509 | get-intrinsic: 1.2.1 2510 | is-typed-array: 1.1.12 2511 | dev: true 2512 | 2513 | /typed-array-byte-length/1.0.0: 2514 | resolution: {integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==} 2515 | engines: {node: '>= 0.4'} 2516 | dependencies: 2517 | call-bind: 1.0.2 2518 | for-each: 0.3.3 2519 | has-proto: 1.0.1 2520 | is-typed-array: 1.1.12 2521 | dev: true 2522 | 2523 | /typed-array-byte-offset/1.0.0: 2524 | resolution: {integrity: sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==} 2525 | engines: {node: '>= 0.4'} 2526 | dependencies: 2527 | available-typed-arrays: 1.0.5 2528 | call-bind: 1.0.2 2529 | for-each: 0.3.3 2530 | has-proto: 1.0.1 2531 | is-typed-array: 1.1.12 2532 | dev: true 2533 | 2534 | /typed-array-length/1.0.4: 2535 | resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} 2536 | dependencies: 2537 | call-bind: 1.0.2 2538 | for-each: 0.3.3 2539 | is-typed-array: 1.1.12 2540 | dev: true 2541 | 2542 | /typescript/5.1.3: 2543 | resolution: {integrity: sha512-XH627E9vkeqhlZFQuL+UsyAXEnibT0kWR2FWONlr4sTjvxyJYnyefgrkyECLzM5NenmKzRAy2rR/OlYLA1HkZw==} 2544 | engines: {node: '>=14.17'} 2545 | hasBin: true 2546 | dev: true 2547 | 2548 | /unbox-primitive/1.0.2: 2549 | resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} 2550 | dependencies: 2551 | call-bind: 1.0.2 2552 | has-bigints: 1.0.2 2553 | has-symbols: 1.0.3 2554 | which-boxed-primitive: 1.0.2 2555 | dev: true 2556 | 2557 | /universalify/2.0.0: 2558 | resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==} 2559 | engines: {node: '>= 10.0.0'} 2560 | dev: true 2561 | 2562 | /uri-js/4.4.1: 2563 | resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} 2564 | dependencies: 2565 | punycode: 2.3.0 2566 | dev: true 2567 | 2568 | /util-deprecate/1.0.2: 2569 | resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} 2570 | dev: true 2571 | 2572 | /vite/4.3.9_3hkcy4cv6b7vyfga2q67aben5q: 2573 | resolution: {integrity: sha512-qsTNZjO9NoJNW7KnOrgYwczm0WctJ8m/yqYAMAK9Lxt4SoySUfS5S8ia9K7JHpa3KEeMfyF8LoJ3c5NeBJy6pg==} 2574 | engines: {node: ^14.18.0 || >=16.0.0} 2575 | hasBin: true 2576 | peerDependencies: 2577 | '@types/node': '>= 14' 2578 | less: '*' 2579 | sass: '*' 2580 | stylus: '*' 2581 | sugarss: '*' 2582 | terser: ^5.4.0 2583 | peerDependenciesMeta: 2584 | '@types/node': 2585 | optional: true 2586 | less: 2587 | optional: true 2588 | sass: 2589 | optional: true 2590 | stylus: 2591 | optional: true 2592 | sugarss: 2593 | optional: true 2594 | terser: 2595 | optional: true 2596 | dependencies: 2597 | '@types/node': 18.17.13 2598 | esbuild: 0.17.19 2599 | postcss: 8.4.24 2600 | rollup: 3.24.1 2601 | sass: 1.63.3 2602 | optionalDependencies: 2603 | fsevents: 2.3.2 2604 | dev: true 2605 | 2606 | /vue-demi/0.14.5_vue@3.3.4: 2607 | resolution: {integrity: sha512-o9NUVpl/YlsGJ7t+xuqJKx8EBGf1quRhCiT6D/J0pfwmk9zUwYkC7yrF4SZCe6fETvSM3UNL2edcbYrSyc4QHA==} 2608 | engines: {node: '>=12'} 2609 | hasBin: true 2610 | requiresBuild: true 2611 | peerDependencies: 2612 | '@vue/composition-api': ^1.0.0-rc.1 2613 | vue: ^3.0.0-0 || ^2.6.0 2614 | peerDependenciesMeta: 2615 | '@vue/composition-api': 2616 | optional: true 2617 | dependencies: 2618 | vue: 3.3.4 2619 | dev: false 2620 | 2621 | /vue-eslint-parser/9.3.1_eslint@8.48.0: 2622 | resolution: {integrity: sha512-Clr85iD2XFZ3lJ52/ppmUDG/spxQu6+MAeHXjjyI4I1NUYZ9xmenQp4N0oaHJhrA8OOxltCVxMRfANGa70vU0g==} 2623 | engines: {node: ^14.17.0 || >=16.0.0} 2624 | peerDependencies: 2625 | eslint: '>=6.0.0' 2626 | dependencies: 2627 | debug: 4.3.4 2628 | eslint: 8.48.0 2629 | eslint-scope: 7.2.2 2630 | eslint-visitor-keys: 3.4.3 2631 | espree: 9.6.1 2632 | esquery: 1.5.0 2633 | lodash: 4.17.21 2634 | semver: 7.5.4 2635 | transitivePeerDependencies: 2636 | - supports-color 2637 | dev: true 2638 | 2639 | /vue-router/4.2.4_vue@3.3.4: 2640 | resolution: {integrity: sha512-9PISkmaCO02OzPVOMq2w82ilty6+xJmQrarYZDkjZBfl4RvYAlt4PKnEX21oW4KTtWfa9OuO/b3qk1Od3AEdCQ==} 2641 | peerDependencies: 2642 | vue: ^3.2.0 2643 | dependencies: 2644 | '@vue/devtools-api': 6.5.0 2645 | vue: 3.3.4 2646 | dev: false 2647 | 2648 | /vue-template-compiler/2.7.14: 2649 | resolution: {integrity: sha512-zyA5Y3ArvVG0NacJDkkzJuPQDF8RFeRlzV2vLeSnhSpieO6LK2OVbdLPi5MPPs09Ii+gMO8nY4S3iKQxBxDmWQ==} 2650 | dependencies: 2651 | de-indent: 1.0.2 2652 | he: 1.2.0 2653 | dev: true 2654 | 2655 | /vue-tsc/1.6.5_typescript@5.1.3: 2656 | resolution: {integrity: sha512-Wtw3J7CC+JM2OR56huRd5iKlvFWpvDiU+fO1+rqyu4V2nMTotShz4zbOZpW5g9fUOcjnyZYfBo5q5q+D/q27JA==} 2657 | hasBin: true 2658 | peerDependencies: 2659 | typescript: '*' 2660 | dependencies: 2661 | '@volar/vue-language-core': 1.6.5 2662 | '@volar/vue-typescript': 1.6.5_typescript@5.1.3 2663 | semver: 7.5.1 2664 | typescript: 5.1.3 2665 | dev: true 2666 | 2667 | /vue/3.3.4: 2668 | resolution: {integrity: sha512-VTyEYn3yvIeY1Py0WaYGZsXnz3y5UnGi62GjVEqvEGPl6nxbOrCXbVOTQWBEJUqAyTUk2uJ5JLVnYJ6ZzGbrSw==} 2669 | dependencies: 2670 | '@vue/compiler-dom': 3.3.4 2671 | '@vue/compiler-sfc': 3.3.4 2672 | '@vue/runtime-dom': 3.3.4 2673 | '@vue/server-renderer': 3.3.4_vue@3.3.4 2674 | '@vue/shared': 3.3.4 2675 | 2676 | /which-boxed-primitive/1.0.2: 2677 | resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} 2678 | dependencies: 2679 | is-bigint: 1.0.4 2680 | is-boolean-object: 1.1.2 2681 | is-number-object: 1.0.7 2682 | is-string: 1.0.7 2683 | is-symbol: 1.0.4 2684 | dev: true 2685 | 2686 | /which-typed-array/1.1.11: 2687 | resolution: {integrity: sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==} 2688 | engines: {node: '>= 0.4'} 2689 | dependencies: 2690 | available-typed-arrays: 1.0.5 2691 | call-bind: 1.0.2 2692 | for-each: 0.3.3 2693 | gopd: 1.0.1 2694 | has-tostringtag: 1.0.0 2695 | dev: true 2696 | 2697 | /which/2.0.2: 2698 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 2699 | engines: {node: '>= 8'} 2700 | hasBin: true 2701 | dependencies: 2702 | isexe: 2.0.0 2703 | dev: true 2704 | 2705 | /wrappy/1.0.2: 2706 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} 2707 | dev: true 2708 | 2709 | /xml-name-validator/4.0.0: 2710 | resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} 2711 | engines: {node: '>=12'} 2712 | dev: true 2713 | 2714 | /yallist/4.0.0: 2715 | resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} 2716 | dev: true 2717 | 2718 | /yocto-queue/0.1.0: 2719 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} 2720 | engines: {node: '>=10'} 2721 | dev: true 2722 | -------------------------------------------------------------------------------- /public/vite.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/App.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 8 | 9 | 15 | -------------------------------------------------------------------------------- /src/assets/vue.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/components/EditTable.vue: -------------------------------------------------------------------------------- 1 | 152 | 153 | 162 | -------------------------------------------------------------------------------- /src/components/EditTableColumn.vue: -------------------------------------------------------------------------------- 1 | 68 | 69 | 95 | -------------------------------------------------------------------------------- /src/components/GridList.vue: -------------------------------------------------------------------------------- 1 | 140 | 141 | 161 | 162 | 190 | -------------------------------------------------------------------------------- /src/constants/mime-type.ts: -------------------------------------------------------------------------------- 1 | export const enum MimeType { 2 | HTML = 'text/html', 3 | CSS = 'text/css', 4 | JPEG = 'image/jpeg', 5 | PNG = 'image/png', 6 | GIF = 'image/gif', 7 | MPEG = 'audio/mpeg', 8 | OGG = 'audio/ogg', 9 | MP4 = 'video/mp4', 10 | JSON = 'application/json', 11 | JAVASCRIPT = 'application/javascript', 12 | ECMASCRIPT = 'application/ecmascript', 13 | EXCEL = 'application/vnb.ms-excel', 14 | CSV = 'application/x-csv', 15 | ZIP = 'application/zip', 16 | TGZ = 'application/x-gtar', 17 | TAR_GZ = 'application/x-gzip', 18 | XML = 'text/xml', 19 | TEXT = 'text/plain', 20 | SVG = 'image/svg+xml', 21 | } 22 | -------------------------------------------------------------------------------- /src/hooks/useCommandComponent.ts: -------------------------------------------------------------------------------- 1 | import { AppContext, Component, ComponentPublicInstance, createVNode, getCurrentInstance, render, VNode } from 'vue'; 2 | 3 | export interface Options { 4 | visible?: boolean; 5 | onClose?: () => void; 6 | appendTo?: HTMLElement | string; 7 | [key: string]: unknown; 8 | } 9 | 10 | export interface CommandComponent { 11 | (options: Options): VNode; 12 | close: () => void; 13 | } 14 | 15 | const getAppendToElement = (props: Options): HTMLElement => { 16 | let appendTo: HTMLElement | null = document.body; 17 | if (props.appendTo) { 18 | if (typeof props.appendTo === 'string') { 19 | appendTo = document.querySelector(props.appendTo); 20 | } 21 | if (props.appendTo instanceof HTMLElement) { 22 | appendTo = props.appendTo; 23 | } 24 | if (!(appendTo instanceof HTMLElement)) { 25 | appendTo = document.body; 26 | } 27 | } 28 | return appendTo; 29 | }; 30 | 31 | const initInstance = ( 32 | Component: T, 33 | props: Options, 34 | container: HTMLElement, 35 | appContext: AppContext | null = null 36 | ) => { 37 | const vNode = createVNode(Component, props); 38 | vNode.appContext = appContext; 39 | render(vNode, container); 40 | 41 | getAppendToElement(props).appendChild(container); 42 | return vNode; 43 | }; 44 | 45 | export const useCommandComponent = (Component: T): CommandComponent => { 46 | const appContext = getCurrentInstance()?.appContext; 47 | if (appContext) { 48 | const currentProvides = (getCurrentInstance() as any)?.provides; 49 | Reflect.set(appContext, 'provides', { ...appContext.provides, ...currentProvides }); 50 | } 51 | 52 | const container = document.createElement('div'); 53 | 54 | const close = () => { 55 | render(null, container); 56 | container.parentNode?.removeChild(container); 57 | }; 58 | 59 | const CommandComponent = (options: Options): VNode => { 60 | if (!Reflect.has(options, 'visible')) { 61 | options.visible = true; 62 | } 63 | if (typeof options.onClose !== 'function') { 64 | options.onClose = close; 65 | } else { 66 | const originOnClose = options.onClose; 67 | options.onClose = () => { 68 | originOnClose(); 69 | close(); 70 | }; 71 | } 72 | const vNode = initInstance(Component, options, container, appContext); 73 | const vm = vNode.component?.proxy as ComponentPublicInstance; 74 | for (const prop in options) { 75 | if (Reflect.has(options, prop) && !Reflect.has(vm.$props, prop)) { 76 | vm[prop as keyof ComponentPublicInstance] = options[prop]; 77 | } 78 | } 79 | return vNode; 80 | }; 81 | 82 | CommandComponent.close = close; 83 | 84 | return CommandComponent; 85 | }; 86 | 87 | export default useCommandComponent; 88 | -------------------------------------------------------------------------------- /src/hooks/useEventListener.ts: -------------------------------------------------------------------------------- 1 | import { isRef, onMounted, onUnmounted, Ref, unref, watch } from 'vue'; 2 | 3 | type EventMap = HTMLElementEventMap & DocumentEventMap & WindowEventMap & MediaQueryListEventMap; 4 | 5 | export const useEventListener = ( 6 | target: Ref | EventTarget, 7 | event: K, 8 | handler: (event: EventMap[K]) => void 9 | ): (() => void) => { 10 | const eventHandler = (event: Event) => { 11 | handler(event as EventMap[K]); 12 | }; 13 | if (isRef(target)) { 14 | watch(target, (value, oldValue) => { 15 | oldValue?.removeEventListener(event, eventHandler); 16 | value?.addEventListener(event, eventHandler); 17 | }); 18 | } else { 19 | onMounted(() => { 20 | target.addEventListener(event, eventHandler); 21 | }); 22 | } 23 | 24 | const removeEventListener = () => { 25 | unref(target)?.removeEventListener(event, eventHandler); 26 | }; 27 | 28 | onUnmounted(() => { 29 | removeEventListener(); 30 | }); 31 | 32 | return removeEventListener; 33 | }; 34 | 35 | export default useEventListener; 36 | -------------------------------------------------------------------------------- /src/hooks/useExport.ts: -------------------------------------------------------------------------------- 1 | import { ref } from 'vue'; 2 | 3 | import { MimeType } from '../constants/mime-type'; 4 | 5 | class ExportError extends Error { 6 | constructor(fileName: string, e: any) { 7 | super(`${fileName} 导出失败`, { cause: e.cause }); 8 | } 9 | } 10 | 11 | export type FileName = string | ((data?: T) => string); 12 | 13 | export const useExport = >( 14 | requestFunc: (data?: T) => string | Promise, 15 | fileName: FileName = 'file', 16 | mimeType: MimeType = MimeType.TEXT, 17 | charset: string = 'utf-8', 18 | isURL: boolean = false 19 | ) => { 20 | const loading = ref(false); 21 | 22 | const error = ref(); 23 | 24 | const execute = async (data?: T): Promise => { 25 | loading.value = true; 26 | if (typeof fileName === 'function') { 27 | fileName = fileName(data); 28 | } 29 | try { 30 | const res = await Promise.resolve(requestFunc(data)); 31 | const link = document.createElement('a'); 32 | if (isURL) { 33 | link.href = res; 34 | } else { 35 | const blob = new Blob([res], { type: `${mimeType};charset=${charset}` }); 36 | link.href = window.URL.createObjectURL(blob); 37 | } 38 | link.download = fileName; 39 | link.click(); 40 | window.URL.revokeObjectURL(link.href); 41 | } catch (e) { 42 | error.value = new ExportError(fileName, e); 43 | throw error.value; 44 | } finally { 45 | loading.value = false; 46 | } 47 | }; 48 | 49 | return { 50 | execute, 51 | loading, 52 | error, 53 | }; 54 | }; 55 | 56 | export default useExport; 57 | -------------------------------------------------------------------------------- /src/hooks/useHotKey.ts: -------------------------------------------------------------------------------- 1 | import { Ref, unref } from 'vue'; 2 | 3 | import useEventListener from './useEventListener'; 4 | 5 | export interface HotKeyOptions { 6 | key: string | string[]; 7 | target: Ref | EventTarget | null; 8 | directions: string; 9 | shiftKey: boolean; 10 | ctrlKey: boolean; 11 | exact: boolean; // 当 exact 设置为 true 时,表示在判断快捷键是否匹配时,不仅要考虑按下的按键是否匹配,还需要考虑是否同时满足 Ctrl 键和 Shift 键的状态 12 | } 13 | 14 | export interface HotKeyFunction { 15 | (...args: any[]): any; 16 | hotKey?: (string | string[])[]; 17 | directions?: string; 18 | pause?: () => void; 19 | unpause?: () => void; 20 | removeListener?: () => void; 21 | } 22 | 23 | export const useHotKey = (hotKeyFunction: HotKeyFunction, opts?: Partial): HotKeyFunction => { 24 | const target = opts?.target ?? window; 25 | const isMacOS = navigator.userAgent.toLowerCase().includes('mac'); 26 | let paused: boolean = false; 27 | let key = opts?.key; 28 | 29 | const getHotKey = (): (string | string[])[] => { 30 | const options = opts || {}; 31 | const keyCombination = []; 32 | if (options.ctrlKey) keyCombination.push(isMacOS ? 'Cmd' : 'Ctrl'); 33 | if (options.shiftKey) keyCombination.push(isMacOS ? 'Option' : 'Shift'); 34 | if (key) { 35 | keyCombination.push(key); 36 | } 37 | 38 | return keyCombination; 39 | }; 40 | 41 | const handleKeydownEvent = (event: KeyboardEvent) => { 42 | event.stopPropagation(); 43 | const options = opts || {}; 44 | if (paused || !key) { 45 | return; 46 | } 47 | key = typeof key === 'string' ? [key] : key; 48 | if (key.includes(event.key.toLowerCase()) && matchKeyScheme(options, event)) { 49 | event.preventDefault(); 50 | const result = hotKeyFunction(); 51 | if (typeof result !== 'function') { 52 | return; 53 | } 54 | const targetElement: EventTarget = unref(target) ?? window; 55 | const handleKeyup = (event: Event) => { 56 | event.preventDefault(); 57 | result(); 58 | targetElement.removeEventListener('keyup', handleKeyup); 59 | }; 60 | targetElement.addEventListener('keyup', handleKeyup); 61 | } 62 | }; 63 | 64 | const removeListener = useEventListener(target, 'keydown', handleKeydownEvent); 65 | 66 | hotKeyFunction.hotKey = getHotKey(); 67 | hotKeyFunction.directions = opts?.directions ?? ''; 68 | hotKeyFunction.removeListener = removeListener; 69 | hotKeyFunction.pause = () => (paused = true); 70 | hotKeyFunction.unpause = () => (paused = false); 71 | return hotKeyFunction; 72 | }; 73 | 74 | const matchKeyScheme = ( 75 | opts: Pick, 'shiftKey' | 'ctrlKey' | 'exact'>, 76 | event: KeyboardEvent 77 | ): boolean => { 78 | const ctrlKey = opts.ctrlKey ?? false; 79 | const shiftKey = opts.shiftKey ?? false; 80 | if (opts.exact) { 81 | return (ctrlKey === event.metaKey || ctrlKey === event.ctrlKey) && shiftKey === event.shiftKey; 82 | } 83 | const satisfiedKeys: boolean[] = []; 84 | satisfiedKeys.push(ctrlKey === event.metaKey || ctrlKey === event.ctrlKey); 85 | satisfiedKeys.push(shiftKey === event.shiftKey); 86 | return satisfiedKeys.every((item) => item); 87 | }; 88 | 89 | export default useHotKey; 90 | -------------------------------------------------------------------------------- /src/hooks/useReadFileContent.ts: -------------------------------------------------------------------------------- 1 | import { ref, watch } from 'vue'; 2 | 3 | import { FileSelectCancelError, IllegalFileError } from '../utils'; 4 | 5 | import useSelectFile from './useSelectFile'; 6 | 7 | export const useReadFileContent = () => { 8 | const loading = ref(false); 9 | 10 | const error = ref(); 11 | 12 | const { error: selectFileError, execute: selectFileExecute } = useSelectFile(); 13 | 14 | watch( 15 | () => selectFileError.value, 16 | (e) => { 17 | error.value = e; 18 | } 19 | ); 20 | 21 | const execute = async (accepts: string[] = ['*']): Promise => { 22 | try { 23 | loading.value = true; 24 | const files = (await selectFileExecute(accepts)) ?? []; 25 | const fileReader = new FileReader(); 26 | return new Promise((resolve, reject) => { 27 | fileReader.onload = ({ target }) => { 28 | resolve(target?.result as string); 29 | }; 30 | fileReader.onerror = (e) => { 31 | error.value = e; 32 | reject(error.value); 33 | }; 34 | fileReader.readAsText(files[0]); 35 | }); 36 | } catch (e) { 37 | error.value = e; 38 | } finally { 39 | loading.value = false; 40 | } 41 | }; 42 | 43 | return { 44 | loading, 45 | error, 46 | execute, 47 | }; 48 | }; 49 | 50 | export default useReadFileContent; 51 | -------------------------------------------------------------------------------- /src/hooks/useRouterCache.ts: -------------------------------------------------------------------------------- 1 | import { computed, ref } from 'vue'; 2 | import { RouteLocationNormalized } from 'vue-router'; 3 | 4 | const cacheComps = ref>(new Set()); 5 | 6 | export const useRouterCache = () => { 7 | const keepAliveComps = computed>(() => [...cacheComps.value]); 8 | const cacheRouter = (from: RouteLocationNormalized, to: RouteLocationNormalized) => { 9 | if ( 10 | Array.isArray(from.meta.leaveCaches) && 11 | from.meta.leaveCaches.includes(to.path) && 12 | typeof from.name === 'string' 13 | ) { 14 | cacheComps.value.add(from.name); 15 | } 16 | if (Array.isArray(to.meta.leaveCaches) && !to.meta.leaveCaches.includes(from.path) && typeof to.name === 'string') { 17 | cacheComps.value.delete(to.name); 18 | } 19 | }; 20 | return { keepAliveComps, cacheRouter }; 21 | }; 22 | 23 | export default useRouterCache; 24 | -------------------------------------------------------------------------------- /src/hooks/useSelectFile.ts: -------------------------------------------------------------------------------- 1 | import { ref } from 'vue'; 2 | 3 | import { FileSelectCancelError, IllegalFileError, selectFile } from '../utils'; 4 | 5 | export const useSelectFile = () => { 6 | const loading = ref(false); 7 | 8 | const error = ref(); 9 | 10 | const execute = async (accepts: string[] = ['*'], multiple: boolean = false): Promise => { 11 | try { 12 | loading.value = true; 13 | const files = await selectFile(accepts, multiple); 14 | return files; 15 | } catch (e) { 16 | if (e instanceof FileSelectCancelError || e instanceof IllegalFileError) { 17 | error.value = e; 18 | } 19 | throw e; 20 | } finally { 21 | loading.value = false; 22 | } 23 | }; 24 | 25 | return { 26 | loading, 27 | error, 28 | execute, 29 | }; 30 | }; 31 | 32 | export default useSelectFile; 33 | -------------------------------------------------------------------------------- /src/hooks/useVirtualGridList.ts: -------------------------------------------------------------------------------- 1 | import type { Ref } from 'vue'; 2 | import { computed, nextTick, onMounted, onUnmounted, ref, watch, watchEffect } from 'vue'; 3 | 4 | export interface VirtualGridListConfig { 5 | containerRef: Ref; 6 | data: Ref; 7 | itemMinWidth: Ref; 8 | itemMinHeight: Ref; 9 | rowGap: Ref; 10 | columnGap: Ref; 11 | } 12 | 13 | export const useVirtualGridList = ({ 14 | containerRef, 15 | itemMinWidth, 16 | itemMinHeight, 17 | rowGap, 18 | columnGap, 19 | data, 20 | }: VirtualGridListConfig) => { 21 | const phantomElement = document.createElement('div'); 22 | phantomElement.style.position = 'absolute'; 23 | phantomElement.style.left = '0'; 24 | phantomElement.style.top = '0'; 25 | phantomElement.style.right = '0'; 26 | phantomElement.style.zIndex = '-1'; 27 | 28 | const containerHeight = ref(0); 29 | const containerWidth = ref(0); 30 | const startIndex = ref(0); 31 | const endIndex = ref(0); 32 | const startOffset = ref(0); 33 | 34 | /** 计算列数 */ 35 | const columnNum = computed( 36 | () => Math.floor((containerWidth.value - itemMinWidth.value) / (itemMinWidth.value + columnGap.value)) + 1 37 | ); 38 | /** 计算行数 */ 39 | const rowNum = computed(() => Math.ceil(data.value.length / columnNum.value)); 40 | /** 计算总高度 */ 41 | const listHeight = computed(() => 42 | Math.max(rowNum.value * itemMinHeight.value + (rowNum.value - 1) * rowGap.value, 0) 43 | ); 44 | /** 可见行数 */ 45 | const visibleRowNum = computed( 46 | () => Math.ceil((containerHeight.value - itemMinHeight.value) / (itemMinHeight.value + rowGap.value)) + 1 47 | ); 48 | /** 可见item数量 */ 49 | const visibleCount = computed(() => visibleRowNum.value * columnNum.value); 50 | 51 | watch( 52 | () => listHeight.value, 53 | () => { 54 | phantomElement.style.height = `${listHeight.value}px`; 55 | } 56 | ); 57 | 58 | watchEffect(() => { 59 | endIndex.value = startIndex.value + visibleCount.value; 60 | }); 61 | 62 | const handleContainerResize = () => { 63 | nextTick(() => { 64 | if (containerRef.value) { 65 | containerHeight.value = containerRef.value.clientHeight; 66 | containerWidth.value = containerRef.value.clientWidth; 67 | } 68 | }); 69 | }; 70 | 71 | const handleScroll = () => { 72 | if (!containerRef.value) { 73 | return; 74 | } 75 | const scrollTop = containerRef.value.scrollTop; 76 | const startRowNum = Math.ceil((scrollTop - itemMinHeight.value) / (itemMinHeight.value + rowGap.value)); 77 | startIndex.value = startRowNum * columnNum.value; 78 | startOffset.value = scrollTop - (scrollTop % (itemMinHeight.value + rowGap.value)); 79 | }; 80 | 81 | const resizeObserver = new ResizeObserver(handleContainerResize); 82 | 83 | onMounted(() => { 84 | if (containerRef.value) { 85 | containerRef.value.appendChild(phantomElement); 86 | resizeObserver.observe(containerRef.value); 87 | containerRef.value.addEventListener('scroll', (event: Event) => { 88 | event.preventDefault(); 89 | handleScroll(); 90 | }); 91 | handleScroll(); 92 | } 93 | }); 94 | 95 | onUnmounted(() => { 96 | resizeObserver.disconnect(); 97 | }); 98 | 99 | return { 100 | startIndex, 101 | endIndex, 102 | startOffset, 103 | listHeight, 104 | }; 105 | }; 106 | 107 | export default useVirtualGridList; 108 | -------------------------------------------------------------------------------- /src/layout/index.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 16 | -------------------------------------------------------------------------------- /src/main.ts: -------------------------------------------------------------------------------- 1 | import { createApp } from 'vue'; 2 | import ElementPlus from 'element-plus'; 3 | 4 | import App from './App.vue'; 5 | import router from './router'; 6 | 7 | import './style.css'; 8 | import 'element-plus/theme-chalk/index.css'; 9 | 10 | const app = createApp(App); 11 | app.use(ElementPlus); 12 | app.use(router); 13 | app.mount('#app'); 14 | -------------------------------------------------------------------------------- /src/router/index.ts: -------------------------------------------------------------------------------- 1 | import { 2 | createRouter, 3 | createWebHashHistory, 4 | NavigationGuardNext, 5 | RouteLocationNormalized, 6 | RouteRecordRaw, 7 | } from 'vue-router'; 8 | 9 | import { useRouterCache } from '../hooks/useRouterCache'; 10 | 11 | export const routes: RouteRecordRaw[] = [ 12 | { 13 | path: '/edit-table', 14 | name: 'EditTable', 15 | component: () => import('../views/edit-table/index.vue'), 16 | }, 17 | { 18 | path: '/grid-list', 19 | name: 'GridList', 20 | component: () => import('../views/grid-list/index.vue'), 21 | }, 22 | { 23 | path: '/command-dialog', 24 | name: 'CommandDialog', 25 | component: () => import('../views/command-dialog/index.vue'), 26 | }, 27 | { 28 | path: '/hotkey', 29 | name: 'HotKey', 30 | component: () => import('../views/hot-key/index.vue'), 31 | }, 32 | ]; 33 | 34 | const router = createRouter({ 35 | history: createWebHashHistory(import.meta.env.VITE_BASE_URL), 36 | routes: [ 37 | { 38 | path: '/', 39 | name: 'index', 40 | component: () => import('../layout/index.vue'), 41 | children: routes, 42 | }, 43 | ], 44 | }); 45 | 46 | const { cacheRouter } = useRouterCache(); 47 | router.beforeEach((to: RouteLocationNormalized, from: RouteLocationNormalized, next: NavigationGuardNext) => { 48 | console.log('=====', to.path); 49 | 50 | cacheRouter(from, to); 51 | next(); 52 | }); 53 | 54 | export default router; 55 | -------------------------------------------------------------------------------- /src/router/types.ts: -------------------------------------------------------------------------------- 1 | import 'vue-router'; 2 | 3 | export type LeaveCaches = string[]; 4 | 5 | declare module 'vue-router' { 6 | interface RouteMeta { 7 | leaveCaches?: LeaveCaches; 8 | menu?: boolean | string; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/style.css: -------------------------------------------------------------------------------- 1 | :root { 2 | font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif; 3 | line-height: 1.5; 4 | font-weight: 400; 5 | 6 | color-scheme: light dark; 7 | color: rgba(255, 255, 255, 0.87); 8 | background-color: #242424; 9 | 10 | font-synthesis: none; 11 | text-rendering: optimizeLegibility; 12 | -webkit-font-smoothing: antialiased; 13 | -moz-osx-font-smoothing: grayscale; 14 | -webkit-text-size-adjust: 100%; 15 | } 16 | 17 | a { 18 | font-weight: 500; 19 | color: #646cff; 20 | text-decoration: inherit; 21 | } 22 | a:hover { 23 | color: #535bf2; 24 | } 25 | 26 | body { 27 | margin: 0; 28 | display: flex; 29 | place-items: center; 30 | min-width: 320px; 31 | height: 100%; 32 | position: absolute; 33 | width: 100%; 34 | } 35 | 36 | h1 { 37 | font-size: 3.2em; 38 | line-height: 1.1; 39 | } 40 | 41 | button { 42 | border-radius: 8px; 43 | border: 1px solid transparent; 44 | padding: 0.6em 1.2em; 45 | font-size: 1em; 46 | font-weight: 500; 47 | font-family: inherit; 48 | background-color: #1a1a1a; 49 | cursor: pointer; 50 | transition: border-color 0.25s; 51 | } 52 | button:hover { 53 | border-color: #646cff; 54 | } 55 | button:focus, 56 | button:focus-visible { 57 | outline: 4px auto -webkit-focus-ring-color; 58 | } 59 | 60 | .card { 61 | padding: 2em; 62 | } 63 | 64 | #app { 65 | width: 100%; 66 | height: 100%; 67 | margin: 0 auto; 68 | text-align: center; 69 | background-color: rgb(35, 35, 126); 70 | color: rgba(255, 255, 255, 0.87); 71 | } 72 | 73 | @media (prefers-color-scheme: light) { 74 | :root { 75 | color: #213547; 76 | background-color: #ffffff; 77 | } 78 | a:hover { 79 | color: #747bff; 80 | } 81 | button { 82 | background-color: #f9f9f9; 83 | } 84 | } 85 | -------------------------------------------------------------------------------- /src/utils/error.ts: -------------------------------------------------------------------------------- 1 | export class BaseError extends Error { 2 | cause?: Error; 3 | 4 | constructor(message: string, options?: ErrorOptions) { 5 | super(message, options); 6 | this.name = this.constructor.name; 7 | } 8 | } 9 | 10 | export class EnvironmentError extends BaseError { 11 | constructor() { 12 | super('This is not a browser environment'); 13 | } 14 | } 15 | 16 | export class FileSelectCancelError extends BaseError { 17 | constructor() { 18 | super('Cancel select'); 19 | } 20 | } 21 | 22 | export class IllegalFileError extends BaseError { 23 | accepts: string[]; 24 | 25 | constructor(accepts: string[]) { 26 | super(`Please select files in ${accepts} format`); 27 | this.accepts = accepts; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/utils/file.ts: -------------------------------------------------------------------------------- 1 | import { EnvironmentError, FileSelectCancelError, IllegalFileError } from './error'; 2 | 3 | /** 4 | * 获取文件后缀 5 | * 6 | * @param file 文件或文件名 7 | * @returns 8 | */ 9 | export const getFileExtension = (file: File | string): string => { 10 | let fileName: string; 11 | if (file instanceof File) { 12 | fileName = file.name; 13 | } else { 14 | fileName = file; 15 | } 16 | return fileName.match(/\.([0-9a-z]+)(?:[\\?#]|$)/i)![1] ?? ''; 17 | }; 18 | 19 | /** 20 | * 选择系统文件 21 | * 22 | * @param accepts 可选文件后缀 23 | * @param multiple 是否多选 24 | * @returns 25 | */ 26 | export const selectFile = (accepts: string[] = ['*'], multiple?: boolean): Promise => { 27 | if (!globalThis.document || !(globalThis.document instanceof Document)) { 28 | throw new EnvironmentError(); 29 | } 30 | const inputElement = globalThis.document.createElement('input'); 31 | inputElement.setAttribute('type', 'file'); 32 | inputElement.setAttribute('visibility', 'hidden'); 33 | if (Array.isArray(accepts) && accepts.length > 0) { 34 | inputElement.setAttribute('accept', accepts.join(',')); 35 | } 36 | if (multiple) { 37 | inputElement.setAttribute('multiple', 'true'); 38 | } 39 | inputElement.click(); 40 | 41 | return new Promise((resolve, reject) => { 42 | globalThis.addEventListener( 43 | 'focus', 44 | () => { 45 | setTimeout(() => { 46 | if (!inputElement.files || inputElement.files?.length === 0) { 47 | reject(new FileSelectCancelError()); 48 | } 49 | }, 1000); 50 | }, 51 | { once: true } 52 | ); 53 | inputElement.addEventListener('change', () => { 54 | if (!inputElement.files || inputElement.files?.length === 0) { 55 | reject(new FileSelectCancelError()); 56 | } else { 57 | const files = Array.from(inputElement.files); 58 | if (illegalFiles(files)) { 59 | reject(new IllegalFileError(accepts)); 60 | } 61 | resolve(files); 62 | } 63 | }); 64 | }); 65 | 66 | function illegalFiles(files: File[]): boolean { 67 | return !accepts.includes('*') && files.some((file) => !accepts.includes(`.${getFileExtension(file)}`)); 68 | } 69 | }; 70 | 71 | export const isImage = (file: File): boolean => { 72 | return /^image\//.test(file.type); 73 | }; 74 | 75 | export const isVideo = (file: File): boolean => { 76 | return /^video\//.test(file.type); 77 | }; 78 | 79 | export const isAudio = (file: File): boolean => { 80 | return /^audio\//.test(file.type); 81 | }; 82 | 83 | export const isWordDocument = (file: File): boolean => { 84 | return /^application\/(?:vnd\.openxmlformats-officedocument\.wordprocessingml\.document|msword|vnd\.ms-word\.document\.macroenabled\.12|vnd\.openxmlformats-officedocument\.wordprocessingml\.template|vnd\.ms-word\.template\.macroenabled\.12)$/.test( 85 | file.type 86 | ); 87 | }; 88 | 89 | export const isExcelDocument = (file: File): boolean => { 90 | return /^application\/(?:vnd\.openxmlformats-officedocument\.spreadsheetml\.sheet|vnd\.ms-excel|vnd\.ms-excel\.sheet\.macroenabled\.12|vnd\.openxmlformats-officedocument\.spreadsheetml\.template|vnd\.ms-excel\.template\.macroenabled\.12)$/.test( 91 | file.type 92 | ); 93 | }; 94 | 95 | export const isPowerPointDocument = (file: File): boolean => { 96 | return /^application\/(?:vnd\.ms-powerpoint|vnd\.openxmlformats-officedocument\.presentationml\.presentation|vnd\.ms-powerpoint\.presentation\.macroenabled\.12|vnd\.openxmlformats-officedocument\.presentationml\.template|vnd\.ms-powerpoint\.template\.macroenabled\.12)$/.test( 97 | file.type 98 | ); 99 | }; 100 | 101 | export const isJsonDocument = (file: File): boolean => { 102 | return /^application\/json$/.test(file.type); 103 | }; 104 | 105 | export const isXmlDocument = (file: File): boolean => { 106 | return /^(?:application|text)\/(?:xml|xhtml\+xml)$/.test(file.type); 107 | }; 108 | 109 | export interface FileHandler { 110 | (fileRender: FileReader): void; 111 | } 112 | 113 | export const readeFile = (fileHandler: FileHandler): Promise => { 114 | const reader = new FileReader(); 115 | return new Promise((resolve, reject) => { 116 | reader.addEventListener('progress', (event: FileReaderEventMap['progress']) => { 117 | const size = '(' + Math.floor(event.total / 1000) + ' KB)'; 118 | const progress = Math.floor((event.loaded / event.total) * 100) + '%'; 119 | 120 | console.log(`Loading size: ${size} progress: ${progress}`); 121 | }); 122 | 123 | reader.addEventListener('load', (event: FileReaderEventMap['load']) => { 124 | resolve(event.target?.result as T); 125 | }); 126 | 127 | reader.addEventListener('error', (event: FileReaderEventMap['error']) => { 128 | reject(event); 129 | }); 130 | 131 | fileHandler(reader); 132 | }); 133 | }; 134 | -------------------------------------------------------------------------------- /src/utils/index.ts: -------------------------------------------------------------------------------- 1 | export * from './error'; 2 | export * from './file'; 3 | -------------------------------------------------------------------------------- /src/views/command-dialog/README.md: -------------------------------------------------------------------------------- 1 | ## useCommandComponent 2 | 3 | 阅读[《极致舒适的 Vue 弹窗使用方案》](https://juejin.cn/post/7253062314306322491)获取更多 useCommandComponent 的信息 4 | -------------------------------------------------------------------------------- /src/views/command-dialog/components/Comp.vue: -------------------------------------------------------------------------------- 1 | 14 | 15 | 21 | -------------------------------------------------------------------------------- /src/views/command-dialog/components/MyDialog.vue: -------------------------------------------------------------------------------- 1 | 27 | 28 | 39 | -------------------------------------------------------------------------------- /src/views/command-dialog/index.vue: -------------------------------------------------------------------------------- 1 | 11 | 12 | 19 | -------------------------------------------------------------------------------- /src/views/edit-table/README.md: -------------------------------------------------------------------------------- 1 | ## EditTable 2 | 3 | 阅读[《极致舒适的 Vue 可编辑表格》](https://juejin.cn/post/7242140832379584567)获取更多 EditTable 的信息 4 | 5 | ### 效果演示 6 | 7 | #### 无编辑效果 8 | 9 | ![无编辑效果](https://cdn.staticaly.com/gh/JessYan0913/picx-images-hosting@master/Snipaste_2023-09-02_11-21-52.3r5pp82rg660.webp) 10 | 11 | #### 可编辑效果 12 | 13 | ![可编辑效果](https://cdn.staticaly.com/gh/JessYan0913/picx-images-hosting@master/Kapture-2023-09-02-at-11.30.59.2nhe801q0e60.gif) 14 | 15 | #### 删除效果 16 | 17 | ![删除效果](https://cdn.staticaly.com/gh/JessYan0913/picx-images-hosting@master/Kapture-2023-09-02-at-11.33.51.oj8lh5vmwqo.gif) 18 | 19 | #### 新增效果 20 | 21 | ![新增效果](https://cdn.staticaly.com/gh/JessYan0913/picx-images-hosting@master/Kapture-2023-09-02-at-11.37.56.5ile0v6cw2s0.gif) 22 | 23 | #### 表单校验效果 24 | 25 | ![表单校验效果](https://cdn.staticaly.com/gh/JessYan0913/picx-images-hosting@master/Kapture-2023-09-02-at-11.39.47.5qsl1p1kbo80.gif) 26 | 27 | #### 获取编辑结果 28 | 29 | ![获取编辑结果](https://cdn.staticaly.com/gh/JessYan0913/picx-images-hosting@master/Kapture-2023-09-02-at-11.42.26.6ugb99gesy80.gif) 30 | 31 | ### 配置说明 32 | 33 | #### EditTable 属性 34 | 35 | | 属性名 | 说明 | 类型 | 可选值 | 默认值 | 36 | | ----------- | ------------------------------------------------------------------------- | -------- | ------ | ------ | 37 | | data-source | 显示的数据 | array | — | — | 38 | | request | 动态数据,如果同时配置了 data-source 和 request,则最终渲染为两个数据的和 | function | — | — | 39 | 40 | 其他属性参考:[ElementPlusTable](https://element-plus.gitee.io/zh-CN/component/table.html#table-%E5%B1%9E%E6%80%A7) 41 | 42 | #### EditTable 方法 43 | 44 | | 方法名 | 说明 | 参数 | 45 | | -------------------------- | ------------------------------------------------------------------ | ------ | 46 | | editActions.addRow | 增加一行可编辑态的行 | row | 47 | | editActions.deleteRow | 删除指定行,不论该行是编辑态还是非编辑态都会被删除 | $index | 48 | | editActions.startEditable | 指定行变为编辑态 | $index | 49 | | editActions.saveEditable | 保存编辑态并触发表单校验,如果校验通过,编辑数据会被更新到表格中。 | $index | 50 | | editActions.cancelEditable | 指定行取消编辑态 | $index | 51 | 52 | 其他方法参考: [ElementPlusTable](https://element-plus.gitee.io/zh-CN/component/table.html#table-%E6%96%B9%E6%B3%95) 53 | 54 | #### EditTableColumn 插槽 55 | 56 | | 插槽名 | 说明 | 作用域 | 57 | | ------- | ---------------------- | ---------------------------------------------------------------------------------------------------------------- | 58 | | default | 自定义列的内容 | `{$index, row, column, actions}`,actions 包括了`addRow, deleteRow, startEditable, saveEditable, cancelEditable` | 59 | | edit | 编辑态的自定义列的内容 | 同上 | 60 | -------------------------------------------------------------------------------- /src/views/edit-table/index.vue: -------------------------------------------------------------------------------- 1 | 36 | 37 | 238 | 239 | 263 | -------------------------------------------------------------------------------- /src/views/grid-list/README.md: -------------------------------------------------------------------------------- 1 | ## GridList 2 | 3 | 阅读[《极致舒适的 Vue 高性能列表》](https://juejin.cn/post/7248606302896832570)获取更多 GridList 的信息 4 | 5 | ### 效果演示 6 | 7 | #### Grid 布局预览 8 | 9 | ![Grid布局预览](https://cdn.staticaly.com/gh/JessYan0913/picx-images-hosting@master/Kapture-2023-09-02-at-13.53.05.4evhtw5z0r60.gif) 10 | 11 | #### 单列布局预览 12 | 13 | ![单列布局预览](https://cdn.staticaly.com/gh/JessYan0913/picx-images-hosting@master/Kapture-2023-09-02-at-14.08.53.38380u8uhje0.gif) 14 | 15 | #### 分页加载预览 16 | 17 | ![Grid分页加载](https://cdn.staticaly.com/gh/JessYan0913/picx-images-hosting@master/Kapture-2023-09-02-at-13.58.05.lb1ug03rjj4.gif) 18 | 19 | #### 虚拟列表效果 20 | 21 | ![虚拟列表效果](https://cdn.staticaly.com/gh/JessYan0913/picx-images-hosting@master/Kapture-2023-09-02-at-14.05.15.2lamgisdfy40.gif) 22 | -------------------------------------------------------------------------------- /src/views/grid-list/index.vue: -------------------------------------------------------------------------------- 1 | 17 | 18 | 34 | 35 | 53 | -------------------------------------------------------------------------------- /src/views/hot-key/index.vue: -------------------------------------------------------------------------------- 1 | 128 | 129 | 148 | 149 | 159 | -------------------------------------------------------------------------------- /src/vite-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "esnext", 4 | "module": "esnext", 5 | "strict": true, 6 | "jsx": "preserve", 7 | "moduleResolution": "node", 8 | "skipLibCheck": true, 9 | "esModuleInterop": true, 10 | "allowSyntheticDefaultImports": true, 11 | "importHelpers": true, 12 | "experimentalDecorators": true, 13 | "emitDecoratorMetadata": true, 14 | "resolveJsonModule": true, 15 | "sourceMap": true, 16 | "baseUrl": ".", 17 | "lib": ["esnext", "dom", "dom.iterable", "scripthost"], 18 | "paths": { 19 | "third-lib": ["node_modules/third-lib"] 20 | }, 21 | "types": ["node", "vite/client"] 22 | }, 23 | "exclude": ["**/dist/**/*", "**/node_modules/**/*"] 24 | } 25 | -------------------------------------------------------------------------------- /tsconfig.node.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "composite": true, 4 | "skipLibCheck": true, 5 | "module": "ESNext", 6 | "moduleResolution": "bundler", 7 | "allowSyntheticDefaultImports": true 8 | }, 9 | "include": ["vite.config.ts"] 10 | } 11 | -------------------------------------------------------------------------------- /vite.config.ts: -------------------------------------------------------------------------------- 1 | import { join } from 'path'; 2 | 3 | import { defineConfig } from 'vite'; 4 | import vue from '@vitejs/plugin-vue'; 5 | 6 | // https://vitejs.dev/config/ 7 | export default defineConfig({ 8 | base: '/vue-aide', 9 | plugins: [vue()], 10 | build: { 11 | emptyOutDir: true, 12 | }, 13 | resolve: { 14 | alias: [{ find: '@', replacement: join(__dirname, './src') }], 15 | }, 16 | optimizeDeps: { 17 | esbuildOptions: { 18 | define: { 19 | global: 'globalThis', 20 | }, 21 | }, 22 | }, 23 | server: { 24 | fs: { 25 | strict: false, 26 | }, 27 | host: '0.0.0.0', 28 | port: 8000, 29 | strictPort: true, 30 | }, 31 | }); 32 | --------------------------------------------------------------------------------