-

+
diff --git a/package.json b/package.json
index fb2763d..17a2646 100644
--- a/package.json
+++ b/package.json
@@ -12,11 +12,11 @@
"lint:check": "eslint --max-warnings 0 \"src/**/*.{vue,ts,tsx}\"",
"lint:eslint": "eslint --cache --max-warnings 0 \"src/**/*.{vue,ts,tsx}\" --fix",
"build": "cross-env NODE_ENV=production vite build && esno ./build/script/postBuild.ts",
- "build:test": "yarn lint:check && vite build --mode test && esno ./build/script/postBuild.ts",
- "build:no-cache": "yarn delete:cache && yarn build",
- "preview": "yarn run build && vite preview",
+ "build:test": "pnpm lint:check && vite build --mode test && esno ./build/script/postBuild.ts",
+ "build:no-cache": "pnpm delete:cache && pnpm build",
+ "preview": "pnpm run build && vite preview",
"preview:dist": "vite preview",
- "report": "cross-env REPORT=true yarn run build",
+ "report": "cross-env REPORT=true pnpm run build",
"log": "conventional-changelog -p angular -i CHANGELOG.md -s",
"delete:lib": "rimraf node_modules",
"delete:cache": "rimraf node_modules/.cache/ && rimraf node_modules/.vite",
@@ -24,83 +24,96 @@
"type:check": "vue-tsc --noEmit --skipLibCheck"
},
"dependencies": {
- "@amap/amap-jsapi-loader": "1.0.1",
- "@iconify/iconify": "2.2.1",
- "@vueuse/core": "9.1.1",
- "@zxcvbn-ts/core": "2.0.1",
- "ant-design-vue": "2.2.8",
- "axios": "0.21.3",
- "cropperjs": "1.5.12",
- "crypto-js": "4.1.1",
- "echarts": "5.2.0",
+ "@amap/amap-jsapi-loader": "^1.0.1",
+ "@iconify/iconify": "^2.1.30",
+ "@vueuse/core": "^9.1.1",
+ "@vueuse/shared": "^9.1.1",
+ "@zxcvbn-ts/core": "^2.0.1",
+ "@ant-design/colors": "^6.0.0",
+ "@ant-design/icons-vue": "^6.1.0",
+ "@vue/runtime-core": "^3.2.33",
+ "@vue/shared": "^3.2.33",
+ "ant-design-vue": "^3.2.12",
+ "axios": "^0.26.1",
+ "cropperjs": "^1.5.12",
+ "crypto-js": "^4.1.1",
+ "dayjs": "^1.11.1",
+ "echarts": "^5.3.2",
"event-source-polyfill": "^1.0.31",
- "js-base64": "3.6.1",
- "lodash-es": "4.17.21",
- "nprogress": "0.2.0",
- "path-to-regexp": "6.2.0",
- "pinia": "2.0.13",
- "print-js": "1.6.0",
- "qrcode": "1.4.4",
- "qs": "6.10.3",
- "resize-observer-polyfill": "1.5.1",
+ "js-base64": "^3.6.1",
+ "lodash-es": "^4.17.21",
+ "nprogress": "^0.2.0",
+ "path-to-regexp": "^6.2.0",
+ "pinia": "^2.0.13",
+ "print-js": "^1.6.0",
+ "qrcode": "^1.5.0",
+ "qs": "^6.10.3",
+ "resize-observer-polyfill": "^1.5.1",
"sortablejs": "^1.15.0",
- "tinymce": "5.9.1",
- "vditor": "3.8.6",
- "vue": "3.2.12",
- "vue-i18n": "9.1.7",
- "vue-router": "4.0.11",
- "vue-types": "4.0.3",
- "vxe-table": "^4.2.8",
+ "tinymce": "^5.10.3",
+ "vditor": "^3.8.13",
+ "vue": "^3.2.45",
+ "vue-i18n": "^9.1.9",
+ "vue-router": "^4.0.14",
+ "vue-types": "^4.1.1",
+ "exceljs": "^4.3.0",
+ "vxe-table": "^4.3.9",
+ "vxe-table-plugin-antd": "^3.0.5",
+ "vxe-table-plugin-export-xlsx": "^3.0.4",
"xe-utils": "^3.5.4",
- "xlsx": "0.17.2"
+ "xlsx": "^0.17.2"
},
"devDependencies": {
- "@iconify/json": "2.1.30",
- "@types/crypto-js": "4.0.2",
- "@types/fs-extra": "9.0.12",
- "@types/inquirer": "7.3.3",
- "@types/lodash-es": "4.17.4",
- "@types/nprogress": "0.2.0",
- "@types/qrcode": "1.4.1",
- "@types/qs": "6.9.7",
- "@types/sortablejs": "1.10.7",
- "@typescript-eslint/eslint-plugin": "4.31.1",
- "@typescript-eslint/parser": "4.31.1",
- "@vitejs/plugin-legacy": "1.5.3",
- "@vitejs/plugin-vue": "1.6.2",
- "@vitejs/plugin-vue-jsx": "1.1.8",
- "@vue/compiler-sfc": "3.2.9",
- "autoprefixer": "10.3.4",
- "conventional-changelog-cli": "2.1.1",
- "cross-env": "7.0.3",
- "dotenv": "10.0.0",
- "eslint": "7.32.0",
- "eslint-define-config": "1.0.9",
- "eslint-plugin-vue": "7.17.0",
- "esno": "0.9.1",
- "fs-extra": "10.0.0",
- "inquirer": "8.1.2",
- "less": "4.1.1",
- "postcss": "8.3.6",
- "rimraf": "3.0.2",
- "rollup-plugin-visualizer": "5.5.2",
- "typescript": "4.4.2",
- "vite": "2.5.10",
- "vite-plugin-compression": "0.3.5",
- "vite-plugin-html": "2.1.0",
- "vite-plugin-imagemin": "0.4.5",
- "vite-plugin-purge-icons": "0.7.0",
- "vite-plugin-pwa": "0.11.2",
- "vite-plugin-style-import": "1.2.1",
- "vite-plugin-svg-icons": "1.0.4",
- "vite-plugin-theme": "0.8.1",
- "vite-plugin-windicss": "1.4.3",
- "vue-eslint-parser": "7.11.0",
- "vue-tsc": "0.3.0"
+ "@iconify/json": "^2.1.30",
+ "@purge-icons/generated": "^0.8.1",
+ "@types/crypto-js": "^4.1.1",
+ "@types/fs-extra": "^9.0.13",
+ "@types/inquirer": "^8.2.1",
+ "@types/lodash-es": "^4.17.6",
+ "@types/nprogress": "^0.2.0",
+ "@types/qrcode": "^1.5.0",
+ "@types/qs": "^6.9.7",
+ "@types/sortablejs": "^1.10.7",
+ "@typescript-eslint/eslint-plugin": "^5.20.0",
+ "@typescript-eslint/parser": "^5.20.0",
+ "@vitejs/plugin-legacy": "^2.0.0",
+ "@vitejs/plugin-vue": "^2.3.3",
+ "@vitejs/plugin-vue-jsx": "^1.3.10",
+ "@vue/compiler-sfc": "^3.2.33",
+ "picocolors": "^1.0.0",
+ "autoprefixer": "^10.4.4",
+ "conventional-changelog-cli": "^2.2.2",
+ "cross-env": "^7.0.3",
+ "dotenv": "^16.0.0",
+ "eslint": "^8.13.0",
+ "eslint-define-config": "^1.1.1",
+ "eslint-plugin-vue": "^8.6.0",
+ "esno": "^0.14.1",
+ "fs-extra": "^10.1.0",
+ "inquirer": "^8.2.2",
+ "less": "^4.1.2",
+ "postcss": "^8.4.12",
+ "rimraf": "^3.0.2",
+ "rollup-plugin-visualizer": "^5.6.0",
+ "typescript": "^4.6.3",
+ "vite": "^2.9.15",
+ "vite-plugin-compression": "^0.5.1",
+ "vite-plugin-html": "^3.2.0",
+ "vite-plugin-imagemin": "^0.6.1",
+ "vite-plugin-purge-icons": "^0.8.2",
+ "vite-plugin-pwa": "^0.12.3",
+ "vite-plugin-style-import": "^2.0.0",
+ "vite-plugin-svg-icons": "^2.0.1",
+ "vite-plugin-theme": "^0.8.6",
+ "vite-plugin-windicss": "^1.8.7",
+ "vue-eslint-parser": "^8.3.0",
+ "vue-tsc": "^1.0.9",
+ "vite-plugin-optimize-persist": "^0.1.2",
+ "vite-plugin-package-config": "^0.1.1"
},
"resolutions": {
"bin-wrapper": "npm:bin-wrapper-china",
- "rollup": "2.56.2"
+ "rollup": "2.72.0"
},
"engines": {
"node": "12 || >=14"
@@ -108,5 +121,83 @@
"browserslist": [
"> 1%",
"last 2 versions"
- ]
+ ],
+ "vite": {
+ "optimizeDeps": {
+ "include": [
+ "@ant-design/colors",
+ "@ant-design/icons-vue",
+ "@vueuse/core",
+ "@vueuse/shared",
+ "@zxcvbn-ts/core",
+ "ant-design-vue",
+ "axios",
+ "cropperjs",
+ "crypto-js/aes",
+ "crypto-js/enc-base64",
+ "crypto-js/enc-utf8",
+ "crypto-js/md5",
+ "crypto-js/mode-ecb",
+ "crypto-js/pad-pkcs7",
+ "echarts",
+ "echarts/charts",
+ "echarts/components",
+ "echarts/core",
+ "echarts/renderers",
+ "lodash-es",
+ "nprogress",
+ "path-to-regexp",
+ "pinia",
+ "print-js",
+ "qrcode",
+ "qs",
+ "resize-observer-polyfill",
+ "sortablejs",
+ "tinymce/icons/default/icons",
+ "tinymce/plugins/advlist",
+ "tinymce/plugins/anchor",
+ "tinymce/plugins/autolink",
+ "tinymce/plugins/autosave",
+ "tinymce/plugins/code",
+ "tinymce/plugins/codesample",
+ "tinymce/plugins/contextmenu",
+ "tinymce/plugins/directionality",
+ "tinymce/plugins/fullscreen",
+ "tinymce/plugins/hr",
+ "tinymce/plugins/image",
+ "tinymce/plugins/insertdatetime",
+ "tinymce/plugins/link",
+ "tinymce/plugins/lists",
+ "tinymce/plugins/media",
+ "tinymce/plugins/nonbreaking",
+ "tinymce/plugins/noneditable",
+ "tinymce/plugins/pagebreak",
+ "tinymce/plugins/paste",
+ "tinymce/plugins/preview",
+ "tinymce/plugins/print",
+ "tinymce/plugins/save",
+ "tinymce/plugins/searchreplace",
+ "tinymce/plugins/spellchecker",
+ "tinymce/plugins/tabfocus",
+ "tinymce/plugins/table",
+ "tinymce/plugins/template",
+ "tinymce/plugins/textcolor",
+ "tinymce/plugins/textpattern",
+ "tinymce/plugins/visualblocks",
+ "tinymce/plugins/visualchars",
+ "tinymce/plugins/wordcount",
+ "tinymce/themes/silver",
+ "tinymce/tinymce",
+ "vditor",
+ "vue",
+ "vue-i18n",
+ "vue-router",
+ "vue-types",
+ "vxe-table",
+ "vxe-table-plugin-antd",
+ "vxe-table-plugin-export-xlsx",
+ "xe-utils"
+ ]
+ }
+ }
}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
new file mode 100644
index 0000000..6d1b388
--- /dev/null
+++ b/pnpm-lock.yaml
@@ -0,0 +1,9674 @@
+lockfileVersion: 5.4
+
+overrides:
+ bin-wrapper: npm:bin-wrapper-china
+ rollup: 2.72.0
+
+specifiers:
+ '@amap/amap-jsapi-loader': ^1.0.1
+ '@ant-design/colors': ^6.0.0
+ '@ant-design/icons-vue': ^6.1.0
+ '@iconify/iconify': ^2.1.30
+ '@iconify/json': ^2.1.30
+ '@purge-icons/generated': ^0.8.1
+ '@types/crypto-js': ^4.1.1
+ '@types/fs-extra': ^9.0.13
+ '@types/inquirer': ^8.2.1
+ '@types/lodash-es': ^4.17.6
+ '@types/nprogress': ^0.2.0
+ '@types/qrcode': ^1.5.0
+ '@types/qs': ^6.9.7
+ '@types/sortablejs': ^1.10.7
+ '@typescript-eslint/eslint-plugin': ^5.20.0
+ '@typescript-eslint/parser': ^5.20.0
+ '@vitejs/plugin-legacy': ^2.0.0
+ '@vitejs/plugin-vue': ^2.3.3
+ '@vitejs/plugin-vue-jsx': ^1.3.10
+ '@vue/compiler-sfc': ^3.2.33
+ '@vue/runtime-core': ^3.2.33
+ '@vue/shared': ^3.2.33
+ '@vueuse/core': ^9.1.1
+ '@vueuse/shared': ^9.1.1
+ '@zxcvbn-ts/core': ^2.0.1
+ ant-design-vue: ^3.2.12
+ autoprefixer: ^10.4.4
+ axios: ^0.26.1
+ conventional-changelog-cli: ^2.2.2
+ cropperjs: ^1.5.12
+ cross-env: ^7.0.3
+ crypto-js: ^4.1.1
+ dayjs: ^1.11.1
+ dotenv: ^16.0.0
+ echarts: ^5.3.2
+ eslint: ^8.13.0
+ eslint-define-config: ^1.1.1
+ eslint-plugin-vue: ^8.6.0
+ esno: ^0.14.1
+ event-source-polyfill: ^1.0.31
+ exceljs: ^4.3.0
+ fs-extra: ^10.1.0
+ inquirer: ^8.2.2
+ js-base64: ^3.6.1
+ less: ^4.1.2
+ lodash-es: ^4.17.21
+ nprogress: ^0.2.0
+ path-to-regexp: ^6.2.0
+ picocolors: ^1.0.0
+ pinia: ^2.0.13
+ postcss: ^8.4.12
+ print-js: ^1.6.0
+ qrcode: ^1.5.0
+ qs: ^6.10.3
+ resize-observer-polyfill: ^1.5.1
+ rimraf: ^3.0.2
+ rollup-plugin-visualizer: ^5.6.0
+ sortablejs: ^1.15.0
+ tinymce: ^5.10.3
+ typescript: ^4.6.3
+ vditor: ^3.8.13
+ vite: ^2.9.15
+ vite-plugin-compression: ^0.5.1
+ vite-plugin-html: ^3.2.0
+ vite-plugin-imagemin: ^0.6.1
+ vite-plugin-optimize-persist: ^0.1.2
+ vite-plugin-package-config: ^0.1.1
+ vite-plugin-purge-icons: ^0.8.2
+ vite-plugin-pwa: ^0.12.3
+ vite-plugin-style-import: ^2.0.0
+ vite-plugin-svg-icons: ^2.0.1
+ vite-plugin-theme: ^0.8.6
+ vite-plugin-windicss: ^1.8.7
+ vue: ^3.2.45
+ vue-eslint-parser: ^8.3.0
+ vue-i18n: ^9.1.9
+ vue-router: ^4.0.14
+ vue-tsc: ^1.0.9
+ vue-types: ^4.1.1
+ vxe-table: ^4.3.9
+ vxe-table-plugin-antd: ^3.0.5
+ vxe-table-plugin-export-xlsx: ^3.0.4
+ xe-utils: ^3.5.4
+ xlsx: ^0.17.2
+
+dependencies:
+ '@amap/amap-jsapi-loader': 1.0.1
+ '@ant-design/colors': 6.0.0
+ '@ant-design/icons-vue': 6.1.0_vue@3.2.47
+ '@iconify/iconify': 2.2.1
+ '@vue/runtime-core': 3.2.47
+ '@vue/shared': 3.2.47
+ '@vueuse/core': 9.13.0_vue@3.2.47
+ '@vueuse/shared': 9.13.0_vue@3.2.47
+ '@zxcvbn-ts/core': 2.2.1
+ ant-design-vue: 3.2.15_vue@3.2.47
+ axios: 0.26.1
+ cropperjs: 1.5.13
+ crypto-js: 4.1.1
+ dayjs: 1.11.7
+ echarts: 5.4.1
+ event-source-polyfill: 1.0.31
+ exceljs: 4.3.0
+ js-base64: 3.7.5
+ lodash-es: 4.17.21
+ nprogress: 0.2.0
+ path-to-regexp: 6.2.1
+ pinia: 2.0.33_hmuptsblhheur2tugfgucj7gc4
+ print-js: 1.6.0
+ qrcode: 1.5.1
+ qs: 6.11.1
+ resize-observer-polyfill: 1.5.1
+ sortablejs: 1.15.0
+ tinymce: 5.10.7
+ vditor: 3.9.0
+ vue: 3.2.47
+ vue-i18n: 9.2.2_vue@3.2.47
+ vue-router: 4.1.6_vue@3.2.47
+ vue-types: 4.2.1_vue@3.2.47
+ vxe-table: 4.3.10_vue@3.2.47+xe-utils@3.5.7
+ vxe-table-plugin-antd: 3.0.5_vxe-table@4.3.10
+ vxe-table-plugin-export-xlsx: 3.0.4_vxe-table@4.3.10
+ xe-utils: 3.5.7
+ xlsx: 0.17.5
+
+devDependencies:
+ '@iconify/json': 2.2.33
+ '@purge-icons/generated': 0.8.1
+ '@types/crypto-js': 4.1.1
+ '@types/fs-extra': 9.0.13
+ '@types/inquirer': 8.2.6
+ '@types/lodash-es': 4.17.6
+ '@types/nprogress': 0.2.0
+ '@types/qrcode': 1.5.0
+ '@types/qs': 6.9.7
+ '@types/sortablejs': 1.15.0
+ '@typescript-eslint/eslint-plugin': 5.54.1_4rfaf6mlw2mmutqjcopwvbftpu
+ '@typescript-eslint/parser': 5.54.1_vgl77cfdswitgr47lm5swmv43m
+ '@vitejs/plugin-legacy': 2.3.1_vite@2.9.15
+ '@vitejs/plugin-vue': 2.3.4_vite@2.9.15+vue@3.2.47
+ '@vitejs/plugin-vue-jsx': 1.3.10
+ '@vue/compiler-sfc': 3.2.47
+ autoprefixer: 10.4.14_postcss@8.4.21
+ conventional-changelog-cli: 2.2.2
+ cross-env: 7.0.3
+ dotenv: 16.0.3
+ eslint: 8.36.0
+ eslint-define-config: 1.16.0
+ eslint-plugin-vue: 8.7.1_eslint@8.36.0
+ esno: 0.14.1
+ fs-extra: 10.1.0
+ inquirer: 8.2.5
+ less: 4.1.3
+ picocolors: 1.0.0
+ postcss: 8.4.21
+ rimraf: 3.0.2
+ rollup-plugin-visualizer: 5.9.0
+ typescript: 4.9.5
+ vite: 2.9.15_less@4.1.3
+ vite-plugin-compression: 0.5.1_vite@2.9.15
+ vite-plugin-html: 3.2.0_vite@2.9.15
+ vite-plugin-imagemin: 0.6.1_vite@2.9.15
+ vite-plugin-optimize-persist: 0.1.2_pkkqgkwmjllbcfn4stitutuwe4
+ vite-plugin-package-config: 0.1.1_vite@2.9.15
+ vite-plugin-purge-icons: 0.8.2_vite@2.9.15
+ vite-plugin-pwa: 0.12.8_vite@2.9.15
+ vite-plugin-style-import: 2.0.0_vite@2.9.15
+ vite-plugin-svg-icons: 2.0.1_vite@2.9.15
+ vite-plugin-theme: 0.8.6_vite@2.9.15
+ vite-plugin-windicss: 1.8.10_vite@2.9.15
+ vue-eslint-parser: 8.3.0_eslint@8.36.0
+ vue-tsc: 1.2.0_typescript@4.9.5
+
+packages:
+
+ /@amap/amap-jsapi-loader/1.0.1:
+ resolution: {integrity: sha512-nPyLKt7Ow/ThHLkSvn2etQlUzqxmTVgK7bIgwdBRTg2HK5668oN7xVxkaiRe3YZEzGzfV2XgH5Jmu2T73ljejw==}
+ dev: false
+
+ /@ampproject/remapping/2.2.0:
+ resolution: {integrity: sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==}
+ engines: {node: '>=6.0.0'}
+ dependencies:
+ '@jridgewell/gen-mapping': 0.1.1
+ '@jridgewell/trace-mapping': 0.3.17
+ dev: true
+
+ /@ant-design/colors/6.0.0:
+ resolution: {integrity: sha512-qAZRvPzfdWHtfameEGP2Qvuf838NhergR35o+EuVyB5XvSA98xod5r4utvi4TJ3ywmevm290g9nsCG5MryrdWQ==}
+ dependencies:
+ '@ctrl/tinycolor': 3.6.0
+ dev: false
+
+ /@ant-design/icons-svg/4.2.1:
+ resolution: {integrity: sha512-EB0iwlKDGpG93hW8f85CTJTs4SvMX7tt5ceupvhALp1IF44SeUFOMhKUOYqpsoYWQKAOuTRDMqn75rEaKDp0Xw==}
+ dev: false
+
+ /@ant-design/icons-vue/6.1.0_vue@3.2.47:
+ resolution: {integrity: sha512-EX6bYm56V+ZrKN7+3MT/ubDkvJ5rK/O2t380WFRflDcVFgsvl3NLH7Wxeau6R8DbrO5jWR6DSTC3B6gYFp77AA==}
+ peerDependencies:
+ vue: '>=3.0.3'
+ dependencies:
+ '@ant-design/colors': 6.0.0
+ '@ant-design/icons-svg': 4.2.1
+ vue: 3.2.47
+ dev: false
+
+ /@antfu/utils/0.7.2:
+ resolution: {integrity: sha512-vy9fM3pIxZmX07dL+VX1aZe7ynZ+YyB0jY+jE6r3hOK6GNY2t6W8rzpFC4tgpbXUYABkFQwgJq2XYXlxbXAI0g==}
+ dev: true
+
+ /@apideck/better-ajv-errors/0.3.6_ajv@8.12.0:
+ resolution: {integrity: sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ ajv: '>=8'
+ dependencies:
+ ajv: 8.12.0
+ json-schema: 0.4.0
+ jsonpointer: 5.0.1
+ leven: 3.1.0
+ dev: true
+
+ /@babel/code-frame/7.18.6:
+ resolution: {integrity: sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/highlight': 7.18.6
+ dev: true
+
+ /@babel/compat-data/7.21.0:
+ resolution: {integrity: sha512-gMuZsmsgxk/ENC3O/fRw5QY8A9/uxQbbCEypnLIiYYc/qVJtEV7ouxC3EllIIwNzMqAQee5tanFabWsUOutS7g==}
+ engines: {node: '>=6.9.0'}
+ dev: true
+
+ /@babel/core/7.21.0:
+ resolution: {integrity: sha512-PuxUbxcW6ZYe656yL3EAhpy7qXKq0DmYsrJLpbB8XrsCP9Nm+XCg9XFMb5vIDliPD7+U/+M+QJlH17XOcB7eXA==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@ampproject/remapping': 2.2.0
+ '@babel/code-frame': 7.18.6
+ '@babel/generator': 7.21.1
+ '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.21.0
+ '@babel/helper-module-transforms': 7.21.2
+ '@babel/helpers': 7.21.0
+ '@babel/parser': 7.21.2
+ '@babel/template': 7.20.7
+ '@babel/traverse': 7.21.2
+ '@babel/types': 7.21.2
+ convert-source-map: 1.9.0
+ debug: 4.3.4
+ gensync: 1.0.0-beta.2
+ json5: 2.2.3
+ semver: 6.3.0
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /@babel/generator/7.21.1:
+ resolution: {integrity: sha512-1lT45bAYlQhFn/BHivJs43AiW2rg3/UbLyShGfF3C0KmHvO5fSghWd5kBJy30kpRRucGzXStvnnCFniCR2kXAA==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/types': 7.21.2
+ '@jridgewell/gen-mapping': 0.3.2
+ '@jridgewell/trace-mapping': 0.3.17
+ jsesc: 2.5.2
+ dev: true
+
+ /@babel/helper-annotate-as-pure/7.18.6:
+ resolution: {integrity: sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/types': 7.21.2
+ dev: true
+
+ /@babel/helper-builder-binary-assignment-operator-visitor/7.18.9:
+ resolution: {integrity: sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/helper-explode-assignable-expression': 7.18.6
+ '@babel/types': 7.21.2
+ dev: true
+
+ /@babel/helper-compilation-targets/7.20.7_@babel+core@7.21.0:
+ resolution: {integrity: sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+ dependencies:
+ '@babel/compat-data': 7.21.0
+ '@babel/core': 7.21.0
+ '@babel/helper-validator-option': 7.21.0
+ browserslist: 4.21.5
+ lru-cache: 5.1.1
+ semver: 6.3.0
+ dev: true
+
+ /@babel/helper-create-class-features-plugin/7.21.0_@babel+core@7.21.0:
+ resolution: {integrity: sha512-Q8wNiMIdwsv5la5SPxNYzzkPnjgC0Sy0i7jLkVOCdllu/xcVNkr3TeZzbHBJrj+XXRqzX5uCyCoV9eu6xUG7KQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+ dependencies:
+ '@babel/core': 7.21.0
+ '@babel/helper-annotate-as-pure': 7.18.6
+ '@babel/helper-environment-visitor': 7.18.9
+ '@babel/helper-function-name': 7.21.0
+ '@babel/helper-member-expression-to-functions': 7.21.0
+ '@babel/helper-optimise-call-expression': 7.18.6
+ '@babel/helper-replace-supers': 7.20.7
+ '@babel/helper-skip-transparent-expression-wrappers': 7.20.0
+ '@babel/helper-split-export-declaration': 7.18.6
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /@babel/helper-create-regexp-features-plugin/7.21.0_@babel+core@7.21.0:
+ resolution: {integrity: sha512-N+LaFW/auRSWdx7SHD/HiARwXQju1vXTW4fKr4u5SgBUTm51OKEjKgj+cs00ggW3kEvNqwErnlwuq7Y3xBe4eg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+ dependencies:
+ '@babel/core': 7.21.0
+ '@babel/helper-annotate-as-pure': 7.18.6
+ regexpu-core: 5.3.2
+ dev: true
+
+ /@babel/helper-define-polyfill-provider/0.3.3_@babel+core@7.21.0:
+ resolution: {integrity: sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==}
+ peerDependencies:
+ '@babel/core': ^7.4.0-0
+ dependencies:
+ '@babel/core': 7.21.0
+ '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.21.0
+ '@babel/helper-plugin-utils': 7.20.2
+ debug: 4.3.4
+ lodash.debounce: 4.0.8
+ resolve: 1.22.1
+ semver: 6.3.0
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /@babel/helper-environment-visitor/7.18.9:
+ resolution: {integrity: sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==}
+ engines: {node: '>=6.9.0'}
+ dev: true
+
+ /@babel/helper-explode-assignable-expression/7.18.6:
+ resolution: {integrity: sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/types': 7.21.2
+ dev: true
+
+ /@babel/helper-function-name/7.21.0:
+ resolution: {integrity: sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/template': 7.20.7
+ '@babel/types': 7.21.2
+ dev: true
+
+ /@babel/helper-hoist-variables/7.18.6:
+ resolution: {integrity: sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/types': 7.21.2
+ dev: true
+
+ /@babel/helper-member-expression-to-functions/7.21.0:
+ resolution: {integrity: sha512-Muu8cdZwNN6mRRNG6lAYErJ5X3bRevgYR2O8wN0yn7jJSnGDu6eG59RfT29JHxGUovyfrh6Pj0XzmR7drNVL3Q==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/types': 7.21.2
+ dev: true
+
+ /@babel/helper-module-imports/7.18.6:
+ resolution: {integrity: sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/types': 7.21.2
+ dev: true
+
+ /@babel/helper-module-transforms/7.21.2:
+ resolution: {integrity: sha512-79yj2AR4U/Oqq/WOV7Lx6hUjau1Zfo4cI+JLAVYeMV5XIlbOhmjEk5ulbTc9fMpmlojzZHkUUxAiK+UKn+hNQQ==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/helper-environment-visitor': 7.18.9
+ '@babel/helper-module-imports': 7.18.6
+ '@babel/helper-simple-access': 7.20.2
+ '@babel/helper-split-export-declaration': 7.18.6
+ '@babel/helper-validator-identifier': 7.19.1
+ '@babel/template': 7.20.7
+ '@babel/traverse': 7.21.2
+ '@babel/types': 7.21.2
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /@babel/helper-optimise-call-expression/7.18.6:
+ resolution: {integrity: sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/types': 7.21.2
+ dev: true
+
+ /@babel/helper-plugin-utils/7.20.2:
+ resolution: {integrity: sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==}
+ engines: {node: '>=6.9.0'}
+ dev: true
+
+ /@babel/helper-remap-async-to-generator/7.18.9_@babel+core@7.21.0:
+ resolution: {integrity: sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+ dependencies:
+ '@babel/core': 7.21.0
+ '@babel/helper-annotate-as-pure': 7.18.6
+ '@babel/helper-environment-visitor': 7.18.9
+ '@babel/helper-wrap-function': 7.20.5
+ '@babel/types': 7.21.2
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /@babel/helper-replace-supers/7.20.7:
+ resolution: {integrity: sha512-vujDMtB6LVfNW13jhlCrp48QNslK6JXi7lQG736HVbHz/mbf4Dc7tIRh1Xf5C0rF7BP8iiSxGMCmY6Ci1ven3A==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/helper-environment-visitor': 7.18.9
+ '@babel/helper-member-expression-to-functions': 7.21.0
+ '@babel/helper-optimise-call-expression': 7.18.6
+ '@babel/template': 7.20.7
+ '@babel/traverse': 7.21.2
+ '@babel/types': 7.21.2
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /@babel/helper-simple-access/7.20.2:
+ resolution: {integrity: sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/types': 7.21.2
+ dev: true
+
+ /@babel/helper-skip-transparent-expression-wrappers/7.20.0:
+ resolution: {integrity: sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/types': 7.21.2
+ dev: true
+
+ /@babel/helper-split-export-declaration/7.18.6:
+ resolution: {integrity: sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/types': 7.21.2
+ dev: true
+
+ /@babel/helper-string-parser/7.19.4:
+ resolution: {integrity: sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==}
+ engines: {node: '>=6.9.0'}
+
+ /@babel/helper-validator-identifier/7.19.1:
+ resolution: {integrity: sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==}
+ engines: {node: '>=6.9.0'}
+
+ /@babel/helper-validator-option/7.21.0:
+ resolution: {integrity: sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==}
+ engines: {node: '>=6.9.0'}
+ dev: true
+
+ /@babel/helper-wrap-function/7.20.5:
+ resolution: {integrity: sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/helper-function-name': 7.21.0
+ '@babel/template': 7.20.7
+ '@babel/traverse': 7.21.2
+ '@babel/types': 7.21.2
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /@babel/helpers/7.21.0:
+ resolution: {integrity: sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/template': 7.20.7
+ '@babel/traverse': 7.21.2
+ '@babel/types': 7.21.2
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /@babel/highlight/7.18.6:
+ resolution: {integrity: sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/helper-validator-identifier': 7.19.1
+ chalk: 2.4.2
+ js-tokens: 4.0.0
+ dev: true
+
+ /@babel/parser/7.21.2:
+ resolution: {integrity: sha512-URpaIJQwEkEC2T9Kn+Ai6Xe/02iNaVCuT/PtoRz3GPVJVDpPd7mLo+VddTbhCRU9TXqW5mSrQfXZyi8kDKOVpQ==}
+ engines: {node: '>=6.0.0'}
+ hasBin: true
+ dependencies:
+ '@babel/types': 7.21.2
+
+ /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/7.18.6_@babel+core@7.21.0:
+ resolution: {integrity: sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+ dependencies:
+ '@babel/core': 7.21.0
+ '@babel/helper-plugin-utils': 7.20.2
+ dev: true
+
+ /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/7.20.7_@babel+core@7.21.0:
+ resolution: {integrity: sha512-sbr9+wNE5aXMBBFBICk01tt7sBf2Oc9ikRFEcem/ZORup9IMUdNhW7/wVLEbbtlWOsEubJet46mHAL2C8+2jKQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.13.0
+ dependencies:
+ '@babel/core': 7.21.0
+ '@babel/helper-plugin-utils': 7.20.2
+ '@babel/helper-skip-transparent-expression-wrappers': 7.20.0
+ '@babel/plugin-proposal-optional-chaining': 7.21.0_@babel+core@7.21.0
+ dev: true
+
+ /@babel/plugin-proposal-async-generator-functions/7.20.7_@babel+core@7.21.0:
+ resolution: {integrity: sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.21.0
+ '@babel/helper-environment-visitor': 7.18.9
+ '@babel/helper-plugin-utils': 7.20.2
+ '@babel/helper-remap-async-to-generator': 7.18.9_@babel+core@7.21.0
+ '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.21.0
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /@babel/plugin-proposal-class-properties/7.18.6_@babel+core@7.21.0:
+ resolution: {integrity: sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.21.0
+ '@babel/helper-create-class-features-plugin': 7.21.0_@babel+core@7.21.0
+ '@babel/helper-plugin-utils': 7.20.2
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /@babel/plugin-proposal-class-static-block/7.21.0_@babel+core@7.21.0:
+ resolution: {integrity: sha512-XP5G9MWNUskFuP30IfFSEFB0Z6HzLIUcjYM4bYOPHXl7eiJ9HFv8tWj6TXTN5QODiEhDZAeI4hLok2iHFFV4hw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.12.0
+ dependencies:
+ '@babel/core': 7.21.0
+ '@babel/helper-create-class-features-plugin': 7.21.0_@babel+core@7.21.0
+ '@babel/helper-plugin-utils': 7.20.2
+ '@babel/plugin-syntax-class-static-block': 7.14.5_@babel+core@7.21.0
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /@babel/plugin-proposal-dynamic-import/7.18.6_@babel+core@7.21.0:
+ resolution: {integrity: sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.21.0
+ '@babel/helper-plugin-utils': 7.20.2
+ '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.21.0
+ dev: true
+
+ /@babel/plugin-proposal-export-namespace-from/7.18.9_@babel+core@7.21.0:
+ resolution: {integrity: sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.21.0
+ '@babel/helper-plugin-utils': 7.20.2
+ '@babel/plugin-syntax-export-namespace-from': 7.8.3_@babel+core@7.21.0
+ dev: true
+
+ /@babel/plugin-proposal-json-strings/7.18.6_@babel+core@7.21.0:
+ resolution: {integrity: sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.21.0
+ '@babel/helper-plugin-utils': 7.20.2
+ '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.21.0
+ dev: true
+
+ /@babel/plugin-proposal-logical-assignment-operators/7.20.7_@babel+core@7.21.0:
+ resolution: {integrity: sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.21.0
+ '@babel/helper-plugin-utils': 7.20.2
+ '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.21.0
+ dev: true
+
+ /@babel/plugin-proposal-nullish-coalescing-operator/7.18.6_@babel+core@7.21.0:
+ resolution: {integrity: sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.21.0
+ '@babel/helper-plugin-utils': 7.20.2
+ '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.21.0
+ dev: true
+
+ /@babel/plugin-proposal-numeric-separator/7.18.6_@babel+core@7.21.0:
+ resolution: {integrity: sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.21.0
+ '@babel/helper-plugin-utils': 7.20.2
+ '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.21.0
+ dev: true
+
+ /@babel/plugin-proposal-object-rest-spread/7.20.7_@babel+core@7.21.0:
+ resolution: {integrity: sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/compat-data': 7.21.0
+ '@babel/core': 7.21.0
+ '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.21.0
+ '@babel/helper-plugin-utils': 7.20.2
+ '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.21.0
+ '@babel/plugin-transform-parameters': 7.20.7_@babel+core@7.21.0
+ dev: true
+
+ /@babel/plugin-proposal-optional-catch-binding/7.18.6_@babel+core@7.21.0:
+ resolution: {integrity: sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.21.0
+ '@babel/helper-plugin-utils': 7.20.2
+ '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.21.0
+ dev: true
+
+ /@babel/plugin-proposal-optional-chaining/7.21.0_@babel+core@7.21.0:
+ resolution: {integrity: sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.21.0
+ '@babel/helper-plugin-utils': 7.20.2
+ '@babel/helper-skip-transparent-expression-wrappers': 7.20.0
+ '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.21.0
+ dev: true
+
+ /@babel/plugin-proposal-private-methods/7.18.6_@babel+core@7.21.0:
+ resolution: {integrity: sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.21.0
+ '@babel/helper-create-class-features-plugin': 7.21.0_@babel+core@7.21.0
+ '@babel/helper-plugin-utils': 7.20.2
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /@babel/plugin-proposal-private-property-in-object/7.21.0_@babel+core@7.21.0:
+ resolution: {integrity: sha512-ha4zfehbJjc5MmXBlHec1igel5TJXXLDDRbuJ4+XT2TJcyD9/V1919BA8gMvsdHcNMBy4WBUBiRb3nw/EQUtBw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.21.0
+ '@babel/helper-annotate-as-pure': 7.18.6
+ '@babel/helper-create-class-features-plugin': 7.21.0_@babel+core@7.21.0
+ '@babel/helper-plugin-utils': 7.20.2
+ '@babel/plugin-syntax-private-property-in-object': 7.14.5_@babel+core@7.21.0
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /@babel/plugin-proposal-unicode-property-regex/7.18.6_@babel+core@7.21.0:
+ resolution: {integrity: sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==}
+ engines: {node: '>=4'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.21.0
+ '@babel/helper-create-regexp-features-plugin': 7.21.0_@babel+core@7.21.0
+ '@babel/helper-plugin-utils': 7.20.2
+ dev: true
+
+ /@babel/plugin-syntax-async-generators/7.8.4_@babel+core@7.21.0:
+ resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.21.0
+ '@babel/helper-plugin-utils': 7.20.2
+ dev: true
+
+ /@babel/plugin-syntax-class-properties/7.12.13_@babel+core@7.21.0:
+ resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.21.0
+ '@babel/helper-plugin-utils': 7.20.2
+ dev: true
+
+ /@babel/plugin-syntax-class-static-block/7.14.5_@babel+core@7.21.0:
+ resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.21.0
+ '@babel/helper-plugin-utils': 7.20.2
+ dev: true
+
+ /@babel/plugin-syntax-dynamic-import/7.8.3_@babel+core@7.21.0:
+ resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.21.0
+ '@babel/helper-plugin-utils': 7.20.2
+ dev: true
+
+ /@babel/plugin-syntax-export-namespace-from/7.8.3_@babel+core@7.21.0:
+ resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.21.0
+ '@babel/helper-plugin-utils': 7.20.2
+ dev: true
+
+ /@babel/plugin-syntax-import-assertions/7.20.0_@babel+core@7.21.0:
+ resolution: {integrity: sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.21.0
+ '@babel/helper-plugin-utils': 7.20.2
+ dev: true
+
+ /@babel/plugin-syntax-import-meta/7.10.4_@babel+core@7.21.0:
+ resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.21.0
+ '@babel/helper-plugin-utils': 7.20.2
+ dev: true
+
+ /@babel/plugin-syntax-json-strings/7.8.3_@babel+core@7.21.0:
+ resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.21.0
+ '@babel/helper-plugin-utils': 7.20.2
+ dev: true
+
+ /@babel/plugin-syntax-jsx/7.18.6_@babel+core@7.21.0:
+ resolution: {integrity: sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.21.0
+ '@babel/helper-plugin-utils': 7.20.2
+ dev: true
+
+ /@babel/plugin-syntax-logical-assignment-operators/7.10.4_@babel+core@7.21.0:
+ resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.21.0
+ '@babel/helper-plugin-utils': 7.20.2
+ dev: true
+
+ /@babel/plugin-syntax-nullish-coalescing-operator/7.8.3_@babel+core@7.21.0:
+ resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.21.0
+ '@babel/helper-plugin-utils': 7.20.2
+ dev: true
+
+ /@babel/plugin-syntax-numeric-separator/7.10.4_@babel+core@7.21.0:
+ resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.21.0
+ '@babel/helper-plugin-utils': 7.20.2
+ dev: true
+
+ /@babel/plugin-syntax-object-rest-spread/7.8.3_@babel+core@7.21.0:
+ resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.21.0
+ '@babel/helper-plugin-utils': 7.20.2
+ dev: true
+
+ /@babel/plugin-syntax-optional-catch-binding/7.8.3_@babel+core@7.21.0:
+ resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.21.0
+ '@babel/helper-plugin-utils': 7.20.2
+ dev: true
+
+ /@babel/plugin-syntax-optional-chaining/7.8.3_@babel+core@7.21.0:
+ resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.21.0
+ '@babel/helper-plugin-utils': 7.20.2
+ dev: true
+
+ /@babel/plugin-syntax-private-property-in-object/7.14.5_@babel+core@7.21.0:
+ resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.21.0
+ '@babel/helper-plugin-utils': 7.20.2
+ dev: true
+
+ /@babel/plugin-syntax-top-level-await/7.14.5_@babel+core@7.21.0:
+ resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.21.0
+ '@babel/helper-plugin-utils': 7.20.2
+ dev: true
+
+ /@babel/plugin-syntax-typescript/7.20.0_@babel+core@7.21.0:
+ resolution: {integrity: sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.21.0
+ '@babel/helper-plugin-utils': 7.20.2
+ dev: true
+
+ /@babel/plugin-transform-arrow-functions/7.20.7_@babel+core@7.21.0:
+ resolution: {integrity: sha512-3poA5E7dzDomxj9WXWwuD6A5F3kc7VXwIJO+E+J8qtDtS+pXPAhrgEyh+9GBwBgPq1Z+bB+/JD60lp5jsN7JPQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.21.0
+ '@babel/helper-plugin-utils': 7.20.2
+ dev: true
+
+ /@babel/plugin-transform-async-to-generator/7.20.7_@babel+core@7.21.0:
+ resolution: {integrity: sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.21.0
+ '@babel/helper-module-imports': 7.18.6
+ '@babel/helper-plugin-utils': 7.20.2
+ '@babel/helper-remap-async-to-generator': 7.18.9_@babel+core@7.21.0
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /@babel/plugin-transform-block-scoped-functions/7.18.6_@babel+core@7.21.0:
+ resolution: {integrity: sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.21.0
+ '@babel/helper-plugin-utils': 7.20.2
+ dev: true
+
+ /@babel/plugin-transform-block-scoping/7.21.0_@babel+core@7.21.0:
+ resolution: {integrity: sha512-Mdrbunoh9SxwFZapeHVrwFmri16+oYotcZysSzhNIVDwIAb1UV+kvnxULSYq9J3/q5MDG+4X6w8QVgD1zhBXNQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.21.0
+ '@babel/helper-plugin-utils': 7.20.2
+ dev: true
+
+ /@babel/plugin-transform-classes/7.21.0_@babel+core@7.21.0:
+ resolution: {integrity: sha512-RZhbYTCEUAe6ntPehC4hlslPWosNHDox+vAs4On/mCLRLfoDVHf6hVEd7kuxr1RnHwJmxFfUM3cZiZRmPxJPXQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.21.0
+ '@babel/helper-annotate-as-pure': 7.18.6
+ '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.21.0
+ '@babel/helper-environment-visitor': 7.18.9
+ '@babel/helper-function-name': 7.21.0
+ '@babel/helper-optimise-call-expression': 7.18.6
+ '@babel/helper-plugin-utils': 7.20.2
+ '@babel/helper-replace-supers': 7.20.7
+ '@babel/helper-split-export-declaration': 7.18.6
+ globals: 11.12.0
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /@babel/plugin-transform-computed-properties/7.20.7_@babel+core@7.21.0:
+ resolution: {integrity: sha512-Lz7MvBK6DTjElHAmfu6bfANzKcxpyNPeYBGEafyA6E5HtRpjpZwU+u7Qrgz/2OR0z+5TvKYbPdphfSaAcZBrYQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.21.0
+ '@babel/helper-plugin-utils': 7.20.2
+ '@babel/template': 7.20.7
+ dev: true
+
+ /@babel/plugin-transform-destructuring/7.20.7_@babel+core@7.21.0:
+ resolution: {integrity: sha512-Xwg403sRrZb81IVB79ZPqNQME23yhugYVqgTxAhT99h485F4f+GMELFhhOsscDUB7HCswepKeCKLn/GZvUKoBA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.21.0
+ '@babel/helper-plugin-utils': 7.20.2
+ dev: true
+
+ /@babel/plugin-transform-dotall-regex/7.18.6_@babel+core@7.21.0:
+ resolution: {integrity: sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.21.0
+ '@babel/helper-create-regexp-features-plugin': 7.21.0_@babel+core@7.21.0
+ '@babel/helper-plugin-utils': 7.20.2
+ dev: true
+
+ /@babel/plugin-transform-duplicate-keys/7.18.9_@babel+core@7.21.0:
+ resolution: {integrity: sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.21.0
+ '@babel/helper-plugin-utils': 7.20.2
+ dev: true
+
+ /@babel/plugin-transform-exponentiation-operator/7.18.6_@babel+core@7.21.0:
+ resolution: {integrity: sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.21.0
+ '@babel/helper-builder-binary-assignment-operator-visitor': 7.18.9
+ '@babel/helper-plugin-utils': 7.20.2
+ dev: true
+
+ /@babel/plugin-transform-for-of/7.21.0_@babel+core@7.21.0:
+ resolution: {integrity: sha512-LlUYlydgDkKpIY7mcBWvyPPmMcOphEyYA27Ef4xpbh1IiDNLr0kZsos2nf92vz3IccvJI25QUwp86Eo5s6HmBQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.21.0
+ '@babel/helper-plugin-utils': 7.20.2
+ dev: true
+
+ /@babel/plugin-transform-function-name/7.18.9_@babel+core@7.21.0:
+ resolution: {integrity: sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.21.0
+ '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.21.0
+ '@babel/helper-function-name': 7.21.0
+ '@babel/helper-plugin-utils': 7.20.2
+ dev: true
+
+ /@babel/plugin-transform-literals/7.18.9_@babel+core@7.21.0:
+ resolution: {integrity: sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.21.0
+ '@babel/helper-plugin-utils': 7.20.2
+ dev: true
+
+ /@babel/plugin-transform-member-expression-literals/7.18.6_@babel+core@7.21.0:
+ resolution: {integrity: sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.21.0
+ '@babel/helper-plugin-utils': 7.20.2
+ dev: true
+
+ /@babel/plugin-transform-modules-amd/7.20.11_@babel+core@7.21.0:
+ resolution: {integrity: sha512-NuzCt5IIYOW0O30UvqktzHYR2ud5bOWbY0yaxWZ6G+aFzOMJvrs5YHNikrbdaT15+KNO31nPOy5Fim3ku6Zb5g==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.21.0
+ '@babel/helper-module-transforms': 7.21.2
+ '@babel/helper-plugin-utils': 7.20.2
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /@babel/plugin-transform-modules-commonjs/7.21.2_@babel+core@7.21.0:
+ resolution: {integrity: sha512-Cln+Yy04Gxua7iPdj6nOV96smLGjpElir5YwzF0LBPKoPlLDNJePNlrGGaybAJkd0zKRnOVXOgizSqPYMNYkzA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.21.0
+ '@babel/helper-module-transforms': 7.21.2
+ '@babel/helper-plugin-utils': 7.20.2
+ '@babel/helper-simple-access': 7.20.2
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /@babel/plugin-transform-modules-systemjs/7.20.11_@babel+core@7.21.0:
+ resolution: {integrity: sha512-vVu5g9BPQKSFEmvt2TA4Da5N+QVS66EX21d8uoOihC+OCpUoGvzVsXeqFdtAEfVa5BILAeFt+U7yVmLbQnAJmw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.21.0
+ '@babel/helper-hoist-variables': 7.18.6
+ '@babel/helper-module-transforms': 7.21.2
+ '@babel/helper-plugin-utils': 7.20.2
+ '@babel/helper-validator-identifier': 7.19.1
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /@babel/plugin-transform-modules-umd/7.18.6_@babel+core@7.21.0:
+ resolution: {integrity: sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.21.0
+ '@babel/helper-module-transforms': 7.21.2
+ '@babel/helper-plugin-utils': 7.20.2
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /@babel/plugin-transform-named-capturing-groups-regex/7.20.5_@babel+core@7.21.0:
+ resolution: {integrity: sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+ dependencies:
+ '@babel/core': 7.21.0
+ '@babel/helper-create-regexp-features-plugin': 7.21.0_@babel+core@7.21.0
+ '@babel/helper-plugin-utils': 7.20.2
+ dev: true
+
+ /@babel/plugin-transform-new-target/7.18.6_@babel+core@7.21.0:
+ resolution: {integrity: sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.21.0
+ '@babel/helper-plugin-utils': 7.20.2
+ dev: true
+
+ /@babel/plugin-transform-object-super/7.18.6_@babel+core@7.21.0:
+ resolution: {integrity: sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.21.0
+ '@babel/helper-plugin-utils': 7.20.2
+ '@babel/helper-replace-supers': 7.20.7
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /@babel/plugin-transform-parameters/7.20.7_@babel+core@7.21.0:
+ resolution: {integrity: sha512-WiWBIkeHKVOSYPO0pWkxGPfKeWrCJyD3NJ53+Lrp/QMSZbsVPovrVl2aWZ19D/LTVnaDv5Ap7GJ/B2CTOZdrfA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.21.0
+ '@babel/helper-plugin-utils': 7.20.2
+ dev: true
+
+ /@babel/plugin-transform-property-literals/7.18.6_@babel+core@7.21.0:
+ resolution: {integrity: sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.21.0
+ '@babel/helper-plugin-utils': 7.20.2
+ dev: true
+
+ /@babel/plugin-transform-regenerator/7.20.5_@babel+core@7.21.0:
+ resolution: {integrity: sha512-kW/oO7HPBtntbsahzQ0qSE3tFvkFwnbozz3NWFhLGqH75vLEg+sCGngLlhVkePlCs3Jv0dBBHDzCHxNiFAQKCQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.21.0
+ '@babel/helper-plugin-utils': 7.20.2
+ regenerator-transform: 0.15.1
+ dev: true
+
+ /@babel/plugin-transform-reserved-words/7.18.6_@babel+core@7.21.0:
+ resolution: {integrity: sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.21.0
+ '@babel/helper-plugin-utils': 7.20.2
+ dev: true
+
+ /@babel/plugin-transform-shorthand-properties/7.18.6_@babel+core@7.21.0:
+ resolution: {integrity: sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.21.0
+ '@babel/helper-plugin-utils': 7.20.2
+ dev: true
+
+ /@babel/plugin-transform-spread/7.20.7_@babel+core@7.21.0:
+ resolution: {integrity: sha512-ewBbHQ+1U/VnH1fxltbJqDeWBU1oNLG8Dj11uIv3xVf7nrQu0bPGe5Rf716r7K5Qz+SqtAOVswoVunoiBtGhxw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.21.0
+ '@babel/helper-plugin-utils': 7.20.2
+ '@babel/helper-skip-transparent-expression-wrappers': 7.20.0
+ dev: true
+
+ /@babel/plugin-transform-sticky-regex/7.18.6_@babel+core@7.21.0:
+ resolution: {integrity: sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.21.0
+ '@babel/helper-plugin-utils': 7.20.2
+ dev: true
+
+ /@babel/plugin-transform-template-literals/7.18.9_@babel+core@7.21.0:
+ resolution: {integrity: sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.21.0
+ '@babel/helper-plugin-utils': 7.20.2
+ dev: true
+
+ /@babel/plugin-transform-typeof-symbol/7.18.9_@babel+core@7.21.0:
+ resolution: {integrity: sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.21.0
+ '@babel/helper-plugin-utils': 7.20.2
+ dev: true
+
+ /@babel/plugin-transform-typescript/7.21.0_@babel+core@7.21.0:
+ resolution: {integrity: sha512-xo///XTPp3mDzTtrqXoBlK9eiAYW3wv9JXglcn/u1bi60RW11dEUxIgA8cbnDhutS1zacjMRmAwxE0gMklLnZg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.21.0
+ '@babel/helper-create-class-features-plugin': 7.21.0_@babel+core@7.21.0
+ '@babel/helper-plugin-utils': 7.20.2
+ '@babel/plugin-syntax-typescript': 7.20.0_@babel+core@7.21.0
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /@babel/plugin-transform-unicode-escapes/7.18.10_@babel+core@7.21.0:
+ resolution: {integrity: sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.21.0
+ '@babel/helper-plugin-utils': 7.20.2
+ dev: true
+
+ /@babel/plugin-transform-unicode-regex/7.18.6_@babel+core@7.21.0:
+ resolution: {integrity: sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.21.0
+ '@babel/helper-create-regexp-features-plugin': 7.21.0_@babel+core@7.21.0
+ '@babel/helper-plugin-utils': 7.20.2
+ dev: true
+
+ /@babel/preset-env/7.20.2_@babel+core@7.21.0:
+ resolution: {integrity: sha512-1G0efQEWR1EHkKvKHqbG+IN/QdgwfByUpM5V5QroDzGV2t3S/WXNQd693cHiHTlCFMpr9B6FkPFXDA2lQcKoDg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/compat-data': 7.21.0
+ '@babel/core': 7.21.0
+ '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.21.0
+ '@babel/helper-plugin-utils': 7.20.2
+ '@babel/helper-validator-option': 7.21.0
+ '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.18.6_@babel+core@7.21.0
+ '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.20.7_@babel+core@7.21.0
+ '@babel/plugin-proposal-async-generator-functions': 7.20.7_@babel+core@7.21.0
+ '@babel/plugin-proposal-class-properties': 7.18.6_@babel+core@7.21.0
+ '@babel/plugin-proposal-class-static-block': 7.21.0_@babel+core@7.21.0
+ '@babel/plugin-proposal-dynamic-import': 7.18.6_@babel+core@7.21.0
+ '@babel/plugin-proposal-export-namespace-from': 7.18.9_@babel+core@7.21.0
+ '@babel/plugin-proposal-json-strings': 7.18.6_@babel+core@7.21.0
+ '@babel/plugin-proposal-logical-assignment-operators': 7.20.7_@babel+core@7.21.0
+ '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6_@babel+core@7.21.0
+ '@babel/plugin-proposal-numeric-separator': 7.18.6_@babel+core@7.21.0
+ '@babel/plugin-proposal-object-rest-spread': 7.20.7_@babel+core@7.21.0
+ '@babel/plugin-proposal-optional-catch-binding': 7.18.6_@babel+core@7.21.0
+ '@babel/plugin-proposal-optional-chaining': 7.21.0_@babel+core@7.21.0
+ '@babel/plugin-proposal-private-methods': 7.18.6_@babel+core@7.21.0
+ '@babel/plugin-proposal-private-property-in-object': 7.21.0_@babel+core@7.21.0
+ '@babel/plugin-proposal-unicode-property-regex': 7.18.6_@babel+core@7.21.0
+ '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.21.0
+ '@babel/plugin-syntax-class-properties': 7.12.13_@babel+core@7.21.0
+ '@babel/plugin-syntax-class-static-block': 7.14.5_@babel+core@7.21.0
+ '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.21.0
+ '@babel/plugin-syntax-export-namespace-from': 7.8.3_@babel+core@7.21.0
+ '@babel/plugin-syntax-import-assertions': 7.20.0_@babel+core@7.21.0
+ '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.21.0
+ '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.21.0
+ '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.21.0
+ '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.21.0
+ '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.21.0
+ '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.21.0
+ '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.21.0
+ '@babel/plugin-syntax-private-property-in-object': 7.14.5_@babel+core@7.21.0
+ '@babel/plugin-syntax-top-level-await': 7.14.5_@babel+core@7.21.0
+ '@babel/plugin-transform-arrow-functions': 7.20.7_@babel+core@7.21.0
+ '@babel/plugin-transform-async-to-generator': 7.20.7_@babel+core@7.21.0
+ '@babel/plugin-transform-block-scoped-functions': 7.18.6_@babel+core@7.21.0
+ '@babel/plugin-transform-block-scoping': 7.21.0_@babel+core@7.21.0
+ '@babel/plugin-transform-classes': 7.21.0_@babel+core@7.21.0
+ '@babel/plugin-transform-computed-properties': 7.20.7_@babel+core@7.21.0
+ '@babel/plugin-transform-destructuring': 7.20.7_@babel+core@7.21.0
+ '@babel/plugin-transform-dotall-regex': 7.18.6_@babel+core@7.21.0
+ '@babel/plugin-transform-duplicate-keys': 7.18.9_@babel+core@7.21.0
+ '@babel/plugin-transform-exponentiation-operator': 7.18.6_@babel+core@7.21.0
+ '@babel/plugin-transform-for-of': 7.21.0_@babel+core@7.21.0
+ '@babel/plugin-transform-function-name': 7.18.9_@babel+core@7.21.0
+ '@babel/plugin-transform-literals': 7.18.9_@babel+core@7.21.0
+ '@babel/plugin-transform-member-expression-literals': 7.18.6_@babel+core@7.21.0
+ '@babel/plugin-transform-modules-amd': 7.20.11_@babel+core@7.21.0
+ '@babel/plugin-transform-modules-commonjs': 7.21.2_@babel+core@7.21.0
+ '@babel/plugin-transform-modules-systemjs': 7.20.11_@babel+core@7.21.0
+ '@babel/plugin-transform-modules-umd': 7.18.6_@babel+core@7.21.0
+ '@babel/plugin-transform-named-capturing-groups-regex': 7.20.5_@babel+core@7.21.0
+ '@babel/plugin-transform-new-target': 7.18.6_@babel+core@7.21.0
+ '@babel/plugin-transform-object-super': 7.18.6_@babel+core@7.21.0
+ '@babel/plugin-transform-parameters': 7.20.7_@babel+core@7.21.0
+ '@babel/plugin-transform-property-literals': 7.18.6_@babel+core@7.21.0
+ '@babel/plugin-transform-regenerator': 7.20.5_@babel+core@7.21.0
+ '@babel/plugin-transform-reserved-words': 7.18.6_@babel+core@7.21.0
+ '@babel/plugin-transform-shorthand-properties': 7.18.6_@babel+core@7.21.0
+ '@babel/plugin-transform-spread': 7.20.7_@babel+core@7.21.0
+ '@babel/plugin-transform-sticky-regex': 7.18.6_@babel+core@7.21.0
+ '@babel/plugin-transform-template-literals': 7.18.9_@babel+core@7.21.0
+ '@babel/plugin-transform-typeof-symbol': 7.18.9_@babel+core@7.21.0
+ '@babel/plugin-transform-unicode-escapes': 7.18.10_@babel+core@7.21.0
+ '@babel/plugin-transform-unicode-regex': 7.18.6_@babel+core@7.21.0
+ '@babel/preset-modules': 0.1.5_@babel+core@7.21.0
+ '@babel/types': 7.21.2
+ babel-plugin-polyfill-corejs2: 0.3.3_@babel+core@7.21.0
+ babel-plugin-polyfill-corejs3: 0.6.0_@babel+core@7.21.0
+ babel-plugin-polyfill-regenerator: 0.4.1_@babel+core@7.21.0
+ core-js-compat: 3.29.0
+ semver: 6.3.0
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /@babel/preset-modules/0.1.5_@babel+core@7.21.0:
+ resolution: {integrity: sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.21.0
+ '@babel/helper-plugin-utils': 7.20.2
+ '@babel/plugin-proposal-unicode-property-regex': 7.18.6_@babel+core@7.21.0
+ '@babel/plugin-transform-dotall-regex': 7.18.6_@babel+core@7.21.0
+ '@babel/types': 7.21.2
+ esutils: 2.0.3
+ dev: true
+
+ /@babel/regjsgen/0.8.0:
+ resolution: {integrity: sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==}
+ dev: true
+
+ /@babel/runtime/7.21.0:
+ resolution: {integrity: sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ regenerator-runtime: 0.13.11
+
+ /@babel/standalone/7.21.2:
+ resolution: {integrity: sha512-ySP/TJcyqMJVg1M/lmnPVi6L+F+IJpQ4+0lqtf723LERbk1N8/0JgLgm346cRAzfHaoXkLq/M/mJBd2uo25RBA==}
+ engines: {node: '>=6.9.0'}
+ dev: true
+
+ /@babel/template/7.20.7:
+ resolution: {integrity: sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/code-frame': 7.18.6
+ '@babel/parser': 7.21.2
+ '@babel/types': 7.21.2
+ dev: true
+
+ /@babel/traverse/7.21.2:
+ resolution: {integrity: sha512-ts5FFU/dSUPS13tv8XiEObDu9K+iagEKME9kAbaP7r0Y9KtZJZ+NGndDvWoRAYNpeWafbpFeki3q9QoMD6gxyw==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/code-frame': 7.18.6
+ '@babel/generator': 7.21.1
+ '@babel/helper-environment-visitor': 7.18.9
+ '@babel/helper-function-name': 7.21.0
+ '@babel/helper-hoist-variables': 7.18.6
+ '@babel/helper-split-export-declaration': 7.18.6
+ '@babel/parser': 7.21.2
+ '@babel/types': 7.21.2
+ debug: 4.3.4
+ globals: 11.12.0
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /@babel/types/7.21.2:
+ resolution: {integrity: sha512-3wRZSs7jiFaB8AjxiiD+VqN5DTG2iRvJGQ+qYFrs/654lg6kGTQWIOFjlBo5RaXuAZjBmP3+OQH4dmhqiiyYxw==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/helper-string-parser': 7.19.4
+ '@babel/helper-validator-identifier': 7.19.1
+ to-fast-properties: 2.0.0
+
+ /@ctrl/tinycolor/3.6.0:
+ resolution: {integrity: sha512-/Z3l6pXthq0JvMYdUFyX9j0MaCltlIn6mfh9jLyQwg5aPKxkyNa0PTHtU1AlFXLNk55ZuAeJRcpvq+tmLfKmaQ==}
+ engines: {node: '>=10'}
+ dev: false
+
+ /@esbuild/android-arm/0.17.11:
+ resolution: {integrity: sha512-CdyX6sRVh1NzFCsf5vw3kULwlAhfy9wVt8SZlrhQ7eL2qBjGbFhRBWkkAzuZm9IIEOCKJw4DXA6R85g+qc8RDw==}
+ engines: {node: '>=12'}
+ cpu: [arm]
+ os: [android]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/android-arm64/0.17.11:
+ resolution: {integrity: sha512-QnK4d/zhVTuV4/pRM4HUjcsbl43POALU2zvBynmrrqZt9LPcLA3x1fTZPBg2RRguBQnJcnU059yKr+bydkntjg==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [android]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/android-x64/0.17.11:
+ resolution: {integrity: sha512-3PL3HKtsDIXGQcSCKtWD/dy+mgc4p2Tvo2qKgKHj9Yf+eniwFnuoQ0OUhlSfAEpKAFzF9N21Nwgnap6zy3L3MQ==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [android]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/darwin-arm64/0.17.11:
+ resolution: {integrity: sha512-pJ950bNKgzhkGNO3Z9TeHzIFtEyC2GDQL3wxkMApDEghYx5Qers84UTNc1bAxWbRkuJOgmOha5V0WUeh8G+YGw==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [darwin]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/darwin-x64/0.17.11:
+ resolution: {integrity: sha512-iB0dQkIHXyczK3BZtzw1tqegf0F0Ab5texX2TvMQjiJIWXAfM4FQl7D909YfXWnB92OQz4ivBYQ2RlxBJrMJOw==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [darwin]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/freebsd-arm64/0.17.11:
+ resolution: {integrity: sha512-7EFzUADmI1jCHeDRGKgbnF5sDIceZsQGapoO6dmw7r/ZBEKX7CCDnIz8m9yEclzr7mFsd+DyasHzpjfJnmBB1Q==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [freebsd]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/freebsd-x64/0.17.11:
+ resolution: {integrity: sha512-iPgenptC8i8pdvkHQvXJFzc1eVMR7W2lBPrTE6GbhR54sLcF42mk3zBOjKPOodezzuAz/KSu8CPyFSjcBMkE9g==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [freebsd]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/linux-arm/0.17.11:
+ resolution: {integrity: sha512-M9iK/d4lgZH0U5M1R2p2gqhPV/7JPJcRz+8O8GBKVgqndTzydQ7B2XGDbxtbvFkvIs53uXTobOhv+RyaqhUiMg==}
+ engines: {node: '>=12'}
+ cpu: [arm]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/linux-arm64/0.17.11:
+ resolution: {integrity: sha512-Qxth3gsWWGKz2/qG2d5DsW/57SeA2AmpSMhdg9TSB5Svn2KDob3qxfQSkdnWjSd42kqoxIPy3EJFs+6w1+6Qjg==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/linux-ia32/0.17.11:
+ resolution: {integrity: sha512-dB1nGaVWtUlb/rRDHmuDQhfqazWE0LMro/AIbT2lWM3CDMHJNpLckH+gCddQyhhcLac2OYw69ikUMO34JLt3wA==}
+ engines: {node: '>=12'}
+ cpu: [ia32]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/linux-loong64/0.14.54:
+ resolution: {integrity: sha512-bZBrLAIX1kpWelV0XemxBZllyRmM6vgFQQG2GdNb+r3Fkp0FOh1NJSvekXDs7jq70k4euu1cryLMfU+mTXlEpw==}
+ engines: {node: '>=12'}
+ cpu: [loong64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/linux-loong64/0.17.11:
+ resolution: {integrity: sha512-aCWlq70Q7Nc9WDnormntGS1ar6ZFvUpqr8gXtO+HRejRYPweAFQN615PcgaSJkZjhHp61+MNLhzyVALSF2/Q0g==}
+ engines: {node: '>=12'}
+ cpu: [loong64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/linux-mips64el/0.17.11:
+ resolution: {integrity: sha512-cGeGNdQxqY8qJwlYH1BP6rjIIiEcrM05H7k3tR7WxOLmD1ZxRMd6/QIOWMb8mD2s2YJFNRuNQ+wjMhgEL2oCEw==}
+ engines: {node: '>=12'}
+ cpu: [mips64el]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/linux-ppc64/0.17.11:
+ resolution: {integrity: sha512-BdlziJQPW/bNe0E8eYsHB40mYOluS+jULPCjlWiHzDgr+ZBRXPtgMV1nkLEGdpjrwgmtkZHEGEPaKdS/8faLDA==}
+ engines: {node: '>=12'}
+ cpu: [ppc64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/linux-riscv64/0.17.11:
+ resolution: {integrity: sha512-MDLwQbtF+83oJCI1Cixn68Et/ME6gelmhssPebC40RdJaect+IM+l7o/CuG0ZlDs6tZTEIoxUe53H3GmMn8oMA==}
+ engines: {node: '>=12'}
+ cpu: [riscv64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/linux-s390x/0.17.11:
+ resolution: {integrity: sha512-4N5EMESvws0Ozr2J94VoUD8HIRi7X0uvUv4c0wpTHZyZY9qpaaN7THjosdiW56irQ4qnJ6Lsc+i+5zGWnyqWqQ==}
+ engines: {node: '>=12'}
+ cpu: [s390x]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/linux-x64/0.17.11:
+ resolution: {integrity: sha512-rM/v8UlluxpytFSmVdbCe1yyKQd/e+FmIJE2oPJvbBo+D0XVWi1y/NQ4iTNx+436WmDHQBjVLrbnAQLQ6U7wlw==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/netbsd-x64/0.17.11:
+ resolution: {integrity: sha512-4WaAhuz5f91h3/g43VBGdto1Q+X7VEZfpcWGtOFXnggEuLvjV+cP6DyLRU15IjiU9fKLLk41OoJfBFN5DhPvag==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [netbsd]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/openbsd-x64/0.17.11:
+ resolution: {integrity: sha512-UBj135Nx4FpnvtE+C8TWGp98oUgBcmNmdYgl5ToKc0mBHxVVqVE7FUS5/ELMImOp205qDAittL6Ezhasc2Ev/w==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [openbsd]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/sunos-x64/0.17.11:
+ resolution: {integrity: sha512-1/gxTifDC9aXbV2xOfCbOceh5AlIidUrPsMpivgzo8P8zUtczlq1ncFpeN1ZyQJ9lVs2hILy1PG5KPp+w8QPPg==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [sunos]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/win32-arm64/0.17.11:
+ resolution: {integrity: sha512-vtSfyx5yRdpiOW9yp6Ax0zyNOv9HjOAw8WaZg3dF5djEHKKm3UnoohftVvIJtRh0Ec7Hso0RIdTqZvPXJ7FdvQ==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [win32]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/win32-ia32/0.17.11:
+ resolution: {integrity: sha512-GFPSLEGQr4wHFTiIUJQrnJKZhZjjq4Sphf+mM76nQR6WkQn73vm7IsacmBRPkALfpOCHsopSvLgqdd4iUW2mYw==}
+ engines: {node: '>=12'}
+ cpu: [ia32]
+ os: [win32]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/win32-x64/0.17.11:
+ resolution: {integrity: sha512-N9vXqLP3eRL8BqSy8yn4Y98cZI2pZ8fyuHx6lKjiG2WABpT2l01TXdzq5Ma2ZUBzfB7tx5dXVhge8X9u0S70ZQ==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [win32]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@eslint-community/eslint-utils/4.2.0_eslint@8.36.0:
+ resolution: {integrity: sha512-gB8T4H4DEfX2IV9zGDJPOBgP1e/DbfCPDTtEqUMckpvzS1OYtva8JdFYBqMwYk7xAQ429WGF/UPqn8uQ//h2vQ==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ peerDependencies:
+ eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
+ dependencies:
+ eslint: 8.36.0
+ eslint-visitor-keys: 3.3.0
+ dev: true
+
+ /@eslint-community/regexpp/4.4.0:
+ resolution: {integrity: sha512-A9983Q0LnDGdLPjxyXQ00sbV+K+O+ko2Dr+CZigbHWtX9pNfxlaBkMR8X1CztI73zuEyEBXTVjx7CE+/VSwDiQ==}
+ engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
+ dev: true
+
+ /@eslint/eslintrc/2.0.1:
+ resolution: {integrity: sha512-eFRmABvW2E5Ho6f5fHLqgena46rOj7r7OKHYfLElqcBfGFHHpjBhivyi5+jOEQuSpdc/1phIZJlbC2te+tZNIw==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ dependencies:
+ ajv: 6.12.6
+ debug: 4.3.4
+ espree: 9.5.0
+ globals: 13.20.0
+ ignore: 5.2.4
+ import-fresh: 3.3.0
+ js-yaml: 4.1.0
+ minimatch: 3.1.2
+ strip-json-comments: 3.1.1
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /@eslint/js/8.36.0:
+ resolution: {integrity: sha512-lxJ9R5ygVm8ZWgYdUweoq5ownDlJ4upvoWmO4eLxBYHdMo+vZ/Rx0EN6MbKWDJOSUGrqJy2Gt+Dyv/VKml0fjg==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ dev: true
+
+ /@fast-csv/format/4.3.5:
+ resolution: {integrity: sha512-8iRn6QF3I8Ak78lNAa+Gdl5MJJBM5vRHivFtMRUWINdevNo00K7OXxS2PshawLKTejVwieIlPmK5YlLu6w4u8A==}
+ dependencies:
+ '@types/node': 14.18.37
+ lodash.escaperegexp: 4.1.2
+ lodash.isboolean: 3.0.3
+ lodash.isequal: 4.5.0
+ lodash.isfunction: 3.0.9
+ lodash.isnil: 4.0.0
+ dev: false
+
+ /@fast-csv/parse/4.3.6:
+ resolution: {integrity: sha512-uRsLYksqpbDmWaSmzvJcuApSEe38+6NQZBUsuAyMZKqHxH0g1wcJgsKUvN3WC8tewaqFjBMMGrkHmC+T7k8LvA==}
+ dependencies:
+ '@types/node': 14.18.37
+ lodash.escaperegexp: 4.1.2
+ lodash.groupby: 4.6.0
+ lodash.isfunction: 3.0.9
+ lodash.isnil: 4.0.0
+ lodash.isundefined: 3.0.1
+ lodash.uniq: 4.5.0
+ dev: false
+
+ /@humanwhocodes/config-array/0.11.8:
+ resolution: {integrity: sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==}
+ engines: {node: '>=10.10.0'}
+ dependencies:
+ '@humanwhocodes/object-schema': 1.2.1
+ debug: 4.3.4
+ minimatch: 3.1.2
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /@humanwhocodes/module-importer/1.0.1:
+ resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==}
+ engines: {node: '>=12.22'}
+ dev: true
+
+ /@humanwhocodes/object-schema/1.2.1:
+ resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==}
+ dev: true
+
+ /@hutson/parse-repository-url/3.0.2:
+ resolution: {integrity: sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q==}
+ engines: {node: '>=6.9.0'}
+ dev: true
+
+ /@iconify/iconify/2.1.2:
+ resolution: {integrity: sha512-QcUzFeEWkE/mW+BVtEGmcWATClcCOIJFiYUD/PiCWuTcdEA297o8D4oN6Ra44WrNOHu1wqNW4J0ioaDIiqaFOQ==}
+ dependencies:
+ cross-fetch: 3.1.5
+ transitivePeerDependencies:
+ - encoding
+ dev: true
+
+ /@iconify/iconify/2.2.1:
+ resolution: {integrity: sha512-WJzw+3iicrF/tbjbxxRinSgy5FHdJoz/egTqwi3xCDkNRJPq482RX1iyaWrjNuY2vMNSPkQMuqHvZDXgA+WnwQ==}
+
+ /@iconify/json/2.2.33:
+ resolution: {integrity: sha512-e5PVSGmEXWMijHi396h3hfx5hBzbCiI5AcqvGOSJIaaZyRB4pdPIHCrQ//xRBeFRw+TtATRlDJUkE2XBC05b4g==}
+ dependencies:
+ '@iconify/types': 2.0.0
+ pathe: 1.1.0
+ dev: true
+
+ /@iconify/types/2.0.0:
+ resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==}
+ dev: true
+
+ /@intlify/core-base/9.2.2:
+ resolution: {integrity: sha512-JjUpQtNfn+joMbrXvpR4hTF8iJQ2sEFzzK3KIESOx+f+uwIjgw20igOyaIdhfsVVBCds8ZM64MoeNSx+PHQMkA==}
+ engines: {node: '>= 14'}
+ dependencies:
+ '@intlify/devtools-if': 9.2.2
+ '@intlify/message-compiler': 9.2.2
+ '@intlify/shared': 9.2.2
+ '@intlify/vue-devtools': 9.2.2
+ dev: false
+
+ /@intlify/devtools-if/9.2.2:
+ resolution: {integrity: sha512-4ttr/FNO29w+kBbU7HZ/U0Lzuh2cRDhP8UlWOtV9ERcjHzuyXVZmjyleESK6eVP60tGC9QtQW9yZE+JeRhDHkg==}
+ engines: {node: '>= 14'}
+ dependencies:
+ '@intlify/shared': 9.2.2
+ dev: false
+
+ /@intlify/message-compiler/9.2.2:
+ resolution: {integrity: sha512-IUrQW7byAKN2fMBe8z6sK6riG1pue95e5jfokn8hA5Q3Bqy4MBJ5lJAofUsawQJYHeoPJ7svMDyBaVJ4d0GTtA==}
+ engines: {node: '>= 14'}
+ dependencies:
+ '@intlify/shared': 9.2.2
+ source-map: 0.6.1
+ dev: false
+
+ /@intlify/shared/9.2.2:
+ resolution: {integrity: sha512-wRwTpsslgZS5HNyM7uDQYZtxnbI12aGiBZURX3BTR9RFIKKRWpllTsgzHWvj3HKm3Y2Sh5LPC1r0PDCKEhVn9Q==}
+ engines: {node: '>= 14'}
+ dev: false
+
+ /@intlify/vue-devtools/9.2.2:
+ resolution: {integrity: sha512-+dUyqyCHWHb/UcvY1MlIpO87munedm3Gn6E9WWYdWrMuYLcoIoOEVDWSS8xSwtlPU+kA+MEQTP6Q1iI/ocusJg==}
+ engines: {node: '>= 14'}
+ dependencies:
+ '@intlify/core-base': 9.2.2
+ '@intlify/shared': 9.2.2
+ dev: false
+
+ /@jridgewell/gen-mapping/0.1.1:
+ resolution: {integrity: sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==}
+ engines: {node: '>=6.0.0'}
+ dependencies:
+ '@jridgewell/set-array': 1.1.2
+ '@jridgewell/sourcemap-codec': 1.4.14
+ dev: true
+
+ /@jridgewell/gen-mapping/0.3.2:
+ resolution: {integrity: sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==}
+ engines: {node: '>=6.0.0'}
+ dependencies:
+ '@jridgewell/set-array': 1.1.2
+ '@jridgewell/sourcemap-codec': 1.4.14
+ '@jridgewell/trace-mapping': 0.3.17
+ dev: true
+
+ /@jridgewell/resolve-uri/3.1.0:
+ resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==}
+ engines: {node: '>=6.0.0'}
+ dev: true
+
+ /@jridgewell/set-array/1.1.2:
+ resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==}
+ engines: {node: '>=6.0.0'}
+ dev: true
+
+ /@jridgewell/source-map/0.3.2:
+ resolution: {integrity: sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==}
+ dependencies:
+ '@jridgewell/gen-mapping': 0.3.2
+ '@jridgewell/trace-mapping': 0.3.17
+ dev: true
+
+ /@jridgewell/sourcemap-codec/1.4.14:
+ resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==}
+ dev: true
+
+ /@jridgewell/trace-mapping/0.3.17:
+ resolution: {integrity: sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==}
+ dependencies:
+ '@jridgewell/resolve-uri': 3.1.0
+ '@jridgewell/sourcemap-codec': 1.4.14
+ dev: true
+
+ /@nodelib/fs.scandir/2.1.5:
+ resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
+ engines: {node: '>= 8'}
+ dependencies:
+ '@nodelib/fs.stat': 2.0.5
+ run-parallel: 1.2.0
+ dev: true
+
+ /@nodelib/fs.stat/2.0.5:
+ resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
+ engines: {node: '>= 8'}
+ dev: true
+
+ /@nodelib/fs.walk/1.2.8:
+ resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
+ engines: {node: '>= 8'}
+ dependencies:
+ '@nodelib/fs.scandir': 2.1.5
+ fastq: 1.15.0
+ dev: true
+
+ /@purge-icons/core/0.8.0:
+ resolution: {integrity: sha512-8L6hP1U9XQO5B7kvquVJ5N7jzFvO0LZLXhBCjUQzzJzi42i6MAUanVKROApqbBuh21o9tmPwvNUg0xPe/uftRA==}
+ dependencies:
+ '@iconify/iconify': 2.1.2
+ axios: 0.26.1_debug@4.3.4
+ debug: 4.3.4
+ fast-glob: 3.2.12
+ fs-extra: 10.1.0
+ transitivePeerDependencies:
+ - encoding
+ - supports-color
+ dev: true
+
+ /@purge-icons/generated/0.8.1:
+ resolution: {integrity: sha512-rIExGA33EGKEToqtc8WfpboaR7or1XRp+KV1Y5v/P0Rq7G5Me95DmP3ow/MpG7ql+XZ9xPzyS2naGRx5358+6Q==}
+ dependencies:
+ '@iconify/iconify': 2.2.1
+ dev: true
+
+ /@rollup/plugin-babel/5.3.1_66seq7zzf4sfin4xsqgdvqviau:
+ resolution: {integrity: sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==}
+ engines: {node: '>= 10.0.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+ '@types/babel__core': ^7.1.9
+ rollup: ^1.20.0||^2.0.0
+ peerDependenciesMeta:
+ '@types/babel__core':
+ optional: true
+ dependencies:
+ '@babel/core': 7.21.0
+ '@babel/helper-module-imports': 7.18.6
+ '@rollup/pluginutils': 3.1.0_rollup@2.72.0
+ rollup: 2.72.0
+ dev: true
+
+ /@rollup/plugin-node-resolve/11.2.1_rollup@2.72.0:
+ resolution: {integrity: sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==}
+ engines: {node: '>= 10.0.0'}
+ peerDependencies:
+ rollup: ^1.20.0||^2.0.0
+ dependencies:
+ '@rollup/pluginutils': 3.1.0_rollup@2.72.0
+ '@types/resolve': 1.17.1
+ builtin-modules: 3.3.0
+ deepmerge: 4.3.0
+ is-module: 1.0.0
+ resolve: 1.22.1
+ rollup: 2.72.0
+ dev: true
+
+ /@rollup/plugin-replace/2.4.2_rollup@2.72.0:
+ resolution: {integrity: sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==}
+ peerDependencies:
+ rollup: ^1.20.0 || ^2.0.0
+ dependencies:
+ '@rollup/pluginutils': 3.1.0_rollup@2.72.0
+ magic-string: 0.25.9
+ rollup: 2.72.0
+ dev: true
+
+ /@rollup/pluginutils/3.1.0_rollup@2.72.0:
+ resolution: {integrity: sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==}
+ engines: {node: '>= 8.0.0'}
+ peerDependencies:
+ rollup: ^1.20.0||^2.0.0
+ dependencies:
+ '@types/estree': 0.0.39
+ estree-walker: 1.0.1
+ picomatch: 2.3.1
+ rollup: 2.72.0
+ dev: true
+
+ /@rollup/pluginutils/4.2.1:
+ resolution: {integrity: sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==}
+ engines: {node: '>= 8.0.0'}
+ dependencies:
+ estree-walker: 2.0.2
+ picomatch: 2.3.1
+ dev: true
+
+ /@simonwep/pickr/1.8.2:
+ resolution: {integrity: sha512-/l5w8BIkrpP6n1xsetx9MWPWlU6OblN5YgZZphxan0Tq4BByTCETL6lyIeY8lagalS2Nbt4F2W034KHLIiunKA==}
+ dependencies:
+ core-js: 3.29.0
+ nanopop: 2.2.0
+ dev: false
+
+ /@sindresorhus/is/0.7.0:
+ resolution: {integrity: sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow==}
+ engines: {node: '>=4'}
+ dev: true
+
+ /@surma/rollup-plugin-off-main-thread/2.2.3:
+ resolution: {integrity: sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==}
+ dependencies:
+ ejs: 3.1.9
+ json5: 2.2.3
+ magic-string: 0.25.9
+ string.prototype.matchall: 4.0.8
+ dev: true
+
+ /@trysound/sax/0.2.0:
+ resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==}
+ engines: {node: '>=10.13.0'}
+ dev: true
+
+ /@types/crypto-js/4.1.1:
+ resolution: {integrity: sha512-BG7fQKZ689HIoc5h+6D2Dgq1fABRa0RbBWKBd9SP/MVRVXROflpm5fhwyATX5duFmbStzyzyycPB8qUYKDH3NA==}
+ dev: true
+
+ /@types/estree/0.0.39:
+ resolution: {integrity: sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==}
+ dev: true
+
+ /@types/fs-extra/9.0.13:
+ resolution: {integrity: sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==}
+ dependencies:
+ '@types/node': 18.15.0
+ dev: true
+
+ /@types/glob/7.2.0:
+ resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==}
+ dependencies:
+ '@types/minimatch': 5.1.2
+ '@types/node': 18.15.0
+ dev: true
+
+ /@types/imagemin-gifsicle/7.0.1:
+ resolution: {integrity: sha512-kUz6sUh0P95JOS0RGEaaemWUrASuw+dLsWIveK2UZJx74id/B9epgblMkCk/r5MjUWbZ83wFvacG5Rb/f97gyA==}
+ dependencies:
+ '@types/imagemin': 7.0.1
+ dev: true
+
+ /@types/imagemin-jpegtran/5.0.1:
+ resolution: {integrity: sha512-Ps8kbm+DUFte/Eln/tUdEvpMWHKFCsQKlV8n+RN50zqWqL/7QhfLxR0ymitP9wa90P6+rkbJlintBNPkVR+B/Q==}
+ dependencies:
+ '@types/imagemin': 7.0.1
+ dev: true
+
+ /@types/imagemin-mozjpeg/8.0.1:
+ resolution: {integrity: sha512-kMQWEoKxxhlnH4POI3qfW9DjXlQfi80ux3l2b3j5R3eudSCoUIzKQLkfMjNJ6eMYnMWBcB+rfQOWqIzdIwFGKw==}
+ dependencies:
+ '@types/imagemin': 7.0.1
+ dev: true
+
+ /@types/imagemin-optipng/5.2.1:
+ resolution: {integrity: sha512-XCM/3q+HUL7v4zOqMI+dJ5dTxT+MUukY9KU49DSnYb/4yWtSMHJyADP+WHSMVzTR63J2ZvfUOzSilzBNEQW78g==}
+ dependencies:
+ '@types/imagemin': 7.0.1
+ dev: true
+
+ /@types/imagemin-svgo/10.0.2:
+ resolution: {integrity: sha512-F4enqbl7eE0JhrwGdJSMKFDn1j1Pk8JsCvnjA5iJKSi+IK3sd4CronabzVmOuEkz663tV7FsRQp1f7SP3zmIaA==}
+ dependencies:
+ '@types/imagemin': 7.0.1
+ '@types/svgo': 2.6.4
+ dev: true
+
+ /@types/imagemin-webp/7.0.0:
+ resolution: {integrity: sha512-Lb1tjy2vEU7qYwM5iFB9o5k0J3mIpulw6Yftset5LLLugPu7+C16rLYRP1WEwr4QM8AeJZRjC2BGBLd9lGvRhQ==}
+ dependencies:
+ '@types/imagemin': 7.0.1
+ dev: true
+
+ /@types/imagemin/7.0.1:
+ resolution: {integrity: sha512-xEn5+M3lDBtI3JxLy6eU3ksoVurygnlG7OYhTqJfGGP4PcvYnfn+IABCmMve7ziM/SneHDm5xgJFKC8hCYPicw==}
+ dependencies:
+ '@types/node': 18.15.0
+ dev: true
+
+ /@types/inquirer/8.2.6:
+ resolution: {integrity: sha512-3uT88kxg8lNzY8ay2ZjP44DKcRaTGztqeIvN2zHvhzIBH/uAPaL75aBtdNRKbA7xXoMbBt5kX0M00VKAnfOYlA==}
+ dependencies:
+ '@types/through': 0.0.30
+ rxjs: 7.8.0
+ dev: true
+
+ /@types/json-schema/7.0.11:
+ resolution: {integrity: sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==}
+ dev: true
+
+ /@types/keyv/3.1.4:
+ resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==}
+ dependencies:
+ '@types/node': 18.15.0
+ dev: true
+
+ /@types/lodash-es/4.17.6:
+ resolution: {integrity: sha512-R+zTeVUKDdfoRxpAryaQNRKk3105Rrgx2CFRClIgRGaqDTdjsm8h6IYA8ir584W3ePzkZfst5xIgDwYrlh9HLg==}
+ dependencies:
+ '@types/lodash': 4.14.191
+ dev: true
+
+ /@types/lodash/4.14.191:
+ resolution: {integrity: sha512-BdZ5BCCvho3EIXw6wUCXHe7rS53AIDPLE+JzwgT+OsJk53oBfbSmZZ7CX4VaRoN78N+TJpFi9QPlfIVNmJYWxQ==}
+ dev: true
+
+ /@types/minimatch/5.1.2:
+ resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==}
+ dev: true
+
+ /@types/minimist/1.2.2:
+ resolution: {integrity: sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==}
+ dev: true
+
+ /@types/node/14.18.37:
+ resolution: {integrity: sha512-7GgtHCs/QZrBrDzgIJnQtuSvhFSwhyYSI2uafSwZoNt1iOGhEN5fwNrQMjtONyHm9+/LoA4453jH0CMYcr06Pg==}
+
+ /@types/node/18.15.0:
+ resolution: {integrity: sha512-z6nr0TTEOBGkzLGmbypWOGnpSpSIBorEhC4L+4HeQ2iezKCi4f77kyslRwvHeNitymGQ+oFyIWGP96l/DPSV9w==}
+ dev: true
+
+ /@types/normalize-package-data/2.4.1:
+ resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==}
+ dev: true
+
+ /@types/nprogress/0.2.0:
+ resolution: {integrity: sha512-1cYJrqq9GezNFPsWTZpFut/d4CjpZqA0vhqDUPFWYKF1oIyBz5qnoYMzR+0C/T96t3ebLAC1SSnwrVOm5/j74A==}
+ dev: true
+
+ /@types/qrcode/1.5.0:
+ resolution: {integrity: sha512-x5ilHXRxUPIMfjtM+1vf/GPTRWZ81nqscursm5gMznJeK9M0YnZ1c3bEvRLQ0zSSgedLx1J6MGL231ObQGGhaA==}
+ dependencies:
+ '@types/node': 18.15.0
+ dev: true
+
+ /@types/qs/6.9.7:
+ resolution: {integrity: sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==}
+ dev: true
+
+ /@types/resolve/1.17.1:
+ resolution: {integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==}
+ dependencies:
+ '@types/node': 18.15.0
+ dev: true
+
+ /@types/responselike/1.0.0:
+ resolution: {integrity: sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==}
+ dependencies:
+ '@types/node': 18.15.0
+ dev: true
+
+ /@types/semver/7.3.13:
+ resolution: {integrity: sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==}
+ dev: true
+
+ /@types/sortablejs/1.15.0:
+ resolution: {integrity: sha512-qrhtM7M41EhH4tZQTNw2/RJkxllBx3reiJpTbgWCM2Dx0U1sZ6LwKp9lfNln9uqE26ZMKUaPEYaD4rzvOWYtZw==}
+ dev: true
+
+ /@types/svgo/2.6.4:
+ resolution: {integrity: sha512-l4cmyPEckf8moNYHdJ+4wkHvFxjyW6ulm9l4YGaOxeyBWPhBOT0gvni1InpFPdzx1dKf/2s62qGITwxNWnPQng==}
+ dependencies:
+ '@types/node': 18.15.0
+ dev: true
+
+ /@types/through/0.0.30:
+ resolution: {integrity: sha512-FvnCJljyxhPM3gkRgWmxmDZyAQSiBQQWLI0A0VFL0K7W1oRUrPJSqNO0NvTnLkBcotdlp3lKvaT0JrnyRDkzOg==}
+ dependencies:
+ '@types/node': 18.15.0
+ dev: true
+
+ /@types/tinycolor2/1.4.3:
+ resolution: {integrity: sha512-Kf1w9NE5HEgGxCRyIcRXR/ZYtDv0V8FVPtYHwLxl0O+maGX0erE77pQlD0gpP+/KByMZ87mOA79SjifhSB3PjQ==}
+ dev: true
+
+ /@types/trusted-types/2.0.3:
+ resolution: {integrity: sha512-NfQ4gyz38SL8sDNrSixxU2Os1a5xcdFxipAFxYEuLUlvU2uDwS4NUpsImcf1//SlWItCVMMLiylsxbmNMToV/g==}
+ dev: true
+
+ /@types/web-bluetooth/0.0.16:
+ resolution: {integrity: sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ==}
+ dev: false
+
+ /@typescript-eslint/eslint-plugin/5.54.1_4rfaf6mlw2mmutqjcopwvbftpu:
+ resolution: {integrity: sha512-a2RQAkosH3d3ZIV08s3DcL/mcGc2M/UC528VkPULFxR9VnVPT8pBu0IyBAJJmVsCmhVfwQX1v6q+QGnmSe1bew==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ peerDependencies:
+ '@typescript-eslint/parser': ^5.0.0
+ eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
+ typescript: '*'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+ dependencies:
+ '@typescript-eslint/parser': 5.54.1_vgl77cfdswitgr47lm5swmv43m
+ '@typescript-eslint/scope-manager': 5.54.1
+ '@typescript-eslint/type-utils': 5.54.1_vgl77cfdswitgr47lm5swmv43m
+ '@typescript-eslint/utils': 5.54.1_vgl77cfdswitgr47lm5swmv43m
+ debug: 4.3.4
+ eslint: 8.36.0
+ grapheme-splitter: 1.0.4
+ ignore: 5.2.4
+ natural-compare-lite: 1.4.0
+ regexpp: 3.2.0
+ semver: 7.3.8
+ tsutils: 3.21.0_typescript@4.9.5
+ typescript: 4.9.5
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /@typescript-eslint/parser/5.54.1_vgl77cfdswitgr47lm5swmv43m:
+ resolution: {integrity: sha512-8zaIXJp/nG9Ff9vQNh7TI+C3nA6q6iIsGJ4B4L6MhZ7mHnTMR4YP5vp2xydmFXIy8rpyIVbNAG44871LMt6ujg==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ peerDependencies:
+ eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
+ typescript: '*'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+ dependencies:
+ '@typescript-eslint/scope-manager': 5.54.1
+ '@typescript-eslint/types': 5.54.1
+ '@typescript-eslint/typescript-estree': 5.54.1_typescript@4.9.5
+ debug: 4.3.4
+ eslint: 8.36.0
+ typescript: 4.9.5
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /@typescript-eslint/scope-manager/5.54.1:
+ resolution: {integrity: sha512-zWKuGliXxvuxyM71UA/EcPxaviw39dB2504LqAmFDjmkpO8qNLHcmzlh6pbHs1h/7YQ9bnsO8CCcYCSA8sykUg==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ dependencies:
+ '@typescript-eslint/types': 5.54.1
+ '@typescript-eslint/visitor-keys': 5.54.1
+ dev: true
+
+ /@typescript-eslint/type-utils/5.54.1_vgl77cfdswitgr47lm5swmv43m:
+ resolution: {integrity: sha512-WREHsTz0GqVYLIbzIZYbmUUr95DKEKIXZNH57W3s+4bVnuF1TKe2jH8ZNH8rO1CeMY3U4j4UQeqPNkHMiGem3g==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ peerDependencies:
+ eslint: '*'
+ typescript: '*'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+ dependencies:
+ '@typescript-eslint/typescript-estree': 5.54.1_typescript@4.9.5
+ '@typescript-eslint/utils': 5.54.1_vgl77cfdswitgr47lm5swmv43m
+ debug: 4.3.4
+ eslint: 8.36.0
+ tsutils: 3.21.0_typescript@4.9.5
+ typescript: 4.9.5
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /@typescript-eslint/types/5.54.1:
+ resolution: {integrity: sha512-G9+1vVazrfAfbtmCapJX8jRo2E4MDXxgm/IMOF4oGh3kq7XuK3JRkOg6y2Qu1VsTRmWETyTkWt1wxy7X7/yLkw==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ dev: true
+
+ /@typescript-eslint/typescript-estree/5.54.1_typescript@4.9.5:
+ resolution: {integrity: sha512-bjK5t+S6ffHnVwA0qRPTZrxKSaFYocwFIkZx5k7pvWfsB1I57pO/0M0Skatzzw1sCkjJ83AfGTL0oFIFiDX3bg==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ peerDependencies:
+ typescript: '*'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+ dependencies:
+ '@typescript-eslint/types': 5.54.1
+ '@typescript-eslint/visitor-keys': 5.54.1
+ debug: 4.3.4
+ globby: 11.1.0
+ is-glob: 4.0.3
+ semver: 7.3.8
+ tsutils: 3.21.0_typescript@4.9.5
+ typescript: 4.9.5
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /@typescript-eslint/utils/5.54.1_vgl77cfdswitgr47lm5swmv43m:
+ resolution: {integrity: sha512-IY5dyQM8XD1zfDe5X8jegX6r2EVU5o/WJnLu/znLPWCBF7KNGC+adacXnt5jEYS9JixDcoccI6CvE4RCjHMzCQ==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ peerDependencies:
+ eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
+ dependencies:
+ '@types/json-schema': 7.0.11
+ '@types/semver': 7.3.13
+ '@typescript-eslint/scope-manager': 5.54.1
+ '@typescript-eslint/types': 5.54.1
+ '@typescript-eslint/typescript-estree': 5.54.1_typescript@4.9.5
+ eslint: 8.36.0
+ eslint-scope: 5.1.1
+ eslint-utils: 3.0.0_eslint@8.36.0
+ semver: 7.3.8
+ transitivePeerDependencies:
+ - supports-color
+ - typescript
+ dev: true
+
+ /@typescript-eslint/visitor-keys/5.54.1:
+ resolution: {integrity: sha512-q8iSoHTgwCfgcRJ2l2x+xCbu8nBlRAlsQ33k24Adj8eoVBE0f8dUeI+bAa8F84Mv05UGbAx57g2zrRsYIooqQg==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ dependencies:
+ '@typescript-eslint/types': 5.54.1
+ eslint-visitor-keys: 3.3.0
+ dev: true
+
+ /@vitejs/plugin-legacy/2.3.1_vite@2.9.15:
+ resolution: {integrity: sha512-J5KaGBlSt2tEYPVjM/C8dA6DkRzkFkbPe+Xb4IX5G+XOV5OGbVAfkMjKywdrkO3gGynO8S98i71Lmsff4cWkCQ==}
+ engines: {node: ^14.18.0 || >=16.0.0}
+ peerDependencies:
+ terser: ^5.4.0
+ vite: ^3.0.0
+ dependencies:
+ '@babel/standalone': 7.21.2
+ core-js: 3.29.0
+ magic-string: 0.26.7
+ regenerator-runtime: 0.13.11
+ systemjs: 6.14.0
+ vite: 2.9.15_less@4.1.3
+ dev: true
+
+ /@vitejs/plugin-vue-jsx/1.3.10:
+ resolution: {integrity: sha512-Cf5zznh4yNMiEMBfTOztaDVDmK1XXfgxClzOSUVUc8WAmHzogrCUeM8B05ABzuGtg0D1amfng+mUmSIOFGP3Pw==}
+ engines: {node: '>=12.0.0'}
+ dependencies:
+ '@babel/core': 7.21.0
+ '@babel/plugin-syntax-import-meta': 7.10.4_@babel+core@7.21.0
+ '@babel/plugin-transform-typescript': 7.21.0_@babel+core@7.21.0
+ '@rollup/pluginutils': 4.2.1
+ '@vue/babel-plugin-jsx': 1.1.1_@babel+core@7.21.0
+ hash-sum: 2.0.0
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /@vitejs/plugin-vue/2.3.4_vite@2.9.15+vue@3.2.47:
+ resolution: {integrity: sha512-IfFNbtkbIm36O9KB8QodlwwYvTEsJb4Lll4c2IwB3VHc2gie2mSPtSzL0eYay7X2jd/2WX02FjSGTWR6OPr/zg==}
+ engines: {node: '>=12.0.0'}
+ peerDependencies:
+ vite: ^2.5.10
+ vue: ^3.2.25
+ dependencies:
+ vite: 2.9.15_less@4.1.3
+ vue: 3.2.47
+ dev: true
+
+ /@volar/language-core/1.3.0-alpha.0:
+ resolution: {integrity: sha512-W3uMzecHPcbwddPu4SJpUcPakRBK/y/BP+U0U6NiPpUX1tONLC4yCawt+QBJqtgJ+sfD6ztf5PyvPL3hQRqfOA==}
+ dependencies:
+ '@volar/source-map': 1.3.0-alpha.0
+ dev: true
+
+ /@volar/source-map/1.3.0-alpha.0:
+ resolution: {integrity: sha512-jSdizxWFvDTvkPYZnO6ew3sBZUnS0abKCbuopkc0JrIlFbznWC/fPH3iPFIMS8/IIkRxq1Jh9VVG60SmtsdaMQ==}
+ dependencies:
+ muggle-string: 0.2.2
+ dev: true
+
+ /@volar/typescript/1.3.0-alpha.0:
+ resolution: {integrity: sha512-5UItyW2cdH2mBLu4RrECRNJRgtvvzKrSCn2y3v/D61QwIDkGx4aeil6x8RFuUL5TFtV6QvVHXnsOHxNgd+sCow==}
+ dependencies:
+ '@volar/language-core': 1.3.0-alpha.0
+ dev: true
+
+ /@volar/vue-language-core/1.2.0:
+ resolution: {integrity: sha512-w7yEiaITh2WzKe6u8ZdeLKCUz43wdmY/OqAmsB/PGDvvhTcVhCJ6f0W/RprZL1IhqH8wALoWiwEh/Wer7ZviMQ==}
+ dependencies:
+ '@volar/language-core': 1.3.0-alpha.0
+ '@volar/source-map': 1.3.0-alpha.0
+ '@vue/compiler-dom': 3.2.47
+ '@vue/compiler-sfc': 3.2.47
+ '@vue/reactivity': 3.2.47
+ '@vue/shared': 3.2.47
+ minimatch: 6.2.0
+ muggle-string: 0.2.2
+ vue-template-compiler: 2.7.14
+ dev: true
+
+ /@volar/vue-typescript/1.2.0:
+ resolution: {integrity: sha512-zjmRi9y3J1EkG+pfuHp8IbHmibihrKK485cfzsHjiuvJMGrpkWvlO5WVEk8oslMxxeGC5XwBFE9AOlvh378EPA==}
+ dependencies:
+ '@volar/typescript': 1.3.0-alpha.0
+ '@volar/vue-language-core': 1.2.0
+ dev: true
+
+ /@vue/babel-helper-vue-transform-on/1.0.2:
+ resolution: {integrity: sha512-hz4R8tS5jMn8lDq6iD+yWL6XNB699pGIVLk7WSJnn1dbpjaazsjZQkieJoRX6gW5zpYSCFqQ7jUquPNY65tQYA==}
+ dev: true
+
+ /@vue/babel-plugin-jsx/1.1.1_@babel+core@7.21.0:
+ resolution: {integrity: sha512-j2uVfZjnB5+zkcbc/zsOc0fSNGCMMjaEXP52wdwdIfn0qjFfEYpYZBFKFg+HHnQeJCVrjOeO0YxgaL7DMrym9w==}
+ dependencies:
+ '@babel/helper-module-imports': 7.18.6
+ '@babel/plugin-syntax-jsx': 7.18.6_@babel+core@7.21.0
+ '@babel/template': 7.20.7
+ '@babel/traverse': 7.21.2
+ '@babel/types': 7.21.2
+ '@vue/babel-helper-vue-transform-on': 1.0.2
+ camelcase: 6.3.0
+ html-tags: 3.2.0
+ svg-tags: 1.0.0
+ transitivePeerDependencies:
+ - '@babel/core'
+ - supports-color
+ dev: true
+
+ /@vue/compiler-core/3.2.47:
+ resolution: {integrity: sha512-p4D7FDnQb7+YJmO2iPEv0SQNeNzcbHdGByJDsT4lynf63AFkOTFN07HsiRSvjGo0QrxR/o3d0hUyNCUnBU2Tig==}
+ dependencies:
+ '@babel/parser': 7.21.2
+ '@vue/shared': 3.2.47
+ estree-walker: 2.0.2
+ source-map: 0.6.1
+
+ /@vue/compiler-dom/3.2.47:
+ resolution: {integrity: sha512-dBBnEHEPoftUiS03a4ggEig74J2YBZ2UIeyfpcRM2tavgMWo4bsEfgCGsu+uJIL/vax9S+JztH8NmQerUo7shQ==}
+ dependencies:
+ '@vue/compiler-core': 3.2.47
+ '@vue/shared': 3.2.47
+
+ /@vue/compiler-sfc/3.2.47:
+ resolution: {integrity: sha512-rog05W+2IFfxjMcFw10tM9+f7i/+FFpZJJ5XHX72NP9eC2uRD+42M3pYcQqDXVYoj74kHMSEdQ/WmCjt8JFksQ==}
+ dependencies:
+ '@babel/parser': 7.21.2
+ '@vue/compiler-core': 3.2.47
+ '@vue/compiler-dom': 3.2.47
+ '@vue/compiler-ssr': 3.2.47
+ '@vue/reactivity-transform': 3.2.47
+ '@vue/shared': 3.2.47
+ estree-walker: 2.0.2
+ magic-string: 0.25.9
+ postcss: 8.4.21
+ source-map: 0.6.1
+
+ /@vue/compiler-ssr/3.2.47:
+ resolution: {integrity: sha512-wVXC+gszhulcMD8wpxMsqSOpvDZ6xKXSVWkf50Guf/S+28hTAXPDYRTbLQ3EDkOP5Xz/+SY37YiwDquKbJOgZw==}
+ dependencies:
+ '@vue/compiler-dom': 3.2.47
+ '@vue/shared': 3.2.47
+
+ /@vue/devtools-api/6.5.0:
+ resolution: {integrity: sha512-o9KfBeaBmCKl10usN4crU53fYtC1r7jJwdGKjPT24t348rHxgfpZ0xL3Xm/gLUYnc0oTp8LAmrxOeLyu6tbk2Q==}
+ dev: false
+
+ /@vue/reactivity-transform/3.2.47:
+ resolution: {integrity: sha512-m8lGXw8rdnPVVIdIFhf0LeQ/ixyHkH5plYuS83yop5n7ggVJU+z5v0zecwEnX7fa7HNLBhh2qngJJkxpwEEmYA==}
+ dependencies:
+ '@babel/parser': 7.21.2
+ '@vue/compiler-core': 3.2.47
+ '@vue/shared': 3.2.47
+ estree-walker: 2.0.2
+ magic-string: 0.25.9
+
+ /@vue/reactivity/3.2.47:
+ resolution: {integrity: sha512-7khqQ/75oyyg+N/e+iwV6lpy1f5wq759NdlS1fpAhFXa8VeAIKGgk2E/C4VF59lx5b+Ezs5fpp/5WsRYXQiKxQ==}
+ dependencies:
+ '@vue/shared': 3.2.47
+
+ /@vue/runtime-core/3.2.47:
+ resolution: {integrity: sha512-RZxbLQIRB/K0ev0K9FXhNbBzT32H9iRtYbaXb0ZIz2usLms/D55dJR2t6cIEUn6vyhS3ALNvNthI+Q95C+NOpA==}
+ dependencies:
+ '@vue/reactivity': 3.2.47
+ '@vue/shared': 3.2.47
+
+ /@vue/runtime-dom/3.2.47:
+ resolution: {integrity: sha512-ArXrFTjS6TsDei4qwNvgrdmHtD930KgSKGhS5M+j8QxXrDJYLqYw4RRcDy1bz1m1wMmb6j+zGLifdVHtkXA7gA==}
+ dependencies:
+ '@vue/runtime-core': 3.2.47
+ '@vue/shared': 3.2.47
+ csstype: 2.6.21
+
+ /@vue/server-renderer/3.2.47_vue@3.2.47:
+ resolution: {integrity: sha512-dN9gc1i8EvmP9RCzvneONXsKfBRgqFeFZLurmHOveL7oH6HiFXJw5OGu294n1nHc/HMgTy6LulU/tv5/A7f/LA==}
+ peerDependencies:
+ vue: 3.2.47
+ dependencies:
+ '@vue/compiler-ssr': 3.2.47
+ '@vue/shared': 3.2.47
+ vue: 3.2.47
+
+ /@vue/shared/3.2.47:
+ resolution: {integrity: sha512-BHGyyGN3Q97EZx0taMQ+OLNuZcW3d37ZEVmEAyeoA9ERdGvm9Irc/0Fua8SNyOtV1w6BS4q25wbMzJujO9HIfQ==}
+
+ /@vueuse/core/9.13.0_vue@3.2.47:
+ resolution: {integrity: sha512-pujnclbeHWxxPRqXWmdkKV5OX4Wk4YeK7wusHqRwU0Q7EFusHoqNA/aPhB6KCh9hEqJkLAJo7bb0Lh9b+OIVzw==}
+ dependencies:
+ '@types/web-bluetooth': 0.0.16
+ '@vueuse/metadata': 9.13.0
+ '@vueuse/shared': 9.13.0_vue@3.2.47
+ vue-demi: 0.13.11_vue@3.2.47
+ transitivePeerDependencies:
+ - '@vue/composition-api'
+ - vue
+ dev: false
+
+ /@vueuse/metadata/9.13.0:
+ resolution: {integrity: sha512-gdU7TKNAUVlXXLbaF+ZCfte8BjRJQWPCa2J55+7/h+yDtzw3vOoGQDRXzI6pyKyo6bXFT5/QoPE4hAknExjRLQ==}
+ dev: false
+
+ /@vueuse/shared/9.13.0_vue@3.2.47:
+ resolution: {integrity: sha512-UrnhU+Cnufu4S6JLCPZnkWh0WwZGUp72ktOF2DFptMlOs3TOdVv8xJN53zhHGARmVOsz5KqOls09+J1NR6sBKw==}
+ dependencies:
+ vue-demi: 0.13.11_vue@3.2.47
+ transitivePeerDependencies:
+ - '@vue/composition-api'
+ - vue
+ dev: false
+
+ /@windicss/config/1.8.10:
+ resolution: {integrity: sha512-O9SsC110b1Ik3YYa4Ck/0TWuCo7YFfA9KDrwD5sAeqscT5COIGK1HszdCT3oh0MJFej2wNrvpfyW9h6yQaW6PA==}
+ dependencies:
+ debug: 4.3.4
+ jiti: 1.17.2
+ windicss: 3.5.6
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /@windicss/plugin-utils/1.8.10:
+ resolution: {integrity: sha512-Phqk5OW1w+Mv+ry6t7BzAeDq3aMhbI94gR49j9vQCufFfDGCHndhhjtMK0sBv+NPJUsIAIh6qayb1iwBCXUGrw==}
+ dependencies:
+ '@antfu/utils': 0.7.2
+ '@windicss/config': 1.8.10
+ debug: 4.3.4
+ fast-glob: 3.2.12
+ magic-string: 0.27.0
+ micromatch: 4.0.5
+ windicss: 3.5.6
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /@zxcvbn-ts/core/2.2.1:
+ resolution: {integrity: sha512-Cg1JyRpCDIF+Dh3nauqygmmCYxogNVZDxSn+9PgkPD1HZ2QiJe4elruVJrGmYRS7muGmZ1hNJq8ySQdPv6GHaw==}
+ dependencies:
+ fastest-levenshtein: 1.0.16
+ dev: false
+
+ /JSONStream/1.3.5:
+ resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==}
+ hasBin: true
+ dependencies:
+ jsonparse: 1.3.1
+ through: 2.3.8
+ dev: true
+
+ /acorn-jsx/5.3.2_acorn@8.8.2:
+ resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
+ peerDependencies:
+ acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
+ dependencies:
+ acorn: 8.8.2
+ dev: true
+
+ /acorn/8.8.2:
+ resolution: {integrity: sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==}
+ engines: {node: '>=0.4.0'}
+ hasBin: true
+ dev: true
+
+ /add-stream/1.0.0:
+ resolution: {integrity: sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ==}
+ dev: true
+
+ /adler-32/1.2.0:
+ resolution: {integrity: sha512-/vUqU/UY4MVeFsg+SsK6c+/05RZXIHZMGJA+PX5JyWI0ZRcBpupnRuPLU/NXXoFwMYCPCoxIfElM2eS+DUXCqQ==}
+ engines: {node: '>=0.8'}
+ hasBin: true
+ dependencies:
+ exit-on-epipe: 1.0.1
+ printj: 1.1.2
+ dev: false
+
+ /adler-32/1.3.1:
+ resolution: {integrity: sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==}
+ engines: {node: '>=0.8'}
+ dev: false
+
+ /ajv/6.12.6:
+ resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
+ dependencies:
+ fast-deep-equal: 3.1.3
+ fast-json-stable-stringify: 2.1.0
+ json-schema-traverse: 0.4.1
+ uri-js: 4.4.1
+ dev: true
+
+ /ajv/8.12.0:
+ resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==}
+ dependencies:
+ fast-deep-equal: 3.1.3
+ json-schema-traverse: 1.0.0
+ require-from-string: 2.0.2
+ uri-js: 4.4.1
+ dev: true
+
+ /ansi-escapes/4.3.2:
+ resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==}
+ engines: {node: '>=8'}
+ dependencies:
+ type-fest: 0.21.3
+ dev: true
+
+ /ansi-regex/2.1.1:
+ resolution: {integrity: sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /ansi-regex/5.0.1:
+ resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
+ engines: {node: '>=8'}
+
+ /ansi-styles/2.2.1:
+ resolution: {integrity: sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /ansi-styles/3.2.1:
+ resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==}
+ engines: {node: '>=4'}
+ dependencies:
+ color-convert: 1.9.3
+ dev: true
+
+ /ansi-styles/4.3.0:
+ resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
+ engines: {node: '>=8'}
+ dependencies:
+ color-convert: 2.0.1
+
+ /ant-design-vue/3.2.15_vue@3.2.47:
+ resolution: {integrity: sha512-sJfE7LWimSdAPe4dzNyQBrmVMnOTNQTkG9oOyr+7W8qIYrX8sYWyC68Nn1uum4KBJUSZUa/BU6dohvTG0urBhA==}
+ engines: {node: '>=12.22.0'}
+ peerDependencies:
+ vue: '>=3.2.0'
+ dependencies:
+ '@ant-design/colors': 6.0.0
+ '@ant-design/icons-vue': 6.1.0_vue@3.2.47
+ '@babel/runtime': 7.21.0
+ '@ctrl/tinycolor': 3.6.0
+ '@simonwep/pickr': 1.8.2
+ array-tree-filter: 2.1.0
+ async-validator: 4.2.5
+ dayjs: 1.11.7
+ dom-align: 1.12.4
+ dom-scroll-into-view: 2.0.1
+ lodash: 4.17.21
+ lodash-es: 4.17.21
+ resize-observer-polyfill: 1.5.1
+ scroll-into-view-if-needed: 2.2.31
+ shallow-equal: 1.2.1
+ vue: 3.2.47
+ vue-types: 3.0.2_vue@3.2.47
+ warning: 4.0.3
+ dev: false
+
+ /arch/2.2.0:
+ resolution: {integrity: sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==}
+ dev: true
+
+ /archive-type/4.0.0:
+ resolution: {integrity: sha512-zV4Ky0v1F8dBrdYElwTvQhweQ0P7Kwc1aluqJsYtOBP01jXcWCyW2IEfI1YiqsG+Iy7ZR+o5LF1N+PGECBxHWA==}
+ engines: {node: '>=4'}
+ dependencies:
+ file-type: 4.4.0
+ dev: true
+
+ /archiver-utils/2.1.0:
+ resolution: {integrity: sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==}
+ engines: {node: '>= 6'}
+ dependencies:
+ glob: 7.2.3
+ graceful-fs: 4.2.10
+ lazystream: 1.0.1
+ lodash.defaults: 4.2.0
+ lodash.difference: 4.5.0
+ lodash.flatten: 4.4.0
+ lodash.isplainobject: 4.0.6
+ lodash.union: 4.6.0
+ normalize-path: 3.0.0
+ readable-stream: 2.3.8
+ dev: false
+
+ /archiver/5.3.1:
+ resolution: {integrity: sha512-8KyabkmbYrH+9ibcTScQ1xCJC/CGcugdVIwB+53f5sZziXgwUh3iXlAlANMxcZyDEfTHMe6+Z5FofV8nopXP7w==}
+ engines: {node: '>= 10'}
+ dependencies:
+ archiver-utils: 2.1.0
+ async: 3.2.4
+ buffer-crc32: 0.2.13
+ readable-stream: 3.6.2
+ readdir-glob: 1.1.2
+ tar-stream: 2.2.0
+ zip-stream: 4.1.0
+ dev: false
+
+ /argparse/2.0.1:
+ resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
+ dev: true
+
+ /arr-diff/4.0.0:
+ resolution: {integrity: sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /arr-flatten/1.1.0:
+ resolution: {integrity: sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /arr-union/3.1.0:
+ resolution: {integrity: sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /array-buffer-byte-length/1.0.0:
+ resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==}
+ dependencies:
+ call-bind: 1.0.2
+ is-array-buffer: 3.0.2
+ dev: true
+
+ /array-find-index/1.0.2:
+ resolution: {integrity: sha512-M1HQyIXcBGtVywBt8WVdim+lrNaK7VHp99Qt5pSNziXznKHViIBbXWtfRTpEFpF/c4FdfxNAsCCwPp5phBYJtw==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /array-ify/1.0.0:
+ resolution: {integrity: sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==}
+ dev: true
+
+ /array-tree-filter/2.1.0:
+ resolution: {integrity: sha512-4ROwICNlNw/Hqa9v+rk5h22KjmzB1JGTMVKP2AKJBOCgb0yL0ASf0+YvCcLNNwquOHNX48jkeZIJ3a+oOQqKcw==}
+ dev: false
+
+ /array-union/2.1.0:
+ resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /array-unique/0.3.2:
+ resolution: {integrity: sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /arrify/1.0.1:
+ resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /assign-symbols/1.0.0:
+ resolution: {integrity: sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /async-validator/4.2.5:
+ resolution: {integrity: sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==}
+ dev: false
+
+ /async/3.2.4:
+ resolution: {integrity: sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==}
+
+ /at-least-node/1.0.0:
+ resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==}
+ engines: {node: '>= 4.0.0'}
+ dev: true
+
+ /atob/2.1.2:
+ resolution: {integrity: sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==}
+ engines: {node: '>= 4.5.0'}
+ hasBin: true
+ dev: true
+
+ /autoprefixer/10.4.14_postcss@8.4.21:
+ resolution: {integrity: sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==}
+ engines: {node: ^10 || ^12 || >=14}
+ hasBin: true
+ peerDependencies:
+ postcss: ^8.1.0
+ dependencies:
+ browserslist: 4.21.5
+ caniuse-lite: 1.0.30001464
+ fraction.js: 4.2.0
+ normalize-range: 0.1.2
+ picocolors: 1.0.0
+ postcss: 8.4.21
+ postcss-value-parser: 4.2.0
+ dev: true
+
+ /available-typed-arrays/1.0.5:
+ resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==}
+ engines: {node: '>= 0.4'}
+ dev: true
+
+ /axios/0.26.1:
+ resolution: {integrity: sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA==}
+ dependencies:
+ follow-redirects: 1.15.2
+ transitivePeerDependencies:
+ - debug
+ dev: false
+
+ /axios/0.26.1_debug@4.3.4:
+ resolution: {integrity: sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA==}
+ dependencies:
+ follow-redirects: 1.15.2_debug@4.3.4
+ transitivePeerDependencies:
+ - debug
+ dev: true
+
+ /babel-plugin-polyfill-corejs2/0.3.3_@babel+core@7.21.0:
+ resolution: {integrity: sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/compat-data': 7.21.0
+ '@babel/core': 7.21.0
+ '@babel/helper-define-polyfill-provider': 0.3.3_@babel+core@7.21.0
+ semver: 6.3.0
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /babel-plugin-polyfill-corejs3/0.6.0_@babel+core@7.21.0:
+ resolution: {integrity: sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.21.0
+ '@babel/helper-define-polyfill-provider': 0.3.3_@babel+core@7.21.0
+ core-js-compat: 3.29.0
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /babel-plugin-polyfill-regenerator/0.4.1_@babel+core@7.21.0:
+ resolution: {integrity: sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.21.0
+ '@babel/helper-define-polyfill-provider': 0.3.3_@babel+core@7.21.0
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /balanced-match/1.0.2:
+ resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
+
+ /base/0.11.2:
+ resolution: {integrity: sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ cache-base: 1.0.1
+ class-utils: 0.3.6
+ component-emitter: 1.3.0
+ define-property: 1.0.0
+ isobject: 3.0.1
+ mixin-deep: 1.3.2
+ pascalcase: 0.1.1
+ dev: true
+
+ /base64-js/1.5.1:
+ resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
+
+ /big-integer/1.6.51:
+ resolution: {integrity: sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==}
+ engines: {node: '>=0.6'}
+ dev: false
+
+ /big.js/5.2.2:
+ resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==}
+ dev: true
+
+ /bin-build/3.0.0:
+ resolution: {integrity: sha512-jcUOof71/TNAI2uM5uoUaDq2ePcVBQ3R/qhxAz1rX7UfvduAL/RXD3jXzvn8cVcDJdGVkiR1shal3OH0ImpuhA==}
+ engines: {node: '>=4'}
+ dependencies:
+ decompress: 4.2.1
+ download: 6.2.5
+ execa: 0.7.0
+ p-map-series: 1.0.0
+ tempfile: 2.0.0
+ dev: true
+
+ /bin-check/4.1.0:
+ resolution: {integrity: sha512-b6weQyEUKsDGFlACWSIOfveEnImkJyK/FGW6FAG42loyoquvjdtOIqO6yBFzHyqyVVhNgNkQxxx09SFLK28YnA==}
+ engines: {node: '>=4'}
+ dependencies:
+ execa: 0.7.0
+ executable: 4.1.1
+ dev: true
+
+ /bin-version-check/4.0.0:
+ resolution: {integrity: sha512-sR631OrhC+1f8Cvs8WyVWOA33Y8tgwjETNPyyD/myRBXLkfS/vl74FmH/lFcRl9KY3zwGh7jFhvyk9vV3/3ilQ==}
+ engines: {node: '>=6'}
+ dependencies:
+ bin-version: 3.1.0
+ semver: 5.7.1
+ semver-truncate: 1.1.2
+ dev: true
+
+ /bin-version/3.1.0:
+ resolution: {integrity: sha512-Mkfm4iE1VFt4xd4vH+gx+0/71esbfus2LsnCGe8Pi4mndSPyT+NGES/Eg99jx8/lUGWfu3z2yuB/bt5UB+iVbQ==}
+ engines: {node: '>=6'}
+ dependencies:
+ execa: 1.0.0
+ find-versions: 3.2.0
+ dev: true
+
+ /bin-wrapper-china/0.1.0:
+ resolution: {integrity: sha512-1UCm17WYEbgry50tup+AQN+JGVEVzoW4f8HMl899k1lvuFxWKGZXl/G2fgxQxAckRjnloO3ijLVVEsv8zescUg==}
+ engines: {node: '>=8.3'}
+ hasBin: true
+ dependencies:
+ bin-check: 4.1.0
+ bin-version-check: 4.0.0
+ binary-mirror-config: 1.41.0
+ download: 7.1.0
+ import-lazy: 4.0.0
+ os-filter-obj: 2.0.0
+ pify: 4.0.1
+ dev: true
+
+ /binary-mirror-config/1.41.0:
+ resolution: {integrity: sha512-ZiIhR1s6Sv1Fv6qCQqfPjx0Cj86BgFlhqNxZgHkQOWcxJcMbO3mj1iqsuVjowYqJqeZL8e52+IEv7IRnSX6T6w==}
+ dev: true
+
+ /binary/0.3.0:
+ resolution: {integrity: sha512-D4H1y5KYwpJgK8wk1Cue5LLPgmwHKYSChkbspQg5JtVuR5ulGckxfR62H3AE9UDkdMC8yyXlqYihuz3Aqg2XZg==}
+ dependencies:
+ buffers: 0.1.1
+ chainsaw: 0.1.0
+ dev: false
+
+ /bl/1.2.3:
+ resolution: {integrity: sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==}
+ dependencies:
+ readable-stream: 2.3.8
+ safe-buffer: 5.2.1
+ dev: true
+
+ /bl/4.1.0:
+ resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==}
+ dependencies:
+ buffer: 5.7.1
+ inherits: 2.0.4
+ readable-stream: 3.6.2
+
+ /bluebird/3.4.7:
+ resolution: {integrity: sha512-iD3898SR7sWVRHbiQv+sHUtHnMvC1o3nW5rAcqnq3uOn07DSAppZYUkIGslDz6gXC7HfunPe7YVBgoEJASPcHA==}
+ dev: false
+
+ /bluebird/3.7.2:
+ resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==}
+ dev: true
+
+ /boolbase/1.0.0:
+ resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==}
+ dev: true
+
+ /brace-expansion/1.1.11:
+ resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
+ dependencies:
+ balanced-match: 1.0.2
+ concat-map: 0.0.1
+
+ /brace-expansion/2.0.1:
+ resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==}
+ dependencies:
+ balanced-match: 1.0.2
+
+ /braces/2.3.2:
+ resolution: {integrity: sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ arr-flatten: 1.1.0
+ array-unique: 0.3.2
+ extend-shallow: 2.0.1
+ fill-range: 4.0.0
+ isobject: 3.0.1
+ repeat-element: 1.1.4
+ snapdragon: 0.8.2
+ snapdragon-node: 2.1.1
+ split-string: 3.1.0
+ to-regex: 3.0.2
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /braces/3.0.2:
+ resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==}
+ engines: {node: '>=8'}
+ dependencies:
+ fill-range: 7.0.1
+ dev: true
+
+ /browserslist/4.21.5:
+ resolution: {integrity: sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==}
+ engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
+ hasBin: true
+ dependencies:
+ caniuse-lite: 1.0.30001464
+ electron-to-chromium: 1.4.328
+ node-releases: 2.0.10
+ update-browserslist-db: 1.0.10_browserslist@4.21.5
+ dev: true
+
+ /buffer-alloc-unsafe/1.1.0:
+ resolution: {integrity: sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==}
+ dev: true
+
+ /buffer-alloc/1.2.0:
+ resolution: {integrity: sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==}
+ dependencies:
+ buffer-alloc-unsafe: 1.1.0
+ buffer-fill: 1.0.0
+ dev: true
+
+ /buffer-crc32/0.2.13:
+ resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==}
+
+ /buffer-fill/1.0.0:
+ resolution: {integrity: sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==}
+ dev: true
+
+ /buffer-from/1.1.2:
+ resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
+ dev: true
+
+ /buffer-indexof-polyfill/1.0.2:
+ resolution: {integrity: sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A==}
+ engines: {node: '>=0.10'}
+ dev: false
+
+ /buffer/5.7.1:
+ resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==}
+ dependencies:
+ base64-js: 1.5.1
+ ieee754: 1.2.1
+
+ /buffers/0.1.1:
+ resolution: {integrity: sha512-9q/rDEGSb/Qsvv2qvzIzdluL5k7AaJOTrw23z9reQthrbF7is4CtlT0DXyO1oei2DCp4uojjzQ7igaSHp1kAEQ==}
+ engines: {node: '>=0.2.0'}
+ dev: false
+
+ /builtin-modules/3.3.0:
+ resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==}
+ engines: {node: '>=6'}
+ dev: true
+
+ /builtins/4.1.0:
+ resolution: {integrity: sha512-1bPRZQtmKaO6h7qV1YHXNtr6nCK28k0Zo95KM4dXfILcZZwoHJBN1m3lfLv9LPkcOZlrSr+J1bzMaZFO98Yq0w==}
+ dependencies:
+ semver: 7.3.8
+ dev: true
+
+ /cache-base/1.0.1:
+ resolution: {integrity: sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ collection-visit: 1.0.0
+ component-emitter: 1.3.0
+ get-value: 2.0.6
+ has-value: 1.0.0
+ isobject: 3.0.1
+ set-value: 2.0.1
+ to-object-path: 0.3.0
+ union-value: 1.0.1
+ unset-value: 1.0.0
+ dev: true
+
+ /cacheable-request/2.1.4:
+ resolution: {integrity: sha512-vag0O2LKZ/najSoUwDbVlnlCFvhBE/7mGTY2B5FgCBDcRD+oVV1HYTOwM6JZfMg/hIcM6IwnTZ1uQQL5/X3xIQ==}
+ dependencies:
+ clone-response: 1.0.2
+ get-stream: 3.0.0
+ http-cache-semantics: 3.8.1
+ keyv: 3.0.0
+ lowercase-keys: 1.0.0
+ normalize-url: 2.0.1
+ responselike: 1.0.2
+ dev: true
+
+ /call-bind/1.0.2:
+ resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==}
+ dependencies:
+ function-bind: 1.1.1
+ get-intrinsic: 1.2.0
+
+ /callsites/3.1.0:
+ resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
+ engines: {node: '>=6'}
+ dev: true
+
+ /camel-case/4.1.2:
+ resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==}
+ dependencies:
+ pascal-case: 3.1.2
+ tslib: 2.5.0
+ dev: true
+
+ /camelcase-keys/2.1.0:
+ resolution: {integrity: sha512-bA/Z/DERHKqoEOrp+qeGKw1QlvEQkGZSc0XaY6VnTxZr+Kv1G5zFwttpjv8qxZ/sBPT4nthwZaAcsAZTJlSKXQ==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ camelcase: 2.1.1
+ map-obj: 1.0.1
+ dev: true
+
+ /camelcase-keys/6.2.2:
+ resolution: {integrity: sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==}
+ engines: {node: '>=8'}
+ dependencies:
+ camelcase: 5.3.1
+ map-obj: 4.3.0
+ quick-lru: 4.0.1
+ dev: true
+
+ /camelcase/2.1.1:
+ resolution: {integrity: sha512-DLIsRzJVBQu72meAKPkWQOLcujdXT32hwdfnkI1frSiSRMK1MofjKHf+MEx0SB6fjEFXL8fBDv1dKymBlOp4Qw==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /camelcase/5.3.1:
+ resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==}
+ engines: {node: '>=6'}
+
+ /camelcase/6.3.0:
+ resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==}
+ engines: {node: '>=10'}
+ dev: true
+
+ /caniuse-lite/1.0.30001464:
+ resolution: {integrity: sha512-oww27MtUmusatpRpCGSOneQk2/l5czXANDSFvsc7VuOQ86s3ANhZetpwXNf1zY/zdfP63Xvjz325DAdAoES13g==}
+ dev: true
+
+ /capital-case/1.0.4:
+ resolution: {integrity: sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==}
+ dependencies:
+ no-case: 3.0.4
+ tslib: 2.5.0
+ upper-case-first: 2.0.2
+ dev: true
+
+ /caw/2.0.1:
+ resolution: {integrity: sha512-Cg8/ZSBEa8ZVY9HspcGUYaK63d/bN7rqS3CYCzEGUxuYv6UlmcjzDUz2fCFFHyTvUW5Pk0I+3hkA3iXlIj6guA==}
+ engines: {node: '>=4'}
+ dependencies:
+ get-proxy: 2.1.0
+ isurl: 1.0.0
+ tunnel-agent: 0.6.0
+ url-to-options: 1.0.1
+ dev: true
+
+ /cfb/1.2.2:
+ resolution: {integrity: sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==}
+ engines: {node: '>=0.8'}
+ dependencies:
+ adler-32: 1.3.1
+ crc-32: 1.2.2
+ dev: false
+
+ /chainsaw/0.1.0:
+ resolution: {integrity: sha512-75kWfWt6MEKNC8xYXIdRpDehRYY/tNSgwKaJq+dbbDcxORuVrrQ+SEHoWsniVn9XPYfP4gmdWIeDk/4YNp1rNQ==}
+ dependencies:
+ traverse: 0.3.9
+ dev: false
+
+ /chalk/1.1.3:
+ resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ ansi-styles: 2.2.1
+ escape-string-regexp: 1.0.5
+ has-ansi: 2.0.0
+ strip-ansi: 3.0.1
+ supports-color: 2.0.0
+ dev: true
+
+ /chalk/2.4.2:
+ resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==}
+ engines: {node: '>=4'}
+ dependencies:
+ ansi-styles: 3.2.1
+ escape-string-regexp: 1.0.5
+ supports-color: 5.5.0
+ dev: true
+
+ /chalk/4.1.2:
+ resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
+ engines: {node: '>=10'}
+ dependencies:
+ ansi-styles: 4.3.0
+ supports-color: 7.2.0
+ dev: true
+
+ /change-case/4.1.2:
+ resolution: {integrity: sha512-bSxY2ws9OtviILG1EiY5K7NNxkqg/JnRnFxLtKQ96JaviiIxi7djMrSd0ECT9AC+lttClmYwKw53BWpOMblo7A==}
+ dependencies:
+ camel-case: 4.1.2
+ capital-case: 1.0.4
+ constant-case: 3.0.4
+ dot-case: 3.0.4
+ header-case: 2.0.4
+ no-case: 3.0.4
+ param-case: 3.0.4
+ pascal-case: 3.1.2
+ path-case: 3.0.4
+ sentence-case: 3.0.4
+ snake-case: 3.0.4
+ tslib: 2.5.0
+ dev: true
+
+ /chardet/0.7.0:
+ resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==}
+ dev: true
+
+ /class-utils/0.3.6:
+ resolution: {integrity: sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ arr-union: 3.1.0
+ define-property: 0.2.5
+ isobject: 3.0.1
+ static-extend: 0.1.2
+ dev: true
+
+ /clean-css/5.3.2:
+ resolution: {integrity: sha512-JVJbM+f3d3Q704rF4bqQ5UUyTtuJ0JRKNbTKVEeujCCBoMdkEi+V+e8oktO9qGQNSvHrFTM6JZRXrUvGR1czww==}
+ engines: {node: '>= 10.0'}
+ dependencies:
+ source-map: 0.6.1
+ dev: true
+
+ /cli-cursor/3.1.0:
+ resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==}
+ engines: {node: '>=8'}
+ dependencies:
+ restore-cursor: 3.1.0
+ dev: true
+
+ /cli-spinners/2.7.0:
+ resolution: {integrity: sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw==}
+ engines: {node: '>=6'}
+ dev: true
+
+ /cli-width/3.0.0:
+ resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==}
+ engines: {node: '>= 10'}
+ dev: true
+
+ /cliui/6.0.0:
+ resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==}
+ dependencies:
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ wrap-ansi: 6.2.0
+ dev: false
+
+ /cliui/7.0.4:
+ resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==}
+ dependencies:
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ wrap-ansi: 7.0.0
+ dev: true
+
+ /cliui/8.0.1:
+ resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==}
+ engines: {node: '>=12'}
+ dependencies:
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ wrap-ansi: 7.0.0
+ dev: true
+
+ /clone-response/1.0.2:
+ resolution: {integrity: sha512-yjLXh88P599UOyPTFX0POsd7WxnbsVsGohcwzHOLspIhhpalPw1BcqED8NblyZLKcGrL8dTgMlcaZxV2jAD41Q==}
+ dependencies:
+ mimic-response: 1.0.1
+ dev: true
+
+ /clone/1.0.4:
+ resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==}
+ engines: {node: '>=0.8'}
+ dev: true
+
+ /clone/2.1.2:
+ resolution: {integrity: sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==}
+ engines: {node: '>=0.8'}
+ dev: true
+
+ /codepage/1.15.0:
+ resolution: {integrity: sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==}
+ engines: {node: '>=0.8'}
+ dev: false
+
+ /collection-visit/1.0.0:
+ resolution: {integrity: sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ map-visit: 1.0.0
+ object-visit: 1.0.1
+ dev: true
+
+ /color-convert/1.9.3:
+ resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==}
+ dependencies:
+ color-name: 1.1.3
+ dev: true
+
+ /color-convert/2.0.1:
+ resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
+ engines: {node: '>=7.0.0'}
+ dependencies:
+ color-name: 1.1.4
+
+ /color-name/1.1.3:
+ resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==}
+ dev: true
+
+ /color-name/1.1.4:
+ resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
+
+ /colorette/2.0.19:
+ resolution: {integrity: sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==}
+ dev: true
+
+ /commander/2.20.3:
+ resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
+ dev: true
+
+ /commander/7.2.0:
+ resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==}
+ engines: {node: '>= 10'}
+ dev: true
+
+ /commander/8.3.0:
+ resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==}
+ engines: {node: '>= 12'}
+ dev: true
+
+ /common-tags/1.8.2:
+ resolution: {integrity: sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==}
+ engines: {node: '>=4.0.0'}
+ dev: true
+
+ /compare-func/2.0.0:
+ resolution: {integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==}
+ dependencies:
+ array-ify: 1.0.0
+ dot-prop: 5.3.0
+ dev: true
+
+ /component-emitter/1.3.0:
+ resolution: {integrity: sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==}
+ dev: true
+
+ /compress-commons/4.1.1:
+ resolution: {integrity: sha512-QLdDLCKNV2dtoTorqgxngQCMA+gWXkM/Nwu7FpeBhk/RdkzimqC3jueb/FDmaZeXh+uby1jkBqE3xArsLBE5wQ==}
+ engines: {node: '>= 10'}
+ dependencies:
+ buffer-crc32: 0.2.13
+ crc32-stream: 4.0.2
+ normalize-path: 3.0.0
+ readable-stream: 3.6.2
+ dev: false
+
+ /compute-scroll-into-view/1.0.20:
+ resolution: {integrity: sha512-UCB0ioiyj8CRjtrvaceBLqqhZCVP+1B8+NWQhmdsm0VXOJtobBCf1dBQmebCCo34qZmUwZfIH2MZLqNHazrfjg==}
+ dev: false
+
+ /concat-map/0.0.1:
+ resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
+
+ /config-chain/1.1.13:
+ resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==}
+ dependencies:
+ ini: 1.3.8
+ proto-list: 1.2.4
+ dev: true
+
+ /connect-history-api-fallback/1.6.0:
+ resolution: {integrity: sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==}
+ engines: {node: '>=0.8'}
+ dev: true
+
+ /consola/2.15.3:
+ resolution: {integrity: sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==}
+ dev: true
+
+ /console-stream/0.1.1:
+ resolution: {integrity: sha512-QC/8l9e6ofi6nqZ5PawlDgzmMw3OxIXtvolBzap/F4UDBJlDaZRSNbL/lb41C29FcbSJncBFlJFj2WJoNyZRfQ==}
+ dev: true
+
+ /console/0.7.2:
+ resolution: {integrity: sha512-+JSDwGunA4MTEgAV/4VBKwUHonP8CzJ/6GIuwPi6acKFqFfHUdSGCm89ZxZ5FfGWdZfkdgAroy5bJ5FSeN/t4g==}
+ dev: true
+
+ /constant-case/3.0.4:
+ resolution: {integrity: sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ==}
+ dependencies:
+ no-case: 3.0.4
+ tslib: 2.5.0
+ upper-case: 2.0.2
+ dev: true
+
+ /content-disposition/0.5.4:
+ resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==}
+ engines: {node: '>= 0.6'}
+ dependencies:
+ safe-buffer: 5.2.1
+ dev: true
+
+ /conventional-changelog-angular/5.0.13:
+ resolution: {integrity: sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA==}
+ engines: {node: '>=10'}
+ dependencies:
+ compare-func: 2.0.0
+ q: 1.5.1
+ dev: true
+
+ /conventional-changelog-atom/2.0.8:
+ resolution: {integrity: sha512-xo6v46icsFTK3bb7dY/8m2qvc8sZemRgdqLb/bjpBsH2UyOS8rKNTgcb5025Hri6IpANPApbXMg15QLb1LJpBw==}
+ engines: {node: '>=10'}
+ dependencies:
+ q: 1.5.1
+ dev: true
+
+ /conventional-changelog-cli/2.2.2:
+ resolution: {integrity: sha512-8grMV5Jo8S0kP3yoMeJxV2P5R6VJOqK72IiSV9t/4H5r/HiRqEBQ83bYGuz4Yzfdj4bjaAEhZN/FFbsFXr5bOA==}
+ engines: {node: '>=10'}
+ hasBin: true
+ dependencies:
+ add-stream: 1.0.0
+ conventional-changelog: 3.1.25
+ lodash: 4.17.21
+ meow: 8.1.2
+ tempfile: 3.0.0
+ dev: true
+
+ /conventional-changelog-codemirror/2.0.8:
+ resolution: {integrity: sha512-z5DAsn3uj1Vfp7po3gpt2Boc+Bdwmw2++ZHa5Ak9k0UKsYAO5mH1UBTN0qSCuJZREIhX6WU4E1p3IW2oRCNzQw==}
+ engines: {node: '>=10'}
+ dependencies:
+ q: 1.5.1
+ dev: true
+
+ /conventional-changelog-conventionalcommits/4.6.3:
+ resolution: {integrity: sha512-LTTQV4fwOM4oLPad317V/QNQ1FY4Hju5qeBIM1uTHbrnCE+Eg4CdRZ3gO2pUeR+tzWdp80M2j3qFFEDWVqOV4g==}
+ engines: {node: '>=10'}
+ dependencies:
+ compare-func: 2.0.0
+ lodash: 4.17.21
+ q: 1.5.1
+ dev: true
+
+ /conventional-changelog-core/4.2.4:
+ resolution: {integrity: sha512-gDVS+zVJHE2v4SLc6B0sLsPiloR0ygU7HaDW14aNJE1v4SlqJPILPl/aJC7YdtRE4CybBf8gDwObBvKha8Xlyg==}
+ engines: {node: '>=10'}
+ dependencies:
+ add-stream: 1.0.0
+ conventional-changelog-writer: 5.0.1
+ conventional-commits-parser: 3.2.4
+ dateformat: 3.0.3
+ get-pkg-repo: 4.2.1
+ git-raw-commits: 2.0.11
+ git-remote-origin-url: 2.0.0
+ git-semver-tags: 4.1.1
+ lodash: 4.17.21
+ normalize-package-data: 3.0.3
+ q: 1.5.1
+ read-pkg: 3.0.0
+ read-pkg-up: 3.0.0
+ through2: 4.0.2
+ dev: true
+
+ /conventional-changelog-ember/2.0.9:
+ resolution: {integrity: sha512-ulzIReoZEvZCBDhcNYfDIsLTHzYHc7awh+eI44ZtV5cx6LVxLlVtEmcO+2/kGIHGtw+qVabJYjdI5cJOQgXh1A==}
+ engines: {node: '>=10'}
+ dependencies:
+ q: 1.5.1
+ dev: true
+
+ /conventional-changelog-eslint/3.0.9:
+ resolution: {integrity: sha512-6NpUCMgU8qmWmyAMSZO5NrRd7rTgErjrm4VASam2u5jrZS0n38V7Y9CzTtLT2qwz5xEChDR4BduoWIr8TfwvXA==}
+ engines: {node: '>=10'}
+ dependencies:
+ q: 1.5.1
+ dev: true
+
+ /conventional-changelog-express/2.0.6:
+ resolution: {integrity: sha512-SDez2f3iVJw6V563O3pRtNwXtQaSmEfTCaTBPCqn0oG0mfkq0rX4hHBq5P7De2MncoRixrALj3u3oQsNK+Q0pQ==}
+ engines: {node: '>=10'}
+ dependencies:
+ q: 1.5.1
+ dev: true
+
+ /conventional-changelog-jquery/3.0.11:
+ resolution: {integrity: sha512-x8AWz5/Td55F7+o/9LQ6cQIPwrCjfJQ5Zmfqi8thwUEKHstEn4kTIofXub7plf1xvFA2TqhZlq7fy5OmV6BOMw==}
+ engines: {node: '>=10'}
+ dependencies:
+ q: 1.5.1
+ dev: true
+
+ /conventional-changelog-jshint/2.0.9:
+ resolution: {integrity: sha512-wMLdaIzq6TNnMHMy31hql02OEQ8nCQfExw1SE0hYL5KvU+JCTuPaDO+7JiogGT2gJAxiUGATdtYYfh+nT+6riA==}
+ engines: {node: '>=10'}
+ dependencies:
+ compare-func: 2.0.0
+ q: 1.5.1
+ dev: true
+
+ /conventional-changelog-preset-loader/2.3.4:
+ resolution: {integrity: sha512-GEKRWkrSAZeTq5+YjUZOYxdHq+ci4dNwHvpaBC3+ENalzFWuCWa9EZXSuZBpkr72sMdKB+1fyDV4takK1Lf58g==}
+ engines: {node: '>=10'}
+ dev: true
+
+ /conventional-changelog-writer/5.0.1:
+ resolution: {integrity: sha512-5WsuKUfxW7suLblAbFnxAcrvf6r+0b7GvNaWUwUIk0bXMnENP/PEieGKVUQrjPqwPT4o3EPAASBXiY6iHooLOQ==}
+ engines: {node: '>=10'}
+ hasBin: true
+ dependencies:
+ conventional-commits-filter: 2.0.7
+ dateformat: 3.0.3
+ handlebars: 4.7.7
+ json-stringify-safe: 5.0.1
+ lodash: 4.17.21
+ meow: 8.1.2
+ semver: 6.3.0
+ split: 1.0.1
+ through2: 4.0.2
+ dev: true
+
+ /conventional-changelog/3.1.25:
+ resolution: {integrity: sha512-ryhi3fd1mKf3fSjbLXOfK2D06YwKNic1nC9mWqybBHdObPd8KJ2vjaXZfYj1U23t+V8T8n0d7gwnc9XbIdFbyQ==}
+ engines: {node: '>=10'}
+ dependencies:
+ conventional-changelog-angular: 5.0.13
+ conventional-changelog-atom: 2.0.8
+ conventional-changelog-codemirror: 2.0.8
+ conventional-changelog-conventionalcommits: 4.6.3
+ conventional-changelog-core: 4.2.4
+ conventional-changelog-ember: 2.0.9
+ conventional-changelog-eslint: 3.0.9
+ conventional-changelog-express: 2.0.6
+ conventional-changelog-jquery: 3.0.11
+ conventional-changelog-jshint: 2.0.9
+ conventional-changelog-preset-loader: 2.3.4
+ dev: true
+
+ /conventional-commits-filter/2.0.7:
+ resolution: {integrity: sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA==}
+ engines: {node: '>=10'}
+ dependencies:
+ lodash.ismatch: 4.4.0
+ modify-values: 1.0.1
+ dev: true
+
+ /conventional-commits-parser/3.2.4:
+ resolution: {integrity: sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q==}
+ engines: {node: '>=10'}
+ hasBin: true
+ dependencies:
+ JSONStream: 1.3.5
+ is-text-path: 1.0.1
+ lodash: 4.17.21
+ meow: 8.1.2
+ split2: 3.2.2
+ through2: 4.0.2
+ dev: true
+
+ /convert-source-map/1.9.0:
+ resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==}
+ dev: true
+
+ /copy-anything/2.0.6:
+ resolution: {integrity: sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==}
+ dependencies:
+ is-what: 3.14.1
+ dev: true
+
+ /copy-descriptor/0.1.1:
+ resolution: {integrity: sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /core-js-compat/3.29.0:
+ resolution: {integrity: sha512-ScMn3uZNAFhK2DGoEfErguoiAHhV2Ju+oJo/jK08p7B3f3UhocUrCCkTvnZaiS+edl5nlIoiBXKcwMc6elv4KQ==}
+ dependencies:
+ browserslist: 4.21.5
+ dev: true
+
+ /core-js/3.29.0:
+ resolution: {integrity: sha512-VG23vuEisJNkGl6XQmFJd3rEG/so/CNatqeE+7uZAwTSwFeB/qaO0be8xZYUNWprJ/GIwL8aMt9cj1kvbpTZhg==}
+ requiresBuild: true
+
+ /core-util-is/1.0.3:
+ resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==}
+
+ /cors/2.8.5:
+ resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==}
+ engines: {node: '>= 0.10'}
+ dependencies:
+ object-assign: 4.1.1
+ vary: 1.1.2
+ dev: true
+
+ /crc-32/1.2.2:
+ resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==}
+ engines: {node: '>=0.8'}
+ hasBin: true
+ dev: false
+
+ /crc32-stream/4.0.2:
+ resolution: {integrity: sha512-DxFZ/Hk473b/muq1VJ///PMNLj0ZMnzye9thBpmjpJKCc5eMgB95aK8zCGrGfQ90cWo561Te6HK9D+j4KPdM6w==}
+ engines: {node: '>= 10'}
+ dependencies:
+ crc-32: 1.2.2
+ readable-stream: 3.6.2
+ dev: false
+
+ /cropperjs/1.5.13:
+ resolution: {integrity: sha512-by7jKAo73y5/Do0K6sxdTKHgndY0NMjG2bEdgeJxycbcmHuCiMXqw8sxy5C5Y5WTOTcDGmbT7Sr5CgKOXR06OA==}
+ dev: false
+
+ /cross-env/7.0.3:
+ resolution: {integrity: sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==}
+ engines: {node: '>=10.14', npm: '>=6', yarn: '>=1'}
+ hasBin: true
+ dependencies:
+ cross-spawn: 7.0.3
+ dev: true
+
+ /cross-fetch/3.1.5:
+ resolution: {integrity: sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==}
+ dependencies:
+ node-fetch: 2.6.7
+ transitivePeerDependencies:
+ - encoding
+ dev: true
+
+ /cross-spawn/5.1.0:
+ resolution: {integrity: sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==}
+ dependencies:
+ lru-cache: 4.1.5
+ shebang-command: 1.2.0
+ which: 1.3.1
+ dev: true
+
+ /cross-spawn/6.0.5:
+ resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==}
+ engines: {node: '>=4.8'}
+ dependencies:
+ nice-try: 1.0.5
+ path-key: 2.0.1
+ semver: 5.7.1
+ shebang-command: 1.2.0
+ which: 1.3.1
+ dev: true
+
+ /cross-spawn/7.0.3:
+ resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==}
+ engines: {node: '>= 8'}
+ dependencies:
+ path-key: 3.1.1
+ shebang-command: 2.0.0
+ which: 2.0.2
+ dev: true
+
+ /crypto-js/4.1.1:
+ resolution: {integrity: sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw==}
+ dev: false
+
+ /crypto-random-string/2.0.0:
+ resolution: {integrity: sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /css-select/4.3.0:
+ resolution: {integrity: sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==}
+ dependencies:
+ boolbase: 1.0.0
+ css-what: 6.1.0
+ domhandler: 4.3.1
+ domutils: 2.8.0
+ nth-check: 2.1.1
+ dev: true
+
+ /css-tree/1.1.3:
+ resolution: {integrity: sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==}
+ engines: {node: '>=8.0.0'}
+ dependencies:
+ mdn-data: 2.0.14
+ source-map: 0.6.1
+ dev: true
+
+ /css-what/6.1.0:
+ resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==}
+ engines: {node: '>= 6'}
+ dev: true
+
+ /cssesc/3.0.0:
+ resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==}
+ engines: {node: '>=4'}
+ hasBin: true
+ dev: true
+
+ /csso/4.2.0:
+ resolution: {integrity: sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==}
+ engines: {node: '>=8.0.0'}
+ dependencies:
+ css-tree: 1.1.3
+ dev: true
+
+ /csstype/2.6.21:
+ resolution: {integrity: sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w==}
+
+ /currently-unhandled/0.4.1:
+ resolution: {integrity: sha512-/fITjgjGU50vjQ4FH6eUoYu+iUoUKIXws2hL15JJpIR+BbTxaXQsMuuyjtNh2WqsSBS5nsaZHFsFecyw5CCAng==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ array-find-index: 1.0.2
+ dev: true
+
+ /cwebp-bin/6.1.2:
+ resolution: {integrity: sha512-NLEZ/BVAl9g426hwUX/qrQ7b/EfQH7BS1tr+CzPo2EgDQbcdzmUVE+fIfsi64lsL638lWgzTEViMAL4pxV1GOg==}
+ engines: {node: '>=10'}
+ hasBin: true
+ requiresBuild: true
+ dependencies:
+ bin-build: 3.0.0
+ bin-wrapper: /bin-wrapper-china/0.1.0
+ dev: true
+
+ /dargs/7.0.0:
+ resolution: {integrity: sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /dateformat/3.0.3:
+ resolution: {integrity: sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==}
+ dev: true
+
+ /dayjs/1.11.7:
+ resolution: {integrity: sha512-+Yw9U6YO5TQohxLcIkrXBeY73WP3ejHWVvx8XCk3gxvQDCTEmS48ZrSZCKciI7Bhl/uCMyxYtE9UqRILmFphkQ==}
+ dev: false
+
+ /de-indent/1.0.2:
+ resolution: {integrity: sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==}
+ dev: true
+
+ /debug/2.6.9:
+ resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+ dependencies:
+ ms: 2.0.0
+ dev: true
+
+ /debug/3.2.7:
+ resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+ dependencies:
+ ms: 2.1.3
+ dev: true
+ optional: true
+
+ /debug/4.3.4:
+ resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==}
+ engines: {node: '>=6.0'}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+ dependencies:
+ ms: 2.1.2
+ dev: true
+
+ /decamelize-keys/1.1.1:
+ resolution: {integrity: sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ decamelize: 1.2.0
+ map-obj: 1.0.1
+ dev: true
+
+ /decamelize/1.2.0:
+ resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==}
+ engines: {node: '>=0.10.0'}
+
+ /decode-uri-component/0.2.2:
+ resolution: {integrity: sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==}
+ engines: {node: '>=0.10'}
+ dev: true
+
+ /decompress-response/3.3.0:
+ resolution: {integrity: sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==}
+ engines: {node: '>=4'}
+ dependencies:
+ mimic-response: 1.0.1
+ dev: true
+
+ /decompress-tar/4.1.1:
+ resolution: {integrity: sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==}
+ engines: {node: '>=4'}
+ dependencies:
+ file-type: 5.2.0
+ is-stream: 1.1.0
+ tar-stream: 1.6.2
+ dev: true
+
+ /decompress-tarbz2/4.1.1:
+ resolution: {integrity: sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==}
+ engines: {node: '>=4'}
+ dependencies:
+ decompress-tar: 4.1.1
+ file-type: 6.2.0
+ is-stream: 1.1.0
+ seek-bzip: 1.0.6
+ unbzip2-stream: 1.4.3
+ dev: true
+
+ /decompress-targz/4.1.1:
+ resolution: {integrity: sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==}
+ engines: {node: '>=4'}
+ dependencies:
+ decompress-tar: 4.1.1
+ file-type: 5.2.0
+ is-stream: 1.1.0
+ dev: true
+
+ /decompress-unzip/4.0.1:
+ resolution: {integrity: sha512-1fqeluvxgnn86MOh66u8FjbtJpAFv5wgCT9Iw8rcBqQcCo5tO8eiJw7NNTrvt9n4CRBVq7CstiS922oPgyGLrw==}
+ engines: {node: '>=4'}
+ dependencies:
+ file-type: 3.9.0
+ get-stream: 2.3.1
+ pify: 2.3.0
+ yauzl: 2.10.0
+ dev: true
+
+ /decompress/4.2.1:
+ resolution: {integrity: sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ==}
+ engines: {node: '>=4'}
+ dependencies:
+ decompress-tar: 4.1.1
+ decompress-tarbz2: 4.1.1
+ decompress-targz: 4.1.1
+ decompress-unzip: 4.0.1
+ graceful-fs: 4.2.10
+ make-dir: 1.3.0
+ pify: 2.3.0
+ strip-dirs: 2.1.0
+ dev: true
+
+ /deep-is/0.1.4:
+ resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
+ dev: true
+
+ /deepmerge/4.3.0:
+ resolution: {integrity: sha512-z2wJZXrmeHdvYJp/Ux55wIjqo81G5Bp4c+oELTW+7ar6SogWHajt5a9gO3s3IDaGSAXjDk0vlQKN3rms8ab3og==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /defaults/1.0.4:
+ resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==}
+ dependencies:
+ clone: 1.0.4
+ dev: true
+
+ /define-lazy-prop/2.0.0:
+ resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /define-properties/1.2.0:
+ resolution: {integrity: sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ has-property-descriptors: 1.0.0
+ object-keys: 1.1.1
+ dev: true
+
+ /define-property/0.2.5:
+ resolution: {integrity: sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ is-descriptor: 0.1.6
+ dev: true
+
+ /define-property/1.0.0:
+ resolution: {integrity: sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ is-descriptor: 1.0.2
+ dev: true
+
+ /define-property/2.0.2:
+ resolution: {integrity: sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ is-descriptor: 1.0.2
+ isobject: 3.0.1
+ dev: true
+
+ /diff-match-patch/1.0.5:
+ resolution: {integrity: sha512-IayShXAgj/QMXgB0IWmKx+rOPuGMhqm5w6jvFxmVenXKIzRqTAAsbBPT3kWQeGANj3jGgvcvv4yK6SxqYmikgw==}
+ dev: false
+
+ /dijkstrajs/1.0.2:
+ resolution: {integrity: sha512-QV6PMaHTCNmKSeP6QoXhVTw9snc9VD8MulTT0Bd99Pacp4SS1cjcrYPgBPmibqKVtMJJfqC6XvOXgPMEEPH/fg==}
+ dev: false
+
+ /dir-glob/3.0.1:
+ resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==}
+ engines: {node: '>=8'}
+ dependencies:
+ path-type: 4.0.0
+ dev: true
+
+ /doctrine/3.0.0:
+ resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==}
+ engines: {node: '>=6.0.0'}
+ dependencies:
+ esutils: 2.0.3
+ dev: true
+
+ /dom-align/1.12.4:
+ resolution: {integrity: sha512-R8LUSEay/68zE5c8/3BDxiTEvgb4xZTF0RKmAHfiEVN3klfIpXfi2/QCoiWPccVQ0J/ZGdz9OjzL4uJEP/MRAw==}
+ dev: false
+
+ /dom-scroll-into-view/2.0.1:
+ resolution: {integrity: sha512-bvVTQe1lfaUr1oFzZX80ce9KLDlZ3iU+XGNE/bz9HnGdklTieqsbmsLHe+rT2XWqopvL0PckkYqN7ksmm5pe3w==}
+ dev: false
+
+ /dom-serializer/0.2.2:
+ resolution: {integrity: sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==}
+ dependencies:
+ domelementtype: 2.3.0
+ entities: 2.2.0
+ dev: true
+
+ /dom-serializer/1.4.1:
+ resolution: {integrity: sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==}
+ dependencies:
+ domelementtype: 2.3.0
+ domhandler: 4.3.1
+ entities: 2.2.0
+ dev: true
+
+ /domelementtype/1.3.1:
+ resolution: {integrity: sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==}
+ dev: true
+
+ /domelementtype/2.3.0:
+ resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==}
+ dev: true
+
+ /domhandler/2.4.2:
+ resolution: {integrity: sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==}
+ dependencies:
+ domelementtype: 1.3.1
+ dev: true
+
+ /domhandler/4.3.1:
+ resolution: {integrity: sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==}
+ engines: {node: '>= 4'}
+ dependencies:
+ domelementtype: 2.3.0
+ dev: true
+
+ /domutils/1.7.0:
+ resolution: {integrity: sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==}
+ dependencies:
+ dom-serializer: 0.2.2
+ domelementtype: 1.3.1
+ dev: true
+
+ /domutils/2.8.0:
+ resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==}
+ dependencies:
+ dom-serializer: 1.4.1
+ domelementtype: 2.3.0
+ domhandler: 4.3.1
+ dev: true
+
+ /dot-case/3.0.4:
+ resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==}
+ dependencies:
+ no-case: 3.0.4
+ tslib: 2.5.0
+ dev: true
+
+ /dot-prop/5.3.0:
+ resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==}
+ engines: {node: '>=8'}
+ dependencies:
+ is-obj: 2.0.0
+ dev: true
+
+ /dotenv-expand/8.0.3:
+ resolution: {integrity: sha512-SErOMvge0ZUyWd5B0NXMQlDkN+8r+HhVUsxgOO7IoPDOdDRD2JjExpN6y3KnFR66jsJMwSn1pqIivhU5rcJiNg==}
+ engines: {node: '>=12'}
+ dev: true
+
+ /dotenv/16.0.3:
+ resolution: {integrity: sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==}
+ engines: {node: '>=12'}
+ dev: true
+
+ /download/6.2.5:
+ resolution: {integrity: sha512-DpO9K1sXAST8Cpzb7kmEhogJxymyVUd5qz/vCOSyvwtp2Klj2XcDt5YUuasgxka44SxF0q5RriKIwJmQHG2AuA==}
+ engines: {node: '>=4'}
+ dependencies:
+ caw: 2.0.1
+ content-disposition: 0.5.4
+ decompress: 4.2.1
+ ext-name: 5.0.0
+ file-type: 5.2.0
+ filenamify: 2.1.0
+ get-stream: 3.0.0
+ got: 7.1.0
+ make-dir: 1.3.0
+ p-event: 1.3.0
+ pify: 3.0.0
+ dev: true
+
+ /download/7.1.0:
+ resolution: {integrity: sha512-xqnBTVd/E+GxJVrX5/eUJiLYjCGPwMpdL+jGhGU57BvtcA7wwhtHVbXBeUk51kOpW3S7Jn3BQbN9Q1R1Km2qDQ==}
+ engines: {node: '>=6'}
+ dependencies:
+ archive-type: 4.0.0
+ caw: 2.0.1
+ content-disposition: 0.5.4
+ decompress: 4.2.1
+ ext-name: 5.0.0
+ file-type: 8.1.0
+ filenamify: 2.1.0
+ get-stream: 3.0.0
+ got: 8.3.2
+ make-dir: 1.3.0
+ p-event: 2.3.1
+ pify: 3.0.0
+ dev: true
+
+ /duplexer2/0.1.4:
+ resolution: {integrity: sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==}
+ dependencies:
+ readable-stream: 2.3.8
+ dev: false
+
+ /duplexer3/0.1.5:
+ resolution: {integrity: sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==}
+ dev: true
+
+ /echarts/5.4.1:
+ resolution: {integrity: sha512-9ltS3M2JB0w2EhcYjCdmtrJ+6haZcW6acBolMGIuf01Hql1yrIV01L1aRj7jsaaIULJslEP9Z3vKlEmnJaWJVQ==}
+ dependencies:
+ tslib: 2.3.0
+ zrender: 5.4.1
+ dev: false
+
+ /ejs/3.1.9:
+ resolution: {integrity: sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==}
+ engines: {node: '>=0.10.0'}
+ hasBin: true
+ dependencies:
+ jake: 10.8.5
+ dev: true
+
+ /electron-to-chromium/1.4.328:
+ resolution: {integrity: sha512-DE9tTy2PNmy1v55AZAO542ui+MLC2cvINMK4P2LXGsJdput/ThVG9t+QGecPuAZZSgC8XoI+Jh9M1OG9IoNSCw==}
+ dev: true
+
+ /emoji-regex/8.0.0:
+ resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
+
+ /emojis-list/3.0.0:
+ resolution: {integrity: sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==}
+ engines: {node: '>= 4'}
+ dev: true
+
+ /encode-utf8/1.0.3:
+ resolution: {integrity: sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw==}
+ dev: false
+
+ /end-of-stream/1.4.4:
+ resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==}
+ dependencies:
+ once: 1.4.0
+
+ /entities/1.1.2:
+ resolution: {integrity: sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==}
+ dev: true
+
+ /entities/2.2.0:
+ resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==}
+ dev: true
+
+ /errno/0.1.8:
+ resolution: {integrity: sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==}
+ hasBin: true
+ requiresBuild: true
+ dependencies:
+ prr: 1.0.1
+ dev: true
+ optional: true
+
+ /error-ex/1.3.2:
+ resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==}
+ dependencies:
+ is-arrayish: 0.2.1
+ dev: true
+
+ /es-abstract/1.21.2:
+ resolution: {integrity: sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ array-buffer-byte-length: 1.0.0
+ available-typed-arrays: 1.0.5
+ call-bind: 1.0.2
+ es-set-tostringtag: 2.0.1
+ es-to-primitive: 1.2.1
+ function.prototype.name: 1.1.5
+ get-intrinsic: 1.2.0
+ get-symbol-description: 1.0.0
+ globalthis: 1.0.3
+ gopd: 1.0.1
+ has: 1.0.3
+ has-property-descriptors: 1.0.0
+ has-proto: 1.0.1
+ has-symbols: 1.0.3
+ internal-slot: 1.0.5
+ is-array-buffer: 3.0.2
+ is-callable: 1.2.7
+ is-negative-zero: 2.0.2
+ is-regex: 1.1.4
+ is-shared-array-buffer: 1.0.2
+ is-string: 1.0.7
+ is-typed-array: 1.1.10
+ is-weakref: 1.0.2
+ object-inspect: 1.12.3
+ object-keys: 1.1.1
+ object.assign: 4.1.4
+ regexp.prototype.flags: 1.4.3
+ safe-regex-test: 1.0.0
+ string.prototype.trim: 1.2.7
+ string.prototype.trimend: 1.0.6
+ string.prototype.trimstart: 1.0.6
+ typed-array-length: 1.0.4
+ unbox-primitive: 1.0.2
+ which-typed-array: 1.1.9
+ dev: true
+
+ /es-module-lexer/0.9.3:
+ resolution: {integrity: sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==}
+ dev: true
+
+ /es-set-tostringtag/2.0.1:
+ resolution: {integrity: sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ get-intrinsic: 1.2.0
+ has: 1.0.3
+ has-tostringtag: 1.0.0
+ dev: true
+
+ /es-to-primitive/1.2.1:
+ resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ is-callable: 1.2.7
+ is-date-object: 1.0.5
+ is-symbol: 1.0.4
+ dev: true
+
+ /esbuild-android-64/0.14.54:
+ resolution: {integrity: sha512-Tz2++Aqqz0rJ7kYBfz+iqyE3QMycD4vk7LBRyWaAVFgFtQ/O8EJOnVmTOiDWYZ/uYzB4kvP+bqejYdVKzE5lAQ==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [android]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /esbuild-android-arm64/0.14.54:
+ resolution: {integrity: sha512-F9E+/QDi9sSkLaClO8SOV6etqPd+5DgJje1F9lOWoNncDdOBL2YF59IhsWATSt0TLZbYCf3pNlTHvVV5VfHdvg==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [android]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /esbuild-darwin-64/0.14.54:
+ resolution: {integrity: sha512-jtdKWV3nBviOd5v4hOpkVmpxsBy90CGzebpbO9beiqUYVMBtSc0AL9zGftFuBon7PNDcdvNCEuQqw2x0wP9yug==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [darwin]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /esbuild-darwin-arm64/0.14.54:
+ resolution: {integrity: sha512-OPafJHD2oUPyvJMrsCvDGkRrVCar5aVyHfWGQzY1dWnzErjrDuSETxwA2HSsyg2jORLY8yBfzc1MIpUkXlctmw==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [darwin]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /esbuild-freebsd-64/0.14.54:
+ resolution: {integrity: sha512-OKwd4gmwHqOTp4mOGZKe/XUlbDJ4Q9TjX0hMPIDBUWWu/kwhBAudJdBoxnjNf9ocIB6GN6CPowYpR/hRCbSYAg==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [freebsd]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /esbuild-freebsd-arm64/0.14.54:
+ resolution: {integrity: sha512-sFwueGr7OvIFiQT6WeG0jRLjkjdqWWSrfbVwZp8iMP+8UHEHRBvlaxL6IuKNDwAozNUmbb8nIMXa7oAOARGs1Q==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [freebsd]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /esbuild-linux-32/0.14.54:
+ resolution: {integrity: sha512-1ZuY+JDI//WmklKlBgJnglpUL1owm2OX+8E1syCD6UAxcMM/XoWd76OHSjl/0MR0LisSAXDqgjT3uJqT67O3qw==}
+ engines: {node: '>=12'}
+ cpu: [ia32]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /esbuild-linux-64/0.14.54:
+ resolution: {integrity: sha512-EgjAgH5HwTbtNsTqQOXWApBaPVdDn7XcK+/PtJwZLT1UmpLoznPd8c5CxqsH2dQK3j05YsB3L17T8vE7cp4cCg==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /esbuild-linux-arm/0.14.54:
+ resolution: {integrity: sha512-qqz/SjemQhVMTnvcLGoLOdFpCYbz4v4fUo+TfsWG+1aOu70/80RV6bgNpR2JCrppV2moUQkww+6bWxXRL9YMGw==}
+ engines: {node: '>=12'}
+ cpu: [arm]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /esbuild-linux-arm64/0.14.54:
+ resolution: {integrity: sha512-WL71L+0Rwv+Gv/HTmxTEmpv0UgmxYa5ftZILVi2QmZBgX3q7+tDeOQNqGtdXSdsL8TQi1vIaVFHUPDe0O0kdig==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /esbuild-linux-mips64le/0.14.54:
+ resolution: {integrity: sha512-qTHGQB8D1etd0u1+sB6p0ikLKRVuCWhYQhAHRPkO+OF3I/iSlTKNNS0Lh2Oc0g0UFGguaFZZiPJdJey3AGpAlw==}
+ engines: {node: '>=12'}
+ cpu: [mips64el]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /esbuild-linux-ppc64le/0.14.54:
+ resolution: {integrity: sha512-j3OMlzHiqwZBDPRCDFKcx595XVfOfOnv68Ax3U4UKZ3MTYQB5Yz3X1mn5GnodEVYzhtZgxEBidLWeIs8FDSfrQ==}
+ engines: {node: '>=12'}
+ cpu: [ppc64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /esbuild-linux-riscv64/0.14.54:
+ resolution: {integrity: sha512-y7Vt7Wl9dkOGZjxQZnDAqqn+XOqFD7IMWiewY5SPlNlzMX39ocPQlOaoxvT4FllA5viyV26/QzHtvTjVNOxHZg==}
+ engines: {node: '>=12'}
+ cpu: [riscv64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /esbuild-linux-s390x/0.14.54:
+ resolution: {integrity: sha512-zaHpW9dziAsi7lRcyV4r8dhfG1qBidQWUXweUjnw+lliChJqQr+6XD71K41oEIC3Mx1KStovEmlzm+MkGZHnHA==}
+ engines: {node: '>=12'}
+ cpu: [s390x]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /esbuild-netbsd-64/0.14.54:
+ resolution: {integrity: sha512-PR01lmIMnfJTgeU9VJTDY9ZerDWVFIUzAtJuDHwwceppW7cQWjBBqP48NdeRtoP04/AtO9a7w3viI+PIDr6d+w==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [netbsd]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /esbuild-node-loader/0.6.5:
+ resolution: {integrity: sha512-uPP+dllWm38cFvDysdocutN3lfe5pTIbddAHp1ENyLzpHYqE2r+3Wo+pfg9X3p8DFWwzIisft5YkeBIthIcixw==}
+ dependencies:
+ esbuild: 0.17.11
+ dev: true
+
+ /esbuild-openbsd-64/0.14.54:
+ resolution: {integrity: sha512-Qyk7ikT2o7Wu76UsvvDS5q0amJvmRzDyVlL0qf5VLsLchjCa1+IAvd8kTBgUxD7VBUUVgItLkk609ZHUc1oCaw==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [openbsd]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /esbuild-plugin-alias/0.1.2:
+ resolution: {integrity: sha512-WsX0OJy8IGOsGZV+4oHEU5B6XQUpxOsZN1iSoYf9COTDbY7WXcOwd1oCLYNWUIWCExyGXSghIGq2k7sXBldxwQ==}
+ dev: true
+
+ /esbuild-register/3.4.2_esbuild@0.17.11:
+ resolution: {integrity: sha512-kG/XyTDyz6+YDuyfB9ZoSIOOmgyFCH+xPRtsCa8W85HLRV5Csp+o3jWVbOSHgSLfyLc5DmP+KFDNwty4mEjC+Q==}
+ peerDependencies:
+ esbuild: '>=0.12 <1'
+ dependencies:
+ debug: 4.3.4
+ esbuild: 0.17.11
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /esbuild-sunos-64/0.14.54:
+ resolution: {integrity: sha512-28GZ24KmMSeKi5ueWzMcco6EBHStL3B6ubM7M51RmPwXQGLe0teBGJocmWhgwccA1GeFXqxzILIxXpHbl9Q/Kw==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [sunos]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /esbuild-windows-32/0.14.54:
+ resolution: {integrity: sha512-T+rdZW19ql9MjS7pixmZYVObd9G7kcaZo+sETqNH4RCkuuYSuv9AGHUVnPoP9hhuE1WM1ZimHz1CIBHBboLU7w==}
+ engines: {node: '>=12'}
+ cpu: [ia32]
+ os: [win32]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /esbuild-windows-64/0.14.54:
+ resolution: {integrity: sha512-AoHTRBUuYwXtZhjXZbA1pGfTo8cJo3vZIcWGLiUcTNgHpJJMC1rVA44ZereBHMJtotyN71S8Qw0npiCIkW96cQ==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [win32]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /esbuild-windows-arm64/0.14.54:
+ resolution: {integrity: sha512-M0kuUvXhot1zOISQGXwWn6YtS+Y/1RT9WrVIOywZnJHo3jCDyewAc79aKNQWFCQm+xNHVTq9h8dZKvygoXQQRg==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [win32]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /esbuild/0.11.23:
+ resolution: {integrity: sha512-iaiZZ9vUF5wJV8ob1tl+5aJTrwDczlvGP0JoMmnpC2B0ppiMCu8n8gmy5ZTGl5bcG081XBVn+U+jP+mPFm5T5Q==}
+ hasBin: true
+ requiresBuild: true
+ dev: true
+
+ /esbuild/0.14.54:
+ resolution: {integrity: sha512-Cy9llcy8DvET5uznocPyqL3BFRrFXSVqbgpMJ9Wz8oVjZlh/zUSNbPRbov0VX7VxN2JH1Oa0uNxZ7eLRb62pJA==}
+ engines: {node: '>=12'}
+ hasBin: true
+ requiresBuild: true
+ optionalDependencies:
+ '@esbuild/linux-loong64': 0.14.54
+ esbuild-android-64: 0.14.54
+ esbuild-android-arm64: 0.14.54
+ esbuild-darwin-64: 0.14.54
+ esbuild-darwin-arm64: 0.14.54
+ esbuild-freebsd-64: 0.14.54
+ esbuild-freebsd-arm64: 0.14.54
+ esbuild-linux-32: 0.14.54
+ esbuild-linux-64: 0.14.54
+ esbuild-linux-arm: 0.14.54
+ esbuild-linux-arm64: 0.14.54
+ esbuild-linux-mips64le: 0.14.54
+ esbuild-linux-ppc64le: 0.14.54
+ esbuild-linux-riscv64: 0.14.54
+ esbuild-linux-s390x: 0.14.54
+ esbuild-netbsd-64: 0.14.54
+ esbuild-openbsd-64: 0.14.54
+ esbuild-sunos-64: 0.14.54
+ esbuild-windows-32: 0.14.54
+ esbuild-windows-64: 0.14.54
+ esbuild-windows-arm64: 0.14.54
+ dev: true
+
+ /esbuild/0.17.11:
+ resolution: {integrity: sha512-pAMImyokbWDtnA/ufPxjQg0fYo2DDuzAlqwnDvbXqHLphe+m80eF++perYKVm8LeTuj2zUuFXC+xgSVxyoHUdg==}
+ engines: {node: '>=12'}
+ hasBin: true
+ requiresBuild: true
+ optionalDependencies:
+ '@esbuild/android-arm': 0.17.11
+ '@esbuild/android-arm64': 0.17.11
+ '@esbuild/android-x64': 0.17.11
+ '@esbuild/darwin-arm64': 0.17.11
+ '@esbuild/darwin-x64': 0.17.11
+ '@esbuild/freebsd-arm64': 0.17.11
+ '@esbuild/freebsd-x64': 0.17.11
+ '@esbuild/linux-arm': 0.17.11
+ '@esbuild/linux-arm64': 0.17.11
+ '@esbuild/linux-ia32': 0.17.11
+ '@esbuild/linux-loong64': 0.17.11
+ '@esbuild/linux-mips64el': 0.17.11
+ '@esbuild/linux-ppc64': 0.17.11
+ '@esbuild/linux-riscv64': 0.17.11
+ '@esbuild/linux-s390x': 0.17.11
+ '@esbuild/linux-x64': 0.17.11
+ '@esbuild/netbsd-x64': 0.17.11
+ '@esbuild/openbsd-x64': 0.17.11
+ '@esbuild/sunos-x64': 0.17.11
+ '@esbuild/win32-arm64': 0.17.11
+ '@esbuild/win32-ia32': 0.17.11
+ '@esbuild/win32-x64': 0.17.11
+ dev: true
+
+ /escalade/3.1.1:
+ resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==}
+ engines: {node: '>=6'}
+ dev: true
+
+ /escape-string-regexp/1.0.5:
+ resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==}
+ engines: {node: '>=0.8.0'}
+ dev: true
+
+ /escape-string-regexp/4.0.0:
+ resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
+ engines: {node: '>=10'}
+ dev: true
+
+ /eslint-define-config/1.16.0:
+ resolution: {integrity: sha512-0gMi2IIDVDNAcy0nDaRss41cBTRMFFAp83WBcGIPi5S7uMOLhNmvbSPozvOoUxv5dIRuGV6E6l+HUnEoFyEbFg==}
+ engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0, npm: '>=6.14.13', pnpm: '>= 7.0.0'}
+ dev: true
+
+ /eslint-plugin-vue/8.7.1_eslint@8.36.0:
+ resolution: {integrity: sha512-28sbtm4l4cOzoO1LtzQPxfxhQABararUb1JtqusQqObJpWX2e/gmVyeYVfepizPFne0Q5cILkYGiBoV36L12Wg==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ peerDependencies:
+ eslint: ^6.2.0 || ^7.0.0 || ^8.0.0
+ dependencies:
+ eslint: 8.36.0
+ eslint-utils: 3.0.0_eslint@8.36.0
+ natural-compare: 1.4.0
+ nth-check: 2.1.1
+ postcss-selector-parser: 6.0.11
+ semver: 7.3.8
+ vue-eslint-parser: 8.3.0_eslint@8.36.0
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /eslint-scope/5.1.1:
+ resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==}
+ engines: {node: '>=8.0.0'}
+ dependencies:
+ esrecurse: 4.3.0
+ estraverse: 4.3.0
+ dev: true
+
+ /eslint-scope/7.1.1:
+ resolution: {integrity: sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ dependencies:
+ esrecurse: 4.3.0
+ estraverse: 5.3.0
+ dev: true
+
+ /eslint-utils/3.0.0_eslint@8.36.0:
+ resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==}
+ engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0}
+ peerDependencies:
+ eslint: '>=5'
+ dependencies:
+ eslint: 8.36.0
+ eslint-visitor-keys: 2.1.0
+ dev: true
+
+ /eslint-visitor-keys/2.1.0:
+ resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==}
+ engines: {node: '>=10'}
+ dev: true
+
+ /eslint-visitor-keys/3.3.0:
+ resolution: {integrity: sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ dev: true
+
+ /eslint/8.36.0:
+ resolution: {integrity: sha512-Y956lmS7vDqomxlaaQAHVmeb4tNMp2FWIvU/RnU5BD3IKMD/MJPr76xdyr68P8tV1iNMvN2mRK0yy3c+UjL+bw==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ hasBin: true
+ dependencies:
+ '@eslint-community/eslint-utils': 4.2.0_eslint@8.36.0
+ '@eslint-community/regexpp': 4.4.0
+ '@eslint/eslintrc': 2.0.1
+ '@eslint/js': 8.36.0
+ '@humanwhocodes/config-array': 0.11.8
+ '@humanwhocodes/module-importer': 1.0.1
+ '@nodelib/fs.walk': 1.2.8
+ ajv: 6.12.6
+ chalk: 4.1.2
+ cross-spawn: 7.0.3
+ debug: 4.3.4
+ doctrine: 3.0.0
+ escape-string-regexp: 4.0.0
+ eslint-scope: 7.1.1
+ eslint-visitor-keys: 3.3.0
+ espree: 9.5.0
+ esquery: 1.5.0
+ esutils: 2.0.3
+ fast-deep-equal: 3.1.3
+ file-entry-cache: 6.0.1
+ find-up: 5.0.0
+ glob-parent: 6.0.2
+ globals: 13.20.0
+ grapheme-splitter: 1.0.4
+ ignore: 5.2.4
+ import-fresh: 3.3.0
+ imurmurhash: 0.1.4
+ is-glob: 4.0.3
+ is-path-inside: 3.0.3
+ js-sdsl: 4.3.0
+ js-yaml: 4.1.0
+ json-stable-stringify-without-jsonify: 1.0.1
+ levn: 0.4.1
+ lodash.merge: 4.6.2
+ minimatch: 3.1.2
+ natural-compare: 1.4.0
+ optionator: 0.9.1
+ strip-ansi: 6.0.1
+ strip-json-comments: 3.1.1
+ text-table: 0.2.0
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /esno/0.14.1:
+ resolution: {integrity: sha512-yDFYw6dGUjCT1qKsdG7WOc/RzIh/qwxUEVZ+ohCltaxBxEFMNqeqbQL9xjRl6Yvdwrfc5OCjUA9JbFmuu/8BKg==}
+ hasBin: true
+ dependencies:
+ cross-spawn: 7.0.3
+ esbuild: 0.17.11
+ esbuild-node-loader: 0.6.5
+ esbuild-register: 3.4.2_esbuild@0.17.11
+ import-meta-resolve: 1.1.1
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /espree/9.5.0:
+ resolution: {integrity: sha512-JPbJGhKc47++oo4JkEoTe2wjy4fmMwvFpgJT9cQzmfXKp22Dr6Hf1tdCteLz1h0P3t+mGvWZ+4Uankvh8+c6zw==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ dependencies:
+ acorn: 8.8.2
+ acorn-jsx: 5.3.2_acorn@8.8.2
+ eslint-visitor-keys: 3.3.0
+ dev: true
+
+ /esquery/1.5.0:
+ resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==}
+ engines: {node: '>=0.10'}
+ dependencies:
+ estraverse: 5.3.0
+ dev: true
+
+ /esrecurse/4.3.0:
+ resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==}
+ engines: {node: '>=4.0'}
+ dependencies:
+ estraverse: 5.3.0
+ dev: true
+
+ /estraverse/4.3.0:
+ resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==}
+ engines: {node: '>=4.0'}
+ dev: true
+
+ /estraverse/5.3.0:
+ resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
+ engines: {node: '>=4.0'}
+ dev: true
+
+ /estree-walker/1.0.1:
+ resolution: {integrity: sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==}
+ dev: true
+
+ /estree-walker/2.0.2:
+ resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
+
+ /esutils/2.0.3:
+ resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /etag/1.8.1:
+ resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==}
+ engines: {node: '>= 0.6'}
+ dev: true
+
+ /event-source-polyfill/1.0.31:
+ resolution: {integrity: sha512-4IJSItgS/41IxN5UVAVuAyczwZF7ZIEsM1XAoUzIHA6A+xzusEZUutdXz2Nr+MQPLxfTiCvqE79/C8HT8fKFvA==}
+ dev: false
+
+ /exceljs/4.3.0:
+ resolution: {integrity: sha512-hTAeo5b5TPvf8Z02I2sKIT4kSfCnOO2bCxYX8ABqODCdAjppI3gI9VYiGCQQYVcBaBSKlFDMKlAQRqC+kV9O8w==}
+ engines: {node: '>=8.3.0'}
+ dependencies:
+ archiver: 5.3.1
+ dayjs: 1.11.7
+ fast-csv: 4.3.6
+ jszip: 3.10.1
+ readable-stream: 3.6.2
+ saxes: 5.0.1
+ tmp: 0.2.1
+ unzipper: 0.10.11
+ uuid: 8.3.2
+ dev: false
+
+ /exec-buffer/3.2.0:
+ resolution: {integrity: sha512-wsiD+2Tp6BWHoVv3B+5Dcx6E7u5zky+hUwOHjuH2hKSLR3dvRmX8fk8UD8uqQixHs4Wk6eDmiegVrMPjKj7wpA==}
+ engines: {node: '>=4'}
+ dependencies:
+ execa: 0.7.0
+ p-finally: 1.0.0
+ pify: 3.0.0
+ rimraf: 2.7.1
+ tempfile: 2.0.0
+ dev: true
+
+ /execa/0.7.0:
+ resolution: {integrity: sha512-RztN09XglpYI7aBBrJCPW95jEH7YF1UEPOoX9yDhUTPdp7mK+CQvnLTuD10BNXZ3byLTu2uehZ8EcKT/4CGiFw==}
+ engines: {node: '>=4'}
+ dependencies:
+ cross-spawn: 5.1.0
+ get-stream: 3.0.0
+ is-stream: 1.1.0
+ npm-run-path: 2.0.2
+ p-finally: 1.0.0
+ signal-exit: 3.0.7
+ strip-eof: 1.0.0
+ dev: true
+
+ /execa/1.0.0:
+ resolution: {integrity: sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==}
+ engines: {node: '>=6'}
+ dependencies:
+ cross-spawn: 6.0.5
+ get-stream: 4.1.0
+ is-stream: 1.1.0
+ npm-run-path: 2.0.2
+ p-finally: 1.0.0
+ signal-exit: 3.0.7
+ strip-eof: 1.0.0
+ dev: true
+
+ /execa/4.1.0:
+ resolution: {integrity: sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==}
+ engines: {node: '>=10'}
+ dependencies:
+ cross-spawn: 7.0.3
+ get-stream: 5.2.0
+ human-signals: 1.1.1
+ is-stream: 2.0.1
+ merge-stream: 2.0.0
+ npm-run-path: 4.0.1
+ onetime: 5.1.2
+ signal-exit: 3.0.7
+ strip-final-newline: 2.0.0
+ dev: true
+
+ /execa/5.1.1:
+ resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==}
+ engines: {node: '>=10'}
+ dependencies:
+ cross-spawn: 7.0.3
+ get-stream: 6.0.1
+ human-signals: 2.1.0
+ is-stream: 2.0.1
+ merge-stream: 2.0.0
+ npm-run-path: 4.0.1
+ onetime: 5.1.2
+ signal-exit: 3.0.7
+ strip-final-newline: 2.0.0
+ dev: true
+
+ /executable/4.1.1:
+ resolution: {integrity: sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==}
+ engines: {node: '>=4'}
+ dependencies:
+ pify: 2.3.0
+ dev: true
+
+ /exit-on-epipe/1.0.1:
+ resolution: {integrity: sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw==}
+ engines: {node: '>=0.8'}
+ dev: false
+
+ /expand-brackets/2.1.4:
+ resolution: {integrity: sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ debug: 2.6.9
+ define-property: 0.2.5
+ extend-shallow: 2.0.1
+ posix-character-classes: 0.1.1
+ regex-not: 1.0.2
+ snapdragon: 0.8.2
+ to-regex: 3.0.2
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /ext-list/2.2.2:
+ resolution: {integrity: sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ mime-db: 1.52.0
+ dev: true
+
+ /ext-name/5.0.0:
+ resolution: {integrity: sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==}
+ engines: {node: '>=4'}
+ dependencies:
+ ext-list: 2.2.2
+ sort-keys-length: 1.0.1
+ dev: true
+
+ /extend-shallow/2.0.1:
+ resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ is-extendable: 0.1.1
+ dev: true
+
+ /extend-shallow/3.0.2:
+ resolution: {integrity: sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ assign-symbols: 1.0.0
+ is-extendable: 1.0.1
+ dev: true
+
+ /external-editor/3.1.0:
+ resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==}
+ engines: {node: '>=4'}
+ dependencies:
+ chardet: 0.7.0
+ iconv-lite: 0.4.24
+ tmp: 0.0.33
+ dev: true
+
+ /extglob/2.0.4:
+ resolution: {integrity: sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ array-unique: 0.3.2
+ define-property: 1.0.0
+ expand-brackets: 2.1.4
+ extend-shallow: 2.0.1
+ fragment-cache: 0.2.1
+ regex-not: 1.0.2
+ snapdragon: 0.8.2
+ to-regex: 3.0.2
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /fast-csv/4.3.6:
+ resolution: {integrity: sha512-2RNSpuwwsJGP0frGsOmTb9oUF+VkFSM4SyLTDgwf2ciHWTarN0lQTC+F2f/t5J9QjW+c65VFIAAu85GsvMIusw==}
+ engines: {node: '>=10.0.0'}
+ dependencies:
+ '@fast-csv/format': 4.3.5
+ '@fast-csv/parse': 4.3.6
+ dev: false
+
+ /fast-deep-equal/3.1.3:
+ resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
+ dev: true
+
+ /fast-glob/3.2.12:
+ resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==}
+ engines: {node: '>=8.6.0'}
+ dependencies:
+ '@nodelib/fs.stat': 2.0.5
+ '@nodelib/fs.walk': 1.2.8
+ glob-parent: 5.1.2
+ merge2: 1.4.1
+ micromatch: 4.0.5
+ dev: true
+
+ /fast-json-stable-stringify/2.1.0:
+ resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
+ dev: true
+
+ /fast-levenshtein/2.0.6:
+ resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
+ dev: true
+
+ /fast-xml-parser/4.1.3:
+ resolution: {integrity: sha512-LsNDahCiCcJPe8NO7HijcnukHB24tKbfDDA5IILx9dmW3Frb52lhbeX6MPNUSvyGNfav2VTYpJ/OqkRoVLrh2Q==}
+ hasBin: true
+ dependencies:
+ strnum: 1.0.5
+ dev: true
+
+ /fastest-levenshtein/1.0.16:
+ resolution: {integrity: sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==}
+ engines: {node: '>= 4.9.1'}
+ dev: false
+
+ /fastq/1.15.0:
+ resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==}
+ dependencies:
+ reusify: 1.0.4
+ dev: true
+
+ /fd-slicer/1.1.0:
+ resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==}
+ dependencies:
+ pend: 1.2.0
+ dev: true
+
+ /figures/1.7.0:
+ resolution: {integrity: sha512-UxKlfCRuCBxSXU4C6t9scbDyWZ4VlaFFdojKtzJuSkuOBQ5CNFum+zZXFwHjo+CxBC1t6zlYPgHIgFjL8ggoEQ==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ escape-string-regexp: 1.0.5
+ object-assign: 4.1.1
+ dev: true
+
+ /figures/3.2.0:
+ resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==}
+ engines: {node: '>=8'}
+ dependencies:
+ escape-string-regexp: 1.0.5
+ dev: true
+
+ /file-entry-cache/6.0.1:
+ resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==}
+ engines: {node: ^10.12.0 || >=12.0.0}
+ dependencies:
+ flat-cache: 3.0.4
+ dev: true
+
+ /file-type/10.11.0:
+ resolution: {integrity: sha512-uzk64HRpUZyTGZtVuvrjP0FYxzQrBf4rojot6J65YMEbwBLB0CWm0CLojVpwpmFmxcE/lkvYICgfcGozbBq6rw==}
+ engines: {node: '>=6'}
+ dev: true
+
+ /file-type/12.4.2:
+ resolution: {integrity: sha512-UssQP5ZgIOKelfsaB5CuGAL+Y+q7EmONuiwF3N5HAH0t27rvrttgi6Ra9k/+DVaY9UF6+ybxu5pOXLUdA8N7Vg==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /file-type/3.9.0:
+ resolution: {integrity: sha512-RLoqTXE8/vPmMuTI88DAzhMYC99I8BWv7zYP4A1puo5HIjEJ5EX48ighy4ZyKMG9EDXxBgW6e++cn7d1xuFghA==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /file-type/4.4.0:
+ resolution: {integrity: sha512-f2UbFQEk7LXgWpi5ntcO86OeA/cC80fuDDDaX/fZ2ZGel+AF7leRQqBBW1eJNiiQkrZlAoM6P+VYP5P6bOlDEQ==}
+ engines: {node: '>=4'}
+ dev: true
+
+ /file-type/5.2.0:
+ resolution: {integrity: sha512-Iq1nJ6D2+yIO4c8HHg4fyVb8mAJieo1Oloy1mLLaB2PvezNedhBVm+QU7g0qM42aiMbRXTxKKwGD17rjKNJYVQ==}
+ engines: {node: '>=4'}
+ dev: true
+
+ /file-type/6.2.0:
+ resolution: {integrity: sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==}
+ engines: {node: '>=4'}
+ dev: true
+
+ /file-type/8.1.0:
+ resolution: {integrity: sha512-qyQ0pzAy78gVoJsmYeNgl8uH8yKhr1lVhW7JbzJmnlRi0I4R2eEDEJZVKG8agpDnLpacwNbDhLNG/LMdxHD2YQ==}
+ engines: {node: '>=6'}
+ dev: true
+
+ /filelist/1.0.4:
+ resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==}
+ dependencies:
+ minimatch: 5.1.6
+ dev: true
+
+ /filename-reserved-regex/2.0.0:
+ resolution: {integrity: sha512-lc1bnsSr4L4Bdif8Xb/qrtokGbq5zlsms/CYH8PP+WtCkGNF65DPiQY8vG3SakEdRn8Dlnm+gW/qWKKjS5sZzQ==}
+ engines: {node: '>=4'}
+ dev: true
+
+ /filenamify/2.1.0:
+ resolution: {integrity: sha512-ICw7NTT6RsDp2rnYKVd8Fu4cr6ITzGy3+u4vUujPkabyaz+03F24NWEX7fs5fp+kBonlaqPH8fAO2NM+SXt/JA==}
+ engines: {node: '>=4'}
+ dependencies:
+ filename-reserved-regex: 2.0.0
+ strip-outer: 1.0.1
+ trim-repeated: 1.0.0
+ dev: true
+
+ /fill-range/4.0.0:
+ resolution: {integrity: sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ extend-shallow: 2.0.1
+ is-number: 3.0.0
+ repeat-string: 1.6.1
+ to-regex-range: 2.1.1
+ dev: true
+
+ /fill-range/7.0.1:
+ resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==}
+ engines: {node: '>=8'}
+ dependencies:
+ to-regex-range: 5.0.1
+ dev: true
+
+ /find-up/1.1.2:
+ resolution: {integrity: sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ path-exists: 2.1.0
+ pinkie-promise: 2.0.1
+ dev: true
+
+ /find-up/2.1.0:
+ resolution: {integrity: sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==}
+ engines: {node: '>=4'}
+ dependencies:
+ locate-path: 2.0.0
+ dev: true
+
+ /find-up/4.1.0:
+ resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==}
+ engines: {node: '>=8'}
+ dependencies:
+ locate-path: 5.0.0
+ path-exists: 4.0.0
+
+ /find-up/5.0.0:
+ resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
+ engines: {node: '>=10'}
+ dependencies:
+ locate-path: 6.0.0
+ path-exists: 4.0.0
+ dev: true
+
+ /find-versions/3.2.0:
+ resolution: {integrity: sha512-P8WRou2S+oe222TOCHitLy8zj+SIsVJh52VP4lvXkaFVnOFFdoWv1H1Jjvel1aI6NCFOAaeAVm8qrI0odiLcww==}
+ engines: {node: '>=6'}
+ dependencies:
+ semver-regex: 2.0.0
+ dev: true
+
+ /flat-cache/3.0.4:
+ resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==}
+ engines: {node: ^10.12.0 || >=12.0.0}
+ dependencies:
+ flatted: 3.2.7
+ rimraf: 3.0.2
+ dev: true
+
+ /flatted/3.2.7:
+ resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==}
+ dev: true
+
+ /follow-redirects/1.15.2:
+ resolution: {integrity: sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==}
+ engines: {node: '>=4.0'}
+ peerDependencies:
+ debug: '*'
+ peerDependenciesMeta:
+ debug:
+ optional: true
+ dev: false
+
+ /follow-redirects/1.15.2_debug@4.3.4:
+ resolution: {integrity: sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==}
+ engines: {node: '>=4.0'}
+ peerDependencies:
+ debug: '*'
+ peerDependenciesMeta:
+ debug:
+ optional: true
+ dependencies:
+ debug: 4.3.4
+ dev: true
+
+ /for-each/0.3.3:
+ resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==}
+ dependencies:
+ is-callable: 1.2.7
+ dev: true
+
+ /for-in/1.0.2:
+ resolution: {integrity: sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /frac/1.1.2:
+ resolution: {integrity: sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==}
+ engines: {node: '>=0.8'}
+ dev: false
+
+ /fraction.js/4.2.0:
+ resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==}
+ dev: true
+
+ /fragment-cache/0.2.1:
+ resolution: {integrity: sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ map-cache: 0.2.2
+ dev: true
+
+ /from2/2.3.0:
+ resolution: {integrity: sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==}
+ dependencies:
+ inherits: 2.0.4
+ readable-stream: 2.3.8
+ dev: true
+
+ /fs-constants/1.0.0:
+ resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==}
+
+ /fs-extra/10.1.0:
+ resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==}
+ engines: {node: '>=12'}
+ dependencies:
+ graceful-fs: 4.2.10
+ jsonfile: 6.1.0
+ universalify: 2.0.0
+ dev: true
+
+ /fs-extra/9.1.0:
+ resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==}
+ engines: {node: '>=10'}
+ dependencies:
+ at-least-node: 1.0.0
+ graceful-fs: 4.2.10
+ jsonfile: 6.1.0
+ universalify: 2.0.0
+ dev: true
+
+ /fs.realpath/1.0.0:
+ resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
+
+ /fsevents/2.3.2:
+ resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==}
+ engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+ os: [darwin]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /fstream/1.0.12:
+ resolution: {integrity: sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==}
+ engines: {node: '>=0.6'}
+ dependencies:
+ graceful-fs: 4.2.10
+ inherits: 2.0.4
+ mkdirp: 0.5.6
+ rimraf: 2.7.1
+ dev: false
+
+ /function-bind/1.1.1:
+ resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==}
+
+ /function.prototype.name/1.1.5:
+ resolution: {integrity: sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ call-bind: 1.0.2
+ define-properties: 1.2.0
+ es-abstract: 1.21.2
+ functions-have-names: 1.2.3
+ dev: true
+
+ /functions-have-names/1.2.3:
+ resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==}
+ dev: true
+
+ /gensync/1.0.0-beta.2:
+ resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==}
+ engines: {node: '>=6.9.0'}
+ dev: true
+
+ /get-caller-file/2.0.5:
+ resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
+ engines: {node: 6.* || 8.* || >= 10.*}
+
+ /get-intrinsic/1.2.0:
+ resolution: {integrity: sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==}
+ dependencies:
+ function-bind: 1.1.1
+ has: 1.0.3
+ has-symbols: 1.0.3
+
+ /get-own-enumerable-property-symbols/3.0.2:
+ resolution: {integrity: sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==}
+ dev: true
+
+ /get-pkg-repo/4.2.1:
+ resolution: {integrity: sha512-2+QbHjFRfGB74v/pYWjd5OhU3TDIC2Gv/YKUTk/tCvAz0pkn/Mz6P3uByuBimLOcPvN2jYdScl3xGFSrx0jEcA==}
+ engines: {node: '>=6.9.0'}
+ hasBin: true
+ dependencies:
+ '@hutson/parse-repository-url': 3.0.2
+ hosted-git-info: 4.1.0
+ through2: 2.0.5
+ yargs: 16.2.0
+ dev: true
+
+ /get-proxy/2.1.0:
+ resolution: {integrity: sha512-zmZIaQTWnNQb4R4fJUEp/FC51eZsc6EkErspy3xtIYStaq8EB/hDIWipxsal+E8rz0qD7f2sL/NA9Xee4RInJw==}
+ engines: {node: '>=4'}
+ dependencies:
+ npm-conf: 1.1.3
+ dev: true
+
+ /get-stdin/4.0.1:
+ resolution: {integrity: sha512-F5aQMywwJ2n85s4hJPTT9RPxGmubonuB10MNYo17/xph174n2MIR33HRguhzVag10O/npM7SPk73LMZNP+FaWw==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /get-stream/2.3.1:
+ resolution: {integrity: sha512-AUGhbbemXxrZJRD5cDvKtQxLuYaIbNtDTK8YqupCI393Q2KSTreEsLUN3ZxAWFGiKTzL6nKuzfcIvieflUX9qA==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ object-assign: 4.1.1
+ pinkie-promise: 2.0.1
+ dev: true
+
+ /get-stream/3.0.0:
+ resolution: {integrity: sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==}
+ engines: {node: '>=4'}
+ dev: true
+
+ /get-stream/4.1.0:
+ resolution: {integrity: sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==}
+ engines: {node: '>=6'}
+ dependencies:
+ pump: 3.0.0
+ dev: true
+
+ /get-stream/5.2.0:
+ resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==}
+ engines: {node: '>=8'}
+ dependencies:
+ pump: 3.0.0
+ dev: true
+
+ /get-stream/6.0.1:
+ resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==}
+ engines: {node: '>=10'}
+ dev: true
+
+ /get-symbol-description/1.0.0:
+ resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ call-bind: 1.0.2
+ get-intrinsic: 1.2.0
+ dev: true
+
+ /get-value/2.0.6:
+ resolution: {integrity: sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /gifsicle/5.2.0:
+ resolution: {integrity: sha512-vOIS3j0XoTCxq9pkGj43gEix82RkI5FveNgaFZutjbaui/HH+4fR8Y56dwXDuxYo8hR4xOo6/j2h1WHoQW6XLw==}
+ engines: {node: '>=10'}
+ hasBin: true
+ requiresBuild: true
+ dependencies:
+ bin-build: 3.0.0
+ bin-wrapper: /bin-wrapper-china/0.1.0
+ execa: 5.1.1
+ logalot: 2.1.0
+ dev: true
+
+ /git-raw-commits/2.0.11:
+ resolution: {integrity: sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==}
+ engines: {node: '>=10'}
+ hasBin: true
+ dependencies:
+ dargs: 7.0.0
+ lodash: 4.17.21
+ meow: 8.1.2
+ split2: 3.2.2
+ through2: 4.0.2
+ dev: true
+
+ /git-remote-origin-url/2.0.0:
+ resolution: {integrity: sha512-eU+GGrZgccNJcsDH5LkXR3PB9M958hxc7sbA8DFJjrv9j4L2P/eZfKhM+QD6wyzpiv+b1BpK0XrYCxkovtjSLw==}
+ engines: {node: '>=4'}
+ dependencies:
+ gitconfiglocal: 1.0.0
+ pify: 2.3.0
+ dev: true
+
+ /git-semver-tags/4.1.1:
+ resolution: {integrity: sha512-OWyMt5zBe7xFs8vglMmhM9lRQzCWL3WjHtxNNfJTMngGym7pC1kh8sP6jevfydJ6LP3ZvGxfb6ABYgPUM0mtsA==}
+ engines: {node: '>=10'}
+ hasBin: true
+ dependencies:
+ meow: 8.1.2
+ semver: 6.3.0
+ dev: true
+
+ /gitconfiglocal/1.0.0:
+ resolution: {integrity: sha512-spLUXeTAVHxDtKsJc8FkFVgFtMdEN9qPGpL23VfSHx4fP4+Ds097IXLvymbnDH8FnmxX5Nr9bPw3A+AQ6mWEaQ==}
+ dependencies:
+ ini: 1.3.8
+ dev: true
+
+ /glob-parent/5.1.2:
+ resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
+ engines: {node: '>= 6'}
+ dependencies:
+ is-glob: 4.0.3
+ dev: true
+
+ /glob-parent/6.0.2:
+ resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
+ engines: {node: '>=10.13.0'}
+ dependencies:
+ is-glob: 4.0.3
+ dev: true
+
+ /glob/7.2.3:
+ resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
+ dependencies:
+ fs.realpath: 1.0.0
+ inflight: 1.0.6
+ inherits: 2.0.4
+ minimatch: 3.1.2
+ once: 1.4.0
+ path-is-absolute: 1.0.1
+
+ /globals/11.12.0:
+ resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==}
+ engines: {node: '>=4'}
+ dev: true
+
+ /globals/13.20.0:
+ resolution: {integrity: sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==}
+ engines: {node: '>=8'}
+ dependencies:
+ type-fest: 0.20.2
+ dev: true
+
+ /globalthis/1.0.3:
+ resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ define-properties: 1.2.0
+ dev: true
+
+ /globby/10.0.2:
+ resolution: {integrity: sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==}
+ engines: {node: '>=8'}
+ dependencies:
+ '@types/glob': 7.2.0
+ array-union: 2.1.0
+ dir-glob: 3.0.1
+ fast-glob: 3.2.12
+ glob: 7.2.3
+ ignore: 5.2.4
+ merge2: 1.4.1
+ slash: 3.0.0
+ dev: true
+
+ /globby/11.1.0:
+ resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==}
+ engines: {node: '>=10'}
+ dependencies:
+ array-union: 2.1.0
+ dir-glob: 3.0.1
+ fast-glob: 3.2.12
+ ignore: 5.2.4
+ merge2: 1.4.1
+ slash: 3.0.0
+ dev: true
+
+ /gopd/1.0.1:
+ resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==}
+ dependencies:
+ get-intrinsic: 1.2.0
+ dev: true
+
+ /got/7.1.0:
+ resolution: {integrity: sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw==}
+ engines: {node: '>=4'}
+ dependencies:
+ '@types/keyv': 3.1.4
+ '@types/responselike': 1.0.0
+ decompress-response: 3.3.0
+ duplexer3: 0.1.5
+ get-stream: 3.0.0
+ is-plain-obj: 1.1.0
+ is-retry-allowed: 1.2.0
+ is-stream: 1.1.0
+ isurl: 1.0.0
+ lowercase-keys: 1.0.1
+ p-cancelable: 0.3.0
+ p-timeout: 1.2.1
+ safe-buffer: 5.2.1
+ timed-out: 4.0.1
+ url-parse-lax: 1.0.0
+ url-to-options: 1.0.1
+ dev: true
+
+ /got/8.3.2:
+ resolution: {integrity: sha512-qjUJ5U/hawxosMryILofZCkm3C84PLJS/0grRIpjAwu+Lkxxj5cxeCU25BG0/3mDSpXKTyZr8oh8wIgLaH0QCw==}
+ engines: {node: '>=4'}
+ dependencies:
+ '@sindresorhus/is': 0.7.0
+ '@types/keyv': 3.1.4
+ '@types/responselike': 1.0.0
+ cacheable-request: 2.1.4
+ decompress-response: 3.3.0
+ duplexer3: 0.1.5
+ get-stream: 3.0.0
+ into-stream: 3.1.0
+ is-retry-allowed: 1.2.0
+ isurl: 1.0.0
+ lowercase-keys: 1.0.1
+ mimic-response: 1.0.1
+ p-cancelable: 0.4.1
+ p-timeout: 2.0.1
+ pify: 3.0.0
+ safe-buffer: 5.2.1
+ timed-out: 4.0.1
+ url-parse-lax: 3.0.0
+ url-to-options: 1.0.1
+ dev: true
+
+ /graceful-fs/4.2.10:
+ resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==}
+
+ /grapheme-splitter/1.0.4:
+ resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==}
+ dev: true
+
+ /handlebars/4.7.7:
+ resolution: {integrity: sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==}
+ engines: {node: '>=0.4.7'}
+ hasBin: true
+ dependencies:
+ minimist: 1.2.8
+ neo-async: 2.6.2
+ source-map: 0.6.1
+ wordwrap: 1.0.0
+ optionalDependencies:
+ uglify-js: 3.17.4
+ dev: true
+
+ /hard-rejection/2.1.0:
+ resolution: {integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==}
+ engines: {node: '>=6'}
+ dev: true
+
+ /has-ansi/2.0.0:
+ resolution: {integrity: sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ ansi-regex: 2.1.1
+ dev: true
+
+ /has-bigints/1.0.2:
+ resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==}
+ dev: true
+
+ /has-flag/1.0.0:
+ resolution: {integrity: sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /has-flag/3.0.0:
+ resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==}
+ engines: {node: '>=4'}
+ dev: true
+
+ /has-flag/4.0.0:
+ resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /has-property-descriptors/1.0.0:
+ resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==}
+ dependencies:
+ get-intrinsic: 1.2.0
+ dev: true
+
+ /has-proto/1.0.1:
+ resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==}
+ engines: {node: '>= 0.4'}
+ dev: true
+
+ /has-symbol-support-x/1.4.2:
+ resolution: {integrity: sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==}
+ dev: true
+
+ /has-symbols/1.0.3:
+ resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==}
+ engines: {node: '>= 0.4'}
+
+ /has-to-string-tag-x/1.4.1:
+ resolution: {integrity: sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==}
+ dependencies:
+ has-symbol-support-x: 1.4.2
+ dev: true
+
+ /has-tostringtag/1.0.0:
+ resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ has-symbols: 1.0.3
+ dev: true
+
+ /has-value/0.3.1:
+ resolution: {integrity: sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ get-value: 2.0.6
+ has-values: 0.1.4
+ isobject: 2.1.0
+ dev: true
+
+ /has-value/1.0.0:
+ resolution: {integrity: sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ get-value: 2.0.6
+ has-values: 1.0.0
+ isobject: 3.0.1
+ dev: true
+
+ /has-values/0.1.4:
+ resolution: {integrity: sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /has-values/1.0.0:
+ resolution: {integrity: sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ is-number: 3.0.0
+ kind-of: 4.0.0
+ dev: true
+
+ /has/1.0.3:
+ resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==}
+ engines: {node: '>= 0.4.0'}
+ dependencies:
+ function-bind: 1.1.1
+
+ /hash-sum/2.0.0:
+ resolution: {integrity: sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==}
+ dev: true
+
+ /he/1.2.0:
+ resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==}
+ hasBin: true
+ dev: true
+
+ /header-case/2.0.4:
+ resolution: {integrity: sha512-H/vuk5TEEVZwrR0lp2zed9OCo1uAILMlx0JEMgC26rzyJJ3N1v6XkwHHXJQdR2doSjcGPM6OKPYoJgf0plJ11Q==}
+ dependencies:
+ capital-case: 1.0.4
+ tslib: 2.5.0
+ dev: true
+
+ /hosted-git-info/2.8.9:
+ resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==}
+ dev: true
+
+ /hosted-git-info/4.1.0:
+ resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==}
+ engines: {node: '>=10'}
+ dependencies:
+ lru-cache: 6.0.0
+ dev: true
+
+ /html-minifier-terser/6.1.0:
+ resolution: {integrity: sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==}
+ engines: {node: '>=12'}
+ hasBin: true
+ dependencies:
+ camel-case: 4.1.2
+ clean-css: 5.3.2
+ commander: 8.3.0
+ he: 1.2.0
+ param-case: 3.0.4
+ relateurl: 0.2.7
+ terser: 5.16.6
+ dev: true
+
+ /html-tags/3.2.0:
+ resolution: {integrity: sha512-vy7ClnArOZwCnqZgvv+ddgHgJiAFXe3Ge9ML5/mBctVJoUoYPCdxVucOywjDARn6CVoh3dRSFdPHy2sX80L0Wg==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /htmlparser2/3.10.1:
+ resolution: {integrity: sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==}
+ dependencies:
+ domelementtype: 1.3.1
+ domhandler: 2.4.2
+ domutils: 1.7.0
+ entities: 1.1.2
+ inherits: 2.0.4
+ readable-stream: 3.6.2
+ dev: true
+
+ /http-cache-semantics/3.8.1:
+ resolution: {integrity: sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==}
+ dev: true
+
+ /human-signals/1.1.1:
+ resolution: {integrity: sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==}
+ engines: {node: '>=8.12.0'}
+ dev: true
+
+ /human-signals/2.1.0:
+ resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==}
+ engines: {node: '>=10.17.0'}
+ dev: true
+
+ /iconv-lite/0.4.24:
+ resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ safer-buffer: 2.1.2
+ dev: true
+
+ /iconv-lite/0.6.3:
+ resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ safer-buffer: 2.1.2
+ dev: true
+ optional: true
+
+ /idb/7.1.1:
+ resolution: {integrity: sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==}
+ dev: true
+
+ /ieee754/1.2.1:
+ resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
+
+ /ignore/5.2.4:
+ resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==}
+ engines: {node: '>= 4'}
+ dev: true
+
+ /image-size/0.5.5:
+ resolution: {integrity: sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==}
+ engines: {node: '>=0.10.0'}
+ hasBin: true
+ dev: true
+
+ /imagemin-gifsicle/7.0.0:
+ resolution: {integrity: sha512-LaP38xhxAwS3W8PFh4y5iQ6feoTSF+dTAXFRUEYQWYst6Xd+9L/iPk34QGgK/VO/objmIlmq9TStGfVY2IcHIA==}
+ engines: {node: '>=10'}
+ dependencies:
+ execa: 1.0.0
+ gifsicle: 5.2.0
+ is-gif: 3.0.0
+ dev: true
+
+ /imagemin-jpegtran/7.0.0:
+ resolution: {integrity: sha512-MJoyTCW8YjMJf56NorFE41SR/WkaGA3IYk4JgvMlRwguJEEd3PnP9UxA8Y2UWjquz8d+On3Ds/03ZfiiLS8xTQ==}
+ engines: {node: '>=10'}
+ dependencies:
+ exec-buffer: 3.2.0
+ is-jpg: 2.0.0
+ jpegtran-bin: 5.0.2
+ dev: true
+
+ /imagemin-mozjpeg/9.0.0:
+ resolution: {integrity: sha512-TwOjTzYqCFRgROTWpVSt5UTT0JeCuzF1jswPLKALDd89+PmrJ2PdMMYeDLYZ1fs9cTovI9GJd68mRSnuVt691w==}
+ engines: {node: '>=10'}
+ dependencies:
+ execa: 4.1.0
+ is-jpg: 2.0.0
+ mozjpeg: 7.1.1
+ dev: true
+
+ /imagemin-optipng/8.0.0:
+ resolution: {integrity: sha512-CUGfhfwqlPjAC0rm8Fy+R2DJDBGjzy2SkfyT09L8rasnF9jSoHFqJ1xxSZWK6HVPZBMhGPMxCTL70OgTHlLF5A==}
+ engines: {node: '>=10'}
+ dependencies:
+ exec-buffer: 3.2.0
+ is-png: 2.0.0
+ optipng-bin: 7.0.1
+ dev: true
+
+ /imagemin-pngquant/9.0.2:
+ resolution: {integrity: sha512-cj//bKo8+Frd/DM8l6Pg9pws1pnDUjgb7ae++sUX1kUVdv2nrngPykhiUOgFeE0LGY/LmUbCf4egCHC4YUcZSg==}
+ engines: {node: '>=10'}
+ dependencies:
+ execa: 4.1.0
+ is-png: 2.0.0
+ is-stream: 2.0.1
+ ow: 0.17.0
+ pngquant-bin: 6.0.1
+ dev: true
+
+ /imagemin-svgo/9.0.0:
+ resolution: {integrity: sha512-uNgXpKHd99C0WODkrJ8OO/3zW3qjgS4pW7hcuII0RcHN3tnKxDjJWcitdVC/TZyfIqSricU8WfrHn26bdSW62g==}
+ engines: {node: '>=10'}
+ dependencies:
+ is-svg: 4.4.0
+ svgo: 2.8.0
+ dev: true
+
+ /imagemin-webp/6.1.0:
+ resolution: {integrity: sha512-i8ZluZV1pfQX9aVzmZ/VZh9KBSdPwUlp5VruAa9c30GZnX/nMl5n7h+oUMnI7Mg7+SUpu9mYBsw2nsYGUEllWQ==}
+ engines: {node: '>=10'}
+ dependencies:
+ cwebp-bin: 6.1.2
+ exec-buffer: 3.2.0
+ is-cwebp-readable: 3.0.0
+ dev: true
+
+ /imagemin/7.0.1:
+ resolution: {integrity: sha512-33AmZ+xjZhg2JMCe+vDf6a9mzWukE7l+wAtesjE7KyteqqKjzxv7aVQeWnul1Ve26mWvEQqyPwl0OctNBfSR9w==}
+ engines: {node: '>=8'}
+ dependencies:
+ file-type: 12.4.2
+ globby: 10.0.2
+ graceful-fs: 4.2.10
+ junk: 3.1.0
+ make-dir: 3.1.0
+ p-pipe: 3.1.0
+ replace-ext: 1.0.1
+ dev: true
+
+ /immediate/3.0.6:
+ resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==}
+ dev: false
+
+ /import-fresh/3.3.0:
+ resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==}
+ engines: {node: '>=6'}
+ dependencies:
+ parent-module: 1.0.1
+ resolve-from: 4.0.0
+ dev: true
+
+ /import-lazy/4.0.0:
+ resolution: {integrity: sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /import-meta-resolve/1.1.1:
+ resolution: {integrity: sha512-JiTuIvVyPaUg11eTrNDx5bgQ/yMKMZffc7YSjvQeSMXy58DO2SQ8BtAf3xteZvmzvjYh14wnqNjL8XVeDy2o9A==}
+ dependencies:
+ builtins: 4.1.0
+ dev: true
+
+ /imurmurhash/0.1.4:
+ resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
+ engines: {node: '>=0.8.19'}
+ dev: true
+
+ /indent-string/2.1.0:
+ resolution: {integrity: sha512-aqwDFWSgSgfRaEwao5lg5KEcVd/2a+D1rvoG7NdilmYz0NwRk6StWpWdz/Hpk34MKPpx7s8XxUqimfcQK6gGlg==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ repeating: 2.0.1
+ dev: true
+
+ /indent-string/4.0.0:
+ resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /inflight/1.0.6:
+ resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
+ dependencies:
+ once: 1.4.0
+ wrappy: 1.0.2
+
+ /inherits/2.0.4:
+ resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
+
+ /ini/1.3.8:
+ resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==}
+ dev: true
+
+ /inquirer/8.2.5:
+ resolution: {integrity: sha512-QAgPDQMEgrDssk1XiwwHoOGYF9BAbUcc1+j+FhEvaOt8/cKRqyLn0U5qA6F74fGhTMGxf92pOvPBeh29jQJDTQ==}
+ engines: {node: '>=12.0.0'}
+ dependencies:
+ ansi-escapes: 4.3.2
+ chalk: 4.1.2
+ cli-cursor: 3.1.0
+ cli-width: 3.0.0
+ external-editor: 3.1.0
+ figures: 3.2.0
+ lodash: 4.17.21
+ mute-stream: 0.0.8
+ ora: 5.4.1
+ run-async: 2.4.1
+ rxjs: 7.8.0
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ through: 2.3.8
+ wrap-ansi: 7.0.0
+ dev: true
+
+ /internal-slot/1.0.5:
+ resolution: {integrity: sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ get-intrinsic: 1.2.0
+ has: 1.0.3
+ side-channel: 1.0.4
+ dev: true
+
+ /into-stream/3.1.0:
+ resolution: {integrity: sha512-TcdjPibTksa1NQximqep2r17ISRiNE9fwlfbg3F8ANdvP5/yrFTew86VcO//jk4QTaMlbjypPBq76HN2zaKfZQ==}
+ engines: {node: '>=4'}
+ dependencies:
+ from2: 2.3.0
+ p-is-promise: 1.1.0
+ dev: true
+
+ /is-accessor-descriptor/0.1.6:
+ resolution: {integrity: sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ kind-of: 3.2.2
+ dev: true
+
+ /is-accessor-descriptor/1.0.0:
+ resolution: {integrity: sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ kind-of: 6.0.3
+ dev: true
+
+ /is-array-buffer/3.0.2:
+ resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==}
+ dependencies:
+ call-bind: 1.0.2
+ get-intrinsic: 1.2.0
+ is-typed-array: 1.1.10
+ dev: true
+
+ /is-arrayish/0.2.1:
+ resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==}
+ dev: true
+
+ /is-bigint/1.0.4:
+ resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==}
+ dependencies:
+ has-bigints: 1.0.2
+ dev: true
+
+ /is-boolean-object/1.1.2:
+ resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ call-bind: 1.0.2
+ has-tostringtag: 1.0.0
+ dev: true
+
+ /is-buffer/1.1.6:
+ resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==}
+ dev: true
+
+ /is-callable/1.2.7:
+ resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==}
+ engines: {node: '>= 0.4'}
+ dev: true
+
+ /is-core-module/2.11.0:
+ resolution: {integrity: sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==}
+ dependencies:
+ has: 1.0.3
+ dev: true
+
+ /is-cwebp-readable/3.0.0:
+ resolution: {integrity: sha512-bpELc7/Q1/U5MWHn4NdHI44R3jxk0h9ew9ljzabiRl70/UIjL/ZAqRMb52F5+eke/VC8yTiv4Ewryo1fPWidvA==}
+ dependencies:
+ file-type: 10.11.0
+ dev: true
+
+ /is-data-descriptor/0.1.4:
+ resolution: {integrity: sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ kind-of: 3.2.2
+ dev: true
+
+ /is-data-descriptor/1.0.0:
+ resolution: {integrity: sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ kind-of: 6.0.3
+ dev: true
+
+ /is-date-object/1.0.5:
+ resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ has-tostringtag: 1.0.0
+ dev: true
+
+ /is-descriptor/0.1.6:
+ resolution: {integrity: sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ is-accessor-descriptor: 0.1.6
+ is-data-descriptor: 0.1.4
+ kind-of: 5.1.0
+ dev: true
+
+ /is-descriptor/1.0.2:
+ resolution: {integrity: sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ is-accessor-descriptor: 1.0.0
+ is-data-descriptor: 1.0.0
+ kind-of: 6.0.3
+ dev: true
+
+ /is-docker/2.2.1:
+ resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==}
+ engines: {node: '>=8'}
+ hasBin: true
+ dev: true
+
+ /is-extendable/0.1.1:
+ resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /is-extendable/1.0.1:
+ resolution: {integrity: sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ is-plain-object: 2.0.4
+ dev: true
+
+ /is-extglob/2.1.1:
+ resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /is-finite/1.1.0:
+ resolution: {integrity: sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /is-fullwidth-code-point/3.0.0:
+ resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
+ engines: {node: '>=8'}
+
+ /is-gif/3.0.0:
+ resolution: {integrity: sha512-IqJ/jlbw5WJSNfwQ/lHEDXF8rxhRgF6ythk2oiEvhpG29F704eX9NO6TvPfMiq9DrbwgcEDnETYNcZDPewQoVw==}
+ engines: {node: '>=6'}
+ dependencies:
+ file-type: 10.11.0
+ dev: true
+
+ /is-glob/4.0.3:
+ resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ is-extglob: 2.1.1
+ dev: true
+
+ /is-interactive/1.0.0:
+ resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /is-jpg/2.0.0:
+ resolution: {integrity: sha512-ODlO0ruzhkzD3sdynIainVP5eoOFNN85rxA1+cwwnPe4dKyX0r5+hxNO5XpCrxlHcmb9vkOit9mhRD2JVuimHg==}
+ engines: {node: '>=6'}
+ dev: true
+
+ /is-module/1.0.0:
+ resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==}
+ dev: true
+
+ /is-natural-number/4.0.1:
+ resolution: {integrity: sha512-Y4LTamMe0DDQIIAlaer9eKebAlDSV6huy+TWhJVPlzZh2o4tRP5SQWFlLn5N0To4mDD22/qdOq+veo1cSISLgQ==}
+ dev: true
+
+ /is-negative-zero/2.0.2:
+ resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==}
+ engines: {node: '>= 0.4'}
+ dev: true
+
+ /is-number-object/1.0.7:
+ resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ has-tostringtag: 1.0.0
+ dev: true
+
+ /is-number/3.0.0:
+ resolution: {integrity: sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ kind-of: 3.2.2
+ dev: true
+
+ /is-number/7.0.0:
+ resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
+ engines: {node: '>=0.12.0'}
+ dev: true
+
+ /is-obj/1.0.1:
+ resolution: {integrity: sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /is-obj/2.0.0:
+ resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /is-object/1.0.2:
+ resolution: {integrity: sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA==}
+ dev: true
+
+ /is-path-inside/3.0.3:
+ resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /is-plain-obj/1.1.0:
+ resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /is-plain-object/2.0.4:
+ resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ isobject: 3.0.1
+ dev: true
+
+ /is-plain-object/3.0.1:
+ resolution: {integrity: sha512-Xnpx182SBMrr/aBik8y+GuR4U1L9FqMSojwDQwPMmxyC6bvEqly9UBCxhauBF5vNh2gwWJNX6oDV7O+OM4z34g==}
+ engines: {node: '>=0.10.0'}
+ dev: false
+
+ /is-plain-object/5.0.0:
+ resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==}
+ engines: {node: '>=0.10.0'}
+ dev: false
+
+ /is-png/2.0.0:
+ resolution: {integrity: sha512-4KPGizaVGj2LK7xwJIz8o5B2ubu1D/vcQsgOGFEDlpcvgZHto4gBnyd0ig7Ws+67ixmwKoNmu0hYnpo6AaKb5g==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /is-regex/1.1.4:
+ resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ call-bind: 1.0.2
+ has-tostringtag: 1.0.0
+ dev: true
+
+ /is-regexp/1.0.0:
+ resolution: {integrity: sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /is-retry-allowed/1.2.0:
+ resolution: {integrity: sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /is-shared-array-buffer/1.0.2:
+ resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==}
+ dependencies:
+ call-bind: 1.0.2
+ dev: true
+
+ /is-stream/1.1.0:
+ resolution: {integrity: sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /is-stream/2.0.1:
+ resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /is-string/1.0.7:
+ resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ has-tostringtag: 1.0.0
+ dev: true
+
+ /is-svg/4.4.0:
+ resolution: {integrity: sha512-v+AgVwiK5DsGtT9ng+m4mClp6zDAmwrW8nZi6Gg15qzvBnRWWdfWA1TGaXyCDnWq5g5asofIgMVl3PjKxvk1ug==}
+ engines: {node: '>=6'}
+ dependencies:
+ fast-xml-parser: 4.1.3
+ dev: true
+
+ /is-symbol/1.0.4:
+ resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ has-symbols: 1.0.3
+ dev: true
+
+ /is-text-path/1.0.1:
+ resolution: {integrity: sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ text-extensions: 1.9.0
+ dev: true
+
+ /is-typed-array/1.1.10:
+ resolution: {integrity: sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ available-typed-arrays: 1.0.5
+ call-bind: 1.0.2
+ for-each: 0.3.3
+ gopd: 1.0.1
+ has-tostringtag: 1.0.0
+ dev: true
+
+ /is-unicode-supported/0.1.0:
+ resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==}
+ engines: {node: '>=10'}
+ dev: true
+
+ /is-utf8/0.2.1:
+ resolution: {integrity: sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==}
+ dev: true
+
+ /is-weakref/1.0.2:
+ resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==}
+ dependencies:
+ call-bind: 1.0.2
+ dev: true
+
+ /is-what/3.14.1:
+ resolution: {integrity: sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==}
+ dev: true
+
+ /is-windows/1.0.2:
+ resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /is-wsl/2.2.0:
+ resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==}
+ engines: {node: '>=8'}
+ dependencies:
+ is-docker: 2.2.1
+ dev: true
+
+ /isarray/1.0.0:
+ resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==}
+
+ /isexe/2.0.0:
+ resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
+ dev: true
+
+ /isobject/2.1.0:
+ resolution: {integrity: sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ isarray: 1.0.0
+ dev: true
+
+ /isobject/3.0.1:
+ resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /isurl/1.0.0:
+ resolution: {integrity: sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==}
+ engines: {node: '>= 4'}
+ dependencies:
+ has-to-string-tag-x: 1.4.1
+ is-object: 1.0.2
+ dev: true
+
+ /jake/10.8.5:
+ resolution: {integrity: sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==}
+ engines: {node: '>=10'}
+ hasBin: true
+ dependencies:
+ async: 3.2.4
+ chalk: 4.1.2
+ filelist: 1.0.4
+ minimatch: 3.1.2
+ dev: true
+
+ /jest-worker/26.6.2:
+ resolution: {integrity: sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==}
+ engines: {node: '>= 10.13.0'}
+ dependencies:
+ '@types/node': 18.15.0
+ merge-stream: 2.0.0
+ supports-color: 7.2.0
+ dev: true
+
+ /jiti/1.17.2:
+ resolution: {integrity: sha512-Xf0nU8+8wuiQpLcqdb2HRyHqYwGk2Pd+F7kstyp20ZuqTyCmB9dqpX2NxaxFc1kovraa2bG6c1RL3W7XfapiZg==}
+ hasBin: true
+ dev: true
+
+ /jpegtran-bin/5.0.2:
+ resolution: {integrity: sha512-4FSmgIcr8d5+V6T1+dHbPZjaFH0ogVyP4UVsE+zri7S9YLO4qAT2our4IN3sW3STVgNTbqPermdIgt2XuAJ4EA==}
+ engines: {node: '>=10'}
+ hasBin: true
+ requiresBuild: true
+ dependencies:
+ bin-build: 3.0.0
+ bin-wrapper: /bin-wrapper-china/0.1.0
+ logalot: 2.1.0
+ dev: true
+
+ /jpegtran-bin/6.0.1:
+ resolution: {integrity: sha512-WohhhHhqe22de7PU8hXs6Sr5d4BAvkrfA93NR5tGlHyPnFLgvEW/bH+q7fv65JgoiQDsd7SBwwQ/OGRBivU3Mw==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+ hasBin: true
+ requiresBuild: true
+ dependencies:
+ bin-build: 3.0.0
+ bin-wrapper: /bin-wrapper-china/0.1.0
+ dev: true
+
+ /js-base64/2.6.4:
+ resolution: {integrity: sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==}
+ dev: true
+
+ /js-base64/3.7.5:
+ resolution: {integrity: sha512-3MEt5DTINKqfScXKfJFrRbxkrnk2AxPWGBL/ycjz4dK8iqiSJ06UxD8jh8xuh6p10TX4t2+7FsBYVxxQbMg+qA==}
+ dev: false
+
+ /js-sdsl/4.3.0:
+ resolution: {integrity: sha512-mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ==}
+ dev: true
+
+ /js-tokens/4.0.0:
+ resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
+
+ /js-yaml/4.1.0:
+ resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
+ hasBin: true
+ dependencies:
+ argparse: 2.0.1
+ dev: true
+
+ /jsesc/0.5.0:
+ resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==}
+ hasBin: true
+ dev: true
+
+ /jsesc/2.5.2:
+ resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==}
+ engines: {node: '>=4'}
+ hasBin: true
+ dev: true
+
+ /json-buffer/3.0.0:
+ resolution: {integrity: sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==}
+ dev: true
+
+ /json-parse-better-errors/1.0.2:
+ resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==}
+ dev: true
+
+ /json-parse-even-better-errors/2.3.1:
+ resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==}
+ dev: true
+
+ /json-schema-traverse/0.4.1:
+ resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
+ dev: true
+
+ /json-schema-traverse/1.0.0:
+ resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==}
+ dev: true
+
+ /json-schema/0.4.0:
+ resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==}
+ dev: true
+
+ /json-stable-stringify-without-jsonify/1.0.1:
+ resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
+ dev: true
+
+ /json-stringify-safe/5.0.1:
+ resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==}
+ dev: true
+
+ /json5/1.0.2:
+ resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==}
+ hasBin: true
+ dependencies:
+ minimist: 1.2.8
+ dev: true
+
+ /json5/2.2.3:
+ resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==}
+ engines: {node: '>=6'}
+ hasBin: true
+ dev: true
+
+ /jsonfile/6.1.0:
+ resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==}
+ dependencies:
+ universalify: 2.0.0
+ optionalDependencies:
+ graceful-fs: 4.2.10
+ dev: true
+
+ /jsonparse/1.3.1:
+ resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==}
+ engines: {'0': node >= 0.2.0}
+ dev: true
+
+ /jsonpointer/5.0.1:
+ resolution: {integrity: sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /jszip/3.10.1:
+ resolution: {integrity: sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==}
+ dependencies:
+ lie: 3.3.0
+ pako: 1.0.11
+ readable-stream: 2.3.8
+ setimmediate: 1.0.5
+ dev: false
+
+ /junk/3.1.0:
+ resolution: {integrity: sha512-pBxcB3LFc8QVgdggvZWyeys+hnrNWg4OcZIU/1X59k5jQdLBlCsYGRQaz234SqoRLTCgMH00fY0xRJH+F9METQ==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /keyv/3.0.0:
+ resolution: {integrity: sha512-eguHnq22OE3uVoSYG0LVWNP+4ppamWr9+zWBe1bsNcovIMy6huUJFPgy4mGwCd/rnl3vOLGW1MTlu4c57CT1xA==}
+ dependencies:
+ json-buffer: 3.0.0
+ dev: true
+
+ /kind-of/3.2.2:
+ resolution: {integrity: sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ is-buffer: 1.1.6
+ dev: true
+
+ /kind-of/4.0.0:
+ resolution: {integrity: sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ is-buffer: 1.1.6
+ dev: true
+
+ /kind-of/5.1.0:
+ resolution: {integrity: sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /kind-of/6.0.3:
+ resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /kolorist/1.7.0:
+ resolution: {integrity: sha512-ymToLHqL02udwVdbkowNpzjFd6UzozMtshPQKVi5k1EjKRqKqBrOnE9QbLEb0/pV76SAiIT13hdL8R6suc+f3g==}
+ dev: true
+
+ /lazystream/1.0.1:
+ resolution: {integrity: sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==}
+ engines: {node: '>= 0.6.3'}
+ dependencies:
+ readable-stream: 2.3.8
+ dev: false
+
+ /less/4.1.3:
+ resolution: {integrity: sha512-w16Xk/Ta9Hhyei0Gpz9m7VS8F28nieJaL/VyShID7cYvP6IL5oHeL6p4TXSDJqZE/lNv0oJ2pGVjJsRkfwm5FA==}
+ engines: {node: '>=6'}
+ hasBin: true
+ dependencies:
+ copy-anything: 2.0.6
+ parse-node-version: 1.0.1
+ tslib: 2.5.0
+ optionalDependencies:
+ errno: 0.1.8
+ graceful-fs: 4.2.10
+ image-size: 0.5.5
+ make-dir: 2.1.0
+ mime: 1.6.0
+ needle: 3.2.0
+ source-map: 0.6.1
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /leven/3.1.0:
+ resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==}
+ engines: {node: '>=6'}
+ dev: true
+
+ /levn/0.4.1:
+ resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
+ engines: {node: '>= 0.8.0'}
+ dependencies:
+ prelude-ls: 1.2.1
+ type-check: 0.4.0
+ dev: true
+
+ /lie/3.3.0:
+ resolution: {integrity: sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==}
+ dependencies:
+ immediate: 3.0.6
+ dev: false
+
+ /lines-and-columns/1.2.4:
+ resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
+ dev: true
+
+ /listenercount/1.0.1:
+ resolution: {integrity: sha512-3mk/Zag0+IJxeDrxSgaDPy4zZ3w05PRZeJNnlWhzFz5OkX49J4krc+A8X2d2M69vGMBEX0uyl8M+W+8gH+kBqQ==}
+ dev: false
+
+ /load-json-file/1.1.0:
+ resolution: {integrity: sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ graceful-fs: 4.2.10
+ parse-json: 2.2.0
+ pify: 2.3.0
+ pinkie-promise: 2.0.1
+ strip-bom: 2.0.0
+ dev: true
+
+ /load-json-file/4.0.0:
+ resolution: {integrity: sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==}
+ engines: {node: '>=4'}
+ dependencies:
+ graceful-fs: 4.2.10
+ parse-json: 4.0.0
+ pify: 3.0.0
+ strip-bom: 3.0.0
+ dev: true
+
+ /loader-utils/1.4.2:
+ resolution: {integrity: sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==}
+ engines: {node: '>=4.0.0'}
+ dependencies:
+ big.js: 5.2.2
+ emojis-list: 3.0.0
+ json5: 1.0.2
+ dev: true
+
+ /locate-path/2.0.0:
+ resolution: {integrity: sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==}
+ engines: {node: '>=4'}
+ dependencies:
+ p-locate: 2.0.0
+ path-exists: 3.0.0
+ dev: true
+
+ /locate-path/5.0.0:
+ resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==}
+ engines: {node: '>=8'}
+ dependencies:
+ p-locate: 4.1.0
+
+ /locate-path/6.0.0:
+ resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
+ engines: {node: '>=10'}
+ dependencies:
+ p-locate: 5.0.0
+ dev: true
+
+ /lodash-es/4.17.21:
+ resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==}
+ dev: false
+
+ /lodash.debounce/4.0.8:
+ resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==}
+ dev: true
+
+ /lodash.defaults/4.2.0:
+ resolution: {integrity: sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==}
+ dev: false
+
+ /lodash.difference/4.5.0:
+ resolution: {integrity: sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA==}
+ dev: false
+
+ /lodash.escaperegexp/4.1.2:
+ resolution: {integrity: sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw==}
+ dev: false
+
+ /lodash.flatten/4.4.0:
+ resolution: {integrity: sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==}
+ dev: false
+
+ /lodash.groupby/4.6.0:
+ resolution: {integrity: sha512-5dcWxm23+VAoz+awKmBaiBvzox8+RqMgFhi7UvX9DHZr2HdxHXM/Wrf8cfKpsW37RNrvtPn6hSwNqurSILbmJw==}
+ dev: false
+
+ /lodash.isboolean/3.0.3:
+ resolution: {integrity: sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==}
+ dev: false
+
+ /lodash.isequal/4.5.0:
+ resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==}
+ dev: false
+
+ /lodash.isfunction/3.0.9:
+ resolution: {integrity: sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==}
+ dev: false
+
+ /lodash.ismatch/4.4.0:
+ resolution: {integrity: sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g==}
+ dev: true
+
+ /lodash.isnil/4.0.0:
+ resolution: {integrity: sha512-up2Mzq3545mwVnMhTDMdfoG1OurpA/s5t88JmQX809eH3C8491iu2sfKhTfhQtKY78oPNhiaHJUpT/dUDAAtng==}
+ dev: false
+
+ /lodash.isplainobject/4.0.6:
+ resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==}
+ dev: false
+
+ /lodash.isundefined/3.0.1:
+ resolution: {integrity: sha512-MXB1is3s899/cD8jheYYE2V9qTHwKvt+npCwpD+1Sxm3Q3cECXCiYHjeHWXNwr6Q0SOBPrYUDxendrO6goVTEA==}
+ dev: false
+
+ /lodash.merge/4.6.2:
+ resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
+ dev: true
+
+ /lodash.sortby/4.7.0:
+ resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==}
+ dev: true
+
+ /lodash.union/4.6.0:
+ resolution: {integrity: sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw==}
+ dev: false
+
+ /lodash.uniq/4.5.0:
+ resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==}
+ dev: false
+
+ /lodash/4.17.21:
+ resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
+
+ /log-symbols/4.1.0:
+ resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==}
+ engines: {node: '>=10'}
+ dependencies:
+ chalk: 4.1.2
+ is-unicode-supported: 0.1.0
+ dev: true
+
+ /logalot/2.1.0:
+ resolution: {integrity: sha512-Ah4CgdSRfeCJagxQhcVNMi9BfGYyEKLa6d7OA6xSbld/Hg3Cf2QiOa1mDpmG7Ve8LOH6DN3mdttzjQAvWTyVkw==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ figures: 1.7.0
+ squeak: 1.3.0
+ dev: true
+
+ /longest/1.0.1:
+ resolution: {integrity: sha512-k+yt5n3l48JU4k8ftnKG6V7u32wyH2NfKzeMto9F/QRE0amxy/LayxwlvjjkZEIzqR+19IrtFO8p5kB9QaYUFg==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /loose-envify/1.4.0:
+ resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
+ hasBin: true
+ dependencies:
+ js-tokens: 4.0.0
+ dev: false
+
+ /loud-rejection/1.6.0:
+ resolution: {integrity: sha512-RPNliZOFkqFumDhvYqOaNY4Uz9oJM2K9tC6JWsJJsNdhuONW4LQHRBpb0qf4pJApVffI5N39SwzWZJuEhfd7eQ==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ currently-unhandled: 0.4.1
+ signal-exit: 3.0.7
+ dev: true
+
+ /lower-case/2.0.2:
+ resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==}
+ dependencies:
+ tslib: 2.5.0
+ dev: true
+
+ /lowercase-keys/1.0.0:
+ resolution: {integrity: sha512-RPlX0+PHuvxVDZ7xX+EBVAp4RsVxP/TdDSN2mJYdiq1Lc4Hz7EUSjUI7RZrKKlmrIzVhf6Jo2stj7++gVarS0A==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /lowercase-keys/1.0.1:
+ resolution: {integrity: sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /lpad-align/1.1.2:
+ resolution: {integrity: sha512-MMIcFmmR9zlGZtBcFOows6c2COMekHCIFJz3ew/rRpKZ1wR4mXDPzvcVqLarux8M33X4TPSq2Jdw8WJj0q0KbQ==}
+ engines: {node: '>=0.10.0'}
+ hasBin: true
+ dependencies:
+ get-stdin: 4.0.1
+ indent-string: 2.1.0
+ longest: 1.0.1
+ meow: 3.7.0
+ dev: true
+
+ /lru-cache/4.1.5:
+ resolution: {integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==}
+ dependencies:
+ pseudomap: 1.0.2
+ yallist: 2.1.2
+ dev: true
+
+ /lru-cache/5.1.1:
+ resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
+ dependencies:
+ yallist: 3.1.1
+ dev: true
+
+ /lru-cache/6.0.0:
+ resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==}
+ engines: {node: '>=10'}
+ dependencies:
+ yallist: 4.0.0
+ dev: true
+
+ /magic-string/0.25.9:
+ resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==}
+ dependencies:
+ sourcemap-codec: 1.4.8
+
+ /magic-string/0.26.7:
+ resolution: {integrity: sha512-hX9XH3ziStPoPhJxLq1syWuZMxbDvGNbVchfrdCtanC7D13888bMFow61x8axrx+GfHLtVeAx2kxL7tTGRl+Ow==}
+ engines: {node: '>=12'}
+ dependencies:
+ sourcemap-codec: 1.4.8
+ dev: true
+
+ /magic-string/0.27.0:
+ resolution: {integrity: sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==}
+ engines: {node: '>=12'}
+ dependencies:
+ '@jridgewell/sourcemap-codec': 1.4.14
+ dev: true
+
+ /make-dir/1.3.0:
+ resolution: {integrity: sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==}
+ engines: {node: '>=4'}
+ dependencies:
+ pify: 3.0.0
+ dev: true
+
+ /make-dir/2.1.0:
+ resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==}
+ engines: {node: '>=6'}
+ requiresBuild: true
+ dependencies:
+ pify: 4.0.1
+ semver: 5.7.1
+ dev: true
+ optional: true
+
+ /make-dir/3.1.0:
+ resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==}
+ engines: {node: '>=8'}
+ dependencies:
+ semver: 6.3.0
+ dev: true
+
+ /map-cache/0.2.2:
+ resolution: {integrity: sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /map-obj/1.0.1:
+ resolution: {integrity: sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /map-obj/4.3.0:
+ resolution: {integrity: sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /map-visit/1.0.0:
+ resolution: {integrity: sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ object-visit: 1.0.1
+ dev: true
+
+ /mdn-data/2.0.14:
+ resolution: {integrity: sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==}
+ dev: true
+
+ /meow/3.7.0:
+ resolution: {integrity: sha512-TNdwZs0skRlpPpCUK25StC4VH+tP5GgeY1HQOOGP+lQ2xtdkN2VtT/5tiX9k3IWpkBPV9b3LsAWXn4GGi/PrSA==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ camelcase-keys: 2.1.0
+ decamelize: 1.2.0
+ loud-rejection: 1.6.0
+ map-obj: 1.0.1
+ minimist: 1.2.8
+ normalize-package-data: 2.5.0
+ object-assign: 4.1.1
+ read-pkg-up: 1.0.1
+ redent: 1.0.0
+ trim-newlines: 1.0.0
+ dev: true
+
+ /meow/8.1.2:
+ resolution: {integrity: sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==}
+ engines: {node: '>=10'}
+ dependencies:
+ '@types/minimist': 1.2.2
+ camelcase-keys: 6.2.2
+ decamelize-keys: 1.1.1
+ hard-rejection: 2.1.0
+ minimist-options: 4.1.0
+ normalize-package-data: 3.0.3
+ read-pkg-up: 7.0.1
+ redent: 3.0.0
+ trim-newlines: 3.0.1
+ type-fest: 0.18.1
+ yargs-parser: 20.2.9
+ dev: true
+
+ /merge-options/1.0.1:
+ resolution: {integrity: sha512-iuPV41VWKWBIOpBsjoxjDZw8/GbSfZ2mk7N1453bwMrfzdrIk7EzBd+8UVR6rkw67th7xnk9Dytl3J+lHPdxvg==}
+ engines: {node: '>=4'}
+ dependencies:
+ is-plain-obj: 1.1.0
+ dev: true
+
+ /merge-stream/2.0.0:
+ resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==}
+ dev: true
+
+ /merge2/1.4.1:
+ resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
+ engines: {node: '>= 8'}
+ dev: true
+
+ /micromatch/3.1.0:
+ resolution: {integrity: sha512-3StSelAE+hnRvMs8IdVW7Uhk8CVed5tp+kLLGlBP6WiRAXS21GPGu/Nat4WNPXj2Eoc24B02SaeoyozPMfj0/g==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ arr-diff: 4.0.0
+ array-unique: 0.3.2
+ braces: 2.3.2
+ define-property: 1.0.0
+ extend-shallow: 2.0.1
+ extglob: 2.0.4
+ fragment-cache: 0.2.1
+ kind-of: 5.1.0
+ nanomatch: 1.2.13
+ object.pick: 1.3.0
+ regex-not: 1.0.2
+ snapdragon: 0.8.2
+ to-regex: 3.0.2
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /micromatch/4.0.5:
+ resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==}
+ engines: {node: '>=8.6'}
+ dependencies:
+ braces: 3.0.2
+ picomatch: 2.3.1
+ dev: true
+
+ /mime-db/1.52.0:
+ resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
+ engines: {node: '>= 0.6'}
+ dev: true
+
+ /mime/1.6.0:
+ resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==}
+ engines: {node: '>=4'}
+ hasBin: true
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /mimic-fn/2.1.0:
+ resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==}
+ engines: {node: '>=6'}
+ dev: true
+
+ /mimic-response/1.0.1:
+ resolution: {integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==}
+ engines: {node: '>=4'}
+ dev: true
+
+ /min-indent/1.0.1:
+ resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==}
+ engines: {node: '>=4'}
+ dev: true
+
+ /minimatch/3.1.2:
+ resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
+ dependencies:
+ brace-expansion: 1.1.11
+
+ /minimatch/5.1.6:
+ resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==}
+ engines: {node: '>=10'}
+ dependencies:
+ brace-expansion: 2.0.1
+
+ /minimatch/6.2.0:
+ resolution: {integrity: sha512-sauLxniAmvnhhRjFwPNnJKaPFYyddAgbYdeUpHULtCT/GhzdCx/MDNy+Y40lBxTQUrMzDE8e0S43Z5uqfO0REg==}
+ engines: {node: '>=10'}
+ dependencies:
+ brace-expansion: 2.0.1
+ dev: true
+
+ /minimist-options/4.1.0:
+ resolution: {integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==}
+ engines: {node: '>= 6'}
+ dependencies:
+ arrify: 1.0.1
+ is-plain-obj: 1.1.0
+ kind-of: 6.0.3
+ dev: true
+
+ /minimist/1.2.8:
+ resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
+
+ /mixin-deep/1.3.2:
+ resolution: {integrity: sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ for-in: 1.0.2
+ is-extendable: 1.0.1
+ dev: true
+
+ /mkdirp/0.5.6:
+ resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==}
+ hasBin: true
+ dependencies:
+ minimist: 1.2.8
+ dev: false
+
+ /modify-values/1.0.1:
+ resolution: {integrity: sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /mozjpeg/7.1.1:
+ resolution: {integrity: sha512-iIDxWvzhWvLC9mcRJ1uSkiKaj4drF58oCqK2bITm5c2Jt6cJ8qQjSSru2PCaysG+hLIinryj8mgz5ZJzOYTv1A==}
+ engines: {node: '>=10'}
+ hasBin: true
+ requiresBuild: true
+ dependencies:
+ bin-build: 3.0.0
+ bin-wrapper: /bin-wrapper-china/0.1.0
+ dev: true
+
+ /ms/2.0.0:
+ resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==}
+ dev: true
+
+ /ms/2.1.2:
+ resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
+ dev: true
+
+ /ms/2.1.3:
+ resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
+ dev: true
+ optional: true
+
+ /muggle-string/0.2.2:
+ resolution: {integrity: sha512-YVE1mIJ4VpUMqZObFndk9CJu6DBJR/GB13p3tXuNbwD4XExaI5EOuRl6BHeIDxIqXZVxSfAC+y6U1Z/IxCfKUg==}
+ dev: true
+
+ /mute-stream/0.0.8:
+ resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==}
+ dev: true
+
+ /nanoid/3.3.4:
+ resolution: {integrity: sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==}
+ engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
+ hasBin: true
+
+ /nanomatch/1.2.13:
+ resolution: {integrity: sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ arr-diff: 4.0.0
+ array-unique: 0.3.2
+ define-property: 2.0.2
+ extend-shallow: 3.0.2
+ fragment-cache: 0.2.1
+ is-windows: 1.0.2
+ kind-of: 6.0.3
+ object.pick: 1.3.0
+ regex-not: 1.0.2
+ snapdragon: 0.8.2
+ to-regex: 3.0.2
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /nanopop/2.2.0:
+ resolution: {integrity: sha512-E9JaHcxh3ere8/BEZHAcnuD10RluTSPyTToBvoFWS9/7DcCx6gyKjbn7M7Bx7E1veCxCuY1iO6h4+gdAf1j73Q==}
+ dev: false
+
+ /natural-compare-lite/1.4.0:
+ resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==}
+ dev: true
+
+ /natural-compare/1.4.0:
+ resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
+ dev: true
+
+ /needle/3.2.0:
+ resolution: {integrity: sha512-oUvzXnyLiVyVGoianLijF9O/RecZUf7TkBfimjGrLM4eQhXyeJwM6GeAWccwfQ9aa4gMCZKqhAOuLaMIcQxajQ==}
+ engines: {node: '>= 4.4.x'}
+ hasBin: true
+ requiresBuild: true
+ dependencies:
+ debug: 3.2.7
+ iconv-lite: 0.6.3
+ sax: 1.2.4
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+ optional: true
+
+ /neo-async/2.6.2:
+ resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==}
+ dev: true
+
+ /nice-try/1.0.5:
+ resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==}
+ dev: true
+
+ /no-case/3.0.4:
+ resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==}
+ dependencies:
+ lower-case: 2.0.2
+ tslib: 2.5.0
+ dev: true
+
+ /node-fetch/2.6.7:
+ resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==}
+ engines: {node: 4.x || >=6.0.0}
+ peerDependencies:
+ encoding: ^0.1.0
+ peerDependenciesMeta:
+ encoding:
+ optional: true
+ dependencies:
+ whatwg-url: 5.0.0
+ dev: true
+
+ /node-html-parser/5.4.2:
+ resolution: {integrity: sha512-RaBPP3+51hPne/OolXxcz89iYvQvKOydaqoePpOgXcrOKZhjVIzmpKZz+Hd/RBO2/zN2q6CNJhQzucVz+u3Jyw==}
+ dependencies:
+ css-select: 4.3.0
+ he: 1.2.0
+ dev: true
+
+ /node-releases/2.0.10:
+ resolution: {integrity: sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==}
+ dev: true
+
+ /normalize-package-data/2.5.0:
+ resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==}
+ dependencies:
+ hosted-git-info: 2.8.9
+ resolve: 1.22.1
+ semver: 5.7.1
+ validate-npm-package-license: 3.0.4
+ dev: true
+
+ /normalize-package-data/3.0.3:
+ resolution: {integrity: sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==}
+ engines: {node: '>=10'}
+ dependencies:
+ hosted-git-info: 4.1.0
+ is-core-module: 2.11.0
+ semver: 7.3.8
+ validate-npm-package-license: 3.0.4
+ dev: true
+
+ /normalize-path/3.0.0:
+ resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
+ engines: {node: '>=0.10.0'}
+ dev: false
+
+ /normalize-range/0.1.2:
+ resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /normalize-url/2.0.1:
+ resolution: {integrity: sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw==}
+ engines: {node: '>=4'}
+ dependencies:
+ prepend-http: 2.0.0
+ query-string: 5.1.1
+ sort-keys: 2.0.0
+ dev: true
+
+ /npm-conf/1.1.3:
+ resolution: {integrity: sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw==}
+ engines: {node: '>=4'}
+ dependencies:
+ config-chain: 1.1.13
+ pify: 3.0.0
+ dev: true
+
+ /npm-run-path/2.0.2:
+ resolution: {integrity: sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==}
+ engines: {node: '>=4'}
+ dependencies:
+ path-key: 2.0.1
+ dev: true
+
+ /npm-run-path/4.0.1:
+ resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==}
+ engines: {node: '>=8'}
+ dependencies:
+ path-key: 3.1.1
+ dev: true
+
+ /nprogress/0.2.0:
+ resolution: {integrity: sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==}
+ dev: false
+
+ /nth-check/2.1.1:
+ resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==}
+ dependencies:
+ boolbase: 1.0.0
+ dev: true
+
+ /object-assign/4.1.1:
+ resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /object-copy/0.1.0:
+ resolution: {integrity: sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ copy-descriptor: 0.1.1
+ define-property: 0.2.5
+ kind-of: 3.2.2
+ dev: true
+
+ /object-inspect/1.12.3:
+ resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==}
+
+ /object-keys/1.1.1:
+ resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==}
+ engines: {node: '>= 0.4'}
+ dev: true
+
+ /object-visit/1.0.1:
+ resolution: {integrity: sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ isobject: 3.0.1
+ dev: true
+
+ /object.assign/4.1.4:
+ resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ call-bind: 1.0.2
+ define-properties: 1.2.0
+ has-symbols: 1.0.3
+ object-keys: 1.1.1
+ dev: true
+
+ /object.pick/1.3.0:
+ resolution: {integrity: sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ isobject: 3.0.1
+ dev: true
+
+ /once/1.4.0:
+ resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
+ dependencies:
+ wrappy: 1.0.2
+
+ /onetime/5.1.2:
+ resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==}
+ engines: {node: '>=6'}
+ dependencies:
+ mimic-fn: 2.1.0
+ dev: true
+
+ /open/8.4.2:
+ resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==}
+ engines: {node: '>=12'}
+ dependencies:
+ define-lazy-prop: 2.0.0
+ is-docker: 2.2.1
+ is-wsl: 2.2.0
+ dev: true
+
+ /optionator/0.9.1:
+ resolution: {integrity: sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==}
+ engines: {node: '>= 0.8.0'}
+ dependencies:
+ deep-is: 0.1.4
+ fast-levenshtein: 2.0.6
+ levn: 0.4.1
+ prelude-ls: 1.2.1
+ type-check: 0.4.0
+ word-wrap: 1.2.3
+ dev: true
+
+ /optipng-bin/7.0.1:
+ resolution: {integrity: sha512-W99mpdW7Nt2PpFiaO+74pkht7KEqkXkeRomdWXfEz3SALZ6hns81y/pm1dsGZ6ItUIfchiNIP6ORDr1zETU1jA==}
+ engines: {node: '>=10'}
+ hasBin: true
+ requiresBuild: true
+ dependencies:
+ bin-build: 3.0.0
+ bin-wrapper: /bin-wrapper-china/0.1.0
+ dev: true
+
+ /ora/5.4.1:
+ resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==}
+ engines: {node: '>=10'}
+ dependencies:
+ bl: 4.1.0
+ chalk: 4.1.2
+ cli-cursor: 3.1.0
+ cli-spinners: 2.7.0
+ is-interactive: 1.0.0
+ is-unicode-supported: 0.1.0
+ log-symbols: 4.1.0
+ strip-ansi: 6.0.1
+ wcwidth: 1.0.1
+ dev: true
+
+ /os-filter-obj/2.0.0:
+ resolution: {integrity: sha512-uksVLsqG3pVdzzPvmAHpBK0wKxYItuzZr7SziusRPoz67tGV8rL1szZ6IdeUrbqLjGDwApBtN29eEE3IqGHOjg==}
+ engines: {node: '>=4'}
+ dependencies:
+ arch: 2.2.0
+ dev: true
+
+ /os-tmpdir/1.0.2:
+ resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /ow/0.17.0:
+ resolution: {integrity: sha512-i3keDzDQP5lWIe4oODyDFey1qVrq2hXKTuTH2VpqwpYtzPiKZt2ziRI4NBQmgW40AnV5Euz17OyWweCb+bNEQA==}
+ engines: {node: '>=10'}
+ dependencies:
+ type-fest: 0.11.0
+ dev: true
+
+ /p-cancelable/0.3.0:
+ resolution: {integrity: sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw==}
+ engines: {node: '>=4'}
+ dev: true
+
+ /p-cancelable/0.4.1:
+ resolution: {integrity: sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ==}
+ engines: {node: '>=4'}
+ dev: true
+
+ /p-event/1.3.0:
+ resolution: {integrity: sha512-hV1zbA7gwqPVFcapfeATaNjQ3J0NuzorHPyG8GPL9g/Y/TplWVBVoCKCXL6Ej2zscrCEv195QNWJXuBH6XZuzA==}
+ engines: {node: '>=4'}
+ dependencies:
+ p-timeout: 1.2.1
+ dev: true
+
+ /p-event/2.3.1:
+ resolution: {integrity: sha512-NQCqOFhbpVTMX4qMe8PF8lbGtzZ+LCiN7pcNrb/413Na7+TRoe1xkKUzuWa/YEJdGQ0FvKtj35EEbDoVPO2kbA==}
+ engines: {node: '>=6'}
+ dependencies:
+ p-timeout: 2.0.1
+ dev: true
+
+ /p-finally/1.0.0:
+ resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==}
+ engines: {node: '>=4'}
+ dev: true
+
+ /p-is-promise/1.1.0:
+ resolution: {integrity: sha512-zL7VE4JVS2IFSkR2GQKDSPEVxkoH43/p7oEnwpdCndKYJO0HVeRB7fA8TJwuLOTBREtK0ea8eHaxdwcpob5dmg==}
+ engines: {node: '>=4'}
+ dev: true
+
+ /p-limit/1.3.0:
+ resolution: {integrity: sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==}
+ engines: {node: '>=4'}
+ dependencies:
+ p-try: 1.0.0
+ dev: true
+
+ /p-limit/2.3.0:
+ resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==}
+ engines: {node: '>=6'}
+ dependencies:
+ p-try: 2.2.0
+
+ /p-limit/3.1.0:
+ resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
+ engines: {node: '>=10'}
+ dependencies:
+ yocto-queue: 0.1.0
+ dev: true
+
+ /p-locate/2.0.0:
+ resolution: {integrity: sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==}
+ engines: {node: '>=4'}
+ dependencies:
+ p-limit: 1.3.0
+ dev: true
+
+ /p-locate/4.1.0:
+ resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==}
+ engines: {node: '>=8'}
+ dependencies:
+ p-limit: 2.3.0
+
+ /p-locate/5.0.0:
+ resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
+ engines: {node: '>=10'}
+ dependencies:
+ p-limit: 3.1.0
+ dev: true
+
+ /p-map-series/1.0.0:
+ resolution: {integrity: sha512-4k9LlvY6Bo/1FcIdV33wqZQES0Py+iKISU9Uc8p8AjWoZPnFKMpVIVD3s0EYn4jzLh1I+WeUZkJ0Yoa4Qfw3Kg==}
+ engines: {node: '>=4'}
+ dependencies:
+ p-reduce: 1.0.0
+ dev: true
+
+ /p-pipe/3.1.0:
+ resolution: {integrity: sha512-08pj8ATpzMR0Y80x50yJHn37NF6vjrqHutASaX5LiH5npS9XPvrUmscd9MF5R4fuYRHOxQR1FfMIlF7AzwoPqw==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /p-reduce/1.0.0:
+ resolution: {integrity: sha512-3Tx1T3oM1xO/Y8Gj0sWyE78EIJZ+t+aEmXUdvQgvGmSMri7aPTHoovbXEreWKkL5j21Er60XAWLTzKbAKYOujQ==}
+ engines: {node: '>=4'}
+ dev: true
+
+ /p-timeout/1.2.1:
+ resolution: {integrity: sha512-gb0ryzr+K2qFqFv6qi3khoeqMZF/+ajxQipEF6NteZVnvz9tzdsfAVj3lYtn1gAXvH5lfLwfxEII799gt/mRIA==}
+ engines: {node: '>=4'}
+ dependencies:
+ p-finally: 1.0.0
+ dev: true
+
+ /p-timeout/2.0.1:
+ resolution: {integrity: sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA==}
+ engines: {node: '>=4'}
+ dependencies:
+ p-finally: 1.0.0
+ dev: true
+
+ /p-try/1.0.0:
+ resolution: {integrity: sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==}
+ engines: {node: '>=4'}
+ dev: true
+
+ /p-try/2.2.0:
+ resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==}
+ engines: {node: '>=6'}
+
+ /pako/1.0.11:
+ resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==}
+ dev: false
+
+ /param-case/3.0.4:
+ resolution: {integrity: sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==}
+ dependencies:
+ dot-case: 3.0.4
+ tslib: 2.5.0
+ dev: true
+
+ /parent-module/1.0.1:
+ resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
+ engines: {node: '>=6'}
+ dependencies:
+ callsites: 3.1.0
+ dev: true
+
+ /parse-json/2.2.0:
+ resolution: {integrity: sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ error-ex: 1.3.2
+ dev: true
+
+ /parse-json/4.0.0:
+ resolution: {integrity: sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==}
+ engines: {node: '>=4'}
+ dependencies:
+ error-ex: 1.3.2
+ json-parse-better-errors: 1.0.2
+ dev: true
+
+ /parse-json/5.2.0:
+ resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==}
+ engines: {node: '>=8'}
+ dependencies:
+ '@babel/code-frame': 7.18.6
+ error-ex: 1.3.2
+ json-parse-even-better-errors: 2.3.1
+ lines-and-columns: 1.2.4
+ dev: true
+
+ /parse-node-version/1.0.1:
+ resolution: {integrity: sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==}
+ engines: {node: '>= 0.10'}
+ dev: true
+
+ /pascal-case/3.1.2:
+ resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==}
+ dependencies:
+ no-case: 3.0.4
+ tslib: 2.5.0
+ dev: true
+
+ /pascalcase/0.1.1:
+ resolution: {integrity: sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /path-case/3.0.4:
+ resolution: {integrity: sha512-qO4qCFjXqVTrcbPt/hQfhTQ+VhFsqNKOPtytgNKkKxSoEp3XPUQ8ObFuePylOIok5gjn69ry8XiULxCwot3Wfg==}
+ dependencies:
+ dot-case: 3.0.4
+ tslib: 2.5.0
+ dev: true
+
+ /path-exists/2.1.0:
+ resolution: {integrity: sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ pinkie-promise: 2.0.1
+ dev: true
+
+ /path-exists/3.0.0:
+ resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==}
+ engines: {node: '>=4'}
+ dev: true
+
+ /path-exists/4.0.0:
+ resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
+ engines: {node: '>=8'}
+
+ /path-is-absolute/1.0.1:
+ resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
+ engines: {node: '>=0.10.0'}
+
+ /path-key/2.0.1:
+ resolution: {integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==}
+ engines: {node: '>=4'}
+ dev: true
+
+ /path-key/3.1.1:
+ resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /path-parse/1.0.7:
+ resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
+ dev: true
+
+ /path-to-regexp/6.2.1:
+ resolution: {integrity: sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==}
+ dev: false
+
+ /path-type/1.1.0:
+ resolution: {integrity: sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ graceful-fs: 4.2.10
+ pify: 2.3.0
+ pinkie-promise: 2.0.1
+ dev: true
+
+ /path-type/3.0.0:
+ resolution: {integrity: sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==}
+ engines: {node: '>=4'}
+ dependencies:
+ pify: 3.0.0
+ dev: true
+
+ /path-type/4.0.0:
+ resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /pathe/0.2.0:
+ resolution: {integrity: sha512-sTitTPYnn23esFR3RlqYBWn4c45WGeLcsKzQiUpXJAyfcWkolvlYpV8FLo7JishK946oQwMFUCHXQ9AjGPKExw==}
+ dev: true
+
+ /pathe/1.1.0:
+ resolution: {integrity: sha512-ODbEPR0KKHqECXW1GoxdDb+AZvULmXjVPy4rt+pGo2+TnjJTIPJQSVS6N63n8T2Ip+syHhbn52OewKicV0373w==}
+ dev: true
+
+ /pend/1.2.0:
+ resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==}
+ dev: true
+
+ /picocolors/1.0.0:
+ resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==}
+
+ /picomatch/2.3.1:
+ resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
+ engines: {node: '>=8.6'}
+ dev: true
+
+ /pify/2.3.0:
+ resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /pify/3.0.0:
+ resolution: {integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==}
+ engines: {node: '>=4'}
+ dev: true
+
+ /pify/4.0.1:
+ resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==}
+ engines: {node: '>=6'}
+ dev: true
+
+ /pinia/2.0.33_hmuptsblhheur2tugfgucj7gc4:
+ resolution: {integrity: sha512-HOj1yVV2itw6rNIrR2f7+MirGNxhORjrULL8GWgRwXsGSvEqIQ+SE0MYt6cwtpegzCda3i+rVTZM+AM7CG+kRg==}
+ peerDependencies:
+ '@vue/composition-api': ^1.4.0
+ typescript: '>=4.4.4'
+ vue: ^2.6.14 || ^3.2.0
+ peerDependenciesMeta:
+ '@vue/composition-api':
+ optional: true
+ typescript:
+ optional: true
+ dependencies:
+ '@vue/devtools-api': 6.5.0
+ typescript: 4.9.5
+ vue: 3.2.47
+ vue-demi: 0.13.11_vue@3.2.47
+ dev: false
+
+ /pinkie-promise/2.0.1:
+ resolution: {integrity: sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ pinkie: 2.0.4
+ dev: true
+
+ /pinkie/2.0.4:
+ resolution: {integrity: sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /pngjs/5.0.0:
+ resolution: {integrity: sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==}
+ engines: {node: '>=10.13.0'}
+ dev: false
+
+ /pngquant-bin/6.0.1:
+ resolution: {integrity: sha512-Q3PUyolfktf+hYio6wsg3SanQzEU/v8aICg/WpzxXcuCMRb7H2Q81okfpcEztbMvw25ILjd3a87doj2N9kvbpQ==}
+ engines: {node: '>=10'}
+ hasBin: true
+ requiresBuild: true
+ dependencies:
+ bin-build: 3.0.0
+ bin-wrapper: /bin-wrapper-china/0.1.0
+ execa: 4.1.0
+ dev: true
+
+ /posix-character-classes/0.1.1:
+ resolution: {integrity: sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /postcss-prefix-selector/1.16.0_postcss@5.2.18:
+ resolution: {integrity: sha512-rdVMIi7Q4B0XbXqNUEI+Z4E+pueiu/CS5E6vRCQommzdQ/sgsS4dK42U7GX8oJR+TJOtT+Qv3GkNo6iijUMp3Q==}
+ peerDependencies:
+ postcss: '>4 <9'
+ dependencies:
+ postcss: 5.2.18
+ dev: true
+
+ /postcss-selector-parser/6.0.11:
+ resolution: {integrity: sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==}
+ engines: {node: '>=4'}
+ dependencies:
+ cssesc: 3.0.0
+ util-deprecate: 1.0.2
+ dev: true
+
+ /postcss-value-parser/4.2.0:
+ resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==}
+ dev: true
+
+ /postcss/5.2.18:
+ resolution: {integrity: sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==}
+ engines: {node: '>=0.12'}
+ dependencies:
+ chalk: 1.1.3
+ js-base64: 2.6.4
+ source-map: 0.5.7
+ supports-color: 3.2.3
+ dev: true
+
+ /postcss/8.4.21:
+ resolution: {integrity: sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==}
+ engines: {node: ^10 || ^12 || >=14}
+ dependencies:
+ nanoid: 3.3.4
+ picocolors: 1.0.0
+ source-map-js: 1.0.2
+
+ /posthtml-parser/0.2.1:
+ resolution: {integrity: sha512-nPC53YMqJnc/+1x4fRYFfm81KV2V+G9NZY+hTohpYg64Ay7NemWWcV4UWuy/SgMupqQ3kJ88M/iRfZmSnxT+pw==}
+ dependencies:
+ htmlparser2: 3.10.1
+ isobject: 2.1.0
+ dev: true
+
+ /posthtml-rename-id/1.0.12:
+ resolution: {integrity: sha512-UKXf9OF/no8WZo9edRzvuMenb6AD5hDLzIepJW+a4oJT+T/Lx7vfMYWT4aWlGNQh0WMhnUx1ipN9OkZ9q+ddEw==}
+ dependencies:
+ escape-string-regexp: 1.0.5
+ dev: true
+
+ /posthtml-render/1.4.0:
+ resolution: {integrity: sha512-W1779iVHGfq0Fvh2PROhCe2QhB8mEErgqzo1wpIt36tCgChafP+hbXIhLDOM8ePJrZcFs0vkNEtdibEWVqChqw==}
+ engines: {node: '>=10'}
+ dev: true
+
+ /posthtml-svg-mode/1.0.3:
+ resolution: {integrity: sha512-hEqw9NHZ9YgJ2/0G7CECOeuLQKZi8HjWLkBaSVtOWjygQ9ZD8P7tqeowYs7WrFdKsWEKG7o+IlsPY8jrr0CJpQ==}
+ dependencies:
+ merge-options: 1.0.1
+ posthtml: 0.9.2
+ posthtml-parser: 0.2.1
+ posthtml-render: 1.4.0
+ dev: true
+
+ /posthtml/0.9.2:
+ resolution: {integrity: sha512-spBB5sgC4cv2YcW03f/IAUN1pgDJWNWD8FzkyY4mArLUMJW+KlQhlmUdKAHQuPfb00Jl5xIfImeOsf6YL8QK7Q==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ posthtml-parser: 0.2.1
+ posthtml-render: 1.4.0
+ dev: true
+
+ /prelude-ls/1.2.1:
+ resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
+ engines: {node: '>= 0.8.0'}
+ dev: true
+
+ /prepend-http/1.0.4:
+ resolution: {integrity: sha512-PhmXi5XmoyKw1Un4E+opM2KcsJInDvKyuOumcjjw3waw86ZNjHwVUOOWLc4bCzLdcKNaWBH9e99sbWzDQsVaYg==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /prepend-http/2.0.0:
+ resolution: {integrity: sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==}
+ engines: {node: '>=4'}
+ dev: true
+
+ /pretty-bytes/5.6.0:
+ resolution: {integrity: sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==}
+ engines: {node: '>=6'}
+ dev: true
+
+ /pretty-bytes/6.1.0:
+ resolution: {integrity: sha512-Rk753HI8f4uivXi4ZCIYdhmG1V+WKzvRMg/X+M42a6t7D07RcmopXJMDNk6N++7Bl75URRGsb40ruvg7Hcp2wQ==}
+ engines: {node: ^14.13.1 || >=16.0.0}
+ dev: true
+
+ /print-js/1.6.0:
+ resolution: {integrity: sha512-BfnOIzSKbqGRtO4o0rnj/K3681BSd2QUrsIZy/+WdCIugjIswjmx3lDEZpXB2ruGf9d4b3YNINri81+J0FsBWg==}
+ dev: false
+
+ /printj/1.1.2:
+ resolution: {integrity: sha512-zA2SmoLaxZyArQTOPj5LXecR+RagfPSU5Kw1qP+jkWeNlrq+eJZyY2oS68SU1Z/7/myXM4lo9716laOFAVStCQ==}
+ engines: {node: '>=0.8'}
+ hasBin: true
+ dev: false
+
+ /process-nextick-args/2.0.1:
+ resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==}
+
+ /proto-list/1.2.4:
+ resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==}
+ dev: true
+
+ /prr/1.0.1:
+ resolution: {integrity: sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==}
+ dev: true
+ optional: true
+
+ /pseudomap/1.0.2:
+ resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==}
+ dev: true
+
+ /pump/3.0.0:
+ resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==}
+ dependencies:
+ end-of-stream: 1.4.4
+ once: 1.4.0
+ dev: true
+
+ /punycode/2.3.0:
+ resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==}
+ engines: {node: '>=6'}
+ dev: true
+
+ /q/1.5.1:
+ resolution: {integrity: sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==}
+ engines: {node: '>=0.6.0', teleport: '>=0.2.0'}
+ dev: true
+
+ /qrcode/1.5.1:
+ resolution: {integrity: sha512-nS8NJ1Z3md8uTjKtP+SGGhfqmTCs5flU/xR623oI0JX+Wepz9R8UrRVCTBTJm3qGw3rH6jJ6MUHjkDx15cxSSg==}
+ engines: {node: '>=10.13.0'}
+ hasBin: true
+ dependencies:
+ dijkstrajs: 1.0.2
+ encode-utf8: 1.0.3
+ pngjs: 5.0.0
+ yargs: 15.4.1
+ dev: false
+
+ /qs/6.11.1:
+ resolution: {integrity: sha512-0wsrzgTz/kAVIeuxSjnpGC56rzYtr6JT/2BwEvMaPhFIoYa1aGO8LbzuU1R0uUYQkLpWBTOj0l/CLAJB64J6nQ==}
+ engines: {node: '>=0.6'}
+ dependencies:
+ side-channel: 1.0.4
+ dev: false
+
+ /query-string/4.3.4:
+ resolution: {integrity: sha512-O2XLNDBIg1DnTOa+2XrIwSiXEV8h2KImXUnjhhn2+UsvZ+Es2uyd5CCRTNQlDGbzUQOW3aYCBx9rVA6dzsiY7Q==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ object-assign: 4.1.1
+ strict-uri-encode: 1.1.0
+ dev: true
+
+ /query-string/5.1.1:
+ resolution: {integrity: sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ decode-uri-component: 0.2.2
+ object-assign: 4.1.1
+ strict-uri-encode: 1.1.0
+ dev: true
+
+ /queue-microtask/1.2.3:
+ resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
+ dev: true
+
+ /quick-lru/4.0.1:
+ resolution: {integrity: sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /randombytes/2.1.0:
+ resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==}
+ dependencies:
+ safe-buffer: 5.2.1
+ dev: true
+
+ /read-pkg-up/1.0.1:
+ resolution: {integrity: sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ find-up: 1.1.2
+ read-pkg: 1.1.0
+ dev: true
+
+ /read-pkg-up/3.0.0:
+ resolution: {integrity: sha512-YFzFrVvpC6frF1sz8psoHDBGF7fLPc+llq/8NB43oagqWkx8ar5zYtsTORtOjw9W2RHLpWP+zTWwBvf1bCmcSw==}
+ engines: {node: '>=4'}
+ dependencies:
+ find-up: 2.1.0
+ read-pkg: 3.0.0
+ dev: true
+
+ /read-pkg-up/7.0.1:
+ resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==}
+ engines: {node: '>=8'}
+ dependencies:
+ find-up: 4.1.0
+ read-pkg: 5.2.0
+ type-fest: 0.8.1
+ dev: true
+
+ /read-pkg/1.1.0:
+ resolution: {integrity: sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ load-json-file: 1.1.0
+ normalize-package-data: 2.5.0
+ path-type: 1.1.0
+ dev: true
+
+ /read-pkg/3.0.0:
+ resolution: {integrity: sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==}
+ engines: {node: '>=4'}
+ dependencies:
+ load-json-file: 4.0.0
+ normalize-package-data: 2.5.0
+ path-type: 3.0.0
+ dev: true
+
+ /read-pkg/5.2.0:
+ resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==}
+ engines: {node: '>=8'}
+ dependencies:
+ '@types/normalize-package-data': 2.4.1
+ normalize-package-data: 2.5.0
+ parse-json: 5.2.0
+ type-fest: 0.6.0
+ dev: true
+
+ /readable-stream/2.3.8:
+ resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==}
+ dependencies:
+ core-util-is: 1.0.3
+ inherits: 2.0.4
+ isarray: 1.0.0
+ process-nextick-args: 2.0.1
+ safe-buffer: 5.1.2
+ string_decoder: 1.1.1
+ util-deprecate: 1.0.2
+
+ /readable-stream/3.6.2:
+ resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==}
+ engines: {node: '>= 6'}
+ dependencies:
+ inherits: 2.0.4
+ string_decoder: 1.3.0
+ util-deprecate: 1.0.2
+
+ /readdir-glob/1.1.2:
+ resolution: {integrity: sha512-6RLVvwJtVwEDfPdn6X6Ille4/lxGl0ATOY4FN/B9nxQcgOazvvI0nodiD19ScKq0PvA/29VpaOQML36o5IzZWA==}
+ dependencies:
+ minimatch: 5.1.6
+ dev: false
+
+ /redent/1.0.0:
+ resolution: {integrity: sha512-qtW5hKzGQZqKoh6JNSD+4lfitfPKGz42e6QwiRmPM5mmKtR0N41AbJRYu0xJi7nhOJ4WDgRkKvAk6tw4WIwR4g==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ indent-string: 2.1.0
+ strip-indent: 1.0.1
+ dev: true
+
+ /redent/3.0.0:
+ resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==}
+ engines: {node: '>=8'}
+ dependencies:
+ indent-string: 4.0.0
+ strip-indent: 3.0.0
+ dev: true
+
+ /regenerate-unicode-properties/10.1.0:
+ resolution: {integrity: sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==}
+ engines: {node: '>=4'}
+ dependencies:
+ regenerate: 1.4.2
+ dev: true
+
+ /regenerate/1.4.2:
+ resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==}
+ dev: true
+
+ /regenerator-runtime/0.13.11:
+ resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==}
+
+ /regenerator-transform/0.15.1:
+ resolution: {integrity: sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==}
+ dependencies:
+ '@babel/runtime': 7.21.0
+ dev: true
+
+ /regex-not/1.0.2:
+ resolution: {integrity: sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ extend-shallow: 3.0.2
+ safe-regex: 1.1.0
+ dev: true
+
+ /regexp.prototype.flags/1.4.3:
+ resolution: {integrity: sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ call-bind: 1.0.2
+ define-properties: 1.2.0
+ functions-have-names: 1.2.3
+ dev: true
+
+ /regexpp/3.2.0:
+ resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /regexpu-core/5.3.2:
+ resolution: {integrity: sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==}
+ engines: {node: '>=4'}
+ dependencies:
+ '@babel/regjsgen': 0.8.0
+ regenerate: 1.4.2
+ regenerate-unicode-properties: 10.1.0
+ regjsparser: 0.9.1
+ unicode-match-property-ecmascript: 2.0.0
+ unicode-match-property-value-ecmascript: 2.1.0
+ dev: true
+
+ /regjsparser/0.9.1:
+ resolution: {integrity: sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==}
+ hasBin: true
+ dependencies:
+ jsesc: 0.5.0
+ dev: true
+
+ /relateurl/0.2.7:
+ resolution: {integrity: sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==}
+ engines: {node: '>= 0.10'}
+ dev: true
+
+ /repeat-element/1.1.4:
+ resolution: {integrity: sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /repeat-string/1.6.1:
+ resolution: {integrity: sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==}
+ engines: {node: '>=0.10'}
+ dev: true
+
+ /repeating/2.0.1:
+ resolution: {integrity: sha512-ZqtSMuVybkISo2OWvqvm7iHSWngvdaW3IpsT9/uP8v4gMi591LY6h35wdOfvQdWCKFWZWm2Y1Opp4kV7vQKT6A==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ is-finite: 1.1.0
+ dev: true
+
+ /replace-ext/1.0.1:
+ resolution: {integrity: sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==}
+ engines: {node: '>= 0.10'}
+ dev: true
+
+ /require-directory/2.1.1:
+ resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
+ engines: {node: '>=0.10.0'}
+
+ /require-from-string/2.0.2:
+ resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /require-main-filename/2.0.0:
+ resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==}
+ dev: false
+
+ /resize-observer-polyfill/1.5.1:
+ resolution: {integrity: sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==}
+ dev: false
+
+ /resolve-from/4.0.0:
+ resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
+ engines: {node: '>=4'}
+ dev: true
+
+ /resolve-url/0.2.1:
+ resolution: {integrity: sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==}
+ deprecated: https://github.com/lydell/resolve-url#deprecated
+ dev: true
+
+ /resolve/1.22.1:
+ resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==}
+ hasBin: true
+ dependencies:
+ is-core-module: 2.11.0
+ path-parse: 1.0.7
+ supports-preserve-symlinks-flag: 1.0.0
+ dev: true
+
+ /responselike/1.0.2:
+ resolution: {integrity: sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==}
+ dependencies:
+ lowercase-keys: 1.0.1
+ dev: true
+
+ /restore-cursor/3.1.0:
+ resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==}
+ engines: {node: '>=8'}
+ dependencies:
+ onetime: 5.1.2
+ signal-exit: 3.0.7
+ dev: true
+
+ /ret/0.1.15:
+ resolution: {integrity: sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==}
+ engines: {node: '>=0.12'}
+ dev: true
+
+ /reusify/1.0.4:
+ resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
+ engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
+ dev: true
+
+ /rimraf/2.7.1:
+ resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==}
+ hasBin: true
+ dependencies:
+ glob: 7.2.3
+
+ /rimraf/3.0.2:
+ resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==}
+ hasBin: true
+ dependencies:
+ glob: 7.2.3
+
+ /rollup-plugin-purge-icons/0.8.1:
+ resolution: {integrity: sha512-7ktMV+gWtXAdOIShE8EtTcnpGhozi5H2hKk1MQVGt+7FmlLkjR+XKu1Nyzjocwd6xJvKube2Lh+SfcJ8FYYySw==}
+ engines: {node: '>= 12'}
+ dependencies:
+ '@purge-icons/core': 0.8.0
+ '@purge-icons/generated': 0.8.1
+ transitivePeerDependencies:
+ - encoding
+ - supports-color
+ dev: true
+
+ /rollup-plugin-terser/7.0.2_rollup@2.72.0:
+ resolution: {integrity: sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==}
+ deprecated: This package has been deprecated and is no longer maintained. Please use @rollup/plugin-terser
+ peerDependencies:
+ rollup: ^2.0.0
+ dependencies:
+ '@babel/code-frame': 7.18.6
+ jest-worker: 26.6.2
+ rollup: 2.72.0
+ serialize-javascript: 4.0.0
+ terser: 5.16.6
+ dev: true
+
+ /rollup-plugin-visualizer/5.9.0:
+ resolution: {integrity: sha512-bbDOv47+Bw4C/cgs0czZqfm8L82xOZssk4ayZjG40y9zbXclNk7YikrZTDao6p7+HDiGxrN0b65SgZiVm9k1Cg==}
+ engines: {node: '>=14'}
+ hasBin: true
+ peerDependencies:
+ rollup: 2.x || 3.x
+ peerDependenciesMeta:
+ rollup:
+ optional: true
+ dependencies:
+ open: 8.4.2
+ picomatch: 2.3.1
+ source-map: 0.7.4
+ yargs: 17.7.1
+ dev: true
+
+ /rollup/2.72.0:
+ resolution: {integrity: sha512-KqtR2YcO35/KKijg4nx4STO3569aqCUeGRkKWnJ6r+AvBBrVY9L4pmf4NHVrQr4mTOq6msbohflxr2kpihhaOA==}
+ engines: {node: '>=10.0.0'}
+ hasBin: true
+ optionalDependencies:
+ fsevents: 2.3.2
+ dev: true
+
+ /run-async/2.4.1:
+ resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==}
+ engines: {node: '>=0.12.0'}
+ dev: true
+
+ /run-parallel/1.2.0:
+ resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
+ dependencies:
+ queue-microtask: 1.2.3
+ dev: true
+
+ /rxjs/7.8.0:
+ resolution: {integrity: sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==}
+ dependencies:
+ tslib: 2.5.0
+ dev: true
+
+ /safe-buffer/5.1.2:
+ resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==}
+
+ /safe-buffer/5.2.1:
+ resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
+
+ /safe-regex-test/1.0.0:
+ resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==}
+ dependencies:
+ call-bind: 1.0.2
+ get-intrinsic: 1.2.0
+ is-regex: 1.1.4
+ dev: true
+
+ /safe-regex/1.1.0:
+ resolution: {integrity: sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==}
+ dependencies:
+ ret: 0.1.15
+ dev: true
+
+ /safer-buffer/2.1.2:
+ resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
+ dev: true
+
+ /sax/1.2.4:
+ resolution: {integrity: sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==}
+ dev: true
+ optional: true
+
+ /saxes/5.0.1:
+ resolution: {integrity: sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==}
+ engines: {node: '>=10'}
+ dependencies:
+ xmlchars: 2.2.0
+ dev: false
+
+ /scroll-into-view-if-needed/2.2.31:
+ resolution: {integrity: sha512-dGCXy99wZQivjmjIqihaBQNjryrz5rueJY7eHfTdyWEiR4ttYpsajb14rn9s5d4DY4EcY6+4+U/maARBXJedkA==}
+ dependencies:
+ compute-scroll-into-view: 1.0.20
+ dev: false
+
+ /seek-bzip/1.0.6:
+ resolution: {integrity: sha512-e1QtP3YL5tWww8uKaOCQ18UxIT2laNBXHjV/S2WYCiK4udiv8lkG89KRIoCjUagnAmCBurjF4zEVX2ByBbnCjQ==}
+ hasBin: true
+ dependencies:
+ commander: 2.20.3
+ dev: true
+
+ /semver-regex/2.0.0:
+ resolution: {integrity: sha512-mUdIBBvdn0PLOeP3TEkMH7HHeUP3GjsXCwKarjv/kGmUFOYg1VqEemKhoQpWMu6X2I8kHeuVdGibLGkVK+/5Qw==}
+ engines: {node: '>=6'}
+ dev: true
+
+ /semver-truncate/1.1.2:
+ resolution: {integrity: sha512-V1fGg9i4CL3qesB6U0L6XAm4xOJiHmt4QAacazumuasc03BvtFGIMCduv01JWQ69Nv+JST9TqhSCiJoxoY031w==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ semver: 5.7.1
+ dev: true
+
+ /semver/5.7.1:
+ resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==}
+ hasBin: true
+ dev: true
+
+ /semver/6.3.0:
+ resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==}
+ hasBin: true
+ dev: true
+
+ /semver/7.3.8:
+ resolution: {integrity: sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==}
+ engines: {node: '>=10'}
+ hasBin: true
+ dependencies:
+ lru-cache: 6.0.0
+ dev: true
+
+ /sentence-case/3.0.4:
+ resolution: {integrity: sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg==}
+ dependencies:
+ no-case: 3.0.4
+ tslib: 2.5.0
+ upper-case-first: 2.0.2
+ dev: true
+
+ /serialize-javascript/4.0.0:
+ resolution: {integrity: sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==}
+ dependencies:
+ randombytes: 2.1.0
+ dev: true
+
+ /set-blocking/2.0.0:
+ resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==}
+ dev: false
+
+ /set-value/2.0.1:
+ resolution: {integrity: sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ extend-shallow: 2.0.1
+ is-extendable: 0.1.1
+ is-plain-object: 2.0.4
+ split-string: 3.1.0
+ dev: true
+
+ /setimmediate/1.0.5:
+ resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==}
+ dev: false
+
+ /shallow-equal/1.2.1:
+ resolution: {integrity: sha512-S4vJDjHHMBaiZuT9NPb616CSmLf618jawtv3sufLl6ivK8WocjAo58cXwbRV1cgqxH0Qbv+iUt6m05eqEa2IRA==}
+ dev: false
+
+ /shebang-command/1.2.0:
+ resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ shebang-regex: 1.0.0
+ dev: true
+
+ /shebang-command/2.0.0:
+ resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
+ engines: {node: '>=8'}
+ dependencies:
+ shebang-regex: 3.0.0
+ dev: true
+
+ /shebang-regex/1.0.0:
+ resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /shebang-regex/3.0.0:
+ resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /side-channel/1.0.4:
+ resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==}
+ dependencies:
+ call-bind: 1.0.2
+ get-intrinsic: 1.2.0
+ object-inspect: 1.12.3
+
+ /signal-exit/3.0.7:
+ resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==}
+ dev: true
+
+ /slash/3.0.0:
+ resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /snake-case/3.0.4:
+ resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==}
+ dependencies:
+ dot-case: 3.0.4
+ tslib: 2.5.0
+ dev: true
+
+ /snapdragon-node/2.1.1:
+ resolution: {integrity: sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ define-property: 1.0.0
+ isobject: 3.0.1
+ snapdragon-util: 3.0.1
+ dev: true
+
+ /snapdragon-util/3.0.1:
+ resolution: {integrity: sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ kind-of: 3.2.2
+ dev: true
+
+ /snapdragon/0.8.2:
+ resolution: {integrity: sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ base: 0.11.2
+ debug: 2.6.9
+ define-property: 0.2.5
+ extend-shallow: 2.0.1
+ map-cache: 0.2.2
+ source-map: 0.5.7
+ source-map-resolve: 0.5.3
+ use: 3.1.1
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /sort-keys-length/1.0.1:
+ resolution: {integrity: sha512-GRbEOUqCxemTAk/b32F2xa8wDTs+Z1QHOkbhJDQTvv/6G3ZkbJ+frYWsTcc7cBB3Fu4wy4XlLCuNtJuMn7Gsvw==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ sort-keys: 1.1.2
+ dev: true
+
+ /sort-keys/1.1.2:
+ resolution: {integrity: sha512-vzn8aSqKgytVik0iwdBEi+zevbTYZogewTUM6dtpmGwEcdzbub/TX4bCzRhebDCRC3QzXgJsLRKB2V/Oof7HXg==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ is-plain-obj: 1.1.0
+ dev: true
+
+ /sort-keys/2.0.0:
+ resolution: {integrity: sha512-/dPCrG1s3ePpWm6yBbxZq5Be1dXGLyLn9Z791chDC3NFrpkVbWGzkBwPN1knaciexFXgRJ7hzdnwZ4stHSDmjg==}
+ engines: {node: '>=4'}
+ dependencies:
+ is-plain-obj: 1.1.0
+ dev: true
+
+ /sortablejs/1.15.0:
+ resolution: {integrity: sha512-bv9qgVMjUMf89wAvM6AxVvS/4MX3sPeN0+agqShejLU5z5GX4C75ow1O2e5k4L6XItUyAK3gH6AxSbXrOM5e8w==}
+ dev: false
+
+ /source-map-js/1.0.2:
+ resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==}
+ engines: {node: '>=0.10.0'}
+
+ /source-map-resolve/0.5.3:
+ resolution: {integrity: sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==}
+ deprecated: See https://github.com/lydell/source-map-resolve#deprecated
+ dependencies:
+ atob: 2.1.2
+ decode-uri-component: 0.2.2
+ resolve-url: 0.2.1
+ source-map-url: 0.4.1
+ urix: 0.1.0
+ dev: true
+
+ /source-map-support/0.5.21:
+ resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
+ dependencies:
+ buffer-from: 1.1.2
+ source-map: 0.6.1
+ dev: true
+
+ /source-map-url/0.4.1:
+ resolution: {integrity: sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==}
+ deprecated: See https://github.com/lydell/source-map-url#deprecated
+ dev: true
+
+ /source-map/0.5.7:
+ resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /source-map/0.6.1:
+ resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
+ engines: {node: '>=0.10.0'}
+
+ /source-map/0.7.4:
+ resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==}
+ engines: {node: '>= 8'}
+ dev: true
+
+ /source-map/0.8.0-beta.0:
+ resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==}
+ engines: {node: '>= 8'}
+ dependencies:
+ whatwg-url: 7.1.0
+ dev: true
+
+ /sourcemap-codec/1.4.8:
+ resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==}
+ deprecated: Please use @jridgewell/sourcemap-codec instead
+
+ /spdx-correct/3.2.0:
+ resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==}
+ dependencies:
+ spdx-expression-parse: 3.0.1
+ spdx-license-ids: 3.0.13
+ dev: true
+
+ /spdx-exceptions/2.3.0:
+ resolution: {integrity: sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==}
+ dev: true
+
+ /spdx-expression-parse/3.0.1:
+ resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==}
+ dependencies:
+ spdx-exceptions: 2.3.0
+ spdx-license-ids: 3.0.13
+ dev: true
+
+ /spdx-license-ids/3.0.13:
+ resolution: {integrity: sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==}
+ dev: true
+
+ /split-string/3.1.0:
+ resolution: {integrity: sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ extend-shallow: 3.0.2
+ dev: true
+
+ /split/1.0.1:
+ resolution: {integrity: sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==}
+ dependencies:
+ through: 2.3.8
+ dev: true
+
+ /split2/3.2.2:
+ resolution: {integrity: sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==}
+ dependencies:
+ readable-stream: 3.6.2
+ dev: true
+
+ /squeak/1.3.0:
+ resolution: {integrity: sha512-YQL1ulInM+ev8nXX7vfXsCsDh6IqXlrremc1hzi77776BtpWgYJUMto3UM05GSAaGzJgWekszjoKDrVNB5XG+A==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ chalk: 1.1.3
+ console-stream: 0.1.1
+ lpad-align: 1.1.2
+ dev: true
+
+ /ssf/0.11.2:
+ resolution: {integrity: sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==}
+ engines: {node: '>=0.8'}
+ dependencies:
+ frac: 1.1.2
+ dev: false
+
+ /stable/0.1.8:
+ resolution: {integrity: sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==}
+ deprecated: 'Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility'
+ dev: true
+
+ /static-extend/0.1.2:
+ resolution: {integrity: sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ define-property: 0.2.5
+ object-copy: 0.1.0
+ dev: true
+
+ /strict-uri-encode/1.1.0:
+ resolution: {integrity: sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /string-width/4.2.3:
+ resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
+ engines: {node: '>=8'}
+ dependencies:
+ emoji-regex: 8.0.0
+ is-fullwidth-code-point: 3.0.0
+ strip-ansi: 6.0.1
+
+ /string.prototype.matchall/4.0.8:
+ resolution: {integrity: sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==}
+ dependencies:
+ call-bind: 1.0.2
+ define-properties: 1.2.0
+ es-abstract: 1.21.2
+ get-intrinsic: 1.2.0
+ has-symbols: 1.0.3
+ internal-slot: 1.0.5
+ regexp.prototype.flags: 1.4.3
+ side-channel: 1.0.4
+ dev: true
+
+ /string.prototype.trim/1.2.7:
+ resolution: {integrity: sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ call-bind: 1.0.2
+ define-properties: 1.2.0
+ es-abstract: 1.21.2
+ dev: true
+
+ /string.prototype.trimend/1.0.6:
+ resolution: {integrity: sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==}
+ dependencies:
+ call-bind: 1.0.2
+ define-properties: 1.2.0
+ es-abstract: 1.21.2
+ dev: true
+
+ /string.prototype.trimstart/1.0.6:
+ resolution: {integrity: sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==}
+ dependencies:
+ call-bind: 1.0.2
+ define-properties: 1.2.0
+ es-abstract: 1.21.2
+ dev: true
+
+ /string_decoder/1.1.1:
+ resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==}
+ dependencies:
+ safe-buffer: 5.1.2
+
+ /string_decoder/1.3.0:
+ resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==}
+ dependencies:
+ safe-buffer: 5.2.1
+
+ /stringify-object/3.3.0:
+ resolution: {integrity: sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==}
+ engines: {node: '>=4'}
+ dependencies:
+ get-own-enumerable-property-symbols: 3.0.2
+ is-obj: 1.0.1
+ is-regexp: 1.0.0
+ dev: true
+
+ /strip-ansi/3.0.1:
+ resolution: {integrity: sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ ansi-regex: 2.1.1
+ dev: true
+
+ /strip-ansi/6.0.1:
+ resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
+ engines: {node: '>=8'}
+ dependencies:
+ ansi-regex: 5.0.1
+
+ /strip-bom/2.0.0:
+ resolution: {integrity: sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ is-utf8: 0.2.1
+ dev: true
+
+ /strip-bom/3.0.0:
+ resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
+ engines: {node: '>=4'}
+ dev: true
+
+ /strip-comments/2.0.1:
+ resolution: {integrity: sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==}
+ engines: {node: '>=10'}
+ dev: true
+
+ /strip-dirs/2.1.0:
+ resolution: {integrity: sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==}
+ dependencies:
+ is-natural-number: 4.0.1
+ dev: true
+
+ /strip-eof/1.0.0:
+ resolution: {integrity: sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /strip-final-newline/2.0.0:
+ resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==}
+ engines: {node: '>=6'}
+ dev: true
+
+ /strip-indent/1.0.1:
+ resolution: {integrity: sha512-I5iQq6aFMM62fBEAIB/hXzwJD6EEZ0xEGCX2t7oXqaKPIRgt4WruAQ285BISgdkP+HLGWyeGmNJcpIwFeRYRUA==}
+ engines: {node: '>=0.10.0'}
+ hasBin: true
+ dependencies:
+ get-stdin: 4.0.1
+ dev: true
+
+ /strip-indent/3.0.0:
+ resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==}
+ engines: {node: '>=8'}
+ dependencies:
+ min-indent: 1.0.1
+ dev: true
+
+ /strip-json-comments/3.1.1:
+ resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /strip-outer/1.0.1:
+ resolution: {integrity: sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ escape-string-regexp: 1.0.5
+ dev: true
+
+ /strnum/1.0.5:
+ resolution: {integrity: sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==}
+ dev: true
+
+ /supports-color/2.0.0:
+ resolution: {integrity: sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==}
+ engines: {node: '>=0.8.0'}
+ dev: true
+
+ /supports-color/3.2.3:
+ resolution: {integrity: sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==}
+ engines: {node: '>=0.8.0'}
+ dependencies:
+ has-flag: 1.0.0
+ dev: true
+
+ /supports-color/5.5.0:
+ resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==}
+ engines: {node: '>=4'}
+ dependencies:
+ has-flag: 3.0.0
+ dev: true
+
+ /supports-color/7.2.0:
+ resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
+ engines: {node: '>=8'}
+ dependencies:
+ has-flag: 4.0.0
+ dev: true
+
+ /supports-preserve-symlinks-flag/1.0.0:
+ resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
+ engines: {node: '>= 0.4'}
+ dev: true
+
+ /svg-baker/1.7.0:
+ resolution: {integrity: sha512-nibslMbkXOIkqKVrfcncwha45f97fGuAOn1G99YwnwTj8kF9YiM6XexPcUso97NxOm6GsP0SIvYVIosBis1xLg==}
+ dependencies:
+ bluebird: 3.7.2
+ clone: 2.1.2
+ he: 1.2.0
+ image-size: 0.5.5
+ loader-utils: 1.4.2
+ merge-options: 1.0.1
+ micromatch: 3.1.0
+ postcss: 5.2.18
+ postcss-prefix-selector: 1.16.0_postcss@5.2.18
+ posthtml-rename-id: 1.0.12
+ posthtml-svg-mode: 1.0.3
+ query-string: 4.3.4
+ traverse: 0.6.7
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /svg-tags/1.0.0:
+ resolution: {integrity: sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==}
+ dev: true
+
+ /svgo/2.8.0:
+ resolution: {integrity: sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==}
+ engines: {node: '>=10.13.0'}
+ hasBin: true
+ dependencies:
+ '@trysound/sax': 0.2.0
+ commander: 7.2.0
+ css-select: 4.3.0
+ css-tree: 1.1.3
+ csso: 4.2.0
+ picocolors: 1.0.0
+ stable: 0.1.8
+ dev: true
+
+ /systemjs/6.14.0:
+ resolution: {integrity: sha512-OMf+kFCYG9fLQerUyw/QVIPfZ+lo579R+usrDzSrZAkvMl6B0tHtc4rUP7DFaPCr7Sy6p5DYD4V9OCF1Sp6+vA==}
+ dev: true
+
+ /tar-stream/1.6.2:
+ resolution: {integrity: sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==}
+ engines: {node: '>= 0.8.0'}
+ dependencies:
+ bl: 1.2.3
+ buffer-alloc: 1.2.0
+ end-of-stream: 1.4.4
+ fs-constants: 1.0.0
+ readable-stream: 2.3.8
+ to-buffer: 1.1.1
+ xtend: 4.0.2
+ dev: true
+
+ /tar-stream/2.2.0:
+ resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==}
+ engines: {node: '>=6'}
+ dependencies:
+ bl: 4.1.0
+ end-of-stream: 1.4.4
+ fs-constants: 1.0.0
+ inherits: 2.0.4
+ readable-stream: 3.6.2
+ dev: false
+
+ /temp-dir/1.0.0:
+ resolution: {integrity: sha512-xZFXEGbG7SNC3itwBzI3RYjq/cEhBkx2hJuKGIUOcEULmkQExXiHat2z/qkISYsuR+IKumhEfKKbV5qXmhICFQ==}
+ engines: {node: '>=4'}
+ dev: true
+
+ /temp-dir/2.0.0:
+ resolution: {integrity: sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /tempfile/2.0.0:
+ resolution: {integrity: sha512-ZOn6nJUgvgC09+doCEF3oB+r3ag7kUvlsXEGX069QRD60p+P3uP7XG9N2/at+EyIRGSN//ZY3LyEotA1YpmjuA==}
+ engines: {node: '>=4'}
+ dependencies:
+ temp-dir: 1.0.0
+ uuid: 3.4.0
+ dev: true
+
+ /tempfile/3.0.0:
+ resolution: {integrity: sha512-uNFCg478XovRi85iD42egu+eSFUmmka750Jy7L5tfHI5hQKKtbPnxaSaXAbBqCDYrw3wx4tXjKwci4/QmsZJxw==}
+ engines: {node: '>=8'}
+ dependencies:
+ temp-dir: 2.0.0
+ uuid: 3.4.0
+ dev: true
+
+ /tempy/0.6.0:
+ resolution: {integrity: sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==}
+ engines: {node: '>=10'}
+ dependencies:
+ is-stream: 2.0.1
+ temp-dir: 2.0.0
+ type-fest: 0.16.0
+ unique-string: 2.0.0
+ dev: true
+
+ /terser/5.16.6:
+ resolution: {integrity: sha512-IBZ+ZQIA9sMaXmRZCUMDjNH0D5AQQfdn4WUjHL0+1lF4TP1IHRJbrhb6fNaXWikrYQTSkb7SLxkeXAiy1p7mbg==}
+ engines: {node: '>=10'}
+ hasBin: true
+ dependencies:
+ '@jridgewell/source-map': 0.3.2
+ acorn: 8.8.2
+ commander: 2.20.3
+ source-map-support: 0.5.21
+ dev: true
+
+ /text-extensions/1.9.0:
+ resolution: {integrity: sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==}
+ engines: {node: '>=0.10'}
+ dev: true
+
+ /text-table/0.2.0:
+ resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==}
+ dev: true
+
+ /through/2.3.8:
+ resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==}
+ dev: true
+
+ /through2/2.0.5:
+ resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==}
+ dependencies:
+ readable-stream: 2.3.8
+ xtend: 4.0.2
+ dev: true
+
+ /through2/4.0.2:
+ resolution: {integrity: sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==}
+ dependencies:
+ readable-stream: 3.6.2
+ dev: true
+
+ /timed-out/4.0.1:
+ resolution: {integrity: sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /tinycolor2/1.6.0:
+ resolution: {integrity: sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==}
+ dev: true
+
+ /tinymce/5.10.7:
+ resolution: {integrity: sha512-9UUjaO0R7FxcFo0oxnd1lMs7H+D0Eh+dDVo5hKbVe1a+VB0nit97vOqlinj+YwgoBDt6/DSCUoWqAYlLI8BLYA==}
+ dev: false
+
+ /tmp/0.0.33:
+ resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==}
+ engines: {node: '>=0.6.0'}
+ dependencies:
+ os-tmpdir: 1.0.2
+ dev: true
+
+ /tmp/0.2.1:
+ resolution: {integrity: sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==}
+ engines: {node: '>=8.17.0'}
+ dependencies:
+ rimraf: 3.0.2
+ dev: false
+
+ /to-buffer/1.1.1:
+ resolution: {integrity: sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==}
+ dev: true
+
+ /to-fast-properties/2.0.0:
+ resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==}
+ engines: {node: '>=4'}
+
+ /to-object-path/0.3.0:
+ resolution: {integrity: sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ kind-of: 3.2.2
+ dev: true
+
+ /to-regex-range/2.1.1:
+ resolution: {integrity: sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ is-number: 3.0.0
+ repeat-string: 1.6.1
+ dev: true
+
+ /to-regex-range/5.0.1:
+ resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
+ engines: {node: '>=8.0'}
+ dependencies:
+ is-number: 7.0.0
+ dev: true
+
+ /to-regex/3.0.2:
+ resolution: {integrity: sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ define-property: 2.0.2
+ extend-shallow: 3.0.2
+ regex-not: 1.0.2
+ safe-regex: 1.1.0
+ dev: true
+
+ /tr46/0.0.3:
+ resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
+ dev: true
+
+ /tr46/1.0.1:
+ resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==}
+ dependencies:
+ punycode: 2.3.0
+ dev: true
+
+ /traverse/0.3.9:
+ resolution: {integrity: sha512-iawgk0hLP3SxGKDfnDJf8wTz4p2qImnyihM5Hh/sGvQ3K37dPi/w8sRhdNIxYA1TwFwc5mDhIJq+O0RsvXBKdQ==}
+ dev: false
+
+ /traverse/0.6.7:
+ resolution: {integrity: sha512-/y956gpUo9ZNCb99YjxG7OaslxZWHfCHAUUfshwqOXmxUIvqLjVO581BT+gM59+QV9tFe6/CGG53tsA1Y7RSdg==}
+ dev: true
+
+ /trim-newlines/1.0.0:
+ resolution: {integrity: sha512-Nm4cF79FhSTzrLKGDMi3I4utBtFv8qKy4sq1enftf2gMdpqI8oVQTAfySkTz5r49giVzDj88SVZXP4CeYQwjaw==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /trim-newlines/3.0.1:
+ resolution: {integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /trim-repeated/1.0.0:
+ resolution: {integrity: sha512-pkonvlKk8/ZuR0D5tLW8ljt5I8kmxp2XKymhepUeOdCEfKpZaktSArkLHZt76OB1ZvO9bssUsDty4SWhLvZpLg==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ escape-string-regexp: 1.0.5
+ dev: true
+
+ /tslib/1.14.1:
+ resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==}
+ dev: true
+
+ /tslib/2.3.0:
+ resolution: {integrity: sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==}
+ dev: false
+
+ /tslib/2.5.0:
+ resolution: {integrity: sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==}
+ dev: true
+
+ /tsutils/3.21.0_typescript@4.9.5:
+ resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==}
+ engines: {node: '>= 6'}
+ peerDependencies:
+ 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'
+ dependencies:
+ tslib: 1.14.1
+ typescript: 4.9.5
+ dev: true
+
+ /tunnel-agent/0.6.0:
+ resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==}
+ dependencies:
+ safe-buffer: 5.2.1
+ dev: true
+
+ /type-check/0.4.0:
+ resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
+ engines: {node: '>= 0.8.0'}
+ dependencies:
+ prelude-ls: 1.2.1
+ dev: true
+
+ /type-fest/0.11.0:
+ resolution: {integrity: sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /type-fest/0.16.0:
+ resolution: {integrity: sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==}
+ engines: {node: '>=10'}
+ dev: true
+
+ /type-fest/0.18.1:
+ resolution: {integrity: sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==}
+ engines: {node: '>=10'}
+ dev: true
+
+ /type-fest/0.20.2:
+ resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==}
+ engines: {node: '>=10'}
+ dev: true
+
+ /type-fest/0.21.3:
+ resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==}
+ engines: {node: '>=10'}
+ dev: true
+
+ /type-fest/0.6.0:
+ resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /type-fest/0.8.1:
+ resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /typed-array-length/1.0.4:
+ resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==}
+ dependencies:
+ call-bind: 1.0.2
+ for-each: 0.3.3
+ is-typed-array: 1.1.10
+ dev: true
+
+ /typescript/4.9.5:
+ resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==}
+ engines: {node: '>=4.2.0'}
+ hasBin: true
+
+ /uglify-js/3.17.4:
+ resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==}
+ engines: {node: '>=0.8.0'}
+ hasBin: true
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /unbox-primitive/1.0.2:
+ resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==}
+ dependencies:
+ call-bind: 1.0.2
+ has-bigints: 1.0.2
+ has-symbols: 1.0.3
+ which-boxed-primitive: 1.0.2
+ dev: true
+
+ /unbzip2-stream/1.4.3:
+ resolution: {integrity: sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==}
+ dependencies:
+ buffer: 5.7.1
+ through: 2.3.8
+ dev: true
+
+ /unicode-canonical-property-names-ecmascript/2.0.0:
+ resolution: {integrity: sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==}
+ engines: {node: '>=4'}
+ dev: true
+
+ /unicode-match-property-ecmascript/2.0.0:
+ resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==}
+ engines: {node: '>=4'}
+ dependencies:
+ unicode-canonical-property-names-ecmascript: 2.0.0
+ unicode-property-aliases-ecmascript: 2.1.0
+ dev: true
+
+ /unicode-match-property-value-ecmascript/2.1.0:
+ resolution: {integrity: sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==}
+ engines: {node: '>=4'}
+ dev: true
+
+ /unicode-property-aliases-ecmascript/2.1.0:
+ resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==}
+ engines: {node: '>=4'}
+ dev: true
+
+ /union-value/1.0.1:
+ resolution: {integrity: sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ arr-union: 3.1.0
+ get-value: 2.0.6
+ is-extendable: 0.1.1
+ set-value: 2.0.1
+ dev: true
+
+ /unique-string/2.0.0:
+ resolution: {integrity: sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==}
+ engines: {node: '>=8'}
+ dependencies:
+ crypto-random-string: 2.0.0
+ dev: true
+
+ /universalify/2.0.0:
+ resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==}
+ engines: {node: '>= 10.0.0'}
+ dev: true
+
+ /unset-value/1.0.0:
+ resolution: {integrity: sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ has-value: 0.3.1
+ isobject: 3.0.1
+ dev: true
+
+ /unzipper/0.10.11:
+ resolution: {integrity: sha512-+BrAq2oFqWod5IESRjL3S8baohbevGcVA+teAIOYWM3pDVdseogqbzhhvvmiyQrUNKFUnDMtELW3X8ykbyDCJw==}
+ dependencies:
+ big-integer: 1.6.51
+ binary: 0.3.0
+ bluebird: 3.4.7
+ buffer-indexof-polyfill: 1.0.2
+ duplexer2: 0.1.4
+ fstream: 1.0.12
+ graceful-fs: 4.2.10
+ listenercount: 1.0.1
+ readable-stream: 2.3.8
+ setimmediate: 1.0.5
+ dev: false
+
+ /upath/1.2.0:
+ resolution: {integrity: sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==}
+ engines: {node: '>=4'}
+ dev: true
+
+ /update-browserslist-db/1.0.10_browserslist@4.21.5:
+ resolution: {integrity: sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==}
+ hasBin: true
+ peerDependencies:
+ browserslist: '>= 4.21.0'
+ dependencies:
+ browserslist: 4.21.5
+ escalade: 3.1.1
+ picocolors: 1.0.0
+ dev: true
+
+ /upper-case-first/2.0.2:
+ resolution: {integrity: sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg==}
+ dependencies:
+ tslib: 2.5.0
+ dev: true
+
+ /upper-case/2.0.2:
+ resolution: {integrity: sha512-KgdgDGJt2TpuwBUIjgG6lzw2GWFRCW9Qkfkiv0DxqHHLYJHmtmdUIKcZd8rHgFSjopVTlw6ggzCm1b8MFQwikg==}
+ dependencies:
+ tslib: 2.5.0
+ dev: true
+
+ /uri-js/4.4.1:
+ resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
+ dependencies:
+ punycode: 2.3.0
+ dev: true
+
+ /urix/0.1.0:
+ resolution: {integrity: sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==}
+ deprecated: Please see https://github.com/lydell/urix#deprecated
+ dev: true
+
+ /url-parse-lax/1.0.0:
+ resolution: {integrity: sha512-BVA4lR5PIviy2PMseNd2jbFQ+jwSwQGdJejf5ctd1rEXt0Ypd7yanUK9+lYechVlN5VaTJGsu2U/3MDDu6KgBA==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ prepend-http: 1.0.4
+ dev: true
+
+ /url-parse-lax/3.0.0:
+ resolution: {integrity: sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==}
+ engines: {node: '>=4'}
+ dependencies:
+ prepend-http: 2.0.0
+ dev: true
+
+ /url-to-options/1.0.1:
+ resolution: {integrity: sha512-0kQLIzG4fdk/G5NONku64rSH/x32NOA39LVQqlK8Le6lvTF6GGRJpqaQFGgU+CLwySIqBSMdwYM0sYcW9f6P4A==}
+ engines: {node: '>= 4'}
+ dev: true
+
+ /use/3.1.1:
+ resolution: {integrity: sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /util-deprecate/1.0.2:
+ resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
+
+ /uuid/3.4.0:
+ resolution: {integrity: sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==}
+ deprecated: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.
+ hasBin: true
+ dev: true
+
+ /uuid/8.3.2:
+ resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==}
+ hasBin: true
+ dev: false
+
+ /validate-npm-package-license/3.0.4:
+ resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==}
+ dependencies:
+ spdx-correct: 3.2.0
+ spdx-expression-parse: 3.0.1
+ dev: true
+
+ /vary/1.1.2:
+ resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==}
+ engines: {node: '>= 0.8'}
+ dev: true
+
+ /vditor/3.9.0:
+ resolution: {integrity: sha512-CLLtrexUY/LGN1Lp1iu242Uq9GuNP98UTXFRY9hjTNFkpVH9L4M3jrQ9yIZ711zYwsl78GxKeskuU7WieA96ow==}
+ dependencies:
+ diff-match-patch: 1.0.5
+ dev: false
+
+ /vite-plugin-compression/0.5.1_vite@2.9.15:
+ resolution: {integrity: sha512-5QJKBDc+gNYVqL/skgFAP81Yuzo9R+EAf19d+EtsMF/i8kFUpNi3J/H01QD3Oo8zBQn+NzoCIFkpPLynoOzaJg==}
+ peerDependencies:
+ vite: '>=2.0.0'
+ dependencies:
+ chalk: 4.1.2
+ debug: 4.3.4
+ fs-extra: 10.1.0
+ vite: 2.9.15_less@4.1.3
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /vite-plugin-html/3.2.0_vite@2.9.15:
+ resolution: {integrity: sha512-2VLCeDiHmV/BqqNn5h2V+4280KRgQzCFN47cst3WiNK848klESPQnzuC3okH5XHtgwHH/6s1Ho/YV6yIO0pgoQ==}
+ peerDependencies:
+ vite: '>=2.0.0'
+ dependencies:
+ '@rollup/pluginutils': 4.2.1
+ colorette: 2.0.19
+ connect-history-api-fallback: 1.6.0
+ consola: 2.15.3
+ dotenv: 16.0.3
+ dotenv-expand: 8.0.3
+ ejs: 3.1.9
+ fast-glob: 3.2.12
+ fs-extra: 10.1.0
+ html-minifier-terser: 6.1.0
+ node-html-parser: 5.4.2
+ pathe: 0.2.0
+ vite: 2.9.15_less@4.1.3
+ dev: true
+
+ /vite-plugin-imagemin/0.6.1_vite@2.9.15:
+ resolution: {integrity: sha512-cP7LDn8euPrji7WYtDoNQpJEB9nkMxJHm/A+QZnvMrrCSuyo/clpMy/T1v7suDXPBavsDiDdFdVQB5p7VGD2cg==}
+ peerDependencies:
+ vite: '>=2.0.0'
+ dependencies:
+ '@types/imagemin': 7.0.1
+ '@types/imagemin-gifsicle': 7.0.1
+ '@types/imagemin-jpegtran': 5.0.1
+ '@types/imagemin-mozjpeg': 8.0.1
+ '@types/imagemin-optipng': 5.2.1
+ '@types/imagemin-svgo': 10.0.2
+ '@types/imagemin-webp': 7.0.0
+ '@types/svgo': 2.6.4
+ chalk: 4.1.2
+ debug: 4.3.4
+ esbuild: 0.14.54
+ fs-extra: 10.1.0
+ gifsicle: 5.2.0
+ imagemin: 7.0.1
+ imagemin-gifsicle: 7.0.0
+ imagemin-jpegtran: 7.0.0
+ imagemin-mozjpeg: 9.0.0
+ imagemin-optipng: 8.0.0
+ imagemin-pngquant: 9.0.2
+ imagemin-svgo: 9.0.0
+ imagemin-webp: 6.1.0
+ jpegtran-bin: 6.0.1
+ pathe: 0.2.0
+ vite: 2.9.15_less@4.1.3
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /vite-plugin-optimize-persist/0.1.2_pkkqgkwmjllbcfn4stitutuwe4:
+ resolution: {integrity: sha512-H/Ebn2kZO8PvwUF08SsT5K5xMJNCWKoGX71+e9/ER3yNj7GHiFjNQlvGg5ih/zEx09MZ9m7WCxOwmEKbeIVzww==}
+ peerDependencies:
+ vite: ^2.0.0
+ vite-plugin-package-config: ^0.1.0
+ dependencies:
+ debug: 4.3.4
+ fs-extra: 10.1.0
+ vite: 2.9.15_less@4.1.3
+ vite-plugin-package-config: 0.1.1_vite@2.9.15
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /vite-plugin-package-config/0.1.1_vite@2.9.15:
+ resolution: {integrity: sha512-w9B3I8ZnqoyhlbzimXjXNk85imrMZgvI9m8f6j3zonK5IVA5KXzpT+PZOHlDz8lqh1vqvoEI1uhy+ZDoLAiA/w==}
+ peerDependencies:
+ vite: ^2.0.0
+ dependencies:
+ debug: 4.3.4
+ vite: 2.9.15_less@4.1.3
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /vite-plugin-purge-icons/0.8.2_vite@2.9.15:
+ resolution: {integrity: sha512-rW3RcNKj7QY3M7wcnwYVc3Ig+WwSQQ/Z67v+xdtk/8MA+ON05A3zc3qGaPdi6+8BUKYDpqvviKYiuLgRjleUOQ==}
+ engines: {node: '>= 12'}
+ peerDependencies:
+ vite: ^2.0.0-beta.3 || ^3.0.0
+ dependencies:
+ '@purge-icons/core': 0.8.0
+ '@purge-icons/generated': 0.8.1
+ rollup-plugin-purge-icons: 0.8.1
+ vite: 2.9.15_less@4.1.3
+ transitivePeerDependencies:
+ - encoding
+ - supports-color
+ dev: true
+
+ /vite-plugin-pwa/0.12.8_vite@2.9.15:
+ resolution: {integrity: sha512-pSiFHmnJGMQJJL8aJzQ8SaraZBSBPMGvGUkCNzheIq9UQCEk/eP3UmANNmS9eupuhIpTK8AdxTOHcaMcAqAbCA==}
+ peerDependencies:
+ vite: ^2.0.0 || ^3.0.0-0
+ dependencies:
+ debug: 4.3.4
+ fast-glob: 3.2.12
+ pretty-bytes: 6.1.0
+ rollup: 2.72.0
+ vite: 2.9.15_less@4.1.3
+ workbox-build: 6.5.4
+ workbox-window: 6.5.4
+ transitivePeerDependencies:
+ - '@types/babel__core'
+ - supports-color
+ dev: true
+
+ /vite-plugin-style-import/2.0.0_vite@2.9.15:
+ resolution: {integrity: sha512-qtoHQae5dSUQPo/rYz/8p190VU5y19rtBaeV7ryLa/AYAU/e9CG89NrN/3+k7MR8mJy/GPIu91iJ3zk9foUOSA==}
+ peerDependencies:
+ vite: '>=2.0.0'
+ dependencies:
+ '@rollup/pluginutils': 4.2.1
+ change-case: 4.1.2
+ console: 0.7.2
+ es-module-lexer: 0.9.3
+ fs-extra: 10.1.0
+ magic-string: 0.25.9
+ pathe: 0.2.0
+ vite: 2.9.15_less@4.1.3
+ dev: true
+
+ /vite-plugin-svg-icons/2.0.1_vite@2.9.15:
+ resolution: {integrity: sha512-6ktD+DhV6Rz3VtedYvBKKVA2eXF+sAQVaKkKLDSqGUfnhqXl3bj5PPkVTl3VexfTuZy66PmINi8Q6eFnVfRUmA==}
+ peerDependencies:
+ vite: '>=2.0.0'
+ dependencies:
+ '@types/svgo': 2.6.4
+ cors: 2.8.5
+ debug: 4.3.4
+ etag: 1.8.1
+ fs-extra: 10.1.0
+ pathe: 0.2.0
+ svg-baker: 1.7.0
+ svgo: 2.8.0
+ vite: 2.9.15_less@4.1.3
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /vite-plugin-theme/0.8.6_vite@2.9.15:
+ resolution: {integrity: sha512-GyoP9JjGkF106AawBh1kvw2eQZ/CCPeZKN5p5XhQe1ah1LO7A/6aVGY5gYGWk2qHG9nXpM1IvxjdbMsg94bvYg==}
+ peerDependencies:
+ vite: '>=2.0.0-beta.49'
+ dependencies:
+ '@types/node': 14.18.37
+ '@types/tinycolor2': 1.4.3
+ chalk: 4.1.2
+ clean-css: 5.3.2
+ debug: 4.3.4
+ esbuild: 0.11.23
+ esbuild-plugin-alias: 0.1.2
+ tinycolor2: 1.6.0
+ vite: 2.9.15_less@4.1.3
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /vite-plugin-windicss/1.8.10_vite@2.9.15:
+ resolution: {integrity: sha512-scywsuzo46lcTBohspmF0WiwhWEte6p+OUVrX4yr7VMRvLHMHVfLtJReyD5pppjijG7YOwVsZn7XBWWZtF658Q==}
+ peerDependencies:
+ vite: ^2.0.1 || ^3.0.0 || ^4.0.0
+ dependencies:
+ '@windicss/plugin-utils': 1.8.10
+ debug: 4.3.4
+ kolorist: 1.7.0
+ vite: 2.9.15_less@4.1.3
+ windicss: 3.5.6
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /vite/2.9.15_less@4.1.3:
+ resolution: {integrity: sha512-fzMt2jK4vQ3yK56te3Kqpkaeq9DkcZfBbzHwYpobasvgYmP2SoAr6Aic05CsB4CzCZbsDv4sujX3pkEGhLabVQ==}
+ engines: {node: '>=12.2.0'}
+ hasBin: true
+ peerDependencies:
+ less: '*'
+ sass: '*'
+ stylus: '*'
+ peerDependenciesMeta:
+ less:
+ optional: true
+ sass:
+ optional: true
+ stylus:
+ optional: true
+ dependencies:
+ esbuild: 0.14.54
+ less: 4.1.3
+ postcss: 8.4.21
+ resolve: 1.22.1
+ rollup: 2.72.0
+ optionalDependencies:
+ fsevents: 2.3.2
+ dev: true
+
+ /vue-demi/0.13.11_vue@3.2.47:
+ resolution: {integrity: sha512-IR8HoEEGM65YY3ZJYAjMlKygDQn25D5ajNFNoKh9RSDMQtlzCxtfQjdQgv9jjK+m3377SsJXY8ysq8kLCZL25A==}
+ engines: {node: '>=12'}
+ hasBin: true
+ requiresBuild: true
+ peerDependencies:
+ '@vue/composition-api': ^1.0.0-rc.1
+ vue: ^3.0.0-0 || ^2.6.0
+ peerDependenciesMeta:
+ '@vue/composition-api':
+ optional: true
+ dependencies:
+ vue: 3.2.47
+ dev: false
+
+ /vue-eslint-parser/8.3.0_eslint@8.36.0:
+ resolution: {integrity: sha512-dzHGG3+sYwSf6zFBa0Gi9ZDshD7+ad14DGOdTLjruRVgZXe2J+DcZ9iUhyR48z5g1PqRa20yt3Njna/veLJL/g==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ peerDependencies:
+ eslint: '>=6.0.0'
+ dependencies:
+ debug: 4.3.4
+ eslint: 8.36.0
+ eslint-scope: 7.1.1
+ eslint-visitor-keys: 3.3.0
+ espree: 9.5.0
+ esquery: 1.5.0
+ lodash: 4.17.21
+ semver: 7.3.8
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /vue-i18n/9.2.2_vue@3.2.47:
+ resolution: {integrity: sha512-yswpwtj89rTBhegUAv9Mu37LNznyu3NpyLQmozF3i1hYOhwpG8RjcjIFIIfnu+2MDZJGSZPXaKWvnQA71Yv9TQ==}
+ engines: {node: '>= 14'}
+ peerDependencies:
+ vue: ^3.0.0
+ dependencies:
+ '@intlify/core-base': 9.2.2
+ '@intlify/shared': 9.2.2
+ '@intlify/vue-devtools': 9.2.2
+ '@vue/devtools-api': 6.5.0
+ vue: 3.2.47
+ dev: false
+
+ /vue-router/4.1.6_vue@3.2.47:
+ resolution: {integrity: sha512-DYWYwsG6xNPmLq/FmZn8Ip+qrhFEzA14EI12MsMgVxvHFDYvlr4NXpVF5hrRH1wVcDP8fGi5F4rxuJSl8/r+EQ==}
+ peerDependencies:
+ vue: ^3.2.0
+ dependencies:
+ '@vue/devtools-api': 6.5.0
+ vue: 3.2.47
+ dev: false
+
+ /vue-template-compiler/2.7.14:
+ resolution: {integrity: sha512-zyA5Y3ArvVG0NacJDkkzJuPQDF8RFeRlzV2vLeSnhSpieO6LK2OVbdLPi5MPPs09Ii+gMO8nY4S3iKQxBxDmWQ==}
+ dependencies:
+ de-indent: 1.0.2
+ he: 1.2.0
+ dev: true
+
+ /vue-tsc/1.2.0_typescript@4.9.5:
+ resolution: {integrity: sha512-rIlzqdrhyPYyLG9zxsVRa+JEseeS9s8F2BbVVVWRRsTZvJO2BbhLEb2HW3MY+DFma0378tnIqs+vfTzbcQtRFw==}
+ hasBin: true
+ peerDependencies:
+ typescript: '*'
+ dependencies:
+ '@volar/vue-language-core': 1.2.0
+ '@volar/vue-typescript': 1.2.0
+ typescript: 4.9.5
+ dev: true
+
+ /vue-types/3.0.2_vue@3.2.47:
+ resolution: {integrity: sha512-IwUC0Aq2zwaXqy74h4WCvFCUtoV0iSWr0snWnE9TnU18S66GAQyqQbRf2qfJtUuiFsBf6qp0MEwdonlwznlcrw==}
+ engines: {node: '>=10.15.0'}
+ peerDependencies:
+ vue: ^3.0.0
+ dependencies:
+ is-plain-object: 3.0.1
+ vue: 3.2.47
+ dev: false
+
+ /vue-types/4.2.1_vue@3.2.47:
+ resolution: {integrity: sha512-DNQZmJuOvovLUIp0BENRkdnZHbI0V4e2mNvjAZOAXKD56YGvRchtUYOXA/XqTxdv7Ng5SJLZqRKRpAhm5NLaPQ==}
+ engines: {node: '>=12.16.0'}
+ peerDependencies:
+ vue: ^2.0.0 || ^3.0.0
+ dependencies:
+ is-plain-object: 5.0.0
+ vue: 3.2.47
+ dev: false
+
+ /vue/3.2.47:
+ resolution: {integrity: sha512-60188y/9Dc9WVrAZeUVSDxRQOZ+z+y5nO2ts9jWXSTkMvayiWxCWOWtBQoYjLeccfXkiiPZWAHcV+WTPhkqJHQ==}
+ dependencies:
+ '@vue/compiler-dom': 3.2.47
+ '@vue/compiler-sfc': 3.2.47
+ '@vue/runtime-dom': 3.2.47
+ '@vue/server-renderer': 3.2.47_vue@3.2.47
+ '@vue/shared': 3.2.47
+
+ /vxe-table-plugin-antd/3.0.5_vxe-table@4.3.10:
+ resolution: {integrity: sha512-qZXIxNKSqdvfVncvVopId7byy9FYUW+ygX4vwUhPceHwsUq0eyX5SVX/LLafqfsnkq4l8+EZ4zQ5/xQ6AfZ31Q==}
+ peerDependencies:
+ vxe-table: ^4.0.30
+ dependencies:
+ vxe-table: 4.3.10_vue@3.2.47+xe-utils@3.5.7
+ dev: false
+
+ /vxe-table-plugin-export-xlsx/3.0.4_vxe-table@4.3.10:
+ resolution: {integrity: sha512-Og/NbXRIb+BS6sJ48oDNVrZnlkcpaCd/zS8JBAZjHLgioWr1Xoob6FEpaeXBebGPPgTumZNUrrBO57JhhYAerA==}
+ peerDependencies:
+ vxe-table: ^4.0.27
+ dependencies:
+ vxe-table: 4.3.10_vue@3.2.47+xe-utils@3.5.7
+ dev: false
+
+ /vxe-table/4.3.10_vue@3.2.47+xe-utils@3.5.7:
+ resolution: {integrity: sha512-qxLhA3hiAfxsm8+dbN1n7+FrRwMEzUB/676x67gEb3H63WFWulRvTc88LCe0itMcuYcpy7uZHn5ruRsz0KnorQ==}
+ peerDependencies:
+ vue: ^3.2.28
+ xe-utils: ^3.5.0
+ dependencies:
+ vue: 3.2.47
+ xe-utils: 3.5.7
+ dev: false
+
+ /warning/4.0.3:
+ resolution: {integrity: sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==}
+ dependencies:
+ loose-envify: 1.4.0
+ dev: false
+
+ /wcwidth/1.0.1:
+ resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==}
+ dependencies:
+ defaults: 1.0.4
+ dev: true
+
+ /webidl-conversions/3.0.1:
+ resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
+ dev: true
+
+ /webidl-conversions/4.0.2:
+ resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==}
+ dev: true
+
+ /whatwg-url/5.0.0:
+ resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
+ dependencies:
+ tr46: 0.0.3
+ webidl-conversions: 3.0.1
+ dev: true
+
+ /whatwg-url/7.1.0:
+ resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==}
+ dependencies:
+ lodash.sortby: 4.7.0
+ tr46: 1.0.1
+ webidl-conversions: 4.0.2
+ dev: true
+
+ /which-boxed-primitive/1.0.2:
+ resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==}
+ dependencies:
+ is-bigint: 1.0.4
+ is-boolean-object: 1.1.2
+ is-number-object: 1.0.7
+ is-string: 1.0.7
+ is-symbol: 1.0.4
+ dev: true
+
+ /which-module/2.0.0:
+ resolution: {integrity: sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==}
+ dev: false
+
+ /which-typed-array/1.1.9:
+ resolution: {integrity: sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ available-typed-arrays: 1.0.5
+ call-bind: 1.0.2
+ for-each: 0.3.3
+ gopd: 1.0.1
+ has-tostringtag: 1.0.0
+ is-typed-array: 1.1.10
+ dev: true
+
+ /which/1.3.1:
+ resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==}
+ hasBin: true
+ dependencies:
+ isexe: 2.0.0
+ dev: true
+
+ /which/2.0.2:
+ resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
+ engines: {node: '>= 8'}
+ hasBin: true
+ dependencies:
+ isexe: 2.0.0
+ dev: true
+
+ /windicss/3.5.6:
+ resolution: {integrity: sha512-P1mzPEjgFMZLX0ZqfFht4fhV/FX8DTG7ERG1fBLiWvd34pTLVReS5CVsewKn9PApSgXnVfPWwvq+qUsRwpnwFA==}
+ engines: {node: '>= 12'}
+ hasBin: true
+ dev: true
+
+ /wmf/1.0.2:
+ resolution: {integrity: sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==}
+ engines: {node: '>=0.8'}
+ dev: false
+
+ /word-wrap/1.2.3:
+ resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /word/0.3.0:
+ resolution: {integrity: sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==}
+ engines: {node: '>=0.8'}
+ dev: false
+
+ /wordwrap/1.0.0:
+ resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==}
+ dev: true
+
+ /workbox-background-sync/6.5.4:
+ resolution: {integrity: sha512-0r4INQZMyPky/lj4Ou98qxcThrETucOde+7mRGJl13MPJugQNKeZQOdIJe/1AchOP23cTqHcN/YVpD6r8E6I8g==}
+ dependencies:
+ idb: 7.1.1
+ workbox-core: 6.5.4
+ dev: true
+
+ /workbox-broadcast-update/6.5.4:
+ resolution: {integrity: sha512-I/lBERoH1u3zyBosnpPEtcAVe5lwykx9Yg1k6f8/BGEPGaMMgZrwVrqL1uA9QZ1NGGFoyE6t9i7lBjOlDhFEEw==}
+ dependencies:
+ workbox-core: 6.5.4
+ dev: true
+
+ /workbox-build/6.5.4:
+ resolution: {integrity: sha512-kgRevLXEYvUW9WS4XoziYqZ8Q9j/2ziJYEtTrjdz5/L/cTUa2XfyMP2i7c3p34lgqJ03+mTiz13SdFef2POwbA==}
+ engines: {node: '>=10.0.0'}
+ dependencies:
+ '@apideck/better-ajv-errors': 0.3.6_ajv@8.12.0
+ '@babel/core': 7.21.0
+ '@babel/preset-env': 7.20.2_@babel+core@7.21.0
+ '@babel/runtime': 7.21.0
+ '@rollup/plugin-babel': 5.3.1_66seq7zzf4sfin4xsqgdvqviau
+ '@rollup/plugin-node-resolve': 11.2.1_rollup@2.72.0
+ '@rollup/plugin-replace': 2.4.2_rollup@2.72.0
+ '@surma/rollup-plugin-off-main-thread': 2.2.3
+ ajv: 8.12.0
+ common-tags: 1.8.2
+ fast-json-stable-stringify: 2.1.0
+ fs-extra: 9.1.0
+ glob: 7.2.3
+ lodash: 4.17.21
+ pretty-bytes: 5.6.0
+ rollup: 2.72.0
+ rollup-plugin-terser: 7.0.2_rollup@2.72.0
+ source-map: 0.8.0-beta.0
+ stringify-object: 3.3.0
+ strip-comments: 2.0.1
+ tempy: 0.6.0
+ upath: 1.2.0
+ workbox-background-sync: 6.5.4
+ workbox-broadcast-update: 6.5.4
+ workbox-cacheable-response: 6.5.4
+ workbox-core: 6.5.4
+ workbox-expiration: 6.5.4
+ workbox-google-analytics: 6.5.4
+ workbox-navigation-preload: 6.5.4
+ workbox-precaching: 6.5.4
+ workbox-range-requests: 6.5.4
+ workbox-recipes: 6.5.4
+ workbox-routing: 6.5.4
+ workbox-strategies: 6.5.4
+ workbox-streams: 6.5.4
+ workbox-sw: 6.5.4
+ workbox-window: 6.5.4
+ transitivePeerDependencies:
+ - '@types/babel__core'
+ - supports-color
+ dev: true
+
+ /workbox-cacheable-response/6.5.4:
+ resolution: {integrity: sha512-DCR9uD0Fqj8oB2TSWQEm1hbFs/85hXXoayVwFKLVuIuxwJaihBsLsp4y7J9bvZbqtPJ1KlCkmYVGQKrBU4KAug==}
+ dependencies:
+ workbox-core: 6.5.4
+ dev: true
+
+ /workbox-core/6.5.4:
+ resolution: {integrity: sha512-OXYb+m9wZm8GrORlV2vBbE5EC1FKu71GGp0H4rjmxmF4/HLbMCoTFws87M3dFwgpmg0v00K++PImpNQ6J5NQ6Q==}
+ dev: true
+
+ /workbox-expiration/6.5.4:
+ resolution: {integrity: sha512-jUP5qPOpH1nXtjGGh1fRBa1wJL2QlIb5mGpct3NzepjGG2uFFBn4iiEBiI9GUmfAFR2ApuRhDydjcRmYXddiEQ==}
+ dependencies:
+ idb: 7.1.1
+ workbox-core: 6.5.4
+ dev: true
+
+ /workbox-google-analytics/6.5.4:
+ resolution: {integrity: sha512-8AU1WuaXsD49249Wq0B2zn4a/vvFfHkpcFfqAFHNHwln3jK9QUYmzdkKXGIZl9wyKNP+RRX30vcgcyWMcZ9VAg==}
+ dependencies:
+ workbox-background-sync: 6.5.4
+ workbox-core: 6.5.4
+ workbox-routing: 6.5.4
+ workbox-strategies: 6.5.4
+ dev: true
+
+ /workbox-navigation-preload/6.5.4:
+ resolution: {integrity: sha512-IIwf80eO3cr8h6XSQJF+Hxj26rg2RPFVUmJLUlM0+A2GzB4HFbQyKkrgD5y2d84g2IbJzP4B4j5dPBRzamHrng==}
+ dependencies:
+ workbox-core: 6.5.4
+ dev: true
+
+ /workbox-precaching/6.5.4:
+ resolution: {integrity: sha512-hSMezMsW6btKnxHB4bFy2Qfwey/8SYdGWvVIKFaUm8vJ4E53JAY+U2JwLTRD8wbLWoP6OVUdFlXsTdKu9yoLTg==}
+ dependencies:
+ workbox-core: 6.5.4
+ workbox-routing: 6.5.4
+ workbox-strategies: 6.5.4
+ dev: true
+
+ /workbox-range-requests/6.5.4:
+ resolution: {integrity: sha512-Je2qR1NXCFC8xVJ/Lux6saH6IrQGhMpDrPXWZWWS8n/RD+WZfKa6dSZwU+/QksfEadJEr/NfY+aP/CXFFK5JFg==}
+ dependencies:
+ workbox-core: 6.5.4
+ dev: true
+
+ /workbox-recipes/6.5.4:
+ resolution: {integrity: sha512-QZNO8Ez708NNwzLNEXTG4QYSKQ1ochzEtRLGaq+mr2PyoEIC1xFW7MrWxrONUxBFOByksds9Z4//lKAX8tHyUA==}
+ dependencies:
+ workbox-cacheable-response: 6.5.4
+ workbox-core: 6.5.4
+ workbox-expiration: 6.5.4
+ workbox-precaching: 6.5.4
+ workbox-routing: 6.5.4
+ workbox-strategies: 6.5.4
+ dev: true
+
+ /workbox-routing/6.5.4:
+ resolution: {integrity: sha512-apQswLsbrrOsBUWtr9Lf80F+P1sHnQdYodRo32SjiByYi36IDyL2r7BH1lJtFX8fwNHDa1QOVY74WKLLS6o5Pg==}
+ dependencies:
+ workbox-core: 6.5.4
+ dev: true
+
+ /workbox-strategies/6.5.4:
+ resolution: {integrity: sha512-DEtsxhx0LIYWkJBTQolRxG4EI0setTJkqR4m7r4YpBdxtWJH1Mbg01Cj8ZjNOO8etqfA3IZaOPHUxCs8cBsKLw==}
+ dependencies:
+ workbox-core: 6.5.4
+ dev: true
+
+ /workbox-streams/6.5.4:
+ resolution: {integrity: sha512-FXKVh87d2RFXkliAIheBojBELIPnWbQdyDvsH3t74Cwhg0fDheL1T8BqSM86hZvC0ZESLsznSYWw+Va+KVbUzg==}
+ dependencies:
+ workbox-core: 6.5.4
+ workbox-routing: 6.5.4
+ dev: true
+
+ /workbox-sw/6.5.4:
+ resolution: {integrity: sha512-vo2RQo7DILVRoH5LjGqw3nphavEjK4Qk+FenXeUsknKn14eCNedHOXWbmnvP4ipKhlE35pvJ4yl4YYf6YsJArA==}
+ dev: true
+
+ /workbox-window/6.5.4:
+ resolution: {integrity: sha512-HnLZJDwYBE+hpG25AQBO8RUWBJRaCsI9ksQJEp3aCOFCaG5kqaToAYXFRAHxzRluM2cQbGzdQF5rjKPWPA1fug==}
+ dependencies:
+ '@types/trusted-types': 2.0.3
+ workbox-core: 6.5.4
+ dev: true
+
+ /wrap-ansi/6.2.0:
+ resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==}
+ engines: {node: '>=8'}
+ dependencies:
+ ansi-styles: 4.3.0
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ dev: false
+
+ /wrap-ansi/7.0.0:
+ resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
+ engines: {node: '>=10'}
+ dependencies:
+ ansi-styles: 4.3.0
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ dev: true
+
+ /wrappy/1.0.2:
+ resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
+
+ /xe-utils/3.5.7:
+ resolution: {integrity: sha512-3H+fDBKBR2wLJgyA7k9C/w1Xljx6Maml5ukV0WDY06HjYyGs2FEz6XhcwRCLIDXX4pBP3Gu0nX9DbCeuuRA2Ew==}
+ dev: false
+
+ /xlsx/0.17.5:
+ resolution: {integrity: sha512-lXNU0TuYsvElzvtI6O7WIVb9Zar1XYw7Xb3VAx2wn8N/n0whBYrCnHMxtFyIiUU1Wjf09WzmLALDfBO5PqTb1g==}
+ engines: {node: '>=0.8'}
+ hasBin: true
+ dependencies:
+ adler-32: 1.2.0
+ cfb: 1.2.2
+ codepage: 1.15.0
+ crc-32: 1.2.2
+ ssf: 0.11.2
+ wmf: 1.0.2
+ word: 0.3.0
+ dev: false
+
+ /xmlchars/2.2.0:
+ resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==}
+ dev: false
+
+ /xtend/4.0.2:
+ resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==}
+ engines: {node: '>=0.4'}
+ dev: true
+
+ /y18n/4.0.3:
+ resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==}
+ dev: false
+
+ /y18n/5.0.8:
+ resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
+ engines: {node: '>=10'}
+ dev: true
+
+ /yallist/2.1.2:
+ resolution: {integrity: sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==}
+ dev: true
+
+ /yallist/3.1.1:
+ resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
+ dev: true
+
+ /yallist/4.0.0:
+ resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
+ dev: true
+
+ /yargs-parser/18.1.3:
+ resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==}
+ engines: {node: '>=6'}
+ dependencies:
+ camelcase: 5.3.1
+ decamelize: 1.2.0
+ dev: false
+
+ /yargs-parser/20.2.9:
+ resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==}
+ engines: {node: '>=10'}
+ dev: true
+
+ /yargs-parser/21.1.1:
+ resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==}
+ engines: {node: '>=12'}
+ dev: true
+
+ /yargs/15.4.1:
+ resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==}
+ engines: {node: '>=8'}
+ dependencies:
+ cliui: 6.0.0
+ decamelize: 1.2.0
+ find-up: 4.1.0
+ get-caller-file: 2.0.5
+ require-directory: 2.1.1
+ require-main-filename: 2.0.0
+ set-blocking: 2.0.0
+ string-width: 4.2.3
+ which-module: 2.0.0
+ y18n: 4.0.3
+ yargs-parser: 18.1.3
+ dev: false
+
+ /yargs/16.2.0:
+ resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==}
+ engines: {node: '>=10'}
+ dependencies:
+ cliui: 7.0.4
+ escalade: 3.1.1
+ get-caller-file: 2.0.5
+ require-directory: 2.1.1
+ string-width: 4.2.3
+ y18n: 5.0.8
+ yargs-parser: 20.2.9
+ dev: true
+
+ /yargs/17.7.1:
+ resolution: {integrity: sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==}
+ engines: {node: '>=12'}
+ dependencies:
+ cliui: 8.0.1
+ escalade: 3.1.1
+ get-caller-file: 2.0.5
+ require-directory: 2.1.1
+ string-width: 4.2.3
+ y18n: 5.0.8
+ yargs-parser: 21.1.1
+ dev: true
+
+ /yauzl/2.10.0:
+ resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==}
+ dependencies:
+ buffer-crc32: 0.2.13
+ fd-slicer: 1.1.0
+ dev: true
+
+ /yocto-queue/0.1.0:
+ resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
+ engines: {node: '>=10'}
+ dev: true
+
+ /zip-stream/4.1.0:
+ resolution: {integrity: sha512-zshzwQW7gG7hjpBlgeQP9RuyPGNxvJdzR8SUM3QhxCnLjWN2E7j3dOvpeDcQoETfHx0urRS7EtmVToql7YpU4A==}
+ engines: {node: '>= 10'}
+ dependencies:
+ archiver-utils: 2.1.0
+ compress-commons: 4.1.1
+ readable-stream: 3.6.2
+ dev: false
+
+ /zrender/5.4.1:
+ resolution: {integrity: sha512-M4Z05BHWtajY2241EmMPHglDQAJ1UyHQcYsxDNzD9XLSkPDqMq4bB28v9Pb4mvHnVQ0GxyTklZ/69xCFP6RXBA==}
+ dependencies:
+ tslib: 2.3.0
+ dev: false
diff --git a/public/favicon.ico b/public/favicon.ico
index a9a2b40..1356b6d 100644
Binary files a/public/favicon.ico and b/public/favicon.ico differ
diff --git a/public/resource/img/logo.png b/public/resource/img/logo.png
new file mode 100644
index 0000000..fdbe40a
Binary files /dev/null and b/public/resource/img/logo.png differ
diff --git a/public/resource/img/logo.svg b/public/resource/img/logo.svg
deleted file mode 100644
index 64b876e..0000000
--- a/public/resource/img/logo.svg
+++ /dev/null
@@ -1,2 +0,0 @@
-
\ No newline at end of file
diff --git a/public/resource/img/pwa-192x192.png b/public/resource/img/pwa-192x192.png
index 208d0fa..4a0515b 100644
Binary files a/public/resource/img/pwa-192x192.png and b/public/resource/img/pwa-192x192.png differ
diff --git a/public/resource/img/pwa-512x512.png b/public/resource/img/pwa-512x512.png
index 07409fe..00b75d5 100644
Binary files a/public/resource/img/pwa-512x512.png and b/public/resource/img/pwa-512x512.png differ
diff --git a/src/App.vue b/src/App.vue
index fa7dad3..5c5cac2 100644
--- a/src/App.vue
+++ b/src/App.vue
@@ -11,6 +11,7 @@
import { AppProvider } from '/@/components/Application';
import { useTitle } from '/@/hooks/web/useTitle';
import { useLocale } from '/@/locales/useLocale';
+ import 'dayjs/locale/zh-cn';
// 获取国际化
const { getAntdLocale } = useLocale();
diff --git a/src/api/platform/core/controller/user.ts b/src/api/platform/core/controller/user.ts
index bb23875..d644bdb 100644
--- a/src/api/platform/core/controller/user.ts
+++ b/src/api/platform/core/controller/user.ts
@@ -50,7 +50,7 @@ export const login = (params: LoginParams, options?: boolean | RequestOptions) =
export const getUserInfo = () => defHttp.get
({ url: Api.getUserInfo });
/** 登出 */
-export const logout = () => defHttp.delete({ url: Api.logout });
+export const logout = () => defHttp.delete({ url: Api.logout }, { errorMessageMode: 'none'});
/** 获取验证码 */
export const getCaptcha = () => defHttp.get({ url: `${Api.getCaptcha}?key=${Date.now()}` });
diff --git a/src/assets/images/login-ad-mini.jpg b/src/assets/images/login-ad-mini.jpg
new file mode 100644
index 0000000..f5f21fd
Binary files /dev/null and b/src/assets/images/login-ad-mini.jpg differ
diff --git a/src/assets/images/logo.png b/src/assets/images/logo.png
new file mode 100644
index 0000000..fdbe40a
Binary files /dev/null and b/src/assets/images/logo.png differ
diff --git a/src/assets/images/logo.svg b/src/assets/images/logo.svg
deleted file mode 100644
index 64b876e..0000000
--- a/src/assets/images/logo.svg
+++ /dev/null
@@ -1,2 +0,0 @@
-
\ No newline at end of file
diff --git a/src/assets/styles/ant-design/btn.less b/src/assets/styles/ant-design/btn.less
index 986e95b..2d450e8 100644
--- a/src/assets/styles/ant-design/btn.less
+++ b/src/assets/styles/ant-design/btn.less
@@ -8,19 +8,16 @@
&-primary {
color: @white;
background-color: @button-primary-color;
- border-width: 0;
&:hover,
&:focus {
- color: @white !important;
+ color: @white;
background-color: @button-primary-hover-color;
}
+ }
- &[disabled],
- &[disabled]:hover {
- color: @white;
- background-color: fade(@button-primary-color, 40%);
- }
+ &-primary:not(&-background-ghost):not([disabled]) {
+ color: @white;
}
&-default {
@@ -37,7 +34,7 @@
}
[data-theme='light'] &.ant-btn-link.is-disabled {
- color: rgba(0, 0, 0, 0.25);
+ color: rgb(0 0 0 / 25%);
text-shadow: none;
cursor: not-allowed !important;
background-color: transparent !important;
@@ -46,7 +43,7 @@
}
[data-theme='dark'] &.ant-btn-link.is-disabled {
- color: rgba(255, 255, 255, 0.25) !important;
+ color: rgb(255 255 255 / 25%) !important;
text-shadow: none;
cursor: not-allowed !important;
background-color: transparent !important;
@@ -54,6 +51,8 @@
box-shadow: none;
}
+ // color: @white;
+
&-success.ant-btn-link:not([disabled='disabled']) {
color: @button-success-color;
@@ -62,6 +61,10 @@
color: @button-success-hover-color;
border-color: transparent;
}
+
+ &:active {
+ color: @button-success-active-color;
+ }
}
&-success.ant-btn-link.ant-btn-loading,
@@ -74,11 +77,11 @@
}
}
- &-success:not(.ant-btn-link) {
+ &-success:not(.ant-btn-link, .is-disabled) {
color: @white;
background-color: @button-success-color;
border-color: @button-success-color;
- border-width: 0;
+ //border-width: 0;
&:hover,
&:focus {
@@ -87,11 +90,9 @@
border-color: @button-success-hover-color;
}
- &[disabled],
- &[disabled]:hover {
- color: @white;
- background-color: fade(@button-success-color, 40%);
- border-color: fade(@button-success-color, 40%);
+ &:active {
+ background-color: @button-success-active-color;
+ border-color: @button-success-active-color;
}
}
@@ -103,13 +104,17 @@
color: @button-warn-hover-color;
border-color: transparent;
}
+
+ &:active {
+ color: @button-warn-active-color;
+ }
}
- &-warning:not(.ant-btn-link) {
+ &-warning:not(.ant-btn-link, .is-disabled) {
color: @white;
background-color: @button-warn-color;
border-color: @button-warn-color;
- border-width: 0;
+ //border-width: 0;
&:hover,
&:focus {
@@ -118,11 +123,9 @@
border-color: @button-warn-hover-color;
}
- &[disabled],
- &[disabled]:hover {
- color: @white;
- background-color: fade(@button-warn-color, 40%);
- border-color: fade(@button-warn-color, 40%);
+ &:active {
+ background-color: @button-warn-active-color;
+ border-color: @button-warn-active-color;
}
}
@@ -134,13 +137,17 @@
color: @button-error-hover-color;
border-color: transparent;
}
+
+ &:active {
+ color: @button-error-active-color;
+ }
}
- &-error:not(.ant-btn-link) {
+ &-error:not(.ant-btn-link, .is-disabled) {
color: @white;
background-color: @button-error-color;
border-color: @button-error-color;
- border-width: 0;
+ //border-width: 0;
&:hover,
&:focus {
@@ -149,41 +156,98 @@
border-color: @button-error-hover-color;
}
- &[disabled],
- &[disabled]:hover {
- color: @white;
- background-color: fade(@button-error-color, 40%);
- border-color: fade(@button-error-color, 40%);
+ &:active {
+ background-color: @button-error-active-color;
+ border-color: @button-error-active-color;
}
}
- &-background-ghost.ant-btn-link,
- &.ant-btn-dashed:not([disabled='disabled']) {
- color: @text-color-call-out;
+ &-background-ghost {
+ border-width: 1px;
+ background-color: transparent !important;
- &:hover {
- color: @button-primary-color;
+ &[disabled],
+ &[disabled]:hover {
+ color: fade(@white, 40%) !important;
+ background-color: transparent !important;
+ border-color: fade(@white, 40%) !important;
}
}
- &-background-ghost {
+ &-dashed&-background-ghost,
+ &-default&-background-ghost {
color: @button-ghost-color;
- background-color: transparent;
border-color: @button-ghost-color;
- border-width: 1px;
&:hover,
&:focus {
- color: @button-ghost-hover-color !important;
- background-color: @button-ghost-hover-bg-color;
+ color: @button-ghost-hover-color;
border-color: @button-ghost-hover-color;
}
+ &:active {
+ color: @button-ghost-active-color;
+ border-color: @button-ghost-active-color;
+ }
+
&[disabled],
&[disabled]:hover {
- color: @button-ghost-color;
- background-color: fade(@white, 40%);
- border-color: fade(@button-ghost-color, 40%);
+ color: fade(@white, 40%) !important;
+ border-color: fade(@white, 40%) !important;
+ }
+ }
+
+ &-background-ghost&-success:not(.ant-btn-link) {
+ color: @button-success-color;
+ background-color: transparent;
+ border-color: @button-success-color;
+ border-width: 1px;
+
+ &:hover,
+ &:focus {
+ color: @button-success-hover-color !important;
+ border-color: @button-success-hover-color;
+ }
+
+ &:active {
+ color: @button-success-active-color;
+ border-color: @button-success-active-color;
+ }
+ }
+
+ &-background-ghost&-warning:not(.ant-btn-link) {
+ color: @button-warn-color;
+ background-color: transparent;
+ border-color: @button-warn-color;
+ border-width: 1px;
+
+ &:hover,
+ &:focus {
+ color: @button-warn-hover-color !important;
+ border-color: @button-warn-hover-color;
+ }
+
+ &:active {
+ color: @button-warn-active-color;
+ border-color: @button-warn-active-color;
+ }
+ }
+
+ &-background-ghost&-error:not(.ant-btn-link) {
+ color: @button-error-color;
+ background-color: transparent;
+ border-color: @button-error-color;
+ border-width: 1px;
+
+ &:hover,
+ &:focus {
+ color: @button-error-hover-color !important;
+ border-color: @button-error-hover-color;
+ }
+
+ &:active {
+ color: @button-error-active-color;
+ border-color: @button-error-active-color;
}
}
diff --git a/src/assets/styles/ant-design/index.less b/src/assets/styles/ant-design/index.less
index 21080fe..577c760 100644
--- a/src/assets/styles/ant-design/index.less
+++ b/src/assets/styles/ant-design/index.less
@@ -61,3 +61,11 @@ span.anticon:not(.app-iconify) {
border-top: 0 !important;
border-left: 0 !important;
}
+
+.ant-form-item-control-input-content {
+ > div {
+ > div {
+ max-width: 100%;
+ }
+ }
+}
diff --git a/src/assets/styles/ant-design/input.less b/src/assets/styles/ant-design/input.less
index 53d6978..c48cc39 100644
--- a/src/assets/styles/ant-design/input.less
+++ b/src/assets/styles/ant-design/input.less
@@ -1,7 +1,8 @@
@import (reference) '../color.less';
.ant-input {
- &-number {
+ &-number,
+ &-number-group-wrapper {
min-width: 110px;
}
}
diff --git a/src/assets/styles/color.less b/src/assets/styles/color.less
index 93928dc..e682abe 100644
--- a/src/assets/styles/color.less
+++ b/src/assets/styles/color.less
@@ -113,19 +113,24 @@ html {
@button-primary-color: @primary-color;
@button-primary-hover-color: darken(@primary-color, 5%);
+@button-primary-active-color: darken(@primary-color, 5%);
@button-ghost-color: @primary-color;
@button-ghost-hover-color: lighten(@primary-color, 10%);
@button-ghost-hover-bg-color: #e1ebf6;
+@button-ghost-active-color: darken(@white, 10%);
@button-success-color: @success-color;
@button-success-hover-color: darken(@success-color, 10%);
+@button-success-active-color: darken(@success-color, 10%);
@button-warn-color: @warning-color;
@button-warn-hover-color: darken(@warning-color, 10%);
+@button-warn-active-color: darken(@warning-color, 10%);
@button-error-color: @error-color;
@button-error-hover-color: darken(@error-color, 10%);
+@button-error-active-color: darken(@error-color, 10%);
@button-cancel-color: @text-color-call-out;
@button-cancel-bg-color: @white;
diff --git a/src/assets/styles/common.less b/src/assets/styles/common.less
index ae747c9..25b63f5 100644
--- a/src/assets/styles/common.less
+++ b/src/assets/styles/common.less
@@ -50,3 +50,191 @@
opacity: 0.75;
}
}
+
+// =================================
+// Custom Basic Table
+// =================================
+html[data-theme='dark'] {
+ .@{custom-basic-table-prefix-cls} {
+ // [黑暗模式]table顶部插槽多选栏样式
+ .alert {
+ background-color: #323232;
+ border-color: #424242;
+ }
+ }
+}
+
+.@{custom-basic-table-prefix-cls} {
+ max-width: 100%;
+ height: 100%;
+
+ &-row__striped {
+ td {
+ background-color: @app-content-background;
+ }
+ }
+
+ &-form-container {
+ padding: 16px;
+
+ .ant-form {
+ width: 100%;
+ padding: 12px 10px 6px 10px;
+ margin-bottom: 8px;
+ background-color: @component-background;
+ border-radius: 2px;
+ }
+ }
+
+
+ .ant-tag {
+ margin-right: 0;
+ }
+
+ .ant-table-wrapper {
+ padding: 6px;
+ background-color: @component-background;
+ border-radius: 2px;
+
+ .ant-table-title {
+ min-height: 40px;
+ padding: 0 0 8px !important;
+ }
+
+ .ant-table.ant-table-bordered .ant-table-title {
+ border: none !important;
+ }
+ }
+
+ .ant-table {
+ width: 100%;
+ overflow-x: hidden;
+
+ &-title {
+ display: flex;
+ padding: 8px 6px;
+ border-bottom: none;
+ justify-content: space-between;
+ align-items: center;
+ }
+
+ .ant-table-tbody > tr.ant-table-row-selected td {
+ background-color: fade(@primary-color, 8%) !important;
+ }
+ }
+
+ .ant-pagination {
+ margin: 10px 0 0;
+ }
+
+ .ant-table-footer {
+ padding: 0;
+
+ .ant-table-wrapper {
+ padding: 0;
+ }
+
+ table {
+ border: none !important;
+ }
+
+ .ant-table-body {
+ overflow-x: hidden !important;
+ }
+
+ td {
+ padding: 12px 8px;
+ }
+ }
+
+ // [明亮模式]table顶部插槽多选栏样式
+ .alert {
+ height: 38px;
+ background-color: #f3f3f3;
+ border-color: #e3e3e3;
+ }
+
+ &--inset {
+ .ant-table-wrapper {
+ padding: 0;
+ }
+ }
+
+
+ // 表格头部工具栏
+ &__toolbar {
+ flex: 1;
+ display: flex;
+ align-items: center;
+ justify-content: flex-end;
+
+ > * {
+ margin-right: 8px;
+ }
+ }
+
+ // 表格列动作列
+ &__action {
+ display: flex;
+ align-items: center;
+ height: 22px;
+
+ .action-divider {
+ display: table;
+ }
+
+ &.left {
+ justify-content: flex-start;
+ }
+
+ &.center {
+ justify-content: center;
+ }
+
+ &.right {
+ justify-content: flex-end;
+ }
+
+ button {
+ display: flex;
+ align-items: center;
+
+ span {
+ margin-left: 0 !important;
+ }
+ }
+
+ button.ant-btn-circle {
+ span {
+ margin: auto !important;
+ }
+ }
+
+ .ant-divider,
+ .ant-divider-vertical {
+ margin: 0 2px;
+ }
+
+ .icon-more {
+ transform: rotate(90deg);
+
+ svg {
+ font-size: 1.1em;
+ font-weight: 700;
+ }
+ }
+ }
+
+ // 表格设置
+ &__settings {
+ & > * {
+ margin-right: 12px;
+ }
+
+ svg {
+ width: 1.3em;
+ height: 1.3em;
+ }
+ }
+}
+
diff --git a/src/assets/styles/index.less b/src/assets/styles/index.less
index deccadb..3e4df4f 100644
--- a/src/assets/styles/index.less
+++ b/src/assets/styles/index.less
@@ -3,7 +3,7 @@
@import 'common.less';
@import 'ant-design/index.less';
@import 'theme.less';
-@import 'kicc.less';
+@import 'vxe-table/index.less';
input:-webkit-autofill {
-webkit-box-shadow: 0 0 0 1000px white inset !important;
@@ -22,8 +22,8 @@ html,
body {
width: 100%;
height: 100%;
- overflow: visible !important;
- overflow-x: hidden !important;
+ overflow: visible;
+ overflow-x: hidden;
&.color-weak {
filter: invert(80%);
diff --git a/src/assets/styles/kicc.less b/src/assets/styles/kicc.less
deleted file mode 100644
index 59d9480..0000000
--- a/src/assets/styles/kicc.less
+++ /dev/null
@@ -1,268 +0,0 @@
-/**
- * @program: kicc-ui
- * @description: kicc系统相关样式
- * 在kicc系统中全局调用的样式全部在这里配置
- * @author: entfrm开发团队-王翔
- * @create: 2022/4/7
- */
-
-.table-settings {
- & > * {
- margin-right: 12px;
- }
-
- svg {
- width: 1.3em;
- height: 1.3em;
- }
-}
-
-
-// 基础表格样式
-[data-theme='dark'] {
- .ant-table-tbody > tr:hover.ant-table-row-selected > td,
- .ant-table-tbody > tr.ant-table-row-selected td {
- background-color: #262626;
- }
-
- .@{basic-table-prefix-cls} {
- // [黑暗模式]table顶部插槽多选栏样式
- .alert {
- background-color: #323232;
- border-color: #424242;
- }
- }
-}
-
-.@{basic-table-prefix-cls} {
- max-width: 100%;
-
- &-row__striped {
- td {
- background-color: @app-content-background;
- }
- }
-
- &-form-container {
- padding: 16px;
-
- .ant-form {
- padding: 12px 10px 6px 10px;
- margin-bottom: 16px;
- background-color: @component-background;
- border-radius: 2px;
- }
- }
-
- .ant-tag {
- margin-right: 0;
- }
-
- .ant-table-wrapper {
- padding: 6px;
- background-color: @component-background;
- border-radius: 2px;
-
- .ant-table-title {
- min-height: 40px;
- padding: 0 0 8px 0 !important;
- }
-
- .ant-table.ant-table-bordered .ant-table-title {
- border: none !important;
- }
- }
-
- .ant-table {
- width: 100%;
- overflow-x: hidden;
-
- &-title {
- display: flex;
- padding: 8px 6px;
- border-bottom: none;
- justify-content: space-between;
- align-items: center;
- }
-
- .ant-table-tbody > tr.ant-table-row-selected td {
- background-color: fade(@primary-color, 8%) !important;
- }
- }
-
- .ant-pagination {
- margin: 10px 0 0 0;
- }
-
- .ant-table-footer {
- padding: 0;
-
- .ant-table-wrapper {
- padding: 0;
- }
-
- table {
- border: none !important;
- }
-
- .ant-table-body {
- overflow-x: hidden !important;
- overflow-y: scroll !important;
- }
-
- td {
- padding: 12px 8px;
- }
-
- // [明亮模式]table顶部插槽多选栏样式
- .alert {
- height: 38px;
- background-color: #f3f3f3;
- border-color: #e3e3e3;
- }
-
- &--inset {
- .ant-table-wrapper {
- padding: 0;
- }
- }
- }
-
- // 表格头部样式
- .@{basic-table-header-prefix-cls} {
- &__toolbar {
- flex: 1;
- display: flex;
- align-items: center;
- justify-content: flex-end;
-
- > * {
- margin-right: 8px;
- }
- }
- }
-
- // 表格动作样式
- .@{basic-table-action-prefix-cls} {
- display: flex;
- align-items: center;
-
- .action-divider {
- display: table;
- }
-
- &.left {
- justify-content: flex-start;
- }
-
- &.center {
- justify-content: center;
- }
-
- &.right {
- justify-content: flex-end;
- }
-
- button {
- display: flex;
- align-items: center;
-
- span {
- margin-left: 0 !important;
- }
- }
-
- button.ant-btn-circle {
- span {
- margin: auto !important;
- }
- }
-
- .ant-divider,
- .ant-divider-vertical {
- margin: 0 2px;
- }
-
- .icon-more {
- transform: rotate(90deg);
-
- svg {
- font-size: 1.1em;
- font-weight: 700;
- }
- }
- }
-
- // 表格设置样式
- .table-coulmn-drag-icon {
- margin: 0 5px;
- cursor: move;
- }
- .@{basic-column-setting-prefix-cls} {
- &__popover-title {
- position: relative;
- display: flex;
- align-items: center;
- justify-content: space-between;
- }
-
- &__check-item {
- display: flex;
- align-items: center;
- min-width: 100%;
- padding: 4px 16px 8px 0;
-
- .ant-checkbox-wrapper {
- width: 100%;
-
- &:hover {
- color: @primary-color;
- }
- }
- }
-
- &__fixed-left,
- &__fixed-right {
- color: rgba(0, 0, 0, 0.45);
- cursor: pointer;
-
- &.active,
- &:hover {
- color: @primary-color;
- }
-
- &.disabled {
- color: @disabled-color;
- cursor: not-allowed;
- }
- }
-
- &__fixed-right {
- transform: rotate(180deg);
- }
-
- &__cloumn-list {
- svg {
- width: 1em !important;
- height: 1em !important;
- }
-
- .ant-popover-inner-content {
- // max-height: 360px;
- padding-right: 0;
- padding-left: 0;
- // overflow: auto;
- }
-
- .ant-checkbox-group {
- width: 100%;
- min-width: 260px;
- // flex-wrap: wrap;
- }
-
- .scrollbar {
- height: 220px;
- }
- }
- }
-}
diff --git a/src/assets/styles/transition/fade.less b/src/assets/styles/transition/fade.less
index ee94ff1..7ca1885 100644
--- a/src/assets/styles/transition/fade.less
+++ b/src/assets/styles/transition/fade.less
@@ -1,3 +1,15 @@
+.fade-transition {
+ &-enter-active,
+ &-leave-active {
+ transition: opacity 0.2s ease-in-out;
+ }
+
+ &-enter-from,
+ &-leave-to {
+ opacity: 0;
+ }
+}
+
.fade-enter-active,
.fade-leave-active {
transition: opacity 0.2s ease-in-out;
diff --git a/src/assets/styles/var/index.less b/src/assets/styles/var/index.less
index 53d69e0..72336a1 100644
--- a/src/assets/styles/var/index.less
+++ b/src/assets/styles/var/index.less
@@ -8,12 +8,13 @@
@import (reference) '../color.less';
@import 'easing';
@import 'breakpoint';
-@import 'kicc';
@namespace: kicc;
// tabs
@multiple-height: 30px;
+@multiple-card-height: 50px;
+@multiple-smooth-height: 50px;
// headers
@header-height: 48px;
@@ -44,3 +45,7 @@
@content();
}
}
+
+@custom-basic-table-prefix-cls: ~'@{namespace}-custom-basic-table';
+
+@vxe-table-prefix-cls: ~'@{namespace}-vxe-table';
diff --git a/src/assets/styles/var/kicc.less b/src/assets/styles/var/kicc.less
deleted file mode 100644
index 3f1527f..0000000
--- a/src/assets/styles/var/kicc.less
+++ /dev/null
@@ -1,13 +0,0 @@
-/**
- * @program: kicc-ui
- * @description: kicc系统相关变量定义
- * 在kicc系统中全局调用的变量全部在这里配置
- * @author: entfrm开发团队-王翔
- * @create: 2022/4/7
- */
-
-// 基础表格变量
-@basic-table-prefix-cls: ~'@{namespace}-basic-table';
-@basic-table-header-prefix-cls: ~'@{namespace}-basic-table-header';
-@basic-table-action-prefix-cls: ~'@{namespace}-basic-table-action';
-@basic-column-setting-prefix-cls: ~'@{namespace}-basic-column-setting';
diff --git a/src/assets/styles/vxe-table/index.less b/src/assets/styles/vxe-table/index.less
new file mode 100644
index 0000000..1464bda
--- /dev/null
+++ b/src/assets/styles/vxe-table/index.less
@@ -0,0 +1 @@
+@import './vxe.dark.less';
diff --git a/src/assets/styles/vxe-table/vxe.dark.less b/src/assets/styles/vxe-table/vxe.dark.less
new file mode 100644
index 0000000..092058a
--- /dev/null
+++ b/src/assets/styles/vxe-table/vxe.dark.less
@@ -0,0 +1,110 @@
+[data-theme='dark'] .@{vxe-table-prefix-cls} {
+ @fontColor: #c9d1d9;
+ @bgColor: #151515;
+ @borderColor: #606060;
+
+ .vxe-cell--item,
+ .vxe-cell--title,
+ .vxe-cell,
+ .vxe-body--expanded-cell {
+ color: @fontColor;
+ }
+
+ .vxe-toolbar {
+ background-color: @bgColor;
+ }
+
+ .vxe-table--render-default .vxe-table--body-wrapper,
+ .vxe-table--render-default .vxe-table--footer-wrapper {
+ background-color: @bgColor;
+ }
+
+ // 外边框
+ .vxe-table--render-default .vxe-table--border-line {
+ border-color: @borderColor;
+ }
+
+ // header 下边框
+ .vxe-table .vxe-table--header-wrapper .vxe-table--header-border-line {
+ border-bottom-color: @borderColor;
+ }
+
+ // footer 上边框
+ .vxe-table--render-default .vxe-table--footer-wrapper {
+ border-top-color: @borderColor;
+ }
+
+ // 展开行 边框
+ .vxe-table--render-default .vxe-body--expanded-column {
+ border-bottom-color: @borderColor;
+ }
+
+ // 行斑马纹
+ .vxe-table--render-default .vxe-body--row.row--stripe {
+ background-color: #1e1e1e;
+ }
+
+ // 行hover
+ .vxe-table--render-default .vxe-body--row.row--hover {
+ background-color: #262626;
+ }
+
+ // 选中行
+ .vxe-table--render-default .vxe-body--row.row--checked {
+ background-color: #44403a;
+
+ &.row--hover {
+ background-color: #59524b;
+ }
+ }
+
+ .vxe-table--render-default.border--default .vxe-table--header-wrapper,
+ .vxe-table--render-default.border--full .vxe-table--header-wrapper,
+ .vxe-table--render-default.border--outer .vxe-table--header-wrapper {
+ background-color: #1d1d1d;
+ }
+
+ .vxe-table--render-default.border--default .vxe-body--column,
+ .vxe-table--render-default.border--default .vxe-footer--column,
+ .vxe-table--render-default.border--default .vxe-header--column,
+ .vxe-table--render-default.border--inner .vxe-body--column,
+ .vxe-table--render-default.border--inner .vxe-footer--column,
+ .vxe-table--render-default.border--inner .vxe-header--column {
+ background-image: linear-gradient(#1d1d1d, #1d1d1d);
+ }
+
+ // 列宽拖动
+ .vxe-header--column .vxe-resizable.is--line:before {
+ background-color: #505050;
+ }
+
+ // checkbox
+ .vxe-custom--option .vxe-checkbox--icon:before,
+ .vxe-export--panel-column-option .vxe-checkbox--icon:before,
+ .vxe-table--filter-option .vxe-checkbox--icon:before,
+ .vxe-table--render-default .vxe-cell--checkbox .vxe-checkbox--icon:before {
+ background-color: @bgColor;
+ border-color: @borderColor;
+ }
+
+ .vxe-toolbar .vxe-custom--option-wrapper {
+ background-color: @bgColor;
+ }
+
+ .vxe-button {
+ background-color: @bgColor;
+ border-color: @borderColor;
+ }
+
+ .vxe-button.type--button:not(.is--disabled):active {
+ background-color: @bgColor;
+ }
+
+ .vxe-toolbar .vxe-custom--wrapper.is--active > .vxe-button {
+ background-color: @bgColor;
+ }
+
+ .vxe-toolbar .vxe-custom--option-wrapper .vxe-custom--footer button {
+ color: @fontColor;
+ }
+}
diff --git a/src/components/AMap/src/AMapDesigner/index.vue b/src/components/AMap/src/AMapDesigner/index.vue
index 5035709..c737ebf 100644
--- a/src/components/AMap/src/AMapDesigner/index.vue
+++ b/src/components/AMap/src/AMapDesigner/index.vue
@@ -905,10 +905,10 @@
}
.operatePanel {
- border: 1px solid @borderColor;
+ background: @component-background;
+ border: 1px solid @component-background;
width: @siderWidth;
height: 100%;
- background-color: white;
position: absolute;
top: 0;
right: 0;
@@ -928,7 +928,7 @@
font-family: Times;
text-align: center;
border-radius: 4px 0 0 4px;
- color: #fff;
+ color: @component-background;
visibility: visible;
left: 0;
box-shadow: 0 2px 10px rgba(0,0,0,.2);
@@ -951,8 +951,8 @@
}
.headToolbar {
- border: 1px solid @borderColor;
- right: @siderWidth;
+ background: @component-background;
+ border: 1px solid @component-background;
}
}
diff --git a/src/components/AMap/src/amap.data.tsx b/src/components/AMap/src/amap.data.tsx
index e42bb7b..74b1a1b 100644
--- a/src/components/AMap/src/amap.data.tsx
+++ b/src/components/AMap/src/amap.data.tsx
@@ -1,9 +1,3 @@
-import { BasicColumn } from '/@/components/Table';
-import { commonUpload } from '/@/api/platform/core/controller/upload';
-import { h } from 'vue';
-import { Tag } from 'ant-design-vue';
-import { VxeTableDefines } from 'vxe-table/types/table';
-import Icon from '/@/components/Icon/index';
/**
* @program: kicc-ui
@@ -12,6 +6,18 @@ import Icon from '/@/components/Icon/index';
* @create: 2022/5/22
*/
+import { BasicColumn } from '/@/components/Table';
+import { commonUpload } from '/@/api/platform/core/controller/upload';
+import { h } from 'vue';
+import { Tag } from 'ant-design-vue';
+import type { VxeColumnProps, VxeColumnPropTypes } from 'vxe-table/types/column';
+import Icon from '/@/components/Icon/index';
+
+export interface ColumnOptions extends VxeColumnProps {
+ children?: ColumnOptions[]
+ slots?: VxeColumnPropTypes.Slots
+}
+
export type MapPointType = {
value: string;
label: string;
@@ -247,7 +253,7 @@ export const taskPresetChildColumns: BasicColumn[] = [
];
/** 地图标记点表格列 */
-export const mapPointColumns: VxeTableDefines.ColumnOptions[] = [
+export const mapPointColumns: ColumnOptions[] = [
{
field: 'drag',
width: '50px',
diff --git a/src/components/AMap/src/components/MapPointModal.vue b/src/components/AMap/src/components/MapPointModal.vue
index 8e70d1d..6cd2927 100644
--- a/src/components/AMap/src/components/MapPointModal.vue
+++ b/src/components/AMap/src/components/MapPointModal.vue
@@ -5,7 +5,7 @@
@register="registerModal"
@ok="handleSubmit"
>
-
+
({
sortable: null,
gridOptions: {
@@ -66,7 +67,7 @@
state.mapData = cloneDeep(data.mapData);
const props: Partial = { confirmLoading: false };
props.title = '标记点配置';
- const columns: VxeTableDefines.ColumnOptions[] = [
+ const columns: ColumnOptions[] = [
{
field: 'drag',
width: '50px',
@@ -171,8 +172,5 @@
}
}
-
-
-
diff --git a/src/components/Application/src/AppLogo.vue b/src/components/Application/src/AppLogo.vue
index 6c54ca4..17c0a6b 100644
--- a/src/components/Application/src/AppLogo.vue
+++ b/src/components/Application/src/AppLogo.vue
@@ -1,6 +1,6 @@
-

+
{{ title }}
diff --git a/src/components/Button/src/BasicButton.vue b/src/components/Button/src/BasicButton.vue
index 5926782..5813c30 100644
--- a/src/components/Button/src/BasicButton.vue
+++ b/src/components/Button/src/BasicButton.vue
@@ -1,8 +1,8 @@
diff --git a/src/components/Button/src/props.ts b/src/components/Button/src/props.ts
index 8bf265e..7765a54 100644
--- a/src/components/Button/src/props.ts
+++ b/src/components/Button/src/props.ts
@@ -1,5 +1,12 @@
+const validColors = ['error', 'warning', 'success', ''] as const;
+type ButtonColorType = typeof validColors[number];
+
export const buttonProps = {
- color: { type: String, validator: (v) => ['error', 'warning', 'success', ''].includes(v) },
+ color: {
+ type: String as PropType,
+ validator: (v) => validColors.includes(v),
+ default: '',
+ },
loading: { type: Boolean },
disabled: { type: Boolean },
/**
diff --git a/src/components/ClickOutSide/src/ClickOutSide.vue b/src/components/ClickOutSide/src/ClickOutSide.vue
index e7a56f4..616e875 100644
--- a/src/components/ClickOutSide/src/ClickOutSide.vue
+++ b/src/components/ClickOutSide/src/ClickOutSide.vue
@@ -3,24 +3,17 @@
-
diff --git a/src/components/Container/src/collapse/CollapseContainer.vue b/src/components/Container/src/collapse/CollapseContainer.vue
index d24b467..79855c1 100644
--- a/src/components/Container/src/collapse/CollapseContainer.vue
+++ b/src/components/Container/src/collapse/CollapseContainer.vue
@@ -1,48 +1,18 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/components/Container/src/collapse/CollapseHeader.vue b/src/components/Container/src/collapse/CollapseHeader.vue
index 7f8104c..50360c9 100644
--- a/src/components/Container/src/collapse/CollapseHeader.vue
+++ b/src/components/Container/src/collapse/CollapseHeader.vue
@@ -1,42 +1,44 @@
-
-
-
-
- {{ title }}
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/components/ContextMenu/src/ContextMenu.vue b/src/components/ContextMenu/src/ContextMenu.vue
index 2f6eb87..94e9159 100644
--- a/src/components/ContextMenu/src/ContextMenu.vue
+++ b/src/components/ContextMenu/src/ContextMenu.vue
@@ -60,9 +60,11 @@
const top = body.clientHeight < y + menuHeight ? y - menuHeight : y;
return {
...styles,
+ position: 'absolute',
width: `${width}px`,
left: `${left + 1}px`,
top: `${top + 1}px`,
+ zIndex: 9999,
};
});
@@ -87,7 +89,8 @@
}
function renderMenuItem(items: ContextMenuItem[]) {
- return items.map((item) => {
+ const visibleItems = items.filter((item) => !item.hidden);
+ return visibleItems.map((item) => {
const { disabled, label, children, divider = false } = item;
const contentProps = {
@@ -124,15 +127,11 @@
}
const { items } = props;
return (
-
+
+
+
);
};
},
diff --git a/src/components/ContextMenu/src/typing.ts b/src/components/ContextMenu/src/typing.ts
index 899d36b..63d3d37 100644
--- a/src/components/ContextMenu/src/typing.ts
+++ b/src/components/ContextMenu/src/typing.ts
@@ -6,6 +6,7 @@ export interface Axis {
export interface ContextMenuItem {
label: string;
icon?: string;
+ hidden?: boolean;
disabled?: boolean;
handler?: Fn;
divider?: boolean;
diff --git a/src/components/Cropper/src/CopperModal.vue b/src/components/Cropper/src/CopperModal.vue
index 88e9f6b..03b6902 100644
--- a/src/components/Cropper/src/CopperModal.vue
+++ b/src/components/Cropper/src/CopperModal.vue
@@ -129,6 +129,7 @@
uploadApi: {
type: Function as PropType<(params: apiFunParams) => Promise>,
},
+ src: { type: String },
};
export default defineComponent({
@@ -138,7 +139,7 @@
emits: ['uploadSuccess', 'register'],
setup(props, { emit }) {
let filename = '';
- const src = ref('');
+ const src = ref(props.src || '');
const previewSource = ref('');
const cropper = ref();
let scaleX = 1;
diff --git a/src/components/Description/src/Description.vue b/src/components/Description/src/Description.vue
index 17b8c74..282c02c 100644
--- a/src/components/Description/src/Description.vue
+++ b/src/components/Description/src/Description.vue
@@ -3,7 +3,7 @@
import type { DescriptionsProps } from 'ant-design-vue/es/descriptions/index';
import type { CSSProperties } from 'vue';
import type { CollapseContainerOptions } from '/@/components/Container/index';
- import { defineComponent, computed, ref, unref } from 'vue';
+ import { defineComponent, computed, ref, unref, toRefs } from 'vue';
import { get } from 'lodash-es';
import { Descriptions } from 'ant-design-vue';
import { CollapseContainer } from '/@/components/Container/index';
@@ -12,6 +12,7 @@
import { getSlot } from '/@/utils/helper/tsxHelper';
import { useAttrs } from '/@/hooks/core/useAttrs';
+
const props = {
useCollapse: { type: Boolean, default: true },
title: { type: String, default: '' },
@@ -108,45 +109,48 @@
function renderItem() {
const { schema, data } = unref(getProps);
return unref(schema)
- .map((item) => {
- const { render, field, span, show, contentMinWidth } = item;
-
- if (show && isFunction(show) && !show(data)) {
- return null;
- }
+ .map((item) => {
+ const { render, field, span, show, contentMinWidth } = item;
- const getContent = () => {
- const _data = unref(getProps)?.data;
- if (!_data) {
+ if (show && isFunction(show) && !show(data)) {
return null;
}
- const getField = get(_data, field);
- return isFunction(render) ? render(getField, _data) : getField ?? '';
- };
-
- const width = contentMinWidth;
- return (
-
- {() => {
- if (!contentMinWidth) {
- return getContent();
- }
- const style: CSSProperties = {
- minWidth: `${width}px`,
- };
- return {getContent()}
;
- }}
-
- );
- })
- .filter((item) => !!item);
+
+ const getContent = () => {
+ const _data = unref(getProps)?.data;
+ if (!_data) {
+ return null;
+ }
+ const getField = get(_data, field);
+ if (getField && !toRefs(_data).hasOwnProperty(field)) {
+ return isFunction(render) ? render('', _data) : '';
+ }
+ return isFunction(render) ? render(getField, _data) : getField ?? '';
+ };
+
+ const width = contentMinWidth;
+ return (
+
+ {() => {
+ if (!contentMinWidth) {
+ return getContent();
+ }
+ const style: CSSProperties = {
+ minWidth: `${width}px`,
+ };
+ return {getContent()}
;
+ }}
+
+ );
+ })
+ .filter((item) => !!item);
}
const renderDesc = () => {
return (
-
- {renderItem()}
-
+
+ {renderItem()}
+
);
};
@@ -161,12 +165,12 @@
const { title } = unref(getMergeProps);
return (
-
- {{
- default: () => content,
- action: () => getSlot(slots, 'action'),
- }}
-
+
+ {{
+ default: () => content,
+ action: () => getSlot(slots, 'action'),
+ }}
+
);
};
diff --git a/src/components/Description/src/typing.ts b/src/components/Description/src/typing.ts
index d870152..ee96084 100644
--- a/src/components/Description/src/typing.ts
+++ b/src/components/Description/src/typing.ts
@@ -14,7 +14,7 @@ export interface DescItem {
// render
render?: (
val: any,
- data: Recordable
+ data: Recordable,
) => VNode | undefined | JSX.Element | Element | string | number;
}
diff --git a/src/components/Excel/src/Export2Excel.ts b/src/components/Excel/src/Export2Excel.ts
index 11efbe0..0dcca06 100644
--- a/src/components/Excel/src/Export2Excel.ts
+++ b/src/components/Excel/src/Export2Excel.ts
@@ -1,4 +1,4 @@
-import xlsx from 'xlsx';
+import * as xlsx from 'xlsx';
import type { WorkBook } from 'xlsx';
import type { JsonToSheet, AoAToSheet } from './typing';
@@ -6,13 +6,35 @@ const { utils, writeFile } = xlsx;
const DEF_FILE_NAME = 'excel-list.xlsx';
+/**
+ * @param data source data
+ * @param worksheet worksheet object
+ * @param min min width
+ */
+function setColumnWidth(data, worksheet, min = 3) {
+ const obj = {};
+ worksheet['!cols'] = [];
+ data.forEach((item) => {
+ Object.keys(item).forEach((key) => {
+ const cur = item[key];
+ const length = cur?.length ?? min;
+ obj[key] = Math.max(length, obj[key] ?? min);
+ });
+ });
+ Object.keys(obj).forEach((key) => {
+ worksheet['!cols'].push({
+ wch: obj[key],
+ });
+ });
+}
+
export function jsonToSheetXlsx({
- data,
- header,
- filename = DEF_FILE_NAME,
- json2sheetOpts = {},
- write2excelOpts = { bookType: 'xlsx' },
-}: JsonToSheet) {
+ data,
+ header,
+ filename = DEF_FILE_NAME,
+ json2sheetOpts = {},
+ write2excelOpts = { bookType: 'xlsx' },
+ }: JsonToSheet) {
const arrData = [...data];
if (header) {
arrData.unshift(header);
@@ -20,7 +42,7 @@ export function jsonToSheetXlsx({
}
const worksheet = utils.json_to_sheet(arrData, json2sheetOpts);
-
+ setColumnWidth(arrData, worksheet);
/* add worksheet to workbook */
const workbook: WorkBook = {
SheetNames: [filename],
@@ -34,11 +56,11 @@ export function jsonToSheetXlsx({
}
export function aoaToSheetXlsx({
- data,
- header,
- filename = DEF_FILE_NAME,
- write2excelOpts = { bookType: 'xlsx' },
-}: AoAToSheet) {
+ data,
+ header,
+ filename = DEF_FILE_NAME,
+ write2excelOpts = { bookType: 'xlsx' },
+ }: AoAToSheet) {
const arrData = [...data];
if (header) {
arrData.unshift(header);
diff --git a/src/components/Excel/src/ImportExcel.vue b/src/components/Excel/src/ImportExcel.vue
index f01581c..76c893e 100644
--- a/src/components/Excel/src/ImportExcel.vue
+++ b/src/components/Excel/src/ImportExcel.vue
@@ -14,15 +14,68 @@
diff --git a/src/components/Form/src/componentMap.ts b/src/components/Form/src/componentMap.ts
index 52739a6..53e65c9 100644
--- a/src/components/Form/src/componentMap.ts
+++ b/src/components/Form/src/componentMap.ts
@@ -27,6 +27,7 @@ import ApiSelect from './components/ApiSelect.vue';
import ApiTree from './components/ApiTree.vue';
import ApiTreeSelect from './components/ApiTreeSelect.vue';
import ApiCascader from './components/ApiCascader.vue';
+import ApiTransfer from './components/ApiTransfer.vue';
import { BasicUpload } from '/@/components/Upload';
import { StrengthMeter } from '/@/components/StrengthMeter';
import { IconPicker } from '/@/components/Icon';
@@ -57,6 +58,7 @@ componentMap.set('ApiCascader', ApiCascader);
componentMap.set('Cascader', Cascader);
componentMap.set('Slider', Slider);
componentMap.set('Rate', Rate);
+componentMap.set('ApiTransfer', ApiTransfer);
componentMap.set('DatePicker', DatePicker);
componentMap.set('MonthPicker', DatePicker.MonthPicker);
diff --git a/src/components/Form/src/components/ApiCascader.vue b/src/components/Form/src/components/ApiCascader.vue
index 26aaa3f..674bc4d 100644
--- a/src/components/Form/src/components/ApiCascader.vue
+++ b/src/components/Form/src/components/ApiCascader.vue
@@ -1,7 +1,6 @@
{
- const opts = generatorOptions(data);
- options.value = opts;
- },
- { deep: true },
+ apiData,
+ (data) => {
+ const opts = generatorOptions(data);
+ options.value = opts;
+ },
+ { deep: true },
);
function generatorOptions(options: any[]): Option[] {
@@ -97,10 +95,10 @@
if (next) {
const value = next[valueField];
const item = {
- isLeaf: isLeaf && typeof isLeaf === 'function' ? isLeaf(next) : false,
...omit(next, [labelField, valueField]),
label: next[labelField],
value: numberToString ? `${value}` : value,
+ isLeaf: isLeaf && typeof isLeaf === 'function' ? isLeaf(next) : false,
};
const children = Reflect.get(next, childrenField);
if (children) {
@@ -164,15 +162,15 @@
});
watch(
- () => props.initFetchParams,
- () => {
- !unref(isFirstLoad) && initialFetch();
- },
- { deep: true },
+ () => props.initFetchParams,
+ () => {
+ !unref(isFirstLoad) && initialFetch();
+ },
+ { deep: true },
);
function handleChange(keys, args) {
- emitData.value = keys;
+ emitData.value = args;
emit('defaultChange', keys, args);
}
@@ -186,15 +184,14 @@
return '';
}
-
return {
state,
options,
loading,
t,
- handleRenderDisplay,
handleChange,
loadData,
+ handleRenderDisplay,
};
},
});
diff --git a/src/components/Form/src/components/ApiRadioGroup.vue b/src/components/Form/src/components/ApiRadioGroup.vue
index 7b24386..d2e0b5d 100644
--- a/src/components/Form/src/components/ApiRadioGroup.vue
+++ b/src/components/Form/src/components/ApiRadioGroup.vue
@@ -1,17 +1,20 @@
-
-
+
-
+
{{ item.label }}
-
+
{{ item.label }}
@@ -66,7 +69,7 @@
const attrs = useAttrs();
const { t } = useI18n();
// Embedded in the form, just use the hook binding to perform form verification
- const [state] = useRuleFormItem(props);
+ const [state] = useRuleFormItem(props, 'value', 'change', emitData);
// Processing options value
const getOptions = computed(() => {
@@ -124,11 +127,11 @@
emit('options-change', unref(getOptions));
}
- function handleChange(_, ...args) {
+ function handleClick(...args) {
emitData.value = args;
}
- return { state, getOptions, attrs, loading, t, handleChange, props };
+ return { state, getOptions, attrs, loading, t, handleClick, props };
},
});
diff --git a/src/components/Form/src/components/ApiSelect.vue b/src/components/Form/src/components/ApiSelect.vue
index 2d5a51f..cb07d9d 100644
--- a/src/components/Form/src/components/ApiSelect.vue
+++ b/src/components/Form/src/components/ApiSelect.vue
@@ -1,7 +1,7 @@
@@ -31,18 +31,7 @@
v-for="icon in getPaginationList"
:key="icon"
:class="currentSelect === icon ? 'border border-primary' : ''"
- class="
- p-2
- w-1/8
- cursor-pointer
- mr-1
- mt-1
- flex
- justify-center
- items-center
- border border-solid
- hover:border-primary
- "
+ class="p-2 w-1/8 cursor-pointer mr-1 mt-1 flex justify-center items-center border border-solid hover:border-primary"
:title="icon"
@click="handleClick(icon)"
>
@@ -53,7 +42,7 @@
-
+
@@ -70,17 +59,18 @@
-
+
-
diff --git a/src/components/Loading/src/useLoading.ts b/src/components/Loading/src/useLoading.ts
index 72238c8..356df7d 100644
--- a/src/components/Loading/src/useLoading.ts
+++ b/src/components/Loading/src/useLoading.ts
@@ -4,7 +4,7 @@ import type { LoadingProps } from './typing';
import type { Ref } from 'vue';
export interface UseLoadingOptions {
- target?: HTMLElement | Ref
;
+ target?: any;
props?: Partial;
}
@@ -16,7 +16,7 @@ export function useLoading(props: Partial): [Fn, Fn, (string) => v
export function useLoading(opt: Partial): [Fn, Fn, (string) => void];
export function useLoading(
- opt: Partial | Partial
+ opt: Partial | Partial,
): [Fn, Fn, (string) => void] {
let props: Partial;
let target: HTMLElement | Ref = document.body;
diff --git a/src/components/Markdown/index.ts b/src/components/Markdown/index.ts
index bbfc517..d337681 100644
--- a/src/components/Markdown/index.ts
+++ b/src/components/Markdown/index.ts
@@ -1,5 +1,7 @@
import { withInstall } from '/@/utils';
import markDown from './src/Markdown.vue';
+import markDownViewer from './src/MarkdownViewer.vue';
export const MarkDown = withInstall(markDown);
+export const MarkdownViewer = withInstall(markDownViewer);
export * from './src/typing';
diff --git a/src/components/Markdown/src/Markdown.vue b/src/components/Markdown/src/Markdown.vue
index 112ef59..c530311 100644
--- a/src/components/Markdown/src/Markdown.vue
+++ b/src/components/Markdown/src/Markdown.vue
@@ -2,143 +2,157 @@
diff --git a/src/components/Markdown/src/MarkdownViewer.vue b/src/components/Markdown/src/MarkdownViewer.vue
new file mode 100644
index 0000000..6548aee
--- /dev/null
+++ b/src/components/Markdown/src/MarkdownViewer.vue
@@ -0,0 +1,62 @@
+
+
+
+
+
diff --git a/src/components/Markdown/src/getTheme.ts b/src/components/Markdown/src/getTheme.ts
new file mode 100644
index 0000000..fcfe9d3
--- /dev/null
+++ b/src/components/Markdown/src/getTheme.ts
@@ -0,0 +1,19 @@
+/**
+ * 获取主题类型 深色浅色模式 对应的值
+ * @param darkModeVal 深色模式值
+ * @param themeMode 主题类型——外观(默认), 内容, 代码块
+ */
+export const getTheme = (
+ darkModeVal: 'light' | 'dark' | string,
+ themeMode: 'default' | 'content' | 'code' = 'default',
+) => {
+ const isDark = darkModeVal === 'dark';
+ switch (themeMode) {
+ case 'default':
+ return isDark ? 'dark' : 'classic';
+ case 'content':
+ return isDark ? 'dark' : 'light';
+ case 'code':
+ return isDark ? 'dracula' : 'github';
+ }
+};
diff --git a/src/components/Menu/src/BasicMenu.vue b/src/components/Menu/src/BasicMenu.vue
index 2baa888..28be8fe 100644
--- a/src/components/Menu/src/BasicMenu.vue
+++ b/src/components/Menu/src/BasicMenu.vue
@@ -9,7 +9,7 @@
:class="getMenuClass"
:subMenuOpenDelay="0.2"
v-bind="getInlineCollapseOptions"
- @openChange="handleOpenChange"
+ @open-change="handleOpenChange"
@click="handleMenuClick"
>
@@ -30,9 +30,8 @@
import { useMenuSetting } from '/@/hooks/setting/useMenuSetting';
import { REDIRECT_NAME } from '/@/router/constant';
import { useDesign } from '/@/hooks/web/useDesign';
- import { getCurrentParentPath } from '/@/router/helper/menuHelper';
import { listenerRouteChange } from '/@/logics/mitt/routeChange';
- import { getAllParentPath } from '/@/router/helper/menuHelper';
+ import { getAllParentPath, getCurrentParentPath } from '/@/router/helper/menuHelper';
export default defineComponent({
name: 'BasicMenu',
diff --git a/src/components/Menu/src/components/BasicMenuItem.vue b/src/components/Menu/src/components/BasicMenuItem.vue
index e854e71..6eae2a7 100644
--- a/src/components/Menu/src/components/BasicMenuItem.vue
+++ b/src/components/Menu/src/components/BasicMenuItem.vue
@@ -6,20 +6,15 @@
diff --git a/src/components/Menu/src/components/BasicSubMenuItem.vue b/src/components/Menu/src/components/BasicSubMenuItem.vue
index 1341896..42f4ed1 100644
--- a/src/components/Menu/src/components/BasicSubMenuItem.vue
+++ b/src/components/Menu/src/components/BasicSubMenuItem.vue
@@ -39,10 +39,10 @@
const getShowMenu = computed(() => !props.item.meta?.hideMenu);
function menuHasChildren(menuTreeItem: MenuType): boolean {
return (
- !menuTreeItem.meta?.hideChildrenInMenu &&
- Reflect.has(menuTreeItem, 'children') &&
- !!menuTreeItem.children &&
- menuTreeItem.children.length > 0
+ !menuTreeItem.meta?.hideChildrenInMenu &&
+ Reflect.has(menuTreeItem, 'children') &&
+ !!menuTreeItem.children &&
+ menuTreeItem.children.length > 0
);
}
return {
diff --git a/src/components/Menu/src/components/MenuItemContent.vue b/src/components/Menu/src/components/MenuItemContent.vue
index 947f25e..b8cfc28 100644
--- a/src/components/Menu/src/components/MenuItemContent.vue
+++ b/src/components/Menu/src/components/MenuItemContent.vue
@@ -1,9 +1,10 @@
-
-
+
{{ getI18nName }}
diff --git a/src/components/Menu/src/props.ts b/src/components/Menu/src/props.ts
index aea1793..2942ef5 100644
--- a/src/components/Menu/src/props.ts
+++ b/src/components/Menu/src/props.ts
@@ -4,6 +4,8 @@ import type { PropType } from 'vue';
import { MenuModeEnum, MenuTypeEnum } from '/@/enums/menuEnum';
import { ThemeEnum } from '/@/enums/appEnum';
import { propTypes } from '/@/utils/propTypes';
+import type { MenuTheme } from 'ant-design-vue';
+import type { MenuMode } from 'ant-design-vue/lib/menu/src/interface';
export const basicProps = {
items: {
type: Array as PropType
@@ -72,6 +72,7 @@
import { basicProps } from './props';
import { useFullScreen } from './hooks/useModalFullScreen';
import { omit } from 'lodash-es';
+ import { useDesign } from '/@/hooks/web/useDesign';
export default defineComponent({
name: 'BasicModal',
@@ -83,6 +84,7 @@
const visibleRef = ref(false);
const propsRef = ref | null>(null);
const modalWrapperRef = ref(null);
+ const { prefixCls } = useDesign('basic-modal');
// modal Bottom and top height
const extHeightRef = ref(0);
@@ -104,7 +106,7 @@
}
// Custom title component: get title
- const getMergeProps = computed((): ModalProps => {
+ const getMergeProps = computed((): Recordable => {
return {
...props,
...(unref(propsRef) as any),
@@ -118,7 +120,7 @@
});
// modal component does not need title and origin buttons
- const getProps = computed((): ModalProps => {
+ const getProps = computed((): Recordable => {
const opt = {
...unref(getMergeProps),
visible: unref(visibleRef),
@@ -137,8 +139,9 @@
...attrs,
...unref(getMergeProps),
visible: unref(visibleRef),
- wrapClassName: unref(getWrapClassName),
};
+ attr['wrapClassName'] = `${attr?.['wrapClassName'] || ''} ${unref(getWrapClassName)}`;
+
if (unref(fullScreenRef)) {
return omit(attr, ['height', 'title']);
}
@@ -156,26 +159,27 @@
});
watch(
- () => unref(visibleRef),
- (v) => {
- emit('visible-change', v);
- emit('update:visible', v);
- instance && modalMethods.emitVisible?.(v, instance.uid);
- nextTick(() => {
- if (props.scrollTop && v && unref(modalWrapperRef)) {
- (unref(modalWrapperRef) as any).scrollTop();
- }
- });
- },
- {
- immediate: false,
- }
+ () => unref(visibleRef),
+ (v) => {
+ emit('visible-change', v);
+ emit('update:visible', v);
+ instance && modalMethods.emitVisible?.(v, instance.uid);
+ nextTick(() => {
+ if (props.scrollTop && v && unref(modalWrapperRef)) {
+ (unref(modalWrapperRef) as any).scrollTop();
+ }
+ });
+ },
+ {
+ immediate: false,
+ },
);
// 取消事件
async function handleCancel(e: Event) {
e?.stopPropagation();
-
+ // 过滤自定义关闭按钮的空白区域
+ if ((e.target as HTMLElement)?.classList?.contains(prefixCls + '-close--custom')) return;
if (props.closeFunc && isFunction(props.closeFunc)) {
const isClose: boolean = await props.closeFunc();
visibleRef.value = !isClose;
@@ -212,7 +216,7 @@
extHeightRef.value = height;
}
- function handleTitleDbClick(e: ChangeEvent) {
+ function handleTitleDbClick(e) {
if (!props.canFullscreen) return;
e.stopPropagation();
handleFullScreen(e);
diff --git a/src/components/Modal/src/components/Modal.tsx b/src/components/Modal/src/components/Modal.tsx
index b26d07b..8600d61 100644
--- a/src/components/Modal/src/components/Modal.tsx
+++ b/src/components/Modal/src/components/Modal.tsx
@@ -9,7 +9,8 @@ export default defineComponent({
name: 'Modal',
inheritAttrs: false,
props: basicProps,
- setup(props, { slots }) {
+ emits: ['cancel'],
+ setup(props, { slots, emit }) {
const { visible, draggable, destroyOnClose } = toRefs(props);
const attrs = useAttrs();
useModalDragMove({
@@ -18,8 +19,12 @@ export default defineComponent({
draggable,
});
+ const onCancel = (e: Event) => {
+ emit('cancel', e);
+ };
+
return () => {
- const propsData = { ...unref(attrs), ...props } as Recordable;
+ const propsData = { ...unref(attrs), ...props, onCancel } as Recordable;
return {extendSlots(slots)};
};
},
diff --git a/src/components/Modal/src/components/ModalClose.vue b/src/components/Modal/src/components/ModalClose.vue
index d959d68..f7512f3 100644
--- a/src/components/Modal/src/components/ModalClose.vue
+++ b/src/components/Modal/src/components/ModalClose.vue
@@ -97,7 +97,7 @@
}
}
- & span:nth-child(2) {
+ & span:last-child {
&:hover {
color: @error-color;
}
diff --git a/src/components/Modal/src/components/ModalFooter.vue b/src/components/Modal/src/components/ModalFooter.vue
index f1afdc9..8780b73 100644
--- a/src/components/Modal/src/components/ModalFooter.vue
+++ b/src/components/Modal/src/components/ModalFooter.vue
@@ -19,7 +19,6 @@
diff --git a/src/components/Modal/src/components/ModalWrapper.vue b/src/components/Modal/src/components/ModalWrapper.vue
index ffc20d6..aa6a817 100644
--- a/src/components/Modal/src/components/ModalWrapper.vue
+++ b/src/components/Modal/src/components/ModalWrapper.vue
@@ -1,9 +1,10 @@
-
@@ -25,7 +26,7 @@
import { useWindowSizeFn } from '/@/hooks/event/useWindowSizeFn';
import { ScrollContainer } from '/@/components/Container';
import { createModalContext } from '../hooks/useModalContext';
- import {MaybeElementRef, useMutationObserver} from '@vueuse/core';
+ import { useMutationObserver } from '@vueuse/core';
const props = {
loading: { type: Boolean },
@@ -59,14 +60,14 @@
useWindowSizeFn(setModalHeight.bind(null, false));
useMutationObserver(
- spinRef as MaybeElementRef,
- () => {
- setModalHeight();
- },
- {
- attributes: true,
- subtree: true,
- }
+ spinRef,
+ () => {
+ setModalHeight();
+ },
+ {
+ attributes: true,
+ subtree: true,
+ },
);
createModalContext({
@@ -85,15 +86,15 @@
});
watch(
- () => props.fullScreen,
- (v) => {
- setModalHeight();
- if (!v) {
- realHeightRef.value = minRealHeightRef.value;
- } else {
- minRealHeightRef.value = realHeightRef.value;
- }
- }
+ () => props.fullScreen,
+ (v) => {
+ setModalHeight();
+ if (!v) {
+ realHeightRef.value = minRealHeightRef.value;
+ } else {
+ minRealHeightRef.value = realHeightRef.value;
+ }
+ },
);
onMounted(() => {
@@ -132,11 +133,11 @@
const modalRect = getComputedStyle(modalDom as Element).top;
const modalTop = Number.parseInt(modalRect);
let maxHeight =
- window.innerHeight -
- modalTop * 2 +
- (props.footerOffset! || 0) -
- props.modalFooterHeight -
- props.modalHeaderHeight;
+ window.innerHeight -
+ modalTop * 2 +
+ (props.footerOffset! || 0) -
+ props.modalFooterHeight -
+ props.modalHeaderHeight;
// 距离顶部过进会出现滚动条
if (modalTop < 40) {
@@ -153,13 +154,13 @@
if (props.fullScreen) {
realHeightRef.value =
- window.innerHeight - props.modalFooterHeight - props.modalHeaderHeight - 28;
+ window.innerHeight - props.modalFooterHeight - props.modalHeaderHeight - 28;
} else {
realHeightRef.value = props.height
- ? props.height
- : realHeight > maxHeight
- ? maxHeight
- : realHeight;
+ ? props.height
+ : realHeight > maxHeight
+ ? maxHeight
+ : realHeight;
}
emit('height-change', unref(realHeightRef));
} catch (error) {
diff --git a/src/components/Modal/src/hooks/useModal.ts b/src/components/Modal/src/hooks/useModal.ts
index fac82b7..c239f94 100644
--- a/src/components/Modal/src/hooks/useModal.ts
+++ b/src/components/Modal/src/hooks/useModal.ts
@@ -40,11 +40,11 @@ export function useModal(): UseModalReturnType {
}
uid.value = uuid;
isProdMode() &&
- onUnmounted(() => {
- modal.value = null;
- loaded.value = false;
- dataTransfer[unref(uid)] = null;
- });
+ onUnmounted(() => {
+ modal.value = null;
+ loaded.value = false;
+ dataTransfer[unref(uid)] = null;
+ });
if (unref(loaded) && isProdMode() && modalMethod === unref(modal)) return;
modal.value = modalMethod;
@@ -115,9 +115,9 @@ export const useModalInner = (callbackFn?: Fn): UseModalInnerReturnType => {
const register = (modalInstance: ModalMethods, uuid: string) => {
isProdMode() &&
- tryOnUnmounted(() => {
- modalInstanceRef.value = null;
- });
+ tryOnUnmounted(() => {
+ modalInstanceRef.value = null;
+ });
uidRef.value = uuid;
modalInstanceRef.value = modalInstance;
currentInstance?.emit('register', modalInstance, uuid);
diff --git a/src/components/Modal/src/index.less b/src/components/Modal/src/index.less
index 3e476bd..a23be29 100644
--- a/src/components/Modal/src/index.less
+++ b/src/components/Modal/src/index.less
@@ -19,14 +19,13 @@
width: 520px;
padding-bottom: 0;
- .scrollbar {
+ .ant-modal-body > .scrollbar {
padding: 14px;
}
&-title {
font-size: 16px;
font-weight: bold;
- line-height: 16px;
.base-title {
cursor: move !important;
@@ -54,7 +53,7 @@
}
&-content {
- box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);
+ box-shadow: 0 4px 8px 0 rgb(0 0 0 / 20%), 0 6px 20px 0 rgb(0 0 0 / 19%);
}
&-footer {
diff --git a/src/components/Page/index.ts b/src/components/Page/index.ts
index d096264..2d3f6dd 100644
--- a/src/components/Page/index.ts
+++ b/src/components/Page/index.ts
@@ -5,3 +5,5 @@ import pageWrapper from './src/PageWrapper.vue';
export const PageFooter = withInstall(pageFooter);
export const PageWrapper = withInstall(pageWrapper);
+
+export const PageWrapperFixedHeightKey = 'PageWrapperFixedHeight';
diff --git a/src/components/Page/src/PageFooter.vue b/src/components/Page/src/PageFooter.vue
index 9de0473..42501ba 100644
--- a/src/components/Page/src/PageFooter.vue
+++ b/src/components/Page/src/PageFooter.vue
@@ -39,8 +39,8 @@
line-height: 44px;
background-color: @component-background;
border-top: 1px solid @border-color-base;
- box-shadow: 0 -6px 16px -8px rgba(0, 0, 0, 0.08), 0 -9px 28px 0 rgba(0, 0, 0, 0.05),
- 0 -12px 48px 16px rgba(0, 0, 0, 0.03);
+ box-shadow: 0 -6px 16px -8px rgb(0 0 0 / 8%), 0 -9px 28px 0 rgb(0 0 0 / 5%),
+ 0 -12px 48px 16px rgb(0 0 0 / 3%);
transition: width 0.2s;
&__left {
diff --git a/src/components/Page/src/PageWrapper.vue b/src/components/Page/src/PageWrapper.vue
index 9d9f8a1..f6cf86e 100644
--- a/src/components/Page/src/PageWrapper.vue
+++ b/src/components/Page/src/PageWrapper.vue
@@ -1,7 +1,7 @@
+
diff --git a/src/components/Table/src/componentMap.ts b/src/components/Table/src/componentMap.ts
index 8cd597d..f67e978 100644
--- a/src/components/Table/src/componentMap.ts
+++ b/src/components/Table/src/componentMap.ts
@@ -7,10 +7,12 @@ import {
Switch,
DatePicker,
TimePicker,
+ AutoComplete,
+ Radio,
} from 'ant-design-vue';
import type { ComponentType } from './types/componentType';
-import { ApiSelect, ApiTreeSelect } from '/@/components/Form';
-import { BasicUpload } from "/@/components/Upload";
+import { ApiSelect, ApiTreeSelect, RadioButtonGroup, ApiRadioGroup } from '/@/components/Form';
+import { BasicUpload } from '/@/components/Upload';
const componentMap = new Map();
@@ -18,11 +20,15 @@ componentMap.set('Input', Input);
componentMap.set('InputNumber', InputNumber);
componentMap.set('Select', Select);
componentMap.set('ApiSelect', ApiSelect);
+componentMap.set('AutoComplete', AutoComplete);
componentMap.set('ApiTreeSelect', ApiTreeSelect);
componentMap.set('Switch', Switch);
componentMap.set('Checkbox', Checkbox);
componentMap.set('DatePicker', DatePicker);
componentMap.set('TimePicker', TimePicker);
+componentMap.set('RadioGroup', Radio.Group);
+componentMap.set('RadioButtonGroup', RadioButtonGroup);
+componentMap.set('ApiRadioGroup', ApiRadioGroup);
componentMap.set('Upload', BasicUpload);
export function add(compName: ComponentType, component: Component) {
diff --git a/src/components/Table/src/components/HeaderCell.vue b/src/components/Table/src/components/HeaderCell.vue
index 8bcfa40..fba7c76 100644
--- a/src/components/Table/src/components/HeaderCell.vue
+++ b/src/components/Table/src/components/HeaderCell.vue
@@ -29,7 +29,7 @@
const { prefixCls } = useDesign('basic-table-header-cell');
const getIsEdit = computed(() => !!props.column?.edit);
- const getTitle = computed(() => props.column?.customTitle);
+ const getTitle = computed(() => props.column?.customTitle || props.column?.title);
const getHelpMessage = computed(() => props.column?.helpMessage);
return { prefixCls, getIsEdit, getTitle, getHelpMessage };
@@ -42,7 +42,7 @@
.@{prefix-cls} {
&__help {
margin-left: 8px;
- color: rgba(0, 0, 0, 0.65) !important;
+ color: rgb(0 0 0 / 65%) !important;
}
}
diff --git a/src/components/Table/src/components/TableAction.vue b/src/components/Table/src/components/TableAction.vue
index bc4168b..97209c1 100644
--- a/src/components/Table/src/components/TableAction.vue
+++ b/src/components/Table/src/components/TableAction.vue
@@ -91,7 +91,7 @@
.map((action) => {
const { popConfirm } = action;
return {
- getPopupContainer: () => unref(table?.wrapRef.value) ?? document.body,
+ getPopupContainer: () => unref((table as any)?.wrapRef.value) ?? document.body,
type: 'link',
size: 'small',
...action,
@@ -129,7 +129,7 @@
function getTooltip(data: string | TooltipProps): TooltipProps {
return {
- getPopupContainer: () => unref(table?.wrapRef.value) ?? document.body,
+ getPopupContainer: () => unref((table as any)?.wrapRef) ?? document.body,
placement: 'bottom',
...(isString(data) ? { title: data } : data),
};
@@ -150,8 +150,56 @@
diff --git a/src/components/Table/src/components/TableHeader.vue b/src/components/Table/src/components/TableHeader.vue
index f56db9f..3635524 100644
--- a/src/components/Table/src/components/TableHeader.vue
+++ b/src/components/Table/src/components/TableHeader.vue
@@ -3,36 +3,65 @@
-
-
-
+
-
- 已选中 {{ selectRowKeys.length }} 条记录(可跨页)
+ 已选中 {{ selectRowKeys.length }} 条记录
+ (可跨页)
清空
@@ -91,9 +120,11 @@
const { getSelectRowKeys, setSelectedRowKeys, getRowSelection } = useTableContext();
const selectRowKeys = computed(() => getSelectRowKeys());
const openRowSelection = computed(() => getRowSelection());
+ const isAcrossPage = computed(() => openRowSelection.value?.preserveSelectedRowKeys === true);
return {
prefixCls,
+ isAcrossPage,
handleColumnChange,
selectRowKeys,
setSelectedRowKeys,
@@ -102,3 +133,72 @@
},
});
+
diff --git a/src/components/Table/src/components/TableImg.vue b/src/components/Table/src/components/TableImg.vue
index 13403be..f40f9d1 100644
--- a/src/components/Table/src/components/TableImg.vue
+++ b/src/components/Table/src/components/TableImg.vue
@@ -9,12 +9,13 @@
-
@@ -22,10 +23,11 @@
-
@@ -40,7 +42,7 @@
export default defineComponent({
name: 'TableImage',
- components: { Image, PreviewGroup: Image.PreviewGroup, Badge },
+ components: { AImage: Image, PreviewGroup: Image.PreviewGroup, Badge },
props: {
imgList: propTypes.arrayOf(propTypes.string),
size: propTypes.number.def(40),
@@ -52,6 +54,10 @@
margin: propTypes.number.def(4),
// src前缀,将会附加在imgList中每一项之前
srcPrefix: propTypes.string.def(''),
+ // fallback,加载失败显示图像占位符。
+ fallback: propTypes.string.def(
+ 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMIAAADDCAYAAADQvc6UAAABRWlDQ1BJQ0MgUHJvZmlsZQAAKJFjYGASSSwoyGFhYGDIzSspCnJ3UoiIjFJgf8LAwSDCIMogwMCcmFxc4BgQ4ANUwgCjUcG3awyMIPqyLsis7PPOq3QdDFcvjV3jOD1boQVTPQrgSkktTgbSf4A4LbmgqISBgTEFyFYuLykAsTuAbJEioKOA7DkgdjqEvQHEToKwj4DVhAQ5A9k3gGyB5IxEoBmML4BsnSQk8XQkNtReEOBxcfXxUQg1Mjc0dyHgXNJBSWpFCYh2zi+oLMpMzyhRcASGUqqCZ16yno6CkYGRAQMDKMwhqj/fAIcloxgHQqxAjIHBEugw5sUIsSQpBobtQPdLciLEVJYzMPBHMDBsayhILEqEO4DxG0txmrERhM29nYGBddr//5/DGRjYNRkY/l7////39v///y4Dmn+LgeHANwDrkl1AuO+pmgAAADhlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAAqACAAQAAAABAAAAwqADAAQAAAABAAAAwwAAAAD9b/HnAAAHlklEQVR4Ae3dP3PTWBSGcbGzM6GCKqlIBRV0dHRJFarQ0eUT8LH4BnRU0NHR0UEFVdIlFRV7TzRksomPY8uykTk/zewQfKw/9znv4yvJynLv4uLiV2dBoDiBf4qP3/ARuCRABEFAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghgg0Aj8i0JO4OzsrPv69Wv+hi2qPHr0qNvf39+iI97soRIh4f3z58/u7du3SXX7Xt7Z2enevHmzfQe+oSN2apSAPj09TSrb+XKI/f379+08+A0cNRE2ANkupk+ACNPvkSPcAAEibACyXUyfABGm3yNHuAECRNgAZLuYPgEirKlHu7u7XdyytGwHAd8jjNyng4OD7vnz51dbPT8/7z58+NB9+/bt6jU/TI+AGWHEnrx48eJ/EsSmHzx40L18+fLyzxF3ZVMjEyDCiEDjMYZZS5wiPXnyZFbJaxMhQIQRGzHvWR7XCyOCXsOmiDAi1HmPMMQjDpbpEiDCiL358eNHurW/5SnWdIBbXiDCiA38/Pnzrce2YyZ4//59F3ePLNMl4PbpiL2J0L979+7yDtHDhw8vtzzvdGnEXdvUigSIsCLAWavHp/+qM0BcXMd/q25n1vF57TYBp0a3mUzilePj4+7k5KSLb6gt6ydAhPUzXnoPR0dHl79WGTNCfBnn1uvSCJdegQhLI1vvCk+fPu2ePXt2tZOYEV6/fn31dz+shwAR1sP1cqvLntbEN9MxA9xcYjsxS1jWR4AIa2Ibzx0tc44fYX/16lV6NDFLXH+YL32jwiACRBiEbf5KcXoTIsQSpzXx4N28Ja4BQoK7rgXiydbHjx/P25TaQAJEGAguWy0+2Q8PD6/Ki4R8EVl+bzBOnZY95fq9rj9zAkTI2SxdidBHqG9+skdw43borCXO/ZcJdraPWdv22uIEiLA4q7nvvCug8WTqzQveOH26fodo7g6uFe/a17W3+nFBAkRYENRdb1vkkz1CH9cPsVy/jrhr27PqMYvENYNlHAIesRiBYwRy0V+8iXP8+/fvX11Mr7L7ECueb/r48eMqm7FuI2BGWDEG8cm+7G3NEOfmdcTQw4h9/55lhm7DekRYKQPZF2ArbXTAyu4kDYB2YxUzwg0gi/41ztHnfQG26HbGel/crVrm7tNY+/1btkOEAZ2M05r4FB7r9GbAIdxaZYrHdOsgJ/wCEQY0J74TmOKnbxxT9n3FgGGWWsVdowHtjt9Nnvf7yQM2aZU/TIAIAxrw6dOnAWtZZcoEnBpNuTuObWMEiLAx1HY0ZQJEmHJ3HNvGCBBhY6jtaMoEiJB0Z29vL6ls58vxPcO8/zfrdo5qvKO+d3Fx8Wu8zf1dW4p/cPzLly/dtv9Ts/EbcvGAHhHyfBIhZ6NSiIBTo0LNNtScABFyNiqFCBChULMNNSdAhJyNSiECRCjUbEPNCRAhZ6NSiAARCjXbUHMCRMjZqBQiQIRCzTbUnAARcjYqhQgQoVCzDTUnQIScjUohAkQo1GxDzQkQIWejUogAEQo121BzAkTI2agUIkCEQs021JwAEXI2KoUIEKFQsw01J0CEnI1KIQJEKNRsQ80JECFno1KIABEKNdtQcwJEyNmoFCJAhELNNtScABFyNiqFCBChULMNNSdAhJyNSiECRCjUbEPNCRAhZ6NSiAARCjXbUHMCRMjZqBQiQIRCzTbUnAARcjYqhQgQoVCzDTUnQIScjUohAkQo1GxDzQkQIWejUogAEQo121BzAkTI2agUIkCEQs021JwAEXI2KoUIEKFQsw01J0CEnI1KIQJEKNRsQ80JECFno1KIABEKNdtQcwJEyNmoFCJAhELNNtScABFyNiqFCBChULMNNSdAhJyNSiECRCjUbEPNCRAhZ6NSiAARCjXbUHMCRMjZqBQiQIRCzTbUnAARcjYqhQgQoVCzDTUnQIScjUohAkQo1GxDzQkQIWejUogAEQo121BzAkTI2agUIkCEQs021JwAEXI2KoUIEKFQsw01J0CEnI1KIQJEKNRsQ80JECFno1KIABEKNdtQcwJEyNmoFCJAhELNNtScABFyNiqFCBChULMNNSdAhJyNSiEC/wGgKKC4YMA4TAAAAABJRU5ErkJggg==',
+ ),
},
setup(props) {
const getWrapStyle = computed((): CSSProperties => {
diff --git a/src/components/Table/src/components/editable/helper.ts b/src/components/Table/src/components/editable/helper.ts
index d901729..9c600c9 100644
--- a/src/components/Table/src/components/editable/helper.ts
+++ b/src/components/Table/src/components/editable/helper.ts
@@ -7,7 +7,7 @@ const { t } = useI18n();
* @description: 生成placeholder
*/
export function createPlaceholderMessage(component: ComponentType) {
- if (component.includes('Input')) {
+ if (component.includes('Input') || component.includes('AutoComplete')) {
return t('common.inputText');
}
if (component.includes('Picker')) {
diff --git a/src/components/Table/src/components/settings/ColumnSetting.vue b/src/components/Table/src/components/settings/ColumnSetting.vue
index 1e7499c..c60fc56 100644
--- a/src/components/Table/src/components/settings/ColumnSetting.vue
+++ b/src/components/Table/src/components/settings/ColumnSetting.vue
@@ -1,40 +1,24 @@
-
+
{{ t('component.table.settingColumn') }}
-
+
{{ t('component.table.settingColumnShow') }}
-
{{ t('component.table.settingIndexColumnShow') }}
-
-
- {{ t('component.table.settingSelectColumnShow') }}
-
-
-
- {{ t('common.resetText') }}
-
@@ -43,16 +27,12 @@
-
+
{{ item.label }}
-
+
{{ t('component.table.settingFixedLeft') }}
@@ -69,11 +49,7 @@
/>
-
+
{{ t('component.table.settingFixedRight') }}
@@ -93,6 +69,12 @@
+
+
+ {{ t('common.resetText') }}
+
+
保存
+
@@ -100,30 +82,25 @@
+
diff --git a/src/components/Table/src/components/settings/FullScreenSetting.vue b/src/components/Table/src/components/settings/FullScreenSetting.vue
index 95fcd1f..02ea1fd 100644
--- a/src/components/Table/src/components/settings/FullScreenSetting.vue
+++ b/src/components/Table/src/components/settings/FullScreenSetting.vue
@@ -1,5 +1,5 @@
-
+
{{ t('component.table.settingFullScreen') }}
@@ -8,7 +8,7 @@
diff --git a/src/components/Table/src/components/settings/SizeSetting.vue b/src/components/Table/src/components/settings/SizeSetting.vue
index f63b799..0fb774e 100644
--- a/src/components/Table/src/components/settings/SizeSetting.vue
+++ b/src/components/Table/src/components/settings/SizeSetting.vue
@@ -1,10 +1,9 @@
-
+
{{ t('component.table.settingDens') }}
-
-
+
@@ -24,7 +23,7 @@
+
diff --git a/src/components/Table/src/const.ts b/src/components/Table/src/const.ts
index 3b69415..2a45fac 100644
--- a/src/components/Table/src/const.ts
+++ b/src/components/Table/src/const.ts
@@ -2,7 +2,14 @@ import componentSetting from '/@/settings/componentSetting';
const { table } = componentSetting;
-const { pageSizeOptions, defaultPageSize, fetchSetting, defaultSortFn, defaultFilterFn } = table;
+const {
+ pageSizeOptions,
+ defaultPageSize,
+ fetchSetting,
+ defaultSize,
+ defaultSortFn,
+ defaultFilterFn,
+} = table;
export const ROW_KEY = 'key';
@@ -15,6 +22,9 @@ export const PAGE_SIZE = defaultPageSize;
// Common interface field settings
export const FETCH_SETTING = fetchSetting;
+// Default Size
+export const DEFAULT_SIZE = defaultSize;
+
// Configure general sort function
export const DEFAULT_SORT_FN = defaultSortFn;
diff --git a/src/components/Table/src/hooks/useColumns.ts b/src/components/Table/src/hooks/useColumns.ts
index 8702f2a..a0d021c 100644
--- a/src/components/Table/src/hooks/useColumns.ts
+++ b/src/components/Table/src/hooks/useColumns.ts
@@ -1,7 +1,7 @@
import type { BasicColumn, BasicTableProps, CellFormat, GetColumnsParams } from '../types/table';
import type { PaginationProps } from '../types/pagination';
import type { ComputedRef } from 'vue';
-import { computed, Ref, ref, toRaw, unref, watch } from 'vue';
+import { computed, Ref, ref, reactive, toRaw, unref, watch } from 'vue';
import { renderEditCell } from '../components/editable';
import { usePermission } from '/@/hooks/web/usePermission';
import { useI18n } from '/@/hooks/web/useI18n';
@@ -15,7 +15,7 @@ function handleItem(item: BasicColumn, ellipsis: boolean) {
item.align = item.align || DEFAULT_ALIGN;
if (ellipsis) {
if (!key) {
- item.key = dataIndex;
+ item.key = dataIndex as any;
}
if (!isBoolean(item.ellipsis)) {
Object.assign(item, {
@@ -40,7 +40,7 @@ function handleChildren(children: BasicColumn[] | undefined, ellipsis: boolean)
function handleIndexColumn(
propsRef: ComputedRef,
getPaginationRef: ComputedRef,
- columns: BasicColumn[]
+ columns: BasicColumn[],
) {
const { t } = useI18n();
@@ -78,8 +78,8 @@ function handleIndexColumn(
},
...(isFixedLeft
? {
- fixed: 'left',
- }
+ fixed: 'left',
+ }
: {}),
...indexColumnProps,
});
@@ -102,7 +102,7 @@ function handleActionColumn(propsRef: ComputedRef, columns: Bas
export function useColumns(
propsRef: ComputedRef,
- getPaginationRef: ComputedRef
+ getPaginationRef: ComputedRef,
) {
const columnsRef = ref(unref(propsRef).columns) as unknown as Ref;
let cacheColumns = unref(propsRef).columns;
@@ -122,7 +122,7 @@ export function useColumns(
handleItem(
item,
- Reflect.has(item, 'ellipsis') ? !!item.ellipsis : !!ellipsis && !customRender && !slots
+ Reflect.has(item, 'ellipsis') ? !!item.ellipsis : !!ellipsis && !customRender && !slots,
);
});
return columns;
@@ -146,31 +146,38 @@ export function useColumns(
const getViewColumns = computed(() => {
const viewColumns = sortFixedColumn(unref(getColumnsRef));
+ const mapFn = (column) => {
+ const { slots, customRender, format, edit, editRow, flag } = column;
+
+ if (!slots || !slots?.title) {
+ // column.slots = { title: `header-${dataIndex}`, ...(slots || {}) };
+ column.customTitle = column.title;
+ Reflect.deleteProperty(column, 'title');
+ }
+ const isDefaultAction = [INDEX_COLUMN_FLAG, ACTION_COLUMN_FLAG].includes(flag!);
+ if (!customRender && format && !edit && !isDefaultAction) {
+ column.customRender = ({ text, record, index }) => {
+ return formatCell(text, format, record, index);
+ };
+ }
+
+ // edit table
+ if ((edit || editRow) && !isDefaultAction) {
+ column.customRender = renderEditCell(column);
+ }
+ return reactive(column);
+ };
+
const columns = cloneDeep(viewColumns);
return columns
- .filter((column) => {
- return hasPermission(column.auth) && isIfShow(column);
- })
+ .filter((column) => hasPermission(column.auth) && isIfShow(column))
.map((column) => {
- const { slots, dataIndex, customRender, format, edit, editRow, flag } = column;
-
- if (!slots || !slots?.title) {
- column.slots = { title: `header-${dataIndex}`, ...(slots || {}) };
- column.customTitle = column.title;
- Reflect.deleteProperty(column, 'title');
- }
- const isDefaultAction = [INDEX_COLUMN_FLAG, ACTION_COLUMN_FLAG].includes(flag!);
- if (!customRender && format && !edit && !isDefaultAction) {
- column.customRender = ({ text, record, index }) => {
- return formatCell(text, format, record, index);
- };
+ // Support table multiple header editable
+ if (column.children?.length) {
+ column.children = column.children.map(mapFn);
}
- // edit table
- if ((edit || editRow) && !isDefaultAction) {
- column.customRender = renderEditCell(column);
- }
- return column;
+ return mapFn(column);
});
});
@@ -179,7 +186,7 @@ export function useColumns(
(columns) => {
columnsRef.value = columns;
cacheColumns = columns?.filter((item) => !item.flag) ?? [];
- }
+ },
);
function setCacheColumnsByField(dataIndex: string | undefined, value: Partial) {
@@ -197,7 +204,7 @@ export function useColumns(
* set columns
* @param columnList key|column
*/
- function setColumns(columnList: Partial[] | string[]) {
+ function setColumns(columnList: Partial[] | (string | string[])[]) {
const columns = cloneDeep(columnList);
if (!isArray(columns)) return;
@@ -210,31 +217,23 @@ export function useColumns(
const cacheKeys = cacheColumns.map((item) => item.dataIndex);
- if (!isString(firstColumn)) {
+ if (!isString(firstColumn) && !isArray(firstColumn)) {
columnsRef.value = columns as BasicColumn[];
} else {
- const columnKeys = columns as string[];
+ const columnKeys = (columns as (string | string[])[]).map((m) => m.toString());
const newColumns: BasicColumn[] = [];
cacheColumns.forEach((item) => {
- if (columnKeys.includes(item.dataIndex! || (item.key as string))) {
- newColumns.push({
- ...item,
- defaultHidden: false,
- });
- } else {
- newColumns.push({
- ...item,
- defaultHidden: true,
- });
- }
+ newColumns.push({
+ ...item,
+ defaultHidden: !columnKeys.includes(item.dataIndex?.toString() || (item.key as string)),
+ });
});
-
// Sort according to another array
if (!isEqual(cacheKeys, columns)) {
newColumns.sort((prev, next) => {
return (
- cacheKeys.indexOf(prev.dataIndex as string) -
- cacheKeys.indexOf(next.dataIndex as string)
+ columnKeys.indexOf(prev.dataIndex?.toString() as string) -
+ columnKeys.indexOf(next.dataIndex?.toString() as string)
);
});
}
@@ -288,7 +287,7 @@ function sortFixedColumn(columns: BasicColumn[]) {
defColumns.push(column);
}
return [...fixedLeftColumns, ...defColumns, ...fixedRightColumns].filter(
- (item) => !item.defaultHidden
+ (item) => !item.defaultHidden,
);
}
@@ -306,7 +305,7 @@ export function formatCell(text: string, format: CellFormat, record: Recordable,
try {
// date type
const DATE_FORMAT_PREFIX = 'date|';
- if (isString(format) && format.startsWith(DATE_FORMAT_PREFIX)) {
+ if (isString(format) && format.startsWith(DATE_FORMAT_PREFIX) && text) {
const dateFormat = format.replace(DATE_FORMAT_PREFIX, '');
if (!dateFormat) {
diff --git a/src/components/Table/src/hooks/useColumnsCache.ts b/src/components/Table/src/hooks/useColumnsCache.ts
new file mode 100644
index 0000000..9ccde45
--- /dev/null
+++ b/src/components/Table/src/hooks/useColumnsCache.ts
@@ -0,0 +1,135 @@
+import { computed, nextTick, unref, watchEffect } from 'vue';
+import { router } from '/@/router';
+import { createLocalStorage } from '/@/utils/cache';
+import { useTableContext } from './useTableContext';
+import { useMessage } from '/@/hooks/web/useMessage';
+
+/** 列表配置缓存 */
+export function useColumnsCache(opt, setColumns, handleColumnFixed) {
+ let isInit = false;
+ const table = useTableContext();
+ const $ls = createLocalStorage();
+ const { createMessage: $message } = useMessage();
+ // 列表配置缓存key
+ const cacheKey = computed(() => {
+ let { fullPath } = router.currentRoute.value;
+ let key = fullPath.replace(/[\/\\]/g, '_');
+ let cacheKey = table.getBindValues.value.tableSetting?.cacheKey;
+ if (cacheKey) {
+ key += ':' + cacheKey;
+ }
+ return 'columnCache:' + key;
+ });
+
+ watchEffect(() => {
+ const columns = table.getColumns();
+ if (columns.length) {
+ init();
+ }
+ });
+
+ async function init() {
+ if (isInit) {
+ return;
+ }
+ isInit = true;
+ let columnCache = $ls.get(cacheKey.value);
+ if (columnCache && columnCache.checkedList) {
+ const { checkedList, sortedList, sortableOrder, checkIndex } = columnCache;
+ await nextTick();
+ // checkbox的排序缓存
+ opt.sortableOrder.value = sortableOrder;
+ // checkbox的选中缓存
+ opt.state.checkedList = checkedList;
+ // tableColumn的排序缓存
+ opt.plainSortOptions.value.sort((prev, next) => {
+ return sortedList.indexOf(prev.value) - sortedList.indexOf(next.value);
+ });
+ // 重新排序tableColumn
+ checkedList.sort((prev, next) => sortedList.indexOf(prev) - sortedList.indexOf(next));
+ // 是否显示行号列
+ if (checkIndex) {
+ table.setProps({ showIndexColumn: true });
+ }
+ setColumns(checkedList);
+ // 设置固定列
+ setColumnFixed(columnCache);
+ }
+ }
+
+ /** 设置被固定的列 */
+ async function setColumnFixed(columnCache) {
+ const { fixedColumns } = columnCache;
+ const columns = opt.plainOptions.value;
+ for (const column of columns) {
+ let fixedCol = fixedColumns.find((fc) => fc.key === (column.key || column.dataIndex));
+ if (fixedCol) {
+ await nextTick();
+ handleColumnFixed(column, fixedCol.fixed);
+ }
+ }
+ }
+
+ // 判断列固定状态
+ const fixedReg = /^(true|left|right)$/;
+
+ /** 获取被固定的列 */
+ function getFixedColumns() {
+ let fixedColumns: any[] = [];
+ const columns = opt.plainOptions.value;
+ for (const column of columns) {
+ if (fixedReg.test((column.fixed ?? '').toString())) {
+ fixedColumns.push({
+ key: column.key || column.dataIndex,
+ fixed: column.fixed === true ? 'left' : column.fixed,
+ });
+ }
+ }
+ return fixedColumns;
+ }
+
+ /** 保存列配置 */
+ function saveSetting() {
+ const { checkedList } = opt.state;
+ const sortedList = unref(opt.plainSortOptions).map((item) => item.value);
+ $ls.set(cacheKey.value, {
+ // 保存的列
+ checkedList,
+ // 排序后的列
+ sortedList,
+ // 是否显示行号列
+ checkIndex: unref(opt.checkIndex),
+ // checkbox原始排序
+ sortableOrder: unref(opt.sortableOrder),
+ // 固定列
+ fixedColumns: getFixedColumns(),
+ });
+ $message.success('保存成功');
+ // 保存之后直接关闭
+ opt.popoverVisible.value = false;
+ }
+
+ /** 重置(删除)列配置 */
+ async function resetSetting() {
+ // 重置固定列
+ await resetFixedColumn();
+ $ls.remove(cacheKey.value);
+ $message.success('重置成功');
+ }
+
+ async function resetFixedColumn() {
+ const columns = opt.plainOptions.value;
+ for (const column of columns) {
+ column.fixed;
+ if (fixedReg.test((column.fixed ?? '').toString())) {
+ await nextTick();
+ handleColumnFixed(column, null);
+ }
+ }
+ }
+
+ return {
+ saveSetting,
+ resetSetting,
+ };
+}
diff --git a/src/components/Table/src/hooks/useCustomRow.ts b/src/components/Table/src/hooks/useCustomRow.ts
index f9bc56c..1a5aac8 100644
--- a/src/components/Table/src/hooks/useCustomRow.ts
+++ b/src/components/Table/src/hooks/useCustomRow.ts
@@ -15,7 +15,7 @@ interface Options {
function getKey(
record: Recordable,
rowKey: string | ((record: Record) => string) | undefined,
- autoCreateKey?: boolean
+ autoCreateKey?: boolean,
) {
if (!rowKey || autoCreateKey) {
return record[ROW_KEY];
@@ -31,7 +31,7 @@ function getKey(
export function useCustomRow(
propsRef: ComputedRef,
- { setSelectedRowKeys, getSelectRowKeys, getAutoCreateKey, clearSelectedRowKeys, emit }: Options
+ { setSelectedRowKeys, getSelectRowKeys, getAutoCreateKey, clearSelectedRowKeys, emit }: Options,
) {
const customRow = (record: Recordable, index: number) => {
return {
@@ -40,7 +40,7 @@ export function useCustomRow(
function handleClick() {
const { rowSelection, rowKey, clickToRowSelect } = unref(propsRef);
if (!rowSelection || !clickToRowSelect) return;
- const keys = getSelectRowKeys();
+ const keys = getSelectRowKeys() || [];
const key = getKey(record, rowKey, unref(getAutoCreateKey));
if (!key) return;
diff --git a/src/components/Table/src/hooks/useDataSource.ts b/src/components/Table/src/hooks/useDataSource.ts
index 9b6d5c9..5f434c1 100644
--- a/src/components/Table/src/hooks/useDataSource.ts
+++ b/src/components/Table/src/hooks/useDataSource.ts
@@ -13,8 +13,8 @@ import {
} from 'vue';
import { useTimeoutFn } from '/@/hooks/core/useTimeout';
import { buildUUID } from '/@/utils/uuid';
-import { isFunction, isBoolean } from '/@/utils/is';
-import { get, cloneDeep } from 'lodash-es';
+import { isFunction, isBoolean, isObject } from '/@/utils/is';
+import { get, cloneDeep, merge } from 'lodash-es';
import { FETCH_SETTING, ROW_KEY, PAGE_SIZE } from '../const';
interface ActionType {
@@ -40,7 +40,7 @@ export function useDataSource(
clearSelectedRowKeys,
tableData,
}: ActionType,
- emit: EmitType
+ emit: EmitType,
) {
const searchState = reactive({
sortInfo: {},
@@ -61,13 +61,13 @@ export function useDataSource(
},
{
immediate: true,
- }
+ },
);
function handleTableChange(
pagination: PaginationProps,
filters: Partial>,
- sorter: SorterResult
+ sorter: SorterResult,
) {
const { clearSelectOnPageChange, sortFn, filterFn } = unref(propsRef);
if (clearSelectOnPageChange) {
@@ -148,7 +148,7 @@ export function useDataSource(
function updateTableDataRecord(
rowKey: string | number,
- record: Recordable
+ record: Recordable,
): Recordable | undefined {
const row = findTableDataRecord(rowKey);
@@ -160,6 +160,63 @@ export function useDataSource(
}
}
+ function deleteTableDataRecord(rowKey: string | number | string[] | number[]) {
+ if (!dataSourceRef.value || dataSourceRef.value.length == 0) return;
+ const rowKeyName = unref(getRowKey);
+ if (!rowKeyName) return;
+ const rowKeys = !Array.isArray(rowKey) ? [rowKey] : rowKey;
+
+ function deleteRow(data, key) {
+ const row: { index: number; data: [] } = findRow(data, key);
+ if (row === null || row.index === -1) {
+ return;
+ }
+ row.data.splice(row.index, 1);
+
+ function findRow(data, key) {
+ if (data === null || data === undefined) {
+ return null;
+ }
+ for (let i = 0; i < data.length; i++) {
+ const row = data[i];
+ let targetKeyName: string = rowKeyName as string;
+ if (isFunction(rowKeyName)) {
+ targetKeyName = rowKeyName(row);
+ }
+ if (row[targetKeyName] === key) {
+ return { index: i, data };
+ }
+ if (row.children?.length > 0) {
+ const result = findRow(row.children, key);
+ if (result != null) {
+ return result;
+ }
+ }
+ }
+ return null;
+ }
+ }
+
+ for (const key of rowKeys) {
+ deleteRow(dataSourceRef.value, key);
+ deleteRow(unref(propsRef).dataSource, key);
+ }
+ setPagination({
+ total: unref(propsRef).dataSource?.length,
+ });
+ }
+
+ function insertTableDataRecord(
+ record: Recordable | Recordable[],
+ index: number,
+ ): Recordable[] | undefined {
+ // if (!dataSourceRef.value || dataSourceRef.value.length == 0) return;
+ index = index ?? dataSourceRef.value?.length;
+ const _record = isObject(record) ? [record as Recordable] : (record as Recordable[]);
+ unref(dataSourceRef).splice(index, 0, ..._record);
+ return unref(dataSourceRef);
+ }
+
function findTableDataRecord(rowKey: string | number) {
if (!dataSourceRef.value || dataSourceRef.value.length == 0) return;
@@ -198,15 +255,23 @@ export function useDataSource(
}
async function fetch(opt?: FetchParams) {
- const { api, searchInfo, fetchSetting, beforeFetch, afterFetch, useSearchForm, pagination } =
- unref(propsRef);
+ const {
+ api,
+ searchInfo,
+ defSort,
+ fetchSetting,
+ beforeFetch,
+ afterFetch,
+ useSearchForm,
+ pagination,
+ } = unref(propsRef);
if (!api || !isFunction(api)) return;
try {
setLoading(true);
const { pageField, sizeField, listField, totalField } = Object.assign(
{},
FETCH_SETTING,
- fetchSetting
+ fetchSetting,
);
let pageParams: Recordable = {};
@@ -221,16 +286,17 @@ export function useDataSource(
const { sortInfo = {}, filterInfo } = searchState;
- let params: Recordable = {
- ...pageParams,
- ...(useSearchForm ? getFieldsValue() : {}),
- ...searchInfo,
- ...(opt?.searchInfo ?? {}),
- ...sortInfo,
- ...filterInfo,
- ...(opt?.sortInfo ?? {}),
- ...(opt?.filterInfo ?? {}),
- };
+ let params: Recordable = merge(
+ pageParams,
+ useSearchForm ? getFieldsValue() : {},
+ searchInfo,
+ opt?.searchInfo ?? {},
+ defSort,
+ sortInfo,
+ filterInfo,
+ opt?.sortInfo ?? {},
+ opt?.filterInfo ?? {},
+ );
if (beforeFetch && isFunction(beforeFetch)) {
params = (await beforeFetch(params)) || params;
}
@@ -241,16 +307,16 @@ export function useDataSource(
const isArrayResult = Array.isArray(res);
let resultItems: Recordable[] = isArrayResult ? res : get(res, listField);
- const resultTotal: number = isArrayResult ? 0 : get(res, totalField);
+ const resultTotal: number = isArrayResult ? res.length : get(res, totalField);
// 假如数据变少,导致总页数变少并小于当前选中页码,通过getPaginationRef获取到的页码是不正确的,需获取正确的页码再次执行
- if (resultTotal) {
+ if (Number(resultTotal)) {
const currentTotalPage = Math.ceil(resultTotal / pageSize);
if (current > currentTotalPage) {
setPagination({
current: currentTotalPage,
});
- fetch(opt);
+ return await fetch(opt);
}
}
@@ -270,6 +336,7 @@ export function useDataSource(
items: unref(resultItems),
total: resultTotal,
});
+ return resultItems;
} catch (error) {
emit('fetch-error', error);
dataSourceRef.value = [];
@@ -282,7 +349,7 @@ export function useDataSource(
}
function setTableData(values: T[]) {
- dataSourceRef.value = values;
+ dataSourceRef.value = values as any;
}
function getDataSource() {
@@ -294,7 +361,7 @@ export function useDataSource(
}
async function reload(opt?: FetchParams) {
- await fetch(opt);
+ return await fetch(opt);
}
onMounted(() => {
@@ -314,6 +381,8 @@ export function useDataSource(
reload,
updateTableData,
updateTableDataRecord,
+ deleteTableDataRecord,
+ insertTableDataRecord,
findTableDataRecord,
handleTableChange,
};
diff --git a/src/components/Table/src/hooks/useLoading.ts b/src/components/Table/src/hooks/useLoading.ts
index 0a670b0..fe8a0f1 100644
--- a/src/components/Table/src/hooks/useLoading.ts
+++ b/src/components/Table/src/hooks/useLoading.ts
@@ -8,7 +8,7 @@ export function useLoading(props: ComputedRef) {
() => unref(props).loading,
(loading) => {
loadingRef.value = loading;
- }
+ },
);
const getLoading = computed(() => unref(loadingRef));
diff --git a/src/components/Table/src/hooks/usePagination.tsx b/src/components/Table/src/hooks/usePagination.tsx
index 4fb2362..ba310bd 100644
--- a/src/components/Table/src/hooks/usePagination.tsx
+++ b/src/components/Table/src/hooks/usePagination.tsx
@@ -1,6 +1,6 @@
import type { PaginationProps } from '../types/pagination';
import type { BasicTableProps } from '../types/table';
-import { computed, unref, ref, ComputedRef, watchEffect } from 'vue';
+import { computed, unref, ref, ComputedRef, watch } from 'vue';
import { LeftOutlined, RightOutlined } from '@ant-design/icons-vue';
import { isBoolean } from '/@/utils/is';
import { PAGE_SIZE, PAGE_SIZE_OPTIONS } from '../const';
@@ -27,15 +27,17 @@ export function usePagination(refProps: ComputedRef) {
const configRef = ref({});
const show = ref(true);
- watchEffect(() => {
- const { pagination } = unref(refProps);
- if (!isBoolean(pagination) && pagination) {
- configRef.value = {
- ...unref(configRef),
- ...(pagination ?? {}),
- };
- }
- });
+ watch(
+ () => unref(refProps).pagination,
+ (pagination) => {
+ if (!isBoolean(pagination) && pagination) {
+ configRef.value = {
+ ...unref(configRef),
+ ...(pagination ?? {}),
+ };
+ }
+ },
+ );
const getPaginationInfo = computed((): PaginationProps | boolean => {
const { pagination } = unref(refProps);
diff --git a/src/components/Table/src/hooks/useRowSelection.ts b/src/components/Table/src/hooks/useRowSelection.ts
index 55375b6..8f594f8 100644
--- a/src/components/Table/src/hooks/useRowSelection.ts
+++ b/src/components/Table/src/hooks/useRowSelection.ts
@@ -8,7 +8,7 @@ import { findNodeIn } from '/@/utils/helper/treeHelper';
export function useRowSelection(
propsRef: ComputedRef,
tableData: Ref,
- emit: EmitType
+ emit: EmitType,
) {
const selectedRowKeysRef = ref([]);
const selectedRowRef = ref([]);
@@ -20,12 +20,13 @@ export function useRowSelection(
}
return {
+ // AntDV3.0 之后使用远程加载数据进行分页时,
+ // 默认会清空上一页选择的行数据(导致无法跨页选择),
+ // 将此属性设置为 true 即可解决。
+ preserveSelectedRowKeys: true,
selectedRowKeys: unref(selectedRowKeysRef),
- hideDefaultSelections: false,
onChange: (selectedRowKeys: string[]) => {
setSelectedRowKeys(selectedRowKeys);
- // selectedRowKeysRef.value = selectedRowKeys;
- // selectedRowRef.value = selectedRows;
},
...omit(rowSelection, ['onChange']),
};
@@ -35,7 +36,7 @@ export function useRowSelection(
() => unref(propsRef).rowSelection?.selectedRowKeys,
(v: string[]) => {
setSelectedRowKeys(v);
- }
+ },
);
watch(
@@ -53,7 +54,7 @@ export function useRowSelection(
});
});
},
- { deep: true }
+ { deep: true },
);
const getAutoCreateKey = computed(() => {
@@ -69,13 +70,13 @@ export function useRowSelection(
selectedRowKeysRef.value = rowKeys;
const allSelectedRows = findNodeIn(
toRaw(unref(tableData)).concat(toRaw(unref(selectedRowRef))),
- (item) => rowKeys.includes(item[unref(getRowKey) as string]),
+ (item) => rowKeys?.includes(item[unref(getRowKey) as string]),
{
children: propsRef.value.childrenColumnName ?? 'children',
- }
+ },
);
const trueSelectedRows: any[] = [];
- rowKeys.forEach((key: string) => {
+ rowKeys?.forEach((key: string) => {
const found = allSelectedRows.find((item) => item[unref(getRowKey) as string] === key);
found && trueSelectedRows.push(found);
});
@@ -104,6 +105,7 @@ export function useRowSelection(
}
function getSelectRows() {
+ // const ret = toRaw(unref(selectedRowRef)).map((item) => toRaw(item));
return unref(selectedRowRef) as T[];
}
diff --git a/src/components/Table/src/hooks/useScrollTo.ts b/src/components/Table/src/hooks/useScrollTo.ts
new file mode 100644
index 0000000..4ba76c2
--- /dev/null
+++ b/src/components/Table/src/hooks/useScrollTo.ts
@@ -0,0 +1,55 @@
+import type { ComputedRef, Ref } from 'vue';
+import { nextTick, unref } from 'vue';
+import { warn } from '/@/utils/log';
+
+export function useTableScrollTo(
+ tableElRef: Ref,
+ getDataSourceRef: ComputedRef,
+) {
+ let bodyEl: HTMLElement | null;
+
+ async function findTargetRowToScroll(targetRowData: Recordable) {
+ const { id } = targetRowData;
+ const targetRowEl: HTMLElement | null | undefined = bodyEl?.querySelector(
+ `[data-row-key="${id}"]`,
+ );
+ // Add a delay to get new dataSource
+ await nextTick();
+ bodyEl?.scrollTo({
+ top: targetRowEl?.offsetTop ?? 0,
+ behavior: 'smooth',
+ });
+ }
+
+ function scrollTo(pos: string): void {
+ const table = unref(tableElRef);
+ if (!table) return;
+
+ const tableEl: Element = table.$el;
+ if (!tableEl) return;
+
+ if (!bodyEl) {
+ bodyEl = tableEl.querySelector('.ant-table-body');
+ if (!bodyEl) return;
+ }
+
+ const dataSource = unref(getDataSourceRef);
+ if (!dataSource) return;
+
+ // judge pos type
+ if (pos === 'top') {
+ findTargetRowToScroll(dataSource[0]);
+ } else if (pos === 'bottom') {
+ findTargetRowToScroll(dataSource[dataSource.length - 1]);
+ } else {
+ const targetRowData = dataSource.find((data) => data.id === pos);
+ if (targetRowData) {
+ findTargetRowToScroll(targetRowData);
+ } else {
+ warn(`id: ${pos} doesn't exist`);
+ }
+ }
+ }
+
+ return { scrollTo };
+}
diff --git a/src/components/Table/src/hooks/useTable.ts b/src/components/Table/src/hooks/useTable.ts
index 6110904..19049e7 100644
--- a/src/components/Table/src/hooks/useTable.ts
+++ b/src/components/Table/src/hooks/useTable.ts
@@ -16,9 +16,9 @@ type UseTableMethod = TableActionType & {
export function useTable(tableProps?: Props): [
(instance: TableActionType, formInstance: UseTableMethod) => void,
- TableActionType & {
+ TableActionType & {
getForm: () => FormActionType;
- }
+ },
] {
const tableRef = ref>(null);
const loadedRef = ref>(false);
@@ -28,10 +28,10 @@ export function useTable(tableProps?: Props): [
function register(instance: TableActionType, formInstance: UseTableMethod) {
isProdMode() &&
- onUnmounted(() => {
- tableRef.value = null;
- loadedRef.value = null;
- });
+ onUnmounted(() => {
+ tableRef.value = null;
+ loadedRef.value = null;
+ });
if (unref(loadedRef) && isProdMode() && instance === unref(tableRef)) return;
@@ -50,7 +50,7 @@ export function useTable(tableProps?: Props): [
{
immediate: true,
deep: true,
- }
+ },
);
}
@@ -58,7 +58,7 @@ export function useTable(tableProps?: Props): [
const table = unref(tableRef);
if (!table) {
error(
- 'The table instance has not been obtained yet, please make sure the table is presented when performing the table operation!'
+ 'The table instance has not been obtained yet, please make sure the table is presented when performing the table operation!',
);
}
return table as TableActionType;
@@ -68,7 +68,7 @@ export function useTable(tableProps?: Props): [
getForm: () => FormActionType;
} = {
reload: async (opt?: FetchParams) => {
- getTableInstance().reload(opt);
+ return await getTableInstance().reload(opt);
},
setProps: (props: Partial) => {
getTableInstance().setProps(props);
@@ -76,6 +76,9 @@ export function useTable(tableProps?: Props): [
redoHeight: () => {
getTableInstance().redoHeight();
},
+ setSelectedRows: (rows: Recordable[]) => {
+ return toRaw(getTableInstance().setSelectedRows(rows));
+ },
setLoading: (loading: boolean) => {
getTableInstance().setLoading(loading);
},
@@ -89,7 +92,7 @@ export function useTable(tableProps?: Props): [
const columns = getTableInstance().getColumns({ ignoreIndex }) || [];
return toRaw(columns);
},
- setColumns: (columns) => {
+ setColumns: (columns: BasicColumn[]) => {
getTableInstance().setColumns(columns);
},
setTableData: (values: any[]) => {
@@ -122,6 +125,12 @@ export function useTable(tableProps?: Props): [
updateTableData: (index: number, key: string, value: any) => {
return getTableInstance().updateTableData(index, key, value);
},
+ deleteTableDataRecord: (rowKey: string | number | string[] | number[]) => {
+ return getTableInstance().deleteTableDataRecord(rowKey);
+ },
+ insertTableDataRecord: (record: Recordable | Recordable[], index?: number) => {
+ return getTableInstance().insertTableDataRecord(record, index);
+ },
updateTableDataRecord: (rowKey: string | number, record: Recordable) => {
return getTableInstance().updateTableDataRecord(rowKey, record);
},
@@ -146,9 +155,15 @@ export function useTable(tableProps?: Props): [
expandAll: () => {
getTableInstance().expandAll();
},
+ expandRows: (keys: string[]) => {
+ getTableInstance().expandRows(keys);
+ },
collapseAll: () => {
getTableInstance().collapseAll();
},
+ scrollTo: (pos: string) => {
+ getTableInstance().scrollTo(pos);
+ },
};
return [register, methods];
diff --git a/src/components/Table/src/hooks/useTableExpand.ts b/src/components/Table/src/hooks/useTableExpand.ts
index c4bedfd..2628365 100644
--- a/src/components/Table/src/hooks/useTableExpand.ts
+++ b/src/components/Table/src/hooks/useTableExpand.ts
@@ -6,7 +6,7 @@ import { ROW_KEY } from '../const';
export function useTableExpand(
propsRef: ComputedRef,
tableData: Ref,
- emit: EmitType
+ emit: EmitType,
) {
const expandedRowKeys = ref([]);
@@ -37,6 +37,13 @@ export function useTableExpand(
expandedRowKeys.value = keys;
}
+ function expandRows(keys: string[]) {
+ // use row ID expands the specified table row
+ const { isTreeTable } = unref(propsRef);
+ if (!isTreeTable) return;
+ expandedRowKeys.value = [...expandedRowKeys.value, ...keys];
+ }
+
function getAllKeys(data?: Recordable[]) {
const keys: string[] = [];
const { childrenColumnName } = unref(propsRef);
@@ -54,5 +61,5 @@ export function useTableExpand(
expandedRowKeys.value = [];
}
- return { getExpandOption, expandAll, collapseAll };
+ return { getExpandOption, expandAll, expandRows, collapseAll };
}
diff --git a/src/components/Table/src/hooks/useTableFooter.ts b/src/components/Table/src/hooks/useTableFooter.ts
index fa46e36..6a3aa58 100644
--- a/src/components/Table/src/hooks/useTableFooter.ts
+++ b/src/components/Table/src/hooks/useTableFooter.ts
@@ -8,11 +8,11 @@ export function useTableFooter(
propsRef: ComputedRef,
scrollRef: ComputedRef<{
x: string | number | true;
- y: Nullable;
+ y: string | number | null;
scrollToFirstRowOnChange: boolean;
}>,
tableElRef: Ref,
- getDataSourceRef: ComputedRef
+ getDataSourceRef: ComputedRef,
) {
const getIsEmptyData = computed(() => {
return (unref(getDataSourceRef) || []).length === 0;
@@ -36,14 +36,13 @@ export function useTableFooter(
nextTick(() => {
const tableEl = unref(tableElRef);
if (!tableEl) return;
- const bodyDomList = tableEl.$el.querySelectorAll('.ant-table-body');
- const bodyDom = bodyDomList[0];
+ const bodyDom = tableEl.$el.querySelector('.ant-table-content');
useEventListener({
el: bodyDom,
name: 'scroll',
listener: () => {
const footerBodyDom = tableEl.$el.querySelector(
- '.ant-table-footer .ant-table-body'
+ '.ant-table-footer .ant-table-content',
) as HTMLDivElement;
if (!footerBodyDom || !bodyDom) return;
footerBodyDom.scrollLeft = bodyDom.scrollLeft;
diff --git a/src/components/Table/src/hooks/useTableForm.ts b/src/components/Table/src/hooks/useTableForm.ts
index 87c2cce..bc09c7f 100644
--- a/src/components/Table/src/hooks/useTableForm.ts
+++ b/src/components/Table/src/hooks/useTableForm.ts
@@ -8,7 +8,7 @@ export function useTableForm(
propsRef: ComputedRef,
slots: Slots,
fetch: (opt?: FetchParams | undefined) => Promise,
- getLoading: ComputedRef
+ getLoading: ComputedRef,
) {
const getFormProps = computed((): Partial => {
const { formConfig } = unref(propsRef);
@@ -21,9 +21,11 @@ export function useTableForm(
};
});
- const getFormSlotKeys = computed(() => {
+ const getFormSlotKeys: ComputedRef = computed(() => {
const keys = Object.keys(slots);
- return keys.map((item) => (item.startsWith('form-') ? item : null)).filter(Boolean);
+ return keys
+ .map((item) => (item.startsWith('form-') ? item : null))
+ .filter((item) => !!item) as string[];
});
function replaceFormSlotKey(key: string) {
diff --git a/src/components/Table/src/hooks/useTableHeader.ts b/src/components/Table/src/hooks/useTableHeader.ts
index 16d6693..9bf2362 100644
--- a/src/components/Table/src/hooks/useTableHeader.ts
+++ b/src/components/Table/src/hooks/useTableHeader.ts
@@ -8,7 +8,7 @@ import { getSlot } from '/@/utils/helper/tsxHelper';
export function useTableHeader(
propsRef: ComputedRef,
slots: Slots,
- handlers: InnerHandlers
+ handlers: InnerHandlers,
) {
const getHeaderProps = computed((): Recordable => {
const { title, showTableSetting, titleHelpMessage, tableSetting } = unref(propsRef);
@@ -21,33 +21,45 @@ export function useTableHeader(
title: hideTitle
? null
: () =>
- h(
- TableHeader,
- {
- title,
- titleHelpMessage,
- showTableSetting,
- tableSetting,
- onColumnsChange: handlers.onColumnsChange,
- } as Recordable,
- {
- ...(slots.toolbar
- ? {
- toolbar: () => getSlot(slots, 'toolbar'),
- }
- : {}),
- ...(slots.tableTitle
- ? {
- tableTitle: () => getSlot(slots, 'tableTitle'),
- }
- : {}),
- ...(slots.headerTop
- ? {
- headerTop: () => getSlot(slots, 'headerTop'),
- }
- : {}),
- }
- ),
+ h(
+ TableHeader,
+ {
+ title,
+ titleHelpMessage,
+ showTableSetting,
+ tableSetting,
+ onColumnsChange: handlers.onColumnsChange,
+ } as Recordable,
+ {
+ ...(slots.toolbar
+ ? {
+ toolbar: () => getSlot(slots, 'toolbar'),
+ }
+ : {}),
+ ...(slots.tableTitle
+ ? {
+ tableTitle: () => getSlot(slots, 'tableTitle'),
+ }
+ : {}),
+ ...(slots.headerTop
+ ? {
+ headerTop: () => getSlot(slots, 'headerTop'),
+ }
+ : {}),
+ //添加tableTop插槽
+ ...(slots.tableTop
+ ? {
+ tableTop: () => getSlot(slots, 'tableTop'),
+ }
+ : {}),
+ // 添加alertAfter插槽
+ ...(slots.alertAfter
+ ? {
+ alertAfter: () => getSlot(slots, 'alertAfter')
+ }
+ : {}),
+ },
+ ),
};
});
return { getHeaderProps };
diff --git a/src/components/Table/src/hooks/useTableScroll.ts b/src/components/Table/src/hooks/useTableScroll.ts
index e4931d0..805a2b0 100644
--- a/src/components/Table/src/hooks/useTableScroll.ts
+++ b/src/components/Table/src/hooks/useTableScroll.ts
@@ -1,6 +1,6 @@
import type { BasicTableProps, TableRowSelection, BasicColumn } from '../types/table';
-import type { Ref, ComputedRef } from 'vue';
-import { computed, unref, ref, nextTick, watch } from 'vue';
+import { Ref, ComputedRef, ref } from 'vue';
+import { computed, unref, nextTick, watch } from 'vue';
import { getViewportOffset } from '/@/utils/domUtils';
import { isBoolean } from '/@/utils/is';
import { useWindowSizeFn } from '/@/hooks/event/useWindowSizeFn';
@@ -12,11 +12,12 @@ export function useTableScroll(
propsRef: ComputedRef,
tableElRef: Ref,
columnsRef: ComputedRef,
- rowSelectionRef: ComputedRef | null>,
- getDataSourceRef: ComputedRef
+ rowSelectionRef: ComputedRef,
+ getDataSourceRef: ComputedRef,
+ wrapRef: Ref,
+ formRef: Ref,
) {
- const tableHeightRef: Ref> = ref(null);
-
+ const tableHeightRef: Ref> = ref(167);
const modalFn = useModalContext();
// Greater than animation time 280
@@ -34,7 +35,7 @@ export function useTableScroll(
},
{
flush: 'post',
- }
+ },
);
function redoHeight() {
@@ -43,8 +44,8 @@ export function useTableScroll(
});
}
- function setHeight(heigh: number) {
- tableHeightRef.value = heigh;
+ function setHeight(height: number) {
+ tableHeightRef.value = height;
// Solve the problem of modal adaptive height calculation when the form is placed in the modal
modalFn?.redoModalHeight?.();
}
@@ -55,7 +56,8 @@ export function useTableScroll(
let bodyEl: HTMLElement | null;
async function calcTableHeight() {
- const { resizeHeightOffset, pagination, maxHeight } = unref(propsRef);
+ const { resizeHeightOffset, pagination, maxHeight, isCanResizeParent, useSearchForm } =
+ unref(propsRef);
const tableData = unref(getDataSourceRef);
const table = unref(tableElRef);
@@ -74,34 +76,31 @@ export function useTableScroll(
if (hasScrollBarY) {
tableEl.classList.contains('hide-scrollbar-y') &&
- tableEl.classList.remove('hide-scrollbar-y');
+ tableEl.classList.remove('hide-scrollbar-y');
} else {
!tableEl.classList.contains('hide-scrollbar-y') && tableEl.classList.add('hide-scrollbar-y');
}
if (hasScrollBarX) {
tableEl.classList.contains('hide-scrollbar-x') &&
- tableEl.classList.remove('hide-scrollbar-x');
+ tableEl.classList.remove('hide-scrollbar-x');
} else {
!tableEl.classList.contains('hide-scrollbar-x') && tableEl.classList.add('hide-scrollbar-x');
}
bodyEl!.style.height = 'unset';
- if (!unref(getCanResize) || tableData.length === 0) return;
+ if (!unref(getCanResize) || !unref(tableData) || tableData.length === 0) return;
await nextTick();
- //Add a delay to get the correct bottomIncludeBody paginationHeight footerHeight headerHeight
+ // Add a delay to get the correct bottomIncludeBody paginationHeight footerHeight headerHeight
const headEl = tableEl.querySelector('.ant-table-thead ');
if (!headEl) return;
- // Table height from bottom
- const { bottomIncludeBody } = getViewportOffset(headEl);
// Table height from bottom height-custom offset
-
- const paddingHeight = 32;
+ let paddingHeight = 32;
// Pager height
let paginationHeight = 2;
if (!isBoolean(pagination)) {
@@ -132,6 +131,35 @@ export function useTableScroll(
headerHeight = (headEl as HTMLElement).offsetHeight;
}
+ let bottomIncludeBody = 0;
+ if (unref(wrapRef) && isCanResizeParent) {
+ const tablePadding = 12;
+ const formMargin = 16;
+ let paginationMargin = 10;
+ const wrapHeight = unref(wrapRef)?.offsetHeight ?? 0;
+
+ let formHeight = unref(formRef)?.$el.offsetHeight ?? 0;
+ if (formHeight) {
+ formHeight += formMargin;
+ }
+ if (isBoolean(pagination) && !pagination) {
+ paginationMargin = 0;
+ }
+ if (isBoolean(useSearchForm) && !useSearchForm) {
+ paddingHeight = 0;
+ }
+
+ const headerCellHeight =
+ (tableEl.querySelector('.ant-table-title') as HTMLElement)?.offsetHeight ?? 0;
+
+ console.log(wrapHeight - formHeight - headerCellHeight - tablePadding - paginationMargin);
+ bottomIncludeBody =
+ wrapHeight - formHeight - headerCellHeight - tablePadding - paginationMargin;
+ } else {
+ // Table height from bottom
+ bottomIncludeBody = getViewportOffset(headEl).bottomIncludeBody;
+ }
+
let height =
bottomIncludeBody -
(resizeHeightOffset || 0) -
@@ -139,7 +167,6 @@ export function useTableScroll(
paginationHeight -
footerHeight -
headerHeight;
-
height = (height > maxHeight! ? (maxHeight as number) : height) ?? height;
setHeight(height);
@@ -164,7 +191,7 @@ export function useTableScroll(
const columns = unref(columnsRef).filter((item) => !item.defaultHidden);
columns.forEach((item) => {
- width += Number.parseInt(item.width as string) || 0;
+ width += Number.parseFloat(item.width as string) || 0;
});
const unsetWidthColumns = columns.filter((item) => !Reflect.has(item, 'width'));
diff --git a/src/components/Table/src/hooks/useTableStyle.ts b/src/components/Table/src/hooks/useTableStyle.ts
index 77783e6..292187d 100644
--- a/src/components/Table/src/hooks/useTableStyle.ts
+++ b/src/components/Table/src/hooks/useTableStyle.ts
@@ -6,11 +6,14 @@ import { isFunction } from '/@/utils/is';
export function useTableStyle(propsRef: ComputedRef, prefixCls: string) {
function getRowClassName(record: TableCustomRecord, index: number) {
const { striped, rowClassName } = unref(propsRef);
- if (!striped) return;
+ const classNames: string[] = [];
+ if (striped) {
+ classNames.push((index || 0) % 2 === 1 ? `${prefixCls}-row__striped` : '');
+ }
if (rowClassName && isFunction(rowClassName)) {
- return rowClassName(record);
+ classNames.push(rowClassName(record, index));
}
- return (index || 0) % 2 === 1 ? `${prefixCls}-row__striped` : '';
+ return classNames.filter((cls) => !!cls).join(' ');
}
return { getRowClassName };
diff --git a/src/components/Table/src/props.ts b/src/components/Table/src/props.ts
index e36e2ab..769becf 100644
--- a/src/components/Table/src/props.ts
+++ b/src/components/Table/src/props.ts
@@ -7,16 +7,18 @@ import type {
SorterResult,
TableCustomRecord,
TableRowSelection,
+ SizeType,
} from './types/table';
import type { FormProps } from '/@/components/Form';
-import { DEFAULT_FILTER_FN, DEFAULT_SORT_FN, FETCH_SETTING } from './const';
+
+import { DEFAULT_FILTER_FN, DEFAULT_SORT_FN, FETCH_SETTING, DEFAULT_SIZE } from './const';
import { propTypes } from '/@/utils/propTypes';
export const basicProps = {
- clickToRowSelect: propTypes.bool.def(true),
- isTreeTable: propTypes.bool.def(false),
+ clickToRowSelect: { type: Boolean, default: true },
+ isTreeTable: Boolean,
tableSetting: propTypes.shape({}),
- inset: propTypes.bool,
+ inset: Boolean,
sortFn: {
type: Function as PropType<(sortInfo: SorterResult) => any>,
default: DEFAULT_SORT_FN,
@@ -25,10 +27,10 @@ export const basicProps = {
type: Function as PropType<(data: Partial>) => any>,
default: DEFAULT_FILTER_FN,
},
- showTableSetting: propTypes.bool,
- autoCreateKey: propTypes.bool.def(true),
- striped: propTypes.bool.def(true),
- showSummary: propTypes.bool,
+ showTableSetting: Boolean,
+ autoCreateKey: { type: Boolean, default: true },
+ striped: { type: Boolean, default: true },
+ showSummary: Boolean,
summaryFunc: {
type: [Function, Array] as PropType<(...arg: any[]) => any[]>,
default: null,
@@ -38,7 +40,7 @@ export const basicProps = {
default: null,
},
indentSize: propTypes.number.def(24),
- canColDrag: propTypes.bool.def(true),
+ canColDrag: { type: Boolean, default: true },
api: {
type: Function as PropType<(...arg: any[]) => Promise>,
default: null,
@@ -62,13 +64,18 @@ export const basicProps = {
},
},
// 立即请求接口
- immediate: propTypes.bool.def(true),
- emptyDataIsShowTable: propTypes.bool.def(true),
+ immediate: { type: Boolean, default: true },
+ emptyDataIsShowTable: { type: Boolean, default: true },
// 额外的请求参数
searchInfo: {
type: Object as PropType,
default: null,
},
+ // 默认的排序参数
+ defSort: {
+ type: Object as PropType,
+ default: null,
+ },
// 使用搜索表单
useSearchForm: propTypes.bool,
// 表单配置
@@ -77,10 +84,10 @@ export const basicProps = {
default: null,
},
columns: {
- type: [Array] as PropType,
+ type: Array as PropType,
default: () => [],
},
- showIndexColumn: propTypes.bool.def(true),
+ showIndexColumn: { type: Boolean, default: true },
indexColumnProps: {
type: Object as PropType,
default: null,
@@ -89,8 +96,9 @@ export const basicProps = {
type: Object as PropType,
default: null,
},
- ellipsis: propTypes.bool.def(true),
- canResize: propTypes.bool.def(true),
+ ellipsis: { type: Boolean, default: true },
+ isCanResizeParent: { type: Boolean, default: false },
+ canResize: { type: Boolean, default: true },
clearSelectOnPageChange: propTypes.bool,
resizeHeightOffset: propTypes.number.def(0),
rowSelection: {
@@ -123,7 +131,21 @@ export const basicProps = {
type: Function as PropType<(record: TableCustomRecord, index: number) => string>,
},
scroll: {
- type: Object as PropType<{ x: number | true; y: number }>,
+ type: Object as PropType<{ x: number | string | true; y: number | string }>,
default: null,
},
+ beforeEditSubmit: {
+ type: Function as PropType<
+ (data: {
+ record: Recordable;
+ index: number;
+ key: string | number;
+ value: any;
+ }) => Promise
+ >,
+ },
+ size: {
+ type: String as PropType,
+ default: DEFAULT_SIZE,
+ },
};
diff --git a/src/components/Table/src/types/componentType.ts b/src/components/Table/src/types/componentType.ts
index 97d2c6c..0d4e2e8 100644
--- a/src/components/Table/src/types/componentType.ts
+++ b/src/components/Table/src/types/componentType.ts
@@ -3,9 +3,13 @@ export type ComponentType =
| 'InputNumber'
| 'Select'
| 'ApiSelect'
+ | 'AutoComplete'
| 'ApiTreeSelect'
| 'Checkbox'
| 'Switch'
| 'DatePicker'
| 'TimePicker'
+ | 'RadioGroup'
+ | 'RadioButtonGroup'
+ | 'ApiRadioGroup'
| 'Upload';
diff --git a/src/components/Table/src/types/pagination.ts b/src/components/Table/src/types/pagination.ts
index fd2ecbe..c705f33 100644
--- a/src/components/Table/src/types/pagination.ts
+++ b/src/components/Table/src/types/pagination.ts
@@ -7,9 +7,18 @@ interface PaginationRenderProps {
originalElement: any;
}
+type PaginationPositon =
+ | 'topLeft'
+ | 'topCenter'
+ | 'topRight'
+ | 'bottomLeft'
+ | 'bottomCenter'
+ | 'bottomRight';
+
export declare class PaginationConfig extends Pagination {
- position?: 'top' | 'bottom' | 'both';
+ position?: PaginationPositon[];
}
+
export interface PaginationProps {
/**
* total number of data items
@@ -96,4 +105,11 @@ export interface PaginationProps {
* @type Function
*/
itemRender?: (props: PaginationRenderProps) => VNodeChild | JSX.Element;
+
+ /**
+ * specify the position of Pagination
+ * @default ['bottomRight']
+ * @type string[]
+ */
+ position?: PaginationPositon[];
}
diff --git a/src/components/Table/src/types/table.ts b/src/components/Table/src/types/table.ts
index bfab32f..a8da9d4 100644
--- a/src/components/Table/src/types/table.ts
+++ b/src/components/Table/src/types/table.ts
@@ -1,11 +1,8 @@
import type { VNodeChild } from 'vue';
import type { PaginationProps } from './pagination';
import type { FormProps } from '/@/components/Form';
-import type {
- ColumnProps,
- TableRowSelection as ITableRowSelection,
-} from 'ant-design-vue/lib/table/interface';
-
+import type { TableRowSelection as ITableRowSelection } from 'ant-design-vue/lib/table/interface';
+import type { ColumnProps } from 'ant-design-vue/lib/table';
import { ComponentType } from './componentType';
import { VueNode } from '/@/utils/propTypes';
@@ -24,7 +21,7 @@ export interface TableRowSelection extends ITableRowSelection {
/**
* Callback executed when select/deselect one row
- * @type FunctionT
+ * @type Function
*/
onSelect?: (record: T, selected: boolean, selectedRows: Object[], nativeEvent: Event) => any;
@@ -85,15 +82,20 @@ export type SizeType = 'default' | 'middle' | 'small' | 'large';
export interface TableActionType {
reload: (opt?: FetchParams) => Promise;
+ setSelectedRows: (rows: Recordable[]) => void;
getSelectRows: () => T[];
clearSelectedRowKeys: () => void;
expandAll: () => void;
+ expandRows: (keys: string[] | number[]) => void;
collapseAll: () => void;
+ scrollTo: (pos: string) => void; // pos: id | "top" | "bottom"
getSelectRowKeys: () => string[];
deleteSelectRowByKey: (key: string) => void;
setPagination: (info: Partial) => void;
setTableData: (values: T[]) => void;
updateTableDataRecord: (rowKey: string | number, record: Recordable) => Recordable | void;
+ deleteTableDataRecord: (rowKey: string | number | string[] | number[]) => void;
+ insertTableDataRecord: (record: Recordable | Recordable[], index?: number) => Recordable[] | void;
findTableDataRecord: (rowKey: string | number) => Recordable | void;
getColumns: (opt?: GetColumnsParams) => BasicColumn[];
setColumns: (columns: BasicColumn[] | string[]) => void;
@@ -112,7 +114,6 @@ export interface TableActionType {
setShowPagination: (show: boolean) => Promise;
getShowPagination: () => boolean;
setCacheColumnsByField?: (dataIndex: string | undefined, value: BasicColumn) => void;
- [key:string]: any
}
export interface FetchSetting {
@@ -127,9 +128,15 @@ export interface FetchSetting {
}
export interface TableSetting {
+ // 是否显示刷新按钮
redo?: boolean;
+ // 是否显示尺寸调整按钮
size?: boolean;
+ // 是否显示字段调整按钮
setting?: boolean;
+ // 缓存“字段调整”配置的key,用于页面上有多个表格需要区分的情况
+ cacheKey?: string;
+ // 是否显示全屏按钮
fullScreen?: boolean;
}
@@ -174,6 +181,8 @@ export interface BasicTableProps {
emptyDataIsShowTable?: boolean;
// 额外的请求参数
searchInfo?: Recordable;
+ // 默认的排序参数
+ defSort?: Recordable;
// 使用搜索表单
useSearchForm?: boolean;
// 表单配置
@@ -187,6 +196,8 @@ export interface BasicTableProps {
actionColumn?: BasicColumn;
// 文本超过宽度是否显示。。。
ellipsis?: boolean;
+ // 是否继承父级高度(父级高度-表单高度-padding高度)
+ isCanResizeParent?: boolean;
// 是否可以自适应高度
canResize?: boolean;
// 自适应高度偏移, 计算结果-偏移量
@@ -194,7 +205,7 @@ export interface BasicTableProps {
// 在分页改变的时候清空选项
clearSelectOnPageChange?: boolean;
- //
+ // 行唯一Key
rowKey?: string | ((record: Recordable) => string);
// 数据
dataSource?: Recordable[];
@@ -289,7 +300,7 @@ export interface BasicTableProps {
* Row's className
* @type Function
*/
- rowClassName?: (record: TableCustomRecord) => string;
+ rowClassName?: (record: TableCustomRecord, index: number) => string;
/**
* Row selection config
@@ -303,7 +314,8 @@ export interface BasicTableProps {
* you need to add style .ant-table td { white-space: nowrap; }.
* @type object
*/
- scroll?: { x?: number | true; y?: number };
+ scroll?: { x?: number | string | true; y?: number | string };
+
/**
* Whether to show table header
@@ -406,7 +418,7 @@ export type CellFormat =
| Map;
// @ts-ignore
-export interface BasicColumn extends ColumnProps {
+export interface BasicColumn extends ColumnProps {
children?: BasicColumn[];
filters?: {
text: string;
@@ -437,11 +449,11 @@ export interface BasicColumn extends ColumnProps {
editComponent?: ComponentType;
editComponentProps?:
| ((opt: {
- text: string | number | boolean | Recordable;
- record: Recordable;
- column: BasicColumn;
- index: number;
- }) => Recordable)
+ text: string | number | boolean | Recordable;
+ record: Recordable;
+ column: BasicColumn;
+ index: number;
+ }) => Recordable)
| Recordable;
editRule?: boolean | ((text: string, record: Recordable) => Promise);
editValueMap?: (value: any) => string;
diff --git a/src/components/Table/src/types/tableAction.ts b/src/components/Table/src/types/tableAction.ts
index 9d9ccb3..aeb7a8e 100644
--- a/src/components/Table/src/types/tableAction.ts
+++ b/src/components/Table/src/types/tableAction.ts
@@ -22,4 +22,17 @@ export interface PopConfirm {
confirm: Fn;
cancel?: Fn;
icon?: string;
+ placement?:
+ | 'top'
+ | 'left'
+ | 'right'
+ | 'bottom'
+ | 'topLeft'
+ | 'topRight'
+ | 'leftTop'
+ | 'leftBottom'
+ | 'rightTop'
+ | 'rightBottom'
+ | 'bottomLeft'
+ | 'bottomRight';
}
diff --git a/src/components/Time/src/Time.vue b/src/components/Time/src/Time.vue
index a74d2c6..20617b4 100644
--- a/src/components/Time/src/Time.vue
+++ b/src/components/Time/src/Time.vue
@@ -17,8 +17,7 @@
export default defineComponent({
name: 'Time',
props: {
- value: propTypes.oneOfType([propTypes.number, propTypes.instanceOf(Date), propTypes.string])
- .isRequired,
+ value: propTypes.oneOfType([propTypes.number, propTypes.instanceOf(Date), propTypes.string]).isRequired,
step: propTypes.number.def(60),
mode: propTypes.oneOf(['date', 'datetime', 'relative']).def('relative'),
},
@@ -30,11 +29,11 @@
useIntervalFn(setTime, props.step * ONE_SECONDS);
watch(
- () => props.value,
- () => {
- setTime();
- },
- { immediate: true }
+ () => props.value,
+ () => {
+ setTime();
+ },
+ { immediate: true },
);
function getTime() {
diff --git a/src/components/Tinymce/src/Editor.vue b/src/components/Tinymce/src/Editor.vue
index 194fe44..f8c5e01 100644
--- a/src/components/Tinymce/src/Editor.vue
+++ b/src/components/Tinymce/src/Editor.vue
@@ -8,12 +8,18 @@
@uploading="handleImageUploading"
@done="handleDone"
/>
-
+
+
-
diff --git a/src/components/Tree/src/TreeHeader.vue b/src/components/Tree/src/TreeHeader.vue
deleted file mode 100644
index 9c38a19..0000000
--- a/src/components/Tree/src/TreeHeader.vue
+++ /dev/null
@@ -1,168 +0,0 @@
-
-
-
-
-
diff --git a/src/components/Tree/src/TreeIcon.ts b/src/components/Tree/src/TreeIcon.ts
index 69e7cd0..900d6bf 100644
--- a/src/components/Tree/src/TreeIcon.ts
+++ b/src/components/Tree/src/TreeIcon.ts
@@ -1,14 +1,10 @@
import type { VNode, FunctionalComponent } from 'vue';
import { h } from 'vue';
-import { isString } from '/@/utils/is';
+import { isString } from '@vue/shared';
import { Icon } from '/@/components/Icon';
-export interface ComponentProps {
- icon: VNode | string;
-}
-
-export const TreeIcon: FunctionalComponent = ({ icon }: ComponentProps) => {
+export const TreeIcon: FunctionalComponent = ({ icon }: { icon: VNode | string }) => {
if (!icon) return null;
if (isString(icon)) {
return h(Icon, { icon, class: 'mr-1' });
diff --git a/src/components/Tree/src/components/TreeHeader.vue b/src/components/Tree/src/components/TreeHeader.vue
new file mode 100644
index 0000000..97ae5c7
--- /dev/null
+++ b/src/components/Tree/src/components/TreeHeader.vue
@@ -0,0 +1,170 @@
+
+
+
+
+ {{ title }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/Tree/src/useTree.ts b/src/components/Tree/src/hooks/useTree.ts
similarity index 83%
rename from src/components/Tree/src/useTree.ts
rename to src/components/Tree/src/hooks/useTree.ts
index 175e640..d0e176c 100644
--- a/src/components/Tree/src/useTree.ts
+++ b/src/components/Tree/src/hooks/useTree.ts
@@ -1,4 +1,4 @@
-import type { InsertNodeParams, Keys, ReplaceFields } from './typing';
+import type { InsertNodeParams, KeyType, FieldNames, TreeItem } from '../types/tree';
import type { Ref, ComputedRef } from 'vue';
import type { TreeDataItem } from 'ant-design-vue/es/tree/Tree';
@@ -6,14 +6,11 @@ import { cloneDeep } from 'lodash-es';
import { unref } from 'vue';
import { forEach } from '/@/utils/helper/treeHelper';
-export function useTree(
- treeDataRef: Ref,
- getReplaceFields: ComputedRef
-) {
+export function useTree(treeDataRef: Ref, getFieldNames: ComputedRef) {
function getAllKeys(list?: TreeDataItem[]) {
const keys: string[] = [];
const treeData = list || unref(treeDataRef);
- const { key: keyField, children: childrenField } = unref(getReplaceFields);
+ const { key: keyField, children: childrenField } = unref(getFieldNames);
if (!childrenField || !keyField) return keys;
for (let index = 0; index < treeData.length; index++) {
@@ -24,13 +21,14 @@ export function useTree(
keys.push(...(getAllKeys(children) as string[]));
}
}
- return keys as Keys;
+ return keys as KeyType[];
}
+
// get keys that can be checked and selected
function getEnabledKeys(list?: TreeDataItem[]) {
const keys: string[] = [];
const treeData = list || unref(treeDataRef);
- const { key: keyField, children: childrenField } = unref(getReplaceFields);
+ const { key: keyField, children: childrenField } = unref(getFieldNames);
if (!childrenField || !keyField) return keys;
for (let index = 0; index < treeData.length; index++) {
@@ -41,13 +39,13 @@ export function useTree(
keys.push(...(getEnabledKeys(children) as string[]));
}
}
- return keys as Keys;
+ return keys as KeyType[];
}
- function getChildrenKeys(nodeKey: string | number, list?: TreeDataItem[]): Keys {
- const keys: Keys = [];
+ function getChildrenKeys(nodeKey: string | number, list?: TreeDataItem[]) {
+ const keys: KeyType[] = [];
const treeData = list || unref(treeDataRef);
- const { key: keyField, children: childrenField } = unref(getReplaceFields);
+ const { key: keyField, children: childrenField } = unref(getFieldNames);
if (!childrenField || !keyField) return keys;
for (let index = 0; index < treeData.length; index++) {
const node = treeData[index];
@@ -63,14 +61,14 @@ export function useTree(
}
}
}
- return keys as Keys;
+ return keys as KeyType[];
}
// Update node
function updateNodeByKey(key: string, node: TreeDataItem, list?: TreeDataItem[]) {
if (!key) return;
const treeData = list || unref(treeDataRef);
- const { key: keyField, children: childrenField } = unref(getReplaceFields);
+ const { key: keyField, children: childrenField } = unref(getFieldNames);
if (!childrenField || !keyField) return;
@@ -97,7 +95,7 @@ export function useTree(
for (let index = 0; index < data.length; index++) {
const item = data[index];
- const { key: keyField, children: childrenField } = unref(getReplaceFields);
+ const { key: keyField, children: childrenField } = unref(getFieldNames);
const key = keyField ? item[keyField] : '';
const children = childrenField ? item[childrenField] : [];
res.push(key);
@@ -119,7 +117,7 @@ export function useTree(
treeDataRef.value = treeData;
return;
}
- const { key: keyField, children: childrenField } = unref(getReplaceFields);
+ const { key: keyField, children: childrenField } = unref(getFieldNames);
if (!childrenField || !keyField) return;
forEach(treeData, (treeItem) => {
@@ -144,7 +142,7 @@ export function useTree(
treeData[push](list[i]);
}
} else {
- const { key: keyField, children: childrenField } = unref(getReplaceFields);
+ const { key: keyField, children: childrenField } = unref(getFieldNames);
if (!childrenField || !keyField) return;
forEach(treeData, (treeItem) => {
@@ -163,7 +161,7 @@ export function useTree(
function deleteNodeByKey(key: string, list?: TreeDataItem[]) {
if (!key) return;
const treeData = list || unref(treeDataRef);
- const { key: keyField, children: childrenField } = unref(getReplaceFields);
+ const { key: keyField, children: childrenField } = unref(getFieldNames);
if (!childrenField || !keyField) return;
for (let index = 0; index < treeData.length; index++) {
@@ -178,6 +176,25 @@ export function useTree(
}
}
}
+
+ // Get selected node
+ function getSelectedNode(key: KeyType, treeList?: TreeItem[], selectedNode?: TreeItem | null) {
+ if (!key && key !== 0) return null;
+ const treeData = treeList || unref(treeDataRef);
+ const { key: keyField, children: childrenField } = unref(getFieldNames);
+ if (!keyField) return;
+ treeData.forEach((item) => {
+ if (selectedNode?.key || selectedNode?.key === 0) return selectedNode;
+ if (item[keyField] === key) {
+ selectedNode = item;
+ return;
+ }
+ if (item[childrenField!] && item[childrenField!].length) {
+ selectedNode = getSelectedNode(key, item[childrenField!], selectedNode);
+ }
+ });
+ return selectedNode || null;
+ }
return {
deleteNodeByKey,
insertNodeByKey,
@@ -187,5 +204,6 @@ export function useTree(
getAllKeys,
getChildrenKeys,
getEnabledKeys,
+ getSelectedNode,
};
}
diff --git a/src/components/Tree/src/props.ts b/src/components/Tree/src/props.ts
deleted file mode 100644
index 7fb3fce..0000000
--- a/src/components/Tree/src/props.ts
+++ /dev/null
@@ -1,83 +0,0 @@
-import type { PropType } from 'vue';
-import type { ReplaceFields, ActionItem, Keys, CheckKeys, ContextMenuOptions } from './typing';
-import type { ContextMenuItem } from '/@/hooks/web/useContextMenu';
-import type { TreeDataItem } from 'ant-design-vue/es/tree/Tree';
-import { propTypes } from '/@/utils/propTypes';
-
-export const basicProps = {
- value: {
- type: [Object, Array] as PropType,
- },
- renderIcon: {
- type: Function as PropType<(params: Recordable) => string>,
- },
-
- helpMessage: {
- type: [String, Array] as PropType,
- default: '',
- },
-
- title: propTypes.string,
- toolbar: propTypes.bool,
- search: propTypes.bool,
- searchValue: propTypes.string,
- checkStrictly: propTypes.bool,
- clickRowToExpand: propTypes.bool.def(true),
- checkable: propTypes.bool.def(false),
- defaultExpandLevel: {
- type: [String, Number] as PropType,
- default: '',
- },
- defaultExpandAll: propTypes.bool.def(false),
-
- replaceFields: {
- type: Object as PropType,
- },
-
- treeData: {
- type: Array as PropType,
- },
-
- actionList: {
- type: Array as PropType,
- default: () => [],
- },
-
- expandedKeys: {
- type: Array as PropType,
- default: () => [],
- },
-
- selectedKeys: {
- type: Array as PropType,
- default: () => [],
- },
-
- checkedKeys: {
- type: Array as PropType,
- default: () => [],
- },
-
- beforeRightClick: {
- type: Function as PropType<(...arg: any) => ContextMenuItem[] | ContextMenuOptions>,
- default: null,
- },
-
- rightMenuList: {
- type: Array as PropType,
- },
-};
-
-export const treeNodeProps = {
- actionList: {
- type: Array as PropType,
- default: () => [],
- },
- replaceFields: {
- type: Object as PropType,
- },
- treeData: {
- type: Array as PropType,
- default: () => [],
- },
-};
diff --git a/src/components/Tree/src/types/tree.ts b/src/components/Tree/src/types/tree.ts
new file mode 100644
index 0000000..815cce9
--- /dev/null
+++ b/src/components/Tree/src/types/tree.ts
@@ -0,0 +1,195 @@
+import type { ExtractPropTypes } from 'vue';
+import type { TreeDataItem } from 'ant-design-vue/es/tree/Tree';
+
+import { buildProps } from '/@/utils/props';
+
+export enum ToolbarEnum {
+ SELECT_ALL,
+ UN_SELECT_ALL,
+ EXPAND_ALL,
+ UN_EXPAND_ALL,
+ CHECK_STRICTLY,
+ CHECK_UN_STRICTLY,
+}
+
+export const treeEmits = [
+ 'update:expandedKeys',
+ 'update:selectedKeys',
+ 'update:value',
+ 'change',
+ 'check',
+ 'update:searchValue',
+];
+
+export interface TreeState {
+ expandedKeys: KeyType[];
+ selectedKeys: KeyType[];
+ checkedKeys: CheckKeys;
+ checkStrictly: boolean;
+}
+
+export interface FieldNames {
+ children?: string;
+ title?: string;
+ key?: string;
+}
+
+export type KeyType = string | number;
+
+export type CheckKeys =
+ | KeyType[]
+ | { checked: string[] | number[]; halfChecked: string[] | number[] };
+
+export const treeProps = buildProps({
+ value: {
+ type: [Object, Array] as PropType,
+ },
+
+ renderIcon: {
+ type: Function as PropType<(params: Recordable) => string>,
+ },
+
+ helpMessage: {
+ type: [String, Array] as PropType,
+ default: '',
+ },
+
+ title: {
+ type: String,
+ default: '',
+ },
+ toolbar: Boolean,
+ search: Boolean,
+ searchValue: {
+ type: String,
+ default: '',
+ },
+ checkStrictly: Boolean,
+ clickRowToExpand: {
+ type: Boolean,
+ default: false,
+ },
+ checkable: Boolean,
+ defaultExpandLevel: {
+ type: [String, Number] as PropType,
+ default: '',
+ },
+ defaultExpandAll: Boolean,
+
+ fieldNames: {
+ type: Object as PropType,
+ },
+
+ treeData: {
+ type: Array as PropType,
+ },
+
+ actionList: {
+ type: Array as PropType,
+ default: () => [],
+ },
+
+ expandedKeys: {
+ type: Array as PropType,
+ default: () => [],
+ },
+
+ selectedKeys: {
+ type: Array as PropType,
+ default: () => [],
+ },
+
+ checkedKeys: {
+ type: [Array, Object] as PropType,
+ default: () => [],
+ },
+
+ beforeRightClick: {
+ type: Function as PropType<(...arg: any) => ContextMenuItem[] | ContextMenuOptions>,
+ default: undefined,
+ },
+
+ rightMenuList: {
+ type: Array as PropType,
+ },
+ // 自定义数据过滤判断方法(注: 不是整个过滤方法,而是内置过滤的判断方法,用于增强原本仅能通过title进行过滤的方式)
+ filterFn: {
+ type: Function as PropType<
+ (searchValue: any, node: TreeItem, fieldNames: FieldNames) => boolean
+ >,
+ default: undefined,
+ },
+ // 高亮搜索值,仅高亮具体匹配值(通过title)值为true时使用默认色值,值为#xxx时使用此值替代且高亮开启
+ highlight: {
+ type: [Boolean, String] as PropType,
+ default: false,
+ },
+ // 搜索完成时自动展开结果
+ expandOnSearch: Boolean,
+ // 搜索完成自动选中所有结果,当且仅当 checkable===true 时生效
+ checkOnSearch: Boolean,
+ // 搜索完成自动select所有结果
+ selectedOnSearch: Boolean,
+ loading: {
+ type: Boolean,
+ default: false,
+ },
+ treeWrapperClassName: String,
+});
+
+export type TreeProps = ExtractPropTypes;
+
+export interface ContextMenuItem {
+ label: string;
+ icon?: string;
+ hidden?: boolean;
+ disabled?: boolean;
+ handler?: Fn;
+ divider?: boolean;
+ children?: ContextMenuItem[];
+}
+
+export interface ContextMenuOptions {
+ icon?: string;
+ styles?: any;
+ items?: ContextMenuItem[];
+}
+
+export interface TreeItem extends TreeDataItem {
+ icon?: any;
+}
+
+export interface TreeActionItem {
+ render: (record: Recordable) => any;
+ show?: boolean | ((record: Recordable) => boolean);
+}
+
+export interface InsertNodeParams {
+ parentKey: string | null;
+ node: TreeDataItem;
+ list?: TreeDataItem[];
+ push?: 'push' | 'unshift';
+}
+
+export interface TreeActionType {
+ checkAll: (checkAll: boolean) => void;
+ expandAll: (expandAll: boolean) => void;
+ setExpandedKeys: (keys: KeyType[]) => void;
+ getExpandedKeys: () => KeyType[];
+ setSelectedKeys: (keys: KeyType[]) => void;
+ getSelectedKeys: () => KeyType[];
+ setCheckedKeys: (keys: CheckKeys) => void;
+ getCheckedKeys: () => CheckKeys;
+ filterByLevel: (level: number) => void;
+ insertNodeByKey: (opt: InsertNodeParams) => void;
+ insertNodesByKey: (opt: InsertNodeParams) => void;
+ deleteNodeByKey: (key: string) => void;
+ updateNodeByKey: (key: string, node: Omit) => void;
+ setSearchValue: (value: string) => void;
+ getSearchValue: () => string;
+ getSelectedNode: (
+ key: KeyType,
+ treeList?: TreeItem[],
+ selectNode?: TreeItem | null,
+ ) => TreeItem | null | undefined;
+}
diff --git a/src/components/Tree/src/typing.ts b/src/components/Tree/src/typing.ts
deleted file mode 100644
index df8d6d9..0000000
--- a/src/components/Tree/src/typing.ts
+++ /dev/null
@@ -1,54 +0,0 @@
-import type { TreeDataItem, CheckEvent as CheckEventOrigin } from 'ant-design-vue/es/tree/Tree';
-import { ContextMenuItem } from '/@/hooks/web/useContextMenu';
-export interface ActionItem {
- render: (record: Recordable) => any;
- show?: boolean | ((record: Recordable) => boolean);
-}
-
-export interface TreeItem extends TreeDataItem {
- icon?: any;
-}
-
-export interface ReplaceFields {
- children?: string;
- title?: string;
- key?: string;
-}
-
-export type Keys = (string | number)[];
-export type CheckKeys =
- | (string | number)[]
- | { checked: (string | number)[]; halfChecked: (string | number)[] };
-
-export interface TreeActionType {
- checkAll: (checkAll: boolean) => void;
- expandAll: (expandAll: boolean) => void;
- setExpandedKeys: (keys: Keys) => void;
- getExpandedKeys: () => Keys;
- setSelectedKeys: (keys: Keys) => void;
- getSelectedKeys: () => Keys;
- setCheckedKeys: (keys: CheckKeys) => void;
- getCheckedKeys: () => CheckKeys;
- filterByLevel: (level: number) => void;
- insertNodeByKey: (opt: InsertNodeParams) => void;
- insertNodesByKey: (opt: InsertNodeParams) => void;
- deleteNodeByKey: (key: string) => void;
- updateNodeByKey: (key: string, node: Omit) => void;
- setSearchValue: (value: string) => void;
- getSearchValue: () => string;
-}
-
-export interface InsertNodeParams {
- parentKey: string | null;
- node: TreeDataItem;
- list?: TreeDataItem[];
- push?: 'push' | 'unshift';
-}
-
-export interface ContextMenuOptions {
- icon?: string;
- styles?: any;
- items?: ContextMenuItem[];
-}
-
-export type CheckEvent = CheckEventOrigin;
diff --git a/src/components/Tree/style/index.less b/src/components/Tree/style/index.less
new file mode 100644
index 0000000..472d4ca
--- /dev/null
+++ b/src/components/Tree/style/index.less
@@ -0,0 +1,52 @@
+@tree-prefix-cls: ~'@{namespace}-tree';
+
+.@{tree-prefix-cls} {
+ background-color: @component-background;
+
+ .ant-tree-node-content-wrapper {
+ position: relative;
+
+ .ant-tree-title {
+ position: absolute;
+ left: 0;
+ width: 100%;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ }
+ }
+
+ &__title {
+ position: relative;
+ display: flex;
+ align-items: center;
+ width: 100%;
+ padding-right: 10px;
+
+ &:hover {
+ .@{tree-prefix-cls}__action {
+ visibility: visible;
+ }
+ }
+ }
+
+ &__content {
+ overflow: hidden;
+ }
+
+ &__actions {
+ position: absolute;
+ //top: 2px;
+ right: 3px;
+ display: flex;
+ }
+
+ &__action {
+ margin-left: 4px;
+ visibility: hidden;
+ }
+
+ &-header {
+ border-bottom: 1px solid @border-color-base;
+ }
+}
diff --git a/src/components/Tree/style/index.ts b/src/components/Tree/style/index.ts
new file mode 100644
index 0000000..d74e52e
--- /dev/null
+++ b/src/components/Tree/style/index.ts
@@ -0,0 +1 @@
+import './index.less';
diff --git a/src/components/Upload/src/props.ts b/src/components/Upload/src/props.ts
index 568366c..6d59acd 100644
--- a/src/components/Upload/src/props.ts
+++ b/src/components/Upload/src/props.ts
@@ -27,7 +27,7 @@ export const basicProps = {
},
uploadParams: {
type: Object as PropType,
- default: {},
+ default: () => ({}),
},
api: {
type: Function as PropType,
@@ -73,7 +73,7 @@ export const previewProps = {
export const fileListProps = {
columns: {
- type: [Array] as PropType,
+ type: Array as PropType,
default: null,
},
actionColumn: {
diff --git a/src/components/index.ts b/src/components/index.ts
index d7f8350..fea851f 100644
--- a/src/components/index.ts
+++ b/src/components/index.ts
@@ -6,19 +6,133 @@
*/
import type { App } from 'vue';
+import { Icon } from './Icon';
import { Button } from './Button';
import {
Button as AntButton,
+ Select,
+ Alert,
+ Checkbox,
+ DatePicker,
+ TimePicker,
+ Calendar,
+ Radio,
+ Switch,
+ Card,
+ List,
+ Tabs,
+ Descriptions,
+ Tree,
+ Table,
+ Divider,
+ Modal,
+ Drawer,
+ TreeSelect,
+ Dropdown,
+ Tag,
+ Tooltip,
+ Badge,
+ Popover,
+ Upload,
+ Transfer,
+ Steps,
+ PageHeader,
+ Result,
+ Empty,
+ Avatar,
+ Menu,
+ Breadcrumb,
+ Form,
Input,
- Layout
+ Row,
+ Col,
+ Spin,
+ Space,
+ Layout,
+ Collapse,
+ Slider,
+ InputNumber,
+ Carousel,
+ Popconfirm,
+ Skeleton,
+ Cascader,
+ Rate,
} from 'ant-design-vue';
-const compList = [AntButton.Group];
+// 注册dayjs
+import dayjs from 'dayjs';
+import relativeTime from 'dayjs/plugin/relativeTime';
+import customParseFormat from 'dayjs/plugin/customParseFormat';
+
+// 注册vxeTable
+import VXETable from 'vxe-table';
+import VXETablePluginAntd from 'vxe-table-plugin-antd';
+import VXETablePluginExportXLSX from 'vxe-table-plugin-export-xlsx';
+
+const compList = [AntButton.Group, Icon];
export function registerGlobComp(app: App) {
compList.forEach((comp) => {
app.component(comp.name || comp.displayName, comp);
});
- app.use(Input).use(Button).use(Layout);
+ app.use(Select)
+ .use(Alert)
+ .use(Button)
+ .use(Breadcrumb)
+ .use(Checkbox)
+ .use(DatePicker)
+ .use(TimePicker)
+ .use(Calendar)
+ .use(Radio)
+ .use(Switch)
+ .use(Card)
+ .use(List)
+ .use(Descriptions)
+ .use(Tree)
+ .use(TreeSelect)
+ .use(Table)
+ .use(Divider)
+ .use(Modal)
+ .use(Drawer)
+ .use(Dropdown)
+ .use(Tag)
+ .use(Tooltip)
+ .use(Badge)
+ .use(Popover)
+ .use(Upload)
+ .use(Transfer)
+ .use(Steps)
+ .use(PageHeader)
+ .use(Result)
+ .use(Empty)
+ .use(Avatar)
+ .use(Menu)
+ .use(Tabs)
+ .use(Form)
+ .use(Input)
+ .use(Row)
+ .use(Col)
+ .use(Spin)
+ .use(Space)
+ .use(Layout)
+ .use(Collapse)
+ .use(Slider)
+ .use(InputNumber)
+ .use(Carousel)
+ .use(Popconfirm)
+ .use(Skeleton)
+ .use(Cascader)
+ .use(Rate)
+ .use(VXETable);
+
+ VXETable.use(VXETablePluginAntd)
+ .use(VXETablePluginExportXLSX);
+
+ dayjs.locale('zh-cn');
+ dayjs.extend(relativeTime);
+ dayjs.extend(customParseFormat);
+ app.config.globalProperties.$dayjs = dayjs;
+ app.provide('$dayjs', dayjs);
+
}
diff --git a/src/enums/appEnum.ts b/src/enums/appEnum.ts
index 075b514..95c4672 100644
--- a/src/enums/appEnum.ts
+++ b/src/enums/appEnum.ts
@@ -8,6 +8,15 @@
export const SIDE_BAR_MINI_WIDTH = 48;
export const SIDE_BAR_SHOW_TIT_MINI_WIDTH = 80;
+export enum TabsThemeEnum {
+ // 圆滑
+ SMOOTH = 'smooth',
+ // 卡片
+ CARD = 'card',
+ // 极简
+ SIMPLE = 'simple',
+}
+
export enum ContentEnum {
// 自动宽度
FULL = 'full',
@@ -27,11 +36,6 @@ export enum SettingButtonPositionEnum {
FIXED = 'fixed',
}
-export enum SessionTimeoutProcessingEnum {
- ROUTE_JUMP,
- PAGE_COVERAGE,
-}
-
/** 路线切换动画 */
export enum RouterTransitionEnum {
ZOOM_FADE = 'zoom-fade',
diff --git a/src/enums/exceptionEnum.ts b/src/enums/exceptionEnum.ts
index 96ed1c9..12ac65f 100644
--- a/src/enums/exceptionEnum.ts
+++ b/src/enums/exceptionEnum.ts
@@ -21,11 +21,3 @@ export enum ExceptionEnum {
// 无数据页面
PAGE_NOT_DATA = 10100,
}
-
-export enum ErrorTypeEnum {
- VUE = 'vue',
- SCRIPT = 'script',
- RESOURCE = 'resource',
- AJAX = 'ajax',
- PROMISE = 'promise',
-}
diff --git a/src/hooks/component/useFormItem.ts b/src/hooks/component/useFormItem.ts
index bdd0648..96707ef 100644
--- a/src/hooks/component/useFormItem.ts
+++ b/src/hooks/component/useFormItem.ts
@@ -5,7 +5,7 @@
* @create: 2022/4/10
*/
-import type { UnwrapRef, Ref } from 'vue';
+import type { UnwrapRef, Ref, WritableComputedRef, DeepReadonly } from 'vue';
import {
reactive,
readonly,
@@ -19,6 +19,13 @@ import {
import { isEqual } from 'lodash-es';
+export function useRuleFormItem>(
+ props: T,
+ key?: K,
+ changeEvent?,
+ emitData?: Ref,
+): [WritableComputedRef, (val: V) => void, DeepReadonly];
+
export function useRuleFormItem(
props: T,
key: keyof T = 'value',
diff --git a/src/hooks/core/useLockFn.ts b/src/hooks/core/useLockFn.ts
index d2f50d9..25d05c2 100644
--- a/src/hooks/core/useLockFn.ts
+++ b/src/hooks/core/useLockFn.ts
@@ -7,9 +7,7 @@
import { ref, unref } from 'vue';
-export function useLockFn(
- fn: (...args: P) => Promise
-) {
+export function useLockFn(fn: (...args: P) => Promise) {
const lockRef = ref(false);
return async function (...args: P) {
if (unref(lockRef)) return;
diff --git a/src/hooks/core/useTimeout.ts b/src/hooks/core/useTimeout.ts
index 02f9d3a..f7096f3 100644
--- a/src/hooks/core/useTimeout.ts
+++ b/src/hooks/core/useTimeout.ts
@@ -23,7 +23,7 @@ export function useTimeoutFn(handle: Fn, wait: number, native = false) {
(maturity) => {
maturity && handle();
},
- { immediate: false }
+ { immediate: false },
);
}
return { readyRef, stop, start };
diff --git a/src/hooks/setting/useHeaderSetting.ts b/src/hooks/setting/useHeaderSetting.ts
index 8d5f26a..0047975 100644
--- a/src/hooks/setting/useHeaderSetting.ts
+++ b/src/hooks/setting/useHeaderSetting.ts
@@ -80,6 +80,10 @@ export function useHeaderSetting() {
return unref(getShowBread) || unref(getShowHeaderTrigger);
});
+ const getShowBreadTitle = computed(() => {
+ return unref(getMenuMode) !== MenuModeEnum.HORIZONTAL && !unref(getShowBreadCrumb) && !unref(getSplit);
+ });
+
// 设置标头配置
function setHeaderSetting(headerSetting: Partial) {
appStore.setProjectConfig({ headerSetting });
@@ -101,5 +105,6 @@ export function useHeaderSetting() {
getShowInsetHeaderRef,
getUnFixedAndFull,
getHeaderBgColor,
+ getShowBreadTitle,
};
}
diff --git a/src/hooks/setting/useMultipleTabSetting.ts b/src/hooks/setting/useMultipleTabSetting.ts
index 99bad48..3edd6c5 100644
--- a/src/hooks/setting/useMultipleTabSetting.ts
+++ b/src/hooks/setting/useMultipleTabSetting.ts
@@ -20,6 +20,8 @@ export function useMultipleTabSetting() {
const getShowFold = computed(() => appStore.getMultiTabsSetting.showFold);
+ const getTabsTheme = computed(() => appStore.getMultiTabsSetting.theme);
+
function setMultipleTabSetting(multiTabsSetting: Partial) {
appStore.setProjectConfig({ multiTabsSetting });
}
@@ -29,5 +31,6 @@ export function useMultipleTabSetting() {
getShowQuick,
getShowRedo,
getShowFold,
+ getTabsTheme,
};
}
diff --git a/src/hooks/web/useContentHeight.ts b/src/hooks/web/useContentHeight.ts
index c181ab8..2fa0da5 100644
--- a/src/hooks/web/useContentHeight.ts
+++ b/src/hooks/web/useContentHeight.ts
@@ -5,11 +5,12 @@
* @create: 2022/4/10
*/
-import { ComputedRef, nextTick, Ref, ref, unref, watch } from 'vue';
+import { ComputedRef, isRef, nextTick, Ref, ref, unref, watch } from 'vue';
import { onMountedOrActivated } from '/@/hooks/core/onMountedOrActivated';
import { useWindowSizeFn } from '/@/hooks/event/useWindowSizeFn';
import { useLayoutHeight } from '/@/layouts/default/content/useContentViewHeight';
import { getViewportOffset } from '/@/utils/domUtils';
+import { isNumber, isString } from '/@/utils/is';
export interface CompensationHeight {
// 使用 layout Footer 高度作为判断补偿高度的条件
@@ -18,6 +19,8 @@ export interface CompensationHeight {
elements?: Ref[];
}
+type Upward = number | string | null | undefined;
+
/**
* 动态计算内容高度,根据锚点dom最下坐标到屏幕最下坐标,根据传入dom的高度、padding、margin等值进行动态计算
* 最终获取合适的内容高度
@@ -27,6 +30,7 @@ export interface CompensationHeight {
* @param subtractHeightRefs 待减去高度的组件列表 Ref
* @param substractSpaceRefs 待减去空闲空间(margins/paddings)的组件列表 Ref
* @param offsetHeightRef 计算偏移的响应式高度,计算高度时将直接减去此值
+ * @param upwardSpace 向上递归减去空闲空间的 层级 或 直到指定class为止 数值为2代表向上递归两次|数值为ant-layout表示向上递归直到碰见.ant-layout为止
* @returns 响应式高度
*/
export function useContentHeight(
@@ -34,7 +38,8 @@ export function useContentHeight(
anchorRef: Ref,
subtractHeightRefs: Ref[],
substractSpaceRefs: Ref[],
- offsetHeightRef: Ref = ref(0)
+ upwardSpace: Ref | ComputedRef | Upward = 0,
+ offsetHeightRef: Ref = ref(0),
) {
const contentHeight: Ref> = ref(null);
const { footerHeightRef: layoutFooterHeightRef } = useLayoutHeight();
@@ -52,23 +57,33 @@ export function useContentHeight(
});
}
- function calcSubtractSpace(element: HTMLDivElement | null | undefined): number {
+ function calcSubtractSpace(
+ element: Element | null | undefined,
+ direction: 'all' | 'top' | 'bottom' = 'all',
+ ): number {
+ function numberPx(px: string) {
+ return Number(px.replace(/[^\d]/g, ''));
+ }
let subtractHeight = 0;
const ZERO_PX = '0px';
- let marginBottom = ZERO_PX;
- let marginTop = ZERO_PX;
if (element) {
const cssStyle = getComputedStyle(element);
- marginBottom = cssStyle?.marginBottom ?? ZERO_PX;
- marginTop = cssStyle?.marginTop ?? ZERO_PX;
- }
- if (marginBottom) {
- const contentMarginBottom = Number(marginBottom.replace(/[^\d]/g, ''));
- subtractHeight += contentMarginBottom;
- }
- if (marginTop) {
- const contentMarginTop = Number(marginTop.replace(/[^\d]/g, ''));
- subtractHeight += contentMarginTop;
+ const marginTop = numberPx(cssStyle?.marginTop ?? ZERO_PX);
+ const marginBottom = numberPx(cssStyle?.marginBottom ?? ZERO_PX);
+ const paddingTop = numberPx(cssStyle?.paddingTop ?? ZERO_PX);
+ const paddingBottom = numberPx(cssStyle?.paddingBottom ?? ZERO_PX);
+ if (direction === 'all') {
+ subtractHeight += marginTop;
+ subtractHeight += marginBottom;
+ subtractHeight += paddingTop;
+ subtractHeight += paddingBottom;
+ } else if (direction === 'top') {
+ subtractHeight += marginTop;
+ subtractHeight += paddingTop;
+ } else {
+ subtractHeight += marginBottom;
+ subtractHeight += paddingBottom;
+ }
}
return subtractHeight;
}
@@ -87,30 +102,61 @@ export function useContentHeight(
// 添加延迟以获得正确的高度
await nextTick();
- const wrapperEl = getEl(unref(anchorRef));
- if (!wrapperEl) {
+ const anchorEl = getEl(unref(anchorRef));
+ if (!anchorEl) {
return;
}
- const { bottomIncludeBody } = getViewportOffset(wrapperEl);
+ const { bottomIncludeBody } = getViewportOffset(anchorEl);
- // 减去元素高度
+ // substract elements height
let substractHeight = 0;
subtractHeightRefs.forEach((item) => {
substractHeight += getEl(unref(item))?.offsetHeight ?? 0;
});
- // 减去边距填充
- let substractSpaceHeight = 0;
+ // subtract margins / paddings
+ let substractSpaceHeight = calcSubtractSpace(anchorEl) ?? 0;
substractSpaceRefs.forEach((item) => {
substractSpaceHeight += calcSubtractSpace(getEl(unref(item)));
});
+ // 减去元素高度
+ let upwardSpaceHeight = 0;
+ function upward(element: Element | null, upwardLvlOrClass: number | string | null | undefined) {
+ if (element && upwardLvlOrClass) {
+ const parent = element.parentElement;
+ if (parent) {
+ if (isString(upwardLvlOrClass)) {
+ if (!parent.classList.contains(upwardLvlOrClass)) {
+ upwardSpaceHeight += calcSubtractSpace(parent, 'bottom');
+ upward(parent, upwardLvlOrClass);
+ } else {
+ upwardSpaceHeight += calcSubtractSpace(parent, 'bottom');
+ }
+ } else if (isNumber(upwardLvlOrClass)) {
+ if (upwardLvlOrClass > 0) {
+ upwardSpaceHeight += calcSubtractSpace(parent, 'bottom');
+ upward(parent, --upwardLvlOrClass);
+ }
+ }
+ }
+ }
+ }
+
+ if (isRef(upwardSpace)) {
+ upward(anchorEl, unref(upwardSpace));
+ } else {
+ upward(anchorEl, upwardSpace);
+ }
+
let height =
bottomIncludeBody -
unref(layoutFooterHeightRef) -
unref(offsetHeightRef) -
substractHeight -
- substractSpaceHeight;
+ substractSpaceHeight -
+ upwardSpaceHeight;
+
// 补偿高度
const calcCompensationHeight = () => {
@@ -137,7 +183,7 @@ export function useContentHeight(
calcContentHeight();
},
50,
- { immediate: true }
+ { immediate: true },
);
watch(
() => [layoutFooterHeightRef.value],
@@ -147,7 +193,7 @@ export function useContentHeight(
{
flush: 'post',
immediate: true,
- }
+ },
);
return { redoHeight, setCompensation, contentHeight };
diff --git a/src/hooks/web/useECharts.ts b/src/hooks/web/useECharts.ts
index e9a37ff..d374852 100644
--- a/src/hooks/web/useECharts.ts
+++ b/src/hooks/web/useECharts.ts
@@ -15,12 +15,18 @@ import { useEventListener } from '/@/hooks/event/useEventListener';
import { useBreakpoint } from '/@/hooks/event/useBreakpoint';
import echarts from '/@/utils/lib/echarts';
import { useRootSetting } from '/@/hooks/setting/useRootSetting';
+import { useMenuSetting } from '/@/hooks/setting/useMenuSetting';
export function useECharts(
elRef: Ref,
- theme: 'light' | 'dark' | 'default' = 'light'
+ theme: 'light' | 'dark' | 'default' = 'default',
) {
- const { getDarkMode } = useRootSetting();
+ const { getDarkMode: getSysDarkMode } = useRootSetting();
+ const { getCollapsed } = useMenuSetting();
+
+ const getDarkMode = computed(() => {
+ return theme === 'default' ? getSysDarkMode.value : theme;
+ });
let chartInstance: echarts.ECharts | null = null;
let resizeFn: Fn = resize;
const cacheOptions = ref({}) as Ref;
@@ -82,7 +88,12 @@ export function useECharts(
}
function resize() {
- chartInstance?.resize();
+ chartInstance?.resize({
+ animation: {
+ duration: 300,
+ easing: 'quadraticIn',
+ },
+ });
}
watch(
@@ -93,9 +104,15 @@ export function useECharts(
initCharts(theme as 'default');
setOptions(cacheOptions.value);
}
- }
+ },
);
+ watch(getCollapsed, (_) => {
+ useTimeoutFn(() => {
+ resizeFn();
+ }, 300);
+ });
+
tryOnUnmounted(() => {
if (!chartInstance) return;
removeResizeFn();
diff --git a/src/hooks/web/useI18n.ts b/src/hooks/web/useI18n.ts
index e8bcbac..ff057dc 100644
--- a/src/hooks/web/useI18n.ts
+++ b/src/hooks/web/useI18n.ts
@@ -32,6 +32,7 @@ export function useI18n(namespace?: string): { t: I18nGlobalTranslation; } {
const tFn: I18nGlobalTranslation = (key: string, ...arg: any[]) => {
if (!key) return '';
if (!key.includes('.') && !namespace) return key;
+ // @ts-ignore
return t(getKey(namespace, key), ...(arg as I18nTranslationRestParameters));
};
return { ...methods, t: tFn };
diff --git a/src/hooks/web/usePage.ts b/src/hooks/web/usePage.ts
index 43042cf..e426489 100644
--- a/src/hooks/web/usePage.ts
+++ b/src/hooks/web/usePage.ts
@@ -7,33 +7,27 @@
import type { RouteLocationRaw, Router } from 'vue-router';
import { PageEnum } from '/@/enums/pageEnum';
-import { isString } from '/@/utils/is';
import { unref } from 'vue';
import { useRouter } from 'vue-router';
+import { REDIRECT_NAME } from '/@/router/constant';
-export type RouteLocationRawEx = Omit & { path: PageEnum };
+export type PathAsPageEnum = T extends { path: string } ? T & { path: PageEnum } : T;
+export type RouteLocationRawEx = PathAsPageEnum;
function handleError(e: Error) {
console.error(e);
}
-// 页面切换
+/**
+ * 页面切换
+ */
export function useGo(_router?: Router) {
- let router;
- if (!_router) {
- router = useRouter();
- }
- const { push, replace } = _router || router;
- function go(opt: PageEnum | RouteLocationRawEx | string = PageEnum.BASE_HOME, isReplace = false) {
+ const { push, replace } = _router || useRouter();
+ function go(opt: RouteLocationRawEx = PageEnum.BASE_HOME, isReplace = false) {
if (!opt) {
return;
}
- if (isString(opt)) {
- isReplace ? replace(opt).catch(handleError) : push(opt).catch(handleError);
- } else {
- const o = opt as RouteLocationRaw;
- isReplace ? replace(o).catch(handleError) : push(o).catch(handleError);
- }
+ isReplace ? replace(opt).catch(handleError) : push(opt).catch(handleError);
}
return go;
}
@@ -42,19 +36,22 @@ export function useGo(_router?: Router) {
* 重做当前页面
*/
export const useRedo = (_router?: Router) => {
- let router;
- if (!_router) {
- router = useRouter();
- }
- const { push, currentRoute } = _router || router;
- const { query, params } = currentRoute.value;
+ const { replace, currentRoute } = _router || useRouter();
+ const { query, params = {}, name, fullPath } = unref(currentRoute.value);
function redo(): Promise {
return new Promise((resolve) => {
- push({
- path: '/redirect' + unref(currentRoute).fullPath,
- query,
- params,
- }).then(() => resolve(true));
+ if (name === REDIRECT_NAME) {
+ resolve(false);
+ return;
+ }
+ if (name && Object.keys(params).length > 0) {
+ params['_redirect_type'] = 'name';
+ params['path'] = String(name);
+ } else {
+ params['_redirect_type'] = 'path';
+ params['path'] = fullPath;
+ }
+ replace({ name: REDIRECT_NAME, params, query }).then(() => resolve(true));
});
}
return redo;
diff --git a/src/hooks/web/useTitle.ts b/src/hooks/web/useTitle.ts
index 8b77248..0486f84 100644
--- a/src/hooks/web/useTitle.ts
+++ b/src/hooks/web/useTitle.ts
@@ -11,18 +11,21 @@ import { useTitle as usePageTitle } from '@vueuse/core';
import { useGlobSetting } from '/@/hooks/setting';
import { useRouter } from 'vue-router';
import { REDIRECT_NAME } from '/@/router/constant';
+import { useLocaleStore } from '/@/store/modules/locale';
export function useTitle() {
const { title } = useGlobSetting();
const { t } = useI18n();
const { currentRoute } = useRouter();
+ const localeStore = useLocaleStore();
const pageTitle = usePageTitle();
watch(
- () => currentRoute.value.path,
+ [() => currentRoute.value.path, () => localeStore.getLocale],
() => {
const route = unref(currentRoute);
+
if (route.name === REDIRECT_NAME) {
return;
}
@@ -30,6 +33,6 @@ export function useTitle() {
const tTitle = t(route?.meta?.title as string);
pageTitle.value = tTitle ? ` ${tTitle} - ${title} ` : `${title}`;
},
- { immediate: true }
+ { immediate: true },
);
}
diff --git a/src/hooks/web/useWatermark.ts b/src/hooks/web/useWatermark.ts
index 151de27..1df9651 100644
--- a/src/hooks/web/useWatermark.ts
+++ b/src/hooks/web/useWatermark.ts
@@ -13,7 +13,7 @@ import { isDef } from '/@/utils/is';
const domSymbol = Symbol('watermark-dom');
export function useWatermark(
- appendEl: Ref = ref(document.body) as Ref
+ appendEl: Ref = ref(document.body) as Ref,
) {
const func = useRafThrottle(function () {
const el = unref(appendEl);
@@ -56,7 +56,7 @@ export function useWatermark(
width?: number;
height?: number;
str?: string;
- } = {}
+ } = {},
) {
const el = unref(watermarkEl);
if (!el) return;
diff --git a/src/layouts/default/feature/index.vue b/src/layouts/default/feature/index.vue
index 95137be..8e87c42 100644
--- a/src/layouts/default/feature/index.vue
+++ b/src/layouts/default/feature/index.vue
@@ -4,10 +4,8 @@
import { useRootSetting } from '/@/hooks/setting/useRootSetting';
import { useHeaderSetting } from '/@/hooks/setting/useHeaderSetting';
import { useDesign } from '/@/hooks/web/useDesign';
- import { useUserStoreWithOut } from '/@/store/modules/user';
import { SettingButtonPositionEnum } from '/@/enums/appEnum';
import { createAsyncComponent } from '/@/utils/factory/createAsyncComponent';
- import SessionTimeoutLogin from '/@/views/core/login/SessionTimeoutLogin.vue';
export default defineComponent({
name: 'LayoutFeatures',
@@ -15,17 +13,12 @@
BackTop,
LayoutLockPage: createAsyncComponent(() => import('/@/views/core/lock/index.vue')),
SettingDrawer: createAsyncComponent(() => import('/@/layouts/default/setting/index.vue')),
- SessionTimeoutLogin,
},
setup() {
- const { getUseOpenBackTop, getShowSettingButton, getSettingButtonPosition, getFullContent } =
- useRootSetting();
- const userStore = useUserStoreWithOut();
+ const { getUseOpenBackTop, getShowSettingButton, getSettingButtonPosition, getFullContent } = useRootSetting();
const { prefixCls } = useDesign('setting-drawer-fearure');
const { getShowHeader } = useHeaderSetting();
- const getIsSessionTimeout = computed(() => userStore.getSessionTimeout);
-
const getIsFixedSettingDrawer = computed(() => {
if (!unref(getShowSettingButton)) {
return false;
@@ -43,7 +36,6 @@
getUseOpenBackTop,
getIsFixedSettingDrawer,
prefixCls,
- getIsSessionTimeout,
};
},
});
@@ -53,7 +45,6 @@
-
diff --git a/src/layouts/default/menu/index.vue b/src/layouts/default/menu/index.vue
index 8438f52..3381262 100644
--- a/src/layouts/default/menu/index.vue
+++ b/src/layouts/default/menu/index.vue
@@ -56,7 +56,7 @@
const { getIsMobile } = useAppInject();
const getComputedMenuMode = computed(() =>
- unref(getIsMobile) ? MenuModeEnum.INLINE : props.menuMode || unref(getMenuMode)
+ unref(getIsMobile) ? MenuModeEnum.INLINE : props.menuMode || unref(getMenuMode),
);
const getComputedMenuTheme = computed(() => props.theme || unref(getMenuTheme));
@@ -65,10 +65,10 @@
const getUseScroll = computed(() => {
return (
- !unref(getIsHorizontal) &&
- (unref(getIsSidebarType) ||
- props.splitType === MenuSplitTyeEnum.LEFT ||
- props.splitType === MenuSplitTyeEnum.NONE)
+ !unref(getIsHorizontal) &&
+ (unref(getIsSidebarType) ||
+ props.splitType === MenuSplitTyeEnum.LEFT ||
+ props.splitType === MenuSplitTyeEnum.NONE)
);
});
@@ -102,7 +102,7 @@
};
});
/**
- * 点击菜单
+ * click menu
* @param menu
*/
@@ -111,7 +111,7 @@
}
/**
- * 点击菜单前
+ * before click menu
* @param menu
*/
async function beforeMenuClickFn(path: string) {
@@ -126,11 +126,11 @@
if (!unref(getIsShowLogo) && !unref(getIsMobile)) return null;
return (
-
+
);
}
@@ -139,29 +139,29 @@
// console.log(menus);
if (!menus || !menus.length) return null;
return !props.isHorizontal ? (
-
+
) : (
-
+
);
}
return () => {
return (
- <>
- {renderHeader()}
- {unref(getUseScroll) ? (
-
{() => renderMenu()}
- ) : (
- renderMenu()
- )}
- >
+ <>
+ {renderHeader()}
+ {unref(getUseScroll) ? (
+
{() => renderMenu()}
+ ) : (
+ renderMenu()
+ )}
+ >
);
};
},
@@ -185,7 +185,7 @@
&--mobile {
.@{logo-prefix-cls} {
&__title {
- opacity: 1;
+ opacity: 100%;
}
}
}
diff --git a/src/layouts/default/setting/SettingDrawer.tsx b/src/layouts/default/setting/SettingDrawer.tsx
index bd556ee..962f5e9 100644
--- a/src/layouts/default/setting/SettingDrawer.tsx
+++ b/src/layouts/default/setting/SettingDrawer.tsx
@@ -27,6 +27,7 @@ import {
routerTransitionOptions,
menuTypeList,
mixSidebarTriggerOptions,
+ tabsThemeOptions,
} from './enum';
import {
HEADER_PRESET_BG_COLOR_LIST,
@@ -84,7 +85,7 @@ export default defineComponent({
getShowSearch,
} = useHeaderSetting();
- const { getShowMultipleTab, getShowQuick, getShowRedo, getShowFold } = useMultipleTabSetting();
+ const { getShowMultipleTab, getShowQuick, getShowRedo, getShowFold, getTabsTheme } = useMultipleTabSetting();
const getShowMenuRef = computed(() => {
return unref(getShowMenu) && !unref(getIsHorizontal);
@@ -161,19 +162,19 @@ export default defineComponent({
def={unref(getSplit)}
disabled={!unref(getShowMenuRef) || unref(getMenuType) !== MenuTypeEnum.MIX}
/>
-
-
-
+ {/*
*/}
+
+ {/*
*/}
-
-
+ {/*
*/}
+ {/*
*/}
-
-
+ {/*
*/}
+ {/*
*/}
+
-
+ {/*
*/}
-
+ {/*
*/}
-
+ />*/}
-
+ {/*
*/}
+
{() => t('layout.setting.interfaceDisplay')}
{renderContent()}
- {() => t('layout.setting.animation')}
- {renderTransition()}
+ {/*{() => t('layout.setting.animation')}
+ {renderTransition()}*/}
diff --git a/src/layouts/default/setting/components/TenantSelect.vue b/src/layouts/default/setting/components/TenantSelect.vue
index 0f6a271..f6e8c82 100644
--- a/src/layouts/default/setting/components/TenantSelect.vue
+++ b/src/layouts/default/setting/components/TenantSelect.vue
@@ -7,14 +7,16 @@
style="margin-bottom:0px"
:rules="[{ required: true, message: '请至少选择一个多租户,否则会产生无租户数据!'}]"
>
-
@@ -43,18 +45,17 @@
import { reactive, onMounted, ref } from 'vue';
import { currentUserTenantList } from '/@/api/platform/system/controller/tenant';
import { useUserStore } from '/@/store/modules/user';
- import { Select, Row, Col, Form } from 'ant-design-vue';
+ import { Row, Col, Form } from 'ant-design-vue';
import { useTenant } from '/@/hooks/web/useTenant';
import { Icon } from '/@/components/Icon';
-
+ import { useI18n } from '/@/hooks/web/useI18n';
+ import { ApiSelect } from '/@/components/Form';
interface FormState {
- options: Recordable[];
modelRef: {
tenantIds: string[];
};
}
- const ASelect = Select;
const ARow = Row;
const ACol = Col;
const AForm = Form;
@@ -62,8 +63,8 @@
const formElRef = ref();
const { changeTenantEnv, resetTenantEnv } = useTenant();
+ const { t } = useI18n();
const state = reactive({
- options: [],
modelRef: {
tenantIds: []
}
@@ -72,11 +73,6 @@
onMounted(async () => {
const userStore = useUserStore();
state.modelRef.tenantIds = userStore.getUserInfo.tenantIds;
- const tenantList = await currentUserTenantList();
- state.options = tenantList.map(tenant => ({
- value: tenant.code,
- label: tenant.name
- }));
});
/** 自定义搜索 */
diff --git a/src/layouts/default/setting/enum.ts b/src/layouts/default/setting/enum.ts
index c066db6..8552570 100644
--- a/src/layouts/default/setting/enum.ts
+++ b/src/layouts/default/setting/enum.ts
@@ -1,4 +1,4 @@
-import { ContentEnum, RouterTransitionEnum } from '/@/enums/appEnum';
+import { TabsThemeEnum, ContentEnum, RouterTransitionEnum } from '/@/enums/appEnum';
import {
MenuModeEnum,
MenuTypeEnum,
@@ -56,8 +56,25 @@ export enum HandlerEnum {
OPEN_PROGRESS,
OPEN_PAGE_LOADING,
OPEN_ROUTE_TRANSITION,
+
+ TABS_THEME,
}
+export const tabsThemeOptions = [
+ {
+ value: TabsThemeEnum.SMOOTH,
+ label: t('layout.setting.tabsThemeSmooth'),
+ },
+ {
+ value: TabsThemeEnum.CARD,
+ label: t('layout.setting.tabsThemeCard'),
+ },
+ {
+ value: TabsThemeEnum.SIMPLE,
+ label: t('layout.setting.tabsThemeSimple'),
+ },
+];
+
export const contentModeOptions = [
{
value: ContentEnum.FULL,
diff --git a/src/layouts/default/setting/handler.ts b/src/layouts/default/setting/handler.ts
index a7bd794..759ca3c 100644
--- a/src/layouts/default/setting/handler.ts
+++ b/src/layouts/default/setting/handler.ts
@@ -167,6 +167,9 @@ export function handler(event: HandlerEnum, value: any): DeepPartial
import type { Menu } from '/@/router/types';
import type { CSSProperties } from 'vue';
- import { computed, defineComponent, onMounted, ref, unref } from 'vue';
+ import { computed, defineComponent, onMounted, ref, unref, watch } from 'vue';
import type { RouteLocationNormalized } from 'vue-router';
import { ScrollContainer } from '/@/components/Container';
import { SimpleMenu, SimpleMenuTag } from '/@/components/SimpleMenu';
import { Icon } from '/@/components/Icon';
import { AppLogo } from '/@/components/Application';
import { useMenuSetting } from '/@/hooks/setting/useMenuSetting';
+ import { usePermissionStore } from '/@/store/modules/permission';
import { useDragLine } from './useLayoutSider';
import { useGlobSetting } from '/@/hooks/setting';
import { useDesign } from '/@/hooks/web/useDesign';
@@ -138,6 +139,7 @@
} = useMenuSetting();
const { title } = useGlobSetting();
+ const permissionStore = usePermissionStore();
useDragLine(sideRef, dragBarRef, true);
@@ -176,13 +178,13 @@
const getMenuEvents = computed(() => {
return !unref(getMixSideFixed)
- ? {
+ ? {
onMouseleave: () => {
setActive(true);
closeMenu();
},
}
- : {};
+ : {};
});
const getShowDragBar = computed(() => unref(getCanDrag));
@@ -191,6 +193,17 @@
menuModules.value = await getShallowMenus();
});
+ // Menu changes
+ watch(
+ [() => permissionStore.getLastBuildMenuTime, () => permissionStore.getMenuList],
+ async () => {
+ menuModules.value = await getShallowMenus();
+ },
+ {
+ immediate: true,
+ },
+ );
+
listenerRouteChange((route) => {
currentRoute.value = route;
setActive(true);
@@ -208,7 +221,7 @@
};
}
- // 流程模块菜单点击
+ // Process module menu click
async function handleModuleClick(path: string, hover = false) {
const children = await getChildrenMenus(path);
if (unref(activePath) === path) {
@@ -240,7 +253,7 @@
childrenMenus.value = children;
}
- // 设置当前激活的菜单和子菜单
+ // Set the currently active menu and submenu
async function setActive(setChildren = false) {
const path = currentRoute.value?.path;
if (!path) return;
@@ -295,7 +308,7 @@
});
}
- // 关闭菜单
+ // Close menu
function closeMenu() {
if (!unref(getIsFixed)) {
openMenu.value = false;
@@ -306,7 +319,7 @@
t,
prefixCls,
menuModules,
- handleModuleClick: handleModuleClick,
+ handleModuleClick,
activePath,
childrenMenus: childrenMenus,
getShowDragBar,
@@ -362,19 +375,19 @@
&.light {
.@{prefix-cls}-logo {
- border-bottom: 1px solid rgb(238, 238, 238);
+ border-bottom: 1px solid rgb(238 238 238);
}
&.open {
> .scrollbar {
- border-right: 1px solid rgb(238, 238, 238);
+ border-right: 1px solid rgb(238 238 238);
}
}
.@{prefix-cls}-module {
&__item {
font-weight: normal;
- color: rgba(0, 0, 0, 0.65);
+ color: rgb(0 0 0 / 65%);
&--active {
color: @primary-color;
@@ -384,15 +397,15 @@
}
.@{prefix-cls}-menu-list {
&__content {
- box-shadow: 0 0 4px 0 rgba(0, 0, 0, 0.1);
+ box-shadow: 0 0 4px 0 rgb(0 0 0 / 10%);
}
&__title {
.pushpin {
- color: rgba(0, 0, 0, 0.35);
+ color: rgb(0 0 0 / 35%);
&:hover {
- color: rgba(0, 0, 0, 0.85);
+ color: rgb(0 0 0 / 85%);
}
}
}
@@ -442,7 +455,7 @@
&__item {
position: relative;
padding: 12px 0;
- color: rgba(255, 255, 255, 0.65);
+ color: rgb(255 255 255 / 65%);
text-align: center;
cursor: pointer;
transition: all 0.3s ease;
@@ -487,7 +500,7 @@
left: 0;
width: 100%;
font-size: 14px;
- color: rgba(255, 255, 255, 0.65);
+ color: rgb(255 255 255 / 65%);
text-align: center;
cursor: pointer;
background-color: @trigger-dark-bg-color;
@@ -496,7 +509,7 @@
}
&.light &-trigger {
- color: rgba(0, 0, 0, 0.65);
+ color: rgb(0 0 0 / 65%);
background-color: #fff;
border-top: 1px solid #eee;
}
@@ -515,21 +528,21 @@
// margin-left: -6px;
font-size: 18px;
color: @primary-color;
- border-bottom: 1px solid rgb(238, 238, 238);
- opacity: 0;
+ border-bottom: 1px solid rgb(238 238 238);
+ opacity: 0%;
transition: unset;
align-items: center;
justify-content: space-between;
&.show {
min-width: 130px;
- opacity: 1;
+ opacity: 100%;
transition: all 0.5s ease;
}
.pushpin {
margin-right: 6px;
- color: rgba(255, 255, 255, 0.65);
+ color: rgb(255 255 255 / 65%);
cursor: pointer;
&:hover {
@@ -572,7 +585,7 @@
background-color: #f8f8f9;
border-top: none;
border-bottom: none;
- box-shadow: 0 0 4px 0 rgba(28, 36, 56, 0.15);
+ box-shadow: 0 0 4px 0 rgb(28 36 56 / 15%);
}
}
diff --git a/src/layouts/default/sider/useLayoutSider.ts b/src/layouts/default/sider/useLayoutSider.ts
index 8d9528e..e04d312 100644
--- a/src/layouts/default/sider/useLayoutSider.ts
+++ b/src/layouts/default/sider/useLayoutSider.ts
@@ -3,21 +3,24 @@ import { computed, unref, onMounted, nextTick, ref } from 'vue';
import { TriggerEnum } from '/@/enums/menuEnum';
import { useMenuSetting } from '/@/hooks/setting/useMenuSetting';
import { useDebounceFn } from '@vueuse/core';
-
+import { useAppStore } from '/@/store/modules/app';
/**
* 处理菜单事件的相关操作
*/
export function useSiderEvent() {
- const brokenRef = ref(false);
-
+ const appStore = useAppStore();
const { getMiniWidthNumber } = useMenuSetting();
const getCollapsedWidth = computed(() => {
- return unref(brokenRef) ? 0 : unref(getMiniWidthNumber);
+ return unref(getMiniWidthNumber);
});
function onBreakpointChange(broken: boolean) {
- brokenRef.value = broken;
+ appStore.setProjectConfig({
+ menuSetting: {
+ siderHidden: broken,
+ },
+ });
}
return { getCollapsedWidth, onBreakpointChange };
diff --git a/src/layouts/default/tabs/components/TabContent.vue b/src/layouts/default/tabs/components/TabContent.vue
index 8b3cad1..40c2c19 100644
--- a/src/layouts/default/tabs/components/TabContent.vue
+++ b/src/layouts/default/tabs/components/TabContent.vue
@@ -1,6 +1,15 @@
-
+
+
+
+
{{ getTitle }}
@@ -18,6 +27,8 @@
import { useDesign } from '/@/hooks/web/useDesign';
import { useI18n } from '/@/hooks/web/useI18n';
import { useTabDropdown } from '../useTabDropdown';
+ import { useMultipleTabSetting } from '/@/hooks/setting/useMultipleTabSetting';
+ import { TabsThemeEnum } from '/@/enums/appEnum';
export default defineComponent({
name: 'TabContent',
@@ -40,6 +51,14 @@
const getIsTabs = computed(() => !props.isExtra);
+ const prefixIconType = computed(() => {
+ if (props.tabItem.meta.icon) {
+ return props.tabItem.meta.icon;
+ } else {
+ return 'ant-design:code';
+ }
+ });
+
const getTrigger = computed((): ('contextmenu' | 'click' | 'hover')[] =>
unref(getIsTabs) ? ['contextmenu'] : ['click']
);
@@ -53,6 +72,10 @@
props.tabItem && handleContextMenu(props.tabItem)(e);
}
+ const { getTabsTheme } = useMultipleTabSetting();
+ // 是否显示图标
+ const showPrefixIcon = computed(() => unref(getTabsTheme) === TabsThemeEnum.SMOOTH);
+
return {
prefixCls,
getDropMenuList,
@@ -61,6 +84,8 @@
getTrigger,
getIsTabs,
getTitle,
+ prefixIconType,
+ showPrefixIcon,
};
},
});
diff --git a/src/layouts/default/tabs/index.less b/src/layouts/default/tabs/index.less
index 1eb3bc2..2d920a3 100644
--- a/src/layouts/default/tabs/index.less
+++ b/src/layouts/default/tabs/index.less
@@ -11,7 +11,7 @@ html[data-theme='dark'] {
html[data-theme='light'] {
.@{prefix-cls} {
.ant-tabs-tab:not(.ant-tabs-tab-active) {
- border: 1px solid #d9d9d9 !important;
+ border: 1px solid #e6e6e6;
}
}
}
@@ -22,49 +22,65 @@ html[data-theme='light'] {
line-height: @multiple-height + 2;
background-color: @component-background;
border-bottom: 1px solid @border-color-base;
+ box-shadow: 0 4px 4px rgb(0 21 41 / 8%);
.ant-tabs-small {
- height: @multiple-height;
+ height: calc(@multiple-height + 4px);
}
.ant-tabs.ant-tabs-card {
- .ant-tabs-card-bar {
- height: @multiple-height;
+ padding-left: 10px;
+
+ .ant-tabs-nav {
+ height: calc(@multiple-height);
margin: 0;
background-color: @component-background;
border: 0;
box-shadow: none;
- .ant-tabs-nav-container {
+ .ant-tabs-nav-wrap {
height: @multiple-height;
- padding-top: 2px;
+ margin-top: 2px;
}
.ant-tabs-tab {
- height: calc(@multiple-height - 2px);
+ height: calc(@multiple-height - 4px);
padding-right: 12px;
- line-height: calc(@multiple-height - 2px);
+ line-height: calc(@multiple-height - 4px);
color: @text-color-base;
background-color: @component-background;
transition: none;
+ .ant-tabs-tab-btn {
+ color: @text-color-base;
+ transition: none;
+ }
+
&:hover {
- .ant-tabs-close-x {
+ .ant-tabs-tab-remove .anticon-close {
opacity: 1;
}
}
- .ant-tabs-close-x {
- width: 8px;
- height: 12px;
- font-size: 12px;
- color: inherit;
- opacity: 0;
- transition: none;
-
- &:hover {
- svg {
- width: 0.8em;
+ .ant-tabs-tab-remove {
+ margin: 0;
+ padding: 0;
+ position: relative;
+ top: 0;
+ left: 4px;
+
+ .anticon-close {
+ width: 8px;
+ height: 12px;
+ font-size: 12px;
+ color: inherit;
+ opacity: 0;
+ transition: none;
+
+ &:hover {
+ svg {
+ width: 0.8em;
+ }
}
}
}
@@ -82,7 +98,9 @@ html[data-theme='light'] {
.ant-tabs-tab:not(.ant-tabs-tab-active) {
&:hover {
+ background-color: #ecf5ff;
color: @primary-color;
+ border-color: #b3d8ff;
}
}
@@ -91,10 +109,14 @@ html[data-theme='light'] {
padding-left: 18px;
color: @white !important;
background: @primary-color;
- border: 0;
+ border: 1px solid transparent;
transition: none;
- .ant-tabs-close-x {
+ .ant-tabs-tab-btn {
+ color: @white;
+ }
+
+ .ant-tabs-tab-remove .anticon-close {
opacity: 1;
}
@@ -109,13 +131,13 @@ html[data-theme='light'] {
padding: 0 6px;
.ant-tabs-tab {
- margin-right: 3px !important;
+ margin-right: 6px !important;
}
}
}
.ant-tabs-tab:not(.ant-tabs-tab-active) {
- .anticon-close {
+ .ant-tabs-tab-remove .anticon-close {
font-size: 12px;
svg {
@@ -134,7 +156,7 @@ html[data-theme='light'] {
}
&--hide-close {
- .ant-tabs-close-x {
+ .ant-tabs-tab-remove .anticon-close {
opacity: 0 !important;
}
}
@@ -179,3 +201,28 @@ html[data-theme='light'] {
}
}
}
+
+.ant-tabs-dropdown-menu {
+ &-title-content {
+ display: flex;
+ align-items: center;
+
+ .@{prefix-cls} {
+ &-content__info {
+ width: auto;
+ margin-left: 0;
+ line-height: 28px;
+ }
+ }
+ }
+
+ &-item-remove {
+ margin-left: auto;
+ }
+}
+
+.multiple-tabs__dropdown {
+ .ant-dropdown-content {
+ width: 172px;
+ }
+}
diff --git a/src/layouts/default/tabs/index.vue b/src/layouts/default/tabs/index.vue
index 3e94b6a..9629a46 100644
--- a/src/layouts/default/tabs/index.vue
+++ b/src/layouts/default/tabs/index.vue
@@ -27,7 +27,7 @@
diff --git a/src/layouts/default/tabs/tabs.theme.card.less b/src/layouts/default/tabs/tabs.theme.card.less
new file mode 100644
index 0000000..2d411b4
--- /dev/null
+++ b/src/layouts/default/tabs/tabs.theme.card.less
@@ -0,0 +1,233 @@
+@prefix-cls-theme-card: ~'@{prefix-cls}.@{prefix-cls}--theme-card';
+
+html[data-theme='dark'] {
+ .@{prefix-cls-theme-card} {
+ .ant-tabs-tab {
+ border-top: none !important;
+ border-left: none !important;
+ border-right: none !important;
+ }
+ }
+}
+
+html[data-theme='light'] {
+ .@{prefix-cls-theme-card} {
+ .ant-tabs-tab:not(.ant-tabs-tab-active) {
+ border-top: none !important;
+ border-left: none !important;
+ border-right: none !important;
+ }
+ }
+}
+
+.@{prefix-cls-theme-card} {
+ @tabHeight: calc(@multiple-card-height - 10px);
+
+ z-index: 10;
+ height: @multiple-card-height;
+ line-height: @multiple-card-height;
+ background-color: @component-background;
+ box-shadow: 0 1px 4px rgb(0 21 41 / 8%);
+
+ .ant-tabs-small {
+ height: @multiple-card-height;
+ }
+
+ .ant-tabs.ant-tabs-card {
+ .ant-tabs-nav {
+ height: @multiple-card-height;
+ margin: 0;
+ background-color: @component-background;
+ border: 0;
+ box-shadow: none;
+ padding-left: 10px;
+
+ .ant-tabs-nav-wrap {
+ height: @tabHeight;
+ margin-top: 4px;
+ padding-top: 0;
+ }
+
+ .ant-tabs-tab {
+ height: @tabHeight;
+ line-height: @tabHeight;
+ color: @text-color-base;
+ background-color: @component-background;
+ padding: 0 20px 0 30px;
+ margin: 0 10px 0 0 !important;
+
+ .ant-tabs-tab-btn {
+ color: @text-color-call-out;
+ }
+
+ &:hover {
+ //padding: 0 36px 0 30px;
+
+ .ant-tabs-tab-remove .anticon-close {
+ opacity: 1;
+
+ &:hover {
+ color: #fff;
+ background-color: #c0c4cc;
+ }
+ }
+ }
+
+ .ant-tabs-tab-remove {
+ top: 5px;
+ left: 4px;
+
+ .anticon-close {
+ position: relative;
+ width: 14px;
+ height: 14px;
+ font-size: 13px;
+ color: inherit;
+ opacity: 0;
+ transition: opacity 0.15s;
+ top: 0;
+ left: 6px;
+ vertical-align: middle;
+ line-height: 10px;
+ overflow: hidden;
+ transform-origin: 100% 50%;
+ border-radius: 100%;
+
+ &:hover {
+ svg {
+ fill: #fff;
+ }
+ }
+ }
+ }
+
+ > div {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ }
+
+ svg {
+ fill: @text-color-base;
+ }
+
+ &:first-child {
+ }
+ }
+
+ .ant-tabs-tab:not(.ant-tabs-tab-active) {
+ border: none !important;
+
+ &:hover {
+ color: @primary-color !important;
+ background-color: inherit;
+ }
+ }
+
+ .ant-tabs-tab-active {
+ position: relative;
+ color: @primary-color !important;
+ border: 1px solid transparent;
+ border-bottom: 1px solid @primary-color !important;
+ font-weight: inherit;
+
+ .ant-tabs-tab-btn {
+ color: @primary-color;
+ }
+
+ .ant-tabs-tab-remove .anticon-close {
+ opacity: 0;
+
+ svg {
+ width: 0.6em;
+ }
+ }
+
+ svg {
+ width: inherit;
+ fill: @primary-color;
+ }
+ }
+ }
+
+ .ant-tabs-nav > div:nth-child(1) {
+ padding: 0 6px;
+
+ .ant-tabs-tab {
+ margin-right: 10px !important;
+ }
+ }
+ }
+
+ .ant-tabs-tab:not(.ant-tabs-tab-active) {
+ .ant-tabs-tab-remove .anticon-close {
+ font-size: 12px;
+
+ svg {
+ width: 0.6em;
+ }
+ }
+ }
+
+ .ant-tabs-extra-content {
+ position: relative;
+ top: 0;
+ line-height: @multiple-card-height !important;
+ }
+
+ .ant-dropdown-trigger {
+ display: inline-flex;
+ }
+
+ .@{prefix-cls}--hide-close {
+ .ant-tabs-tab-remove .anticon-close {
+ opacity: 0 !important;
+ }
+ }
+
+ .@{prefix-cls}-content {
+ &__extra-quick,
+ &__extra-redo,
+ &__extra-fold {
+ display: inline-block;
+ width: 36px;
+ height: @multiple-card-height;
+ line-height: @multiple-card-height;
+ color: @text-color-secondary;
+ text-align: center;
+ cursor: pointer;
+ border-left: 1px solid @border-color-base;
+
+ &:hover {
+ color: @text-color-base;
+ }
+
+ span[role='img'] {
+ transform: rotate(90deg);
+ }
+ }
+
+ &__extra-redo {
+ span[role='img'] {
+ transform: rotate(0deg);
+ }
+ }
+
+ &__info {
+ display: inline-block;
+ width: 100%;
+ height: @tabHeight;
+ padding-left: 0;
+ font-size: 14px;
+ cursor: pointer;
+ user-select: none;
+ }
+
+ // tab 前缀图标样式
+ &__prefix-icon {
+ & .app-iconify.anticon {
+ margin-right: 4px;
+ }
+ }
+ }
+}
diff --git a/src/layouts/default/tabs/tabs.theme.smooth.less b/src/layouts/default/tabs/tabs.theme.smooth.less
new file mode 100644
index 0000000..f295c61
--- /dev/null
+++ b/src/layouts/default/tabs/tabs.theme.smooth.less
@@ -0,0 +1,235 @@
+// tabs圆滑样式
+@prefix-cls-theme-smooth: ~'@{prefix-cls}.@{prefix-cls}--theme-smooth';
+
+html[data-theme='dark'] {
+ .@{prefix-cls-theme-smooth} {
+ .ant-tabs-tab {
+ border: none !important;
+ }
+ }
+}
+
+html[data-theme='light'] {
+ .@{prefix-cls-theme-smooth} {
+ .ant-tabs-tab:not(.ant-tabs-tab-active) {
+ border: none !important;
+ }
+ }
+}
+
+.@{prefix-cls-theme-smooth} {
+ @tabHeight: calc(@multiple-smooth-height - 12px);
+
+ z-index: 10;
+ height: @multiple-smooth-height;
+ line-height: @multiple-smooth-height;
+ background-color: @component-background;
+ box-shadow: 0 1px 4px rgb(0 21 41 / 8%);
+
+ .ant-tabs-small {
+ height: @multiple-smooth-height;
+ }
+
+ .ant-tabs.ant-tabs-card {
+ .ant-tabs-nav {
+ height: @multiple-smooth-height;
+ margin: 0;
+ background-color: @component-background;
+ border: 0;
+ box-shadow: none;
+ padding-left: 10px;
+
+ .ant-tabs-nav-wrap {
+ height: @tabHeight;
+ margin-top: 12px;
+ }
+
+ .ant-tabs-tab {
+ height: @tabHeight;
+ line-height: @tabHeight;
+ color: @text-color-base;
+ background-color: @component-background;
+ transition: padding 0.3s;
+ padding: 0 24px 0 30px;
+ margin: 0 -14px 0 0 !important;
+ -webkit-mask: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAANoAAAAkBAMAAAAdqzmBAAAAMFBMVEVHcEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlTPQ5AAAAD3RSTlMAr3DvEM8wgCBA379gj5//tJBPAAAAnUlEQVRIx2NgAAM27fj/tAO/xBsYkIHyf9qCT8iWMf6nNQhAsk2f5rYheY7Dnua2/U+A28ZEe8v+F9Ax2v7/F4DbxkUH2wzgtvHTwbYPo7aN2jZq26hto7aN2jZq25Cy7Qvctnw62PYNbls9HWz7S8/G6//PsI6H4396gAUQy1je08W2jxDbpv6nD4gB2uWp+J9eYPsEhv/0BPS1DQBvoBLVZ3BppgAAAABJRU5ErkJggg==);
+ mask: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAANoAAAAkBAMAAAAdqzmBAAAAMFBMVEVHcEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlTPQ5AAAAD3RSTlMAr3DvEM8wgCBA379gj5//tJBPAAAAnUlEQVRIx2NgAAM27fj/tAO/xBsYkIHyf9qCT8iWMf6nNQhAsk2f5rYheY7Dnua2/U+A28ZEe8v+F9Ax2v7/F4DbxkUH2wzgtvHTwbYPo7aN2jZq26hto7aN2jZq25Cy7Qvctnw62PYNbls9HWz7S8/G6//PsI6H4396gAUQy1je08W2jxDbpv6nD4gB2uWp+J9eYPsEhv/0BPS1DQBvoBLVZ3BppgAAAABJRU5ErkJggg==);
+ -webkit-mask-size: 100% 100%;
+ mask-size: 100% 100%;
+ position: relative;
+ z-index: 1;
+
+ .ant-tabs-tab-btn {
+ color: @text-color-base;
+ }
+
+ &:hover {
+ z-index: 2;
+ padding: 0 30px 0 36px;
+
+ .ant-tabs-tab-remove .anticon-close {
+ opacity: 1;
+
+ &:hover {
+ color: #fff;
+ background-color: #c0c4cc;
+ }
+ }
+ }
+
+ .ant-tabs-tab-remove {
+ top: 4px;
+ left: 10px;
+
+ .anticon-close {
+ position: relative;
+ width: 14px;
+ height: 14px;
+ font-size: 13px;
+ color: inherit;
+ opacity: 0;
+ transition: opacity 0.15s;
+ vertical-align: middle;
+ line-height: 10px;
+ overflow: hidden;
+ transform-origin: 100% 50%;
+ border-radius: 100%;
+
+ &:hover {
+ svg {
+ fill: #fff;
+ }
+ }
+ }
+ }
+ > div {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ }
+
+ svg {
+ fill: @text-color-base;
+ }
+
+ &:first-child {
+ padding: 0 30px 0 30px !important;
+ }
+ }
+
+ .ant-tabs-tab:not(.ant-tabs-tab-active) {
+ &:hover {
+ color: inherit;
+ background-color: #dee1e6;
+ }
+ }
+
+ .ant-tabs-tab-active {
+ position: relative;
+ padding: 0 30px 0 36px;
+ color: @primary-color !important;
+ background: #e8f4ff;
+ border: 0;
+ font-weight: inherit;
+ z-index: 3;
+
+ .ant-tabs-tab-btn {
+ color: @primary-color;
+ }
+
+ .ant-tabs-tab-remove .anticon-close {
+ opacity: 1;
+
+ svg {
+ width: 0.6em;
+ }
+ }
+
+ svg {
+ width: inherit;
+ fill: @primary-color;
+ }
+ }
+ }
+
+ .ant-tabs-nav > div:nth-child(1) {
+ padding: 0 6px;
+
+ .ant-tabs-tab {
+ margin-right: -20px !important;
+ }
+ }
+ }
+
+ .ant-tabs-tab:not(.ant-tabs-tab-active) {
+ .anticon-close {
+ font-size: 12px;
+
+ svg {
+ width: 0.6em;
+ }
+ }
+ }
+
+ .ant-tabs-extra-content {
+ position: relative;
+ top: 0;
+ line-height: @multiple-smooth-height !important;
+ }
+
+ .ant-dropdown-trigger {
+ display: inline-flex;
+ }
+
+ .@{prefix-cls}--hide-close {
+ .ant-tabs-tab-remove .anticon-close {
+ opacity: 0 !important;
+ }
+ }
+
+ .@{prefix-cls}-content {
+ &__extra-quick,
+ &__extra-redo,
+ &__extra-fold {
+ display: inline-block;
+ width: 36px;
+ height: @multiple-smooth-height;
+ line-height: @multiple-smooth-height;
+ color: @text-color-secondary;
+ text-align: center;
+ cursor: pointer;
+ border-left: 1px solid @border-color-base;
+
+ &:hover {
+ color: @text-color-base;
+ }
+
+ span[role='img'] {
+ transform: rotate(90deg);
+ }
+ }
+
+ &__extra-redo {
+ span[role='img'] {
+ transform: rotate(0deg);
+ }
+ }
+
+ &__info {
+ display: inline-block;
+ width: 100%;
+ height: @tabHeight;
+ padding-left: 0;
+ font-size: 14px;
+ cursor: pointer;
+ user-select: none;
+ }
+
+ // tab 前缀图标样式
+ &__prefix-icon {
+ & .app-iconify.anticon {
+ margin-right: 4px;
+ }
+ }
+ }
+}
diff --git a/src/locales/lang/en.ts b/src/locales/lang/en.ts
index 33deb3d..6fdfca0 100644
--- a/src/locales/lang/en.ts
+++ b/src/locales/lang/en.ts
@@ -11,9 +11,7 @@ import antdLocale from 'ant-design-vue/es/locale/en_US';
const modules = import.meta.globEager('./en/**/*.ts');
export default {
message: {
- ...genMessage(modules, 'en'),
- antdLocale,
+ ...genMessage(modules as Recordable, 'en'),
+ antdLocale
},
- momentLocale: null,
- momentLocaleName: 'en',
};
diff --git a/src/locales/lang/en/layout.ts b/src/locales/lang/en/layout.ts
index 018b860..652d2ee 100644
--- a/src/locales/lang/en/layout.ts
+++ b/src/locales/lang/en/layout.ts
@@ -72,6 +72,10 @@ export default {
headerTheme: 'Header theme',
sidebarTheme: 'Menu theme',
tenantManage: 'Tenant Manage',
+ tabsTheme: 'tabs theme',
+ tabsThemeSmooth: 'Smooth',
+ tabsThemeCard: 'Card',
+ tabsThemeSimple: 'Simple',
menuDrag: 'Drag Sidebar',
menuSearch: 'Menu search',
diff --git a/src/locales/lang/zh-CN/layout.ts b/src/locales/lang/zh-CN/layout.ts
index 34f86e6..3962564 100644
--- a/src/locales/lang/zh-CN/layout.ts
+++ b/src/locales/lang/zh-CN/layout.ts
@@ -72,6 +72,10 @@ export default {
headerTheme: '顶栏主题',
sidebarTheme: '菜单主题',
tenantManage: '多租户管理',
+ tabsTheme: '标签页样式',
+ tabsThemeSmooth: '圆滑',
+ tabsThemeCard: '卡片',
+ tabsThemeSimple: '极简',
menuDrag: '侧边菜单拖拽',
menuSearch: '菜单搜索',
diff --git a/src/locales/lang/zh_CN.ts b/src/locales/lang/zh_CN.ts
index 29fe966..ca8a705 100644
--- a/src/locales/lang/zh_CN.ts
+++ b/src/locales/lang/zh_CN.ts
@@ -7,14 +7,11 @@
import { genMessage } from '../helper';
import antdLocale from 'ant-design-vue/es/locale/zh_CN';
-import momentLocale from 'moment/dist/locale/zh-cn';
const modules = import.meta.globEager('./zh-CN/**/*.ts');
export default {
message: {
- ...genMessage(modules, 'zh-CN'),
+ ...genMessage(modules as Recordable, 'zh-CN'),
antdLocale,
- },
- momentLocale,
- momentLocaleName: 'zh-cn',
+ }
};
diff --git a/src/locales/setupI18n.ts b/src/locales/setupI18n.ts
index c5d0b68..6a9dc68 100644
--- a/src/locales/setupI18n.ts
+++ b/src/locales/setupI18n.ts
@@ -45,6 +45,7 @@ async function createI18nOptions(): Promise {
/** 使用全局设置 i18n 实例 */
export async function setupI18n(app: App) {
const options = await createI18nOptions();
+ console.log(options)
i18n = createI18n(options) as I18n;
app.use(i18n);
}
diff --git a/src/locales/useLocale.ts b/src/locales/useLocale.ts
index ccdf407..4e0f1c0 100644
--- a/src/locales/useLocale.ts
+++ b/src/locales/useLocale.ts
@@ -6,7 +6,6 @@
*/
import type { LocaleType } from '/#/config';
-import moment from 'moment';
import { i18n } from './setupI18n';
import { useLocaleStoreWithOut } from '/@/store/modules/locale';
import { unref, computed } from 'vue';
@@ -14,8 +13,6 @@ import { loadLocalePool, setHtmlPageLang } from './helper';
interface LangModule {
message: Recordable;
- momentLocale: Recordable;
- momentLocaleName: string;
}
function setI18nLanguage(locale: LocaleType) {
@@ -31,7 +28,9 @@ export function useLocale() {
const localeStore = useLocaleStoreWithOut();
const getLocale = computed(() => localeStore.getLocale);
const getShowLocalePicker = computed(() => localeStore.getShowPicker);
- const getAntdLocale = computed((): any => i18n.global.getLocaleMessage(unref(getLocale))?.antdLocale ?? {});
+ const getAntdLocale = computed((): any => {
+ return i18n.global.getLocaleMessage(unref(getLocale))?.antdLocale ?? {};
+ });
// 切换语言会改变useI18n的语言环境
async function changeLocale(locale: LocaleType) {
@@ -44,10 +43,11 @@ export function useLocale() {
}
const langModule = ((await import(`./lang/${locale}.ts`)) as any).default as LangModule;
if (!langModule) return;
- const { message, momentLocale, momentLocaleName } = langModule;
+
+ const { message } = langModule;
globalI18n.setLocaleMessage(locale, message);
- moment.updateLocale(momentLocaleName, momentLocale);
loadLocalePool.push(locale);
+
setI18nLanguage(locale);
return locale;
}
diff --git a/src/logics/theme/index.ts b/src/logics/theme/index.ts
index 5220778..990ef54 100644
--- a/src/logics/theme/index.ts
+++ b/src/logics/theme/index.ts
@@ -17,7 +17,18 @@ export async function changeTheme(color: string) {
color,
});
- return await replaceStyleVariables({
+ let res = await replaceStyleVariables({
colorVariables: [...getThemeColors(color), ...colors],
});
+
+ fixDark();
+ return res;
+}
+
+// 修复黑暗模式下切换皮肤无效的问题
+async function fixDark() {
+ let el = document.getElementById('__VITE_PLUGIN_THEME__');
+ if (el) {
+ el.innerHTML = el.innerHTML.replace(/\\["']dark\\["']/g, '\'dark\'');
+ }
}
diff --git a/src/main.ts b/src/main.ts
index 45e8526..e078bae 100644
--- a/src/main.ts
+++ b/src/main.ts
@@ -2,6 +2,9 @@ import '/@/assets/styles/index.less';
// 注册windi
import 'virtual:windi.css';
+import 'virtual:windi-base.css';
+import 'virtual:windi-components.css';
+import 'virtual:windi-utilities.css';
// 注册svg图标精灵
import 'virtual:svg-icons-register';
import App from './App.vue';
@@ -13,60 +16,9 @@ import { setupStore } from '/@/store';
import { setupGlobDirectives } from '/@/directives';
import { setupI18n } from '/@/locales/setupI18n';
import { registerGlobComp } from '/@/components';
+import { isDevMode } from './utils/env';
-// 引入表格功能相对比较齐全的组件vxeTable
-import XEUtils from 'xe-utils';
-// 按需导入 vxeTable
-import {
- // 核心
- VXETable,
-
- // 功能模块
- Icon,
- Filter,
- Menu,
- Edit,
- Export,
- Keyboard,
- Validator,
- Footer,
-
- // 可选组件
- Column,
- Colgroup,
- Grid,
- Toolbar,
- Pager,
- Checkbox,
- CheckboxGroup,
- Radio,
- RadioGroup,
- RadioButton,
- Input,
- Textarea,
- Button,
- Modal,
- Tooltip,
- Form,
- FormItem,
- FormGather,
- Select,
- Optgroup,
- Option,
- Switch,
- List,
- Pulldown,
-
- // 表格
- Table
-} from 'vxe-table';
-import zhCN from 'vxe-table/lib/locale/lang/zh-CN';
-
-// 在本地开发中不引入按需?
-// 在按需引入的本地开发中,浏览器请求的数量将增加 20% 左右。
-// 这可能会减慢浏览器的刷新速度。
-// 所以都是在本地开发中引入,生产环境中才按需引入
-if (import.meta.env.DEV) {
+if (isDevMode()) {
import('ant-design-vue/dist/antd.less');
import('vxe-table/lib/style.css');
}
@@ -95,61 +47,16 @@ async function bootstrap() {
// 注册全局指令
setupGlobDirectives(app);
- // 路线准备好时挂载: https://next.router.vuejs.org/api/#isready
+ // 等待路由准备好时挂载: https://next.router.vuejs.org/api/#isready
await router.isReady();
app.mount('#app', true);
// 高德地图安全配置
- // @ts-ignore
+ // @ts-ignore todo: 临时处理这是不安全的
window._AMapSecurityConfig = {
securityJsCode: 'ea9d5e2fb6383665de6c3c7b4e53c289'
};
-
- // 按需加载的方式默认是不带国际化的,自定义国际化需要自行解析占位符 '{0}',例如:
- VXETable.setup({
- size: 'medium', // set default size
- i18n: (key, args) => XEUtils.toFormatString(XEUtils.get(zhCN, key), args)
- });
-
- // 表格功能
- app.use(Footer)
- .use(Icon)
- .use(Filter)
- .use(Edit)
- .use(Menu)
- .use(Export)
- .use(Keyboard)
- .use(Validator)
-
- // 可选组件
- .use(Column)
- .use(Colgroup)
- .use(Grid)
- .use(Toolbar)
- .use(Pager)
- .use(Checkbox)
- .use(CheckboxGroup)
- .use(Radio)
- .use(RadioGroup)
- .use(RadioButton)
- .use(Input)
- .use(Textarea)
- .use(Button)
- .use(Modal)
- .use(Tooltip)
- .use(Form)
- .use(FormItem)
- .use(FormGather)
- .use(Select)
- .use(Optgroup)
- .use(Option)
- .use(Switch)
- .use(List)
- .use(Pulldown)
-
- // 安装表格
- .use(Table);
}
void bootstrap();
diff --git a/src/router/constant.ts b/src/router/constant.ts
index d0e9d71..3233d21 100644
--- a/src/router/constant.ts
+++ b/src/router/constant.ts
@@ -16,5 +16,5 @@ export const EXCEPTION_COMPONENT = () => import('../views/core/exception/Excepti
/** 默认布局 */
export const LAYOUT = () => import('/@/layouts/default/index.vue');
-/** 多级菜单父布局定义,定义一个空组件什么都没有只有一个组件名称充当父布局,不让没有组件的时候报找不到组件的错误 */
-export const getParentLayout = (_name?: string) => () => new Promise((resolve) => resolve({ name: PARENT_LAYOUT_NAME }));
+/** 多级子菜单父布局定义,定义一个空组件什么都没有只有一个组件名称充当父布局,不让没有组件的时候报找不到组件的错误 */
+export const getParentLayout = (_name?: string) => () => new Promise((resolve) => resolve({ name: _name || PARENT_LAYOUT_NAME }));
diff --git a/src/router/guard/index.ts b/src/router/guard/index.ts
index bbb01eb..dc6ef18 100644
--- a/src/router/guard/index.ts
+++ b/src/router/guard/index.ts
@@ -18,6 +18,7 @@ import { createPermissionGuard } from './permissionGuard';
import { createStateGuard } from './stateGuard';
import nProgress from 'nprogress';
import projectSetting from '/@/settings/projectSetting';
+import { createParamMenuGuard } from './paramMenuGuard';
/** 不要改变创建的顺序 */
export function setupRouterGuard(router: Router) {
@@ -28,6 +29,7 @@ export function setupRouterGuard(router: Router) {
createMessageGuard(router);
createProgressGuard(router);
createPermissionGuard(router);
+ createParamMenuGuard(router);
createStateGuard(router);
}
@@ -62,7 +64,7 @@ function createPageLoadingGuard(router: Router) {
});
router.afterEach(async () => {
if (unref(getOpenPageLoading)) {
- // 定时器模拟加载时间,防止闪烁过快 TODO 寻找更好的方法
+ // 定时器模拟加载时间,防止闪烁过快
setTimeout(() => {
appStore.setPageLoading(false);
}, 220);
diff --git a/src/router/guard/paramMenuGuard.ts b/src/router/guard/paramMenuGuard.ts
new file mode 100644
index 0000000..3044cf7
--- /dev/null
+++ b/src/router/guard/paramMenuGuard.ts
@@ -0,0 +1,25 @@
+import type { Router } from 'vue-router';
+import { configureDynamicParamsMenu } from '../helper/menuHelper';
+import { Menu } from '../types';
+import { usePermissionStoreWithOut } from '/@/store/modules/permission';
+
+export function createParamMenuGuard(router: Router) {
+ const permissionStore = usePermissionStoreWithOut();
+ router.beforeEach(async (to, _, next) => {
+ // filter no name route
+ if (!to.name) {
+ next();
+ return;
+ }
+
+ // menu has been built.
+ if (!permissionStore.getIsDynamicAddedRoute) {
+ next();
+ return;
+ }
+
+ let menus: Menu[] = permissionStore.getMenuList;
+ menus.forEach((item) => configureDynamicParamsMenu(item, to.params));
+ next();
+ });
+}
diff --git a/src/router/guard/permissionGuard.ts b/src/router/guard/permissionGuard.ts
index 92f74cc..0d03ff5 100644
--- a/src/router/guard/permissionGuard.ts
+++ b/src/router/guard/permissionGuard.ts
@@ -10,10 +10,12 @@ import type { Router, RouteRecordRaw } from 'vue-router';
import { usePermissionStoreWithOut } from '/@/store/modules/permission';
import { PageEnum } from '/@/enums/pageEnum';
import { useUserStoreWithOut } from '/@/store/modules/user';
-import { PAGE_NOT_FOUND_NAME } from '/@/router/constant';
+import { RootRoute } from '/@/router/routes';
+import { PAGE_NOT_FOUND_ROUTE } from '/@/router/routes/basic';
const LOGIN_PATH = PageEnum.BASE_LOGIN;
-const ROOT_HOME = PageEnum.ROOT_HOME;
+const ROOT_PATH = RootRoute.path;
+
/** 设置路由白名单 */
const whitePathList: PageEnum[] = [ LOGIN_PATH ];
@@ -21,14 +23,22 @@ export function createPermissionGuard(router: Router) {
const userStore = useUserStoreWithOut();
const permissionStore = usePermissionStoreWithOut();
router.beforeEach(async (to, from, next) => {
+ if (
+ // 如果指定首页路径数据不为空就代表已经登录直接放过
+ from.path === ROOT_PATH &&
+ to.path === PageEnum.BASE_HOME &&
+ userStore.getUserInfo.homePath &&
+ userStore.getUserInfo.homePath !== PageEnum.BASE_HOME
+ ) {
+ return next(userStore.getUserInfo.homePath);
+ }
+
// 放过白名单路由
if (whitePathList.includes(to.path as PageEnum))
return next();
// 校验token权限信息
const token = userStore.getAccessToken;
if (!token) {
- // 是否忽略权限验证,需要将路由ignoreAuth设置true
- if (to.meta.ignoreAuth) return next();
// 重定向登录页面
const redirectLogin: { path: string; replace: boolean; query?: Recordable; } = { path: LOGIN_PATH, replace: true };
// 补充拦截路由信息
@@ -40,19 +50,35 @@ export function createPermissionGuard(router: Router) {
}
return next(redirectLogin);
}
+
+ if (
+ // 处理避免登录后跳转到404页面
+ from.path === LOGIN_PATH &&
+ to.name === PAGE_NOT_FOUND_ROUTE.name &&
+ to.fullPath !== (userStore.getUserInfo.homePath || PageEnum.BASE_HOME)
+ ) {
+ next(userStore.getUserInfo.homePath || PageEnum.BASE_HOME);
+ return;
+ }
+ // 页面刷新重新拉取用户信息数据
+ if (userStore.getLastUpdateTime === 0) {
+ try {
+ await userStore.getUserInfoAction();
+ } catch (err) {
+ console.info(err);
+ next();
+ }
+ }
// 检测是否构建完路由与菜单
if (permissionStore.getIsDynamicAddedRoute) {
- // 用户个性化设置根路由调整地址(首页地址)
- if (from.path === ROOT_HOME && to.path === PageEnum.BASE_HOME && userStore.getUserInfo.homePath !== PageEnum.BASE_HOME) {
- return next(userStore.getUserInfo.homePath!);
- } else return next();
+ return next();
}
// 构建路由与菜单
const routes = await permissionStore.buildRoutesAction();
routes.forEach((route) => router.addRoute(route as unknown as RouteRecordRaw));
permissionStore.setDynamicAddedRoute(true);
// 动态添加路由后,此处应当重定向到fullPath,否则会加载404页面内容,添加query以免丢失
- if (to.name === PAGE_NOT_FOUND_NAME) {
+ if (to.name === PAGE_NOT_FOUND_ROUTE.name) {
next({ path: to.fullPath, replace: true, query: to.query });
} else {
const redirectPath = (from.query.redirect || to.path) as string;
diff --git a/src/router/guard/stateGuard.ts b/src/router/guard/stateGuard.ts
index 5c6cbda..05698c1 100644
--- a/src/router/guard/stateGuard.ts
+++ b/src/router/guard/stateGuard.ts
@@ -22,12 +22,11 @@ export function createStateGuard(router: Router) {
const userStore = useUserStore();
const appStore = useAppStore();
const permissionStore = usePermissionStore();
- appStore.resetAllState().then(()=>{
- permissionStore.resetState();
- tabStore.resetState();
- userStore.resetState();
- removeTabChangeListener();
- });
+ appStore.resetAllState();
+ permissionStore.resetState();
+ tabStore.resetState();
+ userStore.resetState();
+ removeTabChangeListener();
}
});
}
diff --git a/src/router/helper/menuHelper.ts b/src/router/helper/menuHelper.ts
index efe469d..6a8bf70 100644
--- a/src/router/helper/menuHelper.ts
+++ b/src/router/helper/menuHelper.ts
@@ -11,7 +11,9 @@ import type { Menu, AppRouteRecordRaw } from '/@/router/types';
import { findPath, treeMap } from '/@/utils/helper/treeHelper';
import { cloneDeep } from 'lodash-es';
import { isUrl } from '/@/utils/is';
-import {usePermissionStore} from '/@/store/modules/permission';
+import { usePermissionStore } from '/@/store/modules/permission';
+import { RouteParams } from 'vue-router';
+import { toRaw } from 'vue';
/** 获取当前菜单的所有父菜单路径 */
export function getAllParentPath(treeData: T[], path: string) {
@@ -24,7 +26,7 @@ function joinNestedRoute(menus: Menu[], parentPath = '') {
for (let index = 0; index < menus.length; index++) {
const menu = menus[index];
// 请注意,以/开头的嵌套路径将被视为根路径与外嵌网页url不允许加入嵌套路由
- if (!(menu.path.startsWith('/') || isUrl(menu.path))) menu.path = `${parentPath}/${menu.path}`;
+ if (!(menu.path?.startsWith('/') || isUrl(menu.path))) menu.path = `${parentPath}/${menu.path}`;
// 递归处理子路由的拼接
if (menu?.children?.length) joinNestedRoute(menu.children, menu.meta?.hidePathForChildren ? parentPath : menu.path);
}
@@ -80,3 +82,25 @@ export async function getChildrenMenus(parentPath: string) {
}
return parent.children;
}
+
+/** 替换具有给定参数的配置菜单 */
+const menuParamRegex = /(?::)([\s\S]+?)((?=\/)|$)/g;
+export function configureDynamicParamsMenu(menu: Menu, params: RouteParams) {
+ const { path, paramPath } = toRaw(menu);
+ let realPath = paramPath ? paramPath : path;
+ const matchArr = realPath.match(menuParamRegex);
+
+ matchArr?.forEach((it) => {
+ const realIt = it.substr(1);
+ if (params[realIt]) {
+ realPath = realPath.replace(`:${realIt}`, params[realIt] as string);
+ }
+ });
+ // 保存原始参数路径
+ if (!paramPath && matchArr && matchArr.length > 0) {
+ menu.paramPath = path;
+ }
+ menu.path = realPath;
+ // children
+ menu.children?.forEach((item) => configureDynamicParamsMenu(item, params));
+}
diff --git a/src/router/helper/routeHelper.ts b/src/router/helper/routeHelper.ts
index b3107c5..d2b53c2 100644
--- a/src/router/helper/routeHelper.ts
+++ b/src/router/helper/routeHelper.ts
@@ -8,7 +8,7 @@
import type { AppRouteModule, AppRouteRecordRaw } from '/@/router/types';
import type { Router, RouteRecordNormalized } from 'vue-router';
-import { getParentLayout, LAYOUT, PARENT_LAYOUT_NAME } from '/@/router/constant';
+import { getParentLayout, LAYOUT, PARENT_LAYOUT_NAME, EXCEPTION_COMPONENT } from '/@/router/constant';
import { warn } from '/@/utils/log';
import { cloneDeep, omit } from 'lodash-es';
import { createRouter, createWebHashHistory } from 'vue-router';
@@ -17,51 +17,79 @@ const IFRAME = () => import('/@/views/core/iframe/FrameBlank.vue');
/** 布局组件Map */
const LayoutMap = new Map Promise>();
-LayoutMap.set('Layout', LAYOUT);
-LayoutMap.set('Iframe', IFRAME);
+LayoutMap.set('LAYOUT', LAYOUT);
+LayoutMap.set('IFRAME', IFRAME);
+LayoutMap.set('PARENTLAYOUT', getParentLayout as any);
/** 性能优化,避免多次加载views下的组件 */
let dynamicViewsModules: Record Promise>;
-/** 查找导入的views目录下的组件 */
-function findImportComponent(dynamicViewsModules: Record Promise>, component: string) {
+/** 动态导入的views目录下的组件 */
+function dynamicImport(dynamicViewsModules: Record Promise>, component: string) {
const keys = Object.keys(dynamicViewsModules);
// 检测同一个目录下是否存在多个名字相同的组件
const matchKeys = keys.filter((key) => {
- let k = key.replace('../../views/', '');
- const lastIndex = k.lastIndexOf('.');
- k = k.substring(0, lastIndex);
- return k === component;
+ const k = key.replace('../../views', '');
+ const startFlag = component.startsWith('/');
+ const endFlag = component.endsWith('.vue') || component.endsWith('.tsx');
+ const startIndex = startFlag ? 0 : 1;
+ const lastIndex = endFlag ? k.length : k.lastIndexOf('.');
+ return k.substring(startIndex, lastIndex) === component;
});
if (matchKeys?.length === 1) {
const matchKey = matchKeys[0];
return dynamicViewsModules[matchKey];
- }
- if (matchKeys?.length > 1) {
+ } else if (matchKeys?.length > 1) {
warn('请不要创建".vue"和".TSX"具有相同文件的文件名称在同一层次结构目录中在视图文件夹下,这将导致动态引入失败!');
return;
+ } else {
+ warn('在src/views/下找不到`' + component + '.vue` 或 `' + component + '.tsx`, 请自行创建!');
+ return EXCEPTION_COMPONENT;
}
}
-/** 将菜单对象变成路由对象 */
-export function transformObjToRoute(routeList: AppRouteModule[]) {
+/** 异步处理子路由组件 */
+function asyncImportRoute(routes: AppRouteRecordRaw[] | undefined) {
dynamicViewsModules = dynamicViewsModules || import.meta.glob('../../views/**/*.{vue,tsx}');
- routeList.forEach((item) => {
- const { component, children } = item;
+ if (!routes) return;
+ routes.forEach((item) => {
+ if (!item.component && item.meta?.frameSrc) {
+ item.component = 'IFRAME';
+ }
+ const { component, name } = item;
+ const { children } = item;
if (component) {
- const layoutFound = LayoutMap.get(component as string);
+ const layoutFound = LayoutMap.get(component.toUpperCase());
if (layoutFound) {
item.component = layoutFound;
- } else if (component == PARENT_LAYOUT_NAME) {
- item.component = getParentLayout();
- }else {
- item.component = findImportComponent(dynamicViewsModules, component as string);
+ } else {
+ item.component = dynamicImport(dynamicViewsModules, component as string);
}
+ } else if (name) {
+ // 当子路由组件为空时,可以认为是多级路由,将配置为父布局组件
+ item.component = getParentLayout();
}
- children && transformObjToRoute(children);
+ children && asyncImportRoute(children);
});
}
+/** 将后端菜单对象转变成路由对象 */
+export function transformObjToRoute(routeList: AppRouteModule[]) {
+ routeList.forEach((route) => {
+ const component = route.component as string;
+ if (component) {
+ // 处理转换根级路由
+ if (component.toUpperCase() === 'LAYOUT') {
+ route.component = LayoutMap.get(component.toUpperCase());
+ } else {
+ route.component = LAYOUT;
+ }
+ } else {
+ warn('请正确配置路由:' + route?.name + '的component属性');
+ }
+ route.children && asyncImportRoute(route.children);
+ });
+}
/**
* 将多级路由转换为 2 级路由,由于我只有LAYOUT布局组件中加入了RouterView可以显示组件
@@ -83,7 +111,6 @@ export function flatMultiLevelRoutes(routeModules: AppRouteModule[]) {
return modules;
}
-
/** 将所有多级路由全部提升为2级路由 */
function promoteRouteLevel(routeModule: AppRouteModule) {
// 使用vue-router拼接菜单
diff --git a/src/router/index.ts b/src/router/index.ts
index b8f1bd7..2643763 100644
--- a/src/router/index.ts
+++ b/src/router/index.ts
@@ -8,19 +8,19 @@
import type { RouteRecordRaw } from 'vue-router';
import type { App } from 'vue';
import { createRouter, createWebHashHistory } from 'vue-router';
-import { routesConfig } from './routes';
+import { basicRoutes } from './routes';
/** 固定路由,设置基础路由不需要被重置掉 */
-const AFFIX_NAME_LIST: string[] = [];
+const WHITE_NAME_LIST: string[] = [];
const getRouteNames = (array: any[]) => array.forEach((item) => {
- AFFIX_NAME_LIST.push(item.name);
+ WHITE_NAME_LIST.push(item.name);
getRouteNames(item.children || []);
-});getRouteNames(routesConfig);
+});getRouteNames(basicRoutes);
/** 应用配置的静态路由 */
export const router = createRouter({
- history: createWebHashHistory(import.meta.env.VITE_PUBLIC_PATH as string),
- routes: routesConfig as unknown as RouteRecordRaw[],
+ history: createWebHashHistory(import.meta.env.VITE_PUBLIC_PATH),
+ routes: basicRoutes as unknown as RouteRecordRaw[],
strict: true,
scrollBehavior: () => ({ left: 0, top: 0 }),
});
@@ -29,7 +29,7 @@ export const router = createRouter({
export function resetRouter() {
router.getRoutes().forEach((route) => {
const { name } = route;
- if (name && !AFFIX_NAME_LIST.includes(name as string)) {
+ if (name && !WHITE_NAME_LIST.includes(name as string)) {
router.hasRoute(name) && router.removeRoute(name);
}
});
diff --git a/src/router/routes/basic.ts b/src/router/routes/basic.ts
index d58aa7f..9e5effa 100644
--- a/src/router/routes/basic.ts
+++ b/src/router/routes/basic.ts
@@ -8,69 +8,48 @@
import type { AppRouteRecordRaw } from '/@/router/types';
import { REDIRECT_NAME, LAYOUT, EXCEPTION_COMPONENT, PAGE_NOT_FOUND_NAME } from '/@/router/constant';
-import { PageEnum } from '/@/enums/pageEnum';
-import { useI18n } from '/@/hooks/web/useI18n';
-const { t } = useI18n();
-/** 基础路由配置 */
-export const basicRoute: AppRouteRecordRaw[] = [
- {
- path: PageEnum.ROOT_HOME,
- name: 'Root',
- redirect: PageEnum.BASE_HOME,
- meta: {
- title: 'Root',
- }
+export const PAGE_NOT_FOUND_ROUTE: AppRouteRecordRaw = {
+ path: '/:path(.*)*',
+ name: PAGE_NOT_FOUND_NAME,
+ component: LAYOUT,
+ meta: {
+ title: 'ErrorPage',
+ hideBreadcrumb: true,
+ hideMenu: true,
},
- {
- path: '/login',
- name: 'Login',
- component: () => import('/@/views/core/login/Login.vue'),
- meta: {
- title: t('routes.basic.login'),
- }
- },
- {
- path: '/:path(.*)*',
- name: PAGE_NOT_FOUND_NAME,
- component: LAYOUT,
- meta: {
- title: 'ErrorPage',
- hideBreadcrumb: true,
- hideMenu: true,
+ children: [
+ {
+ path: '/:path(.*)*',
+ name: PAGE_NOT_FOUND_NAME,
+ component: EXCEPTION_COMPONENT,
+ meta: {
+ title: 'ErrorPage',
+ hideBreadcrumb: true,
+ hideMenu: true,
+ },
},
- children: [
- {
- path: '/:path(.*)*',
- name: PAGE_NOT_FOUND_NAME,
- component: EXCEPTION_COMPONENT,
- meta: {
- title: 'ErrorPage',
- hideBreadcrumb: true,
- hideMenu: true,
- }
- }
- ]
+ ],
+};
+
+export const REDIRECT_ROUTE: AppRouteRecordRaw = {
+ path: '/redirect',
+ component: LAYOUT,
+ name: 'RedirectTo',
+ meta: {
+ title: REDIRECT_NAME,
+ hideBreadcrumb: true,
+ hideMenu: true,
},
- {
- path: '/redirect',
- name: REDIRECT_NAME,
- component: LAYOUT,
- meta: {
- title: REDIRECT_NAME,
- hideBreadcrumb: true,
- hideMenu: true,
+ children: [
+ {
+ path: '/redirect/:path(.*)',
+ name: REDIRECT_NAME,
+ component: () => import('/@/views/core/redirect/index.vue'),
+ meta: {
+ title: REDIRECT_NAME,
+ hideBreadcrumb: true,
+ },
},
- children: [
- {
- path: '/redirect/:path(.*)',
- name: REDIRECT_NAME,
- component: () => import('/@/views/core/redirect/index.vue'),
- meta: {
- title: REDIRECT_NAME,
- hideBreadcrumb: true,
- }
- }
- ]
- }
-];
+ ],
+};
diff --git a/src/router/routes/index.ts b/src/router/routes/index.ts
index 93108ae..9679af1 100644
--- a/src/router/routes/index.ts
+++ b/src/router/routes/index.ts
@@ -5,20 +5,46 @@
* @create: 2022/4/9
*/
-import type { AppRouteModule } from '/@/router/types';
-import { basicRoute } from './basic';
+import type { AppRouteRecordRaw, AppRouteModule } from '/@/router/types';
+import { REDIRECT_ROUTE, PAGE_NOT_FOUND_ROUTE } from './basic';
+import { mainOutRoutes } from './mainOut';
+import { PageEnum } from '/@/enums/pageEnum';
+import { t } from '/@/hooks/web/useI18n';
+
const modules = import.meta.globEager('./modules/**/*.ts');
-const routeModuleList: AppRouteModule[] = [];
+export const routeModuleList: AppRouteModule[] = [];
Object.keys(modules).forEach((key) => {
- const mod = modules[key].default;
+ const mod = (modules as Recordable)[key].default;
if (mod) {
const modList = Array.isArray(mod) ? [...mod] : [mod];
routeModuleList.push(...modList);
}
});
-export const routesConfig = [
- ...basicRoute,
- ...routeModuleList
+// 根路由
+export const RootRoute: AppRouteRecordRaw = {
+ path: '/',
+ name: 'Root',
+ redirect: PageEnum.BASE_HOME,
+ meta: {
+ title: 'Root',
+ },
+};
+
+export const LoginRoute: AppRouteRecordRaw = {
+ path: '/login',
+ name: 'Login',
+ component: () => import('/@/views/core/login/Login.vue'),
+ meta: {
+ title: t('routes.basic.login'),
+ },
+};
+
+export const basicRoutes = [
+ LoginRoute,
+ RootRoute,
+ ...mainOutRoutes,
+ REDIRECT_ROUTE,
+ PAGE_NOT_FOUND_ROUTE,
];
diff --git a/src/router/routes/mainOut.ts b/src/router/routes/mainOut.ts
new file mode 100644
index 0000000..6ecbaed
--- /dev/null
+++ b/src/router/routes/mainOut.ts
@@ -0,0 +1,22 @@
+/**
+The routing of this file will not show the layout.
+It is an independent new page.
+the contents of the file still need to log in to access
+ */
+import type { AppRouteModule } from '/@/router/types';
+
+// test
+// http:ip:port/main-out
+export const mainOutRoutes: AppRouteModule[] = [
+ {
+ path: '/main-out',
+ name: 'MainOut',
+ component: () => import('/@/views/demo/main-out/index.vue'),
+ meta: {
+ title: 'MainOut',
+ ignoreAuth: true,
+ },
+ },
+];
+
+export const mainOutRouteNames = mainOutRoutes.map((item) => item.name);
diff --git a/src/router/types.ts b/src/router/types.ts
index 85538cd..9cd9ca8 100644
--- a/src/router/types.ts
+++ b/src/router/types.ts
@@ -1,7 +1,7 @@
import type { RouteRecordRaw, RouteMeta } from 'vue-router';
import { defineComponent } from 'vue';
-export type Component =
+export type Component =
| ReturnType
| (() => Promise)
| (() => Promise);
@@ -30,6 +30,10 @@ export interface Menu {
path: string;
+ paramPath?: string;
+
+ sort?: number;
+
disabled?: boolean;
children?: Menu[];
diff --git a/src/settings/componentSetting.ts b/src/settings/componentSetting.ts
index 5c9b1e6..4795d4f 100644
--- a/src/settings/componentSetting.ts
+++ b/src/settings/componentSetting.ts
@@ -10,7 +10,7 @@ import { useGlobSetting } from '/@/hooks/setting';
const { apiUrl } = useGlobSetting();
export default {
- // 基本表设置
+ // 基本表格
table: {
// 表单接口请求通用配置
fetchSetting: {
@@ -27,28 +27,39 @@ export default {
pageSizeOptions: ['10', '20', '50', '100'],
// 一页默认显示数量
defaultPageSize: 10,
+ // 默认大小
+ defaultSize: 'middle',
// 自定义通用排序功能
defaultSortFn: (sortInfo: SorterResult) => {
const { field, order } = sortInfo;
- return {
- // 传递给后端的排序字段
- field,
- // 传递给后台的排序方法 asc/desc
- order,
- };
+ if (field && order) {
+ return {
+ // 传递给后端的排序字段
+ field,
+ // 传递给后台的排序方法 asc/desc
+ order,
+ };
+ } else {
+ return {};
+ }
},
// 自定义通用过滤功能
defaultFilterFn: (data: Partial>) => {
return data;
},
},
- // 滚动条设置
+ // 基本表单
+ form: {
+ // 表单默认冒号
+ colon: true,
+ },
+ // 滚动条
scrollbar: {
// 是否使用原生滚动条
// 打开后menu、modal、drawer都会将弹出的滚动条改为native
native: false,
},
- // 地图设计器设置
+ // 地图设计器
mapDesigner: {
// 默认中心点
mapCenter: '112.919043, 28.288623',
diff --git a/src/settings/designSetting.ts b/src/settings/designSetting.ts
index 15bd7a3..5ec9864 100644
--- a/src/settings/designSetting.ts
+++ b/src/settings/designSetting.ts
@@ -11,28 +11,43 @@ export const darkMode = ThemeEnum.LIGHT;
/** 应用主题预设颜色 */
export const APP_PRESET_COLOR_LIST: string[] = [
- '#03ac54',
- '#0960bd',
'#0084f4',
+ '#0960bd',
+ '#009688',
+ '#536dfe',
+ '#ff5c93',
'#ee4f12',
'#0096c7',
+ '#9c27b0',
+ '#ff9800',
];
/** 导航栏预设颜色 */
export const HEADER_PRESET_BG_COLOR_LIST: string[] = [
'#ffffff',
- '#001624',
'#151515',
'#009688',
'#5172DC',
'#018ffb',
+ '#409eff',
+ '#e74c3c',
+ '#24292e',
+ '#394664',
+ '#001529',
+ '#383f45',
];
/** 侧边预设颜色 */
export const SIDE_BAR_BG_COLOR_LIST: string[] = [
- '#001624',
'#001529',
'#212121',
'#273352',
'#ffffff',
+ '#191b24',
+ '#191a23',
+ '#304156',
+ '#001628',
+ '#28333E',
+ '#344058',
+ '#383f45',
];
diff --git a/src/settings/encryptionSetting.ts b/src/settings/encryptionSetting.ts
index 2d5b0d3..da66a21 100644
--- a/src/settings/encryptionSetting.ts
+++ b/src/settings/encryptionSetting.ts
@@ -12,8 +12,8 @@ export const DEFAULT_CACHE_TIME = 60 * 60 * 24 * 7;
/** aes加密密钥 */
export const cacheCipher = {
- key: '_11111000001111@',
- iv: '@11111000001111_',
+ key: '_1024102410241024@',
+ iv: '@1024102410241024_',
};
/** 系统缓存是否使用aes加密 */
diff --git a/src/settings/projectSetting.ts b/src/settings/projectSetting.ts
index 5b538b1..04cfdb0 100644
--- a/src/settings/projectSetting.ts
+++ b/src/settings/projectSetting.ts
@@ -13,7 +13,7 @@ import {
ThemeEnum,
RouterTransitionEnum,
SettingButtonPositionEnum,
- SessionTimeoutProcessingEnum,
+ TabsThemeEnum,
} from '/@/enums/appEnum';
import { SIDE_BAR_BG_COLOR_LIST, HEADER_PRESET_BG_COLOR_LIST } from './designSetting';
import { primaryColor } from '../../build/config/themeConfig';
@@ -32,9 +32,6 @@ const setting: ProjectConfig = {
// 权限相关的缓存存储在 sessionStorage 或 localStorage
permissionCacheType: CacheTypeEnum.LOCAL,
- // 会话超时处理
- sessionTimeoutProcessing: SessionTimeoutProcessingEnum.ROUTE_JUMP,
-
// 颜色
themeColor: primaryColor,
@@ -80,10 +77,12 @@ const setting: ProjectConfig = {
menuSetting: {
// 侧边栏菜单背景颜色
bgColor: SIDE_BAR_BG_COLOR_LIST[0],
- // 是否修复左侧菜单
+ // 是否固定左侧菜单
fixed: true,
// 菜单折叠
collapsed: false,
+ // 当sider为响应式布局时隐藏
+ siderHidden: false,
// 折叠菜单时是否显示菜单名称
collapsedShowTitle: false,
// 是否可以拖动
@@ -98,7 +97,7 @@ const setting: ProjectConfig = {
// 菜单模式
mode: MenuModeEnum.INLINE,
// 菜单类型
- type: MenuTypeEnum.SIDEBAR,
+ type: MenuTypeEnum.MIX_SIDEBAR,
// 菜单主题
theme: ThemeEnum.DARK,
// 拆分菜单
@@ -112,9 +111,9 @@ const setting: ProjectConfig = {
// 切换页面以关闭菜单
closeMixSidebarOnChange: false,
// 模块打开方式'点击'|'悬停'
- mixSideTrigger: MixSidebarTriggerEnum.CLICK,
+ mixSideTrigger: MixSidebarTriggerEnum.HOVER,
// 固定扩展菜单
- mixSideFixed: false,
+ mixSideFixed: true,
},
// 多标签
@@ -122,6 +121,8 @@ const setting: ProjectConfig = {
cache: false,
// 打开
show: true,
+ // 标签页样式
+ theme: TabsThemeEnum.SMOOTH,
// 是否可以拖放排序选项卡
canDrag: true,
// 打开快速操作
@@ -146,7 +147,7 @@ const setting: ProjectConfig = {
openPageLoading: true,
// 是否打开顶部进度条
- openNProgress: false,
+ openNProgress: true,
},
// 是否开启KeepAlive缓存最好在开发时关闭,否则每次都需要清空缓存
@@ -156,7 +157,7 @@ const setting: ProjectConfig = {
lockTime: 0,
// 是否显示面包屑
- showBreadCrumb: true,
+ showBreadCrumb: false,
// 是否显示面包屑图标
showBreadCrumbIcon: false,
diff --git a/src/store/modules/multipleTab.ts b/src/store/modules/multipleTab.ts
index d5c050e..386f4eb 100644
--- a/src/store/modules/multipleTab.ts
+++ b/src/store/modules/multipleTab.ts
@@ -12,7 +12,7 @@ import { store } from '/@/store';
import { useGo, useRedo } from '/@/hooks/web/usePage';
import { Persistent } from '/@/utils/cache/persistent';
import { PageEnum } from '/@/enums/pageEnum';
-import { PAGE_NOT_FOUND_NAME, REDIRECT_NAME } from '/@/router/constant';
+import { PAGE_NOT_FOUND_ROUTE, REDIRECT_ROUTE } from '/@/router/routes/basic';
import { getRawRoute } from '/@/utils';
import { MULTIPLE_TABS_KEY } from '/@/enums/cacheEnum';
import projectSetting from '/@/settings/projectSetting';
@@ -29,6 +29,15 @@ function handleGotoPage(router: Router) {
go(unref(router.currentRoute).path, true);
}
+const getToTarget = (tabItem: RouteLocationNormalized) => {
+ const { params, path, query } = tabItem;
+ return {
+ params: params || {},
+ path,
+ query: query || {},
+ };
+};
+
const cacheTab = projectSetting.multiTabsSetting.cache;
export const useMultipleTabStore = defineStore({
@@ -101,13 +110,13 @@ export const useMultipleTabStore = defineStore({
},
/** 添加标签页 */
async addTab(route: RouteLocationNormalized) {
- const { path, name, fullPath, params, query } = getRawRoute(route);
+ const { path, name, fullPath, params, query, meta } = getRawRoute(route);
// 404页面不需要添加标签
if (
path === PageEnum.ERROR_PAGE ||
path === PageEnum.BASE_LOGIN ||
!name ||
- [REDIRECT_NAME, PAGE_NOT_FOUND_NAME].includes(name as string)
+ [REDIRECT_ROUTE.name, PAGE_NOT_FOUND_ROUTE.name].includes(name as string)
) return;
let updateIndex = -1;
// 现有页面,不要重复添加标签
@@ -124,20 +133,30 @@ export const useMultipleTabStore = defineStore({
curTab.fullPath = fullPath || curTab.fullPath;
this.tabList.splice(updateIndex, 1, curTab);
// 添加选项卡
- } else this.tabList.push(route);
+ } else {
+ // 获取动态路由打开数,超过 0 即代表需要控制打开数
+ const dynamicLevel = meta?.dynamicLevel ?? -1;
+ if (dynamicLevel > 0) {
+ // 如果动态路由层级大于 0 了,那么就要限制该路由的打开数限制了
+ // 首先获取到真实的路由,使用配置方式减少计算开销.
+ // const realName: string = path.match(/(\S*)\//)![1];
+ const realPath = meta?.realPath ?? '';
+ // 获取到已经打开的动态路由数, 判断是否大于某一个值
+ if (
+ this.tabList.filter((e) => e.meta?.realPath ?? '' === realPath).length >= dynamicLevel
+ ) {
+ // 关闭第一个
+ const index = this.tabList.findIndex((item) => item.meta.realPath === realPath);
+ index !== -1 && this.tabList.splice(index, 1);
+ }
+ }
+ this.tabList.push(route);
+ }
await this.updateCacheTab();
cacheTab && Persistent.setLocal(MULTIPLE_TABS_KEY, this.tabList);
},
/** 关闭标签页 */
async closeTab(tab: RouteLocationNormalized, router: Router) {
- const getToTarget = (tabItem: RouteLocationNormalized) => {
- const { params, path, query } = tabItem;
- return {
- params: params || {},
- path,
- query: query || {},
- };
- };
const close = (route: RouteLocationNormalized) => {
const { fullPath, meta: { affix } = {} } = route;
if (affix) return;
@@ -146,8 +165,12 @@ export const useMultipleTabStore = defineStore({
};
const { currentRoute, replace } = router;
const { path } = unref(currentRoute);
- // 关闭不是激活选项卡
- if (path !== tab.path) return close(tab);
+ if (path !== tab.path) {
+ // 关闭不是激活选项卡
+ close(tab);
+ this.updateCacheTab();
+ return;
+ }
// 关闭被激活选项卡
let toTarget: RouteLocationRaw = {};
const index = this.tabList.findIndex((item) => item.path === path);
@@ -173,7 +196,30 @@ export const useMultipleTabStore = defineStore({
/** 标签新增与删除回调处理,用于关闭标签页 */
async closeTabByKey(key: string, router: Router) {
const index = this.tabList.findIndex((item) => (item.fullPath || item.path) === key);
- index !== -1 && await this.closeTab(this.tabList[index], router);
+ if (index !== -1) {
+ await this.closeTab(this.tabList[index], router);
+ const { currentRoute, replace } = router;
+ // 检查当前路由是否存在于tabList中
+ const isActivated = this.tabList.findIndex((item) => {
+ return item.fullPath === currentRoute.value.fullPath;
+ });
+ // 如果当前路由不存在于TabList中,尝试切换到其它路由
+ if (isActivated === -1) {
+ let pageIndex;
+ if (index > 0) {
+ pageIndex = index - 1;
+ } else if (index < this.tabList.length - 1) {
+ pageIndex = index + 1;
+ } else {
+ pageIndex = -1;
+ }
+ if (pageIndex >= 0) {
+ const page = this.tabList[index - 1];
+ const toTarget = getToTarget(page);
+ await replace(toTarget);
+ }
+ }
+ }
},
/** 对选项卡进行排序 */
async sortTabs(oldIndex: number, newIndex: number) {
@@ -192,9 +238,9 @@ export const useMultipleTabStore = defineStore({
const affix = item?.meta?.affix ?? false;
if (!affix) pathList.push(item.fullPath);
}
- await this.bulkCloseTabs(pathList);
+ this.bulkCloseTabs(pathList);
}
- await this.updateCacheTab();
+ this.updateCacheTab();
handleGotoPage(router);
},
/** 关闭左侧标签并跳转 */
diff --git a/src/store/modules/permission.ts b/src/store/modules/permission.ts
index c09021e..d9b31fc 100644
--- a/src/store/modules/permission.ts
+++ b/src/store/modules/permission.ts
@@ -17,6 +17,10 @@ import { filter } from '/@/utils/helper/treeHelper';
import { listMenuRoute } from '/@/api/platform/core/controller/menu';
import { useMessage } from '/@/hooks/web/useMessage';
import { PageEnum } from '/@/enums/pageEnum';
+import { routeModuleList } from '/@/router/routes';
+import { unionWith } from 'lodash-es';
+import {isUrl} from "/@/utils/is";
+import {openWindow} from "/@/utils";
interface PermissionState {
// 路由是否动态添加
@@ -53,8 +57,8 @@ export const usePermissionStore = defineStore({
this.menuList = list;
list?.length > 0 && this.setLastBuildMenuTime();
},
- setLastBuildMenuTime(time?: number) {
- this.lastBuildMenuTime = time || new Date().getTime();
+ setLastBuildMenuTime() {
+ this.lastBuildMenuTime = new Date().getTime();
},
setDynamicAddedRoute(added: boolean) {
this.isDynamicAddedRoute = added;
@@ -62,7 +66,7 @@ export const usePermissionStore = defineStore({
resetState(): void {
this.setDynamicAddedRoute(false);
this.setMenuList([]);
- this.setLastBuildMenuTime(0);
+ this.lastBuildMenuTime = 0;
},
async buildRoutesAction(): Promise {
const { t } = useI18n();
@@ -77,6 +81,7 @@ export const usePermissionStore = defineStore({
const patchHomeAffix = (routes: AppRouteRecordRaw[]) => {
if (!routes || routes.length === 0) return;
let homePath: string = userStore.getUserInfo.homePath || PageEnum.BASE_HOME;
+
function patcher(routes: AppRouteRecordRaw[], parentPath = '') {
if (parentPath) parentPath = parentPath + '/';
routes.forEach((route: AppRouteRecordRaw) => {
@@ -95,24 +100,25 @@ export const usePermissionStore = defineStore({
}
try {
patcher(routes);
- } catch (e) {
- // 固定首页已处理完毕跳出循环
- return;
- }
+ } catch (e) {}
+ return;
};
/** 提示菜单正在加载中 */
- const { createMessage } = useMessage();
+ /*const { createMessage } = useMessage();
createMessage.loading({
content: t('sys.app.menuLoading'),
duration: 1,
- });
+ });*/
/** 构建菜单与路由 */
let routeList: AppRouteRecordRaw[] = [];
try {
routeList = await listMenuRoute();
+ // 处理后端的菜单路由对象,是否存在错误
transformObjToRoute(routeList);
+ // 合并静态模块路由,并且去除重复
+ routeList = unionWith(routeList, routeModuleList, (arrVal, othVal) => arrVal.path == othVal.path);
const menuList = transformRouteToMenu(routeList);
this.setMenuList(menuList);
// 过滤忽略路由配置项,只构建菜单不构建路由
diff --git a/src/store/modules/user.ts b/src/store/modules/user.ts
index 91cc2fd..44065f7 100644
--- a/src/store/modules/user.ts
+++ b/src/store/modules/user.ts
@@ -21,10 +21,11 @@ import defaultAvatar from '/@/assets/images/defaultAvatar.svg';
import { urlToBase64 } from '/@/utils/file/base64Conver';
import { useGlobSetting } from '/@/hooks/setting';
import { isUrl } from '/@/utils/is';
+import { h } from 'vue';
interface UserState {
userInfo: Nullable;
- sessionTimeout: boolean;
+ lastUpdateTime: number;
roleIds: string[];
permissions: string[];
access_token?: string;
@@ -36,8 +37,8 @@ export const useUserStore = defineStore({
state: (): UserState => ({
// 用户信息
userInfo: getAuthCache(USER_INFO_KEY),
- // 登录是否过期
- sessionTimeout: false,
+ // 最后一次性更新用户信息时间
+ lastUpdateTime: 0,
// 角色ID用于权限校验
roleIds: getAuthCache(ROLE_IDS_KEY),
// 按钮权限标识用于权限校验
@@ -49,16 +50,13 @@ export const useUserStore = defineStore({
}),
getters: {
getUserInfo(): User {
- return this.userInfo! || {};
+ return this.userInfo || {};
},
getAccessToken(): string {
- return this.access_token!;
+ return this.access_token;
},
getRefreshToken(): string {
- return this.refresh_token!;
- },
- getSessionTimeout(): boolean {
- return !!this.sessionTimeout;
+ return this.refresh_token;
},
getRoleIds(): string[] {
return this.roleIds;
@@ -66,6 +64,9 @@ export const useUserStore = defineStore({
getPermissions(): string[] {
return this.permissions;
},
+ getLastUpdateTime(): number {
+ return this.lastUpdateTime;
+ },
},
actions: {
setRoleIds(roleIds: string[]) {
@@ -86,14 +87,11 @@ export const useUserStore = defineStore({
},
setUserInfo(userInfo: Nullable) {
this.userInfo = userInfo;
+ this.lastUpdateTime = new Date().getTime();
setAuthCache(USER_INFO_KEY, userInfo);
},
- setSessionTimeout(flag: boolean) {
- this.sessionTimeout = flag;
- },
resetState(): void {
this.setUserInfo(null);
- this.setSessionTimeout(false);
this.setAccessToken('');
this.setRefreshToken('');
this.setRoleIds([]);
@@ -111,33 +109,33 @@ export const useUserStore = defineStore({
const { access_token, refresh_token } = data;
this.setAccessToken(access_token);
this.setRefreshToken(refresh_token);
- // 获取用户信息
- const userInfo = await this.getUserInfoAction();
- const sessionTimeout = this.sessionTimeout;
- if (sessionTimeout) {
- this.setSessionTimeout(false);
- } else if (goHome) {
- // 处理路由与菜单的构建,并且进行缓存
- const permissionStore = usePermissionStore();
- // 使用isDynamicAddedRoute字段做菜单路由缓存功能
- if (!permissionStore.isDynamicAddedRoute) {
- const routes = await permissionStore.buildRoutesAction();
- routes.forEach((route) => {
- router.addRoute(route as unknown as RouteRecordRaw);
- });
- permissionStore.setDynamicAddedRoute(true);
- }
- await router.replace(userInfo.homePath || PageEnum.BASE_HOME);
- }
- return userInfo;
+ return this.afterLoginAction(goHome);
} catch (error) {
return Promise.reject(error);
}
},
+ /** 登录成功后动作 */
+ async afterLoginAction(goHome?: boolean): Promise {
+ if (!this.getAccessToken) return null;
+ // 获取用户信息
+ const userInfo = await this.getUserInfoAction();
+ // 处理路由与菜单的构建,并且进行缓存
+ const permissionStore = usePermissionStore();
+ // 使用isDynamicAddedRoute字段做菜单路由缓存功能
+ if (!permissionStore.isDynamicAddedRoute) {
+ const routes = await permissionStore.buildRoutesAction();
+ routes.forEach((route) => {
+ router.addRoute(route as unknown as RouteRecordRaw);
+ });
+ permissionStore.setDynamicAddedRoute(true);
+ }
+ goHome && await router.replace(userInfo?.homePath || PageEnum.BASE_HOME);
+ return userInfo;
+ },
/** 获取用户信息 */
async getUserInfoAction(): Promise {
const { apiUrl } = useGlobSetting();
- const userInfo = await getUserInfo().catch(()=> this.resetState());
+ const userInfo = await getUserInfo();
userInfo.avatar = userInfo.avatar
? isUrl(userInfo.avatar)
? userInfo.avatar
@@ -166,8 +164,8 @@ export const useUserStore = defineStore({
const { t } = useI18n();
createConfirm({
iconType: 'warning',
- title: t('sys.app.logoutTip'),
- content: t('sys.app.logoutMessage'),
+ title: () => h('span', t('sys.app.logoutTip')),
+ content: () => h('span', t('sys.app.logoutMessage')),
onOk: async () => {
await this.logout(true);
}
diff --git a/src/utils/bem.ts b/src/utils/bem.ts
new file mode 100644
index 0000000..0ce7146
--- /dev/null
+++ b/src/utils/bem.ts
@@ -0,0 +1,59 @@
+/**
+ * @program: kicc-ui
+ * @description: 块元素修饰符命名工具
+ * @author: entfrm开发团队-王翔
+ * @create: 2022/4/8
+ */
+
+import { prefixCls } from '/@/settings/designSetting';
+
+type Mod = string | { [key: string]: any };
+type Mods = Mod | Mod[];
+
+export type BEM = ReturnType;
+
+function genBem(name: string, mods?: Mods): string {
+ if (!mods) {
+ return '';
+ }
+
+ if (typeof mods === 'string') {
+ return ` ${name}--${mods}`;
+ }
+
+ if (Array.isArray(mods)) {
+ return mods.reduce((ret, item) => ret + genBem(name, item), '');
+ }
+
+ return Object.keys(mods).reduce((ret, key) => ret + (mods[key] ? genBem(name, key) : ''), '');
+}
+
+/**
+ * bem helper
+ * b() // 'button'
+ * b('text') // 'button__text'
+ * b({ disabled }) // 'button button--disabled'
+ * b('text', { disabled }) // 'button__text button__text--disabled'
+ * b(['disabled', 'primary']) // 'button button--disabled button--primary'
+ */
+export function buildBEM(name: string) {
+ return (el?: Mods, mods?: Mods): Mods => {
+ if (el && typeof el !== 'string') {
+ mods = el;
+ el = '';
+ }
+
+ el = el ? `${name}__${el}` : name;
+
+ return `${el}${genBem(el, mods)}`;
+ };
+}
+
+export function createBEM(name: string) {
+ return [buildBEM(`${prefixCls}-${name}`)];
+}
+
+export function createNamespace(name: string) {
+ const prefixedName = `${prefixCls}-${name}`;
+ return [prefixedName, buildBEM(prefixedName)] as const;
+}
diff --git a/src/utils/cache/memory.ts b/src/utils/cache/memory.ts
index 8907b86..1fd6f05 100644
--- a/src/utils/cache/memory.ts
+++ b/src/utils/cache/memory.ts
@@ -56,7 +56,12 @@ export class Memory {
return value;
}
const now = new Date().getTime();
- item.time = now + this.alive;
+ /**
+ * Prevent overflow of the setTimeout Maximum delay value
+ * Maximum delay value 2,147,483,647 ms
+ * https://developer.mozilla.org/en-US/docs/Web/API/setTimeout#maximum_delay_value
+ */
+ item.time = expires > now ? expires : now + expires;
item.timeoutId = setTimeout(
() => {
this.remove(key);
diff --git a/src/utils/cipher.ts b/src/utils/cipher.ts
index bbd9ea1..2605073 100644
--- a/src/utils/cipher.ts
+++ b/src/utils/cipher.ts
@@ -5,9 +5,15 @@
* @create: 2022/4/8
*/
import { encrypt, decrypt } from 'crypto-js/aes';
+import { parse } from 'crypto-js/enc-utf8';
import { LoginParams } from '/@/api/platform/core/entity/user';
import * as CryptoJS from 'crypto-js';
import { encryptionLoginModel } from '/#/utils';
+import pkcs7 from 'crypto-js/pad-pkcs7';
+import ECB from 'crypto-js/mode-ecb';
+import md5 from 'crypto-js/md5';
+import UTF8 from 'crypto-js/enc-utf8';
+import Base64 from 'crypto-js/enc-base64';
export interface EncryptionParams {
key: string;
@@ -20,14 +26,18 @@ export class AesEncryption {
constructor(opt: Partial = {}) {
const { key, iv } = opt;
- this.key = CryptoJS.enc.Utf8.parse(key ?? '');
- this.iv = CryptoJS.enc.Utf8.parse(iv ?? '');
+ if (key) {
+ this.key = parse(key);
+ }
+ if (iv) {
+ this.iv = parse(iv);
+ }
}
get getOptions() {
return {
- mode: CryptoJS.mode.ECB,
- padding: CryptoJS.pad.Pkcs7,
+ mode: ECB,
+ padding: pkcs7,
iv: this.iv,
};
}
@@ -37,21 +47,21 @@ export class AesEncryption {
}
decryptByAES(cipherText: string) {
- return decrypt(cipherText, this.key, this.getOptions).toString(CryptoJS.enc.Utf8);
+ return decrypt(cipherText, this.key, this.getOptions).toString(UTF8);
}
}
export function encryptByBase64(cipherText: string) {
- return CryptoJS.enc.Utf8.parse(cipherText).toString(CryptoJS.enc.Base64);
+ return UTF8.parse(cipherText).toString(Base64);
}
export function decodeByBase64(cipherText: string) {
- return CryptoJS.enc.Base64.parse(cipherText).toString(CryptoJS.enc.Utf8);
+ return Base64.parse(cipherText).toString(UTF8);
}
export function encryptByMd5(password: string) {
- return CryptoJS.MD5(password).toString();
+ return md5(password).toString();
}
/** 登录加密处理,处理后台需要解密字符串,不加密密码,我后端会解码AES会解析成乱码,你就永远无法登录系统 */
diff --git a/src/utils/dateUtil.ts b/src/utils/dateUtil.ts
index c45b5b6..f264c37 100644
--- a/src/utils/dateUtil.ts
+++ b/src/utils/dateUtil.ts
@@ -5,22 +5,21 @@
* @create: 2022/4/8
*/
-import moment from 'moment';
+import dayjs from 'dayjs';
-const DATE_TIME_FORMAT = 'YYYY-MM-DD HH:mm';
-const DATE_FORMAT = 'YYYY-MM-DD ';
+const DATE_TIME_FORMAT = 'YYYY-MM-DD HH:mm:ss';
+const DATE_FORMAT = 'YYYY-MM-DD';
-export function formatToDateTime(
- date: moment.MomentInput = undefined,
- format = DATE_TIME_FORMAT
-): string {
- return moment(date).format(format);
+export function formatToDateTime(date?: dayjs.ConfigType, format = DATE_TIME_FORMAT): string {
+ return dayjs(date).format(format);
}
-export function formatToDate(date: moment.MomentInput = undefined, format = DATE_FORMAT): string {
- return moment(date).format(format);
+export function formatToDate(date?: dayjs.ConfigType, format = DATE_FORMAT): string {
+ return dayjs(date).format(format);
}
+export const dateUtil = dayjs;
+
/** 添加日期范围 */
export function convertDateRange(params: Recordable, dateRange: string[]): Recordable {
const search = params;
@@ -32,5 +31,3 @@ export function convertDateRange(params: Recordable, dateRange: string[]): Recor
}
return params;
}
-
-export const dateUtil = moment;
diff --git a/src/utils/helper/treeHelper.ts b/src/utils/helper/treeHelper.ts
index efc7370..203e25a 100644
--- a/src/utils/helper/treeHelper.ts
+++ b/src/utils/helper/treeHelper.ts
@@ -165,3 +165,18 @@ export function treeMapEach(data: any, { children = 'children', conversion }: {
};
}
}
+
+/**
+ * 递归遍历树结构
+ * @param treeDatas 树
+ * @param callBack 回调
+ * @param parentNode 父节点
+ */
+export function eachTree(treeDatas: any[], callBack: Fn, parentNode = {}) {
+ treeDatas.forEach((element) => {
+ const newNode = callBack(element, parentNode) || element;
+ if (element.children) {
+ eachTree(element.children, callBack, newNode);
+ }
+ });
+}
diff --git a/src/utils/helper/tsxHelper.tsx b/src/utils/helper/tsxHelper.tsx
index 1cfce02..3e72f31 100644
--- a/src/utils/helper/tsxHelper.tsx
+++ b/src/utils/helper/tsxHelper.tsx
@@ -36,7 +36,7 @@ export function extendSlots(slots: Slots, excludeKeys: string[] = []) {
if (excludeKeys.includes(key)) {
return null;
}
- ret[key] = () => getSlot(slots, key);
+ ret[key] = (data?: any) => getSlot(slots, key, data);
});
return ret;
}
diff --git a/src/utils/http/axios/Axios.ts b/src/utils/http/axios/Axios.ts
index 22f7f10..1633880 100644
--- a/src/utils/http/axios/Axios.ts
+++ b/src/utils/http/axios/Axios.ts
@@ -76,10 +76,8 @@ export class VAxios {
// 请求拦截器配置处理
this.axiosInstance.interceptors.request.use((config: AxiosRequestConfig) => {
// 如果开启了取消重复请求,则禁止取消重复请求
- const {
- headers: { ignoreCancelToken },
- } = config;
-
+ // @ts-ignore
+ const { ignoreCancelToken } = config.requestOptions;
const ignoreCancel =
ignoreCancelToken !== undefined
? ignoreCancelToken
@@ -109,7 +107,10 @@ export class VAxios {
// 响应结果拦截器错误捕获
responseInterceptorsCatch &&
isFunction(responseInterceptorsCatch) &&
- this.axiosInstance.interceptors.response.use(undefined, responseInterceptorsCatch);
+ this.axiosInstance.interceptors.response.use(undefined, (error) => {
+ // @ts-ignore
+ return responseInterceptorsCatch(this.axiosInstance, error);
+ });
}
/** 上传文件 */
@@ -152,7 +153,7 @@ export class VAxios {
transformConfigFormat(config: AxiosRequestConfig) {
const headers = config.headers || this.options.headers;
const contentType = headers?.['Content-Type'] || headers?.['content-type'];
- const arrayFormat = headers.arrayFormat || 'indices';
+ const arrayFormat:any = headers?.arrayFormat || 'indices';
if (config.method?.toUpperCase() === RequestEnum.POST && contentType === ContentTypeEnum.FORM_URLENCODED) {
// post请求参数处理
@@ -184,6 +185,11 @@ export class VAxios {
request(config: AxiosRequestConfig, options?: RequestOptions): Promise {
let conf: CreateAxiosOptions = cloneDeep(config);
+ // cancelToken 如果被深拷贝,会导致最外层无法使用cancel方法来取消请求
+ if(config.cancelToken){
+ conf.cancelToken = config.cancelToken
+ }
+
const transform = this.getTransform();
const { requestOptions } = this.options;
@@ -218,6 +224,9 @@ export class VAxios {
reject(requestCatchHook(e, opt));
return;
}
+ if (axios.isAxiosError(e)) {
+ // rewrite error message from axios in here
+ }
reject(e);
});
});
diff --git a/src/utils/http/axios/axiosRetry.ts b/src/utils/http/axios/axiosRetry.ts
new file mode 100644
index 0000000..c484c8a
--- /dev/null
+++ b/src/utils/http/axios/axiosRetry.ts
@@ -0,0 +1,33 @@
+/**
+ * @program: kicc-ui
+ * @description: 处理请求错误重试机制
+ * 可以实现同一个请求多次,最终只会有一个请求发生成功
+ * @author: entfrm开发团队-王翔
+ * @create: 2022/4/7
+ */
+
+import { AxiosError, AxiosInstance } from 'axios';
+
+export class AxiosRetry {
+
+ /** 重试 */
+ retry(axiosInstance: AxiosInstance, error: AxiosError) {
+ // @ts-ignore
+ const { config } = error.response;
+ const { waitTime, count } = config?.requestOptions?.retryRequest;
+ config.__retryCount = config.__retryCount || 0;
+ if (config.__retryCount >= count) {
+ return Promise.reject(error);
+ }
+ config.__retryCount += 1;
+ // 请求返回后config的header不正确造成重试请求失败,删除返回headers采用默认headers
+ delete config.headers;
+ return this.delay(waitTime).then(() => axiosInstance(config));
+ }
+
+ /** 延迟 */
+ private delay(waitTime: number) {
+ return new Promise((resolve) => setTimeout(resolve, waitTime));
+ }
+
+}
diff --git a/src/utils/http/axios/axiosTransform.ts b/src/utils/http/axios/axiosTransform.ts
index 2e2ba89..354e1ac 100644
--- a/src/utils/http/axios/axiosTransform.ts
+++ b/src/utils/http/axios/axiosTransform.ts
@@ -10,7 +10,6 @@ import type { RequestOptions, R } from '/#/axios';
export interface CreateAxiosOptions extends AxiosRequestConfig {
authenticationScheme?: string;
- urlPrefix?: string;
transform?: AxiosTransform;
requestOptions?: RequestOptions;
}
@@ -18,7 +17,7 @@ export interface CreateAxiosOptions extends AxiosRequestConfig {
export abstract class AxiosTransform {
/** 请求前的流程配置 */
- beforeRequestHook?: (config: CreateAxiosOptions, options: RequestOptions) => CreateAxiosOptions;
+ beforeRequestHook?: (config: AxiosRequestConfig, options: RequestOptions) => AxiosRequestConfig;
/** 请求成功处理 */
transformRequestHook?: (res: AxiosResponse, options: RequestOptions) => any;
@@ -27,7 +26,7 @@ export abstract class AxiosTransform {
requestCatchHook?: (e: Error, options: RequestOptions) => Promise;
/** 请求之前的拦截器 */
- requestInterceptors?: (config: CreateAxiosOptions, options: CreateAxiosOptions) => CreateAxiosOptions;
+ requestInterceptors?: (config: AxiosRequestConfig, options: CreateAxiosOptions) => AxiosRequestConfig;
/** 请求之后的拦截器 */
responseInterceptors?: (res: AxiosResponse) => AxiosResponse;
@@ -36,5 +35,5 @@ export abstract class AxiosTransform {
requestInterceptorsCatch?: (error: Error) => void;
/** 请求之后的拦截器错误处理 */
- responseInterceptorsCatch?: (error: Error) => void;
+ responseInterceptorsCatch?: (axiosInstance: AxiosResponse, error: Error) => void;
}
diff --git a/src/utils/http/axios/checkStatus.ts b/src/utils/http/axios/checkStatus.ts
index e092bd8..de3c3c6 100644
--- a/src/utils/http/axios/checkStatus.ts
+++ b/src/utils/http/axios/checkStatus.ts
@@ -9,12 +9,9 @@ import type { ErrorMessageMode } from '/#/axios';
import { useMessage } from '/@/hooks/web/useMessage';
import { useI18n } from '/@/hooks/web/useI18n';
import { useUserStoreWithOut } from '/@/store/modules/user';
-import projectSetting from '/@/settings/projectSetting';
-import { SessionTimeoutProcessingEnum } from '/@/enums/appEnum';
const { createMessage, createErrorModal } = useMessage();
const error = createMessage.error!;
-const stp = projectSetting.sessionTimeoutProcessing;
export function checkStatus(status: number, msg: string, errorMessageMode: ErrorMessageMode = 'message'): boolean {
const { t } = useI18n();
@@ -44,13 +41,7 @@ export function checkStatus(status: number, msg: string, errorMessageMode: Error
case 424:
// token 过期特殊处理返回 424 不是 401
errMessage = t('sys.api.errMsg424');
- if (stp === SessionTimeoutProcessingEnum.PAGE_COVERAGE) {
- userStore.setAccessToken('');
- userStore.setRefreshToken('');
- userStore.setSessionTimeout(true);
- } else {
- userStore.logout(true);
- }
+ userStore.logout(true);
break;
case 426:
errMessage = t('sys.api.errMsg426');
diff --git a/src/utils/http/axios/helper.ts b/src/utils/http/axios/helper.ts
index e443447..2c35b77 100644
--- a/src/utils/http/axios/helper.ts
+++ b/src/utils/http/axios/helper.ts
@@ -7,11 +7,11 @@
import { isObject, isString } from '/@/utils/is';
-const DATE_TIME_FORMAT = 'YYYY-MM-DD HH:mm';
+const DATE_TIME_FORMAT = 'YYYY-MM-DD HH:mm:ss';
export function joinTimestamp(
join: boolean,
- restful: T
+ restful: T,
): T extends true ? string : object;
export function joinTimestamp(join: boolean, restful = false): string | object {
@@ -30,9 +30,9 @@ export function formatRequestDate(params: Recordable) {
if (Object.prototype.toString.call(params) !== '[object Object]') {
return;
}
-
for (const key in params) {
- if (params[key] && params[key]._isAMomentObject) {
+ const format = params[key]?.format ?? null;
+ if (format && typeof format === 'function') {
params[key] = params[key].format(DATE_TIME_FORMAT);
}
if (isString(key)) {
diff --git a/src/utils/http/axios/index.ts b/src/utils/http/axios/index.ts
index e4ed00a..59705b4 100644
--- a/src/utils/http/axios/index.ts
+++ b/src/utils/http/axios/index.ts
@@ -19,6 +19,8 @@ import { setObjToUrlParams, deepMerge } from '/@/utils';
import { t } from '/@/hooks/web/useI18n';
import { joinTimestamp, formatRequestDate } from './helper';
import { Base64 } from 'js-base64';
+import { AxiosRetry } from '/@/utils/http/axios/axiosRetry';
+import { clone } from 'lodash-es';
const globSetting = useGlobSetting();
const urlPrefix = globSetting.urlPrefix;
@@ -51,12 +53,11 @@ const transform: AxiosTransform = {
}
return data;
-
},
/** 请求之前处理config */
beforeRequestHook: (config, options) => {
- const { apiUrl, joinPrefix, joinParamsToUrl, formatDate, joinTime = true } = options;
+ const { apiUrl, joinPrefix, joinParamsToUrl, formatDate, joinTime = true, urlPrefix } = options;
if (joinPrefix) {
config.url = `${urlPrefix}${config.url}`;
@@ -80,7 +81,7 @@ const transform: AxiosTransform = {
} else {
if (!isString(params)) {
formatDate && formatRequestDate(params);
- if (Reflect.has(config, 'data') && config.data && Object.keys(config.data).length > 0) {
+ if (Reflect.has(config, 'data') && config.data && (Object.keys(config.data).length > 0 || config.data instanceof FormData)) {
config.data = data;
config.params = params;
} else {
@@ -108,7 +109,7 @@ const transform: AxiosTransform = {
// 请求之前处理config
const token = getAccessToken();
const { clientId, clientSecret } = globSetting;
- const { clientId: customClientId, clientSecret: customClientSecret } = config.requestOptions!;
+ const { clientId: customClientId , clientSecret: customClientSecret } = options?.requestOptions || {};
// 使用token进行请求
if (token && (config as Recordable)?.requestOptions?.withToken !== false) {
(config as Recordable).headers.Authorization = options.authenticationScheme
@@ -128,7 +129,7 @@ const transform: AxiosTransform = {
},
/** 响应错误处理 */
- responseInterceptorsCatch: (error: any) => {
+ responseInterceptorsCatch: (axiosInstance: AxiosResponse, error: any) => {
const { response, code, message, config } = error || {};
const errorMessageMode = config?.requestOptions?.errorMessageMode || 'none';
const err: string = response?.data?.msg?.toString?.() ?? '';
@@ -155,6 +156,15 @@ const transform: AxiosTransform = {
throw new Error(error);
}
}
+
+ // 添加自动重试机制 保险起见 只针对GET请求
+ const retryRequest = new AxiosRetry();
+ const { isOpenRetry } = config.requestOptions.retryRequest;
+ config.method?.toUpperCase() === RequestEnum.GET &&
+ isOpenRetry &&
+ // @ts-ignore
+ retryRequest.retry(axiosInstance, error);
+
return Promise.reject(error);
}
};
@@ -166,15 +176,15 @@ function createAxios(opt?: Partial) {
// 其他方案: https://developer.mozilla.org/en-US/docs/Web/HTTP/Authentication#authentication_schemes
authenticationScheme: 'Bearer',
timeout: 10 * 1000,
- // 接口可能会有通用的地址部分,可以统一抽取出来
- urlPrefix: urlPrefix,
headers: { 'Content-Type': ContentTypeEnum.JSON },
// 数据处理方式
- transform,
+ transform: clone(transform),
// 配置项,下面的选项都可以在独立的接口请求中覆盖
requestOptions: {
// 默认将prefix 添加到url
joinPrefix: true,
+ // 是否返回原生响应头 比如:需要获取响应头时使用该属性
+ isReturnNativeResponse: false,
// post请求的时候添加参数到url
joinParamsToUrl: false,
// 格式化提交参数时间
@@ -183,12 +193,20 @@ function createAxios(opt?: Partial) {
errorMessageMode: 'message',
// 接口地址
apiUrl: globSetting.apiUrl,
+ // 接口拼接地址
+ urlPrefix: urlPrefix,
// 是否加入时间戳
joinTime: true,
// 忽略重复请求
ignoreCancelToken: true,
// 是否携带token
withToken: true,
+ // 请求重试
+ retryRequest: {
+ isOpenRetry: true,
+ count: 5,
+ waitTime: 100,
+ },
},
}, opt || {})
);
diff --git a/src/utils/index.ts b/src/utils/index.ts
index 6a50dfd..98a0740 100644
--- a/src/utils/index.ts
+++ b/src/utils/index.ts
@@ -7,10 +7,10 @@
*/
import type { RouteLocationNormalized, RouteRecordNormalized } from 'vue-router';
-import type { App, Plugin } from 'vue';
+import type { App, Component } from 'vue';
import { unref } from 'vue';
import { isObject } from '/@/utils/is';
-import { isEmpty } from 'lodash-es';
+import { isEmpty, cloneDeep } from 'lodash-es';
export const noop = () => {};
@@ -42,10 +42,11 @@ export function setObjToUrlParams(baseUrl: string, obj: any): string {
export function deepMerge(src: any = {}, target: any = {}): T {
let key: string;
+ const res: any = cloneDeep(src);
for (key in target) {
- src[key] = isObject(src[key]) ? deepMerge(src[key], target[key]) : (src[key] = target[key]);
+ res[key] = isObject(res[key]) ? deepMerge(res[key], target[key]) : target[key];
}
- return src;
+ return res;
}
export function openWindow(
@@ -65,7 +66,7 @@ export function openWindow(
export function getDynamicProps(props: T): Partial {
const ret: Recordable = {};
- Object.keys(props).map((key) => {
+ Object.keys(props!).map((key) => {
ret[key] = unref((props as Recordable)[key]);
});
@@ -87,15 +88,31 @@ export function getRawRoute(route: RouteLocationNormalized): RouteLocationNormal
};
}
-export const withInstall = (component: T, alias?: string) => {
- const comp = component as any;
- comp.install = (app: App) => {
- app.component(comp.name || comp.displayName, component);
+// https://github.com/vant-ui/vant/issues/8302
+type EventShim = {
+ new (...args: any[]): {
+ $props: {
+ onClick?: (...args: any[]) => void;
+ };
+ };
+};
+
+export type WithInstall = T & {
+ install(app: App): void;
+} & EventShim;
+
+export type CustomComponent = Component & { displayName?: string };
+
+export const withInstall = (component: T, alias?: string) => {
+ (component as Record).install = (app: App) => {
+ const compName = component.name || component.displayName;
+ if (!compName) return;
+ app.component(compName, component);
if (alias) {
app.config.globalProperties[alias] = component;
}
};
- return component as T & Plugin;
+ return component as WithInstall;
};
@@ -103,7 +120,6 @@ export const withInstall = (component: T, alias?: string) => {
export const findListNameById = (id: string, list: any[], options: Partial<{ idField: string, nameField: string, childrenField: string }> = {}) => {
// 设置默认配置
options = Object.assign({ idField: 'id', nameField: 'name', childrenField: 'children' }, options);
- console.log(id, list, options);
for (let i = 0; i < list.length; i++) {
if (list[i][options.idField!] === id) {
return list[i][options.nameField!];
diff --git a/src/utils/lib/echarts.ts b/src/utils/lib/echarts.ts
index 1a3b16e..9bab9b6 100644
--- a/src/utils/lib/echarts.ts
+++ b/src/utils/lib/echarts.ts
@@ -14,6 +14,7 @@ import {
MapChart,
PictorialBarChart,
RadarChart,
+ ScatterChart,
} from 'echarts/charts';
import {
@@ -57,6 +58,7 @@ echarts.use([
TimelineComponent,
CalendarComponent,
GraphicComponent,
+ ScatterChart,
]);
export default echarts;
diff --git a/src/utils/props.ts b/src/utils/props.ts
new file mode 100644
index 0000000..6155b03
--- /dev/null
+++ b/src/utils/props.ts
@@ -0,0 +1,192 @@
+/**
+ * @program: kicc-ui
+ * @description: 能更好地优化类型,不用带 as PropType
+ * 参考: https://github.com/element-plus/element-plus/pull/3341#issuecomment-917619238
+ * copy from element-plus
+ * @author: entfrm开发团队-王翔
+ * @create: 2022/4/8
+ */
+
+import { warn } from 'vue';
+import { isObject } from '@vue/shared';
+import { fromPairs } from 'lodash-es';
+import type { ExtractPropTypes, PropType } from '@vue/runtime-core';
+import type { Mutable } from './types';
+
+const wrapperKey = Symbol();
+export type PropWrapper = { [wrapperKey]: T };
+
+export const propKey = Symbol();
+
+type ResolveProp = ExtractPropTypes<{
+ key: { type: T; required: true };
+}>['key'];
+type ResolvePropType = ResolveProp extends { type: infer V } ? V : ResolveProp;
+type ResolvePropTypeWithReadonly = Readonly extends Readonly>
+ ? ResolvePropType
+ : ResolvePropType;
+
+type IfUnknown = [unknown] extends [T] ? V : T;
+
+export type BuildPropOption, R, V, C> = {
+ type?: T;
+ values?: readonly V[];
+ required?: R;
+ default?: R extends true
+ ? never
+ : D extends Record | Array
+ ? () => D
+ : (() => D) | D;
+ validator?: ((val: any) => val is C) | ((val: any) => boolean);
+};
+
+type _BuildPropType =
+ | (T extends PropWrapper
+ ? T[typeof wrapperKey]
+ : [V] extends [never]
+ ? ResolvePropTypeWithReadonly
+ : never)
+ | V
+ | C;
+export type BuildPropType = _BuildPropType<
+ IfUnknown,
+ IfUnknown,
+ IfUnknown
+>;
+
+type _BuildPropDefault = [T] extends [
+ // eslint-disable-next-line @typescript-eslint/ban-types
+ Record | Array | Function,
+]
+ ? D
+ : D extends () => T
+ ? ReturnType
+ : D;
+
+export type BuildPropDefault = R extends true
+ ? { readonly default?: undefined }
+ : {
+ readonly default: Exclude extends never
+ ? undefined
+ : Exclude<_BuildPropDefault, undefined>;
+ };
+export type BuildPropReturn = {
+ readonly type: PropType>;
+ readonly required: IfUnknown;
+ readonly validator: ((val: unknown) => boolean) | undefined;
+ [propKey]: true;
+} & BuildPropDefault, IfUnknown, IfUnknown>;
+
+/**
+ * @description Build prop. It can better optimize prop types
+ * @description 生成 prop,能更好地优化类型
+ * @example
+ // limited options
+ // the type will be PropType<'light' | 'dark'>
+ buildProp({
+ type: String,
+ values: ['light', 'dark'],
+ } as const)
+ * @example
+ // limited options and other types
+ // the type will be PropType<'small' | 'medium' | number>
+ buildProp({
+ type: [String, Number],
+ values: ['small', 'medium'],
+ validator: (val: unknown): val is number => typeof val === 'number',
+ } as const)
+ @link see more: https://github.com/element-plus/element-plus/pull/3341
+ */
+export function buildProp<
+ T = never,
+ D extends BuildPropType = never,
+ R extends boolean = false,
+ V = never,
+ C = never,
+>(option: BuildPropOption, key?: string): BuildPropReturn {
+ // filter native prop type and nested prop, e.g `null`, `undefined` (from `buildProps`)
+ if (!isObject(option) || !!option[propKey]) return option as any;
+
+ const { values, required, default: defaultValue, type, validator } = option;
+
+ const _validator =
+ values || validator
+ ? (val: unknown) => {
+ let valid = false;
+ let allowedValues: unknown[] = [];
+
+ if (values) {
+ allowedValues = [...values, defaultValue];
+ valid ||= allowedValues.includes(val);
+ }
+ if (validator) valid ||= validator(val);
+
+ if (!valid && allowedValues.length > 0) {
+ const allowValuesText = [...new Set(allowedValues)]
+ .map((value) => JSON.stringify(value))
+ .join(', ');
+ warn(
+ `Invalid prop: validation failed${
+ key ? ` for prop "${key}"` : ''
+ }. Expected one of [${allowValuesText}], got value ${JSON.stringify(val)}.`,
+ );
+ }
+ return valid;
+ }
+ : undefined;
+
+ return {
+ type:
+ typeof type === 'object' && Object.getOwnPropertySymbols(type).includes(wrapperKey)
+ ? type?.[wrapperKey]
+ : type,
+ required: !!required,
+ default: defaultValue,
+ validator: _validator,
+ [propKey]: true,
+ } as unknown as BuildPropReturn;
+}
+
+type NativePropType = [((...args: any) => any) | { new (...args: any): any } | undefined | null];
+
+export const buildProps = <
+ O extends {
+ [K in keyof O]: O[K] extends BuildPropReturn
+ ? O[K]
+ : [O[K]] extends NativePropType
+ ? O[K]
+ : O[K] extends BuildPropOption
+ ? D extends BuildPropType
+ ? BuildPropOption
+ : never
+ : never;
+ },
+>(
+ props: O,
+) =>
+ fromPairs(
+ Object.entries(props).map(([key, option]) => [key, buildProp(option as any, key)]),
+ ) as unknown as {
+ [K in keyof O]: O[K] extends { [propKey]: boolean }
+ ? O[K]
+ : [O[K]] extends NativePropType
+ ? O[K]
+ : O[K] extends BuildPropOption<
+ infer T,
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
+ infer _D,
+ infer R,
+ infer V,
+ infer C
+ >
+ ? BuildPropReturn
+ : never;
+ };
+
+export const definePropType = (val: any) => ({ [wrapperKey]: val } as PropWrapper);
+
+export const keyOf = (arr: T) => Object.keys(arr!) as Array;
+export const mutable = >(val: T) =>
+ val as Mutable;
+
+export const componentSize = ['large', 'medium', 'small', 'mini'] as const;
diff --git a/src/utils/types.ts b/src/utils/types.ts
new file mode 100644
index 0000000..840b89b
--- /dev/null
+++ b/src/utils/types.ts
@@ -0,0 +1,49 @@
+/**
+ * @program: kicc-ui
+ * @description: 构建props所用到的类型
+ * 参考: https://github.com/element-plus/element-plus/blob/dec24ba69219e04e5bd31c480400a617997b44a7/packages/utils/types.ts
+ * copy from element-plus
+ * @author: entfrm开发团队-王翔
+ * @create: 2022/4/8
+ */
+
+import type { CSSProperties, Plugin } from 'vue';
+
+type OptionalKeys> = {
+ [K in keyof T]: T extends Record ? never : K;
+}[keyof T];
+
+type RequiredKeys> = Exclude>;
+
+type MonoArgEmitter = (evt: K, arg?: T[K]) => void;
+
+type BiArgEmitter = (evt: K, arg: T[K]) => void;
+
+export type EventEmitter> = MonoArgEmitter> &
+ BiArgEmitter>;
+
+export type AnyFunction = (...args: any[]) => T;
+
+export type PartialReturnType unknown> = Partial>;
+
+export type SFCWithInstall = T & Plugin;
+
+export type Nullable = T | null;
+
+export type RefElement = Nullable;
+
+export type CustomizedHTMLElement = HTMLElement & T;
+
+export type Indexable = {
+ [key: string]: T;
+};
+
+export type Hash = Indexable;
+
+export type TimeoutHandle = ReturnType;
+
+export type ComponentSize = 'large' | 'medium' | 'small' | 'mini';
+
+export type StyleValue = string | CSSProperties | Array;
+
+export type Mutable = { -readonly [P in keyof T]: T[P] };
diff --git a/src/views/common/project/project.data.ts b/src/views/common/project/project.data.ts
index a1037c4..3faf8d3 100644
--- a/src/views/common/project/project.data.ts
+++ b/src/views/common/project/project.data.ts
@@ -95,8 +95,8 @@ export const formSchema: FormSchema[] = [
component: 'TreeSelect',
defaultValue: '0',
componentProps: {
- replaceFields: {
- title: 'name',
+ fieldNames: {
+ label: 'name',
key: 'id',
value: 'id',
},
diff --git a/src/views/common/push/pushApplication/index.vue b/src/views/common/push/pushApplication/index.vue
index 95910e0..4547d89 100644
--- a/src/views/common/push/pushApplication/index.vue
+++ b/src/views/common/push/pushApplication/index.vue
@@ -81,9 +81,12 @@
rowKey: 'id',
columns,
formConfig: {
- labelWidth: 120,
+ compact: true,
+ labelWidth: 80,
schemas: searchFormSchema,
- autoSubmitOnEnter: true
+ autoSubmitOnEnter: true,
+ showAdvancedButton: true,
+ autoAdvancedLine: 3,
},
rowSelection: { type: 'checkbox' },
useSearchForm: true,
diff --git a/src/views/common/push/pushBlacklist/PassListModal.vue b/src/views/common/push/pushBlacklist/PassListModal.vue
index e26cd23..fb4262d 100644
--- a/src/views/common/push/pushBlacklist/PassListModal.vue
+++ b/src/views/common/push/pushBlacklist/PassListModal.vue
@@ -1,8 +1,9 @@
-
@@ -19,7 +20,7 @@
import { formSchema } from './passList.data';
import { addPushPassList, editPushPassList, getPushPassList } from '/@/api/platform/common/controller/pushPassList';
import { BasicModal, ModalProps, useModalInner } from '/@/components/Modal';
- import { useRoute } from "vue-router";
+ import { useRoute } from 'vue-router';
/** 通用变量统一声明区域 */
const tag = ref>('');
diff --git a/src/views/common/push/pushBlacklist/index.vue b/src/views/common/push/pushBlacklist/index.vue
index a7d0c6e..9448b2e 100644
--- a/src/views/common/push/pushBlacklist/index.vue
+++ b/src/views/common/push/pushBlacklist/index.vue
@@ -46,7 +46,7 @@
import PassListModal from './PassListModal.vue';
import { columns, searchFormSchema } from './passList.data';
import { useMessage } from '/@/hooks/web/useMessage';
- import { useRoute } from "vue-router";
+ import { useRoute } from 'vue-router';
/** 类型规范统一声明定义区域 */
interface TableState {
@@ -70,9 +70,12 @@
rowKey: 'id',
columns,
formConfig: {
- labelWidth: 120,
+ compact: true,
+ labelWidth: 100,
schemas: searchFormSchema,
- autoSubmitOnEnter: true
+ autoSubmitOnEnter: true,
+ showAdvancedButton: true,
+ autoAdvancedLine: 3,
},
rowSelection: { type: 'checkbox' },
useSearchForm: true,
diff --git a/src/views/common/push/pushCustomType/index.vue b/src/views/common/push/pushCustomType/index.vue
index b60a938..11402c1 100644
--- a/src/views/common/push/pushCustomType/index.vue
+++ b/src/views/common/push/pushCustomType/index.vue
@@ -73,9 +73,12 @@
rowKey: 'id',
columns,
formConfig: {
- labelWidth: 120,
+ compact: true,
+ labelWidth: 80,
schemas: searchFormSchema,
- autoSubmitOnEnter: true
+ autoSubmitOnEnter: true,
+ showAdvancedButton: true,
+ autoAdvancedLine: 3,
},
rowSelection: { type: 'checkbox' },
useSearchForm: true,
diff --git a/src/views/common/push/pushFile/index.vue b/src/views/common/push/pushFile/index.vue
index 1fbfb7c..73b64c3 100644
--- a/src/views/common/push/pushFile/index.vue
+++ b/src/views/common/push/pushFile/index.vue
@@ -83,9 +83,12 @@
rowKey: 'id',
columns,
formConfig: {
- labelWidth: 120,
+ compact: true,
+ labelWidth: 80,
schemas: searchFormSchema,
- autoSubmitOnEnter: true
+ autoSubmitOnEnter: true,
+ showAdvancedButton: true,
+ autoAdvancedLine: 3,
},
rowSelection: { type: 'checkbox' },
useSearchForm: true,
diff --git a/src/views/common/push/pushMessage/index.vue b/src/views/common/push/pushMessage/index.vue
index 29d35d9..3ebcb99 100644
--- a/src/views/common/push/pushMessage/index.vue
+++ b/src/views/common/push/pushMessage/index.vue
@@ -53,9 +53,12 @@
rowKey: 'id',
columns,
formConfig: {
- labelWidth: 120,
+ compact: true,
+ labelWidth: 80,
schemas: searchFormSchema,
- autoSubmitOnEnter: true
+ autoSubmitOnEnter: true,
+ showAdvancedButton: true,
+ autoAdvancedLine: 3,
},
rowSelection: { type: 'checkbox' },
useSearchForm: true,
diff --git a/src/views/common/push/pushThirdParty/index.vue b/src/views/common/push/pushThirdParty/index.vue
index ddab040..3295f3f 100644
--- a/src/views/common/push/pushThirdParty/index.vue
+++ b/src/views/common/push/pushThirdParty/index.vue
@@ -93,9 +93,12 @@
rowKey: 'id',
columns,
formConfig: {
- labelWidth: 120,
+ compact: true,
+ labelWidth: 80,
schemas: searchFormSchema,
- autoSubmitOnEnter: true
+ autoSubmitOnEnter: true,
+ showAdvancedButton: true,
+ autoAdvancedLine: 3,
},
rowSelection: { type: 'checkbox' },
useSearchForm: true,
diff --git a/src/views/common/push/pushTodoThirdParty/index.vue b/src/views/common/push/pushTodoThirdParty/index.vue
index 619cdfd..a0eca56 100644
--- a/src/views/common/push/pushTodoThirdParty/index.vue
+++ b/src/views/common/push/pushTodoThirdParty/index.vue
@@ -66,9 +66,16 @@
rowKey: 'id',
columns,
formConfig: {
- labelWidth: 120,
+ compact: true,
+ labelWidth: 80,
schemas: searchFormSchema,
- autoSubmitOnEnter: true
+ autoSubmitOnEnter: true,
+ showAdvancedButton: true,
+ autoAdvancedLine: 3,
+ rowProps: { gutter: 4 },
+ actionColOptions: {
+ style: { textAlign: 'left' },
+ }
},
rowSelection: { type: 'checkbox' },
useSearchForm: true,
diff --git a/src/views/common/push/pushTodoUserManage/index.vue b/src/views/common/push/pushTodoUserManage/index.vue
index 5a84a86..c449afd 100644
--- a/src/views/common/push/pushTodoUserManage/index.vue
+++ b/src/views/common/push/pushTodoUserManage/index.vue
@@ -70,9 +70,12 @@
rowKey: 'id',
columns,
formConfig: {
- labelWidth: 120,
+ compact: true,
+ labelWidth: 80,
schemas: searchFormSchema,
- autoSubmitOnEnter: true
+ autoSubmitOnEnter: true,
+ showAdvancedButton: true,
+ autoAdvancedLine: 3,
},
rowSelection: { type: 'checkbox' },
useSearchForm: true,
diff --git a/src/views/common/push/pushUserManage/index.vue b/src/views/common/push/pushUserManage/index.vue
index 6f1eb9f..999a25e 100644
--- a/src/views/common/push/pushUserManage/index.vue
+++ b/src/views/common/push/pushUserManage/index.vue
@@ -77,9 +77,12 @@
rowKey: 'id',
columns,
formConfig: {
- labelWidth: 120,
+ compact: true,
+ labelWidth: 80,
schemas: searchFormSchema,
- autoSubmitOnEnter: true
+ autoSubmitOnEnter: true,
+ showAdvancedButton: true,
+ autoAdvancedLine: 3,
},
rowSelection: { type: 'checkbox' },
useSearchForm: true,
diff --git a/src/views/common/push/pushWhitelist/index.vue b/src/views/common/push/pushWhitelist/index.vue
index 315cf4f..d1403f8 100644
--- a/src/views/common/push/pushWhitelist/index.vue
+++ b/src/views/common/push/pushWhitelist/index.vue
@@ -68,9 +68,12 @@
rowKey: 'id',
columns,
formConfig: {
- labelWidth: 120,
+ compact: true,
+ labelWidth: 100,
schemas: searchFormSchema,
- autoSubmitOnEnter: true
+ autoSubmitOnEnter: true,
+ showAdvancedButton: true,
+ autoAdvancedLine: 3,
},
rowSelection: { type: 'checkbox' },
useSearchForm: true,
diff --git a/src/views/core/lock/LockPage.vue b/src/views/core/lock/LockPage.vue
index 459af63..4a9367d 100644
--- a/src/views/core/lock/LockPage.vue
+++ b/src/views/core/lock/LockPage.vue
@@ -28,7 +28,7 @@
-
![]()
+
{{ userInfo.nickName }}
@@ -83,6 +83,7 @@
import { useDesign } from '/@/hooks/web/useDesign';
import { LockOutlined } from '@ant-design/icons-vue';
import { User } from '/@/api/platform/core/entity/user';
+ import defaultAvatar from '/@/assets/images/defaultAvatar.svg';
const InputPassword = Input.Password;
const password = ref('');
@@ -184,7 +185,7 @@
display: flex;
width: 100%;
height: 100%;
- background-color: rgba(0, 0, 0, 0.5);
+ background-color: rgb(0 0 0 / 50%);
backdrop-filter: blur(8px);
justify-content: center;
align-items: center;
diff --git a/src/views/core/lock/useNow.ts b/src/views/core/lock/useNow.ts
index 2fac748..13bcb22 100644
--- a/src/views/core/lock/useNow.ts
+++ b/src/views/core/lock/useNow.ts
@@ -1,11 +1,8 @@
import { dateUtil } from '/@/utils/dateUtil';
import { reactive, toRefs } from 'vue';
-import { useLocaleStore } from '/@/store/modules/locale';
import { tryOnMounted, tryOnUnmounted } from '@vueuse/core';
export function useNow(immediate = true) {
- const localeStore = useLocaleStore();
- const localData = dateUtil.localeData(localeStore.getLocale);
let timer: IntervalHandle;
const state = reactive({
@@ -28,13 +25,24 @@ export function useNow(immediate = true) {
state.year = now.get('y');
state.month = now.get('M') + 1;
- state.week = localData.weekdays()[now.day()];
- state.day = now.get('D');
+ state.week = '星期' + ['日', '一', '二', '三', '四', '五', '六'][now.day()];
+ state.day = now.get('date');
state.hour = h;
state.minute = m;
state.second = s;
- state.meridiem = localData.meridiem(Number(h), Number(h), true);
+ const hour = now.hour();
+ if (hour >= 0 && hour < 6) {
+ state.meridiem = '凌晨';
+ } else if (hour >= 6 && hour < 8) {
+ state.meridiem = '早晨';
+ } else if (hour >= 8 && hour < 12) {
+ state.meridiem = '上午';
+ } else if (hour >= 12 && hour < 18) {
+ state.meridiem = '下午';
+ } else {
+ state.meridiem = '晚上';
+ }
};
function start() {
diff --git a/src/views/core/login/Login.vue b/src/views/core/login/Login.vue
index 21ba475..159eb6a 100644
--- a/src/views/core/login/Login.vue
+++ b/src/views/core/login/Login.vue
@@ -1,12 +1,10 @@
-
-
+
@@ -58,12 +56,6 @@
import { useDesign } from '/@/hooks/web/useDesign';
import { useLocaleStore } from '/@/store/modules/locale';
- defineProps({
- sessionTimeout: {
- type: Boolean,
- },
- });
-
const globSetting = useGlobSetting();
const { prefixCls } = useDesign('login');
const { t } = useI18n();
diff --git a/src/views/core/login/LoginForm.vue b/src/views/core/login/LoginForm.vue
index 59c04bd..b4904be 100644
--- a/src/views/core/login/LoginForm.vue
+++ b/src/views/core/login/LoginForm.vue
@@ -113,7 +113,7 @@
const FormItem = Form.Item;
const InputPassword = Input.Password;
const { t } = useI18n();
- const { notification, createErrorModal } = useMessage();
+ const { notification } = useMessage();
const { prefixCls } = useDesign('login');
const userStore = useUserStore();
const { setLoginState, getLoginState } = useLoginState();
diff --git a/src/views/core/login/SessionTimeoutLogin.vue b/src/views/core/login/SessionTimeoutLogin.vue
deleted file mode 100644
index f48f56a..0000000
--- a/src/views/core/login/SessionTimeoutLogin.vue
+++ /dev/null
@@ -1,46 +0,0 @@
-
-
-
-
-
-
-
-
-
diff --git a/src/views/core/login/useLogin.ts b/src/views/core/login/useLogin.ts
index df8d163..4c670ef 100644
--- a/src/views/core/login/useLogin.ts
+++ b/src/views/core/login/useLogin.ts
@@ -1,4 +1,3 @@
-import type { ValidationRule } from 'ant-design-vue/lib/form/Form';
import type { RuleObject } from 'ant-design-vue/lib/form/interface';
import { ref, computed, unref, Ref } from 'vue';
import { useI18n } from '/@/hooks/web/useI18n';
@@ -62,7 +61,7 @@ export function useFormRules(formData?: Recordable) {
};
};
- const getFormRules = computed((): { [k: string]: ValidationRule | ValidationRule[] } => {
+ const getFormRules = computed((): { [k: string]: Recordable | Recordable[] } => {
const accountFormRule = unref(getAccountFormRule);
const passwordFormRule = unref(getPasswordFormRule);
const smsFormRule = unref(getSmsFormRule);
diff --git a/src/views/core/redirect/index.vue b/src/views/core/redirect/index.vue
index de11df7..4a7e07a 100644
--- a/src/views/core/redirect/index.vue
+++ b/src/views/core/redirect/index.vue
@@ -6,12 +6,25 @@
import { useRouter } from 'vue-router';
const { currentRoute, replace } = useRouter();
+
const { params, query } = unref(currentRoute);
- const { path } = params;
+ const { path, _redirect_type = 'path' } = params;
+
+ Reflect.deleteProperty(params, '_redirect_type');
+ Reflect.deleteProperty(params, 'path');
+
const _path = Array.isArray(path) ? path.join('/') : path;
- replace({
- path: '/' + _path,
- query,
- });
+ if (_redirect_type === 'name') {
+ replace({
+ name: _path,
+ query,
+ params,
+ });
+ } else {
+ replace({
+ path: _path.startsWith('/') ? _path : '/' + _path,
+ query,
+ });
+ }
diff --git a/src/views/dashboard/analysis/components/GrowCard.vue b/src/views/dashboard/analysis/components/GrowCard.vue
index 4aaa009..b63f8a7 100644
--- a/src/views/dashboard/analysis/components/GrowCard.vue
+++ b/src/views/dashboard/analysis/components/GrowCard.vue
@@ -3,21 +3,21 @@
{{ item.action }}
-
-
+
@@ -30,17 +30,15 @@
-
diff --git a/src/views/dashboard/analysis/components/SalesProductPie.vue b/src/views/dashboard/analysis/components/SalesProductPie.vue
index ec27397..c924b14 100644
--- a/src/views/dashboard/analysis/components/SalesProductPie.vue
+++ b/src/views/dashboard/analysis/components/SalesProductPie.vue
@@ -3,66 +3,62 @@
-
diff --git a/src/views/dashboard/analysis/components/SiteAnalysis.vue b/src/views/dashboard/analysis/components/SiteAnalysis.vue
index 16df708..0b0d3d9 100644
--- a/src/views/dashboard/analysis/components/SiteAnalysis.vue
+++ b/src/views/dashboard/analysis/components/SiteAnalysis.vue
@@ -1,8 +1,9 @@
-
@@ -12,31 +13,26 @@
-
diff --git a/src/views/dashboard/analysis/components/VisitAnalysis.vue b/src/views/dashboard/analysis/components/VisitAnalysis.vue
index d1140c1..a274dd7 100644
--- a/src/views/dashboard/analysis/components/VisitAnalysis.vue
+++ b/src/views/dashboard/analysis/components/VisitAnalysis.vue
@@ -1,109 +1,87 @@
-
diff --git a/src/views/dashboard/analysis/components/VisitAnalysisBar.vue b/src/views/dashboard/analysis/components/VisitAnalysisBar.vue
index 3173ef2..c5c41d2 100644
--- a/src/views/dashboard/analysis/components/VisitAnalysisBar.vue
+++ b/src/views/dashboard/analysis/components/VisitAnalysisBar.vue
@@ -1,61 +1,45 @@
-
diff --git a/src/views/dashboard/analysis/components/VisitRadar.vue b/src/views/dashboard/analysis/components/VisitRadar.vue
index 37e23bc..d307656 100644
--- a/src/views/dashboard/analysis/components/VisitRadar.vue
+++ b/src/views/dashboard/analysis/components/VisitRadar.vue
@@ -3,103 +3,92 @@
-
diff --git a/src/views/dashboard/analysis/components/VisitSource.vue b/src/views/dashboard/analysis/components/VisitSource.vue
index e2da402..8dadff2 100644
--- a/src/views/dashboard/analysis/components/VisitSource.vue
+++ b/src/views/dashboard/analysis/components/VisitSource.vue
@@ -3,85 +3,79 @@
-
diff --git a/src/views/dashboard/analysis/index.vue b/src/views/dashboard/analysis/index.vue
index a06ddff..0ec12bb 100644
--- a/src/views/dashboard/analysis/index.vue
+++ b/src/views/dashboard/analysis/index.vue
@@ -9,28 +9,17 @@
-
diff --git a/src/views/dashboard/workbench/components/DynamicInfo.vue b/src/views/dashboard/workbench/components/DynamicInfo.vue
index 483a8de..92b47a7 100644
--- a/src/views/dashboard/workbench/components/DynamicInfo.vue
+++ b/src/views/dashboard/workbench/components/DynamicInfo.vue
@@ -3,7 +3,7 @@
更多
-
+
@@ -20,16 +20,11 @@
-
diff --git a/src/views/dashboard/workbench/components/ProjectCard.vue b/src/views/dashboard/workbench/components/ProjectCard.vue
index 141926a..628d0b6 100644
--- a/src/views/dashboard/workbench/components/ProjectCard.vue
+++ b/src/views/dashboard/workbench/components/ProjectCard.vue
@@ -3,29 +3,28 @@
更多
-
-
-
-
- {{ item.title }}
-
- {{ item.desc }}
-
- {{ item.group }}
- {{ item.date }}
-
-
-
+
+
+
+
+ {{ item.title }}
+
+ {{ item.desc }}
+
+ {{ item.group }}
+ {{ item.date }}
+
+
diff --git a/src/views/dashboard/workbench/components/SaleRadar.vue b/src/views/dashboard/workbench/components/SaleRadar.vue
index c64131b..8256001 100644
--- a/src/views/dashboard/workbench/components/SaleRadar.vue
+++ b/src/views/dashboard/workbench/components/SaleRadar.vue
@@ -3,103 +3,92 @@
-
diff --git a/src/views/dashboard/workbench/components/WorkbenchHeader.vue b/src/views/dashboard/workbench/components/WorkbenchHeader.vue
index 32c2501..c7f0187 100644
--- a/src/views/dashboard/workbench/components/WorkbenchHeader.vue
+++ b/src/views/dashboard/workbench/components/WorkbenchHeader.vue
@@ -1,6 +1,6 @@
-
+
早安, {{ userinfo.nickName }}, 开始您一天的工作吧!
今日晴,20℃ - 32℃!
@@ -22,17 +22,12 @@
-
diff --git a/src/views/dashboard/workbench/components/data.ts b/src/views/dashboard/workbench/components/data.ts
index d22ed36..f03deb0 100644
--- a/src/views/dashboard/workbench/components/data.ts
+++ b/src/views/dashboard/workbench/components/data.ts
@@ -141,14 +141,14 @@ export const groupItems: GroupItem[] = [
title: 'React',
icon: 'bx:bxl-react',
color: '#00d8ff',
- desc: '健康的身体是实目标的基石。',
+ desc: '健康的身体是实现目标的基石。',
group: '技术牛',
date: '2021-04-01',
},
{
title: 'Js',
icon: 'ion:logo-javascript',
- color: '#4daf1bc9',
+ color: '#EBD94E',
desc: '路是走出来的,而不是空想出来的。',
group: '架构组',
date: '2021-04-01',
diff --git a/src/views/dashboard/workbench/index.vue b/src/views/dashboard/workbench/index.vue
index 321e118..c5eca5b 100644
--- a/src/views/dashboard/workbench/index.vue
+++ b/src/views/dashboard/workbench/index.vue
@@ -18,8 +18,8 @@
-
diff --git a/src/views/level/Menu111.vue b/src/views/demo/level/Menu111.vue
similarity index 100%
rename from src/views/level/Menu111.vue
rename to src/views/demo/level/Menu111.vue
diff --git a/src/views/level/Menu12.vue b/src/views/demo/level/Menu12.vue
similarity index 100%
rename from src/views/level/Menu12.vue
rename to src/views/demo/level/Menu12.vue
diff --git a/src/views/level/Menu2.vue b/src/views/demo/level/Menu2.vue
similarity index 100%
rename from src/views/level/Menu2.vue
rename to src/views/demo/level/Menu2.vue
diff --git a/src/views/demo/main-out/index.vue b/src/views/demo/main-out/index.vue
new file mode 100644
index 0000000..b3e6633
--- /dev/null
+++ b/src/views/demo/main-out/index.vue
@@ -0,0 +1,6 @@
+
+
+
diff --git a/src/views/monitor/operLog/index.vue b/src/views/monitor/operLog/index.vue
index 4ee6ef3..5dcc24d 100644
--- a/src/views/monitor/operLog/index.vue
+++ b/src/views/monitor/operLog/index.vue
@@ -73,9 +73,6 @@
bordered: true,
clickToRowSelect: false,
showIndexColumn: false,
- tableSetting: {
- fullScreen: true
- },
actionColumn: {
width: 120,
title: '操作',
diff --git a/src/views/monitor/token/index.vue b/src/views/monitor/token/index.vue
index 4ffc704..8ddb226 100644
--- a/src/views/monitor/token/index.vue
+++ b/src/views/monitor/token/index.vue
@@ -36,9 +36,6 @@
showTableSetting: true,
bordered: true,
showIndexColumn: false,
- tableSetting: {
- fullScreen: true
- },
actionColumn: {
width: 120,
title: '操作',
diff --git a/src/views/system/client/index.vue b/src/views/system/client/index.vue
index 520de35..f7237ad 100644
--- a/src/views/system/client/index.vue
+++ b/src/views/system/client/index.vue
@@ -78,9 +78,12 @@
rowKey: 'clientId',
columns,
formConfig: {
- labelWidth: 120,
+ compact: true,
+ labelWidth: 100,
schemas: searchFormSchema,
autoSubmitOnEnter: true,
+ showAdvancedButton: true,
+ autoAdvancedLine: 3,
fieldMapToTime: [['dateRange', ['beginTime', 'endTime'], 'YYYY-MM-DD']]
},
rowSelection: { type: 'checkbox' },
diff --git a/src/views/system/config/ConfigModal.vue b/src/views/system/config/ConfigModal.vue
index 4d30532..48ca37d 100644
--- a/src/views/system/config/ConfigModal.vue
+++ b/src/views/system/config/ConfigModal.vue
@@ -13,8 +13,8 @@
:scrollToFirstError="true"
@keypress.enter="handleSubmit"
>
-
-
+
+
diff --git a/src/views/system/config/config.data.ts b/src/views/system/config/config.data.ts
index 2275b54..1808a64 100644
--- a/src/views/system/config/config.data.ts
+++ b/src/views/system/config/config.data.ts
@@ -6,10 +6,10 @@
*/
import { h } from 'vue';
import { Tag } from 'ant-design-vue';
-import { ColumnProps } from 'ant-design-vue/lib/table/interface';
+import { ColumnProps } from 'ant-design-vue/es/table';
/** 表格列配置 */
-export const columns: ColumnProps[] = [
+export const columns: ColumnProps[] = [
{
title: '参数名称',
align: 'center',
diff --git a/src/views/system/config/index.vue b/src/views/system/config/index.vue
index 4dc5189..98e9832 100644
--- a/src/views/system/config/index.vue
+++ b/src/views/system/config/index.vue
@@ -54,7 +54,7 @@
{{ '参数配置列表' }}
-
+
删除参数
-
+
-
+
{
const propsData: Recordable = {
diff --git a/src/views/system/dept/dept.data.ts b/src/views/system/dept/dept.data.ts
index 91aa1ad..725298b 100644
--- a/src/views/system/dept/dept.data.ts
+++ b/src/views/system/dept/dept.data.ts
@@ -66,7 +66,7 @@ export const searchFormSchema: FormSchema[] = [
{ label: '停用', value: '1' }
]
},
- colProps: { span: 7 }
+ colProps: { span: 8 }
},
{
field: 'dateRange',
@@ -95,8 +95,8 @@ export const formSchema: FormSchema[] = [
component: 'TreeSelect',
defaultValue: '0',
componentProps: {
- replaceFields: {
- title: 'name',
+ fieldNames: {
+ label: 'name',
key: 'deptId',
value: 'deptId',
},
diff --git a/src/views/system/dept/index.vue b/src/views/system/dept/index.vue
index b7ad1b4..4ed1a38 100644
--- a/src/views/system/dept/index.vue
+++ b/src/views/system/dept/index.vue
@@ -62,9 +62,12 @@
rowKey: 'deptId',
columns,
formConfig: {
- labelWidth: 120,
+ compact: true,
+ labelWidth: 100,
schemas: searchFormSchema,
autoSubmitOnEnter: true,
+ showAdvancedButton: true,
+ autoAdvancedLine: 3,
fieldMapToTime: [['dateRange', ['beginTime', 'endTime'], 'YYYY-MM-DD']]
},
isTreeTable: true,
diff --git a/src/views/system/file/index.vue b/src/views/system/file/index.vue
index 1468514..9a67711 100644
--- a/src/views/system/file/index.vue
+++ b/src/views/system/file/index.vue
@@ -80,7 +80,7 @@
rowKey: 'id',
columns,
formConfig: {
- labelWidth: 120,
+ labelWidth: 80,
schemas: searchFormSchema,
autoSubmitOnEnter: true
},
diff --git a/src/views/system/menu/index.vue b/src/views/system/menu/index.vue
index fcb814c..6ac6214 100644
--- a/src/views/system/menu/index.vue
+++ b/src/views/system/menu/index.vue
@@ -67,9 +67,12 @@
rowKey: 'id',
columns,
formConfig: {
- labelWidth: 120,
+ compact: true,
+ labelWidth: 100,
schemas: searchFormSchema,
autoSubmitOnEnter: true,
+ showAdvancedButton: true,
+ autoAdvancedLine: 3,
fieldMapToTime: [['dateRange', ['beginTime', 'endTime'], 'YYYY-MM-DD']]
},
isTreeTable: true,
diff --git a/src/views/system/menu/menu.data.ts b/src/views/system/menu/menu.data.ts
index ce62920..85a5bbd 100644
--- a/src/views/system/menu/menu.data.ts
+++ b/src/views/system/menu/menu.data.ts
@@ -123,8 +123,8 @@ export const formSchema: FormSchema[] = [
required: true,
componentProps: {
allowClear: false,
- replaceFields: {
- title: 'name',
+ fieldNames: {
+ label: 'name',
key: 'id',
value: 'id'
},
diff --git a/src/views/system/region/index.vue b/src/views/system/region/index.vue
index 9d3df9a..7bead91 100644
--- a/src/views/system/region/index.vue
+++ b/src/views/system/region/index.vue
@@ -58,9 +58,12 @@
rowKey: 'id',
columns,
formConfig: {
- labelWidth: 120,
+ compact: true,
+ labelWidth: 100,
schemas: searchFormSchema,
autoSubmitOnEnter: true,
+ showAdvancedButton: true,
+ autoAdvancedLine: 3,
fieldMapToTime: [['dateRange', ['beginTime', 'endTime'], 'YYYY-MM-DD']]
},
isTreeTable: true,
diff --git a/src/views/system/region/region.data.ts b/src/views/system/region/region.data.ts
index 79748e7..3f24c03 100644
--- a/src/views/system/region/region.data.ts
+++ b/src/views/system/region/region.data.ts
@@ -71,8 +71,8 @@ export const regionFormSchema: FormSchema[] = [
component: 'TreeSelect',
defaultValue: '0',
componentProps: {
- replaceFields: {
- title: 'name',
+ fieldNames: {
+ label: 'name',
key: 'id',
value: 'id'
},
diff --git a/src/views/system/role/RoleDrawer.vue b/src/views/system/role/RoleDrawer.vue
index 5586db3..41e4373 100644
--- a/src/views/system/role/RoleDrawer.vue
+++ b/src/views/system/role/RoleDrawer.vue
@@ -13,7 +13,7 @@
toolbar
checkable
:treeData="state.menuTree"
- :replaceFields="{ title: 'name', key: 'id' }"
+ :fieldNames="{ title: 'name', key: 'id' }"
@check="handleHalfCheckedKeysMerge"
/>
diff --git a/src/views/system/role/index.vue b/src/views/system/role/index.vue
index 832b1a0..4116749 100644
--- a/src/views/system/role/index.vue
+++ b/src/views/system/role/index.vue
@@ -80,9 +80,12 @@
rowKey: 'id',
columns,
formConfig: {
- labelWidth: 120,
+ compact: true,
+ labelWidth: 100,
schemas: searchFormSchema,
- autoSubmitOnEnter: true
+ autoSubmitOnEnter: true,
+ showAdvancedButton: true,
+ autoAdvancedLine: 3,
},
rowSelection: { type: 'checkbox' },
useSearchForm: true,
diff --git a/src/views/system/role/role.data.ts b/src/views/system/role/role.data.ts
index 5187287..d789789 100644
--- a/src/views/system/role/role.data.ts
+++ b/src/views/system/role/role.data.ts
@@ -98,7 +98,7 @@ export const searchFormSchema: FormSchema[] = [
{ label: '停用', value: '1' }
]
},
- colProps: { span: 7 }
+ colProps: { span: 8 }
}
];
diff --git a/src/views/system/tenant/index.vue b/src/views/system/tenant/index.vue
index 542b44c..425f040 100644
--- a/src/views/system/tenant/index.vue
+++ b/src/views/system/tenant/index.vue
@@ -78,9 +78,12 @@
rowKey: 'id',
columns,
formConfig: {
- labelWidth: 120,
+ compact: true,
+ labelWidth: 100,
schemas: searchFormSchema,
- autoSubmitOnEnter: true
+ autoSubmitOnEnter: true,
+ showAdvancedButton: true,
+ autoAdvancedLine: 3,
},
rowSelection: { type: 'checkbox' },
useSearchForm: true,
diff --git a/src/views/system/user/DeptTree.vue b/src/views/system/user/DeptTree.vue
index 6a21f78..2218d33 100644
--- a/src/views/system/user/DeptTree.vue
+++ b/src/views/system/user/DeptTree.vue
@@ -1,11 +1,11 @@
-
+
diff --git a/src/views/system/user/account/setting/UserInfo.vue b/src/views/system/user/account/setting/UserInfo.vue
index 5f86cda..46fbb9d 100644
--- a/src/views/system/user/account/setting/UserInfo.vue
+++ b/src/views/system/user/account/setting/UserInfo.vue
@@ -34,7 +34,7 @@
import { commonUpload } from '/@/api/platform/core/controller/upload';
import { useContentHeight } from '/@/hooks/web/useContentHeight';
import { User } from '/@/api/platform/core/entity/user';
- import { isBase64image, isUrl } from '/@/utils/is';
+ import { isBase64image } from '/@/utils/is';
interface State {
baseInfoBtnLoading: boolean;
@@ -83,6 +83,7 @@
wrapperRef,
[],
[],
+ null,
ref(30));
const getContentStyle = computed((): CSSProperties => ({ minHeight: `${unref(contentHeight)}px` }));
diff --git a/src/views/system/user/account/setting/entCertification/index.vue b/src/views/system/user/account/setting/entCertification/index.vue
index 3d97416..fc330a0 100644
--- a/src/views/system/user/account/setting/entCertification/index.vue
+++ b/src/views/system/user/account/setting/entCertification/index.vue
@@ -40,6 +40,7 @@
wrapperRef,
[],
[],
+ null,
ref(30));
const getContentStyle = computed((): CSSProperties => ({ minHeight: `${unref(contentHeight)}px` }));
diff --git a/src/views/system/user/account/setting/index.vue b/src/views/system/user/account/setting/index.vue
index e5ae5c7..6fba003 100644
--- a/src/views/system/user/account/setting/index.vue
+++ b/src/views/system/user/account/setting/index.vue
@@ -1,19 +1,16 @@
-
-
+
+
-
- {{ item.name }}
+
+ {{item.name}}
-
+
@@ -22,7 +19,7 @@