commit 384930a892da9cb3c9d61a84942ba1770684f509 Author: 咬轮猫 <10928033@qq.com> Date: Sun Jan 12 21:43:06 2025 +0800 feat: 0.3.1版本开源 diff --git a/.eslintrc.cjs b/.eslintrc.cjs new file mode 100644 index 0000000..4895ec4 --- /dev/null +++ b/.eslintrc.cjs @@ -0,0 +1,24 @@ +/* eslint-env node */ +require('@rushstack/eslint-patch/modern-module-resolution'); + +module.exports = { + root: true, + extends: [ + 'plugin:vue/vue3-essential', + 'eslint:recommended', + '@vue/eslint-config-typescript', + '@vue/eslint-config-prettier' + // '@vue/eslint-config-prettier/skip-formatting' + ], + parserOptions: { + ecmaVersion: 'latest' + }, + rules: { + 'vue/multi-word-component-names': [ + 'error', + { + ignores: ['index', 'main'] + } + ] + } +}; diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..770b3a9 --- /dev/null +++ b/.gitignore @@ -0,0 +1,26 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +.DS_Store +dist +dist-ssr +coverage +*.local + +/cypress/videos/ +/cypress/screenshots/ + +# Editor directories and files +.idea +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/.prettierrc.json b/.prettierrc.json new file mode 100644 index 0000000..5eb97e4 --- /dev/null +++ b/.prettierrc.json @@ -0,0 +1,8 @@ +{ + "$schema": "https://json.schemastore.org/prettierrc", + "semi": true, + "tabWidth": 2, + "singleQuote": true, + "printWidth": 100, + "trailingComma": "none" +} \ No newline at end of file diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 0000000..009a534 --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,8 @@ +{ + "recommendations": [ + "Vue.volar", + "Vue.vscode-typescript-vue-plugin", + "dbaeumer.vscode-eslint", + "esbenp.prettier-vscode" + ] +} diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..b3ee840 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,9 @@ +{ + "editor.codeActionsOnSave": { + "source.fixAll.eslint": "explicit", + "eslint.autoFixOnSave": "explicit" + }, + "files.eol": "\n" + } + + \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..65c5ca8 --- /dev/null +++ b/LICENSE @@ -0,0 +1,165 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + + This version of the GNU Lesser General Public License incorporates +the terms and conditions of version 3 of the GNU General Public +License, supplemented by the additional permissions listed below. + + 0. Additional Definitions. + + As used herein, "this License" refers to version 3 of the GNU Lesser +General Public License, and the "GNU GPL" refers to version 3 of the GNU +General Public License. + + "The Library" refers to a covered work governed by this License, +other than an Application or a Combined Work as defined below. + + An "Application" is any work that makes use of an interface provided +by the Library, but which is not otherwise based on the Library. +Defining a subclass of a class defined by the Library is deemed a mode +of using an interface provided by the Library. + + A "Combined Work" is a work produced by combining or linking an +Application with the Library. The particular version of the Library +with which the Combined Work was made is also called the "Linked +Version". + + The "Minimal Corresponding Source" for a Combined Work means the +Corresponding Source for the Combined Work, excluding any source code +for portions of the Combined Work that, considered in isolation, are +based on the Application, and not on the Linked Version. + + The "Corresponding Application Code" for a Combined Work means the +object code and/or source code for the Application, including any data +and utility programs needed for reproducing the Combined Work from the +Application, but excluding the System Libraries of the Combined Work. + + 1. Exception to Section 3 of the GNU GPL. + + You may convey a covered work under sections 3 and 4 of this License +without being bound by section 3 of the GNU GPL. + + 2. Conveying Modified Versions. + + If you modify a copy of the Library, and, in your modifications, a +facility refers to a function or data to be supplied by an Application +that uses the facility (other than as an argument passed when the +facility is invoked), then you may convey a copy of the modified +version: + + a) under this License, provided that you make a good faith effort to + ensure that, in the event an Application does not supply the + function or data, the facility still operates, and performs + whatever part of its purpose remains meaningful, or + + b) under the GNU GPL, with none of the additional permissions of + this License applicable to that copy. + + 3. Object Code Incorporating Material from Library Header Files. + + The object code form of an Application may incorporate material from +a header file that is part of the Library. You may convey such object +code under terms of your choice, provided that, if the incorporated +material is not limited to numerical parameters, data structure +layouts and accessors, or small macros, inline functions and templates +(ten or fewer lines in length), you do both of the following: + + a) Give prominent notice with each copy of the object code that the + Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the object code with a copy of the GNU GPL and this license + document. + + 4. Combined Works. + + You may convey a Combined Work under terms of your choice that, +taken together, effectively do not restrict modification of the +portions of the Library contained in the Combined Work and reverse +engineering for debugging such modifications, if you also do each of +the following: + + a) Give prominent notice with each copy of the Combined Work that + the Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the Combined Work with a copy of the GNU GPL and this license + document. + + c) For a Combined Work that displays copyright notices during + execution, include the copyright notice for the Library among + these notices, as well as a reference directing the user to the + copies of the GNU GPL and this license document. + + d) Do one of the following: + + 0) Convey the Minimal Corresponding Source under the terms of this + License, and the Corresponding Application Code in a form + suitable for, and under terms that permit, the user to + recombine or relink the Application with a modified version of + the Linked Version to produce a modified Combined Work, in the + manner specified by section 6 of the GNU GPL for conveying + Corresponding Source. + + 1) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (a) uses at run time + a copy of the Library already present on the user's computer + system, and (b) will operate properly with a modified version + of the Library that is interface-compatible with the Linked + Version. + + e) Provide Installation Information, but only if you would otherwise + be required to provide such information under section 6 of the + GNU GPL, and only to the extent that such information is + necessary to install and execute a modified version of the + Combined Work produced by recombining or relinking the + Application with a modified version of the Linked Version. (If + you use option 4d0, the Installation Information must accompany + the Minimal Corresponding Source and Corresponding Application + Code. If you use option 4d1, you must provide the Installation + Information in the manner specified by section 6 of the GNU GPL + for conveying Corresponding Source.) + + 5. Combined Libraries. + + You may place library facilities that are a work based on the +Library side by side in a single library together with other library +facilities that are not Applications and are not covered by this +License, and convey such a combined library under terms of your +choice, if you do both of the following: + + a) Accompany the combined library with a copy of the same work based + on the Library, uncombined with any other library facilities, + conveyed under the terms of this License. + + b) Give prominent notice with the combined library that part of it + is a work based on the Library, and explaining where to find the + accompanying uncombined form of the same work. + + 6. Revised Versions of the GNU Lesser General Public License. + + The Free Software Foundation may publish revised and/or new versions +of the GNU Lesser General Public License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. + + Each version is given a distinguishing version number. If the +Library as you received it specifies that a certain numbered version +of the GNU Lesser General Public License "or any later version" +applies to it, you have the option of following the terms and +conditions either of that published version or of any later version +published by the Free Software Foundation. If the Library as you +received it does not specify a version number of the GNU Lesser +General Public License, you may choose any version of the GNU Lesser +General Public License ever published by the Free Software Foundation. + + If the Library as you received it specifies that a proxy can decide +whether future versions of the GNU Lesser General Public License shall +apply, that proxy's public statement of acceptance of any version is +permanent authorization for you to choose that version for the +Library. diff --git a/README.md b/README.md new file mode 100644 index 0000000..dde09cf --- /dev/null +++ b/README.md @@ -0,0 +1,70 @@ +# maotu-webtopo + +基于 vue3 的 web 组态引擎库 + +探索将已有 svg 文件转为自由缩放图形库的解决方案,也可用作低代码大屏项目开发 + +## 说明 + +此开源版本的代码源自于 [maotu 插件版](https://www.npmjs.com/package/maotu) 0.3.1 版本,与插件版的差异请查阅插件版的 readme。 + +## 使用文档 + +请参考:[http://mt.yaolm.top](http://mt.yaolm.top) + +## 声明 + +`maotu-webtopo` 使用了 `LGPL-3.0` 协议。这意味着: +* 您可以将 `maotu-webtopo` 作为库链接到您的商业项目,而无需开源您的整个项目。 +* 如果您修改了 `maotu-webtopo` 的**核心库**代码,并分发了修改后的版本,您必须按照 LGPL-3.0 协议的要求,开源您所做的修改。 +* 如果您仅仅是将`maotu-webtopo` 作为库链接到你的项目,而没有修改或分发它的源代码,那么你的项目无需开源。 + + 详细的 LGPL-3.0 许可证文本请查阅 [https://www.gnu.org/licenses/lgpl-3.0.html](https://www.gnu.org/licenses/lgpl-3.0.html)。 + +## 如何构建插件并使用 + +**构建库:** + +1. 使用 `pnpm run lib` 命令构建 `maotu-webtopo`,生成 `dist` 文件夹。 + +**使用库:** + +1. **推荐使用 pnpm 安装:** + + ```bash + pnpm i maotu # 前提是你已经发布到了 npm + ``` + + 如果选择手动复制,请继续参考以下步骤 +2. 将 `dist` 文件夹中的以下文件复制到你的项目: + * `dist/maotu.es.js`:库的入口文件。 + * `dist/style.css`:库的样式文件。 + * `dist/src` : 库的ts类型定义。 + * 将这些文件放到你项目中的合适位置。例如,你可以创建一个 `src/lib/maotu` 目录,并将它们复制到这里。 +3. 确保你的项目可以访问到 `style.css` 文件。可以通过在入口文件或组件中引入的方式来实现。 + +**在项目中使用示例:** + +```vue + + + + + +``` + +## 鸣谢 + +maotu的部分逻辑实现参考了以下大佬的文章 + +[幽月之格-可拖拽、缩放、旋转组件实现细节](https://juejin.cn/user/3597257779449165/posts) + +[woai3c-一个低代码(可视化拖拽)教学项目](https://github.com/woai3c/visual-drag-demo) + diff --git a/env.d.ts b/env.d.ts new file mode 100644 index 0000000..11f02fe --- /dev/null +++ b/env.d.ts @@ -0,0 +1 @@ +/// diff --git a/global.d.ts b/global.d.ts new file mode 100644 index 0000000..30d8317 --- /dev/null +++ b/global.d.ts @@ -0,0 +1,9 @@ +declare global { + interface Window { + $svgEventCallBack: (type: string, svg_item_id: string, ...args: any[]) => void; + $setItemAttrByID: (id: string, key: string, val: any) => Promise; + $getItemAttrByID: (id: string, key: string, val: any) => any; + $previewCompareVal: (val1: any, operator: '>' | '<' | '=' | '!=', val2: any) => boolean; + } +} +export {}; diff --git a/index.html b/index.html new file mode 100644 index 0000000..4c4159d --- /dev/null +++ b/index.html @@ -0,0 +1,13 @@ + + + + + + + MaoTu + + +
+ + + diff --git a/package.json b/package.json new file mode 100644 index 0000000..2a6414b --- /dev/null +++ b/package.json @@ -0,0 +1,68 @@ +{ + "name": "maotu", + "version": "0.3.1", + "private": false, + "scripts": { + "dev": "pnpm run format && vite", + "build": "run-p type-check \"build-only {@}\" --", + "preview": "vite preview", + "test:unit": "vitest", + "build-only": "vite build", + "type-check": "vue-tsc --noEmit -p tsconfig.vitest.json --composite false", + "lint": "eslint . --ext .vue,.js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix --ignore-path .gitignore", + "format": "prettier --write src/", + "lib": "vite build --mode lib", + "npm": "vite build --mode npm" + }, + "files": [ + "dist" + ], + "main": "./dist/maotu.umd.js", + "module": "./dist/maotu.es.js", + "exports": { + ".": { + "import": "./dist/maotu.es.js", + "require": "./dist/maotu.umd.js", + "types": "./dist/src/export.d.ts" + }, + "./*": "./*" + }, + "typings": "dist/export.d.ts", + "dependencies": { + "@vueuse/core": "^10.6.1", + "ace-builds": "^1.32.0", + "animate.css": "^4.1.1", + "canvg": "^4.0.1", + "echarts": "^5.4.3", + "element-plus": "^2.4.2", + "html2canvas": "^1.4.1", + "less": "^4.2.0", + "vue": "^3.3.4", + "vue-echarts": "^6.6.5", + "vue-router": "^4.2.5", + "vue3-ace-editor": "^2.2.4" + }, + "devDependencies": { + "@rushstack/eslint-patch": "^1.3.3", + "@tsconfig/node18": "^18.2.2", + "@types/jsdom": "^21.1.3", + "@types/node": "^18.18.5", + "@vitejs/plugin-vue": "^4.4.0", + "@vue/eslint-config-prettier": "^8.0.0", + "@vue/eslint-config-typescript": "^12.0.0", + "@vue/test-utils": "^2.4.1", + "@vue/tsconfig": "^0.4.0", + "eslint": "^8.49.0", + "eslint-plugin-vue": "^9.17.0", + "jsdom": "^22.1.0", + "npm-run-all2": "^6.1.1", + "prettier": "^3.0.3", + "typescript": "~5.2.0", + "unocss": "^0.57.4", + "vite": "^4.4.11", + "vite-plugin-dts": "^3.6.0", + "vite-plugin-svg-icons": "^2.0.1", + "vitest": "^0.34.6", + "vue-tsc": "^1.8.19" + } +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 0000000..aa42269 --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,5874 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + '@vueuse/core': + specifier: ^10.6.1 + version: 10.6.1(vue@3.3.4) + ace-builds: + specifier: ^1.32.0 + version: 1.32.0 + animate.css: + specifier: ^4.1.1 + version: 4.1.1 + canvg: + specifier: ^4.0.1 + version: 4.0.1 + echarts: + specifier: ^5.4.3 + version: https://registry.npmmirror.com/echarts/-/echarts-5.4.3.tgz + element-plus: + specifier: ^2.4.2 + version: 2.4.2(vue@3.3.4) + html2canvas: + specifier: ^1.4.1 + version: 1.4.1 + less: + specifier: ^4.2.0 + version: 4.2.0 + vue: + specifier: ^3.3.4 + version: 3.3.4 + vue-echarts: + specifier: ^6.6.5 + version: https://registry.npmmirror.com/vue-echarts/-/vue-echarts-6.6.5.tgz(echarts@https://registry.npmmirror.com/echarts/-/echarts-5.4.3.tgz)(vue@3.3.4) + vue-router: + specifier: ^4.2.5 + version: https://registry.npmmirror.com/vue-router/-/vue-router-4.2.5.tgz(vue@3.3.4) + vue3-ace-editor: + specifier: ^2.2.4 + version: 2.2.4(ace-builds@1.32.0)(vue@3.3.4) + devDependencies: + '@rushstack/eslint-patch': + specifier: ^1.3.3 + version: 1.3.3 + '@tsconfig/node18': + specifier: ^18.2.2 + version: 18.2.2 + '@types/jsdom': + specifier: ^21.1.3 + version: 21.1.3 + '@types/node': + specifier: ^18.18.5 + version: 18.18.5 + '@vitejs/plugin-vue': + specifier: ^4.4.0 + version: 4.4.0(vite@4.4.11(@types/node@18.18.5)(less@4.2.0))(vue@3.3.4) + '@vue/eslint-config-prettier': + specifier: ^8.0.0 + version: 8.0.0(eslint@8.49.0)(prettier@3.0.3) + '@vue/eslint-config-typescript': + specifier: ^12.0.0 + version: 12.0.0(eslint-plugin-vue@9.17.0(eslint@8.49.0))(eslint@8.49.0)(typescript@5.2.2) + '@vue/test-utils': + specifier: ^2.4.1 + version: 2.4.1(@vue/server-renderer@3.3.4(vue@3.3.4))(vue@3.3.4) + '@vue/tsconfig': + specifier: ^0.4.0 + version: 0.4.0 + eslint: + specifier: ^8.49.0 + version: 8.49.0 + eslint-plugin-vue: + specifier: ^9.17.0 + version: 9.17.0(eslint@8.49.0) + jsdom: + specifier: ^22.1.0 + version: 22.1.0 + npm-run-all2: + specifier: ^6.1.1 + version: 6.1.1 + prettier: + specifier: ^3.0.3 + version: 3.0.3 + typescript: + specifier: ~5.2.0 + version: 5.2.2 + unocss: + specifier: ^0.57.4 + version: 0.57.4(postcss@5.2.18)(rollup@3.29.4)(vite@4.4.11(@types/node@18.18.5)(less@4.2.0)) + vite: + specifier: ^4.4.11 + version: 4.4.11(@types/node@18.18.5)(less@4.2.0) + vite-plugin-dts: + specifier: ^3.6.0 + version: 3.6.3(@types/node@18.18.5)(rollup@3.29.4)(typescript@5.2.2)(vite@4.4.11(@types/node@18.18.5)(less@4.2.0)) + vite-plugin-svg-icons: + specifier: ^2.0.1 + version: 2.0.1(vite@4.4.11(@types/node@18.18.5)(less@4.2.0)) + vitest: + specifier: ^0.34.6 + version: 0.34.6(jsdom@22.1.0)(less@4.2.0) + vue-tsc: + specifier: ^1.8.19 + version: 1.8.19(typescript@5.2.2) + +packages: + + '@aashutoshrathi/word-wrap@1.2.6': + resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} + engines: {node: '>=0.10.0'} + + '@ampproject/remapping@2.2.1': + resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} + engines: {node: '>=6.0.0'} + + '@antfu/install-pkg@0.1.1': + resolution: {integrity: sha512-LyB/8+bSfa0DFGC06zpCEfs89/XoWZwws5ygEa5D+Xsm3OfI+aXQ86VgVG7Acyef+rSZ5HE7J8rrxzrQeM3PjQ==} + + '@antfu/utils@0.7.6': + resolution: {integrity: sha512-pvFiLP2BeOKA/ZOS6jxx4XhKzdVLHDhGlFEaZ2flWWYf2xOqVniqpk38I04DFRyz+L0ASggl7SkItTc+ZLju4w==} + + '@babel/code-frame@7.22.13': + resolution: {integrity: sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==} + engines: {node: '>=6.9.0'} + + '@babel/helper-string-parser@7.22.5': + resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.22.20': + resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} + engines: {node: '>=6.9.0'} + + '@babel/highlight@7.22.20': + resolution: {integrity: sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==} + engines: {node: '>=6.9.0'} + + '@babel/parser@7.23.3': + resolution: {integrity: sha512-uVsWNvlVsIninV2prNz/3lHCb+5CJ+e+IUBfbjToAHODtfGYLfCFuY4AU7TskI+dAKk+njsPiBjq1gKTvZOBaw==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/types@7.23.3': + resolution: {integrity: sha512-OZnvoH2l8PK5eUvEcUyCt/sXgr/h+UWpVuBbOljwcrAgUl6lpchoQ++PHGyQy1AtYnVA6CEq3y5xeEI10brpXw==} + engines: {node: '>=6.9.0'} + + '@ctrl/tinycolor@3.6.1': + resolution: {integrity: sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA==} + engines: {node: '>=10'} + + '@element-plus/icons-vue@2.1.0': + resolution: {integrity: sha512-PSBn3elNoanENc1vnCfh+3WA9fimRC7n+fWkf3rE5jvv+aBohNHABC/KAR5KWPecxWxDTVT1ERpRbOMRcOV/vA==} + peerDependencies: + vue: ^3.2.0 + + '@esbuild/android-arm64@0.18.20': + resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.18.20': + resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.18.20': + resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.18.20': + resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.18.20': + resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.18.20': + resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.18.20': + resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.18.20': + resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.18.20': + resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.18.20': + resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.18.20': + resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.18.20': + resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.18.20': + resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.18.20': + resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.18.20': + resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.18.20': + resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-x64@0.18.20': + resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-x64@0.18.20': + resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + + '@esbuild/sunos-x64@0.18.20': + resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.18.20': + resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.18.20': + resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.18.20': + resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + + '@eslint-community/eslint-utils@4.4.0': + resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + + '@eslint-community/regexpp@4.10.0': + resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + + '@eslint/eslintrc@2.1.3': + resolution: {integrity: sha512-yZzuIG+jnVu6hNSzFEN07e8BxF3uAzYtQb6uDkaYZLo6oYZDCq454c5kB8zxnzfCYyP4MIuyBn10L0DqwujTmA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + '@eslint/js@8.49.0': + resolution: {integrity: sha512-1S8uAY/MTJqVx0SC4epBq+N2yhuwtNwLbJYNZyhL2pO1ZVKn5HFXav5T41Ryzy9K9V7ZId2JB2oy/W4aCd9/2w==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + '@floating-ui/core@1.5.0': + resolution: {integrity: sha512-kK1h4m36DQ0UHGj5Ah4db7R0rHemTqqO0QLvUqi1/mUUp3LuAWbWxdxSIf/XsnH9VS6rRVPLJCncjRzUvyCLXg==} + + '@floating-ui/dom@1.5.3': + resolution: {integrity: sha512-ClAbQnEqJAKCJOEbbLo5IUlZHkNszqhuxS4fHAVxRPXPya6Ysf2G8KypnYcOTpx6I8xcgF9bbHb6g/2KpbV8qA==} + + '@floating-ui/utils@0.1.6': + resolution: {integrity: sha512-OfX7E2oUDYxtBvsuS4e/jSn4Q9Qb6DzgeYtsAdkPZ47znpoNsMgZw0+tVijiv3uGNR6dgNlty6r9rzIzHjtd/A==} + + '@humanwhocodes/config-array@0.11.13': + resolution: {integrity: sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==} + engines: {node: '>=10.10.0'} + + '@humanwhocodes/module-importer@1.0.1': + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + + '@humanwhocodes/object-schema@2.0.1': + resolution: {integrity: sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==} + + '@iconify/types@2.0.0': + resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==} + + '@iconify/utils@2.1.11': + resolution: {integrity: sha512-M/w3PkN8zQYXi8N6qK/KhnYMfEbbb6Sk8RZVn8g+Pmmu5ybw177RpsaGwpziyHeUsu4etrexYSWq3rwnIqzYCg==} + + '@jest/schemas@29.6.3': + resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jridgewell/gen-mapping@0.3.3': + resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} + engines: {node: '>=6.0.0'} + + '@jridgewell/resolve-uri@3.1.1': + resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} + engines: {node: '>=6.0.0'} + + '@jridgewell/set-array@1.1.2': + resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/sourcemap-codec@1.4.15': + resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + + '@jridgewell/trace-mapping@0.3.20': + resolution: {integrity: sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==} + + '@microsoft/api-extractor-model@7.28.2': + resolution: {integrity: sha512-vkojrM2fo3q4n4oPh4uUZdjJ2DxQ2+RnDQL/xhTWSRUNPF6P4QyrvY357HBxbnltKcYu+nNNolVqc6TIGQ73Ig==} + + '@microsoft/api-extractor@7.38.3': + resolution: {integrity: sha512-xt9iYyC5f39281j77JTA9C3ISJpW1XWkCcnw+2vM78CPnro6KhPfwQdPDfwS5JCPNuq0grm8cMdPUOPvrchDWw==} + hasBin: true + + '@microsoft/tsdoc-config@0.16.2': + resolution: {integrity: sha512-OGiIzzoBLgWWR0UdRJX98oYO+XKGf7tiK4Zk6tQ/E4IJqGCe7dvkTvgDZV5cFJUzLGDOjeAXrnZoA6QkVySuxw==} + + '@microsoft/tsdoc@0.14.2': + resolution: {integrity: sha512-9b8mPpKrfeGRuhFH5iO1iwCLeIIsV6+H1sRfxbkoGXIyQE2BTsPd9zqSqQJ+pv5sJ/hT5M1zvOFL02MnEezFug==} + + '@nodelib/fs.scandir@2.1.5': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + + '@nodelib/fs.stat@2.0.5': + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + '@nodelib/fs.walk@1.2.8': + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + + '@one-ini/wasm@0.1.1': + resolution: {integrity: sha512-XuySG1E38YScSJoMlqovLru4KTUNSjgVTIjyh7qMX6aNN5HY5Ct5LhRJdxO79JtTzKfzV/bnWpz+zquYrISsvw==} + + '@pkgr/utils@2.4.2': + resolution: {integrity: sha512-POgTXhjrTfbTV63DiFXav4lBHiICLKKwDeaKn9Nphwj7WH6m0hMMCaJkMyRWjgtPFyRKRVoMXXjczsTQRDEhYw==} + engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + + '@polka/url@1.0.0-next.23': + resolution: {integrity: sha512-C16M+IYz0rgRhWZdCmK+h58JMv8vijAA61gmz2rspCSwKwzBebpdcsiUmwrtJRdphuY30i6BSLEOP8ppbNLyLg==} + + '@rollup/pluginutils@5.0.5': + resolution: {integrity: sha512-6aEYR910NyP73oHiJglti74iRyOwgFU4x3meH/H8OJx6Ry0j6cOVZ5X/wTvub7G7Ao6qaHBEaNsV3GLJkSsF+Q==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + + '@rushstack/eslint-patch@1.3.3': + resolution: {integrity: sha512-0xd7qez0AQ+MbHatZTlI1gu5vkG8r7MYRUJAHPAHJBmGLs16zpkrpAVLvjQKQOqaXPDUBwOiJzNc00znHSCVBw==} + + '@rushstack/node-core-library@3.61.0': + resolution: {integrity: sha512-tdOjdErme+/YOu4gPed3sFS72GhtWCgNV9oDsHDnoLY5oDfwjKUc9Z+JOZZ37uAxcm/OCahDHfuu2ugqrfWAVQ==} + peerDependencies: + '@types/node': '*' + peerDependenciesMeta: + '@types/node': + optional: true + + '@rushstack/rig-package@0.5.1': + resolution: {integrity: sha512-pXRYSe29TjRw7rqxD4WS3HN/sRSbfr+tJs4a9uuaSIBAITbUggygdhuG0VrO0EO+QqH91GhYMN4S6KRtOEmGVA==} + + '@rushstack/ts-command-line@4.17.1': + resolution: {integrity: sha512-2jweO1O57BYP5qdBGl6apJLB+aRIn5ccIRTPDyULh0KMwVzFqWtw6IZWt1qtUoZD/pD2RNkIOosH6Cq45rIYeg==} + + '@sinclair/typebox@0.27.8': + resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} + + '@sxzz/popperjs-es@2.11.7': + resolution: {integrity: sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==} + + '@tootallnate/once@2.0.0': + resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} + engines: {node: '>= 10'} + + '@trysound/sax@0.2.0': + resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} + engines: {node: '>=10.13.0'} + + '@tsconfig/node18@18.2.2': + resolution: {integrity: sha512-d6McJeGsuoRlwWZmVIeE8CUA27lu6jLjvv1JzqmpsytOYYbVi1tHZEnwCNVOXnj4pyLvneZlFlpXUK+X9wBWyw==} + + '@types/argparse@1.0.38': + resolution: {integrity: sha512-ebDJ9b0e702Yr7pWgB0jzm+CX4Srzz8RcXtLJDJB+BSccqMa36uyH/zUsSYao5+BD1ytv3k3rPYCq4mAE1hsXA==} + + '@types/chai-subset@1.3.5': + resolution: {integrity: sha512-c2mPnw+xHtXDoHmdtcCXGwyLMiauiAyxWMzhGpqHC4nqI/Y5G2XhTampslK2rb59kpcuHon03UH8W6iYUzw88A==} + + '@types/chai@4.3.10': + resolution: {integrity: sha512-of+ICnbqjmFCiixUnqRulbylyXQrPqIGf/B3Jax1wIF3DvSheysQxAWvqHhZiW3IQrycvokcLcFQlveGp+vyNg==} + + '@types/estree@1.0.5': + resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} + + '@types/jsdom@21.1.3': + resolution: {integrity: sha512-1zzqSP+iHJYV4lB3lZhNBa012pubABkj9yG/GuXuf6LZH1cSPIJBqFDrm5JX65HHt6VOnNYdTui/0ySerRbMgA==} + + '@types/json-schema@7.0.15': + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + + '@types/lodash-es@4.17.12': + resolution: {integrity: sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==} + + '@types/lodash@4.14.202': + resolution: {integrity: sha512-OvlIYQK9tNneDlS0VN54LLd5uiPCBOp7gS5Z0f1mjoJYBrtStzgmJBxONW3U6OZqdtNzZPmn9BS/7WI7BFFcFQ==} + + '@types/node@18.18.5': + resolution: {integrity: sha512-4slmbtwV59ZxitY4ixUZdy1uRLf9eSIvBWPQxNjhHYWEtn0FryfKpyS2cvADYXTayWdKEIsJengncrVvkI4I6A==} + + '@types/normalize-package-data@2.4.4': + resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} + + '@types/offscreencanvas@2019.7.3': + resolution: {integrity: sha512-ieXiYmgSRXUDeOntE1InxjWyvEelZGP63M+cGuquuRLuIKKT1osnkXjxev9B7d1nXSug5vpunx+gNlbVxMlC9A==} + + '@types/raf@3.4.3': + resolution: {integrity: sha512-c4YAvMedbPZ5tEyxzQdMoOhhJ4RD3rngZIdwC2/qDN3d7JpEhB6fiBRKVY1lg5B7Wk+uPBjn5f39j1/2MY1oOw==} + + '@types/semver@7.5.5': + resolution: {integrity: sha512-+d+WYC1BxJ6yVOgUgzK8gWvp5qF8ssV5r4nsDcZWKRWcDQLQ619tvWAxJQYGgBrO1MnLJC7a5GtiYsAoQ47dJg==} + + '@types/svgo@2.6.4': + resolution: {integrity: sha512-l4cmyPEckf8moNYHdJ+4wkHvFxjyW6ulm9l4YGaOxeyBWPhBOT0gvni1InpFPdzx1dKf/2s62qGITwxNWnPQng==} + + '@types/tough-cookie@4.0.5': + resolution: {integrity: sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==} + + '@types/web-bluetooth@0.0.16': + resolution: {integrity: sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ==} + + '@types/web-bluetooth@0.0.20': + resolution: {integrity: sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==} + + '@typescript-eslint/eslint-plugin@6.11.0': + resolution: {integrity: sha512-uXnpZDc4VRjY4iuypDBKzW1rz9T5YBBK0snMn8MaTSNd2kMlj50LnLBABELjJiOL5YHk7ZD8hbSpI9ubzqYI0w==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/parser@6.11.0': + resolution: {integrity: sha512-+whEdjk+d5do5nxfxx73oanLL9ghKO3EwM9kBCkUtWMRwWuPaFv9ScuqlYfQ6pAD6ZiJhky7TZ2ZYhrMsfMxVQ==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/scope-manager@6.11.0': + resolution: {integrity: sha512-0A8KoVvIURG4uhxAdjSaxy8RdRE//HztaZdG8KiHLP8WOXSk0vlF7Pvogv+vlJA5Rnjj/wDcFENvDaHb+gKd1A==} + engines: {node: ^16.0.0 || >=18.0.0} + + '@typescript-eslint/type-utils@6.11.0': + resolution: {integrity: sha512-nA4IOXwZtqBjIoYrJcYxLRO+F9ri+leVGoJcMW1uqr4r1Hq7vW5cyWrA43lFbpRvQ9XgNrnfLpIkO3i1emDBIA==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/types@6.11.0': + resolution: {integrity: sha512-ZbEzuD4DwEJxwPqhv3QULlRj8KYTAnNsXxmfuUXFCxZmO6CF2gM/y+ugBSAQhrqaJL3M+oe4owdWunaHM6beqA==} + engines: {node: ^16.0.0 || >=18.0.0} + + '@typescript-eslint/typescript-estree@6.11.0': + resolution: {integrity: sha512-Aezzv1o2tWJwvZhedzvD5Yv7+Lpu1by/U1LZ5gLc4tCx8jUmuSCMioPFRjliN/6SJIvY6HpTtJIWubKuYYYesQ==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/utils@6.11.0': + resolution: {integrity: sha512-p23ibf68fxoZy605dc0dQAEoUsoiNoP3MD9WQGiHLDuTSOuqoTsa4oAy+h3KDkTcxbbfOtUjb9h3Ta0gT4ug2g==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + + '@typescript-eslint/visitor-keys@6.11.0': + resolution: {integrity: sha512-+SUN/W7WjBr05uRxPggJPSzyB8zUpaYo2hByKasWbqr3PM8AXfZt8UHdNpBS1v9SA62qnSSMF3380SwDqqprgQ==} + engines: {node: ^16.0.0 || >=18.0.0} + + '@unocss/astro@0.57.4': + resolution: {integrity: sha512-BP7+X/AlUFFMzr5s8bUpbO4HsWBESzIcPUE9VMA4bpSJIbXxi9GyJRU3Av72nbQp4BBeDjYiDT0qRa5gS0oPxw==} + peerDependencies: + vite: ^2.9.0 || ^3.0.0-0 || ^4.0.0 + peerDependenciesMeta: + vite: + optional: true + + '@unocss/cli@0.57.4': + resolution: {integrity: sha512-8g00ZV1iZIEmgSqmIycvEesIXt8KFQHUCI64D9cqf3UEcWgEoRqUZOjhVozHbhfDe+yg9s6D9E++arLn1wAvzg==} + engines: {node: '>=14'} + hasBin: true + + '@unocss/config@0.57.4': + resolution: {integrity: sha512-Si0fA6fb6kLymgWbXvgM50PtX8zKV5p+BMeAn17ihefnasjg0fdPe1Zgdj/QdLJpwIcJ5yOw3uFwVgrOYRqIfQ==} + engines: {node: '>=14'} + + '@unocss/core@0.57.4': + resolution: {integrity: sha512-JXufixa501p7+uwUkfG9voIUvNYXv58shZCKXO4Q9AojOzOMu6TDj35x8f3Sv5WFtZ3tp03sIETAfQRo7ksshw==} + + '@unocss/extractor-arbitrary-variants@0.57.4': + resolution: {integrity: sha512-BPvS2ePUrhGMSuEkNMnPcOcTC7SkrRblARwGk00PGGfCRSWhCi6Csz0oHvn2Qm8147hoQzkEwM74+dox8gcsxw==} + + '@unocss/inspector@0.57.4': + resolution: {integrity: sha512-0GV4g2/jXVf+5YKvm1g/ExQTeU5+Zfl2qhkzJXuUT7IigDrG+dAEuQ2oaTwXHpdtGfxdYWYS8Cbr7rxRsZU/Pg==} + + '@unocss/postcss@0.57.4': + resolution: {integrity: sha512-ggq8JS4rvgvW2QXjLGwg+m8e4YcmvOtbUS6C7UCrP8pmUqBCpbnTmLi6inpBbBuCN5WokecNZS5f3C4EwNMOMA==} + engines: {node: '>=14'} + peerDependencies: + postcss: ^8.4.21 + + '@unocss/preset-attributify@0.57.4': + resolution: {integrity: sha512-U23qV/f1jXClHZtzzqgZxWEuGZouAzsxXvbjui5WVgD/wrVIcStz6uJE929nNfR+ohV2owu86habxpwi9/0NCA==} + + '@unocss/preset-icons@0.57.4': + resolution: {integrity: sha512-c7vKYGAHfWa3eUIUswiQon1a9CXKT68uH4xgJ/EDcnCu+Og8AoA7iM+cesNDsLK4OlD4+qDjSvkGHW8of+u9cQ==} + + '@unocss/preset-mini@0.57.4': + resolution: {integrity: sha512-1wjiMIPq7yHO4vYAhNtwmYIUiXiZd5jHLbclX8aW7oKDKrKLm1UqezMLi+tuQqwDZGhoFJ6L6sYxONH5YxnRvA==} + + '@unocss/preset-tagify@0.57.4': + resolution: {integrity: sha512-qNcEwbbjNi6XifxbCI8AUUee2PF2FmgERKDZkUwxH42CA9ODnN3Lu+nvVXF5B623cImnUDtwa+8kuCAhRIQs8g==} + + '@unocss/preset-typography@0.57.4': + resolution: {integrity: sha512-kBSPI5gm1562X5DtALcst8F6S1OyN2olhYmhtCNZ7TQXVhPgUS1d7dYVxtPO6/2lqNJLimXnIagdEH8ZjcUeyw==} + + '@unocss/preset-uno@0.57.4': + resolution: {integrity: sha512-4pI4wxiPnDoo4KjU9deTmomNe4egJQTIrLWlpGStKb+d5ZS6S+zoRyR+XcSB8pKwa0Z1ZBA46OXAgMjtEVhVqw==} + + '@unocss/preset-web-fonts@0.57.4': + resolution: {integrity: sha512-cKEHr8xMdJJqJhgMrBLXb6KhtPNfmlaqR+uG1wfWMOh5qKvOawb21S6wYVu/MGgXfKin/iLyelnZIq0Q8y+b6g==} + + '@unocss/preset-wind@0.57.4': + resolution: {integrity: sha512-6jl+niNZtSFZmxvC0/27CvIJCLex9wjOQJy/x3vtYN1wcyKPZK90t+kx8Fxh2YN9ormiESCPeniv39PHgKpbJA==} + + '@unocss/reset@0.57.4': + resolution: {integrity: sha512-4i2d5SrERGDJmN18CY5pgkPqZ3PMvAoDHe7MSF1Eqtv4YW6CsxohrTmAJtS3B/2xw68ngtnbf0EFMbwyUwW+ug==} + + '@unocss/rule-utils@0.57.4': + resolution: {integrity: sha512-fwwlIkLZpVDstyvRFzObQkJT7kGUHr2o5AVD1X9io7GgN5UJzSQk0FHfnrN0M1QYUyqzFQJDd+s/pq6fTae+tA==} + engines: {node: '>=14'} + + '@unocss/scope@0.57.4': + resolution: {integrity: sha512-LGmRp/KQYgRSWQ5oYykD5FewUELc43IfFQx0H6aJmNtlqzm6q0VmRqMhR/2TPNp3o+pD6eYUrQ4WqbSsZoMRJA==} + + '@unocss/transformer-attributify-jsx-babel@0.57.4': + resolution: {integrity: sha512-SNM2f8C/H5HRPgdg9qAKN4nB8mTyhFt6qrTmoi8WgM6EKooz9XugIjCIQaMSzkDduML5ObqjlBbDIWRuCHOOUw==} + + '@unocss/transformer-attributify-jsx@0.57.4': + resolution: {integrity: sha512-Y7dvkAsveEFicgfmSQDc0AFNk6NeuuipgAYxJNS0xWH362V0+uELgxTZzicSznCj8kF7bkHUfyCKmR2J2gPcSg==} + + '@unocss/transformer-compile-class@0.57.4': + resolution: {integrity: sha512-7zwVnah1Pgrrf0ipHot2hRyJZqZKyf75FbGNFtUaXaahwt3h6uncwRYN0BDEu2tuoDBp9fF1CpZggmJcg8vDzw==} + + '@unocss/transformer-directives@0.57.4': + resolution: {integrity: sha512-AbmSmO5zDnup0tJYB4mlJBIXPuCruW/g3GVLHG6ztT/I6TanB9V5u5jNeIB+AAaF1TeoM7xPw97WhJmFeSIhRA==} + + '@unocss/transformer-variant-group@0.57.4': + resolution: {integrity: sha512-+KbSqEDCK2lziGJ8wnY4FhYxCSpONaxoKp/B0iTxc8sJ6tTfq2/GoRwnMy3miQTepjOBb6xfRY7ocF1BCjnpnQ==} + + '@unocss/vite@0.57.4': + resolution: {integrity: sha512-bVMftC1hzdlfRQOfllDuJ+bd5Z0/TOvPthNk8LyoHsnjAEH7FqspdCyPM3nQpnfqfYRocXiuLJv+KdQ2DLQWOQ==} + peerDependencies: + vite: ^2.9.0 || ^3.0.0-0 || ^4.0.0 + + '@vitejs/plugin-vue@4.4.0': + resolution: {integrity: sha512-xdguqb+VUwiRpSg+nsc2HtbAUSGak25DXYvpQQi4RVU1Xq1uworyoH/md9Rfd8zMmPR/pSghr309QNcftUVseg==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + vite: ^4.0.0 + vue: ^3.2.25 + + '@vitest/expect@0.34.6': + resolution: {integrity: sha512-QUzKpUQRc1qC7qdGo7rMK3AkETI7w18gTCUrsNnyjjJKYiuUB9+TQK3QnR1unhCnWRC0AbKv2omLGQDF/mIjOw==} + + '@vitest/runner@0.34.6': + resolution: {integrity: sha512-1CUQgtJSLF47NnhN+F9X2ycxUP0kLHQ/JWvNHbeBfwW8CzEGgeskzNnHDyv1ieKTltuR6sdIHV+nmR6kPxQqzQ==} + + '@vitest/snapshot@0.34.6': + resolution: {integrity: sha512-B3OZqYn6k4VaN011D+ve+AA4whM4QkcwcrwaKwAbyyvS/NB1hCWjFIBQxAQQSQir9/RtyAAGuq+4RJmbn2dH4w==} + + '@vitest/spy@0.34.6': + resolution: {integrity: sha512-xaCvneSaeBw/cz8ySmF7ZwGvL0lBjfvqc1LpQ/vcdHEvpLn3Ff1vAvjw+CoGn0802l++5L/pxb7whwcWAw+DUQ==} + + '@vitest/utils@0.34.6': + resolution: {integrity: sha512-IG5aDD8S6zlvloDsnzHw0Ut5xczlF+kv2BOTo+iXfPr54Yhi5qbVOgGB1hZaVq4iJ4C/MZ2J0y15IlsV/ZcI0A==} + + '@volar/language-core@1.10.10': + resolution: {integrity: sha512-nsV1o3AZ5n5jaEAObrS3MWLBWaGwUj/vAsc15FVNIv+DbpizQRISg9wzygsHBr56ELRH8r4K75vkYNMtsSNNWw==} + + '@volar/source-map@1.10.10': + resolution: {integrity: sha512-GVKjLnifV4voJ9F0vhP56p4+F3WGf+gXlRtjFZsv6v3WxBTWU3ZVeaRaEHJmWrcv5LXmoYYpk/SC25BKemPRkg==} + + '@volar/typescript@1.10.10': + resolution: {integrity: sha512-4a2r5bdUub2m+mYVnLu2wt59fuoYWe7nf0uXtGHU8QQ5LDNfzAR0wK7NgDiQ9rcl2WT3fxT2AA9AylAwFtj50A==} + + '@vue/compiler-core@3.3.4': + resolution: {integrity: sha512-cquyDNvZ6jTbf/+x+AgM2Arrp6G4Dzbb0R64jiG804HRMfRiFXWI6kqUVqZ6ZR0bQhIoQjB4+2bhNtVwndW15g==} + + '@vue/compiler-core@3.3.8': + resolution: {integrity: sha512-hN/NNBUECw8SusQvDSqqcVv6gWq8L6iAktUR0UF3vGu2OhzRqcOiAno0FmBJWwxhYEXRlQJT5XnoKsVq1WZx4g==} + + '@vue/compiler-dom@3.3.4': + resolution: {integrity: sha512-wyM+OjOVpuUukIq6p5+nwHYtj9cFroz9cwkfmP9O1nzH68BenTTv0u7/ndggT8cIQlnBeOo6sUT/gvHcIkLA5w==} + + '@vue/compiler-dom@3.3.8': + resolution: {integrity: sha512-+PPtv+p/nWDd0AvJu3w8HS0RIm/C6VGBIRe24b9hSyNWOAPEUosFZ5diwawwP8ip5sJ8n0Pe87TNNNHnvjs0FQ==} + + '@vue/compiler-sfc@3.3.4': + resolution: {integrity: sha512-6y/d8uw+5TkCuzBkgLS0v3lSM3hJDntFEiUORM11pQ/hKvkhSKZrXW6i69UyXlJQisJxuUEJKAWEqWbWsLeNKQ==} + + '@vue/compiler-ssr@3.3.4': + resolution: {integrity: sha512-m0v6oKpup2nMSehwA6Uuu+j+wEwcy7QmwMkVNVfrV9P2qE5KshC6RwOCq8fjGS/Eak/uNb8AaWekfiXxbBB6gQ==} + + '@vue/devtools-api@https://registry.npmmirror.com/@vue/devtools-api/-/devtools-api-6.5.1.tgz': + resolution: {integrity: sha512-+KpckaAQyfbvshdDW5xQylLni1asvNSGme1JFs8I1+/H5pHEhqUKMEQD/qn3Nx5+/nycBq11qAEi8lk+LXI2dA==, tarball: https://registry.npmmirror.com/@vue/devtools-api/-/devtools-api-6.5.1.tgz} + version: 6.5.1 + + '@vue/eslint-config-prettier@8.0.0': + resolution: {integrity: sha512-55dPqtC4PM/yBjhAr+yEw6+7KzzdkBuLmnhBrDfp4I48+wy+Giqqj9yUr5T2uD/BkBROjjmqnLZmXRdOx/VtQg==} + peerDependencies: + eslint: '>= 8.0.0' + prettier: '>= 3.0.0' + + '@vue/eslint-config-typescript@12.0.0': + resolution: {integrity: sha512-StxLFet2Qe97T8+7L8pGlhYBBr8Eg05LPuTDVopQV6il+SK6qqom59BA/rcFipUef2jD8P2X44Vd8tMFytfvlg==} + engines: {node: ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.2.0 || ^7.0.0 || ^8.0.0 + eslint-plugin-vue: ^9.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@vue/language-core@1.8.19': + resolution: {integrity: sha512-nt3dodGs97UM6fnxeQBazO50yYCKBK53waFWB3qMbLmR6eL3aUryZgQtZoBe1pye17Wl8fs9HysV3si6xMgndQ==} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@vue/language-core@1.8.22': + resolution: {integrity: sha512-bsMoJzCrXZqGsxawtUea1cLjUT9dZnDsy5TuZ+l1fxRMzUGQUG9+Ypq4w//CqpWmrx7nIAJpw2JVF/t258miRw==} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@vue/reactivity-transform@3.3.4': + resolution: {integrity: sha512-MXgwjako4nu5WFLAjpBnCj/ieqcjE2aJBINUNQzkZQfzIZA4xn+0fV1tIYBJvvva3N3OvKGofRLvQIwEQPpaXw==} + + '@vue/reactivity@3.3.4': + resolution: {integrity: sha512-kLTDLwd0B1jG08NBF3R5rqULtv/f8x3rOFByTDz4J53ttIQEDmALqKqXY0J+XQeN0aV2FBxY8nJDf88yvOPAqQ==} + + '@vue/reactivity@3.3.8': + resolution: {integrity: sha512-ctLWitmFBu6mtddPyOKpHg8+5ahouoTCRtmAHZAXmolDtuZXfjL2T3OJ6DL6ezBPQB1SmMnpzjiWjCiMYmpIuw==} + + '@vue/runtime-core@3.3.4': + resolution: {integrity: sha512-R+bqxMN6pWO7zGI4OMlmvePOdP2c93GsHFM/siJI7O2nxFRzj55pLwkpCedEY+bTMgp5miZ8CxfIZo3S+gFqvA==} + + '@vue/runtime-dom@3.3.4': + resolution: {integrity: sha512-Aj5bTJ3u5sFsUckRghsNjVTtxZQ1OyMWCr5dZRAPijF/0Vy4xEoRCwLyHXcj4D0UFbJ4lbx3gPTgg06K/GnPnQ==} + + '@vue/server-renderer@3.3.4': + resolution: {integrity: sha512-Q6jDDzR23ViIb67v+vM1Dqntu+HUexQcsWKhhQa4ARVzxOY2HbC7QRW/ggkDBd5BU+uM1sV6XOAP0b216o34JQ==} + peerDependencies: + vue: 3.3.4 + + '@vue/shared@3.3.4': + resolution: {integrity: sha512-7OjdcV8vQ74eiz1TZLzZP4JwqM5fA94K6yntPS5Z25r9HDuGNzaGdgvwKYq6S+MxwF0TFRwe50fIR/MYnakdkQ==} + + '@vue/shared@3.3.8': + resolution: {integrity: sha512-8PGwybFwM4x8pcfgqEQFy70NaQxASvOC5DJwLQfpArw1UDfUXrJkdxD3BhVTMS+0Lef/TU7YO0Jvr0jJY8T+mw==} + + '@vue/test-utils@2.4.1': + resolution: {integrity: sha512-VO8nragneNzUZUah6kOjiFmD/gwRjUauG9DROh6oaOeFwX1cZRUNHhdeogE8635cISigXFTtGLUQWx5KCb0xeg==} + peerDependencies: + '@vue/server-renderer': ^3.0.1 + vue: ^3.0.1 + peerDependenciesMeta: + '@vue/server-renderer': + optional: true + + '@vue/tsconfig@0.4.0': + resolution: {integrity: sha512-CPuIReonid9+zOG/CGTT05FXrPYATEqoDGNrEaqS4hwcw5BUNM2FguC0mOwJD4Jr16UpRVl9N0pY3P+srIbqmg==} + + '@vue/typescript@1.8.19': + resolution: {integrity: sha512-k/SHeeQROUgqsxyHQ8Cs3Zz5TnX57p7BcBDVYR2E0c61QL2DJ2G8CsaBremmNGuGE6o1R5D50IHIxFmroMz8iw==} + + '@vueuse/core@10.6.1': + resolution: {integrity: sha512-Pc26IJbqgC9VG1u6VY/xrXXfxD33hnvxBnKrLlA2LJlyHII+BSrRoTPJgGYq7qZOu61itITFUnm6QbacwZ4H8Q==} + + '@vueuse/core@9.13.0': + resolution: {integrity: sha512-pujnclbeHWxxPRqXWmdkKV5OX4Wk4YeK7wusHqRwU0Q7EFusHoqNA/aPhB6KCh9hEqJkLAJo7bb0Lh9b+OIVzw==} + + '@vueuse/metadata@10.6.1': + resolution: {integrity: sha512-qhdwPI65Bgcj23e5lpGfQsxcy0bMjCAsUGoXkJ7DsoeDUdasbZ2DBa4dinFCOER3lF4gwUv+UD2AlA11zdzMFw==} + + '@vueuse/metadata@9.13.0': + resolution: {integrity: sha512-gdU7TKNAUVlXXLbaF+ZCfte8BjRJQWPCa2J55+7/h+yDtzw3vOoGQDRXzI6pyKyo6bXFT5/QoPE4hAknExjRLQ==} + + '@vueuse/shared@10.6.1': + resolution: {integrity: sha512-TECVDTIedFlL0NUfHWncf3zF9Gc4VfdxfQc8JFwoVZQmxpONhLxFrlm0eHQeidHj4rdTPL3KXJa0TZCk1wnc5Q==} + + '@vueuse/shared@9.13.0': + resolution: {integrity: sha512-UrnhU+Cnufu4S6JLCPZnkWh0WwZGUp72ktOF2DFptMlOs3TOdVv8xJN53zhHGARmVOsz5KqOls09+J1NR6sBKw==} + + abab@2.0.6: + resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==} + + abbrev@1.1.1: + resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} + + ace-builds@1.32.0: + resolution: {integrity: sha512-5EFblRIaqjwumglq1o7hF9/rA9WZBqwn6eyfYB6ZiQbf036gF5CW3HqFk+7pRx3+1A4KsNMZUnN2NEfYrJTfDA==} + + acorn-jsx@5.3.2: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + acorn-walk@8.3.0: + resolution: {integrity: sha512-FS7hV565M5l1R08MXqo8odwMTB02C2UqzB17RVgu9EyuYFBqJZ3/ZY97sQD5FewVu1UyDFc1yztUDrAwT0EypA==} + engines: {node: '>=0.4.0'} + + acorn@8.11.2: + resolution: {integrity: sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==} + engines: {node: '>=0.4.0'} + hasBin: true + + agent-base@6.0.2: + resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} + engines: {node: '>= 6.0.0'} + + ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + + animate.css@4.1.1: + resolution: {integrity: sha512-+mRmCTv6SbCmtYJCN4faJMNFVNN5EuCTTprDTAo7YzIGji2KADmakjVA3+8mVDkZ2Bf09vayB35lSQIex2+QaQ==} + + ansi-regex@2.1.1: + resolution: {integrity: sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==} + engines: {node: '>=0.10.0'} + + 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'} + + ansi-styles@3.2.1: + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + ansi-styles@5.2.0: + resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} + engines: {node: '>=10'} + + ansi-styles@6.2.1: + resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} + engines: {node: '>=12'} + + anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + + argparse@1.0.10: + resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + arr-diff@4.0.0: + resolution: {integrity: sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==} + engines: {node: '>=0.10.0'} + + arr-flatten@1.1.0: + resolution: {integrity: sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==} + engines: {node: '>=0.10.0'} + + arr-union@3.1.0: + resolution: {integrity: sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==} + engines: {node: '>=0.10.0'} + + array-union@2.1.0: + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} + engines: {node: '>=8'} + + array-unique@0.3.2: + resolution: {integrity: sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==} + engines: {node: '>=0.10.0'} + + assertion-error@1.1.0: + resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} + + assign-symbols@1.0.0: + resolution: {integrity: sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==} + engines: {node: '>=0.10.0'} + + async-validator@4.2.5: + resolution: {integrity: sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==} + + asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + + atob@2.1.2: + resolution: {integrity: sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==} + engines: {node: '>= 4.5.0'} + hasBin: true + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + base64-arraybuffer@1.0.2: + resolution: {integrity: sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ==} + engines: {node: '>= 0.6.0'} + + base@0.11.2: + resolution: {integrity: sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==} + engines: {node: '>=0.10.0'} + + big-integer@1.6.51: + resolution: {integrity: sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==} + engines: {node: '>=0.6'} + + big.js@5.2.2: + resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==} + + binary-extensions@2.2.0: + resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} + engines: {node: '>=8'} + + bluebird@3.7.2: + resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==} + + boolbase@1.0.0: + resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} + + bplist-parser@0.2.0: + resolution: {integrity: sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==} + engines: {node: '>= 5.10.0'} + + brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + + brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + + braces@2.3.2: + resolution: {integrity: sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==} + engines: {node: '>=0.10.0'} + + braces@3.0.2: + resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} + engines: {node: '>=8'} + + bundle-name@3.0.0: + resolution: {integrity: sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==} + engines: {node: '>=12'} + + cac@6.7.14: + resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} + engines: {node: '>=8'} + + cache-base@1.0.1: + resolution: {integrity: sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==} + engines: {node: '>=0.10.0'} + + callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + + canvg@4.0.1: + resolution: {integrity: sha512-5gD/d6SiCCT7baLnVr0hokYe93DfcHW2rSqdKOuOQD84YMlyfttnZ8iQsThTdX6koYam+PROz/FuQTo500zqGw==} + engines: {node: '>=12.0.0'} + + chai@4.3.10: + resolution: {integrity: sha512-0UXG04VuVbruMUYbJ6JctvH0YnC/4q3/AkT18q4NaITo91CUm0liMS9VqzT9vZhVQ/1eqPanMWjBM+Juhfb/9g==} + engines: {node: '>=4'} + + chalk@1.1.3: + resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==} + engines: {node: '>=0.10.0'} + + chalk@2.4.2: + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + check-error@1.0.3: + resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} + + chokidar@3.5.3: + resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} + engines: {node: '>= 8.10.0'} + + class-utils@0.3.6: + resolution: {integrity: sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==} + engines: {node: '>=0.10.0'} + + clone@2.1.2: + resolution: {integrity: sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==} + engines: {node: '>=0.8'} + + collection-visit@1.0.0: + resolution: {integrity: sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==} + engines: {node: '>=0.10.0'} + + color-convert@1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.3: + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + colorette@2.0.20: + resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} + + colors@1.2.5: + resolution: {integrity: sha512-erNRLao/Y3Fv54qUa0LBB+//Uf3YwMUmdJinN20yMXm9zdKKqH9wt7R9IIVZ+K7ShzfpLV/Zg8+VyrBJYB4lpg==} + engines: {node: '>=0.1.90'} + + combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + + commander@10.0.1: + resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==} + engines: {node: '>=14'} + + commander@7.2.0: + resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} + engines: {node: '>= 10'} + + commander@9.5.0: + resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==} + engines: {node: ^12.20.0 || >=14} + + component-emitter@1.3.1: + resolution: {integrity: sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==} + + computeds@0.0.1: + resolution: {integrity: sha512-7CEBgcMjVmitjYo5q8JTJVra6X5mQ20uTThdK+0kR7UEaDrAWEQcRiBtWJzga4eRpP6afNwwLsX2SET2JhVB1Q==} + + concat-map@0.0.1: + resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=} + + config-chain@1.1.13: + resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==} + + consola@3.2.3: + resolution: {integrity: sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==} + engines: {node: ^14.18.0 || >=16.10.0} + + copy-anything@2.0.6: + resolution: {integrity: sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==} + + copy-descriptor@0.1.1: + resolution: {integrity: sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==} + engines: {node: '>=0.10.0'} + + cors@2.8.5: + resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==} + engines: {node: '>= 0.10'} + + cross-spawn@7.0.3: + resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + engines: {node: '>= 8'} + + css-line-break@2.1.0: + resolution: {integrity: sha512-FHcKFCZcAha3LwfVBhCQbW2nCNbkZXn7KVUJcsT5/P8YmfsVja0FMPJr0B903j/E69HUphKiV9iQArX8SDYA4w==} + + css-select@4.3.0: + resolution: {integrity: sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==} + + css-tree@1.1.3: + resolution: {integrity: sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==} + engines: {node: '>=8.0.0'} + + css-tree@2.3.1: + resolution: {integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} + + css-what@6.1.0: + resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} + engines: {node: '>= 6'} + + cssesc@3.0.0: + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} + hasBin: true + + csso@4.2.0: + resolution: {integrity: sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==} + engines: {node: '>=8.0.0'} + + cssstyle@3.0.0: + resolution: {integrity: sha512-N4u2ABATi3Qplzf0hWbVCdjenim8F3ojEXpBDF5hBpjzW182MjNGLqfmQ0SkSPeQ+V86ZXgeH8aXj6kayd4jgg==} + engines: {node: '>=14'} + + csstype@3.1.2: + resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==} + + data-urls@4.0.0: + resolution: {integrity: sha512-/mMTei/JXPqvFqQtfyTowxmJVwr2PVAeCcDxyFf6LhoOu/09TX2OX3kb2wzi4DMXcfj4OItwDOnhl5oziPnT6g==} + engines: {node: '>=14'} + + dayjs@1.11.10: + resolution: {integrity: sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==} + + de-indent@1.0.2: + resolution: {integrity: sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==} + + debug@2.6.9: + resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@3.2.7: + resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@4.3.4: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + decimal.js@10.4.3: + resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==} + + decode-uri-component@0.2.2: + resolution: {integrity: sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==} + engines: {node: '>=0.10'} + + deep-eql@4.1.3: + resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==} + engines: {node: '>=6'} + + deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + + default-browser-id@3.0.0: + resolution: {integrity: sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==} + engines: {node: '>=12'} + + default-browser@4.0.0: + resolution: {integrity: sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==} + engines: {node: '>=14.16'} + + define-lazy-prop@3.0.0: + resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} + engines: {node: '>=12'} + + define-property@0.2.5: + resolution: {integrity: sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==} + engines: {node: '>=0.10.0'} + + define-property@1.0.0: + resolution: {integrity: sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==} + engines: {node: '>=0.10.0'} + + define-property@2.0.2: + resolution: {integrity: sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==} + engines: {node: '>=0.10.0'} + + defu@6.1.3: + resolution: {integrity: sha512-Vy2wmG3NTkmHNg/kzpuvHhkqeIx3ODWqasgCRbKtbXEN0G+HpEEv9BtJLp7ZG1CZloFaC41Ah3ZFbq7aqCqMeQ==} + + delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + + destr@2.0.2: + resolution: {integrity: sha512-65AlobnZMiCET00KaFFjUefxDX0khFA/E4myqZ7a6Sq1yZtR8+FVIvilVX66vF2uobSumxooYZChiRPCKNqhmg==} + + diff-sequences@29.6.3: + resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + dir-glob@3.0.1: + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} + + doctrine@3.0.0: + resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} + engines: {node: '>=6.0.0'} + + dom-serializer@0.2.2: + resolution: {integrity: sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==} + + dom-serializer@1.4.1: + resolution: {integrity: sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==} + + domelementtype@1.3.1: + resolution: {integrity: sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==} + + domelementtype@2.3.0: + resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} + + domexception@4.0.0: + resolution: {integrity: sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==} + engines: {node: '>=12'} + + domhandler@2.4.2: + resolution: {integrity: sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==} + + domhandler@4.3.1: + resolution: {integrity: sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==} + engines: {node: '>= 4'} + + domutils@1.7.0: + resolution: {integrity: sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==} + + domutils@2.8.0: + resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==} + + duplexer@0.1.2: + resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} + + echarts@https://registry.npmmirror.com/echarts/-/echarts-5.4.3.tgz: + resolution: {integrity: sha512-mYKxLxhzy6zyTi/FaEbJMOZU1ULGEQHaeIeuMR5L+JnJTpz+YR03mnnpBhbR4+UYJAgiXgpyTVLffPAjOTLkZA==, tarball: https://registry.npmmirror.com/echarts/-/echarts-5.4.3.tgz} + version: 5.4.3 + + editorconfig@1.0.4: + resolution: {integrity: sha512-L9Qe08KWTlqYMVvMcTIvMAdl1cDUubzRNYL+WfA4bLDMHe4nemKkpmYzkznE1FwLKu0EEmy6obgQKzMJrg4x9Q==} + engines: {node: '>=14'} + hasBin: true + + element-plus@2.4.2: + resolution: {integrity: sha512-E/HwXX7JF1LPvQSjs0fZ8WblIoc0quoXsRXQZiL7QDq7xJdNGSUaXtdk7xiEv7axPmLfEFtxE5du9fFspDrmJw==} + peerDependencies: + vue: ^3.2.0 + + emojis-list@3.0.0: + resolution: {integrity: sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==} + engines: {node: '>= 4'} + + entities@1.1.2: + resolution: {integrity: sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==} + + entities@2.2.0: + resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==} + + entities@4.5.0: + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} + engines: {node: '>=0.12'} + + errno@0.1.8: + resolution: {integrity: sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==} + hasBin: true + + error-ex@1.3.2: + resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + + esbuild@0.18.20: + resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==} + engines: {node: '>=12'} + hasBin: true + + escape-html@1.0.3: + resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} + + escape-string-regexp@1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + eslint-config-prettier@8.10.0: + resolution: {integrity: sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg==} + hasBin: true + peerDependencies: + eslint: '>=7.0.0' + + eslint-plugin-prettier@5.0.1: + resolution: {integrity: sha512-m3u5RnR56asrwV/lDC4GHorlW75DsFfmUcjfCYylTUs85dBRnB7VM6xG8eCMJdeDRnppzmxZVf1GEPJvl1JmNg==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + '@types/eslint': '>=8.0.0' + eslint: '>=8.0.0' + eslint-config-prettier: '*' + prettier: '>=3.0.0' + peerDependenciesMeta: + '@types/eslint': + optional: true + eslint-config-prettier: + optional: true + + eslint-plugin-vue@9.17.0: + resolution: {integrity: sha512-r7Bp79pxQk9I5XDP0k2dpUC7Ots3OSWgvGZNu3BxmKK6Zg7NgVtcOB6OCna5Kb9oQwJPl5hq183WD0SY5tZtIQ==} + engines: {node: ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.2.0 || ^7.0.0 || ^8.0.0 + + eslint-scope@7.2.2: + resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint@8.49.0: + resolution: {integrity: sha512-jw03ENfm6VJI0jA9U+8H5zfl5b+FvuU3YYvZRdZHOlU2ggJkxrlkJH4HcDrZpj6YwD8kuYqvQM8LyesoazrSOQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + hasBin: true + + espree@9.6.1: + resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + esquery@1.5.0: + resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} + engines: {node: '>=0.10'} + + esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + + estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + + 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'} + + etag@1.8.1: + resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} + engines: {node: '>= 0.6'} + + execa@5.1.1: + resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} + engines: {node: '>=10'} + + execa@7.2.0: + resolution: {integrity: sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==} + engines: {node: ^14.18.0 || ^16.14.0 || >=18.0.0} + + expand-brackets@2.1.4: + resolution: {integrity: sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==} + engines: {node: '>=0.10.0'} + + extend-shallow@2.0.1: + resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==} + engines: {node: '>=0.10.0'} + + extend-shallow@3.0.2: + resolution: {integrity: sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==} + engines: {node: '>=0.10.0'} + + extglob@2.0.4: + resolution: {integrity: sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==} + engines: {node: '>=0.10.0'} + + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + fast-diff@1.3.0: + resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} + + fast-glob@3.3.2: + resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} + engines: {node: '>=8.6.0'} + + fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + + fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + + fastq@1.15.0: + resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} + + file-entry-cache@6.0.1: + resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} + engines: {node: ^10.12.0 || >=12.0.0} + + fill-range@4.0.0: + resolution: {integrity: sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==} + engines: {node: '>=0.10.0'} + + fill-range@7.0.1: + resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} + engines: {node: '>=8'} + + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + + flat-cache@3.2.0: + resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} + engines: {node: ^10.12.0 || >=12.0.0} + + flatted@3.2.9: + resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==} + + for-in@1.0.2: + resolution: {integrity: sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==} + engines: {node: '>=0.10.0'} + + form-data@4.0.0: + resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} + engines: {node: '>= 6'} + + fragment-cache@0.2.1: + resolution: {integrity: sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==} + engines: {node: '>=0.10.0'} + + fs-extra@10.1.0: + resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} + engines: {node: '>=12'} + + fs-extra@7.0.1: + resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==} + engines: {node: '>=6 <7 || >=8'} + + fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + get-func-name@2.0.2: + resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} + + get-stream@6.0.1: + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} + engines: {node: '>=10'} + + get-value@2.0.6: + resolution: {integrity: sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==} + engines: {node: '>=0.10.0'} + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + + glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + + glob@8.1.0: + resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} + engines: {node: '>=12'} + + globals@13.23.0: + resolution: {integrity: sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==} + engines: {node: '>=8'} + + globby@11.1.0: + resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} + engines: {node: '>=10'} + + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + graphemer@1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + + gzip-size@6.0.0: + resolution: {integrity: sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==} + engines: {node: '>=10'} + + has-ansi@2.0.0: + resolution: {integrity: sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==} + engines: {node: '>=0.10.0'} + + has-flag@1.0.0: + resolution: {integrity: sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA==} + engines: {node: '>=0.10.0'} + + has-flag@3.0.0: + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} + engines: {node: '>=4'} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + has-value@0.3.1: + resolution: {integrity: sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==} + engines: {node: '>=0.10.0'} + + has-value@1.0.0: + resolution: {integrity: sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==} + engines: {node: '>=0.10.0'} + + has-values@0.1.4: + resolution: {integrity: sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==} + engines: {node: '>=0.10.0'} + + has-values@1.0.0: + resolution: {integrity: sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==} + engines: {node: '>=0.10.0'} + + hasown@2.0.0: + resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==} + engines: {node: '>= 0.4'} + + he@1.2.0: + resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} + hasBin: true + + hosted-git-info@7.0.1: + resolution: {integrity: sha512-+K84LB1DYwMHoHSgaOY/Jfhw3ucPmSET5v98Ke/HdNSw4a0UktWzyW1mjhjpuxxTqOOsfWT/7iVshHmVZ4IpOA==} + engines: {node: ^16.14.0 || >=18.0.0} + + html-encoding-sniffer@3.0.0: + resolution: {integrity: sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==} + engines: {node: '>=12'} + + html2canvas@1.4.1: + resolution: {integrity: sha512-fPU6BHNpsyIhr8yyMpTLLxAbkaK8ArIBcmZIRiBLiDhjeqvXolaEmDGmELFuX9I4xDcaKKcJl+TKZLqruBbmWA==} + engines: {node: '>=8.0.0'} + + htmlparser2@3.10.1: + resolution: {integrity: sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==} + + http-proxy-agent@5.0.0: + resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==} + engines: {node: '>= 6'} + + https-proxy-agent@5.0.1: + resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} + engines: {node: '>= 6'} + + human-signals@2.1.0: + resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} + engines: {node: '>=10.17.0'} + + human-signals@4.3.1: + resolution: {integrity: sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==} + engines: {node: '>=14.18.0'} + + iconv-lite@0.6.3: + resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} + engines: {node: '>=0.10.0'} + + ignore@5.2.4: + resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} + engines: {node: '>= 4'} + + image-size@0.5.5: + resolution: {integrity: sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==} + engines: {node: '>=0.10.0'} + hasBin: true + + import-fresh@3.3.0: + resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + engines: {node: '>=6'} + + import-lazy@4.0.0: + resolution: {integrity: sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==} + engines: {node: '>=8'} + + imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + + inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + ini@1.3.8: + resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} + + is-accessor-descriptor@1.0.1: + resolution: {integrity: sha512-YBUanLI8Yoihw923YeFUS5fs0fF2f5TSFTNiYAAzhhDscDa3lEqYuz1pDOEP5KvX94I9ey3vsqjJcLVFVU+3QA==} + engines: {node: '>= 0.10'} + + is-arrayish@0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + + is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + + is-buffer@1.1.6: + resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==} + + is-core-module@2.13.1: + resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} + + is-data-descriptor@1.0.1: + resolution: {integrity: sha512-bc4NlCDiCr28U4aEsQ3Qs2491gVq4V8G7MQyws968ImqjKuYtTJXrl7Vq7jsN7Ly/C3xj5KWFrY7sHNeDkAzXw==} + engines: {node: '>= 0.4'} + + is-descriptor@0.1.7: + resolution: {integrity: sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==} + engines: {node: '>= 0.4'} + + is-descriptor@1.0.3: + resolution: {integrity: sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==} + engines: {node: '>= 0.4'} + + is-docker@2.2.1: + resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} + engines: {node: '>=8'} + hasBin: true + + is-docker@3.0.0: + resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + hasBin: true + + is-extendable@0.1.1: + resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==} + engines: {node: '>=0.10.0'} + + is-extendable@1.0.1: + resolution: {integrity: sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==} + engines: {node: '>=0.10.0'} + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-inside-container@1.0.0: + resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} + engines: {node: '>=14.16'} + hasBin: true + + is-number@3.0.0: + resolution: {integrity: sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==} + engines: {node: '>=0.10.0'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-path-inside@3.0.3: + resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} + engines: {node: '>=8'} + + is-plain-obj@1.1.0: + resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==} + engines: {node: '>=0.10.0'} + + is-plain-object@2.0.4: + resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} + engines: {node: '>=0.10.0'} + + is-potential-custom-element-name@1.0.1: + resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} + + is-stream@2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} + + is-stream@3.0.0: + resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + is-what@3.14.1: + resolution: {integrity: sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==} + + is-windows@1.0.2: + resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} + engines: {node: '>=0.10.0'} + + is-wsl@2.2.0: + resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} + engines: {node: '>=8'} + + isarray@1.0.0: + resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + isobject@2.1.0: + resolution: {integrity: sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==} + engines: {node: '>=0.10.0'} + + isobject@3.0.1: + resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} + engines: {node: '>=0.10.0'} + + jiti@1.21.0: + resolution: {integrity: sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==} + hasBin: true + + jju@1.4.0: + resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==} + + js-base64@2.6.4: + resolution: {integrity: sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==} + + js-beautify@1.14.9: + resolution: {integrity: sha512-coM7xq1syLcMyuVGyToxcj2AlzhkDjmfklL8r0JgJ7A76wyGMpJ1oA35mr4APdYNO/o/4YY8H54NQIJzhMbhBg==} + engines: {node: '>=12'} + hasBin: true + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + + jsdom@22.1.0: + resolution: {integrity: sha512-/9AVW7xNbsBv6GfWho4TTNjEo9fe6Zhf9O7s0Fhhr3u+awPwAJMKwAMXnkk5vBxflqLW9hTHX/0cs+P3gW+cQw==} + engines: {node: '>=16'} + peerDependencies: + canvas: ^2.5.0 + peerDependenciesMeta: + canvas: + optional: true + + json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + + json-parse-even-better-errors@3.0.0: + resolution: {integrity: sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + + json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + + json5@1.0.2: + resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} + hasBin: true + + jsonc-parser@3.2.0: + resolution: {integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==} + + jsonfile@4.0.0: + resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} + + jsonfile@6.1.0: + resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + + keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + + kind-of@3.2.2: + resolution: {integrity: sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==} + engines: {node: '>=0.10.0'} + + kind-of@4.0.0: + resolution: {integrity: sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==} + engines: {node: '>=0.10.0'} + + kind-of@5.1.0: + resolution: {integrity: sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==} + engines: {node: '>=0.10.0'} + + kind-of@6.0.3: + resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} + engines: {node: '>=0.10.0'} + + kolorist@1.8.0: + resolution: {integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==} + + less@4.2.0: + resolution: {integrity: sha512-P3b3HJDBtSzsXUl0im2L7gTO5Ubg8mEN6G8qoTS77iXxXX4Hvu4Qj540PZDvQ8V6DmX6iXo98k7Md0Cm1PrLaA==} + engines: {node: '>=6'} + hasBin: true + + levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + + lines-and-columns@2.0.4: + resolution: {integrity: sha512-wM1+Z03eypVAVUCE7QdSqpVIvelbOakn1M0bPDoA4SGWPx3sNDVUiMo3L6To6WWGClB7VyXnhQ4Sn7gxiJbE6A==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + loader-utils@1.4.2: + resolution: {integrity: sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==} + engines: {node: '>=4.0.0'} + + local-pkg@0.4.3: + resolution: {integrity: sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==} + engines: {node: '>=14'} + + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + + lodash-es@4.17.21: + resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==} + + lodash-unified@1.0.3: + resolution: {integrity: sha512-WK9qSozxXOD7ZJQlpSqOT+om2ZfcT4yO+03FuzAHD0wF6S0l0090LRPDx3vhTTLZ8cFKpBn+IOcVXK6qOcIlfQ==} + peerDependencies: + '@types/lodash-es': '*' + lodash: '*' + lodash-es: '*' + + lodash.get@4.4.2: + resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==} + + lodash.isequal@4.5.0: + resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==} + + lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + + lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + + loupe@2.3.7: + resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==} + + lru-cache@10.0.2: + resolution: {integrity: sha512-Yj9mA8fPiVgOUpByoTZO5pNrcl5Yk37FcSHsUINpAsaBIEZIuqcCclDZJCVxqQShDsmYX8QG63svJiTbOATZwg==} + engines: {node: 14 || >=16.14} + + lru-cache@6.0.0: + resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} + engines: {node: '>=10'} + + magic-string@0.30.5: + resolution: {integrity: sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==} + engines: {node: '>=12'} + + make-dir@2.1.0: + resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==} + engines: {node: '>=6'} + + map-cache@0.2.2: + resolution: {integrity: sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==} + engines: {node: '>=0.10.0'} + + map-visit@1.0.0: + resolution: {integrity: sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==} + engines: {node: '>=0.10.0'} + + mdn-data@2.0.14: + resolution: {integrity: sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==} + + mdn-data@2.0.30: + resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==} + + memoize-one@6.0.0: + resolution: {integrity: sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==} + + memorystream@0.3.1: + resolution: {integrity: sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==} + engines: {node: '>= 0.10.0'} + + merge-options@1.0.1: + resolution: {integrity: sha512-iuPV41VWKWBIOpBsjoxjDZw8/GbSfZ2mk7N1453bwMrfzdrIk7EzBd+8UVR6rkw67th7xnk9Dytl3J+lHPdxvg==} + engines: {node: '>=4'} + + merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + micromatch@3.1.0: + resolution: {integrity: sha512-3StSelAE+hnRvMs8IdVW7Uhk8CVed5tp+kLLGlBP6WiRAXS21GPGu/Nat4WNPXj2Eoc24B02SaeoyozPMfj0/g==} + engines: {node: '>=0.10.0'} + + micromatch@4.0.5: + resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} + engines: {node: '>=8.6'} + + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + + mime@1.6.0: + resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} + engines: {node: '>=4'} + hasBin: true + + mimic-fn@2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} + + mimic-fn@4.0.0: + resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} + engines: {node: '>=12'} + + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + minimatch@5.1.6: + resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} + engines: {node: '>=10'} + + minimatch@9.0.1: + resolution: {integrity: sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==} + engines: {node: '>=16 || 14 >=14.17'} + + minimatch@9.0.3: + resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} + engines: {node: '>=16 || 14 >=14.17'} + + 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'} + + mlly@1.4.2: + resolution: {integrity: sha512-i/Ykufi2t1EZ6NaPLdfnZk2AX8cs0d+mTzVKuPfqPKPatxLApaBoxJQ9x1/uckXtrS/U5oisPMDkNs0yQTaBRg==} + + mrmime@1.0.1: + resolution: {integrity: sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==} + engines: {node: '>=10'} + + ms@2.0.0: + resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} + + ms@2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + + muggle-string@0.3.1: + resolution: {integrity: sha512-ckmWDJjphvd/FvZawgygcUeQCxzvohjFO5RxTjj4eq8kw359gFF3E1brjfI+viLMxss5JrHTDRHZvu2/tuy0Qg==} + + nanoid@3.3.7: + resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} + 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'} + + natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + + needle@3.2.0: + resolution: {integrity: sha512-oUvzXnyLiVyVGoianLijF9O/RecZUf7TkBfimjGrLM4eQhXyeJwM6GeAWccwfQ9aa4gMCZKqhAOuLaMIcQxajQ==} + engines: {node: '>= 4.4.x'} + hasBin: true + + node-fetch-native@1.4.1: + resolution: {integrity: sha512-NsXBU0UgBxo2rQLOeWNZqS3fvflWePMECr8CoSWoSTqCqGbVVsvl9vZu1HfQicYN0g5piV9Gh8RTEvo/uP752w==} + + nopt@6.0.0: + resolution: {integrity: sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + hasBin: true + + normalize-package-data@6.0.0: + resolution: {integrity: sha512-UL7ELRVxYBHBgYEtZCXjxuD5vPxnmvMGq0jp/dGPKKrN7tfsBh2IY7TlJ15WWwdjRWD3RJbnsygUurTK3xkPkg==} + engines: {node: ^16.14.0 || >=18.0.0} + + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + normalize-wheel-es@1.2.0: + resolution: {integrity: sha512-Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw==} + + npm-run-all2@6.1.1: + resolution: {integrity: sha512-lWLbkPZ5BSdXtN8lR+0rc8caKoPdymycpZksyDEC9MOBvfdwTXZ0uVhb7bMcGeXv2/BKtfQuo6Zn3zfc8rxNXA==} + engines: {node: ^14.18.0 || >=16.0.0, npm: '>= 8'} + hasBin: true + + npm-run-path@4.0.1: + resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} + engines: {node: '>=8'} + + npm-run-path@5.1.0: + resolution: {integrity: sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + nth-check@2.1.1: + resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} + + nwsapi@2.2.7: + resolution: {integrity: sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==} + + object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + + object-copy@0.1.0: + resolution: {integrity: sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==} + engines: {node: '>=0.10.0'} + + object-visit@1.0.1: + resolution: {integrity: sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==} + engines: {node: '>=0.10.0'} + + object.pick@1.3.0: + resolution: {integrity: sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==} + engines: {node: '>=0.10.0'} + + ofetch@1.3.3: + resolution: {integrity: sha512-s1ZCMmQWXy4b5K/TW9i/DtiN8Ku+xCiHcjQ6/J/nDdssirrQNOoB165Zu8EqLMA2lln1JUth9a0aW9Ap2ctrUg==} + + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + + onetime@5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} + + onetime@6.0.0: + resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} + engines: {node: '>=12'} + + open@9.1.0: + resolution: {integrity: sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==} + engines: {node: '>=14.16'} + + optionator@0.9.3: + resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} + engines: {node: '>= 0.8.0'} + + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + + p-limit@4.0.0: + resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + + parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + + parse-json@7.1.1: + resolution: {integrity: sha512-SgOTCX/EZXtZxBE5eJ97P4yGM5n37BwRU+YMsH4vNzFqJV/oWFXXCmwFlgWUM4PrakybVOueJJ6pwHqSVhTFDw==} + engines: {node: '>=16'} + + parse-node-version@1.0.1: + resolution: {integrity: sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==} + engines: {node: '>= 0.10'} + + parse5@7.1.2: + resolution: {integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==} + + pascalcase@0.1.1: + resolution: {integrity: sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==} + engines: {node: '>=0.10.0'} + + path-browserify@1.0.1: + resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} + + 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@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + path-key@4.0.0: + resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} + engines: {node: '>=12'} + + path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + + path-type@4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + + pathe@0.2.0: + resolution: {integrity: sha512-sTitTPYnn23esFR3RlqYBWn4c45WGeLcsKzQiUpXJAyfcWkolvlYpV8FLo7JishK946oQwMFUCHXQ9AjGPKExw==} + + pathe@1.1.1: + resolution: {integrity: sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q==} + + pathval@1.1.1: + resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} + + perfect-debounce@1.0.0: + resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==} + + performance-now@2.1.0: + resolution: {integrity: sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==} + + picocolors@1.0.0: + resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + pidtree@0.6.0: + resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==} + engines: {node: '>=0.10'} + hasBin: true + + pify@4.0.1: + resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} + engines: {node: '>=6'} + + pkg-types@1.0.3: + resolution: {integrity: sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==} + + posix-character-classes@0.1.1: + resolution: {integrity: sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==} + engines: {node: '>=0.10.0'} + + postcss-prefix-selector@1.16.0: + resolution: {integrity: sha512-rdVMIi7Q4B0XbXqNUEI+Z4E+pueiu/CS5E6vRCQommzdQ/sgsS4dK42U7GX8oJR+TJOtT+Qv3GkNo6iijUMp3Q==} + peerDependencies: + postcss: '>4 <9' + + postcss-selector-parser@6.0.13: + resolution: {integrity: sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==} + engines: {node: '>=4'} + + postcss@5.2.18: + resolution: {integrity: sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==} + engines: {node: '>=0.12'} + + postcss@8.4.31: + resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} + engines: {node: ^10 || ^12 || >=14} + + posthtml-parser@0.2.1: + resolution: {integrity: sha512-nPC53YMqJnc/+1x4fRYFfm81KV2V+G9NZY+hTohpYg64Ay7NemWWcV4UWuy/SgMupqQ3kJ88M/iRfZmSnxT+pw==} + + posthtml-rename-id@1.0.12: + resolution: {integrity: sha512-UKXf9OF/no8WZo9edRzvuMenb6AD5hDLzIepJW+a4oJT+T/Lx7vfMYWT4aWlGNQh0WMhnUx1ipN9OkZ9q+ddEw==} + + posthtml-render@1.4.0: + resolution: {integrity: sha512-W1779iVHGfq0Fvh2PROhCe2QhB8mEErgqzo1wpIt36tCgChafP+hbXIhLDOM8ePJrZcFs0vkNEtdibEWVqChqw==} + engines: {node: '>=10'} + + posthtml-svg-mode@1.0.3: + resolution: {integrity: sha512-hEqw9NHZ9YgJ2/0G7CECOeuLQKZi8HjWLkBaSVtOWjygQ9ZD8P7tqeowYs7WrFdKsWEKG7o+IlsPY8jrr0CJpQ==} + + posthtml@0.9.2: + resolution: {integrity: sha512-spBB5sgC4cv2YcW03f/IAUN1pgDJWNWD8FzkyY4mArLUMJW+KlQhlmUdKAHQuPfb00Jl5xIfImeOsf6YL8QK7Q==} + engines: {node: '>=0.10.0'} + + prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + + prettier-linter-helpers@1.0.0: + resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} + engines: {node: '>=6.0.0'} + + prettier@3.0.3: + resolution: {integrity: sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==} + engines: {node: '>=14'} + hasBin: true + + pretty-format@29.7.0: + resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + proto-list@1.2.4: + resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==} + + prr@1.0.1: + resolution: {integrity: sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==} + + psl@1.9.0: + resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} + + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + + query-string@4.3.4: + resolution: {integrity: sha512-O2XLNDBIg1DnTOa+2XrIwSiXEV8h2KImXUnjhhn2+UsvZ+Es2uyd5CCRTNQlDGbzUQOW3aYCBx9rVA6dzsiY7Q==} + engines: {node: '>=0.10.0'} + + querystringify@2.2.0: + resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} + + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + raf@3.4.1: + resolution: {integrity: sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==} + + react-is@18.2.0: + resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} + + read-pkg@8.1.0: + resolution: {integrity: sha512-PORM8AgzXeskHO/WEv312k9U03B8K9JSiWF/8N9sUuFjBa+9SF2u6K7VClzXwDXab51jCd8Nd36CNM+zR97ScQ==} + engines: {node: '>=16'} + + readable-stream@3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} + + readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + + regex-not@1.0.2: + resolution: {integrity: sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==} + engines: {node: '>=0.10.0'} + + repeat-element@1.1.4: + resolution: {integrity: sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==} + engines: {node: '>=0.10.0'} + + repeat-string@1.6.1: + resolution: {integrity: sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==} + engines: {node: '>=0.10'} + + requires-port@1.0.0: + resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} + + resize-detector@https://registry.npmmirror.com/resize-detector/-/resize-detector-0.3.0.tgz: + resolution: {integrity: sha512-R/tCuvuOHQ8o2boRP6vgx8hXCCy87H1eY9V5imBYeVNyNVpuL9ciReSccLj2gDcax9+2weXy3bc8Vv+NRXeEvQ==, tarball: https://registry.npmmirror.com/resize-detector/-/resize-detector-0.3.0.tgz} + version: 0.3.0 + + resize-observer-polyfill@1.5.1: + resolution: {integrity: sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==} + + resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + + resolve-url@0.2.1: + resolution: {integrity: sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==} + deprecated: https://github.com/lydell/resolve-url#deprecated + + resolve@1.19.0: + resolution: {integrity: sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==} + + resolve@1.22.8: + resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} + hasBin: true + + ret@0.1.15: + resolution: {integrity: sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==} + engines: {node: '>=0.12'} + + reusify@1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + rgbcolor@1.0.1: + resolution: {integrity: sha512-9aZLIrhRaD97sgVhtJOW6ckOEh6/GnvQtdVNfdZ6s67+3/XwLS9lBcQYzEEhYVeUowN7pRzMLsyGhK2i/xvWbw==} + engines: {node: '>= 0.8.15'} + + rimraf@3.0.2: + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + hasBin: true + + rollup@3.29.4: + resolution: {integrity: sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==} + engines: {node: '>=14.18.0', npm: '>=8.0.0'} + hasBin: true + + rrweb-cssom@0.6.0: + resolution: {integrity: sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==} + + run-applescript@5.0.0: + resolution: {integrity: sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==} + engines: {node: '>=12'} + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + safe-regex@1.1.0: + resolution: {integrity: sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==} + + safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + + sax@1.3.0: + resolution: {integrity: sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==} + + saxes@6.0.0: + resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} + engines: {node: '>=v12.22.7'} + + semver@5.7.2: + resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} + hasBin: true + + semver@7.5.4: + resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} + engines: {node: '>=10'} + hasBin: true + + set-value@2.0.1: + resolution: {integrity: sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==} + engines: {node: '>=0.10.0'} + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + shell-quote@1.8.1: + resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==} + + siginfo@2.0.0: + resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} + + signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + + sirv@2.0.3: + resolution: {integrity: sha512-O9jm9BsID1P+0HOi81VpXPoDxYP374pkOLzACAoyUQ/3OUVndNpsz6wMnY2z+yOxzbllCKZrM+9QrWsv4THnyA==} + engines: {node: '>= 10'} + + slash@3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} + + snapdragon-node@2.1.1: + resolution: {integrity: sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==} + engines: {node: '>=0.10.0'} + + snapdragon-util@3.0.1: + resolution: {integrity: sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==} + engines: {node: '>=0.10.0'} + + snapdragon@0.8.2: + resolution: {integrity: sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==} + engines: {node: '>=0.10.0'} + + 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 + + source-map-url@0.4.1: + resolution: {integrity: sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==} + deprecated: See https://github.com/lydell/source-map-url#deprecated + + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + + source-map@https://registry.npmmirror.com/source-map/-/source-map-0.5.7.tgz: + resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==, tarball: https://registry.npmmirror.com/source-map/-/source-map-0.5.7.tgz} + version: 0.5.7 + engines: {node: '>=0.10.0'} + + source-map@https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==, tarball: https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz} + version: 0.6.1 + engines: {node: '>=0.10.0'} + + spdx-correct@3.2.0: + resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} + + spdx-exceptions@2.3.0: + resolution: {integrity: sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==} + + spdx-expression-parse@3.0.1: + resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} + + spdx-license-ids@3.0.16: + resolution: {integrity: sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==} + + split-string@3.1.0: + resolution: {integrity: sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==} + engines: {node: '>=0.10.0'} + + sprintf-js@1.0.3: + resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + + 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' + + stackback@0.0.2: + resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} + + stackblur-canvas@2.6.0: + resolution: {integrity: sha512-8S1aIA+UoF6erJYnglGPug6MaHYGo1Ot7h5fuXx4fUPvcvQfcdw2o/ppCse63+eZf8PPidSu4v1JnmEVtEDnpg==} + engines: {node: '>=0.1.14'} + + static-extend@0.1.2: + resolution: {integrity: sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==} + engines: {node: '>=0.10.0'} + + std-env@3.5.0: + resolution: {integrity: sha512-JGUEaALvL0Mf6JCfYnJOTcobY+Nc7sG/TemDRBqCA0wEr4DER7zDchaaixTlmOxAjG1uRJmX82EQcxwTQTkqVA==} + + strict-uri-encode@1.1.0: + resolution: {integrity: sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==} + engines: {node: '>=0.10.0'} + + string-argv@0.3.2: + resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} + engines: {node: '>=0.6.19'} + + string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + + strip-ansi@3.0.1: + resolution: {integrity: sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==} + engines: {node: '>=0.10.0'} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-final-newline@2.0.0: + resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} + engines: {node: '>=6'} + + strip-final-newline@3.0.0: + resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} + engines: {node: '>=12'} + + strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + + strip-literal@1.3.0: + resolution: {integrity: sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg==} + + supports-color@2.0.0: + resolution: {integrity: sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==} + engines: {node: '>=0.8.0'} + + supports-color@3.2.3: + resolution: {integrity: sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==} + engines: {node: '>=0.8.0'} + + supports-color@5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + + svg-baker@1.7.0: + resolution: {integrity: sha512-nibslMbkXOIkqKVrfcncwha45f97fGuAOn1G99YwnwTj8kF9YiM6XexPcUso97NxOm6GsP0SIvYVIosBis1xLg==} + + svg-pathdata@6.0.3: + resolution: {integrity: sha512-qsjeeq5YjBZ5eMdFuUa4ZosMLxgr5RZ+F+Y1OrDhuOCEInRMA3x74XdBtggJcj9kOeInz0WE+LgCPDkZFlBYJw==} + engines: {node: '>=12.0.0'} + + svgo@2.8.0: + resolution: {integrity: sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==} + engines: {node: '>=10.13.0'} + hasBin: true + + symbol-tree@3.2.4: + resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} + + synckit@0.8.5: + resolution: {integrity: sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q==} + engines: {node: ^14.18.0 || >=16.0.0} + + text-segmentation@1.0.3: + resolution: {integrity: sha512-iOiPUo/BGnZ6+54OsWxZidGCsdU8YbE4PSpdPinp7DeMtUJNJBoJ/ouUSTJjHkh1KntHaltHl/gDs2FC4i5+Nw==} + + text-table@0.2.0: + resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + + tinybench@2.5.1: + resolution: {integrity: sha512-65NKvSuAVDP/n4CqH+a9w2kTlLReS9vhsAP06MWx+/89nMinJyB2icyl58RIcqCmIggpojIGeuJGhjU1aGMBSg==} + + tinypool@0.7.0: + resolution: {integrity: sha512-zSYNUlYSMhJ6Zdou4cJwo/p7w5nmAH17GRfU/ui3ctvjXFErXXkruT4MWW6poDeXgCaIBlGLrfU6TbTXxyGMww==} + engines: {node: '>=14.0.0'} + + tinyspy@2.2.0: + resolution: {integrity: sha512-d2eda04AN/cPOR89F7Xv5bK/jrQEhmcLFe6HFldoeO9AJtps+fqEnh486vnT/8y4bw38pSyxDcTCAq+Ks2aJTg==} + engines: {node: '>=14.0.0'} + + titleize@3.0.0: + resolution: {integrity: sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==} + engines: {node: '>=12'} + + 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'} + + to-regex-range@2.1.1: + resolution: {integrity: sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==} + engines: {node: '>=0.10.0'} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + to-regex@3.0.2: + resolution: {integrity: sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==} + engines: {node: '>=0.10.0'} + + totalist@3.0.1: + resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} + engines: {node: '>=6'} + + tough-cookie@4.1.3: + resolution: {integrity: sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==} + engines: {node: '>=6'} + + tr46@4.1.1: + resolution: {integrity: sha512-2lv/66T7e5yNyhAAC4NaKe5nVavzuGJQVVtRYLyQ2OI8tsJ61PMLlelehb0wi2Hx6+hT/OJUWZcw8MjlSRnxvw==} + engines: {node: '>=14'} + + traverse@0.6.7: + resolution: {integrity: sha512-/y956gpUo9ZNCb99YjxG7OaslxZWHfCHAUUfshwqOXmxUIvqLjVO581BT+gM59+QV9tFe6/CGG53tsA1Y7RSdg==} + + ts-api-utils@1.0.3: + resolution: {integrity: sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==} + engines: {node: '>=16.13.0'} + peerDependencies: + typescript: '>=4.2.0' + + tslib@2.6.2: + resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} + + tslib@https://registry.npmmirror.com/tslib/-/tslib-2.3.0.tgz: + resolution: {integrity: sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==, tarball: https://registry.npmmirror.com/tslib/-/tslib-2.3.0.tgz} + version: 2.3.0 + + type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + + type-detect@4.0.8: + resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} + engines: {node: '>=4'} + + type-fest@0.20.2: + resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} + engines: {node: '>=10'} + + type-fest@3.13.1: + resolution: {integrity: sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==} + engines: {node: '>=14.16'} + + type-fest@4.7.1: + resolution: {integrity: sha512-iWr8RUmzAJRfhZugX9O7nZE6pCxDU8CZ3QxsLuTnGcBLJpCaP2ll3s4eMTBoFnU/CeXY/5rfQSuAEsTGJO4y8A==} + engines: {node: '>=16'} + + typescript@5.0.4: + resolution: {integrity: sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==} + engines: {node: '>=12.20'} + hasBin: true + + typescript@5.2.2: + resolution: {integrity: sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==} + engines: {node: '>=14.17'} + hasBin: true + + ufo@1.3.1: + resolution: {integrity: sha512-uY/99gMLIOlJPwATcMVYfqDSxUR9//AUcgZMzwfSTJPDKzA1S8mX4VLqa+fiAtveraQUBCz4FFcwVZBGbwBXIw==} + + unconfig@0.3.11: + resolution: {integrity: sha512-bV/nqePAKv71v3HdVUn6UefbsDKQWRX+bJIkiSm0+twIds6WiD2bJLWWT3i214+J/B4edufZpG2w7Y63Vbwxow==} + + union-value@1.0.1: + resolution: {integrity: sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==} + engines: {node: '>=0.10.0'} + + universalify@0.1.2: + resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} + engines: {node: '>= 4.0.0'} + + universalify@0.2.0: + resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} + engines: {node: '>= 4.0.0'} + + universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} + engines: {node: '>= 10.0.0'} + + unocss@0.57.4: + resolution: {integrity: sha512-rf5eiCVb8957rqzCyRxLzljeYguVMS70X322/Z1sYhosKhh8SBBMsC/TrZEf5o8LTn/MbFN9fVizEtbUKaFjUg==} + engines: {node: '>=14'} + peerDependencies: + '@unocss/webpack': 0.57.4 + vite: ^2.9.0 || ^3.0.0-0 || ^4.0.0 + peerDependenciesMeta: + '@unocss/webpack': + optional: true + vite: + optional: true + + unset-value@1.0.0: + resolution: {integrity: sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==} + engines: {node: '>=0.10.0'} + + untildify@4.0.0: + resolution: {integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==} + engines: {node: '>=8'} + + uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + + urix@0.1.0: + resolution: {integrity: sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==} + deprecated: Please see https://github.com/lydell/urix#deprecated + + url-parse@1.5.10: + resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} + + use@3.1.1: + resolution: {integrity: sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==} + engines: {node: '>=0.10.0'} + + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + utrie@1.0.2: + resolution: {integrity: sha512-1MLa5ouZiOmQzUbjbu9VmjLzn1QLXBhwpUa7kdLUQK+KQ5KA9I1vk5U4YHe/X2Ch7PYnJfWuWT+VbuxbGwljhw==} + + validate-npm-package-license@3.0.4: + resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} + + validator@13.11.0: + resolution: {integrity: sha512-Ii+sehpSfZy+At5nPdnyMhx78fEoPDkR2XW/zimHEL3MyGJQOCQ7WeP20jPYRz7ZCpcKLB21NxuXHF3bxjStBQ==} + engines: {node: '>= 0.10'} + + vary@1.1.2: + resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} + engines: {node: '>= 0.8'} + + vite-node@0.34.6: + resolution: {integrity: sha512-nlBMJ9x6n7/Amaz6F3zJ97EBwR2FkzhBRxF5e+jE6LA3yi6Wtc2lyTij1OnDMIr34v5g/tVQtsVAzhT0jc5ygA==} + engines: {node: '>=v14.18.0'} + hasBin: true + + vite-plugin-dts@3.6.3: + resolution: {integrity: sha512-NyRvgobl15rYj65coi/gH7UAEH+CpSjh539DbGb40DfOTZSvDLNYTzc8CK4460W+LqXuMK7+U3JAxRB3ksrNPw==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + typescript: '*' + vite: '*' + peerDependenciesMeta: + vite: + optional: true + + vite-plugin-svg-icons@2.0.1: + resolution: {integrity: sha512-6ktD+DhV6Rz3VtedYvBKKVA2eXF+sAQVaKkKLDSqGUfnhqXl3bj5PPkVTl3VexfTuZy66PmINi8Q6eFnVfRUmA==} + peerDependencies: + vite: '>=2.0.0' + + vite@4.4.11: + resolution: {integrity: sha512-ksNZJlkcU9b0lBwAGZGGaZHCMqHsc8OpgtoYhsQ4/I2v5cnpmmmqe5pM4nv/4Hn6G/2GhTdj0DhZh2e+Er1q5A==} + engines: {node: ^14.18.0 || >=16.0.0} + hasBin: true + peerDependencies: + '@types/node': '>= 14' + less: '*' + lightningcss: ^1.21.0 + sass: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 + peerDependenciesMeta: + '@types/node': + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + + vitest@0.34.6: + resolution: {integrity: sha512-+5CALsOvbNKnS+ZHMXtuUC7nL8/7F1F2DnHGjSsszX8zCjWSSviphCb/NuS9Nzf4Q03KyyDRBAXhF/8lffME4Q==} + engines: {node: '>=v14.18.0'} + hasBin: true + peerDependencies: + '@edge-runtime/vm': '*' + '@vitest/browser': '*' + '@vitest/ui': '*' + happy-dom: '*' + jsdom: '*' + playwright: '*' + safaridriver: '*' + webdriverio: '*' + peerDependenciesMeta: + '@edge-runtime/vm': + optional: true + '@vitest/browser': + optional: true + '@vitest/ui': + optional: true + happy-dom: + optional: true + jsdom: + optional: true + playwright: + optional: true + safaridriver: + optional: true + webdriverio: + optional: true + + vue-component-type-helpers@1.8.4: + resolution: {integrity: sha512-6bnLkn8O0JJyiFSIF0EfCogzeqNXpnjJ0vW/SZzNHfe6sPx30lTtTXlE5TFs2qhJlAtDFybStVNpL73cPe3OMQ==} + + vue-demi@0.14.6: + resolution: {integrity: sha512-8QA7wrYSHKaYgUxDA5ZC24w+eHm3sYCbp0EzcDwKqN3p6HqtTCGR/GVsPyZW92unff4UlcSh++lmqDWN3ZIq4w==} + engines: {node: '>=12'} + hasBin: true + peerDependencies: + '@vue/composition-api': ^1.0.0-rc.1 + vue: ^3.0.0-0 || ^2.6.0 + peerDependenciesMeta: + '@vue/composition-api': + optional: true + + vue-demi@https://registry.npmmirror.com/vue-demi/-/vue-demi-0.13.11.tgz: + resolution: {integrity: sha512-IR8HoEEGM65YY3ZJYAjMlKygDQn25D5ajNFNoKh9RSDMQtlzCxtfQjdQgv9jjK+m3377SsJXY8ysq8kLCZL25A==, tarball: https://registry.npmmirror.com/vue-demi/-/vue-demi-0.13.11.tgz} + version: 0.13.11 + engines: {node: '>=12'} + hasBin: true + peerDependencies: + '@vue/composition-api': ^1.0.0-rc.1 + vue: ^3.0.0-0 || ^2.6.0 + peerDependenciesMeta: + '@vue/composition-api': + optional: true + + vue-demi@https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.6.tgz: + resolution: {integrity: sha512-8QA7wrYSHKaYgUxDA5ZC24w+eHm3sYCbp0EzcDwKqN3p6HqtTCGR/GVsPyZW92unff4UlcSh++lmqDWN3ZIq4w==, tarball: https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.6.tgz} + version: 0.14.6 + engines: {node: '>=12'} + hasBin: true + peerDependencies: + '@vue/composition-api': ^1.0.0-rc.1 + vue: ^3.0.0-0 || ^2.6.0 + peerDependenciesMeta: + '@vue/composition-api': + optional: true + + vue-echarts@https://registry.npmmirror.com/vue-echarts/-/vue-echarts-6.6.5.tgz: + resolution: {integrity: sha512-LO+jQrBu3OZMMp1O00VOdeU1Lnc1tqY1UFmTha8G5ntOsz7NxLYs3+S3l32E53dHdax+YlEh8ZWMHMZGAuELig==, tarball: https://registry.npmmirror.com/vue-echarts/-/vue-echarts-6.6.5.tgz} + version: 6.6.5 + peerDependencies: + '@vue/composition-api': ^1.0.5 + echarts: ^5.4.1 + vue: ^2.6.12 || ^3.1.1 + peerDependenciesMeta: + '@vue/composition-api': + optional: true + + vue-eslint-parser@9.3.2: + resolution: {integrity: sha512-q7tWyCVaV9f8iQyIA5Mkj/S6AoJ9KBN8IeUSf3XEmBrOtxOZnfTg5s4KClbZBCK3GtnT/+RyCLZyDHuZwTuBjg==} + engines: {node: ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: '>=6.0.0' + + vue-router@https://registry.npmmirror.com/vue-router/-/vue-router-4.2.5.tgz: + resolution: {integrity: sha512-DIUpKcyg4+PTQKfFPX88UWhlagBEBEfJ5A8XDXRJLUnZOvcpMF8o/dnL90vpVkGaPbjvXazV/rC1qBKrZlFugw==, tarball: https://registry.npmmirror.com/vue-router/-/vue-router-4.2.5.tgz} + version: 4.2.5 + peerDependencies: + vue: ^3.2.0 + + vue-template-compiler@2.7.15: + resolution: {integrity: sha512-yQxjxMptBL7UAog00O8sANud99C6wJF+7kgbcwqkvA38vCGF7HWE66w0ZFnS/kX5gSoJr/PQ4/oS3Ne2pW37Og==} + + vue-tsc@1.8.19: + resolution: {integrity: sha512-tacMQLQ0CXAfbhRycCL5sWIy1qujXaIEtP1hIQpzHWOUuICbtTj9gJyFf91PvzG5KCNIkA5Eg7k2Fmgt28l5DQ==} + hasBin: true + peerDependencies: + typescript: '*' + + vue-tsc@1.8.22: + resolution: {integrity: sha512-j9P4kHtW6eEE08aS5McFZE/ivmipXy0JzrnTgbomfABMaVKx37kNBw//irL3+LlE3kOo63XpnRigyPC3w7+z+A==} + hasBin: true + peerDependencies: + typescript: '*' + + vue3-ace-editor@2.2.4: + resolution: {integrity: sha512-FZkEyfpbH068BwjhMyNROxfEI8135Sc+x8ouxkMdCNkuj/Tuw83VP/gStFQqZHqljyX9/VfMTCdTqtOnJZGN8g==} + peerDependencies: + ace-builds: '*' + vue: ^3 + + vue@3.3.4: + resolution: {integrity: sha512-VTyEYn3yvIeY1Py0WaYGZsXnz3y5UnGi62GjVEqvEGPl6nxbOrCXbVOTQWBEJUqAyTUk2uJ5JLVnYJ6ZzGbrSw==} + + w3c-xmlserializer@4.0.0: + resolution: {integrity: sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==} + engines: {node: '>=14'} + + webidl-conversions@7.0.0: + resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} + engines: {node: '>=12'} + + whatwg-encoding@2.0.0: + resolution: {integrity: sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==} + engines: {node: '>=12'} + + whatwg-mimetype@3.0.0: + resolution: {integrity: sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==} + engines: {node: '>=12'} + + whatwg-url@12.0.1: + resolution: {integrity: sha512-Ed/LrqB8EPlGxjS+TrsXcpUond1mhccS3pchLhzSgPCnTimUCKj3IZE75pAs5m6heB2U2TMerKFUXheyHY+VDQ==} + engines: {node: '>=14'} + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + why-is-node-running@2.2.2: + resolution: {integrity: sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==} + engines: {node: '>=8'} + hasBin: true + + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + ws@8.14.2: + resolution: {integrity: sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + xml-name-validator@4.0.0: + resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} + engines: {node: '>=12'} + + xmlchars@2.2.0: + resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} + + yallist@4.0.0: + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + + yocto-queue@1.0.0: + resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==} + engines: {node: '>=12.20'} + + z-schema@5.0.5: + resolution: {integrity: sha512-D7eujBWkLa3p2sIpJA0d1pr7es+a7m0vFAnZLlCEKq/Ij2k0MLi9Br2UPxoxdYystm5K1yeBGzub0FlYUEWj2Q==} + engines: {node: '>=8.0.0'} + hasBin: true + + zrender@https://registry.npmmirror.com/zrender/-/zrender-5.4.4.tgz: + resolution: {integrity: sha512-0VxCNJ7AGOMCWeHVyTrGzUgrK4asT4ml9PEkeGirAkKNYXYzoPJCLvmyfdoOXcjTHPs10OZVMfD1Rwg16AZyYw==, tarball: https://registry.npmmirror.com/zrender/-/zrender-5.4.4.tgz} + version: 5.4.4 + +snapshots: + + '@aashutoshrathi/word-wrap@1.2.6': {} + + '@ampproject/remapping@2.2.1': + dependencies: + '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/trace-mapping': 0.3.20 + + '@antfu/install-pkg@0.1.1': + dependencies: + execa: 5.1.1 + find-up: 5.0.0 + + '@antfu/utils@0.7.6': {} + + '@babel/code-frame@7.22.13': + dependencies: + '@babel/highlight': 7.22.20 + chalk: 2.4.2 + + '@babel/helper-string-parser@7.22.5': {} + + '@babel/helper-validator-identifier@7.22.20': {} + + '@babel/highlight@7.22.20': + dependencies: + '@babel/helper-validator-identifier': 7.22.20 + chalk: 2.4.2 + js-tokens: 4.0.0 + + '@babel/parser@7.23.3': + dependencies: + '@babel/types': 7.23.3 + + '@babel/types@7.23.3': + dependencies: + '@babel/helper-string-parser': 7.22.5 + '@babel/helper-validator-identifier': 7.22.20 + to-fast-properties: 2.0.0 + + '@ctrl/tinycolor@3.6.1': {} + + '@element-plus/icons-vue@2.1.0(vue@3.3.4)': + dependencies: + vue: 3.3.4 + + '@esbuild/android-arm64@0.18.20': + optional: true + + '@esbuild/android-arm@0.18.20': + optional: true + + '@esbuild/android-x64@0.18.20': + optional: true + + '@esbuild/darwin-arm64@0.18.20': + optional: true + + '@esbuild/darwin-x64@0.18.20': + optional: true + + '@esbuild/freebsd-arm64@0.18.20': + optional: true + + '@esbuild/freebsd-x64@0.18.20': + optional: true + + '@esbuild/linux-arm64@0.18.20': + optional: true + + '@esbuild/linux-arm@0.18.20': + optional: true + + '@esbuild/linux-ia32@0.18.20': + optional: true + + '@esbuild/linux-loong64@0.18.20': + optional: true + + '@esbuild/linux-mips64el@0.18.20': + optional: true + + '@esbuild/linux-ppc64@0.18.20': + optional: true + + '@esbuild/linux-riscv64@0.18.20': + optional: true + + '@esbuild/linux-s390x@0.18.20': + optional: true + + '@esbuild/linux-x64@0.18.20': + optional: true + + '@esbuild/netbsd-x64@0.18.20': + optional: true + + '@esbuild/openbsd-x64@0.18.20': + optional: true + + '@esbuild/sunos-x64@0.18.20': + optional: true + + '@esbuild/win32-arm64@0.18.20': + optional: true + + '@esbuild/win32-ia32@0.18.20': + optional: true + + '@esbuild/win32-x64@0.18.20': + optional: true + + '@eslint-community/eslint-utils@4.4.0(eslint@8.49.0)': + dependencies: + eslint: 8.49.0 + eslint-visitor-keys: 3.4.3 + + '@eslint-community/regexpp@4.10.0': {} + + '@eslint/eslintrc@2.1.3': + dependencies: + ajv: 6.12.6 + debug: 4.3.4 + espree: 9.6.1 + globals: 13.23.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 + + '@eslint/js@8.49.0': {} + + '@floating-ui/core@1.5.0': + dependencies: + '@floating-ui/utils': 0.1.6 + + '@floating-ui/dom@1.5.3': + dependencies: + '@floating-ui/core': 1.5.0 + '@floating-ui/utils': 0.1.6 + + '@floating-ui/utils@0.1.6': {} + + '@humanwhocodes/config-array@0.11.13': + dependencies: + '@humanwhocodes/object-schema': 2.0.1 + debug: 4.3.4 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + + '@humanwhocodes/module-importer@1.0.1': {} + + '@humanwhocodes/object-schema@2.0.1': {} + + '@iconify/types@2.0.0': {} + + '@iconify/utils@2.1.11': + dependencies: + '@antfu/install-pkg': 0.1.1 + '@antfu/utils': 0.7.6 + '@iconify/types': 2.0.0 + debug: 4.3.4 + kolorist: 1.8.0 + local-pkg: 0.4.3 + transitivePeerDependencies: + - supports-color + + '@jest/schemas@29.6.3': + dependencies: + '@sinclair/typebox': 0.27.8 + + '@jridgewell/gen-mapping@0.3.3': + dependencies: + '@jridgewell/set-array': 1.1.2 + '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/trace-mapping': 0.3.20 + + '@jridgewell/resolve-uri@3.1.1': {} + + '@jridgewell/set-array@1.1.2': {} + + '@jridgewell/sourcemap-codec@1.4.15': {} + + '@jridgewell/trace-mapping@0.3.20': + dependencies: + '@jridgewell/resolve-uri': 3.1.1 + '@jridgewell/sourcemap-codec': 1.4.15 + + '@microsoft/api-extractor-model@7.28.2(@types/node@18.18.5)': + dependencies: + '@microsoft/tsdoc': 0.14.2 + '@microsoft/tsdoc-config': 0.16.2 + '@rushstack/node-core-library': 3.61.0(@types/node@18.18.5) + transitivePeerDependencies: + - '@types/node' + + '@microsoft/api-extractor@7.38.3(@types/node@18.18.5)': + dependencies: + '@microsoft/api-extractor-model': 7.28.2(@types/node@18.18.5) + '@microsoft/tsdoc': 0.14.2 + '@microsoft/tsdoc-config': 0.16.2 + '@rushstack/node-core-library': 3.61.0(@types/node@18.18.5) + '@rushstack/rig-package': 0.5.1 + '@rushstack/ts-command-line': 4.17.1 + colors: 1.2.5 + lodash: 4.17.21 + resolve: 1.22.8 + semver: 7.5.4 + source-map: 0.6.1 + typescript: 5.0.4 + transitivePeerDependencies: + - '@types/node' + + '@microsoft/tsdoc-config@0.16.2': + dependencies: + '@microsoft/tsdoc': 0.14.2 + ajv: 6.12.6 + jju: 1.4.0 + resolve: 1.19.0 + + '@microsoft/tsdoc@0.14.2': {} + + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + '@nodelib/fs.stat@2.0.5': {} + + '@nodelib/fs.walk@1.2.8': + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.15.0 + + '@one-ini/wasm@0.1.1': {} + + '@pkgr/utils@2.4.2': + dependencies: + cross-spawn: 7.0.3 + fast-glob: 3.3.2 + is-glob: 4.0.3 + open: 9.1.0 + picocolors: 1.0.0 + tslib: 2.6.2 + + '@polka/url@1.0.0-next.23': {} + + '@rollup/pluginutils@5.0.5(rollup@3.29.4)': + dependencies: + '@types/estree': 1.0.5 + estree-walker: 2.0.2 + picomatch: 2.3.1 + optionalDependencies: + rollup: 3.29.4 + + '@rushstack/eslint-patch@1.3.3': {} + + '@rushstack/node-core-library@3.61.0(@types/node@18.18.5)': + dependencies: + colors: 1.2.5 + fs-extra: 7.0.1 + import-lazy: 4.0.0 + jju: 1.4.0 + resolve: 1.22.8 + semver: 7.5.4 + z-schema: 5.0.5 + optionalDependencies: + '@types/node': 18.18.5 + + '@rushstack/rig-package@0.5.1': + dependencies: + resolve: 1.22.8 + strip-json-comments: 3.1.1 + + '@rushstack/ts-command-line@4.17.1': + dependencies: + '@types/argparse': 1.0.38 + argparse: 1.0.10 + colors: 1.2.5 + string-argv: 0.3.2 + + '@sinclair/typebox@0.27.8': {} + + '@sxzz/popperjs-es@2.11.7': {} + + '@tootallnate/once@2.0.0': {} + + '@trysound/sax@0.2.0': {} + + '@tsconfig/node18@18.2.2': {} + + '@types/argparse@1.0.38': {} + + '@types/chai-subset@1.3.5': + dependencies: + '@types/chai': 4.3.10 + + '@types/chai@4.3.10': {} + + '@types/estree@1.0.5': {} + + '@types/jsdom@21.1.3': + dependencies: + '@types/node': 18.18.5 + '@types/tough-cookie': 4.0.5 + parse5: 7.1.2 + + '@types/json-schema@7.0.15': {} + + '@types/lodash-es@4.17.12': + dependencies: + '@types/lodash': 4.14.202 + + '@types/lodash@4.14.202': {} + + '@types/node@18.18.5': {} + + '@types/normalize-package-data@2.4.4': {} + + '@types/offscreencanvas@2019.7.3': {} + + '@types/raf@3.4.3': {} + + '@types/semver@7.5.5': {} + + '@types/svgo@2.6.4': + dependencies: + '@types/node': 18.18.5 + + '@types/tough-cookie@4.0.5': {} + + '@types/web-bluetooth@0.0.16': {} + + '@types/web-bluetooth@0.0.20': {} + + '@typescript-eslint/eslint-plugin@6.11.0(@typescript-eslint/parser@6.11.0(eslint@8.49.0)(typescript@5.2.2))(eslint@8.49.0)(typescript@5.2.2)': + dependencies: + '@eslint-community/regexpp': 4.10.0 + '@typescript-eslint/parser': 6.11.0(eslint@8.49.0)(typescript@5.2.2) + '@typescript-eslint/scope-manager': 6.11.0 + '@typescript-eslint/type-utils': 6.11.0(eslint@8.49.0)(typescript@5.2.2) + '@typescript-eslint/utils': 6.11.0(eslint@8.49.0)(typescript@5.2.2) + '@typescript-eslint/visitor-keys': 6.11.0 + debug: 4.3.4 + eslint: 8.49.0 + graphemer: 1.4.0 + ignore: 5.2.4 + natural-compare: 1.4.0 + semver: 7.5.4 + ts-api-utils: 1.0.3(typescript@5.2.2) + optionalDependencies: + typescript: 5.2.2 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/parser@6.11.0(eslint@8.49.0)(typescript@5.2.2)': + dependencies: + '@typescript-eslint/scope-manager': 6.11.0 + '@typescript-eslint/types': 6.11.0 + '@typescript-eslint/typescript-estree': 6.11.0(typescript@5.2.2) + '@typescript-eslint/visitor-keys': 6.11.0 + debug: 4.3.4 + eslint: 8.49.0 + optionalDependencies: + typescript: 5.2.2 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/scope-manager@6.11.0': + dependencies: + '@typescript-eslint/types': 6.11.0 + '@typescript-eslint/visitor-keys': 6.11.0 + + '@typescript-eslint/type-utils@6.11.0(eslint@8.49.0)(typescript@5.2.2)': + dependencies: + '@typescript-eslint/typescript-estree': 6.11.0(typescript@5.2.2) + '@typescript-eslint/utils': 6.11.0(eslint@8.49.0)(typescript@5.2.2) + debug: 4.3.4 + eslint: 8.49.0 + ts-api-utils: 1.0.3(typescript@5.2.2) + optionalDependencies: + typescript: 5.2.2 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/types@6.11.0': {} + + '@typescript-eslint/typescript-estree@6.11.0(typescript@5.2.2)': + dependencies: + '@typescript-eslint/types': 6.11.0 + '@typescript-eslint/visitor-keys': 6.11.0 + debug: 4.3.4 + globby: 11.1.0 + is-glob: 4.0.3 + semver: 7.5.4 + ts-api-utils: 1.0.3(typescript@5.2.2) + optionalDependencies: + typescript: 5.2.2 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/utils@6.11.0(eslint@8.49.0)(typescript@5.2.2)': + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.49.0) + '@types/json-schema': 7.0.15 + '@types/semver': 7.5.5 + '@typescript-eslint/scope-manager': 6.11.0 + '@typescript-eslint/types': 6.11.0 + '@typescript-eslint/typescript-estree': 6.11.0(typescript@5.2.2) + eslint: 8.49.0 + semver: 7.5.4 + transitivePeerDependencies: + - supports-color + - typescript + + '@typescript-eslint/visitor-keys@6.11.0': + dependencies: + '@typescript-eslint/types': 6.11.0 + eslint-visitor-keys: 3.4.3 + + '@unocss/astro@0.57.4(rollup@3.29.4)(vite@4.4.11(@types/node@18.18.5)(less@4.2.0))': + dependencies: + '@unocss/core': 0.57.4 + '@unocss/reset': 0.57.4 + '@unocss/vite': 0.57.4(rollup@3.29.4)(vite@4.4.11(@types/node@18.18.5)(less@4.2.0)) + optionalDependencies: + vite: 4.4.11(@types/node@18.18.5)(less@4.2.0) + transitivePeerDependencies: + - rollup + + '@unocss/cli@0.57.4(rollup@3.29.4)': + dependencies: + '@ampproject/remapping': 2.2.1 + '@rollup/pluginutils': 5.0.5(rollup@3.29.4) + '@unocss/config': 0.57.4 + '@unocss/core': 0.57.4 + '@unocss/preset-uno': 0.57.4 + cac: 6.7.14 + chokidar: 3.5.3 + colorette: 2.0.20 + consola: 3.2.3 + fast-glob: 3.3.2 + magic-string: 0.30.5 + pathe: 1.1.1 + perfect-debounce: 1.0.0 + transitivePeerDependencies: + - rollup + + '@unocss/config@0.57.4': + dependencies: + '@unocss/core': 0.57.4 + unconfig: 0.3.11 + + '@unocss/core@0.57.4': {} + + '@unocss/extractor-arbitrary-variants@0.57.4': + dependencies: + '@unocss/core': 0.57.4 + + '@unocss/inspector@0.57.4': + dependencies: + '@unocss/core': 0.57.4 + '@unocss/rule-utils': 0.57.4 + gzip-size: 6.0.0 + sirv: 2.0.3 + + '@unocss/postcss@0.57.4(postcss@5.2.18)': + dependencies: + '@unocss/config': 0.57.4 + '@unocss/core': 0.57.4 + '@unocss/rule-utils': 0.57.4 + css-tree: 2.3.1 + fast-glob: 3.3.2 + magic-string: 0.30.5 + postcss: 5.2.18 + + '@unocss/preset-attributify@0.57.4': + dependencies: + '@unocss/core': 0.57.4 + + '@unocss/preset-icons@0.57.4': + dependencies: + '@iconify/utils': 2.1.11 + '@unocss/core': 0.57.4 + ofetch: 1.3.3 + transitivePeerDependencies: + - supports-color + + '@unocss/preset-mini@0.57.4': + dependencies: + '@unocss/core': 0.57.4 + '@unocss/extractor-arbitrary-variants': 0.57.4 + '@unocss/rule-utils': 0.57.4 + + '@unocss/preset-tagify@0.57.4': + dependencies: + '@unocss/core': 0.57.4 + + '@unocss/preset-typography@0.57.4': + dependencies: + '@unocss/core': 0.57.4 + '@unocss/preset-mini': 0.57.4 + + '@unocss/preset-uno@0.57.4': + dependencies: + '@unocss/core': 0.57.4 + '@unocss/preset-mini': 0.57.4 + '@unocss/preset-wind': 0.57.4 + '@unocss/rule-utils': 0.57.4 + + '@unocss/preset-web-fonts@0.57.4': + dependencies: + '@unocss/core': 0.57.4 + ofetch: 1.3.3 + + '@unocss/preset-wind@0.57.4': + dependencies: + '@unocss/core': 0.57.4 + '@unocss/preset-mini': 0.57.4 + '@unocss/rule-utils': 0.57.4 + + '@unocss/reset@0.57.4': {} + + '@unocss/rule-utils@0.57.4': + dependencies: + '@unocss/core': 0.57.4 + magic-string: 0.30.5 + + '@unocss/scope@0.57.4': {} + + '@unocss/transformer-attributify-jsx-babel@0.57.4': + dependencies: + '@unocss/core': 0.57.4 + + '@unocss/transformer-attributify-jsx@0.57.4': + dependencies: + '@unocss/core': 0.57.4 + + '@unocss/transformer-compile-class@0.57.4': + dependencies: + '@unocss/core': 0.57.4 + + '@unocss/transformer-directives@0.57.4': + dependencies: + '@unocss/core': 0.57.4 + '@unocss/rule-utils': 0.57.4 + css-tree: 2.3.1 + + '@unocss/transformer-variant-group@0.57.4': + dependencies: + '@unocss/core': 0.57.4 + + '@unocss/vite@0.57.4(rollup@3.29.4)(vite@4.4.11(@types/node@18.18.5)(less@4.2.0))': + dependencies: + '@ampproject/remapping': 2.2.1 + '@rollup/pluginutils': 5.0.5(rollup@3.29.4) + '@unocss/config': 0.57.4 + '@unocss/core': 0.57.4 + '@unocss/inspector': 0.57.4 + '@unocss/scope': 0.57.4 + '@unocss/transformer-directives': 0.57.4 + chokidar: 3.5.3 + fast-glob: 3.3.2 + magic-string: 0.30.5 + vite: 4.4.11(@types/node@18.18.5)(less@4.2.0) + transitivePeerDependencies: + - rollup + + '@vitejs/plugin-vue@4.4.0(vite@4.4.11(@types/node@18.18.5)(less@4.2.0))(vue@3.3.4)': + dependencies: + vite: 4.4.11(@types/node@18.18.5)(less@4.2.0) + vue: 3.3.4 + + '@vitest/expect@0.34.6': + dependencies: + '@vitest/spy': 0.34.6 + '@vitest/utils': 0.34.6 + chai: 4.3.10 + + '@vitest/runner@0.34.6': + dependencies: + '@vitest/utils': 0.34.6 + p-limit: 4.0.0 + pathe: 1.1.1 + + '@vitest/snapshot@0.34.6': + dependencies: + magic-string: 0.30.5 + pathe: 1.1.1 + pretty-format: 29.7.0 + + '@vitest/spy@0.34.6': + dependencies: + tinyspy: 2.2.0 + + '@vitest/utils@0.34.6': + dependencies: + diff-sequences: 29.6.3 + loupe: 2.3.7 + pretty-format: 29.7.0 + + '@volar/language-core@1.10.10': + dependencies: + '@volar/source-map': 1.10.10 + + '@volar/source-map@1.10.10': + dependencies: + muggle-string: 0.3.1 + + '@volar/typescript@1.10.10': + dependencies: + '@volar/language-core': 1.10.10 + path-browserify: 1.0.1 + + '@vue/compiler-core@3.3.4': + dependencies: + '@babel/parser': 7.23.3 + '@vue/shared': 3.3.4 + estree-walker: 2.0.2 + source-map-js: 1.0.2 + + '@vue/compiler-core@3.3.8': + dependencies: + '@babel/parser': 7.23.3 + '@vue/shared': 3.3.8 + estree-walker: 2.0.2 + source-map-js: 1.0.2 + + '@vue/compiler-dom@3.3.4': + dependencies: + '@vue/compiler-core': 3.3.4 + '@vue/shared': 3.3.4 + + '@vue/compiler-dom@3.3.8': + dependencies: + '@vue/compiler-core': 3.3.8 + '@vue/shared': 3.3.8 + + '@vue/compiler-sfc@3.3.4': + dependencies: + '@babel/parser': 7.23.3 + '@vue/compiler-core': 3.3.4 + '@vue/compiler-dom': 3.3.4 + '@vue/compiler-ssr': 3.3.4 + '@vue/reactivity-transform': 3.3.4 + '@vue/shared': 3.3.4 + estree-walker: 2.0.2 + magic-string: 0.30.5 + postcss: 8.4.31 + source-map-js: 1.0.2 + + '@vue/compiler-ssr@3.3.4': + dependencies: + '@vue/compiler-dom': 3.3.4 + '@vue/shared': 3.3.4 + + '@vue/devtools-api@https://registry.npmmirror.com/@vue/devtools-api/-/devtools-api-6.5.1.tgz': {} + + '@vue/eslint-config-prettier@8.0.0(eslint@8.49.0)(prettier@3.0.3)': + dependencies: + eslint: 8.49.0 + eslint-config-prettier: 8.10.0(eslint@8.49.0) + eslint-plugin-prettier: 5.0.1(eslint-config-prettier@8.10.0(eslint@8.49.0))(eslint@8.49.0)(prettier@3.0.3) + prettier: 3.0.3 + transitivePeerDependencies: + - '@types/eslint' + + '@vue/eslint-config-typescript@12.0.0(eslint-plugin-vue@9.17.0(eslint@8.49.0))(eslint@8.49.0)(typescript@5.2.2)': + dependencies: + '@typescript-eslint/eslint-plugin': 6.11.0(@typescript-eslint/parser@6.11.0(eslint@8.49.0)(typescript@5.2.2))(eslint@8.49.0)(typescript@5.2.2) + '@typescript-eslint/parser': 6.11.0(eslint@8.49.0)(typescript@5.2.2) + eslint: 8.49.0 + eslint-plugin-vue: 9.17.0(eslint@8.49.0) + vue-eslint-parser: 9.3.2(eslint@8.49.0) + optionalDependencies: + typescript: 5.2.2 + transitivePeerDependencies: + - supports-color + + '@vue/language-core@1.8.19(typescript@5.2.2)': + dependencies: + '@volar/language-core': 1.10.10 + '@volar/source-map': 1.10.10 + '@vue/compiler-dom': 3.3.8 + '@vue/reactivity': 3.3.8 + '@vue/shared': 3.3.8 + minimatch: 9.0.3 + muggle-string: 0.3.1 + vue-template-compiler: 2.7.15 + optionalDependencies: + typescript: 5.2.2 + + '@vue/language-core@1.8.22(typescript@5.2.2)': + dependencies: + '@volar/language-core': 1.10.10 + '@volar/source-map': 1.10.10 + '@vue/compiler-dom': 3.3.8 + '@vue/shared': 3.3.8 + computeds: 0.0.1 + minimatch: 9.0.3 + muggle-string: 0.3.1 + vue-template-compiler: 2.7.15 + optionalDependencies: + typescript: 5.2.2 + + '@vue/reactivity-transform@3.3.4': + dependencies: + '@babel/parser': 7.23.3 + '@vue/compiler-core': 3.3.4 + '@vue/shared': 3.3.4 + estree-walker: 2.0.2 + magic-string: 0.30.5 + + '@vue/reactivity@3.3.4': + dependencies: + '@vue/shared': 3.3.4 + + '@vue/reactivity@3.3.8': + dependencies: + '@vue/shared': 3.3.8 + + '@vue/runtime-core@3.3.4': + dependencies: + '@vue/reactivity': 3.3.4 + '@vue/shared': 3.3.4 + + '@vue/runtime-dom@3.3.4': + dependencies: + '@vue/runtime-core': 3.3.4 + '@vue/shared': 3.3.4 + csstype: 3.1.2 + + '@vue/server-renderer@3.3.4(vue@3.3.4)': + dependencies: + '@vue/compiler-ssr': 3.3.4 + '@vue/shared': 3.3.4 + vue: 3.3.4 + + '@vue/shared@3.3.4': {} + + '@vue/shared@3.3.8': {} + + '@vue/test-utils@2.4.1(@vue/server-renderer@3.3.4(vue@3.3.4))(vue@3.3.4)': + dependencies: + js-beautify: 1.14.9 + vue: 3.3.4 + vue-component-type-helpers: 1.8.4 + optionalDependencies: + '@vue/server-renderer': 3.3.4(vue@3.3.4) + + '@vue/tsconfig@0.4.0': {} + + '@vue/typescript@1.8.19(typescript@5.2.2)': + dependencies: + '@volar/typescript': 1.10.10 + '@vue/language-core': 1.8.19(typescript@5.2.2) + transitivePeerDependencies: + - typescript + + '@vueuse/core@10.6.1(vue@3.3.4)': + dependencies: + '@types/web-bluetooth': 0.0.20 + '@vueuse/metadata': 10.6.1 + '@vueuse/shared': 10.6.1(vue@3.3.4) + vue-demi: 0.14.6(vue@3.3.4) + transitivePeerDependencies: + - '@vue/composition-api' + - vue + + '@vueuse/core@9.13.0(vue@3.3.4)': + dependencies: + '@types/web-bluetooth': 0.0.16 + '@vueuse/metadata': 9.13.0 + '@vueuse/shared': 9.13.0(vue@3.3.4) + vue-demi: 0.14.6(vue@3.3.4) + transitivePeerDependencies: + - '@vue/composition-api' + - vue + + '@vueuse/metadata@10.6.1': {} + + '@vueuse/metadata@9.13.0': {} + + '@vueuse/shared@10.6.1(vue@3.3.4)': + dependencies: + vue-demi: https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.6.tgz(vue@3.3.4) + transitivePeerDependencies: + - '@vue/composition-api' + - vue + + '@vueuse/shared@9.13.0(vue@3.3.4)': + dependencies: + vue-demi: 0.14.6(vue@3.3.4) + transitivePeerDependencies: + - '@vue/composition-api' + - vue + + abab@2.0.6: {} + + abbrev@1.1.1: {} + + ace-builds@1.32.0: {} + + acorn-jsx@5.3.2(acorn@8.11.2): + dependencies: + acorn: 8.11.2 + + acorn-walk@8.3.0: {} + + acorn@8.11.2: {} + + agent-base@6.0.2: + dependencies: + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + + ajv@6.12.6: + 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 + + animate.css@4.1.1: {} + + ansi-regex@2.1.1: {} + + ansi-regex@5.0.1: {} + + ansi-styles@2.2.1: {} + + ansi-styles@3.2.1: + dependencies: + color-convert: 1.9.3 + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + ansi-styles@5.2.0: {} + + ansi-styles@6.2.1: {} + + anymatch@3.1.3: + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + + argparse@1.0.10: + dependencies: + sprintf-js: 1.0.3 + + argparse@2.0.1: {} + + arr-diff@4.0.0: {} + + arr-flatten@1.1.0: {} + + arr-union@3.1.0: {} + + array-union@2.1.0: {} + + array-unique@0.3.2: {} + + assertion-error@1.1.0: {} + + assign-symbols@1.0.0: {} + + async-validator@4.2.5: {} + + asynckit@0.4.0: {} + + atob@2.1.2: {} + + balanced-match@1.0.2: {} + + base64-arraybuffer@1.0.2: {} + + base@0.11.2: + dependencies: + cache-base: 1.0.1 + class-utils: 0.3.6 + component-emitter: 1.3.1 + define-property: 1.0.0 + isobject: 3.0.1 + mixin-deep: 1.3.2 + pascalcase: 0.1.1 + + big-integer@1.6.51: {} + + big.js@5.2.2: {} + + binary-extensions@2.2.0: {} + + bluebird@3.7.2: {} + + boolbase@1.0.0: {} + + bplist-parser@0.2.0: + dependencies: + big-integer: 1.6.51 + + brace-expansion@1.1.11: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + brace-expansion@2.0.1: + dependencies: + balanced-match: 1.0.2 + + braces@2.3.2: + 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 + + braces@3.0.2: + dependencies: + fill-range: 7.0.1 + + bundle-name@3.0.0: + dependencies: + run-applescript: 5.0.0 + + cac@6.7.14: {} + + cache-base@1.0.1: + dependencies: + collection-visit: 1.0.0 + component-emitter: 1.3.1 + 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 + + callsites@3.1.0: {} + + canvg@4.0.1: + dependencies: + '@types/offscreencanvas': 2019.7.3 + '@types/raf': 3.4.3 + raf: 3.4.1 + rgbcolor: 1.0.1 + stackblur-canvas: 2.6.0 + svg-pathdata: 6.0.3 + + chai@4.3.10: + dependencies: + assertion-error: 1.1.0 + check-error: 1.0.3 + deep-eql: 4.1.3 + get-func-name: 2.0.2 + loupe: 2.3.7 + pathval: 1.1.1 + type-detect: 4.0.8 + + chalk@1.1.3: + 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 + + chalk@2.4.2: + dependencies: + ansi-styles: 3.2.1 + escape-string-regexp: 1.0.5 + supports-color: 5.5.0 + + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + check-error@1.0.3: + dependencies: + get-func-name: 2.0.2 + + chokidar@3.5.3: + dependencies: + anymatch: 3.1.3 + braces: 3.0.2 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 + + class-utils@0.3.6: + dependencies: + arr-union: 3.1.0 + define-property: 0.2.5 + isobject: 3.0.1 + static-extend: 0.1.2 + + clone@2.1.2: {} + + collection-visit@1.0.0: + dependencies: + map-visit: 1.0.0 + object-visit: 1.0.1 + + color-convert@1.9.3: + dependencies: + color-name: 1.1.3 + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.3: {} + + color-name@1.1.4: {} + + colorette@2.0.20: {} + + colors@1.2.5: {} + + combined-stream@1.0.8: + dependencies: + delayed-stream: 1.0.0 + + commander@10.0.1: {} + + commander@7.2.0: {} + + commander@9.5.0: + optional: true + + component-emitter@1.3.1: {} + + computeds@0.0.1: {} + + concat-map@0.0.1: {} + + config-chain@1.1.13: + dependencies: + ini: 1.3.8 + proto-list: 1.2.4 + + consola@3.2.3: {} + + copy-anything@2.0.6: + dependencies: + is-what: 3.14.1 + + copy-descriptor@0.1.1: {} + + cors@2.8.5: + dependencies: + object-assign: 4.1.1 + vary: 1.1.2 + + cross-spawn@7.0.3: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + css-line-break@2.1.0: + dependencies: + utrie: 1.0.2 + + css-select@4.3.0: + dependencies: + boolbase: 1.0.0 + css-what: 6.1.0 + domhandler: 4.3.1 + domutils: 2.8.0 + nth-check: 2.1.1 + + css-tree@1.1.3: + dependencies: + mdn-data: 2.0.14 + source-map: https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz + + css-tree@2.3.1: + dependencies: + mdn-data: 2.0.30 + source-map-js: 1.0.2 + + css-what@6.1.0: {} + + cssesc@3.0.0: {} + + csso@4.2.0: + dependencies: + css-tree: 1.1.3 + + cssstyle@3.0.0: + dependencies: + rrweb-cssom: 0.6.0 + + csstype@3.1.2: {} + + data-urls@4.0.0: + dependencies: + abab: 2.0.6 + whatwg-mimetype: 3.0.0 + whatwg-url: 12.0.1 + + dayjs@1.11.10: {} + + de-indent@1.0.2: {} + + debug@2.6.9: + dependencies: + ms: 2.0.0 + + debug@3.2.7: + dependencies: + ms: 2.1.2 + optional: true + + debug@4.3.4: + dependencies: + ms: 2.1.2 + + decimal.js@10.4.3: {} + + decode-uri-component@0.2.2: {} + + deep-eql@4.1.3: + dependencies: + type-detect: 4.0.8 + + deep-is@0.1.4: {} + + default-browser-id@3.0.0: + dependencies: + bplist-parser: 0.2.0 + untildify: 4.0.0 + + default-browser@4.0.0: + dependencies: + bundle-name: 3.0.0 + default-browser-id: 3.0.0 + execa: 7.2.0 + titleize: 3.0.0 + + define-lazy-prop@3.0.0: {} + + define-property@0.2.5: + dependencies: + is-descriptor: 0.1.7 + + define-property@1.0.0: + dependencies: + is-descriptor: 1.0.3 + + define-property@2.0.2: + dependencies: + is-descriptor: 1.0.3 + isobject: 3.0.1 + + defu@6.1.3: {} + + delayed-stream@1.0.0: {} + + destr@2.0.2: {} + + diff-sequences@29.6.3: {} + + dir-glob@3.0.1: + dependencies: + path-type: 4.0.0 + + doctrine@3.0.0: + dependencies: + esutils: 2.0.3 + + dom-serializer@0.2.2: + dependencies: + domelementtype: 2.3.0 + entities: 2.2.0 + + dom-serializer@1.4.1: + dependencies: + domelementtype: 2.3.0 + domhandler: 4.3.1 + entities: 2.2.0 + + domelementtype@1.3.1: {} + + domelementtype@2.3.0: {} + + domexception@4.0.0: + dependencies: + webidl-conversions: 7.0.0 + + domhandler@2.4.2: + dependencies: + domelementtype: 1.3.1 + + domhandler@4.3.1: + dependencies: + domelementtype: 2.3.0 + + domutils@1.7.0: + dependencies: + dom-serializer: 0.2.2 + domelementtype: 1.3.1 + + domutils@2.8.0: + dependencies: + dom-serializer: 1.4.1 + domelementtype: 2.3.0 + domhandler: 4.3.1 + + duplexer@0.1.2: {} + + echarts@https://registry.npmmirror.com/echarts/-/echarts-5.4.3.tgz: + dependencies: + tslib: https://registry.npmmirror.com/tslib/-/tslib-2.3.0.tgz + zrender: https://registry.npmmirror.com/zrender/-/zrender-5.4.4.tgz + + editorconfig@1.0.4: + dependencies: + '@one-ini/wasm': 0.1.1 + commander: 10.0.1 + minimatch: 9.0.1 + semver: 7.5.4 + + element-plus@2.4.2(vue@3.3.4): + dependencies: + '@ctrl/tinycolor': 3.6.1 + '@element-plus/icons-vue': 2.1.0(vue@3.3.4) + '@floating-ui/dom': 1.5.3 + '@popperjs/core': '@sxzz/popperjs-es@2.11.7' + '@types/lodash': 4.14.202 + '@types/lodash-es': 4.17.12 + '@vueuse/core': 9.13.0(vue@3.3.4) + async-validator: 4.2.5 + dayjs: 1.11.10 + escape-html: 1.0.3 + lodash: 4.17.21 + lodash-es: 4.17.21 + lodash-unified: 1.0.3(@types/lodash-es@4.17.12)(lodash-es@4.17.21)(lodash@4.17.21) + memoize-one: 6.0.0 + normalize-wheel-es: 1.2.0 + vue: 3.3.4 + transitivePeerDependencies: + - '@vue/composition-api' + + emojis-list@3.0.0: {} + + entities@1.1.2: {} + + entities@2.2.0: {} + + entities@4.5.0: {} + + errno@0.1.8: + dependencies: + prr: 1.0.1 + optional: true + + error-ex@1.3.2: + dependencies: + is-arrayish: 0.2.1 + + esbuild@0.18.20: + optionalDependencies: + '@esbuild/android-arm': 0.18.20 + '@esbuild/android-arm64': 0.18.20 + '@esbuild/android-x64': 0.18.20 + '@esbuild/darwin-arm64': 0.18.20 + '@esbuild/darwin-x64': 0.18.20 + '@esbuild/freebsd-arm64': 0.18.20 + '@esbuild/freebsd-x64': 0.18.20 + '@esbuild/linux-arm': 0.18.20 + '@esbuild/linux-arm64': 0.18.20 + '@esbuild/linux-ia32': 0.18.20 + '@esbuild/linux-loong64': 0.18.20 + '@esbuild/linux-mips64el': 0.18.20 + '@esbuild/linux-ppc64': 0.18.20 + '@esbuild/linux-riscv64': 0.18.20 + '@esbuild/linux-s390x': 0.18.20 + '@esbuild/linux-x64': 0.18.20 + '@esbuild/netbsd-x64': 0.18.20 + '@esbuild/openbsd-x64': 0.18.20 + '@esbuild/sunos-x64': 0.18.20 + '@esbuild/win32-arm64': 0.18.20 + '@esbuild/win32-ia32': 0.18.20 + '@esbuild/win32-x64': 0.18.20 + + escape-html@1.0.3: {} + + escape-string-regexp@1.0.5: {} + + escape-string-regexp@4.0.0: {} + + eslint-config-prettier@8.10.0(eslint@8.49.0): + dependencies: + eslint: 8.49.0 + + eslint-plugin-prettier@5.0.1(eslint-config-prettier@8.10.0(eslint@8.49.0))(eslint@8.49.0)(prettier@3.0.3): + dependencies: + eslint: 8.49.0 + prettier: 3.0.3 + prettier-linter-helpers: 1.0.0 + synckit: 0.8.5 + optionalDependencies: + eslint-config-prettier: 8.10.0(eslint@8.49.0) + + eslint-plugin-vue@9.17.0(eslint@8.49.0): + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.49.0) + eslint: 8.49.0 + natural-compare: 1.4.0 + nth-check: 2.1.1 + postcss-selector-parser: 6.0.13 + semver: 7.5.4 + vue-eslint-parser: 9.3.2(eslint@8.49.0) + xml-name-validator: 4.0.0 + transitivePeerDependencies: + - supports-color + + eslint-scope@7.2.2: + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + + eslint-visitor-keys@3.4.3: {} + + eslint@8.49.0: + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.49.0) + '@eslint-community/regexpp': 4.10.0 + '@eslint/eslintrc': 2.1.3 + '@eslint/js': 8.49.0 + '@humanwhocodes/config-array': 0.11.13 + '@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.2.2 + eslint-visitor-keys: 3.4.3 + espree: 9.6.1 + 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.23.0 + graphemer: 1.4.0 + ignore: 5.2.4 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + is-path-inside: 3.0.3 + 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.3 + strip-ansi: 6.0.1 + text-table: 0.2.0 + transitivePeerDependencies: + - supports-color + + espree@9.6.1: + dependencies: + acorn: 8.11.2 + acorn-jsx: 5.3.2(acorn@8.11.2) + eslint-visitor-keys: 3.4.3 + + esquery@1.5.0: + dependencies: + estraverse: 5.3.0 + + esrecurse@4.3.0: + dependencies: + estraverse: 5.3.0 + + estraverse@5.3.0: {} + + estree-walker@2.0.2: {} + + esutils@2.0.3: {} + + etag@1.8.1: {} + + execa@5.1.1: + 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 + + execa@7.2.0: + dependencies: + cross-spawn: 7.0.3 + get-stream: 6.0.1 + human-signals: 4.3.1 + is-stream: 3.0.0 + merge-stream: 2.0.0 + npm-run-path: 5.1.0 + onetime: 6.0.0 + signal-exit: 3.0.7 + strip-final-newline: 3.0.0 + + expand-brackets@2.1.4: + 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 + + extend-shallow@2.0.1: + dependencies: + is-extendable: 0.1.1 + + extend-shallow@3.0.2: + dependencies: + assign-symbols: 1.0.0 + is-extendable: 1.0.1 + + extglob@2.0.4: + 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 + + fast-deep-equal@3.1.3: {} + + fast-diff@1.3.0: {} + + fast-glob@3.3.2: + 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 + + fast-json-stable-stringify@2.1.0: {} + + fast-levenshtein@2.0.6: {} + + fastq@1.15.0: + dependencies: + reusify: 1.0.4 + + file-entry-cache@6.0.1: + dependencies: + flat-cache: 3.2.0 + + fill-range@4.0.0: + dependencies: + extend-shallow: 2.0.1 + is-number: 3.0.0 + repeat-string: 1.6.1 + to-regex-range: 2.1.1 + + fill-range@7.0.1: + dependencies: + to-regex-range: 5.0.1 + + find-up@5.0.0: + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + + flat-cache@3.2.0: + dependencies: + flatted: 3.2.9 + keyv: 4.5.4 + rimraf: 3.0.2 + + flatted@3.2.9: {} + + for-in@1.0.2: {} + + form-data@4.0.0: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.35 + + fragment-cache@0.2.1: + dependencies: + map-cache: 0.2.2 + + fs-extra@10.1.0: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.1 + + fs-extra@7.0.1: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 4.0.0 + universalify: 0.1.2 + + fs.realpath@1.0.0: {} + + fsevents@2.3.3: + optional: true + + function-bind@1.1.2: {} + + get-func-name@2.0.2: {} + + get-stream@6.0.1: {} + + get-value@2.0.6: {} + + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + glob-parent@6.0.2: + dependencies: + is-glob: 4.0.3 + + glob@7.2.3: + 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 + + glob@8.1.0: + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 5.1.6 + once: 1.4.0 + + globals@13.23.0: + dependencies: + type-fest: 0.20.2 + + globby@11.1.0: + dependencies: + array-union: 2.1.0 + dir-glob: 3.0.1 + fast-glob: 3.3.2 + ignore: 5.2.4 + merge2: 1.4.1 + slash: 3.0.0 + + graceful-fs@4.2.11: {} + + graphemer@1.4.0: {} + + gzip-size@6.0.0: + dependencies: + duplexer: 0.1.2 + + has-ansi@2.0.0: + dependencies: + ansi-regex: 2.1.1 + + has-flag@1.0.0: {} + + has-flag@3.0.0: {} + + has-flag@4.0.0: {} + + has-value@0.3.1: + dependencies: + get-value: 2.0.6 + has-values: 0.1.4 + isobject: 2.1.0 + + has-value@1.0.0: + dependencies: + get-value: 2.0.6 + has-values: 1.0.0 + isobject: 3.0.1 + + has-values@0.1.4: {} + + has-values@1.0.0: + dependencies: + is-number: 3.0.0 + kind-of: 4.0.0 + + hasown@2.0.0: + dependencies: + function-bind: 1.1.2 + + he@1.2.0: {} + + hosted-git-info@7.0.1: + dependencies: + lru-cache: 10.0.2 + + html-encoding-sniffer@3.0.0: + dependencies: + whatwg-encoding: 2.0.0 + + html2canvas@1.4.1: + dependencies: + css-line-break: 2.1.0 + text-segmentation: 1.0.3 + + htmlparser2@3.10.1: + 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 + + http-proxy-agent@5.0.0: + dependencies: + '@tootallnate/once': 2.0.0 + agent-base: 6.0.2 + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + + https-proxy-agent@5.0.1: + dependencies: + agent-base: 6.0.2 + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + + human-signals@2.1.0: {} + + human-signals@4.3.1: {} + + iconv-lite@0.6.3: + dependencies: + safer-buffer: 2.1.2 + + ignore@5.2.4: {} + + image-size@0.5.5: {} + + import-fresh@3.3.0: + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + + import-lazy@4.0.0: {} + + imurmurhash@0.1.4: {} + + inflight@1.0.6: + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + + inherits@2.0.4: {} + + ini@1.3.8: {} + + is-accessor-descriptor@1.0.1: + dependencies: + hasown: 2.0.0 + + is-arrayish@0.2.1: {} + + is-binary-path@2.1.0: + dependencies: + binary-extensions: 2.2.0 + + is-buffer@1.1.6: {} + + is-core-module@2.13.1: + dependencies: + hasown: 2.0.0 + + is-data-descriptor@1.0.1: + dependencies: + hasown: 2.0.0 + + is-descriptor@0.1.7: + dependencies: + is-accessor-descriptor: 1.0.1 + is-data-descriptor: 1.0.1 + + is-descriptor@1.0.3: + dependencies: + is-accessor-descriptor: 1.0.1 + is-data-descriptor: 1.0.1 + + is-docker@2.2.1: {} + + is-docker@3.0.0: {} + + is-extendable@0.1.1: {} + + is-extendable@1.0.1: + dependencies: + is-plain-object: 2.0.4 + + is-extglob@2.1.1: {} + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-inside-container@1.0.0: + dependencies: + is-docker: 3.0.0 + + is-number@3.0.0: + dependencies: + kind-of: 3.2.2 + + is-number@7.0.0: {} + + is-path-inside@3.0.3: {} + + is-plain-obj@1.1.0: {} + + is-plain-object@2.0.4: + dependencies: + isobject: 3.0.1 + + is-potential-custom-element-name@1.0.1: {} + + is-stream@2.0.1: {} + + is-stream@3.0.0: {} + + is-what@3.14.1: {} + + is-windows@1.0.2: {} + + is-wsl@2.2.0: + dependencies: + is-docker: 2.2.1 + + isarray@1.0.0: {} + + isexe@2.0.0: {} + + isobject@2.1.0: + dependencies: + isarray: 1.0.0 + + isobject@3.0.1: {} + + jiti@1.21.0: {} + + jju@1.4.0: {} + + js-base64@2.6.4: {} + + js-beautify@1.14.9: + dependencies: + config-chain: 1.1.13 + editorconfig: 1.0.4 + glob: 8.1.0 + nopt: 6.0.0 + + js-tokens@4.0.0: {} + + js-yaml@4.1.0: + dependencies: + argparse: 2.0.1 + + jsdom@22.1.0: + dependencies: + abab: 2.0.6 + cssstyle: 3.0.0 + data-urls: 4.0.0 + decimal.js: 10.4.3 + domexception: 4.0.0 + form-data: 4.0.0 + html-encoding-sniffer: 3.0.0 + http-proxy-agent: 5.0.0 + https-proxy-agent: 5.0.1 + is-potential-custom-element-name: 1.0.1 + nwsapi: 2.2.7 + parse5: 7.1.2 + rrweb-cssom: 0.6.0 + saxes: 6.0.0 + symbol-tree: 3.2.4 + tough-cookie: 4.1.3 + w3c-xmlserializer: 4.0.0 + webidl-conversions: 7.0.0 + whatwg-encoding: 2.0.0 + whatwg-mimetype: 3.0.0 + whatwg-url: 12.0.1 + ws: 8.14.2 + xml-name-validator: 4.0.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + json-buffer@3.0.1: {} + + json-parse-even-better-errors@3.0.0: {} + + json-schema-traverse@0.4.1: {} + + json-stable-stringify-without-jsonify@1.0.1: {} + + json5@1.0.2: + dependencies: + minimist: 1.2.8 + + jsonc-parser@3.2.0: {} + + jsonfile@4.0.0: + optionalDependencies: + graceful-fs: 4.2.11 + + jsonfile@6.1.0: + dependencies: + universalify: 2.0.1 + optionalDependencies: + graceful-fs: 4.2.11 + + keyv@4.5.4: + dependencies: + json-buffer: 3.0.1 + + kind-of@3.2.2: + dependencies: + is-buffer: 1.1.6 + + kind-of@4.0.0: + dependencies: + is-buffer: 1.1.6 + + kind-of@5.1.0: {} + + kind-of@6.0.3: {} + + kolorist@1.8.0: {} + + less@4.2.0: + dependencies: + copy-anything: 2.0.6 + parse-node-version: 1.0.1 + tslib: 2.6.2 + optionalDependencies: + errno: 0.1.8 + graceful-fs: 4.2.11 + 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 + + levn@0.4.1: + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + + lines-and-columns@2.0.4: {} + + loader-utils@1.4.2: + dependencies: + big.js: 5.2.2 + emojis-list: 3.0.0 + json5: 1.0.2 + + local-pkg@0.4.3: {} + + locate-path@6.0.0: + dependencies: + p-locate: 5.0.0 + + lodash-es@4.17.21: {} + + lodash-unified@1.0.3(@types/lodash-es@4.17.12)(lodash-es@4.17.21)(lodash@4.17.21): + dependencies: + '@types/lodash-es': 4.17.12 + lodash: 4.17.21 + lodash-es: 4.17.21 + + lodash.get@4.4.2: {} + + lodash.isequal@4.5.0: {} + + lodash.merge@4.6.2: {} + + lodash@4.17.21: {} + + loupe@2.3.7: + dependencies: + get-func-name: 2.0.2 + + lru-cache@10.0.2: + dependencies: + semver: 7.5.4 + + lru-cache@6.0.0: + dependencies: + yallist: 4.0.0 + + magic-string@0.30.5: + dependencies: + '@jridgewell/sourcemap-codec': 1.4.15 + + make-dir@2.1.0: + dependencies: + pify: 4.0.1 + semver: 5.7.2 + optional: true + + map-cache@0.2.2: {} + + map-visit@1.0.0: + dependencies: + object-visit: 1.0.1 + + mdn-data@2.0.14: {} + + mdn-data@2.0.30: {} + + memoize-one@6.0.0: {} + + memorystream@0.3.1: {} + + merge-options@1.0.1: + dependencies: + is-plain-obj: 1.1.0 + + merge-stream@2.0.0: {} + + merge2@1.4.1: {} + + micromatch@3.1.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 + + micromatch@4.0.5: + dependencies: + braces: 3.0.2 + picomatch: 2.3.1 + + mime-db@1.52.0: {} + + mime-types@2.1.35: + dependencies: + mime-db: 1.52.0 + + mime@1.6.0: + optional: true + + mimic-fn@2.1.0: {} + + mimic-fn@4.0.0: {} + + minimatch@3.1.2: + dependencies: + brace-expansion: 1.1.11 + + minimatch@5.1.6: + dependencies: + brace-expansion: 2.0.1 + + minimatch@9.0.1: + dependencies: + brace-expansion: 2.0.1 + + minimatch@9.0.3: + dependencies: + brace-expansion: 2.0.1 + + minimist@1.2.8: {} + + mixin-deep@1.3.2: + dependencies: + for-in: 1.0.2 + is-extendable: 1.0.1 + + mlly@1.4.2: + dependencies: + acorn: 8.11.2 + pathe: 1.1.1 + pkg-types: 1.0.3 + ufo: 1.3.1 + + mrmime@1.0.1: {} + + ms@2.0.0: {} + + ms@2.1.2: {} + + muggle-string@0.3.1: {} + + nanoid@3.3.7: {} + + nanomatch@1.2.13: + 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 + + natural-compare@1.4.0: {} + + needle@3.2.0: + dependencies: + debug: 3.2.7 + iconv-lite: 0.6.3 + sax: 1.3.0 + transitivePeerDependencies: + - supports-color + optional: true + + node-fetch-native@1.4.1: {} + + nopt@6.0.0: + dependencies: + abbrev: 1.1.1 + + normalize-package-data@6.0.0: + dependencies: + hosted-git-info: 7.0.1 + is-core-module: 2.13.1 + semver: 7.5.4 + validate-npm-package-license: 3.0.4 + + normalize-path@3.0.0: {} + + normalize-wheel-es@1.2.0: {} + + npm-run-all2@6.1.1: + dependencies: + ansi-styles: 6.2.1 + cross-spawn: 7.0.3 + memorystream: 0.3.1 + minimatch: 9.0.3 + pidtree: 0.6.0 + read-pkg: 8.1.0 + shell-quote: 1.8.1 + + npm-run-path@4.0.1: + dependencies: + path-key: 3.1.1 + + npm-run-path@5.1.0: + dependencies: + path-key: 4.0.0 + + nth-check@2.1.1: + dependencies: + boolbase: 1.0.0 + + nwsapi@2.2.7: {} + + object-assign@4.1.1: {} + + object-copy@0.1.0: + dependencies: + copy-descriptor: 0.1.1 + define-property: 0.2.5 + kind-of: 3.2.2 + + object-visit@1.0.1: + dependencies: + isobject: 3.0.1 + + object.pick@1.3.0: + dependencies: + isobject: 3.0.1 + + ofetch@1.3.3: + dependencies: + destr: 2.0.2 + node-fetch-native: 1.4.1 + ufo: 1.3.1 + + once@1.4.0: + dependencies: + wrappy: 1.0.2 + + onetime@5.1.2: + dependencies: + mimic-fn: 2.1.0 + + onetime@6.0.0: + dependencies: + mimic-fn: 4.0.0 + + open@9.1.0: + dependencies: + default-browser: 4.0.0 + define-lazy-prop: 3.0.0 + is-inside-container: 1.0.0 + is-wsl: 2.2.0 + + optionator@0.9.3: + dependencies: + '@aashutoshrathi/word-wrap': 1.2.6 + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + + p-limit@3.1.0: + dependencies: + yocto-queue: 0.1.0 + + p-limit@4.0.0: + dependencies: + yocto-queue: 1.0.0 + + p-locate@5.0.0: + dependencies: + p-limit: 3.1.0 + + parent-module@1.0.1: + dependencies: + callsites: 3.1.0 + + parse-json@7.1.1: + dependencies: + '@babel/code-frame': 7.22.13 + error-ex: 1.3.2 + json-parse-even-better-errors: 3.0.0 + lines-and-columns: 2.0.4 + type-fest: 3.13.1 + + parse-node-version@1.0.1: {} + + parse5@7.1.2: + dependencies: + entities: 4.5.0 + + pascalcase@0.1.1: {} + + path-browserify@1.0.1: {} + + path-exists@4.0.0: {} + + path-is-absolute@1.0.1: {} + + path-key@3.1.1: {} + + path-key@4.0.0: {} + + path-parse@1.0.7: {} + + path-type@4.0.0: {} + + pathe@0.2.0: {} + + pathe@1.1.1: {} + + pathval@1.1.1: {} + + perfect-debounce@1.0.0: {} + + performance-now@2.1.0: {} + + picocolors@1.0.0: {} + + picomatch@2.3.1: {} + + pidtree@0.6.0: {} + + pify@4.0.1: + optional: true + + pkg-types@1.0.3: + dependencies: + jsonc-parser: 3.2.0 + mlly: 1.4.2 + pathe: 1.1.1 + + posix-character-classes@0.1.1: {} + + postcss-prefix-selector@1.16.0(postcss@5.2.18): + dependencies: + postcss: 5.2.18 + + postcss-selector-parser@6.0.13: + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + + postcss@5.2.18: + dependencies: + chalk: 1.1.3 + js-base64: 2.6.4 + source-map: https://registry.npmmirror.com/source-map/-/source-map-0.5.7.tgz + supports-color: 3.2.3 + + postcss@8.4.31: + dependencies: + nanoid: 3.3.7 + picocolors: 1.0.0 + source-map-js: 1.0.2 + + posthtml-parser@0.2.1: + dependencies: + htmlparser2: 3.10.1 + isobject: 2.1.0 + + posthtml-rename-id@1.0.12: + dependencies: + escape-string-regexp: 1.0.5 + + posthtml-render@1.4.0: {} + + posthtml-svg-mode@1.0.3: + dependencies: + merge-options: 1.0.1 + posthtml: 0.9.2 + posthtml-parser: 0.2.1 + posthtml-render: 1.4.0 + + posthtml@0.9.2: + dependencies: + posthtml-parser: 0.2.1 + posthtml-render: 1.4.0 + + prelude-ls@1.2.1: {} + + prettier-linter-helpers@1.0.0: + dependencies: + fast-diff: 1.3.0 + + prettier@3.0.3: {} + + pretty-format@29.7.0: + dependencies: + '@jest/schemas': 29.6.3 + ansi-styles: 5.2.0 + react-is: 18.2.0 + + proto-list@1.2.4: {} + + prr@1.0.1: + optional: true + + psl@1.9.0: {} + + punycode@2.3.1: {} + + query-string@4.3.4: + dependencies: + object-assign: 4.1.1 + strict-uri-encode: 1.1.0 + + querystringify@2.2.0: {} + + queue-microtask@1.2.3: {} + + raf@3.4.1: + dependencies: + performance-now: 2.1.0 + + react-is@18.2.0: {} + + read-pkg@8.1.0: + dependencies: + '@types/normalize-package-data': 2.4.4 + normalize-package-data: 6.0.0 + parse-json: 7.1.1 + type-fest: 4.7.1 + + readable-stream@3.6.2: + dependencies: + inherits: 2.0.4 + string_decoder: 1.3.0 + util-deprecate: 1.0.2 + + readdirp@3.6.0: + dependencies: + picomatch: 2.3.1 + + regex-not@1.0.2: + dependencies: + extend-shallow: 3.0.2 + safe-regex: 1.1.0 + + repeat-element@1.1.4: {} + + repeat-string@1.6.1: {} + + requires-port@1.0.0: {} + + resize-detector@https://registry.npmmirror.com/resize-detector/-/resize-detector-0.3.0.tgz: {} + + resize-observer-polyfill@1.5.1: {} + + resolve-from@4.0.0: {} + + resolve-url@0.2.1: {} + + resolve@1.19.0: + dependencies: + is-core-module: 2.13.1 + path-parse: 1.0.7 + + resolve@1.22.8: + dependencies: + is-core-module: 2.13.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + + ret@0.1.15: {} + + reusify@1.0.4: {} + + rgbcolor@1.0.1: {} + + rimraf@3.0.2: + dependencies: + glob: 7.2.3 + + rollup@3.29.4: + optionalDependencies: + fsevents: 2.3.3 + + rrweb-cssom@0.6.0: {} + + run-applescript@5.0.0: + dependencies: + execa: 5.1.1 + + run-parallel@1.2.0: + dependencies: + queue-microtask: 1.2.3 + + safe-buffer@5.2.1: {} + + safe-regex@1.1.0: + dependencies: + ret: 0.1.15 + + safer-buffer@2.1.2: {} + + sax@1.3.0: + optional: true + + saxes@6.0.0: + dependencies: + xmlchars: 2.2.0 + + semver@5.7.2: + optional: true + + semver@7.5.4: + dependencies: + lru-cache: 6.0.0 + + set-value@2.0.1: + dependencies: + extend-shallow: 2.0.1 + is-extendable: 0.1.1 + is-plain-object: 2.0.4 + split-string: 3.1.0 + + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + + shell-quote@1.8.1: {} + + siginfo@2.0.0: {} + + signal-exit@3.0.7: {} + + sirv@2.0.3: + dependencies: + '@polka/url': 1.0.0-next.23 + mrmime: 1.0.1 + totalist: 3.0.1 + + slash@3.0.0: {} + + snapdragon-node@2.1.1: + dependencies: + define-property: 1.0.0 + isobject: 3.0.1 + snapdragon-util: 3.0.1 + + snapdragon-util@3.0.1: + dependencies: + kind-of: 3.2.2 + + snapdragon@0.8.2: + 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: https://registry.npmmirror.com/source-map/-/source-map-0.5.7.tgz + source-map-resolve: 0.5.3 + use: 3.1.1 + transitivePeerDependencies: + - supports-color + + source-map-js@1.0.2: {} + + source-map-resolve@0.5.3: + 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 + + source-map-url@0.4.1: {} + + source-map@0.6.1: {} + + source-map@https://registry.npmmirror.com/source-map/-/source-map-0.5.7.tgz: {} + + source-map@https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz: {} + + spdx-correct@3.2.0: + dependencies: + spdx-expression-parse: 3.0.1 + spdx-license-ids: 3.0.16 + + spdx-exceptions@2.3.0: {} + + spdx-expression-parse@3.0.1: + dependencies: + spdx-exceptions: 2.3.0 + spdx-license-ids: 3.0.16 + + spdx-license-ids@3.0.16: {} + + split-string@3.1.0: + dependencies: + extend-shallow: 3.0.2 + + sprintf-js@1.0.3: {} + + stable@0.1.8: {} + + stackback@0.0.2: {} + + stackblur-canvas@2.6.0: {} + + static-extend@0.1.2: + dependencies: + define-property: 0.2.5 + object-copy: 0.1.0 + + std-env@3.5.0: {} + + strict-uri-encode@1.1.0: {} + + string-argv@0.3.2: {} + + string_decoder@1.3.0: + dependencies: + safe-buffer: 5.2.1 + + strip-ansi@3.0.1: + dependencies: + ansi-regex: 2.1.1 + + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + strip-final-newline@2.0.0: {} + + strip-final-newline@3.0.0: {} + + strip-json-comments@3.1.1: {} + + strip-literal@1.3.0: + dependencies: + acorn: 8.11.2 + + supports-color@2.0.0: {} + + supports-color@3.2.3: + dependencies: + has-flag: 1.0.0 + + supports-color@5.5.0: + dependencies: + has-flag: 3.0.0 + + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + + supports-preserve-symlinks-flag@1.0.0: {} + + svg-baker@1.7.0: + 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 + + svg-pathdata@6.0.3: {} + + svgo@2.8.0: + 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 + + symbol-tree@3.2.4: {} + + synckit@0.8.5: + dependencies: + '@pkgr/utils': 2.4.2 + tslib: 2.6.2 + + text-segmentation@1.0.3: + dependencies: + utrie: 1.0.2 + + text-table@0.2.0: {} + + tinybench@2.5.1: {} + + tinypool@0.7.0: {} + + tinyspy@2.2.0: {} + + titleize@3.0.0: {} + + to-fast-properties@2.0.0: {} + + to-object-path@0.3.0: + dependencies: + kind-of: 3.2.2 + + to-regex-range@2.1.1: + dependencies: + is-number: 3.0.0 + repeat-string: 1.6.1 + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + + to-regex@3.0.2: + dependencies: + define-property: 2.0.2 + extend-shallow: 3.0.2 + regex-not: 1.0.2 + safe-regex: 1.1.0 + + totalist@3.0.1: {} + + tough-cookie@4.1.3: + dependencies: + psl: 1.9.0 + punycode: 2.3.1 + universalify: 0.2.0 + url-parse: 1.5.10 + + tr46@4.1.1: + dependencies: + punycode: 2.3.1 + + traverse@0.6.7: {} + + ts-api-utils@1.0.3(typescript@5.2.2): + dependencies: + typescript: 5.2.2 + + tslib@2.6.2: {} + + tslib@https://registry.npmmirror.com/tslib/-/tslib-2.3.0.tgz: {} + + type-check@0.4.0: + dependencies: + prelude-ls: 1.2.1 + + type-detect@4.0.8: {} + + type-fest@0.20.2: {} + + type-fest@3.13.1: {} + + type-fest@4.7.1: {} + + typescript@5.0.4: {} + + typescript@5.2.2: {} + + ufo@1.3.1: {} + + unconfig@0.3.11: + dependencies: + '@antfu/utils': 0.7.6 + defu: 6.1.3 + jiti: 1.21.0 + mlly: 1.4.2 + + union-value@1.0.1: + dependencies: + arr-union: 3.1.0 + get-value: 2.0.6 + is-extendable: 0.1.1 + set-value: 2.0.1 + + universalify@0.1.2: {} + + universalify@0.2.0: {} + + universalify@2.0.1: {} + + unocss@0.57.4(postcss@5.2.18)(rollup@3.29.4)(vite@4.4.11(@types/node@18.18.5)(less@4.2.0)): + dependencies: + '@unocss/astro': 0.57.4(rollup@3.29.4)(vite@4.4.11(@types/node@18.18.5)(less@4.2.0)) + '@unocss/cli': 0.57.4(rollup@3.29.4) + '@unocss/core': 0.57.4 + '@unocss/extractor-arbitrary-variants': 0.57.4 + '@unocss/postcss': 0.57.4(postcss@5.2.18) + '@unocss/preset-attributify': 0.57.4 + '@unocss/preset-icons': 0.57.4 + '@unocss/preset-mini': 0.57.4 + '@unocss/preset-tagify': 0.57.4 + '@unocss/preset-typography': 0.57.4 + '@unocss/preset-uno': 0.57.4 + '@unocss/preset-web-fonts': 0.57.4 + '@unocss/preset-wind': 0.57.4 + '@unocss/reset': 0.57.4 + '@unocss/transformer-attributify-jsx': 0.57.4 + '@unocss/transformer-attributify-jsx-babel': 0.57.4 + '@unocss/transformer-compile-class': 0.57.4 + '@unocss/transformer-directives': 0.57.4 + '@unocss/transformer-variant-group': 0.57.4 + '@unocss/vite': 0.57.4(rollup@3.29.4)(vite@4.4.11(@types/node@18.18.5)(less@4.2.0)) + optionalDependencies: + vite: 4.4.11(@types/node@18.18.5)(less@4.2.0) + transitivePeerDependencies: + - postcss + - rollup + - supports-color + + unset-value@1.0.0: + dependencies: + has-value: 0.3.1 + isobject: 3.0.1 + + untildify@4.0.0: {} + + uri-js@4.4.1: + dependencies: + punycode: 2.3.1 + + urix@0.1.0: {} + + url-parse@1.5.10: + dependencies: + querystringify: 2.2.0 + requires-port: 1.0.0 + + use@3.1.1: {} + + util-deprecate@1.0.2: {} + + utrie@1.0.2: + dependencies: + base64-arraybuffer: 1.0.2 + + validate-npm-package-license@3.0.4: + dependencies: + spdx-correct: 3.2.0 + spdx-expression-parse: 3.0.1 + + validator@13.11.0: {} + + vary@1.1.2: {} + + vite-node@0.34.6(@types/node@18.18.5)(less@4.2.0): + dependencies: + cac: 6.7.14 + debug: 4.3.4 + mlly: 1.4.2 + pathe: 1.1.1 + picocolors: 1.0.0 + vite: 4.4.11(@types/node@18.18.5)(less@4.2.0) + transitivePeerDependencies: + - '@types/node' + - less + - lightningcss + - sass + - stylus + - sugarss + - supports-color + - terser + + vite-plugin-dts@3.6.3(@types/node@18.18.5)(rollup@3.29.4)(typescript@5.2.2)(vite@4.4.11(@types/node@18.18.5)(less@4.2.0)): + dependencies: + '@microsoft/api-extractor': 7.38.3(@types/node@18.18.5) + '@rollup/pluginutils': 5.0.5(rollup@3.29.4) + '@vue/language-core': 1.8.22(typescript@5.2.2) + debug: 4.3.4 + kolorist: 1.8.0 + typescript: 5.2.2 + vue-tsc: 1.8.22(typescript@5.2.2) + optionalDependencies: + vite: 4.4.11(@types/node@18.18.5)(less@4.2.0) + transitivePeerDependencies: + - '@types/node' + - rollup + - supports-color + + vite-plugin-svg-icons@2.0.1(vite@4.4.11(@types/node@18.18.5)(less@4.2.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: 4.4.11(@types/node@18.18.5)(less@4.2.0) + transitivePeerDependencies: + - supports-color + + vite@4.4.11(@types/node@18.18.5)(less@4.2.0): + dependencies: + esbuild: 0.18.20 + postcss: 8.4.31 + rollup: 3.29.4 + optionalDependencies: + '@types/node': 18.18.5 + fsevents: 2.3.3 + less: 4.2.0 + + vitest@0.34.6(jsdom@22.1.0)(less@4.2.0): + dependencies: + '@types/chai': 4.3.10 + '@types/chai-subset': 1.3.5 + '@types/node': 18.18.5 + '@vitest/expect': 0.34.6 + '@vitest/runner': 0.34.6 + '@vitest/snapshot': 0.34.6 + '@vitest/spy': 0.34.6 + '@vitest/utils': 0.34.6 + acorn: 8.11.2 + acorn-walk: 8.3.0 + cac: 6.7.14 + chai: 4.3.10 + debug: 4.3.4 + local-pkg: 0.4.3 + magic-string: 0.30.5 + pathe: 1.1.1 + picocolors: 1.0.0 + std-env: 3.5.0 + strip-literal: 1.3.0 + tinybench: 2.5.1 + tinypool: 0.7.0 + vite: 4.4.11(@types/node@18.18.5)(less@4.2.0) + vite-node: 0.34.6(@types/node@18.18.5)(less@4.2.0) + why-is-node-running: 2.2.2 + optionalDependencies: + jsdom: 22.1.0 + transitivePeerDependencies: + - less + - lightningcss + - sass + - stylus + - sugarss + - supports-color + - terser + + vue-component-type-helpers@1.8.4: {} + + vue-demi@0.14.6(vue@3.3.4): + dependencies: + vue: 3.3.4 + + vue-demi@https://registry.npmmirror.com/vue-demi/-/vue-demi-0.13.11.tgz(vue@3.3.4): + dependencies: + vue: 3.3.4 + + vue-demi@https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.6.tgz(vue@3.3.4): + dependencies: + vue: 3.3.4 + + vue-echarts@https://registry.npmmirror.com/vue-echarts/-/vue-echarts-6.6.5.tgz(echarts@https://registry.npmmirror.com/echarts/-/echarts-5.4.3.tgz)(vue@3.3.4): + dependencies: + echarts: https://registry.npmmirror.com/echarts/-/echarts-5.4.3.tgz + resize-detector: https://registry.npmmirror.com/resize-detector/-/resize-detector-0.3.0.tgz + vue: 3.3.4 + vue-demi: https://registry.npmmirror.com/vue-demi/-/vue-demi-0.13.11.tgz(vue@3.3.4) + + vue-eslint-parser@9.3.2(eslint@8.49.0): + dependencies: + debug: 4.3.4 + eslint: 8.49.0 + eslint-scope: 7.2.2 + eslint-visitor-keys: 3.4.3 + espree: 9.6.1 + esquery: 1.5.0 + lodash: 4.17.21 + semver: 7.5.4 + transitivePeerDependencies: + - supports-color + + vue-router@https://registry.npmmirror.com/vue-router/-/vue-router-4.2.5.tgz(vue@3.3.4): + dependencies: + '@vue/devtools-api': https://registry.npmmirror.com/@vue/devtools-api/-/devtools-api-6.5.1.tgz + vue: 3.3.4 + + vue-template-compiler@2.7.15: + dependencies: + de-indent: 1.0.2 + he: 1.2.0 + + vue-tsc@1.8.19(typescript@5.2.2): + dependencies: + '@vue/language-core': 1.8.19(typescript@5.2.2) + '@vue/typescript': 1.8.19(typescript@5.2.2) + semver: 7.5.4 + typescript: 5.2.2 + + vue-tsc@1.8.22(typescript@5.2.2): + dependencies: + '@volar/typescript': 1.10.10 + '@vue/language-core': 1.8.22(typescript@5.2.2) + semver: 7.5.4 + typescript: 5.2.2 + + vue3-ace-editor@2.2.4(ace-builds@1.32.0)(vue@3.3.4): + dependencies: + ace-builds: 1.32.0 + resize-observer-polyfill: 1.5.1 + vue: 3.3.4 + + vue@3.3.4: + dependencies: + '@vue/compiler-dom': 3.3.4 + '@vue/compiler-sfc': 3.3.4 + '@vue/runtime-dom': 3.3.4 + '@vue/server-renderer': 3.3.4(vue@3.3.4) + '@vue/shared': 3.3.4 + + w3c-xmlserializer@4.0.0: + dependencies: + xml-name-validator: 4.0.0 + + webidl-conversions@7.0.0: {} + + whatwg-encoding@2.0.0: + dependencies: + iconv-lite: 0.6.3 + + whatwg-mimetype@3.0.0: {} + + whatwg-url@12.0.1: + dependencies: + tr46: 4.1.1 + webidl-conversions: 7.0.0 + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + why-is-node-running@2.2.2: + dependencies: + siginfo: 2.0.0 + stackback: 0.0.2 + + wrappy@1.0.2: {} + + ws@8.14.2: {} + + xml-name-validator@4.0.0: {} + + xmlchars@2.2.0: {} + + yallist@4.0.0: {} + + yocto-queue@0.1.0: {} + + yocto-queue@1.0.0: {} + + z-schema@5.0.5: + dependencies: + lodash.get: 4.4.2 + lodash.isequal: 4.5.0 + validator: 13.11.0 + optionalDependencies: + commander: 9.5.0 + + zrender@https://registry.npmmirror.com/zrender/-/zrender-5.4.4.tgz: + dependencies: + tslib: https://registry.npmmirror.com/tslib/-/tslib-2.3.0.tgz diff --git a/public/favicon.svg b/public/favicon.svg new file mode 100644 index 0000000..1d450e2 --- /dev/null +++ b/public/favicon.svg @@ -0,0 +1,34 @@ + + + + + + + + + + ao + tu + + M A O T U + diff --git a/public/imgs/change-attr.png b/public/imgs/change-attr.png new file mode 100644 index 0000000..587086a Binary files /dev/null and b/public/imgs/change-attr.png differ diff --git a/public/imgs/edit-load.png b/public/imgs/edit-load.png new file mode 100644 index 0000000..abcb92a Binary files /dev/null and b/public/imgs/edit-load.png differ diff --git a/public/imgs/edit.png b/public/imgs/edit.png new file mode 100644 index 0000000..fe1a3ae Binary files /dev/null and b/public/imgs/edit.png differ diff --git a/public/imgs/event-callback.png b/public/imgs/event-callback.png new file mode 100644 index 0000000..1c1887e Binary files /dev/null and b/public/imgs/event-callback.png differ diff --git a/public/imgs/set-node-attr.gif b/public/imgs/set-node-attr.gif new file mode 100644 index 0000000..b9c4b8a Binary files /dev/null and b/public/imgs/set-node-attr.gif differ diff --git a/public/svgs/demo.svg b/public/svgs/demo.svg new file mode 100644 index 0000000..994495a --- /dev/null +++ b/public/svgs/demo.svg @@ -0,0 +1,21 @@ + + + + + + + + \ No newline at end of file diff --git a/public/svgs/my-button.svg b/public/svgs/my-button.svg new file mode 100644 index 0000000..aee1196 --- /dev/null +++ b/public/svgs/my-button.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/svgs/my-input.svg b/public/svgs/my-input.svg new file mode 100644 index 0000000..9fa947c --- /dev/null +++ b/public/svgs/my-input.svg @@ -0,0 +1,5 @@ + + + \ No newline at end of file diff --git a/public/svgs/pie-charts.svg b/public/svgs/pie-charts.svg new file mode 100644 index 0000000..826b132 --- /dev/null +++ b/public/svgs/pie-charts.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/App.vue b/src/App.vue new file mode 100644 index 0000000..d0cc8de --- /dev/null +++ b/src/App.vue @@ -0,0 +1,196 @@ + + + + + diff --git a/src/assets/css-vars.css b/src/assets/css-vars.css new file mode 100644 index 0000000..7c5774c --- /dev/null +++ b/src/assets/css-vars.css @@ -0,0 +1,92 @@ +#mt-edit.dark { + color-scheme: dark; + --el-color-primary: #409eff; + --el-color-primary-light-3: #3375b9; + --el-color-primary-light-5: #2a598a; + --el-color-primary-light-7: #213d5b; + --el-color-primary-light-8: #1d3043; + --el-color-primary-light-9: #18222c; + --el-color-primary-dark-2: #66b1ff; + --el-color-success: #67c23a; + --el-color-success-light-3: #4e8e2f; + --el-color-success-light-5: #3e6b27; + --el-color-success-light-7: #2d481f; + --el-color-success-light-8: #25371c; + --el-color-success-light-9: #1c2518; + --el-color-success-dark-2: #85ce61; + --el-color-warning: #e6a23c; + --el-color-warning-light-3: #a77730; + --el-color-warning-light-5: #7d5b28; + --el-color-warning-light-7: #533f20; + --el-color-warning-light-8: #3e301c; + --el-color-warning-light-9: #292218; + --el-color-warning-dark-2: #ebb563; + --el-color-danger: #f56c6c; + --el-color-danger-light-3: #b25252; + --el-color-danger-light-5: #854040; + --el-color-danger-light-7: #582e2e; + --el-color-danger-light-8: #412626; + --el-color-danger-light-9: #2b1d1d; + --el-color-danger-dark-2: #f78989; + --el-color-error: #f56c6c; + --el-color-error-light-3: #b25252; + --el-color-error-light-5: #854040; + --el-color-error-light-7: #582e2e; + --el-color-error-light-8: #412626; + --el-color-error-light-9: #2b1d1d; + --el-color-error-dark-2: #f78989; + --el-color-info: #909399; + --el-color-info-light-3: #6b6d71; + --el-color-info-light-5: #525457; + --el-color-info-light-7: #393a3c; + --el-color-info-light-8: #2d2d2f; + --el-color-info-light-9: #202121; + --el-color-info-dark-2: #a6a9ad; + --el-box-shadow: 0px 12px 32px 4px rgba(0, 0, 0, 0.36), 0px 8px 20px rgba(0, 0, 0, 0.72); + --el-box-shadow-light: 0px 0px 12px rgba(0, 0, 0, 0.72); + --el-box-shadow-lighter: 0px 0px 6px rgba(0, 0, 0, 0.72); + --el-box-shadow-dark: 0px 16px 48px 16px rgba(0, 0, 0, 0.72), 0px 12px 32px #000000, + 0px 8px 16px -8px #000000; + --el-bg-color-page: #0a0a0a; + --el-bg-color: #141414; + --el-bg-color-overlay: #1d1e1f; + --el-text-color-primary: #e5eaf3; + --el-text-color-regular: #cfd3dc; + --el-text-color-secondary: #a3a6ad; + --el-text-color-placeholder: #8d9095; + --el-text-color-disabled: #6c6e72; + --el-border-color-darker: #636466; + --el-border-color-dark: #58585b; + --el-border-color: #4c4d4f; + --el-border-color-light: #414243; + --el-border-color-lighter: #363637; + --el-border-color-extra-light: #2b2b2c; + --el-fill-color-darker: #424243; + --el-fill-color-dark: #39393a; + --el-fill-color: #303030; + --el-fill-color-light: #262727; + --el-fill-color-lighter: #1d1d1d; + --el-fill-color-extra-light: #191919; + --el-fill-color-blank: transparent; + --el-mask-color: rgba(0, 0, 0, 0.8); + --el-mask-color-extra-light: rgba(0, 0, 0, 0.3); + transition: all 5s; +} +#mt-edit.dark .el-button { + --el-button-disabled-text-color: rgba(255, 255, 255, 0.5); +} +#mt-edit.dark .el-card { + --el-card-bg-color: var(--el-bg-color-overlay); +} +#mt-edit.dark .el-empty { + --el-empty-fill-color-0: var(--el-color-black); + --el-empty-fill-color-1: #4b4b52; + --el-empty-fill-color-2: #36383d; + --el-empty-fill-color-3: #1e1e20; + --el-empty-fill-color-4: #262629; + --el-empty-fill-color-5: #202124; + --el-empty-fill-color-6: #212224; + --el-empty-fill-color-7: #1b1c1f; + --el-empty-fill-color-8: #1c1d1f; + --el-empty-fill-color-9: #18181a; +} diff --git a/src/assets/icons/add.svg b/src/assets/icons/add.svg new file mode 100644 index 0000000..2caac8c --- /dev/null +++ b/src/assets/icons/add.svg @@ -0,0 +1,6 @@ + + + \ No newline at end of file diff --git a/src/assets/icons/align-bottom.svg b/src/assets/icons/align-bottom.svg new file mode 100644 index 0000000..a2f9b51 --- /dev/null +++ b/src/assets/icons/align-bottom.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/align-horizontally.svg b/src/assets/icons/align-horizontally.svg new file mode 100644 index 0000000..5074b9e --- /dev/null +++ b/src/assets/icons/align-horizontally.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/align-left.svg b/src/assets/icons/align-left.svg new file mode 100644 index 0000000..2f08ab5 --- /dev/null +++ b/src/assets/icons/align-left.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/align-right.svg b/src/assets/icons/align-right.svg new file mode 100644 index 0000000..7579fa8 --- /dev/null +++ b/src/assets/icons/align-right.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/align-top.svg b/src/assets/icons/align-top.svg new file mode 100644 index 0000000..6b41c74 --- /dev/null +++ b/src/assets/icons/align-top.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/align-vertical.svg b/src/assets/icons/align-vertical.svg new file mode 100644 index 0000000..f756a60 --- /dev/null +++ b/src/assets/icons/align-vertical.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/align.svg b/src/assets/icons/align.svg new file mode 100644 index 0000000..4c7dda2 --- /dev/null +++ b/src/assets/icons/align.svg @@ -0,0 +1,5 @@ + + + \ No newline at end of file diff --git a/src/assets/icons/dark.svg b/src/assets/icons/dark.svg new file mode 100644 index 0000000..60b657e --- /dev/null +++ b/src/assets/icons/dark.svg @@ -0,0 +1,6 @@ + + + \ No newline at end of file diff --git a/src/assets/icons/delete.svg b/src/assets/icons/delete.svg new file mode 100644 index 0000000..7fb4aa2 --- /dev/null +++ b/src/assets/icons/delete.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/exit-full-screen.svg b/src/assets/icons/exit-full-screen.svg new file mode 100644 index 0000000..7c6477a --- /dev/null +++ b/src/assets/icons/exit-full-screen.svg @@ -0,0 +1,5 @@ + + + \ No newline at end of file diff --git a/src/assets/icons/export-json.svg b/src/assets/icons/export-json.svg new file mode 100644 index 0000000..75eb05a --- /dev/null +++ b/src/assets/icons/export-json.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/full-screen.svg b/src/assets/icons/full-screen.svg new file mode 100644 index 0000000..2c4c1a1 --- /dev/null +++ b/src/assets/icons/full-screen.svg @@ -0,0 +1,4 @@ + + + \ No newline at end of file diff --git a/src/assets/icons/group.svg b/src/assets/icons/group.svg new file mode 100644 index 0000000..2bef48f --- /dev/null +++ b/src/assets/icons/group.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/help.svg b/src/assets/icons/help.svg new file mode 100644 index 0000000..016bce7 --- /dev/null +++ b/src/assets/icons/help.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/horizontal-distribution.svg b/src/assets/icons/horizontal-distribution.svg new file mode 100644 index 0000000..a20357e --- /dev/null +++ b/src/assets/icons/horizontal-distribution.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/import-json.svg b/src/assets/icons/import-json.svg new file mode 100644 index 0000000..971c6cd --- /dev/null +++ b/src/assets/icons/import-json.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/light.svg b/src/assets/icons/light.svg new file mode 100644 index 0000000..d704c39 --- /dev/null +++ b/src/assets/icons/light.svg @@ -0,0 +1,7 @@ + + + \ No newline at end of file diff --git a/src/assets/icons/line.svg b/src/assets/icons/line.svg new file mode 100644 index 0000000..efa3aad --- /dev/null +++ b/src/assets/icons/line.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/lock.svg b/src/assets/icons/lock.svg new file mode 100644 index 0000000..4eb3825 --- /dev/null +++ b/src/assets/icons/lock.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/menu-fold.svg b/src/assets/icons/menu-fold.svg new file mode 100644 index 0000000..26de71d --- /dev/null +++ b/src/assets/icons/menu-fold.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/menu-unfold.svg b/src/assets/icons/menu-unfold.svg new file mode 100644 index 0000000..7fa6cae --- /dev/null +++ b/src/assets/icons/menu-unfold.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/pen-line.svg b/src/assets/icons/pen-line.svg new file mode 100644 index 0000000..6fbedf3 --- /dev/null +++ b/src/assets/icons/pen-line.svg @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/src/assets/icons/preview.svg b/src/assets/icons/preview.svg new file mode 100644 index 0000000..afb8ec5 --- /dev/null +++ b/src/assets/icons/preview.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/question.svg b/src/assets/icons/question.svg new file mode 100644 index 0000000..17ecc33 --- /dev/null +++ b/src/assets/icons/question.svg @@ -0,0 +1,10 @@ + + + + + \ No newline at end of file diff --git a/src/assets/icons/redo.svg b/src/assets/icons/redo.svg new file mode 100644 index 0000000..763b8a1 --- /dev/null +++ b/src/assets/icons/redo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/return.svg b/src/assets/icons/return.svg new file mode 100644 index 0000000..2a1d786 --- /dev/null +++ b/src/assets/icons/return.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/rotate.svg b/src/assets/icons/rotate.svg new file mode 100644 index 0000000..9e88136 --- /dev/null +++ b/src/assets/icons/rotate.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/save.svg b/src/assets/icons/save.svg new file mode 100644 index 0000000..c2dee9a --- /dev/null +++ b/src/assets/icons/save.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/search.svg b/src/assets/icons/search.svg new file mode 100644 index 0000000..8efe863 --- /dev/null +++ b/src/assets/icons/search.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/setting.svg b/src/assets/icons/setting.svg new file mode 100644 index 0000000..8f147ad --- /dev/null +++ b/src/assets/icons/setting.svg @@ -0,0 +1,6 @@ + + + \ No newline at end of file diff --git a/src/assets/icons/thumbnail.svg b/src/assets/icons/thumbnail.svg new file mode 100644 index 0000000..392d921 --- /dev/null +++ b/src/assets/icons/thumbnail.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/tree-list.svg b/src/assets/icons/tree-list.svg new file mode 100644 index 0000000..63b72b3 --- /dev/null +++ b/src/assets/icons/tree-list.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/undo.svg b/src/assets/icons/undo.svg new file mode 100644 index 0000000..9f88fe3 --- /dev/null +++ b/src/assets/icons/undo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/ungroup.svg b/src/assets/icons/ungroup.svg new file mode 100644 index 0000000..8fa16ea --- /dev/null +++ b/src/assets/icons/ungroup.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/unlock.svg b/src/assets/icons/unlock.svg new file mode 100644 index 0000000..b945f7a --- /dev/null +++ b/src/assets/icons/unlock.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/upload.svg b/src/assets/icons/upload.svg new file mode 100644 index 0000000..84e803a --- /dev/null +++ b/src/assets/icons/upload.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/vertical-distribution.svg b/src/assets/icons/vertical-distribution.svg new file mode 100644 index 0000000..5962274 --- /dev/null +++ b/src/assets/icons/vertical-distribution.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/view-hide.svg b/src/assets/icons/view-hide.svg new file mode 100644 index 0000000..71ba86e --- /dev/null +++ b/src/assets/icons/view-hide.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/view-show.svg b/src/assets/icons/view-show.svg new file mode 100644 index 0000000..570cc7c --- /dev/null +++ b/src/assets/icons/view-show.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/imgs/test/my-img.png b/src/assets/imgs/test/my-img.png new file mode 100644 index 0000000..83061ff Binary files /dev/null and b/src/assets/imgs/test/my-img.png differ diff --git a/src/assets/logo.png b/src/assets/logo.png new file mode 100644 index 0000000..ccd100f Binary files /dev/null and b/src/assets/logo.png differ diff --git a/src/assets/main.css b/src/assets/main.css new file mode 100644 index 0000000..ea1e941 --- /dev/null +++ b/src/assets/main.css @@ -0,0 +1,4 @@ +body { + margin: 0; + padding: 0; +} diff --git a/src/assets/svgs/electrical/fs/故障.svg b/src/assets/svgs/electrical/fs/故障.svg new file mode 100644 index 0000000..4bf36e1 --- /dev/null +++ b/src/assets/svgs/electrical/fs/故障.svg @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/src/assets/svgs/electrical/fs/火花间隙.svg b/src/assets/svgs/electrical/fs/火花间隙.svg new file mode 100644 index 0000000..72a3351 --- /dev/null +++ b/src/assets/svgs/electrical/fs/火花间隙.svg @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/src/assets/svgs/electrical/fs/电阻(阻抗).svg b/src/assets/svgs/electrical/fs/电阻(阻抗).svg new file mode 100644 index 0000000..a5b6b03 --- /dev/null +++ b/src/assets/svgs/electrical/fs/电阻(阻抗).svg @@ -0,0 +1,5 @@ + + + + R + \ No newline at end of file diff --git a/src/assets/svgs/electrical/fs/避雷器.svg b/src/assets/svgs/electrical/fs/避雷器.svg new file mode 100644 index 0000000..1d33a0e --- /dev/null +++ b/src/assets/svgs/electrical/fs/避雷器.svg @@ -0,0 +1,15 @@ + + + + + + + + + diff --git a/src/assets/svgs/electrical/stroke/三绕组自耦变压器.svg b/src/assets/svgs/electrical/stroke/三绕组自耦变压器.svg new file mode 100644 index 0000000..7714fe9 --- /dev/null +++ b/src/assets/svgs/electrical/stroke/三绕组自耦变压器.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/src/assets/svgs/electrical/stroke/手车01.svg b/src/assets/svgs/electrical/stroke/手车01.svg new file mode 100644 index 0000000..9cfff3b --- /dev/null +++ b/src/assets/svgs/electrical/stroke/手车01.svg @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/src/assets/svgs/electrical/stroke/接地.svg b/src/assets/svgs/electrical/stroke/接地.svg new file mode 100644 index 0000000..d3f901b --- /dev/null +++ b/src/assets/svgs/electrical/stroke/接地.svg @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/src/assets/svgs/electrical/stroke/断路器-开关.svg b/src/assets/svgs/electrical/stroke/断路器-开关.svg new file mode 100644 index 0000000..97d4abe --- /dev/null +++ b/src/assets/svgs/electrical/stroke/断路器-开关.svg @@ -0,0 +1,16 @@ + + + + + + + + + + diff --git a/src/assets/svgs/electrical/stroke/消弧线圈.svg b/src/assets/svgs/electrical/stroke/消弧线圈.svg new file mode 100644 index 0000000..41678fd --- /dev/null +++ b/src/assets/svgs/electrical/stroke/消弧线圈.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/svgs/electrical/stroke/熔断器.svg b/src/assets/svgs/electrical/stroke/熔断器.svg new file mode 100644 index 0000000..8abc11f --- /dev/null +++ b/src/assets/svgs/electrical/stroke/熔断器.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/src/assets/svgs/electrical/stroke/电动机.svg b/src/assets/svgs/electrical/stroke/电动机.svg new file mode 100644 index 0000000..e7ccbb2 --- /dev/null +++ b/src/assets/svgs/electrical/stroke/电动机.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/src/assets/svgs/electrical/stroke/电容器.svg b/src/assets/svgs/electrical/stroke/电容器.svg new file mode 100644 index 0000000..554ec78 --- /dev/null +++ b/src/assets/svgs/electrical/stroke/电容器.svg @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/src/assets/svgs/electrical/stroke/电抗器.svg b/src/assets/svgs/electrical/stroke/电抗器.svg new file mode 100644 index 0000000..a28512c --- /dev/null +++ b/src/assets/svgs/electrical/stroke/电抗器.svg @@ -0,0 +1,15 @@ + + + + + + + + + diff --git a/src/assets/svgs/electrical/stroke/电缆终端头.svg b/src/assets/svgs/electrical/stroke/电缆终端头.svg new file mode 100644 index 0000000..c8d6524 --- /dev/null +++ b/src/assets/svgs/electrical/stroke/电缆终端头.svg @@ -0,0 +1,13 @@ + + + + + + + diff --git a/src/assets/svgs/electrical/stroke/自动空气断路器.svg b/src/assets/svgs/electrical/stroke/自动空气断路器.svg new file mode 100644 index 0000000..00e9f0f --- /dev/null +++ b/src/assets/svgs/electrical/stroke/自动空气断路器.svg @@ -0,0 +1,15 @@ + + + + + + + + + diff --git a/src/assets/svgs/electrical/stroke/跌落式熔断器.svg b/src/assets/svgs/electrical/stroke/跌落式熔断器.svg new file mode 100644 index 0000000..3ae11b8 --- /dev/null +++ b/src/assets/svgs/electrical/stroke/跌落式熔断器.svg @@ -0,0 +1,16 @@ + + + + + + + + + + diff --git a/src/assets/svgs/electrical/stroke/隔离开关-刀闸.svg b/src/assets/svgs/electrical/stroke/隔离开关-刀闸.svg new file mode 100644 index 0000000..abb2277 --- /dev/null +++ b/src/assets/svgs/electrical/stroke/隔离开关-刀闸.svg @@ -0,0 +1,15 @@ + + + + + + + + + diff --git a/src/assets/svgs/electrical/三绕组变压器.svg b/src/assets/svgs/electrical/三绕组变压器.svg new file mode 100644 index 0000000..9c56358 --- /dev/null +++ b/src/assets/svgs/electrical/三绕组变压器.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/src/assets/svgs/electrical/交流发电机.svg b/src/assets/svgs/electrical/交流发电机.svg new file mode 100644 index 0000000..2198886 --- /dev/null +++ b/src/assets/svgs/electrical/交流发电机.svg @@ -0,0 +1,6 @@ + + + + G + ~ + \ No newline at end of file diff --git a/src/assets/svgs/electrical/双绕组变压器.svg b/src/assets/svgs/electrical/双绕组变压器.svg new file mode 100644 index 0000000..f443480 --- /dev/null +++ b/src/assets/svgs/electrical/双绕组变压器.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/src/assets/svgs/electrical/手车02.svg b/src/assets/svgs/electrical/手车02.svg new file mode 100644 index 0000000..8669cdc --- /dev/null +++ b/src/assets/svgs/electrical/手车02.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/src/components/custom-components/card-vue/index.vue b/src/components/custom-components/card-vue/index.vue new file mode 100644 index 0000000..e6cc9ec --- /dev/null +++ b/src/components/custom-components/card-vue/index.vue @@ -0,0 +1,39 @@ + + + + diff --git a/src/components/custom-components/kv-vue/index.vue b/src/components/custom-components/kv-vue/index.vue new file mode 100644 index 0000000..66fa425 --- /dev/null +++ b/src/components/custom-components/kv-vue/index.vue @@ -0,0 +1,71 @@ + + + diff --git a/src/components/custom-components/now-time-vue/index.vue b/src/components/custom-components/now-time-vue/index.vue new file mode 100644 index 0000000..74a6710 --- /dev/null +++ b/src/components/custom-components/now-time-vue/index.vue @@ -0,0 +1,78 @@ + + + diff --git a/src/components/custom-components/sys-button-vue/index.vue b/src/components/custom-components/sys-button-vue/index.vue new file mode 100644 index 0000000..4279025 --- /dev/null +++ b/src/components/custom-components/sys-button-vue/index.vue @@ -0,0 +1,48 @@ + + diff --git a/src/components/custom-components/text-vue/index.vue b/src/components/custom-components/text-vue/index.vue new file mode 100644 index 0000000..937cd39 --- /dev/null +++ b/src/components/custom-components/text-vue/index.vue @@ -0,0 +1,39 @@ + + + diff --git a/src/components/mt-dzr/__tests__/mt-dzr.spec.ts b/src/components/mt-dzr/__tests__/mt-dzr.spec.ts new file mode 100644 index 0000000..d772c64 --- /dev/null +++ b/src/components/mt-dzr/__tests__/mt-dzr.spec.ts @@ -0,0 +1,11 @@ +import { describe, it, expect } from 'vitest'; + +import { mount } from '@vue/test-utils'; +import HelloWorld from '../index.vue'; + +describe('HelloWorld', () => { + it('renders properly', () => { + const wrapper = mount(HelloWorld, { props: { msg: 'Hello Vitest' } }); + expect(wrapper.text()).toContain('Hello Vitest'); + }); +}); diff --git a/src/components/mt-dzr/components/render-item.vue b/src/components/mt-dzr/components/render-item.vue new file mode 100644 index 0000000..aab7e74 --- /dev/null +++ b/src/components/mt-dzr/components/render-item.vue @@ -0,0 +1,5 @@ + diff --git a/src/components/mt-dzr/components/resize-handle.vue b/src/components/mt-dzr/components/resize-handle.vue new file mode 100644 index 0000000..cdecea1 --- /dev/null +++ b/src/components/mt-dzr/components/resize-handle.vue @@ -0,0 +1,196 @@ + + + diff --git a/src/components/mt-dzr/components/rotate-handle.vue b/src/components/mt-dzr/components/rotate-handle.vue new file mode 100644 index 0000000..3532fbb --- /dev/null +++ b/src/components/mt-dzr/components/rotate-handle.vue @@ -0,0 +1,88 @@ + + + diff --git a/src/components/mt-dzr/composables/mouse.ts b/src/components/mt-dzr/composables/mouse.ts new file mode 100644 index 0000000..e69de29 diff --git a/src/components/mt-dzr/index.ts b/src/components/mt-dzr/index.ts new file mode 100644 index 0000000..6957053 --- /dev/null +++ b/src/components/mt-dzr/index.ts @@ -0,0 +1,3 @@ +import MtDzr from './index.vue'; + +export default MtDzr; diff --git a/src/components/mt-dzr/index.vue b/src/components/mt-dzr/index.vue new file mode 100644 index 0000000..98044c3 --- /dev/null +++ b/src/components/mt-dzr/index.vue @@ -0,0 +1,284 @@ + + + diff --git a/src/components/mt-dzr/store/index.ts b/src/components/mt-dzr/store/index.ts new file mode 100644 index 0000000..d1eee2c --- /dev/null +++ b/src/components/mt-dzr/store/index.ts @@ -0,0 +1,34 @@ +import { reactive } from 'vue'; +import type { IDzrCopyInfo, IDzrStore } from './types'; +import type { IDzrPropsModelValue } from '../types'; + +export const dzrStore: IDzrStore = reactive({ + dzr_copy_info: { + gen_id: '', + show: false, + value: { + left: 0, + top: 0, + width: 0, + height: 0, + angle: 0 + } + }, + setDzrCopyInfo: (value: IDzrCopyInfo) => { + dzrStore.dzr_copy_info = value; + }, + showDzrCopy: (value: IDzrPropsModelValue, gen_id: string) => { + dzrStore.setDzrCopyInfo({ + ...dzrStore.dzr_copy_info, + show: true, + value, + gen_id + }); + }, + hideDzrCopy: () => { + dzrStore.setDzrCopyInfo({ + ...dzrStore.dzr_copy_info, + show: false + }); + } +}); diff --git a/src/components/mt-dzr/store/types.ts b/src/components/mt-dzr/store/types.ts new file mode 100644 index 0000000..f3af2a3 --- /dev/null +++ b/src/components/mt-dzr/store/types.ts @@ -0,0 +1,13 @@ +import type { IDzrPropsModelValue } from '../types'; + +export interface IDzrStore { + dzr_copy_info: IDzrCopyInfo; + setDzrCopyInfo: (value: IDzrCopyInfo) => void; + showDzrCopy: (value: IDzrPropsModelValue, gen_id: string) => void; + hideDzrCopy: () => void; +} +export interface IDzrCopyInfo { + gen_id: string; + show: boolean; + value: IDzrPropsModelValue; +} diff --git a/src/components/mt-dzr/types.ts b/src/components/mt-dzr/types.ts new file mode 100644 index 0000000..6fc0672 --- /dev/null +++ b/src/components/mt-dzr/types.ts @@ -0,0 +1,31 @@ +export interface IDzrProps { + id: string; + modelValue: IDzrPropsModelValue; //位置和大小 + scaleRatio?: number; //画布缩放倍数 + hide: boolean; //隐藏 + grid?: IDzrPropsGrid; //网格配置 + resize?: boolean; //开启缩放 + rotate?: boolean; //开启旋转 + lock?: boolean; //锁定 + active?: boolean; //激活 + useProportionalScaling?: boolean; //开启等比例缩放 + showGhostDom?: boolean; //是否显示幽灵dom + class?: string; // + disabled: boolean; //是否禁用 + adsorp_diff?: { + x: number; + y: number; + }; +} +export interface IDzrPropsModelValue { + left: number; + top: number; + width: number; + height: number; + angle: number; +} +export interface IDzrPropsGrid { + enabled: boolean; //开启网格 + align: boolean; //对齐到网格 + size: number; //网格大小 +} diff --git a/src/components/mt-dzr/utils/index.ts b/src/components/mt-dzr/utils/index.ts new file mode 100644 index 0000000..bca1697 --- /dev/null +++ b/src/components/mt-dzr/utils/index.ts @@ -0,0 +1,358 @@ +import type { IDzrPropsModelValue } from '../types'; +import type { MouseTouchEvent } from './types'; + +/** + * 会自动销毁的鼠标移动事件 + * @param onMousemove + */ +export const autoDestroyMouseMove = ( + onMousemove: (e: MouseTouchEvent) => void, + mouseUpCallBack?: () => void +) => { + const onMouseup = () => { + document.removeEventListener('mousemove', onMousemove); + document.removeEventListener('touchmove', onMousemove); + document.removeEventListener('mouseup', onMouseup); + document.removeEventListener('touchend', onMouseup); + document.removeEventListener('mouseleave', onMouseup); + if (mouseUpCallBack) { + mouseUpCallBack(); + } + }; + document.addEventListener('mousemove', onMousemove); + document.addEventListener('touchmove', onMousemove); + document.addEventListener('mouseup', onMouseup); + document.addEventListener('touchend', onMouseup); + document.addEventListener('mouseleave', onMouseup); +}; +/** + * 根据坐标对齐到网格 + * @param position 当前坐标 + * @param grid 网格大小 + * @returns 对应网格的坐标 + */ +export const alignToGrid = (position: number, grid = 1) => { + const integerPart = Math.floor(position / grid); + const fractionalPart = position % grid; + + if (fractionalPart >= grid / 2) { + return (integerPart + 1) * grid; + } else { + return integerPart * grid; + } +}; +/** 根据移动的距离对齐到网格 + * @param diff 移动的距离 + * @param grid 网格大小 + */ +export const calcGrid = (diff: number, grid = 1) => { + // 得到每次缩放的余数 + const r = Math.abs(diff) % grid; + + // 正负grid + const mulGrid = diff > 0 ? grid : -grid; + let result = 0; + // 余数大于grid的1/2 + if (r > grid / 2) { + result = mulGrid * Math.ceil(Math.abs(diff) / grid); + } else { + result = mulGrid * Math.floor(Math.abs(diff) / grid); + } + + return result; +}; +/** + * 获取当前点击坐标 根据pc端和移动端获取 + * @param e + * @returns + */ +export function getXY(e: MouseTouchEvent) { + let clientX = 0, + clientY = 0; + if (isTouchEvent(e)) { + const touch = e.targetTouches[0]; + clientX = touch.pageX; + clientY = touch.pageY; + } else { + clientX = e.clientX; + clientY = e.clientY; + } + + return { clientX, clientY }; +} + +function isTouchEvent(val: unknown): val is TouchEvent { + const typeStr = Object.prototype.toString.call(val); + return typeStr.substring(8, typeStr.length - 1) === 'TouchEvent'; +} + +export const getLength = (x: number, y: number) => Math.sqrt(x * x + y * y); + +export const degToRadian = (deg: number) => (deg * Math.PI) / 180; +const cos = (deg: number) => Math.cos(degToRadian(deg)); +const sin = (deg: number) => Math.sin(degToRadian(deg)); +/** + * 计算并返回给定类型变换的新样式。 + * + * @param {string} type - 变换的类型。 + * @param {any} rect - 矩形对象。 + * @param {number} deltaW - 宽度变化。 + * @param {number} deltaH - 高度变化。 + * @param {number | undefined} ratio - 比例。 + * @param {number} minWidth - 最小宽度。 + * @param {number} minHeight - 最小高度。 + * @returns {Object} 矩形的新位置和大小。 + */ +export const getNewStyle = ( + type: string, + rect: any, + deltaW: number, + deltaH: number, + ratio: number | undefined, + minWidth: number, + minHeight: number +) => { + // eslint-disable-next-line prefer-const + let { width, height, centerX, centerY, rotateAngle } = rect; + const widthFlag = width < 0 ? -1 : 1; + const heightFlag = height < 0 ? -1 : 1; + width = Math.abs(width); + height = Math.abs(height); + switch (type) { + case 'r': { + const widthAndDeltaW = setWidthAndDeltaW(width, deltaW, minWidth); + width = widthAndDeltaW.width; + deltaW = widthAndDeltaW.deltaW; + if (ratio) { + deltaH = deltaW / ratio; + height = width / ratio; + // 左上角固定 + centerX += (deltaW / 2) * cos(rotateAngle) - (deltaH / 2) * sin(rotateAngle); + centerY += (deltaW / 2) * sin(rotateAngle) + (deltaH / 2) * cos(rotateAngle); + } else { + // 左边固定 + centerX += (deltaW / 2) * cos(rotateAngle); + centerY += (deltaW / 2) * sin(rotateAngle); + } + break; + } + case 'tr': { + deltaH = -deltaH; + const widthAndDeltaW = setWidthAndDeltaW(width, deltaW, minWidth); + width = widthAndDeltaW.width; + deltaW = widthAndDeltaW.deltaW; + const heightAndDeltaH = setHeightAndDeltaH(height, deltaH, minHeight); + height = heightAndDeltaH.height; + deltaH = heightAndDeltaH.deltaH; + if (ratio) { + deltaW = deltaH * ratio; + width = height * ratio; + } + centerX += (deltaW / 2) * cos(rotateAngle) + (deltaH / 2) * sin(rotateAngle); + centerY += (deltaW / 2) * sin(rotateAngle) - (deltaH / 2) * cos(rotateAngle); + break; + } + case 'br': { + const widthAndDeltaW = setWidthAndDeltaW(width, deltaW, minWidth); + width = widthAndDeltaW.width; + deltaW = widthAndDeltaW.deltaW; + const heightAndDeltaH = setHeightAndDeltaH(height, deltaH, minHeight); + height = heightAndDeltaH.height; + deltaH = heightAndDeltaH.deltaH; + if (ratio) { + deltaW = deltaH * ratio; + width = height * ratio; + } + centerX += (deltaW / 2) * cos(rotateAngle) - (deltaH / 2) * sin(rotateAngle); + centerY += (deltaW / 2) * sin(rotateAngle) + (deltaH / 2) * cos(rotateAngle); + break; + } + case 'bc': { + const heightAndDeltaH = setHeightAndDeltaH(height, deltaH, minHeight); + height = heightAndDeltaH.height; + deltaH = heightAndDeltaH.deltaH; + if (ratio) { + deltaW = deltaH * ratio; + width = height * ratio; + // 左上角固定 + centerX += (deltaW / 2) * cos(rotateAngle) - (deltaH / 2) * sin(rotateAngle); + centerY += (deltaW / 2) * sin(rotateAngle) + (deltaH / 2) * cos(rotateAngle); + } else { + // 上边固定 + centerX -= (deltaH / 2) * sin(rotateAngle); + centerY += (deltaH / 2) * cos(rotateAngle); + } + break; + } + case 'bl': { + deltaW = -deltaW; + const widthAndDeltaW = setWidthAndDeltaW(width, deltaW, minWidth); + width = widthAndDeltaW.width; + deltaW = widthAndDeltaW.deltaW; + const heightAndDeltaH = setHeightAndDeltaH(height, deltaH, minHeight); + height = heightAndDeltaH.height; + deltaH = heightAndDeltaH.deltaH; + if (ratio) { + height = width / ratio; + deltaH = deltaW / ratio; + } + centerX -= (deltaW / 2) * cos(rotateAngle) + (deltaH / 2) * sin(rotateAngle); + centerY -= (deltaW / 2) * sin(rotateAngle) - (deltaH / 2) * cos(rotateAngle); + break; + } + case 'l': { + deltaW = -deltaW; + const widthAndDeltaW = setWidthAndDeltaW(width, deltaW, minWidth); + width = widthAndDeltaW.width; + deltaW = widthAndDeltaW.deltaW; + if (ratio) { + height = width / ratio; + deltaH = deltaW / ratio; + // 右上角固定 + centerX -= (deltaW / 2) * cos(rotateAngle) + (deltaH / 2) * sin(rotateAngle); + centerY -= (deltaW / 2) * sin(rotateAngle) - (deltaH / 2) * cos(rotateAngle); + } else { + // 右边固定 + centerX -= (deltaW / 2) * cos(rotateAngle); + centerY -= (deltaW / 2) * sin(rotateAngle); + } + break; + } + case 'tl': { + deltaW = -deltaW; + deltaH = -deltaH; + const widthAndDeltaW = setWidthAndDeltaW(width, deltaW, minWidth); + width = widthAndDeltaW.width; + deltaW = widthAndDeltaW.deltaW; + const heightAndDeltaH = setHeightAndDeltaH(height, deltaH, minHeight); + height = heightAndDeltaH.height; + deltaH = heightAndDeltaH.deltaH; + if (ratio) { + width = height * ratio; + deltaW = deltaH * ratio; + } + centerX -= (deltaW / 2) * cos(rotateAngle) - (deltaH / 2) * sin(rotateAngle); + centerY -= (deltaW / 2) * sin(rotateAngle) + (deltaH / 2) * cos(rotateAngle); + break; + } + case 'tc': { + deltaH = -deltaH; + const heightAndDeltaH = setHeightAndDeltaH(height, deltaH, minHeight); + height = heightAndDeltaH.height; + deltaH = heightAndDeltaH.deltaH; + if (ratio) { + width = height * ratio; + deltaW = deltaH * ratio; + // 左下角固定 + centerX += (deltaW / 2) * cos(rotateAngle) + (deltaH / 2) * sin(rotateAngle); + centerY += (deltaW / 2) * sin(rotateAngle) - (deltaH / 2) * cos(rotateAngle); + } else { + centerX += (deltaH / 2) * sin(rotateAngle); + centerY -= (deltaH / 2) * cos(rotateAngle); + } + break; + } + } + + return { + position: { + centerX, + centerY + }, + size: { + width: width * widthFlag, + height: height * heightFlag + } + }; +}; +/** + * 根据给定的参数设置高度和 deltaH 值。 + * + * @param {number} height - 当前的高度值。 + * @param {number} deltaH - 高度变化值。 + * @param {number} minHeight - 最小高度值。 + * @return {object} - 包含更新后的高度和 deltaH 值的对象。 + */ +const setHeightAndDeltaH = (height: number, deltaH: number, minHeight: number) => { + const expectedHeight = height + deltaH; + if (expectedHeight > minHeight) { + height = expectedHeight; + } else { + deltaH = minHeight - height; + height = minHeight; + } + return { height, deltaH }; +}; +/** + * 设置元素的宽度和deltaW值。 + * + * @param {number} width - 元素的当前宽度。 + * @param {number} deltaW - 元素宽度的变化量。 + * @param {number} minWidth - 元素的最小宽度。 + * @return {Object} - 包含更新后的宽度和deltaW值的对象。 + */ +const setWidthAndDeltaW = (width: number, deltaW: number, minWidth: number) => { + const expectedWidth = width + deltaW; + if (expectedWidth > minWidth) { + width = expectedWidth; + } else { + deltaW = minWidth - width; + width = minWidth; + } + return { width, deltaW }; +}; +/** + * 根据矩形的中心坐标、尺寸和角度计算左上角的位置。 + * + * @param {object} params - 计算的参数。 + * @param {number} params.centerX - 矩形的中心点的 x 坐标。 + * @param {number} params.centerY - 矩形的中心点的 y 坐标。 + * @param {number} params.width - 矩形的宽度。 + * @param {number} params.height - 矩形的高度。 + * @param {number} params.angle - 矩形的旋转角度。 + * @return {object} - 矩形的左上角位置。 + */ +export const centerToTL = ({ + centerX, + centerY, + width, + height, + angle +}: any): IDzrPropsModelValue => ({ + top: centerY - height / 2, + left: centerX - width / 2, + width, + height, + angle +}); +/** + * 格式化数据并返回一个包含更新后尺寸和位置的对象。 + * + * @param {IDzrPropsModelValue} data - 包含宽度和高度的数据。 + * @param {number} centerX - 中心点的x坐标。 + * @param {number} centerY - 中心点的y坐标。 + * @return {object} - 一个包含更新后尺寸和位置的对象。 + */ +export const formatData = (data: IDzrPropsModelValue, centerX: number, centerY: number) => { + const { width, height } = data; + return { + width: Math.abs(width), + height: Math.abs(height), + left: centerX - Math.abs(width) / 2, + top: centerY - Math.abs(height) / 2 + }; +}; +/** + * 生成随机字符串 + * @param len 生成个数 + */ +export const randomString = (len?: number) => { + len = len || 10; + const str = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; + const maxPos = str.length; + let random_str = ''; + for (let i = 0; i < len; i++) { + random_str += str.charAt(Math.floor(Math.random() * maxPos)); + } + return random_str; +}; diff --git a/src/components/mt-dzr/utils/types.ts b/src/components/mt-dzr/utils/types.ts new file mode 100644 index 0000000..c5e344a --- /dev/null +++ b/src/components/mt-dzr/utils/types.ts @@ -0,0 +1 @@ +export type MouseTouchEvent = MouseEvent | TouchEvent; diff --git a/src/components/mt-edit/ace-edit.ts b/src/components/mt-edit/ace-edit.ts new file mode 100644 index 0000000..27213d8 --- /dev/null +++ b/src/components/mt-edit/ace-edit.ts @@ -0,0 +1,78 @@ +import ace from 'ace-builds'; + +import themeMonokaiUrl from 'ace-builds/src-noconflict/theme-monokai?url'; +ace.config.setModuleUrl('ace/theme/monokai', themeMonokaiUrl); + +import workerBaseUrl from 'ace-builds/src-noconflict/worker-base?url'; +ace.config.setModuleUrl('ace/mode/base', workerBaseUrl); + +import modeJsonUrl from 'ace-builds/src-noconflict/mode-json?url'; +ace.config.setModuleUrl('ace/mode/json', modeJsonUrl); +import workerJsonUrl from 'ace-builds/src-noconflict/worker-json?url'; +ace.config.setModuleUrl('ace/mode/json_worker', workerJsonUrl); +import snippetsJsonUrl from 'ace-builds/src-noconflict/snippets/json?url'; +ace.config.setModuleUrl('ace/snippets/json', snippetsJsonUrl); + +import modeJavascriptUrl from 'ace-builds/src-noconflict/mode-javascript?url'; +ace.config.setModuleUrl('ace/mode/javascript', modeJavascriptUrl); +import workerJavascriptUrl from 'ace-builds/src-noconflict/worker-javascript?url'; +ace.config.setModuleUrl('ace/mode/javascript_worker', workerJavascriptUrl); +import snippetsJavascriptUrl from 'ace-builds/src-noconflict/snippets/javascript?url'; +ace.config.setModuleUrl('ace/snippets/javascript', snippetsJavascriptUrl); + +import 'ace-builds/src-noconflict/ext-language_tools'; +// ace.require('ace/ext/language_tools'); +const langTools = ace.require('ace/ext/language_tools'); +langTools.addCompleter({ + getCompletions: function ( + _editor: any, + _session: any, + _pos: any, + prefix: string | any[], + callback: ( + arg0: null, + arg1: { + name: string; //显示的名称 + value: string; //插入的值, + score: number; //分数 + meta: string; //描述 + }[] + ) => void + ) { + if (prefix.length === 0) { + callback(null, []); + return; + } + callback(null, [ + { + name: '$mtEventCallBack', + value: '$mtEventCallBack(type,$item_info.id)', + score: 1000, + meta: '执行订阅回调函数' + }, + { + name: '$mtElMessage', + value: '$mtElMessage.success("成功")', + score: 1000, + meta: '消息提示' + }, + { + name: '$mtElMessageBox', + value: `$mtElMessageBox.alert('This is a message', 'Title', { + confirmButtonText: 'OK', + callback: (action) => { + console.log(action) + }, + })`, + score: 1000, + meta: '消息弹出框' + }, + { + name: '$item_info', + value: '$item_info', + score: 1000, + meta: '回调函数中获取当前触发事件图形的信息' + } + ]); + } +}); diff --git a/src/components/mt-edit/assets/css/custom_ani.css b/src/components/mt-edit/assets/css/custom_ani.css new file mode 100644 index 0000000..97017d8 --- /dev/null +++ b/src/components/mt-edit/assets/css/custom_ani.css @@ -0,0 +1,37 @@ +@-webkit-keyframes rotate360 { + 0% { + -webkit-transform: rotate3d(0, 0, 1, 0deg); + transform: rotate3d(0, 0, 1, 0deg); + } + 50% { + -webkit-transform: rotate3d(0, 0, 1, 180deg); + transform: rotate3d(0, 0, 1, 180deg); + } + to { + -webkit-transform: rotate3d(0, 0, 1, 360deg); + transform: rotate3d(0, 0, 1, 360deg); + } +} + +@keyframes rotate360 { + 0% { + -webkit-transform: rotate3d(0, 0, 1, 0deg); + transform: rotate3d(0, 0, 1, 0deg); + } + 50% { + -webkit-transform: rotate3d(0, 0, 1, 180deg); + transform: rotate3d(0, 0, 1, 180deg); + } + to { + -webkit-transform: rotate3d(0, 0, 1, 360deg); + transform: rotate3d(0, 0, 1, 360deg); + } +} + +.animate__rotate360 { + -webkit-animation-name: rotate360; + animation-name: rotate360; + animation-timing-function: linear; + -webkit-transform-origin: center; + transform-origin: center; +} diff --git a/src/components/mt-edit/components/context-menu/index.vue b/src/components/mt-edit/components/context-menu/index.vue new file mode 100644 index 0000000..1b28ef4 --- /dev/null +++ b/src/components/mt-edit/components/context-menu/index.vue @@ -0,0 +1,86 @@ + + + diff --git a/src/components/mt-edit/components/custom-svg-render/index.vue b/src/components/mt-edit/components/custom-svg-render/index.vue new file mode 100644 index 0000000..87ad777 --- /dev/null +++ b/src/components/mt-edit/components/custom-svg-render/index.vue @@ -0,0 +1,26 @@ + + diff --git a/src/components/mt-edit/components/done-tree/index.vue b/src/components/mt-edit/components/done-tree/index.vue new file mode 100644 index 0000000..a1d3a67 --- /dev/null +++ b/src/components/mt-edit/components/done-tree/index.vue @@ -0,0 +1,51 @@ + + + diff --git a/src/components/mt-edit/components/drag-canvas/index.vue b/src/components/mt-edit/components/drag-canvas/index.vue new file mode 100644 index 0000000..4a884ee --- /dev/null +++ b/src/components/mt-edit/components/drag-canvas/index.vue @@ -0,0 +1,49 @@ + + + + diff --git a/src/components/mt-edit/components/draw-line-render/index.vue b/src/components/mt-edit/components/draw-line-render/index.vue new file mode 100644 index 0000000..f8dd9ce --- /dev/null +++ b/src/components/mt-edit/components/draw-line-render/index.vue @@ -0,0 +1,204 @@ + + + diff --git a/src/components/mt-edit/components/export-json/index.vue b/src/components/mt-edit/components/export-json/index.vue new file mode 100644 index 0000000..0c803d2 --- /dev/null +++ b/src/components/mt-edit/components/export-json/index.vue @@ -0,0 +1,40 @@ + + diff --git a/src/components/mt-edit/components/group-render/index.vue b/src/components/mt-edit/components/group-render/index.vue new file mode 100644 index 0000000..e9458ea --- /dev/null +++ b/src/components/mt-edit/components/group-render/index.vue @@ -0,0 +1,48 @@ + + + diff --git a/src/components/mt-edit/components/import-json/index.vue b/src/components/mt-edit/components/import-json/index.vue new file mode 100644 index 0000000..3f52548 --- /dev/null +++ b/src/components/mt-edit/components/import-json/index.vue @@ -0,0 +1,42 @@ + + diff --git a/src/components/mt-edit/components/layout/footer-panel/index.vue b/src/components/mt-edit/components/layout/footer-panel/index.vue new file mode 100644 index 0000000..a0ae5f0 --- /dev/null +++ b/src/components/mt-edit/components/layout/footer-panel/index.vue @@ -0,0 +1,10 @@ + + diff --git a/src/components/mt-edit/components/layout/header-panel/index.vue b/src/components/mt-edit/components/layout/header-panel/index.vue new file mode 100644 index 0000000..f9cbf55 --- /dev/null +++ b/src/components/mt-edit/components/layout/header-panel/index.vue @@ -0,0 +1,366 @@ + + + diff --git a/src/components/mt-edit/components/layout/left-aside/index.vue b/src/components/mt-edit/components/layout/left-aside/index.vue new file mode 100644 index 0000000..3f740d3 --- /dev/null +++ b/src/components/mt-edit/components/layout/left-aside/index.vue @@ -0,0 +1,313 @@ + + + diff --git a/src/components/mt-edit/components/layout/main-panel/index.vue b/src/components/mt-edit/components/layout/main-panel/index.vue new file mode 100644 index 0000000..9805189 --- /dev/null +++ b/src/components/mt-edit/components/layout/main-panel/index.vue @@ -0,0 +1,1282 @@ + + + diff --git a/src/components/mt-edit/components/layout/right-aside/index.vue b/src/components/mt-edit/components/layout/right-aside/index.vue new file mode 100644 index 0000000..d7730ba --- /dev/null +++ b/src/components/mt-edit/components/layout/right-aside/index.vue @@ -0,0 +1,41 @@ + + + diff --git a/src/components/mt-edit/components/layout/right-aside/json-edit.vue b/src/components/mt-edit/components/layout/right-aside/json-edit.vue new file mode 100644 index 0000000..cb0b555 --- /dev/null +++ b/src/components/mt-edit/components/layout/right-aside/json-edit.vue @@ -0,0 +1,43 @@ + + diff --git a/src/components/mt-edit/components/layout/right-aside/page-setting.vue b/src/components/mt-edit/components/layout/right-aside/page-setting.vue new file mode 100644 index 0000000..23c9d74 --- /dev/null +++ b/src/components/mt-edit/components/layout/right-aside/page-setting.vue @@ -0,0 +1,360 @@ + + diff --git a/src/components/mt-edit/components/layout/right-aside/select-item-animate-setting/common-animate.vue b/src/components/mt-edit/components/layout/right-aside/select-item-animate-setting/common-animate.vue new file mode 100644 index 0000000..2d80ada --- /dev/null +++ b/src/components/mt-edit/components/layout/right-aside/select-item-animate-setting/common-animate.vue @@ -0,0 +1,192 @@ + + + diff --git a/src/components/mt-edit/components/layout/right-aside/select-item-animate-setting/index.vue b/src/components/mt-edit/components/layout/right-aside/select-item-animate-setting/index.vue new file mode 100644 index 0000000..de06f45 --- /dev/null +++ b/src/components/mt-edit/components/layout/right-aside/select-item-animate-setting/index.vue @@ -0,0 +1,91 @@ + + diff --git a/src/components/mt-edit/components/layout/right-aside/select-item-event-setting/index.vue b/src/components/mt-edit/components/layout/right-aside/select-item-event-setting/index.vue new file mode 100644 index 0000000..b2aefd0 --- /dev/null +++ b/src/components/mt-edit/components/layout/right-aside/select-item-event-setting/index.vue @@ -0,0 +1,497 @@ + + diff --git a/src/components/mt-edit/components/layout/right-aside/select-item-event-setting/input-target-value.vue b/src/components/mt-edit/components/layout/right-aside/select-item-event-setting/input-target-value.vue new file mode 100644 index 0000000..95af298 --- /dev/null +++ b/src/components/mt-edit/components/layout/right-aside/select-item-event-setting/input-target-value.vue @@ -0,0 +1,31 @@ + + + diff --git a/src/components/mt-edit/components/layout/right-aside/select-item-props-setting.vue b/src/components/mt-edit/components/layout/right-aside/select-item-props-setting.vue new file mode 100644 index 0000000..5f8d5ca --- /dev/null +++ b/src/components/mt-edit/components/layout/right-aside/select-item-props-setting.vue @@ -0,0 +1,77 @@ + + diff --git a/src/components/mt-edit/components/layout/right-aside/select-item-setting.vue b/src/components/mt-edit/components/layout/right-aside/select-item-setting.vue new file mode 100644 index 0000000..9a363f9 --- /dev/null +++ b/src/components/mt-edit/components/layout/right-aside/select-item-setting.vue @@ -0,0 +1,297 @@ + + diff --git a/src/components/mt-edit/components/line-render/index.vue b/src/components/mt-edit/components/line-render/index.vue new file mode 100644 index 0000000..0db3327 --- /dev/null +++ b/src/components/mt-edit/components/line-render/index.vue @@ -0,0 +1,540 @@ + + + diff --git a/src/components/mt-edit/components/pattern-grid/index.vue b/src/components/mt-edit/components/pattern-grid/index.vue new file mode 100644 index 0000000..c0e83ee --- /dev/null +++ b/src/components/mt-edit/components/pattern-grid/index.vue @@ -0,0 +1,82 @@ + + + + + diff --git a/src/components/mt-edit/components/render-core/index.vue b/src/components/mt-edit/components/render-core/index.vue new file mode 100644 index 0000000..6563071 --- /dev/null +++ b/src/components/mt-edit/components/render-core/index.vue @@ -0,0 +1,284 @@ + + diff --git a/src/components/mt-edit/components/render-core/types.ts b/src/components/mt-edit/components/render-core/types.ts new file mode 100644 index 0000000..8c5edc4 --- /dev/null +++ b/src/components/mt-edit/components/render-core/types.ts @@ -0,0 +1,7 @@ +import type { CacheBoundingBox, IDoneJsonBinfo } from '../../store/types'; + +export interface onItemMoveParams { + move_item_bounding_info: MoveItemBoundingInfo[]; + move_binfo: IDoneJsonBinfo & { id: string }; +} +export type MoveItemBoundingInfo = CacheBoundingBox; diff --git a/src/components/mt-edit/components/render-item/index.vue b/src/components/mt-edit/components/render-item/index.vue new file mode 100644 index 0000000..bf6f0c6 --- /dev/null +++ b/src/components/mt-edit/components/render-item/index.vue @@ -0,0 +1,101 @@ + + + diff --git a/src/components/mt-edit/components/selected-area/index.vue b/src/components/mt-edit/components/selected-area/index.vue new file mode 100644 index 0000000..42e38cc --- /dev/null +++ b/src/components/mt-edit/components/selected-area/index.vue @@ -0,0 +1,94 @@ + + + + diff --git a/src/components/mt-edit/components/selected-area/types.ts b/src/components/mt-edit/components/selected-area/types.ts new file mode 100644 index 0000000..51c5166 --- /dev/null +++ b/src/components/mt-edit/components/selected-area/types.ts @@ -0,0 +1,6 @@ +export interface IAreaBinfo { + width: number; + height: number; + top: number; + left: number; +} diff --git a/src/components/mt-edit/components/svg-analysis/index.vue b/src/components/mt-edit/components/svg-analysis/index.vue new file mode 100644 index 0000000..e07032e --- /dev/null +++ b/src/components/mt-edit/components/svg-analysis/index.vue @@ -0,0 +1,19 @@ + + diff --git a/src/components/mt-edit/components/svg-render/index.vue b/src/components/mt-edit/components/svg-render/index.vue new file mode 100644 index 0000000..dfbdf8f --- /dev/null +++ b/src/components/mt-edit/components/svg-render/index.vue @@ -0,0 +1,27 @@ + + diff --git a/src/components/mt-edit/components/types.ts b/src/components/mt-edit/components/types.ts new file mode 100644 index 0000000..3468e31 --- /dev/null +++ b/src/components/mt-edit/components/types.ts @@ -0,0 +1,13 @@ +import type { IDoneJson, IGlobalStoreCanvasCfg, IGlobalStoreGridCfg } from '../store/types'; + +export type MouseTouchEvent = MouseEvent | TouchEvent; +export interface IExportDoneJson extends Omit { + props: { + [key: string]: any; + }; +} +export interface IExportJson { + canvasCfg: IGlobalStoreCanvasCfg; + gridCfg: IGlobalStoreGridCfg; + json: IExportDoneJson[]; +} diff --git a/src/components/mt-edit/composables/index.ts b/src/components/mt-edit/composables/index.ts new file mode 100644 index 0000000..66f0be1 --- /dev/null +++ b/src/components/mt-edit/composables/index.ts @@ -0,0 +1,73 @@ +import type { IExportDoneJson, IExportJson } from '../components/types'; +import { leftAsideStore } from '../store/left-aside'; +import type { + IDoneJson, + IGlobalStoreCanvasCfg, + IGlobalStoreGridCfg, + ILeftAsideConfigItem, + ILeftAsideConfigItemPublicProps +} from '../store/types'; +import { objectDeepClone } from '../utils'; + +export const genExportJson = ( + canvasCfg: IGlobalStoreCanvasCfg, + gridCfg: IGlobalStoreGridCfg, + doneJson: IDoneJson[] +) => { + let export_done_json: IExportDoneJson[] = []; + export_done_json = objectDeepClone(doneJson).map((m) => { + if (m.symbol) { + delete m.symbol; + } + let new_props = {}; + for (const key in m.props) { + new_props = { ...new_props, ...{ [key]: m.props[key].val } }; + } + return { + ...m, + props: new_props, + active: false + }; + }); + const exportJson: IExportJson = { + canvasCfg, + gridCfg, + json: export_done_json + }; + return { exportJson }; +}; +export const useExportJsonToDoneJson = (json: IExportJson) => { + // 取出所有图形的初始配置 + let init_configs: ILeftAsideConfigItem[] = []; + for (const iterator of leftAsideStore.config.values()) { + if (iterator.length > 0) { + init_configs = [...init_configs, ...iterator]; + } + } + const importDoneJson: IDoneJson[] = json.json.map((m) => { + let props: ILeftAsideConfigItemPublicProps = {}; + let symbol = undefined; + // 找到原始的props + const find_item = init_configs.find((f) => f?.id == m.tag); + const find_props = find_item?.props; + if (find_props) { + props = { ...props, ...objectDeepClone(find_props) }; + } + for (const key in m.props) { + props[key].val = m.props[key]; + } + if (find_item?.symbol) { + symbol = find_item.symbol; + } + return { + ...m, + props, + symbol + }; + }); + return { + canvasCfg: json.canvasCfg, + gridCfg: json.gridCfg, + importDoneJson + }; +}; diff --git a/src/components/mt-edit/composables/sys-line.ts b/src/components/mt-edit/composables/sys-line.ts new file mode 100644 index 0000000..f599cdf --- /dev/null +++ b/src/components/mt-edit/composables/sys-line.ts @@ -0,0 +1,204 @@ +import { nextTick } from 'vue'; +import type { IDoneJson, IDoneJsonBinfo } from '../store/types'; +import { getRectCenterCoordinate, getRectCoordinate, rotatePoint } from '../utils'; + +/** + * 更新系统连线实际宽高 + * @param sys_lines + * @param scale + */ +export const useUpdateSysLineRect = ( + sys_lines: IDoneJson[], + canvasDom: HTMLElement, + scale: number +) => { + sys_lines.forEach((f) => { + const itemRect = document.querySelector(`#${f.id} g .real`)!.getBoundingClientRect(); + const canvas_area_bounding_info = canvasDom!.getBoundingClientRect(); + const new_left = (itemRect?.left - canvas_area_bounding_info?.left) / scale; + const new_top = (itemRect?.top - canvas_area_bounding_info?.top) / scale; + const move_x = new_left - f.binfo.left; + const move_y = new_top - f.binfo.top; + f.binfo.left = new_left; + f.binfo.top = new_top; + f.binfo.width = itemRect?.width / scale; + f.binfo.height = itemRect?.height / scale; + f.props.point_position = { + ...f.props.point_position, + val: f.props.point_position.val.map((m: { x: number; y: number }) => { + return { + x: m.x - move_x, + y: m.y - move_y + }; + }) + }; + }); +}; +/** + * 更新系统连线 + * @param sys_lines 要更新的连线列表 + * @param done_json 所有组件信息 + * @param canvasDom 画布dom + * @param scale 画布缩放 + */ +export const useUpdateSysLine = ( + sys_lines: IDoneJson[], + done_json: IDoneJson[], + canvasDom: HTMLElement, + scale: number, + move_binfo?: IDoneJsonBinfo & { id: string } +) => { + const temp_done_json = [...done_json]; + sys_lines.forEach((f) => { + if (!f.props.bind_anchors.val.start && !f.props.bind_anchors.val.end) { + return; + } + const itemRect = document.querySelector(`#${f.id} g .real`)!.getBoundingClientRect(); + const canvas_area_bounding_info = canvasDom!.getBoundingClientRect(); + const new_left = (itemRect?.left - canvas_area_bounding_info?.left) / scale; + const new_top = (itemRect?.top - canvas_area_bounding_info?.top) / scale; + + // 处理起点绑定 + if (f.props.bind_anchors.val.start) { + // 根据id和类型找到锚点坐标 + const find_item = temp_done_json.find((m) => m.id === f.props.bind_anchors.val.start.id); + if (find_item) { + const b_info = find_item.id === move_binfo?.id ? move_binfo : find_item.binfo; + // 四个角原始坐标 + const { topLeft, topRight, bottomLeft, bottomRight } = getRectCoordinate(b_info); + // 四条边中点坐标 + const { topCenter, bottomCenter, leftCenter, rightCenter } = getRectCenterCoordinate( + topLeft, + topRight, + bottomLeft, + bottomRight + ); + // 旋转中心 + const centerX = topCenter.x; + const centerY = leftCenter.y; + + // 旋转角度(弧度) + const angleRad = (Math.PI / 180) * find_item.binfo.angle; + + if (f.props.bind_anchors.val.start.type === 'tc') { + const new_tc = rotatePoint(topCenter.x, topCenter.y, centerX, centerY, angleRad); + f.props.point_position.val[0] = { + x: new_tc.x - f.binfo.left, + y: new_tc.y - f.binfo.top + }; + } else if (f.props.bind_anchors.val.start.type === 'bc') { + const new_bc = rotatePoint(bottomCenter.x, bottomCenter.y, centerX, centerY, angleRad); + f.props.point_position.val[0] = { + x: new_bc.x - f.binfo.left, + y: new_bc.y - f.binfo.top + }; + } else if (f.props.bind_anchors.val.start.type === 'lc') { + const new_lc = rotatePoint(leftCenter.x, leftCenter.y, centerX, centerY, angleRad); + f.props.point_position.val[0] = { + x: new_lc.x - f.binfo.left, + y: new_lc.y - f.binfo.top + }; + } else if (f.props.bind_anchors.val.start.type === 'rc') { + const new_rc = rotatePoint(rightCenter.x, rightCenter.y, centerX, centerY, angleRad); + f.props.point_position.val[0] = { + x: new_rc.x - f.binfo.left, + y: new_rc.y - f.binfo.top + }; + } + const move_x = new_left - f.binfo.left; + const move_y = new_top - f.binfo.top; + f.binfo = { + ...f.binfo, + left: new_left, + top: new_top, + width: itemRect?.width / scale, + height: itemRect?.height / scale + }; + f.props.point_position = { + ...f.props.point_position, + val: f.props.point_position.val.map((m: { x: number; y: number }) => { + return { + x: m.x - move_x, + y: m.y - move_y + }; + }) + }; + } else { + f.props.bind_anchors.val.start = null; + } + } + // 处理终点绑定 + if (f.props.bind_anchors.val.end) { + // 根据id和类型找到锚点坐标 + const find_item = temp_done_json.find((m) => m.id === f.props.bind_anchors.val.end.id); + if (find_item) { + const b_info = find_item.id === move_binfo?.id ? move_binfo : find_item.binfo; + // 四个角原始坐标 + const { topLeft, topRight, bottomLeft, bottomRight } = getRectCoordinate(b_info); + // 四条边中点坐标 + const { topCenter, bottomCenter, leftCenter, rightCenter } = getRectCenterCoordinate( + topLeft, + topRight, + bottomLeft, + bottomRight + ); + // 旋转中心 + const centerX = topCenter.x; + const centerY = leftCenter.y; + + // 旋转角度(弧度) + const angleRad = (Math.PI / 180) * find_item.binfo.angle; + + if (f.props.bind_anchors.val.end.type === 'tc') { + const new_tc = rotatePoint(topCenter.x, topCenter.y, centerX, centerY, angleRad); + f.props.point_position.val[f.props.point_position.val.length - 1] = { + x: new_tc.x - f.binfo.left, + y: new_tc.y - f.binfo.top + }; + } else if (f.props.bind_anchors.val.end.type === 'bc') { + const new_bc = rotatePoint(bottomCenter.x, bottomCenter.y, centerX, centerY, angleRad); + f.props.point_position.val[f.props.point_position.val.length - 1] = { + x: new_bc.x - f.binfo.left, + y: new_bc.y - f.binfo.top + }; + } else if (f.props.bind_anchors.val.end.type === 'lc') { + const new_lc = rotatePoint(leftCenter.x, leftCenter.y, centerX, centerY, angleRad); + f.props.point_position.val[f.props.point_position.val.length - 1] = { + x: new_lc.x - f.binfo.left, + y: new_lc.y - f.binfo.top + }; + } else if (f.props.bind_anchors.val.end.type === 'rc') { + const new_rc = rotatePoint(rightCenter.x, rightCenter.y, centerX, centerY, angleRad); + f.props.point_position.val[f.props.point_position.val.length - 1] = { + x: new_rc.x - f.binfo.left, + y: new_rc.y - f.binfo.top + }; + } + const move_x = new_left - f.binfo.left; + const move_y = new_top - f.binfo.top; + f.binfo = { + ...f.binfo, + left: new_left, + top: new_top, + width: itemRect?.width / scale, + height: itemRect?.height / scale + }; + f.props.point_position = { + ...f.props.point_position, + val: f.props.point_position.val.map((m: { x: number; y: number }) => { + return { + x: m.x - move_x, + y: m.y - move_y + }; + }) + }; + } else { + f.props.bind_anchors.val.end = null; + } + } + }); + // 直接写在这里会损失一部分性能 也可以注释掉下面的 然后根据需求在useUpdateSysLine之后手动调用useUpdateSysLineRect + nextTick(() => { + useUpdateSysLineRect(sys_lines, canvasDom, scale); + }); +}; diff --git a/src/components/mt-edit/composables/thumbnail.ts b/src/components/mt-edit/composables/thumbnail.ts new file mode 100644 index 0000000..5c753db --- /dev/null +++ b/src/components/mt-edit/composables/thumbnail.ts @@ -0,0 +1,72 @@ +import { Canvg } from 'canvg'; +import html2canvas from 'html2canvas'; +import { ElMessage } from 'element-plus'; +export const useGenThumbnail = async (canvas_id: string = 'mtCanvasArea') => { + const el = document.querySelector(`#${canvas_id}`); + if (!el) { + ElMessage.error('没有找到canvas元素,请检查!'); + return; + } + //记录要移除的svg元素 + const shouldRemoveSvgNodes = []; + // 获取到所有的SVG 得到一个数组 目前只有自定义连线需要特殊处理 别的元素直接使用html2canvas就可以 + const svgElements: NodeListOf = document.body.querySelectorAll( + `#${canvas_id} .mt-line-render` + ); + // 遍历这个数组 + for (const item of svgElements) { + //去除空白字符 + const svg = item.outerHTML.trim(); + // 创建一个 canvas DOM元素 + const canvas = document.createElement('canvas'); + //设置 canvas 元素的宽高 + canvas.width = item.getBoundingClientRect().width; + canvas.height = item.getBoundingClientRect().height; + const ctx = canvas.getContext('2d'); + // 将 SVG转化 成 canvas + const v = Canvg.fromString(ctx!, svg); + await v.render(); + + //设置生成 canvas 元素的坐标 保证与原SVG坐标保持一致 + if (item.style.position) { + canvas.style.position += item.style.position; + canvas.style.left += item.style.left; + canvas.style.top += item.style.top; + } + + //添加到需要截图的DOM节点中 + item.parentNode!.appendChild(canvas); + // 删除这个元素 + shouldRemoveSvgNodes.push(canvas); + } + + const width = el.offsetWidth; + const height = el.offsetHeight; + const canvas = await html2canvas(el, { + useCORS: true, + scale: 2, + width, + height, + allowTaint: true, + windowHeight: height, + logging: false, + ignoreElements: (element) => { + if (element.classList.contains('mt-line-render')) { + return true; + } + return false; + } + }); + const img_link = document.createElement('a'); + img_link.href = canvas.toDataURL('image/png'); // 转换后的图片地址 + img_link.download = Date.now().toString(); + document.body.appendChild(img_link); + // 触发点击 + img_link.click(); + // 然后移除 + document.body.removeChild(img_link); + // 移除需要移除掉的svg节点 + shouldRemoveSvgNodes.forEach((item) => { + item.remove(); + }); +}; diff --git a/src/components/mt-edit/index.ts b/src/components/mt-edit/index.ts new file mode 100644 index 0000000..4565091 --- /dev/null +++ b/src/components/mt-edit/index.ts @@ -0,0 +1,3 @@ +import MtEdit from './index.vue'; + +export default MtEdit; diff --git a/src/components/mt-edit/index.vue b/src/components/mt-edit/index.vue new file mode 100644 index 0000000..7bca6d6 --- /dev/null +++ b/src/components/mt-edit/index.vue @@ -0,0 +1,265 @@ + + + diff --git a/src/components/mt-edit/store/cache.ts b/src/components/mt-edit/store/cache.ts new file mode 100644 index 0000000..ffae428 --- /dev/null +++ b/src/components/mt-edit/store/cache.ts @@ -0,0 +1,33 @@ +import { nextTick, reactive } from 'vue'; +import type { CacheBoundingBox, ICache, IDoneJson } from './types'; +import { objectDeepClone } from '../utils'; + +export const cacheStore: ICache = reactive({ + boundingBox: [], + setBoundingBox: (val: CacheBoundingBox[]) => { + cacheStore.boundingBox = val; + }, + adsorbPoint: [], + setAdsorbPoint(val) { + cacheStore.adsorbPoint = val; + }, + copy: [], + setCopy(val) { + cacheStore.copy = val; + }, + history: [[]], + historyIndex: 0, + addHistory(val: IDoneJson[]) { + nextTick(() => { + if (cacheStore.historyIndex + 1 < cacheStore.history.length) { + cacheStore.history.splice(cacheStore.historyIndex + 1); + } + cacheStore.history.push(objectDeepClone(val)); + cacheStore.historyIndex = cacheStore.history.length - 1; + if (cacheStore.history.length > 20) { + cacheStore.history.shift(); + cacheStore.historyIndex = cacheStore.history.length - 1; + } + }); + } +}); diff --git a/src/components/mt-edit/store/config.ts b/src/components/mt-edit/store/config.ts new file mode 100644 index 0000000..4d89488 --- /dev/null +++ b/src/components/mt-edit/store/config.ts @@ -0,0 +1,415 @@ +import { reactive } from 'vue'; +import type { IConfig, ILeftAsideConfigItem } from './types'; +const sysComponentItems: ILeftAsideConfigItem[] = [ + { + id: 'sys-line', + title: '自由连线', + type: 'sys-line', + thumbnail: `data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxZW0iIGhlaWdodD0iMWVtIiB2aWV3Qm94PSIwIDAgMjQgMjQiPjxwYXRoIGZpbGw9Im5vbmUiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS13aWR0aD0iMiIgZD0iTTQgMThhMiAyIDAgMSAwIDQgMGEyIDIgMCAxIDAtNCAwTTE2IDZhMiAyIDAgMSAwIDQgMGEyIDIgMCAxIDAtNCAwTTcuNSAxNi41bDktOSIvPjwvc3ZnPg==`, + props: { + stroke: { + title: '线条颜色', + type: 'color', + val: '#ff0000' + }, + 'stroke-width': { + title: '线条宽度', + type: 'number', + val: 2 + }, + 'marker-start': { + title: '起点箭头', + type: 'switch', + val: false + }, + 'marker-end': { + title: '终点箭头', + type: 'switch', + val: true + }, + point_position: { + title: '点坐标', + type: 'jsonEdit', + val: [ + { + x: 0, + y: 0 + }, + { + x: 100, + y: 0 + } + ], + disabled: true + }, + ani_type: { + title: '动画类型', + type: 'select', + val: 'none', + options: [ + { + label: '无', + value: 'none' + }, + { + label: '电流', + value: 'electricity' + }, + { + label: '轨迹', + value: 'track' + }, + { + label: '水珠', + value: 'waterdrop' + } + ] + }, + ani_dur: { title: '持续时间', type: 'number', val: 20 }, + ani_color: { title: '动画颜色', type: 'color', val: '#0a7ae2' }, + ani_reverse: { title: '动画反转', type: 'switch', val: false }, + ani_play: { title: '动画播放', type: 'switch', val: true }, + bind_anchors: { + title: '锚点绑定', + type: 'jsonEdit', + val: { + start: null, + end: null + }, + disabled: true + } + }, + common_animations: { + val: '', + delay: 'delay-0s', + speed: 'slow', + repeat: 'infinite' + } + }, + { + id: 'sys-line-vertical', + title: '自由连线-竖线', + type: 'sys-line', + thumbnail: `data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxZW0iIGhlaWdodD0iMWVtIiB2aWV3Qm94PSIwIDAgMjQgMjQiPjxwYXRoIGZpbGw9Im5vbmUiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS13aWR0aD0iMiIgZD0iTTQgMThhMiAyIDAgMSAwIDQgMGEyIDIgMCAxIDAtNCAwTTE2IDZhMiAyIDAgMSAwIDQgMGEyIDIgMCAxIDAtNCAwTTcuNSAxNi41bDktOSIvPjwvc3ZnPg==`, + props: { + stroke: { + title: '线条颜色', + type: 'color', + val: '#ff0000' + }, + 'stroke-width': { + title: '线条宽度', + type: 'number', + val: 2 + }, + 'marker-start': { + title: '起点箭头', + type: 'switch', + val: false + }, + 'marker-end': { + title: '终点箭头', + type: 'switch', + val: true + }, + point_position: { + title: '点坐标', + type: 'jsonEdit', + val: [ + { + x: 0, + y: 0 + }, + { + x: 0, + y: 100 + } + ], + disabled: true + }, + ani_type: { + title: '动画类型', + type: 'select', + val: 'none', + options: [ + { + label: '无', + value: 'none' + }, + { + label: '电流', + value: 'electricity' + }, + { + label: '轨迹', + value: 'track' + }, + { + label: '水珠', + value: 'waterdrop' + } + ] + }, + ani_dur: { title: '持续时间', type: 'number', val: 20 }, + ani_color: { title: '动画颜色', type: 'color', val: '#0a7ae2' }, + ani_reverse: { title: '动画反转', type: 'switch', val: false }, + ani_play: { title: '动画播放', type: 'switch', val: true }, + bind_anchors: { + title: '锚点绑定', + type: 'jsonEdit', + val: { + start: null, + end: null + }, + disabled: true + } + }, + common_animations: { + val: '', + delay: 'delay-0s', + speed: 'slow', + repeat: 'infinite' + } + }, + { + id: 'text-vue', + title: '文字', + type: 'vue', + thumbnail: `data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxZW0iIGhlaWdodD0iMWVtIiB2aWV3Qm94PSIwIDAgNTEyIDUxMiI+PHBhdGggZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIzMiIgZD0ibTMyIDQxNS41bDEyMC0zMjBsMTIwIDMyMG0tNDItMTEySDc0bTI1Mi02NGMxMi4xOS0yOC42OSA0MS00OCA3NC00OGgwYzQ2IDAgODAgMzIgODAgODB2MTQ0Ii8+PHBhdGggZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIzMiIgZD0iTTMyMCAzNTguNWMwIDM2IDI2Ljg2IDU4IDYwIDU4YzU0IDAgMTAwLTI3IDEwMC0xMDZ2LTE1Yy0yMCAwLTU4IDEtOTIgNWMtMzIuNzcgMy44Ni02OCAxOS02OCA1OCIvPjwvc3ZnPg==`, + props: { + text: { + title: '文字内容', + type: 'input', + val: '文字' + }, + fontFamily: { + title: '字体', + type: 'select', + val: '黑体', + options: [ + { + value: '黑体', + label: '黑体' + }, + { + value: '宋体', + label: '宋体' + } + ] + }, + fontSize: { + title: '文字大小', + type: 'number', + val: 18 + }, + fill: { + title: '文字颜色', + type: 'color', + val: '#FFF700' + }, + vertical: { + title: '竖排展示', + type: 'switch', + val: false + } + }, + common_animations: { + val: '', + delay: 'delay-0s', + speed: 'slow', + repeat: 'infinite' + } + }, + { + id: 'card-vue', + title: '卡片', + type: 'vue', + thumbnail: `data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxZW0iIGhlaWdodD0iMWVtIiB2aWV3Qm94PSIwIDAgMTYgMTYiPjxnIGZpbGw9ImN1cnJlbnRDb2xvciI+PHBhdGggZD0iTTE0LjUgM2EuNS41IDAgMCAxIC41LjV2OWEuNS41IDAgMCAxLS41LjVoLTEzYS41LjUgMCAwIDEtLjUtLjV2LTlhLjUuNSAwIDAgMSAuNS0uNXptLTEzLTFBMS41IDEuNSAwIDAgMCAwIDMuNXY5QTEuNSAxLjUgMCAwIDAgMS41IDE0aDEzYTEuNSAxLjUgMCAwIDAgMS41LTEuNXYtOUExLjUgMS41IDAgMCAwIDE0LjUgMnoiLz48cGF0aCBkPSJNMyA1LjVhLjUuNSAwIDAgMSAuNS0uNWg5YS41LjUgMCAwIDEgMCAxaC05YS41LjUgMCAwIDEtLjUtLjVNMyA4YS41LjUgMCAwIDEgLjUtLjVoOWEuNS41IDAgMCAxIDAgMWgtOUEuNS41IDAgMCAxIDMgOG0wIDIuNWEuNS41IDAgMCAxIC41LS41aDZhLjUuNSAwIDAgMSAwIDFoLTZhLjUuNSAwIDAgMS0uNS0uNSIvPjwvZz48L3N2Zz4=`, + props: { + shadow: { + title: '阴影显示时机', + type: 'select', + val: 'always', + options: [ + { label: '总是显示', value: 'always' }, + { label: '鼠标悬浮', value: 'hover' }, + { label: '不显示', value: 'never' } + ] + }, + backGroundColor: { + title: '背景颜色', + type: 'color', + val: '#ffffff' + }, + boxShadow: { + title: '阴影颜色', + type: 'color', + val: '#ffffff' + } + }, + common_animations: { + val: '', + delay: 'delay-0s', + speed: 'slow', + repeat: 'infinite' + } + }, + { + id: 'now-time-vue', + title: '当前时间', + type: 'vue', + thumbnail: `data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxZW0iIGhlaWdodD0iMWVtIiB2aWV3Qm94PSIwIDAgNTEyIDUxMiI+PHBhdGggZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLXdpZHRoPSIzMiIgZD0iTTI1NiA2NEMxNTAgNjQgNjQgMTUwIDY0IDI1NnM4NiAxOTIgMTkyIDE5MnMxOTItODYgMTkyLTE5MlMzNjIgNjQgMjU2IDY0WiIvPjxwYXRoIGZpbGw9Im5vbmUiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS13aWR0aD0iMzIiIGQ9Ik0yNTYgMTI4djE0NGg5NiIvPjwvc3ZnPg==`, + props: { + fontColor: { + title: '文字颜色', + type: 'color', + val: '#000000' + }, + dateSize: { + title: '日期文字大小', + type: 'number', + val: 12 + }, + weekSize: { + title: '星期文字大小', + type: 'number', + val: 12 + }, + timeSize: { + title: '时间文字大小', + type: 'number', + val: 24 + } + }, + common_animations: { + val: '', + delay: 'delay-0s', + speed: 'slow', + repeat: 'infinite' + } + }, + { + id: 'kv-vue', + title: '键值对', + type: 'vue', + thumbnail: `data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxZW0iIGhlaWdodD0iMWVtIiB2aWV3Qm94PSIwIDAgMjAgMjAiPjxwYXRoIGZpbGw9ImN1cnJlbnRDb2xvciIgZD0iTTMgNmEzIDMgMCAwIDEgMy0zaDhhMyAzIDAgMCAxIDMgM3Y4YTMgMyAwIDAgMS0zIDNINmEzIDMgMCAwIDEtMy0zem0zLTJhMiAyIDAgMCAwLTIgMnYzLjVoNS41VjR6bTMuNSA2LjVINFYxNGEyIDIgMCAwIDAgMiAyaDMuNXptMSAwVjE2SDE0YTIgMiAwIDAgMCAyLTJ2LTMuNXptNS41LTFWNmEyIDIgMCAwIDAtMi0yaC0zLjV2NS41eiIvPjwvc3ZnPg==`, + props: { + border: { + title: '边框', + type: 'switch', + val: true + }, + fontFamily: { + title: '字体', + type: 'select', + val: '黑体', + options: [ + { + value: '黑体', + label: '黑体' + }, + { + value: '宋体', + label: '宋体' + } + ] + }, + fontSize: { + title: '文字大小', + type: 'number', + val: 18 + }, + label: { + title: '键名', + type: 'input', + val: '键名' + }, + labelWidth: { + title: '键名宽度', + type: 'number', + val: 50 + }, + value: { + title: '键值', + type: 'input', + val: '键值' + }, + valueWidth: { + title: '键值宽度', + type: 'number', + val: 50 + }, + color: { + title: '文字颜色', + type: 'color', + val: '#FFF700' + }, + borderColor: { + title: '边框颜色', + type: 'color', + val: '#000000' + } + }, + common_animations: { + val: '', + delay: 'delay-0s', + speed: 'slow', + repeat: 'infinite' + } + }, + { + id: 'sys-button-vue', + title: '按钮', + type: 'vue', + thumbnail: `data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgdmlld0JveD0iMCAwIDIwIDIwIj48cGF0aCBmaWxsPSJjdXJyZW50Q29sb3IiIGQ9Ik0yIDhhMyAzIDAgMCAxIDMtM2gxMGEzIDMgMCAwIDEgMyAzdjNhMyAzIDAgMCAxLTMgM0g1YTMgMyAwIDAgMS0zLTNWOFptNyAxLjVhLjUuNSAwIDAgMCAuNS41SDE0YS41LjUgMCAwIDAgMC0xSDkuNWEuNS41IDAgMCAwLS41LjVabS0xIDBhMS41IDEuNSAwIDEgMC0zIDBhMS41IDEuNSAwIDAgMCAzIDBaIi8+PC9zdmc+`, + props: { + text: { + title: '按钮文本', + type: 'input', + val: '按钮文本' + }, + type: { + title: '按钮类型', + type: 'select', + val: '', + options: [ + { + value: '', + label: '默认' + }, + { + value: 'primary', + label: '主要' + }, + { + value: 'success', + label: '成功' + }, + { + value: 'warning', + label: '警告' + }, + { + value: 'danger', + label: '危险' + } + ] + }, + round: { + title: '圆角', + type: 'switch', + val: false + } + }, + common_animations: { + val: '', + delay: 'delay-0s', + speed: 'slow', + repeat: 'infinite' + } + } +]; +export const configStore: IConfig = reactive({ + sysComponent: sysComponentItems, + lineRenderOffset: 10 +}); diff --git a/src/components/mt-edit/store/context-menu.ts b/src/components/mt-edit/store/context-menu.ts new file mode 100644 index 0000000..9139ed3 --- /dev/null +++ b/src/components/mt-edit/store/context-menu.ts @@ -0,0 +1,73 @@ +import { reactive } from 'vue'; +import type { ContextMenuInfoType, IContextMenu } from './types'; + +export const contextMenuStore: IContextMenu = reactive({ + menuInfo: { + display: false, + left: 0, + top: 0, + info: { + selectAll: { + title: '全选', + hot_key: 'Ctrl + A', + enable: false + }, + copy: { + title: '复制', + hot_key: 'Ctrl + C', + enable: false + }, + paste: { + title: '粘贴', + hot_key: 'Ctrl + V', + enable: false + }, + delete: { + title: '删除', + hot_key: 'Delete', + enable: false + }, + group: { + title: '组合', + hot_key: 'Ctrl + G', + enable: false + }, + ungroup: { + title: '取消组合', + hot_key: 'Ctrl + U', + enable: false + }, + moveTop: { + title: '置顶', + hot_key: 'Ctrl + Right', + enable: false + }, + moveUp: { + title: '上移', + hot_key: 'Ctrl + Up', + enable: false + }, + moveDown: { + title: '下移', + hot_key: 'Ctrl + Down', + enable: false + }, + moveBottom: { + title: '置底', + hot_key: 'Ctrl + Left', + enable: false + } + } + }, + setMenuInfo: (val: IContextMenu['menuInfo']) => { + contextMenuStore.menuInfo = val; + }, + setDisplayItem: (val: ContextMenuInfoType[]) => { + for (const key in contextMenuStore.menuInfo.info) { + contextMenuStore.menuInfo.info[key as ContextMenuInfoType].enable = false; + } + val.forEach((f) => { + contextMenuStore.menuInfo.info[f].enable = true; + }); + } +}); diff --git a/src/components/mt-edit/store/global.ts b/src/components/mt-edit/store/global.ts new file mode 100644 index 0000000..b6208e4 --- /dev/null +++ b/src/components/mt-edit/store/global.ts @@ -0,0 +1,112 @@ +import { reactive } from 'vue'; +import type { + GlobalStoreIntention, + IDoneJson, + IGlobalStore, + IGlobalStoreCreateItemInfo, + IRealTimeData +} from './types'; +export const globalStore: IGlobalStore = reactive({ + intention: 'none', + create_item_info: null, + selected_items_id: [], + done_json: [], + canvasCfg: { + width: 1920, + height: 1080, + scale: 1, + color: '', + img: '', + guide: true, + adsorp: true, + adsorp_diff: 5, + transform_origin: { + x: 0, + y: 0 + }, + drag_offset: { + x: 0, + y: 0 + } + }, + gridCfg: { + enabled: true, + align: true, + size: 10 + }, + guideCfg: { + x: { + display: false, + top: 0 + }, + y: { + display: false, + left: 0 + } + }, + lock: false, + real_time_data: { + show: false, + text: '' + }, + adsorp_diff: { + x: 0, + y: 0 + }, + setIntention: (val: GlobalStoreIntention) => { + globalStore.intention = val; + }, + setCreateItemInfo: (val: IGlobalStoreCreateItemInfo | null) => { + globalStore.create_item_info = val; + }, + setGlobalStoreDoneJson: (val: IDoneJson[]) => { + globalStore.done_json = val; + }, + //取消所有组件选中 + cancelAllSelect: () => { + const done_json_temp = [...globalStore.done_json].map((m) => { + if (m.active) { + m.active = false; + } + return m; + }); + globalStore.setGlobalStoreDoneJson(done_json_temp); + globalStore.selected_items_id = []; + }, + //刷新选中的id + refreshSelectedItemsId: () => { + globalStore.selected_items_id = globalStore.done_json.filter((m) => m.active).map((m) => m.id); + }, + //删除选中的组件 + deleteSelectedItems: () => { + const done_json_temp = [...globalStore.done_json].filter( + (m) => !globalStore.selected_items_id.includes(m.id) + ); + globalStore.setGlobalStoreDoneJson(done_json_temp); + globalStore.selected_items_id = []; + }, + // 设置单个选中 + setSingleSelect: (id: string) => { + globalStore.done_json.forEach((m) => { + if (m.id === id) { + m.active = true; + } else { + m.active = false; + } + }); + globalStore.selected_items_id = [id]; + }, + setSelectItems: (ids: string[]) => { + globalStore.done_json.forEach((m) => { + if (ids.includes(m.id)) { + m.active = true; + } else { + m.active = false; + } + }); + globalStore.selected_items_id = ids; + }, + setRealTimeData: (val: IRealTimeData) => { + globalStore.real_time_data = val; + } +}); diff --git a/src/components/mt-edit/store/left-aside.ts b/src/components/mt-edit/store/left-aside.ts new file mode 100644 index 0000000..db35943 --- /dev/null +++ b/src/components/mt-edit/store/left-aside.ts @@ -0,0 +1,52 @@ +import { getCurrentInstance, reactive } from 'vue'; +import type { ILeftAside, ILeftAsideConfigItemPublic, ILeftAsideConfigItem } from './types'; +import { ElMessage } from 'element-plus'; +import { svgToSymbol } from '../utils'; +import { configStore } from './config'; + +export const leftAsideStore: ILeftAside = reactive({ + config: new Map([ + ['本地文件', []], + ['系统组件', configStore.sysComponent] + ]), + registerConfig: (title: string, config: ILeftAsideConfigItemPublic[]) => { + if (title == '本地文件' || title == '系统组件') { + ElMessage.info(`title:${title}已被系统占用,请更换名称!`); + return; + } + + if (leftAsideStore.config.has(title)) { + ElMessage.info(`title:${title}已存在,已经将其配置覆盖`); + } + const cfg: ILeftAsideConfigItem[] = config.map((m) => { + if (m.type == 'svg') { + const { symbol_str, width, height } = svgToSymbol(m.svg!, m.id); + return { + ...m, + symbol: { + symbol_id: m.id, + symbol_str, + width, + height + }, + common_animations: { + val: '', + delay: 'delay-0s', + speed: 'slow', + repeat: 'infinite' + } + }; + } + return { + ...m, + common_animations: { + val: '', + delay: 'delay-0s', + speed: 'slow', + repeat: 'infinite' + } + }; + }); + leftAsideStore.config.set(title, cfg); + } +}); diff --git a/src/components/mt-edit/store/types.ts b/src/components/mt-edit/store/types.ts new file mode 100644 index 0000000..0d42610 --- /dev/null +++ b/src/components/mt-edit/store/types.ts @@ -0,0 +1,239 @@ +export type ILeftAsideConfig = Map; +export type ILeftAsideConfigItemPublicPropsType = + | 'input' + | 'color' + | 'select' + | 'switch' + | 'number' + | 'jsonEdit' + | 'textArea'; +// 开放注册配置 +export type ILeftAsideConfigItemPublicProps = Record< + string, + { + title: string; //显示在属性面板的标题 + type: ILeftAsideConfigItemPublicPropsType; //属性的类型决定了修改属性的方式 + val: any; + options?: any; //比如说修改属性的时候用到了下拉框,这里面就可以放下拉框的选项 + disabled?: boolean; //如果禁用了将不会显示到右侧属性面板里,但是仍然可以通过代码修改属性 + } +>; +export type ILeftAsideConfigItemPublicType = 'svg' | 'vue' | 'img' | 'custom-svg'; +export type ILeftAsideConfigItemPrivateType = 'group' | 'sys-line'; +export interface ILeftAsideConfigItemPublic { + id: string; //图形的标识 值必须唯一 + title: string; //要显示的标题,一般用中文表示 + type: ILeftAsideConfigItemPublicType | ILeftAsideConfigItemPrivateType; //图形的类型 + thumbnail: string; //显示到左侧时候的缩略图 + svg?: string; //图形的svg代码 + props: ILeftAsideConfigItemPublicProps; +} +export interface ILeftAsideConfigItemPrivateSymbol { + symbol_id: string; + symbol_str: string; + width: string; + height: string; +} +export interface ICommonAnimations { + val: string; + delay: string; + speed: string; + repeat: string; +} +export interface ILeftAsideConfigItemPrivate { + symbol?: ILeftAsideConfigItemPrivateSymbol; + common_animations: ICommonAnimations; +} +export type ILeftAsideConfigItem = ILeftAsideConfigItemPublic & ILeftAsideConfigItemPrivate; + +export type GlobalStoreIntention = + | 'none' + | 'create' + | 'beginMulSelect' + | 'adsorbStart' + | 'adsorbEnd' + | 'beginDragCanvas' + | 'runDragCanvas' + | 'endDragCanvas' + | 'showContextMenu' + | 'drawSysLineStart'; +export interface IGlobalStoreCreateItemInfo { + config_key: string; //也就是折叠面板的值 + item_id: string; //要创建组件的id +} + +export interface IGlobalStoreCanvasCfg { + width: number; + height: number; + scale: number; + color: string; + img: string; + guide: boolean; //参考线 + adsorp: boolean; //吸附 + adsorp_diff: number; + // 缩放中心 + transform_origin: { + x: number; + y: number; + }; + // 拖动偏移量 + drag_offset: { + x: number; + y: number; + }; +} +export interface IGlobalStoreGridCfg { + enabled: boolean; + align: boolean; + size: number; +} +export type DoneJsonEventListType = 'click' | 'dblclick' | 'mouseover' | 'mouseout'; +export type DoneJsonEventListAction = 'changeAttr' | 'customCode'; +export interface IDoneJsonActionChangeAttr { + id: string; + target_id: string; + target_attr: string | undefined; + target_value: any; +} +export interface IDoneJsonEventList { + id: string; + type: DoneJsonEventListType; // 事件类型 + action: DoneJsonEventListAction; // 事件行为 + change_attr: IDoneJsonActionChangeAttr[]; //属性更改 + custom_code: string; + trigger_rule: { + trigger_id?: string; //触发图形的id + trigger_attr?: string; //触发图形的属性 + operator?: string; //运算符 + value?: any; //期望值 + }; +} +export interface IDoneJson { + id: string; //必须唯一 + title: string; //标题 + type: ILeftAsideConfigItemPublicType | ILeftAsideConfigItemPrivateType; //类型 由配置文件决定 + symbol?: ILeftAsideConfigItemPrivateSymbol; //类型是svg的时候需要用这个将svg转换成symbol + binfo: IDoneJsonBinfo; + props: ILeftAsideConfigItemPublicProps; + resize: boolean; //开启缩放 + rotate: boolean; //开启旋转 + lock: boolean; //锁定 + active: boolean; //激活 + hide: boolean; //隐藏 + common_animations: ICommonAnimations; //通用动画 + use_proportional_scaling?: boolean; //使用等比缩放 + children?: IDoneJson[]; + tag?: string; + thumbnail?: string; + events: IDoneJsonEventList[]; +} +//图形边界信息 +export interface IDoneJsonBinfo { + left: number; + top: number; + width: number; + height: number; + angle: number; +} +export interface CacheBoundingBox { + id: string; + type: ILeftAsideConfigItemPublicType | ILeftAsideConfigItemPrivateType; + left: number; + top: number; + width: number; + height: number; + bottom: number; + right: number; +} +export type AdsorbPointType = 'tc' | 'bc' | 'lc' | 'rc'; +export interface IContextMenuInfo { + title: string; + hot_key: string; + enable: boolean; +} +export type ContextMenuInfoType = + | 'copy' + | 'paste' + | 'delete' + | 'group' + | 'ungroup' + | 'selectAll' + | 'moveTop' + | 'moveUp' + | 'moveDown' + | 'moveBottom'; +export interface IContextMenuDetail { + left: number; + top: number; + info: { + [key in ContextMenuInfoType]: IContextMenuInfo; + }; +} +export interface IRealTimeData { + show: boolean; + text: string; +} +// 全局状态 +export interface IGlobalStore { + intention: GlobalStoreIntention; + create_item_info: IGlobalStoreCreateItemInfo | null; + done_json: IDoneJson[]; + selected_items_id: string[]; + canvasCfg: IGlobalStoreCanvasCfg; + gridCfg: IGlobalStoreGridCfg; + guideCfg: { + x: { + display: boolean; + top: number; + }; + y: { + display: boolean; + left: number; + }; + }; + lock: boolean; + real_time_data: IRealTimeData; + adsorp_diff: { + x: number; + y: number; + }; + setIntention: (val: GlobalStoreIntention) => void; + setCreateItemInfo: (val: IGlobalStoreCreateItemInfo | null) => void; + setGlobalStoreDoneJson: (val: IDoneJson[]) => void; + cancelAllSelect: () => void; + refreshSelectedItemsId: () => void; + deleteSelectedItems: () => void; + setSingleSelect: (id: string) => void; + setSelectItems: (ids: string[]) => void; + setRealTimeData: (val: IRealTimeData) => void; +} +// 左侧配置 +export interface ILeftAside { + config: ILeftAsideConfig; + registerConfig: (title: string, config: ILeftAsideConfigItemPublic[]) => void; +} +// 缓存配置 +export interface ICache { + boundingBox: CacheBoundingBox[]; + setBoundingBox: (val: CacheBoundingBox[]) => void; + adsorbPoint: { type: AdsorbPointType; x: number; y: number; id: string }[]; + setAdsorbPoint: (val: { type: AdsorbPointType; x: number; y: number; id: string }[]) => void; + copy: IDoneJson[]; + setCopy: (val: IDoneJson[]) => void; + history: IDoneJson[][]; + historyIndex: number; + addHistory: (done_json: IDoneJson[]) => void; +} +// 杂项配置 +export interface IConfig { + sysComponent: ILeftAsideConfigItem[]; + lineRenderOffset: number; //因为连线是使用svg进行渲染的,所以需要一个偏移量和div的画布进行重叠 +} +/** + * 右键菜单 + */ +export interface IContextMenu { + menuInfo: IContextMenuDetail; + setMenuInfo: (val: IContextMenuDetail) => void; + setDisplayItem: (val: ContextMenuInfoType[]) => void; +} diff --git a/src/components/mt-edit/utils/index.ts b/src/components/mt-edit/utils/index.ts new file mode 100644 index 0000000..f3afadc --- /dev/null +++ b/src/components/mt-edit/utils/index.ts @@ -0,0 +1,898 @@ +import type { MoveItemBoundingInfo } from '../components/render-core/types'; +import type { + CacheBoundingBox, + IDoneJson, + IDoneJsonBinfo, + ILeftAsideConfigItemPublicProps +} from '../store/types'; +import { useUpdateSysLine } from '@/components/mt-edit/composables/sys-line'; +export const createGroupInfo = ( + selected_items: IDoneJson[], + canvas_dom: HTMLElement, + scale_ratio: number +): IDoneJson => { + //定义组合后的组件信息 + let min_left = Infinity; + let min_top = Infinity; + let max_left = -Infinity; + let max_top = -Infinity; + //获取画布的信息 + const canvas_dom_rect = canvas_dom.getBoundingClientRect(); + selected_items.forEach((item) => { + // 获取旋转后left和top + const itemRect = document.getElementById(item.id!)!.getBoundingClientRect(); + // 最小left + min_left = Math.min(min_left, (itemRect.left - canvas_dom_rect.left) / scale_ratio); + // 最大left + max_left = Math.max(max_left, (itemRect.right - canvas_dom_rect.left) / scale_ratio); + // 最小top + min_top = Math.min(min_top, (itemRect.top - canvas_dom_rect.top) / scale_ratio); + // 最大top + max_top = Math.max(max_top, (itemRect.bottom - canvas_dom_rect.top) / scale_ratio); + }); + //定义组合元素的边界信息 + const group_binfo = { + left: min_left, + top: min_top, + width: max_left - min_left, + height: max_top - min_top, + angle: 0 + }; + // 计算子元素相对父元素的位置 + selected_items.forEach((item) => { + item.binfo.left = item.binfo.left! - min_left; + item.binfo.top = item.binfo.top! - min_top; + item.binfo = { + width: 100 * (item.binfo.width / group_binfo.width), + height: 100 * (item.binfo.height / group_binfo.height), + left: 100 * (item.binfo.left / group_binfo.width), + top: 100 * (item.binfo.top / group_binfo.height), + angle: item.binfo.angle || 0 + }; + item.active = false; + }); + + // 组合组件信息 + return { + id: 'group-' + randomString(), + title: '组合', + type: 'group', + binfo: group_binfo, + resize: true, + rotate: true, + lock: false, + active: true, + hide: false, + use_proportional_scaling: true, + props: {}, + common_animations: { + val: '', + delay: 'delay-0s', + speed: 'slow', + repeat: 'infinite' + }, + children: [...selected_items], + events: [], + tag: 'group' + }; +}; +/** + * 取消组合 + * @param elements 元素列表 + * @param editorRect 画布react信息 + * @returns 拆分后的列表 + */ +export const cancelGroup = ( + selected_item: IDoneJson, + canvas_dom: HTMLElement, + scale_ratio: number, + grid_align_size: number +) => { + //获取画布的信息 + const canvas_dom_rect = canvas_dom.getBoundingClientRect(); + // 获取组合元素的子元素列表 + const split_items = selected_item.children!.map((item) => { + // 子组件相对于浏览器视口位置大小 + const itemRect = document.getElementById(item.id!)!.getBoundingClientRect(); + // 获取元素的中心点坐标 + const center = { + x: itemRect.left - canvas_dom_rect.left + itemRect.width / 2, + y: itemRect.top - canvas_dom_rect.top + itemRect.height / 2 + }; + // 拆分后的宽高 + const width = alignToGrid( + selected_item.binfo.width * (item.binfo.width / 100), + grid_align_size + ); + const height = alignToGrid( + selected_item.binfo.height * (item.binfo.height / 100), + grid_align_size + ); + // 根据拆分后的宽高计算边界信息 + const binfo = { + width, + height, + left: center.x / scale_ratio - width / 2, + top: center.y / scale_ratio - height / 2, + angle: (item.binfo.angle || 0) + (selected_item.binfo.angle || 0) + }; + //让拆分后的图形处于选中状态 + return { + ...item, + active: true, + binfo + }; + }); + return split_items; +}; +export const svgToSymbol = (svgStr: string, id: string) => { + const svgDocument = new DOMParser().parseFromString(svgStr, 'image/svg+xml').children[0]; + let width = '0'; + let height = '0'; + const viewBox = svgDocument.getAttribute('viewBox'); + const symbol = document.createElementNS('http://www.w3.org/2000/svg', 'symbol'); + if (viewBox) { + const [, , w, h] = viewBox.split(' '); + symbol.setAttributeNS(null, 'viewBox', viewBox); + width = w; + height = h; + } else { + width = svgDocument.getAttribute('width') || '0'; + height = svgDocument.getAttribute('height') || '0'; + symbol.setAttributeNS(null, 'viewBox', '0 0 ' + width + ' ' + height); + } + symbol.setAttributeNS(null, 'id', id); + symbol.innerHTML = svgDocument.innerHTML + .replaceAll('stroke:currentColor', '') + .replaceAll('stroke: currentColor', '') + .replaceAll('stroke="currentColor"', ''); + return { symbol_str: symbol.outerHTML, width, height }; +}; +export const symbolGenSvg = ( + symbol_id: string, + symbol_str: string, + width: string, + height: string, + props_str: string +) => { + return ` + ${symbol_str} + + +`; +}; +export const svgToImgSrc = (svgStr: string) => { + return 'data:image/svg+xml;utf8,' + encodeURIComponent(svgStr); +}; +/** + * 生成dom可用的属性字符串 + * @param props + * @returns + */ +export const genDomPropstr = (props: ILeftAsideConfigItemPublicProps) => { + let res = ''; + for (const key in props) { + res += ` ${key}="${props[key].val}"`; + } + return res; +}; +/** + * 生成随机字符串 + * @param len 生成个数 + */ +export const randomString = (len?: number) => { + len = len || 10; + const str = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; + const maxPos = str.length; + let random_str = ''; + for (let i = 0; i < len; i++) { + random_str += str.charAt(Math.floor(Math.random() * maxPos)); + } + return random_str; +}; +function isTouchEvent(val: unknown): val is TouchEvent { + const typeStr = Object.prototype.toString.call(val); + return typeStr.substring(8, typeStr.length - 1) === 'TouchEvent'; +} +/** + * 获取当前点击坐标 根据pc端和移动端获取 + * @param e + * @returns + */ +export function getRealityXY( + e: DragEvent | TouchEvent | MouseEvent, + canvas_dom_rect: DOMRect | undefined +) { + let realityX = 0, + realityY = 0; + if (isTouchEvent(e)) { + const touch = e.targetTouches[0]; + realityX = canvas_dom_rect ? touch.pageX - canvas_dom_rect.x : 0; + realityY = canvas_dom_rect ? touch.pageY - canvas_dom_rect.y : 0; + } else { + realityX = canvas_dom_rect ? e.clientX - canvas_dom_rect.x : e.clientX; + realityY = canvas_dom_rect ? e.clientY - canvas_dom_rect.y : e.clientY; + } + + return { realityX, realityY }; +} +export const blobToBase64 = (file: Blob) => { + return new Promise(function (resolve, reject) { + const reader = new FileReader(); + let img_src: string | ArrayBuffer = ''; + reader.readAsDataURL(file); + reader.onload = function () { + img_src = reader.result ?? ''; + }; + reader.onerror = function (error) { + reject(error); + }; + reader.onloadend = function () { + resolve(img_src); + }; + }); +}; +/** + * 根据坐标对齐到网格 + * @param position 当前坐标 + * @param grid 网格大小 + * @returns 对应网格的坐标 + */ +export const alignToGrid = (position: number, grid = 1) => { + const integerPart = Math.floor(position / grid); + const fractionalPart = position % grid; + + if (fractionalPart >= grid / 2) { + return (integerPart + 1) * grid; + } else { + return integerPart * grid; + } +}; +/** + * json对象深拷贝 + * @param object + * @param default_val + * @returns + */ +export const objectDeepClone = (object: object, default_val: any = {}) => { + if (!object) { + return default_val as T; + } + return JSON.parse(JSON.stringify(object)) as T; +}; +export const prosToVBind = (item: ILeftAsideConfigItemPublicProps) => { + let temp = {}; + for (const key in item) { + temp = { ...temp, ...{ [key]: item[key].val } }; + } + return temp; +}; +/** + * 计算y轴参考线属性和需要吸附的偏移距离 + * @param cacheStore_boundingBox + * @param adsorp_diff + * @param move_item_bounding_info + */ +export const calculateGuideY = ( + cacheStore_boundingBox: CacheBoundingBox[], + adsorp_diff: number, + move_item_bounding_info: MoveItemBoundingInfo[], + canvas_bounding_info: DOMRect, + scale: number +) => { + for (let index = 0; index < move_item_bounding_info.length; index++) { + // 拿到移动时的边界信息 + const { left, right, width } = move_item_bounding_info[index]; + // 左左 左中 左右 + const ll = cacheStore_boundingBox.find((f) => Math.abs(f.left - left) < adsorp_diff); + const lc = cacheStore_boundingBox.find( + (f) => Math.abs(f.left - (left + width / 2)) < adsorp_diff + ); + const lr = cacheStore_boundingBox.find((f) => Math.abs(f.left - right) < adsorp_diff); + // 中左 中中 中右 + const cl = cacheStore_boundingBox.find( + (f) => Math.abs(f.left + f.width / 2 - left) < adsorp_diff + ); + const cc = cacheStore_boundingBox.find( + (f) => Math.abs(f.left + f.width / 2 - (left + width / 2)) < adsorp_diff + ); + const cr = cacheStore_boundingBox.find( + (f) => Math.abs(f.left + f.width / 2 - right) < adsorp_diff + ); + // 右左 右中 右右 + const rr = cacheStore_boundingBox.find((f) => Math.abs(f.right - right) < adsorp_diff); + const rc = cacheStore_boundingBox.find( + (f) => Math.abs(f.right - (left + width / 2)) < adsorp_diff + ); + const rl = cacheStore_boundingBox.find((f) => Math.abs(f.right - left) < adsorp_diff); + if (ll) { + return { + y_info: { + display: true, + left: (ll.left - canvas_bounding_info.left) / scale + }, + move_x: ll.left - left + }; + } else if (lc) { + return { + y_info: { + display: true, + left: (lc.left - canvas_bounding_info.left) / scale + }, + move_x: lc.left - (left + width / 2) + }; + } else if (lr) { + return { + y_info: { + display: true, + left: (lr.left - canvas_bounding_info.left) / scale + }, + move_x: lr.left - right + }; + } else if (cl) { + return { + y_info: { + display: true, + left: (cl.left + cl.width / 2 - canvas_bounding_info.left) / scale + }, + move_x: cl.left + cl.width / 2 - left + }; + } else if (cc) { + return { + y_info: { + display: true, + left: (cc.left + cc.width / 2 - canvas_bounding_info.left) / scale + }, + move_x: cc.left + cc.width / 2 - (left + width / 2) + }; + } else if (cr) { + return { + y_info: { + display: true, + left: (cr.left + cr.width / 2 - canvas_bounding_info.left) / scale + }, + move_x: cr.left + cr.width / 2 - right + }; + } else if (rl) { + return { + y_info: { + display: true, + left: (rl.right - canvas_bounding_info.left) / scale + }, + move_x: rl.right - left + }; + } else if (rc) { + return { + y_info: { + display: true, + left: (rc.right - canvas_bounding_info.left) / scale + }, + move_x: rc.right - (left + width / 2) + }; + } else if (rr) { + return { + y_info: { + display: true, + left: (rr.right - canvas_bounding_info.left) / scale + }, + move_x: rr.right - right + }; + } + } + return { + y_info: { + display: false, + left: 0 + }, + move_x: 0 + }; +}; +/** + * 计算x轴参考线属性和需要吸附的偏移距离 + * @param cacheStore_boundingBox + * @param adsorp_diff + * @param move_item_bounding_info + */ +export const calculateGuideX = ( + cacheStore_boundingBox: CacheBoundingBox[], + adsorp_diff: number, + move_item_bounding_info: MoveItemBoundingInfo[], + canvas_bounding_info: DOMRect, + scale: number +) => { + for (let index = 0; index < move_item_bounding_info.length; index++) { + // 拿到移动时的边界信息 + const { top, bottom, height } = move_item_bounding_info[index]; + // 上上 上中 上下 + const tt = cacheStore_boundingBox.find((f) => Math.abs(f.top - top) < adsorp_diff); + const tc = cacheStore_boundingBox.find( + (f) => Math.abs(f.top - (top + height / 2)) < adsorp_diff + ); + const tb = cacheStore_boundingBox.find((f) => Math.abs(f.top - bottom) < adsorp_diff); + // 中上 中中 中下 + const ct = cacheStore_boundingBox.find( + (f) => Math.abs(f.top + f.height / 2 - top) < adsorp_diff + ); + const cc = cacheStore_boundingBox.find( + (f) => Math.abs(f.top + f.height / 2 - (top + height / 2)) < adsorp_diff + ); + const cb = cacheStore_boundingBox.find( + (f) => Math.abs(f.top + f.height / 2 - bottom) < adsorp_diff + ); + // 下上 下中 下右 + const bt = cacheStore_boundingBox.find((f) => Math.abs(f.bottom - bottom) < adsorp_diff); + const bc = cacheStore_boundingBox.find( + (f) => Math.abs(f.bottom - (top + height / 2)) < adsorp_diff + ); + const br = cacheStore_boundingBox.find((f) => Math.abs(f.bottom - top) < adsorp_diff); + if (tt) { + return { + x_info: { + display: true, + top: (tt.top - canvas_bounding_info.top) / scale + }, + move_y: tt.top - top + }; + } else if (tc) { + return { + x_info: { + display: true, + top: (tc.top - canvas_bounding_info.top) / scale + }, + move_y: tc.top - (top + height / 2) + }; + } else if (tb) { + return { + x_info: { + display: true, + top: (tb.top - canvas_bounding_info.top) / scale + }, + move_y: tb.top - bottom + }; + } else if (ct) { + return { + x_info: { + display: true, + top: (ct.top + ct.height / 2 - canvas_bounding_info.top) / scale + }, + move_y: ct.top + ct.height / 2 - top + }; + } else if (cc) { + return { + x_info: { + display: true, + top: (cc.top + cc.height / 2 - canvas_bounding_info.top) / scale + }, + move_y: cc.top + cc.height / 2 - (top + height / 2) + }; + } else if (cb) { + return { + x_info: { + display: true, + top: (cb.top + cb.height / 2 - canvas_bounding_info.top) / scale + }, + move_y: cb.top + cb.height / 2 - bottom + }; + } else if (br) { + return { + x_info: { + display: true, + top: (br.bottom - canvas_bounding_info.top) / scale + }, + move_y: br.bottom - top + }; + } else if (bc) { + return { + x_info: { + display: true, + top: (bc.bottom - canvas_bounding_info.top) / scale + }, + move_y: bc.bottom - (top + height / 2) + }; + } else if (bt) { + return { + x_info: { + display: true, + top: (bt.bottom - canvas_bounding_info.top) / scale + }, + move_y: bt.bottom - bottom + }; + } + } + return { + x_info: { + display: false, + top: 0 + }, + move_y: 0 + }; +}; +/** + * 坐标数组转换成path路径 + * @param position_arr + * @returns + */ +export const positionArrarToPath = ( + position_arr: { x: number; y: number }[], + offset_x = 0, + offset_y = 0 +) => { + let path_str = ''; + for (let index = 0; index < position_arr.length; index++) { + if (index === 0) { + path_str += `M ${position_arr[index].x + offset_x} ${position_arr[index].y + offset_y}`; + } else { + path_str += ` L ${position_arr[index].x + offset_x} ${position_arr[index].y + offset_y}`; + } + } + return path_str; +}; +/** + * 取两点之间坐标 + * @param x1 + * @param y1 + * @param x2 + * @param y2 + * @returns + */ +export const getCenterXY = (x1: number, y1: number, x2: number, y2: number) => { + return { + x: (x1 + x2) / 2, + y: (y1 + y2) / 2 + }; +}; +/** + * 计算旋转之后的坐标 + * @param x 旋转之前x坐标 + * @param y 旋转之前y坐标 + * @param centerX 旋转中心x坐标 + * @param centerY 旋转中心y坐标 + * @param angleRad 旋转角度 + * @returns 旋转之后的xy坐标 + */ +export const rotatePoint = ( + x: number, + y: number, + centerX: number, + centerY: number, + angleRad: number +) => { + const newX = centerX + (x - centerX) * Math.cos(angleRad) - (y - centerY) * Math.sin(angleRad); + const newY = centerY + (x - centerX) * Math.sin(angleRad) + (y - centerY) * Math.cos(angleRad); + return { x: newX, y: newY }; +}; +// 获取四角坐标 +export const getRectCoordinate = (item: IDoneJsonBinfo) => { + const topLeft = { x: item.left, y: item.top }; + const topRight = { x: item.left + item.width, y: item.top }; + const bottomLeft = { x: item.left, y: item.top + item.height }; + const bottomRight = { + x: item.left + item.width, + y: item.top + item.height + }; + return { + topLeft, + topRight, + bottomLeft, + bottomRight + }; +}; +//获取四条边中点坐标 +export const getRectCenterCoordinate = ( + topLeft: { x: any; y: any }, + topRight: { x: any; y: any }, + bottomLeft: { x: any; y: any }, + bottomRight: { x: any; y: any } +) => { + const topCenter = { + x: (topLeft.x + topRight.x) / 2, + y: (topLeft.y + topRight.y) / 2 + }; + const bottomCenter = { + x: (bottomLeft.x + bottomRight.x) / 2, + y: (bottomLeft.y + bottomRight.y) / 2 + }; + const leftCenter = { + x: (topLeft.x + bottomLeft.x) / 2, + y: (topLeft.y + bottomLeft.y) / 2 + }; + const rightCenter = { + x: (topRight.x + bottomRight.x) / 2, + y: (topRight.y + bottomRight.y) / 2 + }; + return { + topCenter, + bottomCenter, + leftCenter, + rightCenter + }; +}; + +export const handleAlign = ( + type: + | 'left' + | 'horizontally' + | 'right' + | 'top' + | 'vertically' + | 'bottom' + | 'horizontal-distribution' + | 'vertical-distribution', + selected_done_json: IDoneJson[], + canvasDom: HTMLElement, + scale: number, + global_done_json: IDoneJson[] +) => { + switch (type) { + case 'left': { + // 取出最左边的元素 记录最左边的坐标 + const left_x = Math.min( + ...selected_done_json.filter((f) => f.type !== 'sys-line').map((m) => m.binfo.left) + ); + // 将所有元素的坐标都设置成最左边 + selected_done_json + .filter((f) => f.type !== 'sys-line') + .forEach((m) => { + m.binfo.left = left_x; + }); + break; + } + case 'horizontally': { + // 取出第一个元素的中点坐标 将其余元素的中点坐标都设置成这个 + const center_x = + selected_done_json.filter((f) => f.type !== 'sys-line')[0].binfo.left + + selected_done_json[0].binfo.width / 2; + selected_done_json + .filter((f) => f.type !== 'sys-line') + .forEach((m) => { + m.binfo.left = center_x - m.binfo.width / 2; + }); + break; + } + + case 'right': { + // 取出最右边的元素 记录最右边的坐标 + const right_x = Math.max( + ...selected_done_json + .filter((f) => f.type !== 'sys-line') + .map((m) => m.binfo.left + m.binfo.width) + ); + // 将所有元素的坐标都设置成最右边 + selected_done_json + .filter((f) => f.type !== 'sys-line') + .forEach((m) => { + m.binfo.left = right_x - m.binfo.width; + }); + break; + } + + case 'top': { + // 取出最上边的元素 记录最上边的坐标 + const top_y = Math.min( + ...selected_done_json.filter((f) => f.type !== 'sys-line').map((m) => m.binfo.top) + ); + // 将所有元素的坐标都设置成最上边 + selected_done_json + .filter((f) => f.type !== 'sys-line') + .forEach((m) => { + m.binfo.top = top_y; + }); + break; + } + + case 'vertically': { + // 取出第一个元素的中点坐标 将其余元素的中点坐标都设置成这个 + const center_y = + selected_done_json.filter((f) => f.type !== 'sys-line')[0].binfo.top + + selected_done_json[0].binfo.height / 2; + selected_done_json + .filter((f) => f.type !== 'sys-line') + .forEach((m) => { + m.binfo.top = center_y - m.binfo.height / 2; + }); + break; + } + + case 'bottom': { + // 取出最下边的元素 记录最下边的坐标 + const bottom_y = Math.max( + ...selected_done_json + .filter((f) => f.type !== 'sys-line') + .map((m) => m.binfo.top + m.binfo.height) + ); + // 将所有元素的坐标都设置成最下边 + selected_done_json + .filter((f) => f.type !== 'sys-line') + .forEach((m) => { + m.binfo.top = bottom_y - m.binfo.height; + }); + break; + } + case 'horizontal-distribution': { + // 将选中的元素按照水平方向中点坐标从小到大排序 + selected_done_json.sort( + (a, b) => a.binfo.left + a.binfo.width / 2 - b.binfo.left + b.binfo.width / 2 + ); + const max_info = selected_done_json[selected_done_json.length - 1]; + const min_info = selected_done_json[0]; + const point_interval_x = + (max_info.binfo.left + + max_info.binfo.width / 2 - + (min_info.binfo.left + min_info.binfo.width / 2)) / + (selected_done_json.length - 1); + selected_done_json.forEach((f, index) => { + if (index == 0 || index == selected_done_json.length - 1) { + return; + } + const new_x = min_info.binfo.left + min_info.binfo.width / 2 + point_interval_x * index; + f.binfo = { + ...f.binfo, + left: new_x - f.binfo.width / 2 + }; + }); + break; + } + case 'vertical-distribution': { + // 将选中的元素按照垂直方向中点坐标从小到大排序 + selected_done_json.sort( + (a, b) => a.binfo.top + a.binfo.height / 2 - b.binfo.top + b.binfo.height / 2 + ); + const max_info = selected_done_json[selected_done_json.length - 1]; + const min_info = selected_done_json[0]; + const point_interval_y = + (max_info.binfo.top + + max_info.binfo.height / 2 - + (min_info.binfo.top + min_info.binfo.height / 2)) / + (selected_done_json.length - 1); + selected_done_json.forEach((f, index) => { + if (index == 0 || index == selected_done_json.length - 1) { + return; + } + const new_y = min_info.binfo.top + min_info.binfo.height / 2 + point_interval_y * index; + f.binfo = { + ...f.binfo, + top: new_y - f.binfo.height / 2 + }; + }); + break; + } + } + // 更新绑定连线 + const sys_lines = global_done_json.filter((f) => f.type === 'sys-line'); + useUpdateSysLine(sys_lines, selected_done_json, canvasDom, scale); + return selected_done_json; +}; +/** + * 设置图形属性 + * @param id + * @param key + * @param val + * @param json_arr + * @returns + */ +export const setItemAttr = (id: string, key: string, val: any, json_arr: IDoneJson[]) => { + return new Promise((res) => { + const find_item = json_arr.find((f) => f.id === id); + if (!find_item) { + res({ + status: false, + msg: '要设置的id不存在' + }); + } + eval(`find_item.${key} = val;`); + res({ + status: true, + msg: '操作成功' + }); + }); +}; +export const getItemAttr = (id: string, key: string, json_arr: IDoneJson[]) => { + const find_item = json_arr.find((f) => f.id === id); + if (!find_item) { + return null; + } + return eval(`find_item.${key}`); +}; +export const previewCompareVal = (val1: any, operator: '>' | '<' | '=' | '!=', val2: any) => { + if (operator === '=') { + return String(val1) == String(val2); + } else if (operator === '>') { + return Number(val1) > Number(val2); + } else if (operator === '<') { + return Number(val1) < Number(val2); + } else if (operator === '!=') { + return String(val1) != String(val2); + } + return false; +}; +/** + * 将事件转换成v-on + * @param item + * @returns + */ +export const eventToVOn = (item: IDoneJson) => { + const event_obj: Record = {}; + item.events.forEach((event) => { + let code_str = ''; + if (event.action === 'changeAttr') { + if (event.change_attr.length < 1) { + return; + } + event.change_attr.forEach((attr) => { + if (!attr.target_id || !attr.target_attr || attr.target_value === undefined) { + return; + } + if ( + !event.trigger_rule || + !event.trigger_rule.trigger_id || + !event.trigger_rule.trigger_attr || + event.trigger_rule.value === undefined || + !event.trigger_rule.operator + ) { + if (typeof attr.target_value == 'boolean') { + code_str += `$setItemAttrByID('${attr.target_id}', '${attr.target_attr}', ${attr.target_value});`; + } else { + code_str += `$setItemAttrByID('${attr.target_id}', '${attr.target_attr}', '${attr.target_value}');`; + } + } else { + if (typeof attr.target_value == 'boolean') { + code_str += `if($previewCompareVal($getItemAttrByID('${event.trigger_rule.trigger_id}', '${event.trigger_rule.trigger_attr}'), '${event.trigger_rule.operator}', '${event.trigger_rule.value}')){$setItemAttrByID('${attr.target_id}', '${attr.target_attr}', ${attr.target_value})};`; + } else { + code_str += `if($previewCompareVal($getItemAttrByID('${event.trigger_rule.trigger_id}', '${event.trigger_rule.trigger_attr}'), '${event.trigger_rule.operator}', '${event.trigger_rule.value}')){$setItemAttrByID('${attr.target_id}', '${attr.target_attr}', '${attr.target_value}')};`; + } + } + }); + } else if (event.action === 'customCode') { + if ( + !event.trigger_rule || + !event.trigger_rule.trigger_id || + !event.trigger_rule.trigger_attr || + event.trigger_rule.value === undefined || + !event.trigger_rule.operator + ) { + code_str += event.custom_code + ';'; + } else { + code_str += `if($previewCompareVal($getItemAttrByID('${event.trigger_rule.trigger_id}', '${event.trigger_rule.trigger_attr}'), '${event.trigger_rule.operator}', '${event.trigger_rule.value}')){${event.custom_code}};`; + } + } + if (!Object.prototype.hasOwnProperty.call(event_obj, event.type)) { + event_obj[event.type] = code_str; + } else { + event_obj[event.type] += code_str; + } + }); + let on_event = {}; + for (const event_key in event_obj) { + on_event = { + ...on_event, + ...{ + [event_key]: () => dynamicEvent(event_obj[event_key])(item) + } + }; + } + return on_event; +}; +/** + * 创建动态事件,可以根据$item_info获取当前图形信息 + * @param code_str + * @returns + */ +const dynamicEvent = (code_str: string) => { + try { + return new Function('$item_info', code_str); + } catch (error) { + console.error(error); + return new Function('$item_info', `console.error('${error}')`); + } +}; diff --git a/src/components/mt-preview/index.ts b/src/components/mt-preview/index.ts new file mode 100644 index 0000000..f04a2d9 --- /dev/null +++ b/src/components/mt-preview/index.ts @@ -0,0 +1,3 @@ +import MtPreview from './index.vue'; + +export default MtPreview; diff --git a/src/components/mt-preview/index.vue b/src/components/mt-preview/index.vue new file mode 100644 index 0000000..3a106af --- /dev/null +++ b/src/components/mt-preview/index.vue @@ -0,0 +1,182 @@ + + + diff --git a/src/components/test/custom-demo/index.vue b/src/components/test/custom-demo/index.vue new file mode 100644 index 0000000..cebf00b --- /dev/null +++ b/src/components/test/custom-demo/index.vue @@ -0,0 +1,43 @@ + + diff --git a/src/components/test/my-button/index.vue b/src/components/test/my-button/index.vue new file mode 100644 index 0000000..09d8358 --- /dev/null +++ b/src/components/test/my-button/index.vue @@ -0,0 +1,18 @@ + + + diff --git a/src/components/test/my-input/index.vue b/src/components/test/my-input/index.vue new file mode 100644 index 0000000..13f8f76 --- /dev/null +++ b/src/components/test/my-input/index.vue @@ -0,0 +1,18 @@ + + + diff --git a/src/components/test/pie-charts/index.vue b/src/components/test/pie-charts/index.vue new file mode 100644 index 0000000..bdd988d --- /dev/null +++ b/src/components/test/pie-charts/index.vue @@ -0,0 +1,71 @@ + + + + + diff --git a/src/export.ts b/src/export.ts new file mode 100644 index 0000000..88c4730 --- /dev/null +++ b/src/export.ts @@ -0,0 +1,11 @@ +import 'element-plus/dist/index.css'; +import 'virtual:uno.css'; +import '@/assets/css-vars.css'; +import 'virtual:svg-icons-register'; +import 'animate.css'; +import '@/components/mt-edit/assets/css/custom_ani.css'; +import MtDzr from '@/components/mt-dzr'; +import MtEdit from '@/components/mt-edit'; +import MtPreview from '@/components/mt-preview'; +import { leftAsideStore } from '@/components/mt-edit/store/left-aside'; +export { MtDzr, MtEdit, MtPreview, leftAsideStore }; diff --git a/src/main.ts b/src/main.ts new file mode 100644 index 0000000..c090b1b --- /dev/null +++ b/src/main.ts @@ -0,0 +1,15 @@ +import { createApp } from 'vue'; +import App from './App.vue'; +import './assets/main.css'; +import router from './router/index'; +import MyButton from '@/components/test/my-button/index.vue'; +import MyInput from '@/components/test/my-input/index.vue'; +import CustomDemo from '@/components/test/custom-demo/index.vue'; +import PieCharts from '@/components/test/pie-charts/index.vue'; +const app = createApp(App); +app.use(router); +app.component('my-input', MyInput); +app.component('my-button', MyButton); +app.component('custom-demo', CustomDemo); +app.component('pie-charts', PieCharts); +app.mount('#app'); diff --git a/src/router/index.ts b/src/router/index.ts new file mode 100644 index 0000000..554c230 --- /dev/null +++ b/src/router/index.ts @@ -0,0 +1,48 @@ +import { createRouter, createWebHistory } from 'vue-router'; +export const constantRoutes = [ + { + path: '/', + component: () => import('../views/edit/index.vue') + }, + { + name: 'edit', + path: '/edit', + component: () => import('../views/edit/index.vue') + }, + { + name: 'demo', + path: '/demo', + component: () => import('../views/demo/index.vue') + }, + { + name: 'preview', + path: '/preview', + component: () => import('../views/preview/index.vue') + }, + { + name: 'edit-load', + path: '/edit-load', + component: () => import('../views/demo/edit-load.vue') + }, + { + name: 'set-node-attr', + path: '/set-node-attr', + component: () => import('../views/demo/set-node-attr.vue') + }, + { + name: 'event-callback', + path: '/event-callback', + component: () => import('../views/demo/event-callback.vue') + }, + { + name: 'change-attr', + path: '/change-attr', + component: () => import('../views/demo/change-attr.vue') + } +]; +const router = createRouter({ + history: createWebHistory(), // hash模式:createWebHashHistory,history模式:createWebHistory + routes: constantRoutes +}); + +export default router; diff --git a/src/views/demo/change-attr.vue b/src/views/demo/change-attr.vue new file mode 100644 index 0000000..617fc94 --- /dev/null +++ b/src/views/demo/change-attr.vue @@ -0,0 +1,222 @@ + + + + diff --git a/src/views/demo/edit-load.vue b/src/views/demo/edit-load.vue new file mode 100644 index 0000000..113ca5b --- /dev/null +++ b/src/views/demo/edit-load.vue @@ -0,0 +1,259 @@ + + + + diff --git a/src/views/demo/event-callback.vue b/src/views/demo/event-callback.vue new file mode 100644 index 0000000..270a1b3 --- /dev/null +++ b/src/views/demo/event-callback.vue @@ -0,0 +1,130 @@ + + + + diff --git a/src/views/demo/index.vue b/src/views/demo/index.vue new file mode 100644 index 0000000..e377033 --- /dev/null +++ b/src/views/demo/index.vue @@ -0,0 +1,74 @@ + + + diff --git a/src/views/demo/set-node-attr.vue b/src/views/demo/set-node-attr.vue new file mode 100644 index 0000000..4701a84 --- /dev/null +++ b/src/views/demo/set-node-attr.vue @@ -0,0 +1,83 @@ + + + diff --git a/src/views/edit/index.vue b/src/views/edit/index.vue new file mode 100644 index 0000000..70e6ddd --- /dev/null +++ b/src/views/edit/index.vue @@ -0,0 +1,37 @@ + + + + + diff --git a/src/views/preview/index.vue b/src/views/preview/index.vue new file mode 100644 index 0000000..e2f3986 --- /dev/null +++ b/src/views/preview/index.vue @@ -0,0 +1,19 @@ + + diff --git a/tsconfig.app.json b/tsconfig.app.json new file mode 100644 index 0000000..3e5b621 --- /dev/null +++ b/tsconfig.app.json @@ -0,0 +1,12 @@ +{ + "extends": "@vue/tsconfig/tsconfig.dom.json", + "include": ["env.d.ts", "src/**/*", "src/**/*.vue"], + "exclude": ["src/**/__tests__/*"], + "compilerOptions": { + "composite": true, + "baseUrl": ".", + "paths": { + "@/*": ["./src/*"] + } + } +} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..100cf6a --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,14 @@ +{ + "files": [], + "references": [ + { + "path": "./tsconfig.node.json" + }, + { + "path": "./tsconfig.app.json" + }, + { + "path": "./tsconfig.vitest.json" + } + ] +} diff --git a/tsconfig.node.json b/tsconfig.node.json new file mode 100644 index 0000000..85f6bc8 --- /dev/null +++ b/tsconfig.node.json @@ -0,0 +1,19 @@ +{ + "extends": "@tsconfig/node18/tsconfig.json", + "include": [ + "vite.config.*", + "vitest.config.*", + "cypress.config.*", + "nightwatch.conf.*", + "playwright.config.*" + ], + "compilerOptions": { + "composite": true, + "module": "ESNext", + "moduleResolution": "Bundler", + "types": ["node"] + }, + "paths":{ + "@/*":["src/*"] + } +} diff --git a/tsconfig.vitest.json b/tsconfig.vitest.json new file mode 100644 index 0000000..d080d61 --- /dev/null +++ b/tsconfig.vitest.json @@ -0,0 +1,9 @@ +{ + "extends": "./tsconfig.app.json", + "exclude": [], + "compilerOptions": { + "composite": true, + "lib": [], + "types": ["node", "jsdom"] + } +} diff --git a/uno.config.ts b/uno.config.ts new file mode 100644 index 0000000..ca292c5 --- /dev/null +++ b/uno.config.ts @@ -0,0 +1,24 @@ +// uno.config.ts +import { defineConfig, presetAttributify, presetUno } from 'unocss'; + +export default defineConfig({ + theme: { + colors: { + // ... + myDarkBgColor: '#141414', + myMainDarkBgColor: '#1c1c1c' + } + }, + presets: [ + presetAttributify({ + /* preset options */ + }), + presetUno() + ], + shortcuts: { + 'ct-border': 'border-t-1px border-t-solid border-t-gray-300', + 'cr-border': 'border-r-1px border-r-solid border-r-gray-300 ', + 'cl-border': 'border-l-1px border-l-solid border-l-gray-300', + 'cb-border': 'border-b-1px border-b-solid border-b-gray-300' + } +}); diff --git a/vite.config.ts b/vite.config.ts new file mode 100644 index 0000000..2888ce7 --- /dev/null +++ b/vite.config.ts @@ -0,0 +1,67 @@ +import { fileURLToPath, URL } from 'node:url'; + +import { defineConfig, UserConfigExport } from 'vite'; +import vue from '@vitejs/plugin-vue'; +import { resolve } from 'path'; +import dts from 'vite-plugin-dts'; +import UnoCSS from 'unocss/vite'; +import { createSvgIconsPlugin } from 'vite-plugin-svg-icons'; +// https://vitejs.dev/config/ +export default defineConfig(({ mode }) => { + let config: UserConfigExport = { + plugins: [ + vue(), + dts({ + tsconfigPath: 'tsconfig.app.json' + }), + UnoCSS({ + // 在低版本浏览器上开发时会报错 Unexpected reserved word + // 如果在开发环境需要兼容不支持顶级await的低版本浏览器例如Chrome(v87),就将下面的配置打开 + // hmrTopLevelAwait: false + }), + createSvgIconsPlugin({ + // 指定需要缓存的图标文件夹 + iconDirs: [resolve(process.cwd(), 'src/assets/icons')], + // 指定symbolId格式 + symbolId: 'mt-edit-[name]', + // 禁用压缩 否则想要修改无状态组件的stroke或者fill会影响到预设样式 例如stroke-width + svgoOptions: false, + customDomId: '___mt__edit__icons__dom__' + }) + ], + + resolve: { + alias: { + '@': fileURLToPath(new URL('./src', import.meta.url)) + }, + dedupe: ['vue'] + } + }; + if (mode === 'lib' || mode === 'npm') { + config = { + ...config, + ...{ + build: { + lib: { + entry: resolve(__dirname, 'src/export.ts'), + name: 'maotu', + fileName: (format: any) => `maotu.${format}.js` + }, + rollupOptions: { + // 确保外部化处理那些你不想打包进库的依赖 + external: ['vue', 'pinia'], + output: { + // 在 UMD 构建模式下为这些外部化的依赖提供一个全局变量 + globals: { + vue: 'Vue', + pinia: 'Pinia' + }, + inlineDynamicImports: true + } + } + } + } + }; + } + return config; +}); diff --git a/vitest.config.ts b/vitest.config.ts new file mode 100644 index 0000000..10067d5 --- /dev/null +++ b/vitest.config.ts @@ -0,0 +1,14 @@ +import { fileURLToPath } from 'node:url' +import { mergeConfig, defineConfig, configDefaults } from 'vitest/config' +import viteConfig from './vite.config' + +export default mergeConfig( + viteConfig, + defineConfig({ + test: { + environment: 'jsdom', + exclude: [...configDefaults.exclude, 'e2e/*'], + root: fileURLToPath(new URL('./', import.meta.url)) + } + }) +)