From fa8b468c32221032ff8364fbe1a485234f1b8def Mon Sep 17 00:00:00 2001
From: "2817212736@qq.com" <2817212736@qq.com>
Date: Thu, 19 Dec 2024 13:51:07 +0800
Subject: [PATCH] =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=88=9B=E5=BB=BA=EF=BC=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.gitignore | 24 +
.vscode/extensions.json | 3 +
README.md | 48 +
child.html | 12 +
index.html | 12 +
index.ts | 11 +
package.json | 36 +
pnpm-lock.yaml | 2185 +++++++++++++++++++++++++++++++++
public/vite.svg | 1 +
src/App.vue | 74 ++
src/JumpBtn.vue | 21 +
src/SlotTester.vue | 18 +
src/child.tsx | 29 +
src/components/DemiHelper.ts | 132 ++
src/components/Invoker.tsx | 152 +++
src/components/InvokerItem.ts | 8 +
src/components/Receiver.ts | 136 ++
src/main.ts | 5 +
src/vite-env.d.ts | 1 +
tsconfig.app.json | 27 +
tsconfig.json | 7 +
tsconfig.node.json | 24 +
vite.config.ts | 38 +
23 files changed, 3004 insertions(+)
create mode 100644 .gitignore
create mode 100644 .vscode/extensions.json
create mode 100644 README.md
create mode 100644 child.html
create mode 100644 index.html
create mode 100644 index.ts
create mode 100644 package.json
create mode 100644 pnpm-lock.yaml
create mode 100644 public/vite.svg
create mode 100644 src/App.vue
create mode 100644 src/JumpBtn.vue
create mode 100644 src/SlotTester.vue
create mode 100644 src/child.tsx
create mode 100644 src/components/DemiHelper.ts
create mode 100644 src/components/Invoker.tsx
create mode 100644 src/components/InvokerItem.ts
create mode 100644 src/components/Receiver.ts
create mode 100644 src/main.ts
create mode 100644 src/vite-env.d.ts
create mode 100644 tsconfig.app.json
create mode 100644 tsconfig.json
create mode 100644 tsconfig.node.json
create mode 100644 vite.config.ts
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..a547bf3
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,24 @@
+# Logs
+logs
+*.log
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+pnpm-debug.log*
+lerna-debug.log*
+
+node_modules
+dist
+dist-ssr
+*.local
+
+# Editor directories and files
+.vscode/*
+!.vscode/extensions.json
+.idea
+.DS_Store
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+*.sw?
diff --git a/.vscode/extensions.json b/.vscode/extensions.json
new file mode 100644
index 0000000..a7cea0b
--- /dev/null
+++ b/.vscode/extensions.json
@@ -0,0 +1,3 @@
+{
+ "recommendations": ["Vue.volar"]
+}
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..927b058
--- /dev/null
+++ b/README.md
@@ -0,0 +1,48 @@
+# Vue Mod Page
+
+## 概述
+
+这是一个工具库,用于在Vue项目跨越IFrame来调用另一个Vue项目,并且同时支持了Vue2.7和Vue3的跨版本调用。
+
+## 功能
+
+- 基于IFrame来调用另一个Vue项目(以下称“子项目”)
+- 可以在子项目中渲染原生HTML元素,或是已注册为全局组件的Vue组件
+- 支持Vue2.7和Vue3的跨版本调用
+- 支持属性传参(props),CSS类(classes),样式(style),事件(onXXX)的传递
+- 支持子节点(children)渲染
+- 支持具名插槽(slot)
+- 支持作用域插槽(slot-scope)
+- 支持Vue模板引用(ref)
+
+## 使用
+
+1. 在主项目和子项目中引入该工具库
+2. 在子项目中引入`Receiver`组件,然后将该组件注册到路由上
+3. 在子项目中将需要被主项目调用的Vue组件注册为全局组件
+
+ ```vue
+ // Vue3
+ app.component('MyComponent', MyComponent)
+ // Vue2
+ Vue.component('MyComponent', MyComponent)
+ ```
+
+4. 在主项目中引入`Invoker`组件,并传入`url`和`items`属性
+ - `url`:子项目`Receiver`的URL
+ - `items`: 包含子项目渲染元素定义的列表,见`InvokerItem`的类型定义
+5. 根据使用的Vue版本,在两个项目的目录下执行以下命令
+
+ ```sh
+ # Vue2.7
+ npm run vue-demi-switch 2.7 vue2
+ # Vue3
+ npm run vue-demi-switch 3
+ ```
+
+6. 运行项目查看效果
+
+## 注意事项
+
+1. 主项目和子项目需要同源,或是配置好了CORS策略
+2. 该库对Vue2.7的支持有限
\ No newline at end of file
diff --git a/child.html b/child.html
new file mode 100644
index 0000000..5fcd922
--- /dev/null
+++ b/child.html
@@ -0,0 +1,12 @@
+
+
+
+
+
+ Vite + Vue + TS
+
+
+
+
+
+
diff --git a/index.html b/index.html
new file mode 100644
index 0000000..e763020
--- /dev/null
+++ b/index.html
@@ -0,0 +1,12 @@
+
+
+
+
+
+ Vite + Vue + TS
+
+
+
+
+
+
diff --git a/index.ts b/index.ts
new file mode 100644
index 0000000..5298aa3
--- /dev/null
+++ b/index.ts
@@ -0,0 +1,11 @@
+import Invoker from "./src/components/Invoker";
+import { hh } from './src/components/DemiHelper';
+import { InvokerItem } from "./src/components/InvokerItem";
+import Receiver from "./src/components/Receiver";
+
+export {
+ Invoker,
+ Receiver,
+ type InvokerItem,
+ hh,
+}
\ No newline at end of file
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..5daa080
--- /dev/null
+++ b/package.json
@@ -0,0 +1,36 @@
+{
+ "name": "vue-modpage",
+ "private": true,
+ "version": "1.0.0",
+ "type": "module",
+ "scripts": {
+ "dev": "vite",
+ "build": "vue-tsc -b && vite build",
+ "preview": "vite preview",
+ "switch:2": "vue-demi-switch 2.7 vue2",
+ "switch:3": "vue-demi-switch 3",
+ "test:2": "vue-demi-switch 2 vue2 && jest",
+ "test:3": "vue-demi-switch 3 && jest"
+ },
+ "dependencies": {
+ "vue-demi": "^0.14.10"
+ },
+ "peerDependencies": {
+ "vue": "^2.7.0 || >=3.0.0"
+ },
+ "devDependencies": {
+ "@types/node": "^22.10.2",
+ "@vitejs/plugin-vue": "^5.2.1",
+ "@vitejs/plugin-vue-jsx": "^4.1.1",
+ "@vitejs/plugin-vue2": "^2.2.0",
+ "@vitejs/plugin-vue2-jsx": "^1.1.0",
+ "typescript": "~5.6.2",
+ "vite": "^6.0.1",
+ "vitest": "^2.1.8",
+ "vue": "^3.5.13",
+ "vue-template-compiler": "2.7.16",
+ "vue-tsc": "^2.1.10",
+ "vue2": "npm:vue@2.7.16"
+ },
+ "packageManager": "pnpm@9.1.1+sha1.09ada6cd05003e0ced25fb716f9fda4063ec2e3b"
+}
\ No newline at end of file
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
new file mode 100644
index 0000000..20ca463
--- /dev/null
+++ b/pnpm-lock.yaml
@@ -0,0 +1,2185 @@
+lockfileVersion: '9.0'
+
+settings:
+ autoInstallPeers: true
+ excludeLinksFromLockfile: false
+
+importers:
+
+ .:
+ dependencies:
+ vue-demi:
+ specifier: ^0.14.10
+ version: 0.14.10(@vue/composition-api@1.7.2(vue@3.5.13(typescript@5.6.3)))(vue@3.5.13(typescript@5.6.3))
+ devDependencies:
+ '@types/node':
+ specifier: ^22.10.2
+ version: 22.10.2
+ '@vitejs/plugin-vue':
+ specifier: ^5.2.1
+ version: 5.2.1(vite@6.0.3(@types/node@22.10.2))(vue@3.5.13(typescript@5.6.3))
+ '@vitejs/plugin-vue-jsx':
+ specifier: ^4.1.1
+ version: 4.1.1(vite@6.0.3(@types/node@22.10.2))(vue@3.5.13(typescript@5.6.3))
+ '@vitejs/plugin-vue2':
+ specifier: ^2.2.0
+ version: 2.3.3(vite@6.0.3(@types/node@22.10.2))(vue@3.5.13(typescript@5.6.3))
+ '@vitejs/plugin-vue2-jsx':
+ specifier: ^1.1.0
+ version: 1.1.1(rollup@4.28.0)(vite@6.0.3(@types/node@22.10.2))(vue@3.5.13(typescript@5.6.3))
+ typescript:
+ specifier: ~5.6.2
+ version: 5.6.3
+ vite:
+ specifier: ^6.0.1
+ version: 6.0.3(@types/node@22.10.2)
+ vitest:
+ specifier: ^2.1.8
+ version: 2.1.8(@types/node@22.10.2)
+ vue:
+ specifier: ^3.5.13
+ version: 3.5.13(typescript@5.6.3)
+ vue-template-compiler:
+ specifier: 2.7.16
+ version: 2.7.16
+ vue-tsc:
+ specifier: ^2.1.10
+ version: 2.1.10(typescript@5.6.3)
+ vue2:
+ specifier: npm:vue@2.7.16
+ version: vue@2.7.16
+
+packages:
+
+ '@ampproject/remapping@2.3.0':
+ resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==}
+ engines: {node: '>=6.0.0'}
+
+ '@babel/code-frame@7.26.2':
+ resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/compat-data@7.26.3':
+ resolution: {integrity: sha512-nHIxvKPniQXpmQLb0vhY3VaFb3S0YrTAwpOWJZh1wn3oJPjJk9Asva204PsBdmAE8vpzfHudT8DB0scYvy9q0g==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/core@7.26.0':
+ resolution: {integrity: sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/generator@7.26.3':
+ resolution: {integrity: sha512-6FF/urZvD0sTeO7k6/B15pMLC4CHUv1426lzr3N01aHJTl046uCAh9LXW/fzeXXjPNCJ6iABW5XaWOsIZB93aQ==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-annotate-as-pure@7.25.9':
+ resolution: {integrity: sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-compilation-targets@7.25.9':
+ resolution: {integrity: sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-create-class-features-plugin@7.25.9':
+ resolution: {integrity: sha512-UTZQMvt0d/rSz6KI+qdu7GQze5TIajwTS++GUozlw8VBJDEOAqSXwm1WvmYEZwqdqSGQshRocPDqrt4HBZB3fQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
+ '@babel/helper-member-expression-to-functions@7.25.9':
+ resolution: {integrity: sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-module-imports@7.25.9':
+ resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-module-transforms@7.26.0':
+ resolution: {integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
+ '@babel/helper-optimise-call-expression@7.25.9':
+ resolution: {integrity: sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-plugin-utils@7.25.9':
+ resolution: {integrity: sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-replace-supers@7.25.9':
+ resolution: {integrity: sha512-IiDqTOTBQy0sWyeXyGSC5TBJpGFXBkRynjBeXsvbhQFKj2viwJC76Epz35YLU1fpe/Am6Vppb7W7zM4fPQzLsQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
+ '@babel/helper-skip-transparent-expression-wrappers@7.25.9':
+ resolution: {integrity: sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-string-parser@7.25.9':
+ resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-validator-identifier@7.25.9':
+ resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-validator-option@7.25.9':
+ resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helpers@7.26.0':
+ resolution: {integrity: sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/parser@7.26.3':
+ resolution: {integrity: sha512-WJ/CvmY8Mea8iDXo6a7RK2wbmJITT5fN3BEkRuFlxVyNx8jOKIIhmC4fSkTcPcf8JyavbBwIe6OpiCOBXt/IcA==}
+ engines: {node: '>=6.0.0'}
+ hasBin: true
+
+ '@babel/plugin-syntax-import-meta@7.10.4':
+ resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-jsx@7.25.9':
+ resolution: {integrity: sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-typescript@7.25.9':
+ resolution: {integrity: sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-typescript@7.26.3':
+ resolution: {integrity: sha512-6+5hpdr6mETwSKjmJUdYw0EIkATiQhnELWlE3kJFBwSg/BGIVwVaVbX+gOXBCdc7Ln1RXZxyWGecIXhUfnl7oA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/template@7.25.9':
+ resolution: {integrity: sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/traverse@7.26.4':
+ resolution: {integrity: sha512-fH+b7Y4p3yqvApJALCPJcwb0/XaOSgtK4pzV6WVjPR5GLFQBRI7pfoX2V2iM48NXvX07NUxxm1Vw98YjqTcU5w==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/types@7.26.3':
+ resolution: {integrity: sha512-vN5p+1kl59GVKMvTHt55NzzmYVxprfJD+ql7U9NFIfKCBkYE55LYtS+WtPlaYOyzydrKI8Nezd+aZextrd+FMA==}
+ engines: {node: '>=6.9.0'}
+
+ '@esbuild/aix-ppc64@0.21.5':
+ resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==}
+ engines: {node: '>=12'}
+ cpu: [ppc64]
+ os: [aix]
+
+ '@esbuild/aix-ppc64@0.24.0':
+ resolution: {integrity: sha512-WtKdFM7ls47zkKHFVzMz8opM7LkcsIp9amDUBIAWirg70RM71WRSjdILPsY5Uv1D42ZpUfaPILDlfactHgsRkw==}
+ engines: {node: '>=18'}
+ cpu: [ppc64]
+ os: [aix]
+
+ '@esbuild/android-arm64@0.21.5':
+ resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [android]
+
+ '@esbuild/android-arm64@0.24.0':
+ resolution: {integrity: sha512-Vsm497xFM7tTIPYK9bNTYJyF/lsP590Qc1WxJdlB6ljCbdZKU9SY8i7+Iin4kyhV/KV5J2rOKsBQbB77Ab7L/w==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [android]
+
+ '@esbuild/android-arm@0.21.5':
+ resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==}
+ engines: {node: '>=12'}
+ cpu: [arm]
+ os: [android]
+
+ '@esbuild/android-arm@0.24.0':
+ resolution: {integrity: sha512-arAtTPo76fJ/ICkXWetLCc9EwEHKaeya4vMrReVlEIUCAUncH7M4bhMQ+M9Vf+FFOZJdTNMXNBrWwW+OXWpSew==}
+ engines: {node: '>=18'}
+ cpu: [arm]
+ os: [android]
+
+ '@esbuild/android-x64@0.21.5':
+ resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [android]
+
+ '@esbuild/android-x64@0.24.0':
+ resolution: {integrity: sha512-t8GrvnFkiIY7pa7mMgJd7p8p8qqYIz1NYiAoKc75Zyv73L3DZW++oYMSHPRarcotTKuSs6m3hTOa5CKHaS02TQ==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [android]
+
+ '@esbuild/darwin-arm64@0.21.5':
+ resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@esbuild/darwin-arm64@0.24.0':
+ resolution: {integrity: sha512-CKyDpRbK1hXwv79soeTJNHb5EiG6ct3efd/FTPdzOWdbZZfGhpbcqIpiD0+vwmpu0wTIL97ZRPZu8vUt46nBSw==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@esbuild/darwin-x64@0.21.5':
+ resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [darwin]
+
+ '@esbuild/darwin-x64@0.24.0':
+ resolution: {integrity: sha512-rgtz6flkVkh58od4PwTRqxbKH9cOjaXCMZgWD905JOzjFKW+7EiUObfd/Kav+A6Gyud6WZk9w+xu6QLytdi2OA==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [darwin]
+
+ '@esbuild/freebsd-arm64@0.21.5':
+ resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [freebsd]
+
+ '@esbuild/freebsd-arm64@0.24.0':
+ resolution: {integrity: sha512-6Mtdq5nHggwfDNLAHkPlyLBpE5L6hwsuXZX8XNmHno9JuL2+bg2BX5tRkwjyfn6sKbxZTq68suOjgWqCicvPXA==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [freebsd]
+
+ '@esbuild/freebsd-x64@0.21.5':
+ resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@esbuild/freebsd-x64@0.24.0':
+ resolution: {integrity: sha512-D3H+xh3/zphoX8ck4S2RxKR6gHlHDXXzOf6f/9dbFt/NRBDIE33+cVa49Kil4WUjxMGW0ZIYBYtaGCa2+OsQwQ==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@esbuild/linux-arm64@0.21.5':
+ resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@esbuild/linux-arm64@0.24.0':
+ resolution: {integrity: sha512-TDijPXTOeE3eaMkRYpcy3LarIg13dS9wWHRdwYRnzlwlA370rNdZqbcp0WTyyV/k2zSxfko52+C7jU5F9Tfj1g==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@esbuild/linux-arm@0.21.5':
+ resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==}
+ engines: {node: '>=12'}
+ cpu: [arm]
+ os: [linux]
+
+ '@esbuild/linux-arm@0.24.0':
+ resolution: {integrity: sha512-gJKIi2IjRo5G6Glxb8d3DzYXlxdEj2NlkixPsqePSZMhLudqPhtZ4BUrpIuTjJYXxvF9njql+vRjB2oaC9XpBw==}
+ engines: {node: '>=18'}
+ cpu: [arm]
+ os: [linux]
+
+ '@esbuild/linux-ia32@0.21.5':
+ resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==}
+ engines: {node: '>=12'}
+ cpu: [ia32]
+ os: [linux]
+
+ '@esbuild/linux-ia32@0.24.0':
+ resolution: {integrity: sha512-K40ip1LAcA0byL05TbCQ4yJ4swvnbzHscRmUilrmP9Am7//0UjPreh4lpYzvThT2Quw66MhjG//20mrufm40mA==}
+ engines: {node: '>=18'}
+ cpu: [ia32]
+ os: [linux]
+
+ '@esbuild/linux-loong64@0.21.5':
+ resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==}
+ engines: {node: '>=12'}
+ cpu: [loong64]
+ os: [linux]
+
+ '@esbuild/linux-loong64@0.24.0':
+ resolution: {integrity: sha512-0mswrYP/9ai+CU0BzBfPMZ8RVm3RGAN/lmOMgW4aFUSOQBjA31UP8Mr6DDhWSuMwj7jaWOT0p0WoZ6jeHhrD7g==}
+ engines: {node: '>=18'}
+ cpu: [loong64]
+ os: [linux]
+
+ '@esbuild/linux-mips64el@0.21.5':
+ resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==}
+ engines: {node: '>=12'}
+ cpu: [mips64el]
+ os: [linux]
+
+ '@esbuild/linux-mips64el@0.24.0':
+ resolution: {integrity: sha512-hIKvXm0/3w/5+RDtCJeXqMZGkI2s4oMUGj3/jM0QzhgIASWrGO5/RlzAzm5nNh/awHE0A19h/CvHQe6FaBNrRA==}
+ engines: {node: '>=18'}
+ cpu: [mips64el]
+ os: [linux]
+
+ '@esbuild/linux-ppc64@0.21.5':
+ resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==}
+ engines: {node: '>=12'}
+ cpu: [ppc64]
+ os: [linux]
+
+ '@esbuild/linux-ppc64@0.24.0':
+ resolution: {integrity: sha512-HcZh5BNq0aC52UoocJxaKORfFODWXZxtBaaZNuN3PUX3MoDsChsZqopzi5UupRhPHSEHotoiptqikjN/B77mYQ==}
+ engines: {node: '>=18'}
+ cpu: [ppc64]
+ os: [linux]
+
+ '@esbuild/linux-riscv64@0.21.5':
+ resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==}
+ engines: {node: '>=12'}
+ cpu: [riscv64]
+ os: [linux]
+
+ '@esbuild/linux-riscv64@0.24.0':
+ resolution: {integrity: sha512-bEh7dMn/h3QxeR2KTy1DUszQjUrIHPZKyO6aN1X4BCnhfYhuQqedHaa5MxSQA/06j3GpiIlFGSsy1c7Gf9padw==}
+ engines: {node: '>=18'}
+ cpu: [riscv64]
+ os: [linux]
+
+ '@esbuild/linux-s390x@0.21.5':
+ resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==}
+ engines: {node: '>=12'}
+ cpu: [s390x]
+ os: [linux]
+
+ '@esbuild/linux-s390x@0.24.0':
+ resolution: {integrity: sha512-ZcQ6+qRkw1UcZGPyrCiHHkmBaj9SiCD8Oqd556HldP+QlpUIe2Wgn3ehQGVoPOvZvtHm8HPx+bH20c9pvbkX3g==}
+ engines: {node: '>=18'}
+ cpu: [s390x]
+ os: [linux]
+
+ '@esbuild/linux-x64@0.21.5':
+ resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [linux]
+
+ '@esbuild/linux-x64@0.24.0':
+ resolution: {integrity: sha512-vbutsFqQ+foy3wSSbmjBXXIJ6PL3scghJoM8zCL142cGaZKAdCZHyf+Bpu/MmX9zT9Q0zFBVKb36Ma5Fzfa8xA==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [linux]
+
+ '@esbuild/netbsd-x64@0.21.5':
+ resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [netbsd]
+
+ '@esbuild/netbsd-x64@0.24.0':
+ resolution: {integrity: sha512-hjQ0R/ulkO8fCYFsG0FZoH+pWgTTDreqpqY7UnQntnaKv95uP5iW3+dChxnx7C3trQQU40S+OgWhUVwCjVFLvg==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [netbsd]
+
+ '@esbuild/openbsd-arm64@0.24.0':
+ resolution: {integrity: sha512-MD9uzzkPQbYehwcN583yx3Tu5M8EIoTD+tUgKF982WYL9Pf5rKy9ltgD0eUgs8pvKnmizxjXZyLt0z6DC3rRXg==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [openbsd]
+
+ '@esbuild/openbsd-x64@0.21.5':
+ resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [openbsd]
+
+ '@esbuild/openbsd-x64@0.24.0':
+ resolution: {integrity: sha512-4ir0aY1NGUhIC1hdoCzr1+5b43mw99uNwVzhIq1OY3QcEwPDO3B7WNXBzaKY5Nsf1+N11i1eOfFcq+D/gOS15Q==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [openbsd]
+
+ '@esbuild/sunos-x64@0.21.5':
+ resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [sunos]
+
+ '@esbuild/sunos-x64@0.24.0':
+ resolution: {integrity: sha512-jVzdzsbM5xrotH+W5f1s+JtUy1UWgjU0Cf4wMvffTB8m6wP5/kx0KiaLHlbJO+dMgtxKV8RQ/JvtlFcdZ1zCPA==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [sunos]
+
+ '@esbuild/win32-arm64@0.21.5':
+ resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [win32]
+
+ '@esbuild/win32-arm64@0.24.0':
+ resolution: {integrity: sha512-iKc8GAslzRpBytO2/aN3d2yb2z8XTVfNV0PjGlCxKo5SgWmNXx82I/Q3aG1tFfS+A2igVCY97TJ8tnYwpUWLCA==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [win32]
+
+ '@esbuild/win32-ia32@0.21.5':
+ resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==}
+ engines: {node: '>=12'}
+ cpu: [ia32]
+ os: [win32]
+
+ '@esbuild/win32-ia32@0.24.0':
+ resolution: {integrity: sha512-vQW36KZolfIudCcTnaTpmLQ24Ha1RjygBo39/aLkM2kmjkWmZGEJ5Gn9l5/7tzXA42QGIoWbICfg6KLLkIw6yw==}
+ engines: {node: '>=18'}
+ cpu: [ia32]
+ os: [win32]
+
+ '@esbuild/win32-x64@0.21.5':
+ resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [win32]
+
+ '@esbuild/win32-x64@0.24.0':
+ resolution: {integrity: sha512-7IAFPrjSQIJrGsK6flwg7NFmwBoSTyF3rl7If0hNUFQU4ilTsEPL6GuMuU9BfIWVVGuRnuIidkSMC+c0Otu8IA==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [win32]
+
+ '@jridgewell/gen-mapping@0.3.5':
+ resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==}
+ engines: {node: '>=6.0.0'}
+
+ '@jridgewell/resolve-uri@3.1.2':
+ resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
+ engines: {node: '>=6.0.0'}
+
+ '@jridgewell/set-array@1.2.1':
+ resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==}
+ engines: {node: '>=6.0.0'}
+
+ '@jridgewell/sourcemap-codec@1.5.0':
+ resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==}
+
+ '@jridgewell/trace-mapping@0.3.25':
+ resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==}
+
+ '@rollup/pluginutils@5.1.4':
+ resolution: {integrity: sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==}
+ engines: {node: '>=14.0.0'}
+ peerDependencies:
+ rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0
+ peerDependenciesMeta:
+ rollup:
+ optional: true
+
+ '@rollup/rollup-android-arm-eabi@4.28.0':
+ resolution: {integrity: sha512-wLJuPLT6grGZsy34g4N1yRfYeouklTgPhH1gWXCYspenKYD0s3cR99ZevOGw5BexMNywkbV3UkjADisozBmpPQ==}
+ cpu: [arm]
+ os: [android]
+
+ '@rollup/rollup-android-arm64@4.28.0':
+ resolution: {integrity: sha512-eiNkznlo0dLmVG/6wf+Ifi/v78G4d4QxRhuUl+s8EWZpDewgk7PX3ZyECUXU0Zq/Ca+8nU8cQpNC4Xgn2gFNDA==}
+ cpu: [arm64]
+ os: [android]
+
+ '@rollup/rollup-darwin-arm64@4.28.0':
+ resolution: {integrity: sha512-lmKx9yHsppblnLQZOGxdO66gT77bvdBtr/0P+TPOseowE7D9AJoBw8ZDULRasXRWf1Z86/gcOdpBrV6VDUY36Q==}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@rollup/rollup-darwin-x64@4.28.0':
+ resolution: {integrity: sha512-8hxgfReVs7k9Js1uAIhS6zq3I+wKQETInnWQtgzt8JfGx51R1N6DRVy3F4o0lQwumbErRz52YqwjfvuwRxGv1w==}
+ cpu: [x64]
+ os: [darwin]
+
+ '@rollup/rollup-freebsd-arm64@4.28.0':
+ resolution: {integrity: sha512-lA1zZB3bFx5oxu9fYud4+g1mt+lYXCoch0M0V/xhqLoGatbzVse0wlSQ1UYOWKpuSu3gyN4qEc0Dxf/DII1bhQ==}
+ cpu: [arm64]
+ os: [freebsd]
+
+ '@rollup/rollup-freebsd-x64@4.28.0':
+ resolution: {integrity: sha512-aI2plavbUDjCQB/sRbeUZWX9qp12GfYkYSJOrdYTL/C5D53bsE2/nBPuoiJKoWp5SN78v2Vr8ZPnB+/VbQ2pFA==}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@rollup/rollup-linux-arm-gnueabihf@4.28.0':
+ resolution: {integrity: sha512-WXveUPKtfqtaNvpf0iOb0M6xC64GzUX/OowbqfiCSXTdi/jLlOmH0Ba94/OkiY2yTGTwteo4/dsHRfh5bDCZ+w==}
+ cpu: [arm]
+ os: [linux]
+ libc: [glibc]
+
+ '@rollup/rollup-linux-arm-musleabihf@4.28.0':
+ resolution: {integrity: sha512-yLc3O2NtOQR67lI79zsSc7lk31xjwcaocvdD1twL64PK1yNaIqCeWI9L5B4MFPAVGEVjH5k1oWSGuYX1Wutxpg==}
+ cpu: [arm]
+ os: [linux]
+ libc: [musl]
+
+ '@rollup/rollup-linux-arm64-gnu@4.28.0':
+ resolution: {integrity: sha512-+P9G9hjEpHucHRXqesY+3X9hD2wh0iNnJXX/QhS/J5vTdG6VhNYMxJ2rJkQOxRUd17u5mbMLHM7yWGZdAASfcg==}
+ cpu: [arm64]
+ os: [linux]
+ libc: [glibc]
+
+ '@rollup/rollup-linux-arm64-musl@4.28.0':
+ resolution: {integrity: sha512-1xsm2rCKSTpKzi5/ypT5wfc+4bOGa/9yI/eaOLW0oMs7qpC542APWhl4A37AENGZ6St6GBMWhCCMM6tXgTIplw==}
+ cpu: [arm64]
+ os: [linux]
+ libc: [musl]
+
+ '@rollup/rollup-linux-powerpc64le-gnu@4.28.0':
+ resolution: {integrity: sha512-zgWxMq8neVQeXL+ouSf6S7DoNeo6EPgi1eeqHXVKQxqPy1B2NvTbaOUWPn/7CfMKL7xvhV0/+fq/Z/J69g1WAQ==}
+ cpu: [ppc64]
+ os: [linux]
+ libc: [glibc]
+
+ '@rollup/rollup-linux-riscv64-gnu@4.28.0':
+ resolution: {integrity: sha512-VEdVYacLniRxbRJLNtzwGt5vwS0ycYshofI7cWAfj7Vg5asqj+pt+Q6x4n+AONSZW/kVm+5nklde0qs2EUwU2g==}
+ cpu: [riscv64]
+ os: [linux]
+ libc: [glibc]
+
+ '@rollup/rollup-linux-s390x-gnu@4.28.0':
+ resolution: {integrity: sha512-LQlP5t2hcDJh8HV8RELD9/xlYtEzJkm/aWGsauvdO2ulfl3QYRjqrKW+mGAIWP5kdNCBheqqqYIGElSRCaXfpw==}
+ cpu: [s390x]
+ os: [linux]
+ libc: [glibc]
+
+ '@rollup/rollup-linux-x64-gnu@4.28.0':
+ resolution: {integrity: sha512-Nl4KIzteVEKE9BdAvYoTkW19pa7LR/RBrT6F1dJCV/3pbjwDcaOq+edkP0LXuJ9kflW/xOK414X78r+K84+msw==}
+ cpu: [x64]
+ os: [linux]
+ libc: [glibc]
+
+ '@rollup/rollup-linux-x64-musl@4.28.0':
+ resolution: {integrity: sha512-eKpJr4vBDOi4goT75MvW+0dXcNUqisK4jvibY9vDdlgLx+yekxSm55StsHbxUsRxSTt3JEQvlr3cGDkzcSP8bw==}
+ cpu: [x64]
+ os: [linux]
+ libc: [musl]
+
+ '@rollup/rollup-win32-arm64-msvc@4.28.0':
+ resolution: {integrity: sha512-Vi+WR62xWGsE/Oj+mD0FNAPY2MEox3cfyG0zLpotZdehPFXwz6lypkGs5y38Jd/NVSbOD02aVad6q6QYF7i8Bg==}
+ cpu: [arm64]
+ os: [win32]
+
+ '@rollup/rollup-win32-ia32-msvc@4.28.0':
+ resolution: {integrity: sha512-kN/Vpip8emMLn/eOza+4JwqDZBL6MPNpkdaEsgUtW1NYN3DZvZqSQrbKzJcTL6hd8YNmFTn7XGWMwccOcJBL0A==}
+ cpu: [ia32]
+ os: [win32]
+
+ '@rollup/rollup-win32-x64-msvc@4.28.0':
+ resolution: {integrity: sha512-Bvno2/aZT6usSa7lRDL2+hMjVAGjuqaymF1ApZm31JXzniR/hvr14jpU+/z4X6Gt5BPlzosscyJZGUvguXIqeQ==}
+ cpu: [x64]
+ os: [win32]
+
+ '@types/estree@1.0.6':
+ resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==}
+
+ '@types/node@22.10.2':
+ resolution: {integrity: sha512-Xxr6BBRCAOQixvonOye19wnzyDiUtTeqldOOmj3CkeblonbccA12PFwlufvRdrpjXxqnmUaeiU5EOA+7s5diUQ==}
+
+ '@vitejs/plugin-vue-jsx@4.1.1':
+ resolution: {integrity: sha512-uMJqv/7u1zz/9NbWAD3XdjaY20tKTf17XVfQ9zq4wY1BjsB/PjpJPMe2xiG39QpP4ZdhYNhm4Hvo66uJrykNLA==}
+ engines: {node: ^18.0.0 || >=20.0.0}
+ peerDependencies:
+ vite: ^5.0.0 || ^6.0.0
+ vue: ^3.0.0
+
+ '@vitejs/plugin-vue2-jsx@1.1.1':
+ resolution: {integrity: sha512-r6BjWP2aVg4/uXdjf+wMwLuk0LQEUbPTC9UcRpWMhWsfVl9n/8RhiG6pQPO9g+oab/g3fHoZ2bmJJbKuraqCsw==}
+ engines: {node: '>=14.18.0'}
+ peerDependencies:
+ vite: ^2.9.13 || ^3.0.0 || ^4.0.0 || ^5.0.0
+ vue: ^2.7.0
+
+ '@vitejs/plugin-vue2@2.3.3':
+ resolution: {integrity: sha512-qexY6+bbwY8h0AZerzUuGywNTi0cLOkbiSbggr0R3WEW95iB2hblQFyv4MAkkc2vm4gZN1cO5kzT1Kp6xlVzZw==}
+ engines: {node: ^14.18.0 || >= 16.0.0}
+ peerDependencies:
+ vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0
+ vue: ^2.7.0-0
+
+ '@vitejs/plugin-vue@5.2.1':
+ resolution: {integrity: sha512-cxh314tzaWwOLqVes2gnnCtvBDcM1UMdn+iFR+UjAn411dPT3tOmqrJjbMd7koZpMAmBM/GqeV4n9ge7JSiJJQ==}
+ engines: {node: ^18.0.0 || >=20.0.0}
+ peerDependencies:
+ vite: ^5.0.0 || ^6.0.0
+ vue: ^3.2.25
+
+ '@vitest/expect@2.1.8':
+ resolution: {integrity: sha512-8ytZ/fFHq2g4PJVAtDX57mayemKgDR6X3Oa2Foro+EygiOJHUXhCqBAAKQYYajZpFoIfvBCF1j6R6IYRSIUFuw==}
+
+ '@vitest/mocker@2.1.8':
+ resolution: {integrity: sha512-7guJ/47I6uqfttp33mgo6ga5Gr1VnL58rcqYKyShoRK9ebu8T5Rs6HN3s1NABiBeVTdWNrwUMcHH54uXZBN4zA==}
+ peerDependencies:
+ msw: ^2.4.9
+ vite: ^5.0.0
+ peerDependenciesMeta:
+ msw:
+ optional: true
+ vite:
+ optional: true
+
+ '@vitest/pretty-format@2.1.8':
+ resolution: {integrity: sha512-9HiSZ9zpqNLKlbIDRWOnAWqgcA7xu+8YxXSekhr0Ykab7PAYFkhkwoqVArPOtJhPmYeE2YHgKZlj3CP36z2AJQ==}
+
+ '@vitest/runner@2.1.8':
+ resolution: {integrity: sha512-17ub8vQstRnRlIU5k50bG+QOMLHRhYPAna5tw8tYbj+jzjcspnwnwtPtiOlkuKC4+ixDPTuLZiqiWWQ2PSXHVg==}
+
+ '@vitest/snapshot@2.1.8':
+ resolution: {integrity: sha512-20T7xRFbmnkfcmgVEz+z3AU/3b0cEzZOt/zmnvZEctg64/QZbSDJEVm9fLnnlSi74KibmRsO9/Qabi+t0vCRPg==}
+
+ '@vitest/spy@2.1.8':
+ resolution: {integrity: sha512-5swjf2q95gXeYPevtW0BLk6H8+bPlMb4Vw/9Em4hFxDcaOxS+e0LOX4yqNxoHzMR2akEB2xfpnWUzkZokmgWDg==}
+
+ '@vitest/utils@2.1.8':
+ resolution: {integrity: sha512-dwSoui6djdwbfFmIgbIjX2ZhIoG7Ex/+xpxyiEgIGzjliY8xGkcpITKTlp6B4MgtGkF2ilvm97cPM96XZaAgcA==}
+
+ '@volar/language-core@2.4.10':
+ resolution: {integrity: sha512-hG3Z13+nJmGaT+fnQzAkS0hjJRa2FCeqZt6Bd+oGNhUkQ+mTFsDETg5rqUTxyzIh5pSOGY7FHCWUS8G82AzLCA==}
+
+ '@volar/source-map@2.4.10':
+ resolution: {integrity: sha512-OCV+b5ihV0RF3A7vEvNyHPi4G4kFa6ukPmyVocmqm5QzOd8r5yAtiNvaPEjl8dNvgC/lj4JPryeeHLdXd62rWA==}
+
+ '@volar/typescript@2.4.10':
+ resolution: {integrity: sha512-F8ZtBMhSXyYKuBfGpYwqA5rsONnOwAVvjyE7KPYJ7wgZqo2roASqNWUnianOomJX5u1cxeRooHV59N0PhvEOgw==}
+
+ '@vue/babel-helper-vue-jsx-merge-props@1.4.0':
+ resolution: {integrity: sha512-JkqXfCkUDp4PIlFdDQ0TdXoIejMtTHP67/pvxlgeY+u5k3LEdKuWZ3LK6xkxo52uDoABIVyRwqVkfLQJhk7VBA==}
+
+ '@vue/babel-helper-vue-transform-on@1.2.5':
+ resolution: {integrity: sha512-lOz4t39ZdmU4DJAa2hwPYmKc8EsuGa2U0L9KaZaOJUt0UwQNjNA3AZTq6uEivhOKhhG1Wvy96SvYBoFmCg3uuw==}
+
+ '@vue/babel-plugin-jsx@1.2.5':
+ resolution: {integrity: sha512-zTrNmOd4939H9KsRIGmmzn3q2zvv1mjxkYZHgqHZgDrXz5B1Q3WyGEjO2f+JrmKghvl1JIRcvo63LgM1kH5zFg==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ peerDependenciesMeta:
+ '@babel/core':
+ optional: true
+
+ '@vue/babel-plugin-resolve-type@1.2.5':
+ resolution: {integrity: sha512-U/ibkQrf5sx0XXRnUZD1mo5F7PkpKyTbfXM3a3rC4YnUz6crHEz9Jg09jzzL6QYlXNto/9CePdOg/c87O4Nlfg==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@vue/babel-plugin-transform-vue-jsx@1.4.0':
+ resolution: {integrity: sha512-Fmastxw4MMx0vlgLS4XBX0XiBbUFzoMGeVXuMV08wyOfXdikAFqBTuYPR0tlk+XskL19EzHc39SgjrPGY23JnA==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@vue/babel-preset-jsx@1.4.0':
+ resolution: {integrity: sha512-QmfRpssBOPZWL5xw7fOuHNifCQcNQC1PrOo/4fu6xlhlKJJKSA3HqX92Nvgyx8fqHZTUGMPHmFA+IDqwXlqkSA==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ vue: '*'
+ peerDependenciesMeta:
+ vue:
+ optional: true
+
+ '@vue/babel-sugar-composition-api-inject-h@1.4.0':
+ resolution: {integrity: sha512-VQq6zEddJHctnG4w3TfmlVp5FzDavUSut/DwR0xVoe/mJKXyMcsIibL42wPntozITEoY90aBV0/1d2KjxHU52g==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@vue/babel-sugar-composition-api-render-instance@1.4.0':
+ resolution: {integrity: sha512-6ZDAzcxvy7VcnCjNdHJ59mwK02ZFuP5CnucloidqlZwVQv5CQLijc3lGpR7MD3TWFi78J7+a8J56YxbCtHgT9Q==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@vue/babel-sugar-functional-vue@1.4.0':
+ resolution: {integrity: sha512-lTEB4WUFNzYt2In6JsoF9sAYVTo84wC4e+PoZWSgM6FUtqRJz7wMylaEhSRgG71YF+wfLD6cc9nqVeXN2rwBvw==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@vue/babel-sugar-inject-h@1.4.0':
+ resolution: {integrity: sha512-muwWrPKli77uO2fFM7eA3G1lAGnERuSz2NgAxuOLzrsTlQl8W4G+wwbM4nB6iewlKbwKRae3nL03UaF5ffAPMA==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@vue/babel-sugar-v-model@1.4.0':
+ resolution: {integrity: sha512-0t4HGgXb7WHYLBciZzN5s0Hzqan4Ue+p/3FdQdcaHAb7s5D9WZFGoSxEZHrR1TFVZlAPu1bejTKGeAzaaG3NCQ==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@vue/babel-sugar-v-on@1.4.0':
+ resolution: {integrity: sha512-m+zud4wKLzSKgQrWwhqRObWzmTuyzl6vOP7024lrpeJM4x2UhQtRDLgYjXAw9xBXjCwS0pP9kXjg91F9ZNo9JA==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@vue/compiler-core@3.5.13':
+ resolution: {integrity: sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q==}
+
+ '@vue/compiler-dom@3.5.13':
+ resolution: {integrity: sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA==}
+
+ '@vue/compiler-sfc@2.7.16':
+ resolution: {integrity: sha512-KWhJ9k5nXuNtygPU7+t1rX6baZeqOYLEforUPjgNDBnLicfHCoi48H87Q8XyLZOrNNsmhuwKqtpDQWjEFe6Ekg==}
+
+ '@vue/compiler-sfc@3.5.13':
+ resolution: {integrity: sha512-6VdaljMpD82w6c2749Zhf5T9u5uLBWKnVue6XWxprDobftnletJ8+oel7sexFfM3qIxNmVE7LSFGTpv6obNyaQ==}
+
+ '@vue/compiler-ssr@3.5.13':
+ resolution: {integrity: sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA==}
+
+ '@vue/compiler-vue2@2.7.16':
+ resolution: {integrity: sha512-qYC3Psj9S/mfu9uVi5WvNZIzq+xnXMhOwbTFKKDD7b1lhpnn71jXSFdTQ+WsIEk0ONCd7VV2IMm7ONl6tbQ86A==}
+
+ '@vue/composition-api@1.7.2':
+ resolution: {integrity: sha512-M8jm9J/laYrYT02665HkZ5l2fWTK4dcVg3BsDHm/pfz+MjDYwX+9FUaZyGwEyXEDonQYRCo0H7aLgdklcIELjw==}
+ peerDependencies:
+ vue: '>= 2.5 < 2.7'
+
+ '@vue/language-core@2.1.10':
+ resolution: {integrity: sha512-DAI289d0K3AB5TUG3xDp9OuQ71CnrujQwJrQnfuZDwo6eGNf0UoRlPuaVNO+Zrn65PC3j0oB2i7mNmVPggeGeQ==}
+ peerDependencies:
+ typescript: '*'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+
+ '@vue/reactivity@3.5.13':
+ resolution: {integrity: sha512-NaCwtw8o48B9I6L1zl2p41OHo/2Z4wqYGGIK1Khu5T7yxrn+ATOixn/Udn2m+6kZKB/J7cuT9DbWWhRxqixACg==}
+
+ '@vue/runtime-core@3.5.13':
+ resolution: {integrity: sha512-Fj4YRQ3Az0WTZw1sFe+QDb0aXCerigEpw418pw1HBUKFtnQHWzwojaukAs2X/c9DQz4MQ4bsXTGlcpGxU/RCIw==}
+
+ '@vue/runtime-dom@3.5.13':
+ resolution: {integrity: sha512-dLaj94s93NYLqjLiyFzVs9X6dWhTdAlEAciC3Moq7gzAc13VJUdCnjjRurNM6uTLFATRHexHCTu/Xp3eW6yoog==}
+
+ '@vue/server-renderer@3.5.13':
+ resolution: {integrity: sha512-wAi4IRJV/2SAW3htkTlB+dHeRmpTiVIK1OGLWV1yeStVSebSQQOwGwIq0D3ZIoBj2C2qpgz5+vX9iEBkTdk5YA==}
+ peerDependencies:
+ vue: 3.5.13
+
+ '@vue/shared@3.5.13':
+ resolution: {integrity: sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==}
+
+ alien-signals@0.2.2:
+ resolution: {integrity: sha512-cZIRkbERILsBOXTQmMrxc9hgpxglstn69zm+F1ARf4aPAzdAFYd6sBq87ErO0Fj3DV94tglcyHG5kQz9nDC/8A==}
+
+ assertion-error@2.0.1:
+ resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==}
+ engines: {node: '>=12'}
+
+ balanced-match@1.0.2:
+ resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
+
+ brace-expansion@2.0.1:
+ resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==}
+
+ browserslist@4.24.2:
+ resolution: {integrity: sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==}
+ engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
+ hasBin: true
+
+ cac@6.7.14:
+ resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==}
+ engines: {node: '>=8'}
+
+ camelcase@5.3.1:
+ resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==}
+ engines: {node: '>=6'}
+
+ caniuse-lite@1.0.30001687:
+ resolution: {integrity: sha512-0S/FDhf4ZiqrTUiQ39dKeUjYRjkv7lOZU1Dgif2rIqrTzX/1wV2hfKu9TOm1IHkdSijfLswxTFzl/cvir+SLSQ==}
+
+ chai@5.1.2:
+ resolution: {integrity: sha512-aGtmf24DW6MLHHG5gCx4zaI3uBq3KRtxeVs0DjFH6Z0rDNbsvTxFASFvdj79pxjxZ8/5u3PIiN3IwEIQkiiuPw==}
+ engines: {node: '>=12'}
+
+ check-error@2.1.1:
+ resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==}
+ engines: {node: '>= 16'}
+
+ convert-source-map@2.0.0:
+ resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
+
+ csstype@3.1.3:
+ resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==}
+
+ de-indent@1.0.2:
+ resolution: {integrity: sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==}
+
+ debug@4.4.0:
+ resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==}
+ engines: {node: '>=6.0'}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
+ deep-eql@5.0.2:
+ resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==}
+ engines: {node: '>=6'}
+
+ electron-to-chromium@1.5.71:
+ resolution: {integrity: sha512-dB68l59BI75W1BUGVTAEJy45CEVuEGy9qPVVQ8pnHyHMn36PLPPoE1mjLH+lo9rKulO3HC2OhbACI/8tCqJBcA==}
+
+ entities@4.5.0:
+ resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==}
+ engines: {node: '>=0.12'}
+
+ es-module-lexer@1.5.4:
+ resolution: {integrity: sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==}
+
+ esbuild@0.21.5:
+ resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==}
+ engines: {node: '>=12'}
+ hasBin: true
+
+ esbuild@0.24.0:
+ resolution: {integrity: sha512-FuLPevChGDshgSicjisSooU0cemp/sGXR841D5LHMB7mTVOmsEHcAxaH3irL53+8YDIeVNQEySh4DaYU/iuPqQ==}
+ engines: {node: '>=18'}
+ hasBin: true
+
+ escalade@3.2.0:
+ resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
+ engines: {node: '>=6'}
+
+ estree-walker@2.0.2:
+ resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
+
+ estree-walker@3.0.3:
+ resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==}
+
+ expect-type@1.1.0:
+ resolution: {integrity: sha512-bFi65yM+xZgk+u/KRIpekdSYkTB5W1pEf0Lt8Q8Msh7b+eQ7LXVtIB1Bkm4fvclDEL1b2CZkMhv2mOeF8tMdkA==}
+ engines: {node: '>=12.0.0'}
+
+ fsevents@2.3.3:
+ resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
+ engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+ os: [darwin]
+
+ gensync@1.0.0-beta.2:
+ resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==}
+ engines: {node: '>=6.9.0'}
+
+ globals@11.12.0:
+ resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==}
+ engines: {node: '>=4'}
+
+ he@1.2.0:
+ resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==}
+ hasBin: true
+
+ html-tags@2.0.0:
+ resolution: {integrity: sha512-+Il6N8cCo2wB/Vd3gqy/8TZhTD3QvcVeQLCnZiGkGCH3JP28IgGAY41giccp2W4R3jfyJPAP318FQTa1yU7K7g==}
+ engines: {node: '>=4'}
+
+ html-tags@3.3.1:
+ resolution: {integrity: sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==}
+ engines: {node: '>=8'}
+
+ js-tokens@4.0.0:
+ resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
+
+ jsesc@3.0.2:
+ resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==}
+ engines: {node: '>=6'}
+ hasBin: true
+
+ json5@2.2.3:
+ resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==}
+ engines: {node: '>=6'}
+ hasBin: true
+
+ lodash.kebabcase@4.1.1:
+ resolution: {integrity: sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==}
+
+ loupe@3.1.2:
+ resolution: {integrity: sha512-23I4pFZHmAemUnz8WZXbYRSKYj801VDaNv9ETuMh7IrMc7VuVVSo+Z9iLE3ni30+U48iDWfi30d3twAXBYmnCg==}
+
+ lru-cache@5.1.1:
+ resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
+
+ magic-string@0.30.14:
+ resolution: {integrity: sha512-5c99P1WKTed11ZC0HMJOj6CDIue6F8ySu+bJL+85q1zBEIY8IklrJ1eiKC2NDRh3Ct3FcvmJPyQHb9erXMTJNw==}
+
+ minimatch@9.0.5:
+ resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==}
+ engines: {node: '>=16 || 14 >=14.17'}
+
+ ms@2.1.3:
+ resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
+
+ muggle-string@0.4.1:
+ resolution: {integrity: sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==}
+
+ nanoid@3.3.8:
+ resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==}
+ engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
+ hasBin: true
+
+ node-releases@2.0.18:
+ resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==}
+
+ path-browserify@1.0.1:
+ resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==}
+
+ pathe@1.1.2:
+ resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==}
+
+ pathval@2.0.0:
+ resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==}
+ engines: {node: '>= 14.16'}
+
+ picocolors@1.1.1:
+ resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
+
+ picomatch@4.0.2:
+ resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==}
+ engines: {node: '>=12'}
+
+ postcss@8.4.49:
+ resolution: {integrity: sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==}
+ engines: {node: ^10 || ^12 || >=14}
+
+ prettier@2.8.8:
+ resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==}
+ engines: {node: '>=10.13.0'}
+ hasBin: true
+
+ rollup@4.28.0:
+ resolution: {integrity: sha512-G9GOrmgWHBma4YfCcX8PjH0qhXSdH8B4HDE2o4/jaxj93S4DPCIDoLcXz99eWMji4hB29UFCEd7B2gwGJDR9cQ==}
+ engines: {node: '>=18.0.0', npm: '>=8.0.0'}
+ hasBin: true
+
+ semver@6.3.1:
+ resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
+ hasBin: true
+
+ semver@7.6.3:
+ resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==}
+ engines: {node: '>=10'}
+ hasBin: true
+
+ siginfo@2.0.0:
+ resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==}
+
+ source-map-js@1.2.1:
+ resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
+ engines: {node: '>=0.10.0'}
+
+ source-map@0.6.1:
+ resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
+ engines: {node: '>=0.10.0'}
+
+ stackback@0.0.2:
+ resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==}
+
+ std-env@3.8.0:
+ resolution: {integrity: sha512-Bc3YwwCB+OzldMxOXJIIvC6cPRWr/LxOp48CdQTOkPyk/t4JWWJbrilwBd7RJzKV8QW7tJkcgAmeuLLJugl5/w==}
+
+ svg-tags@1.0.0:
+ resolution: {integrity: sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==}
+
+ tinybench@2.9.0:
+ resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==}
+
+ tinyexec@0.3.1:
+ resolution: {integrity: sha512-WiCJLEECkO18gwqIp6+hJg0//p23HXp4S+gGtAKu3mI2F2/sXC4FvHvXvB0zJVVaTPhx1/tOwdbRsa1sOBIKqQ==}
+
+ tinypool@1.0.2:
+ resolution: {integrity: sha512-al6n+QEANGFOMf/dmUMsuS5/r9B06uwlyNjZZql/zv8J7ybHCgoihBNORZCY2mzUuAnomQa2JdhyHKzZxPCrFA==}
+ engines: {node: ^18.0.0 || >=20.0.0}
+
+ tinyrainbow@1.2.0:
+ resolution: {integrity: sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==}
+ engines: {node: '>=14.0.0'}
+
+ tinyspy@3.0.2:
+ resolution: {integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==}
+ engines: {node: '>=14.0.0'}
+
+ typescript@5.6.3:
+ resolution: {integrity: sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==}
+ engines: {node: '>=14.17'}
+ hasBin: true
+
+ undici-types@6.20.0:
+ resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==}
+
+ update-browserslist-db@1.1.1:
+ resolution: {integrity: sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==}
+ hasBin: true
+ peerDependencies:
+ browserslist: '>= 4.21.0'
+
+ vite-node@2.1.8:
+ resolution: {integrity: sha512-uPAwSr57kYjAUux+8E2j0q0Fxpn8M9VoyfGiRI8Kfktz9NcYMCenwY5RnZxnF1WTu3TGiYipirIzacLL3VVGFg==}
+ engines: {node: ^18.0.0 || >=20.0.0}
+ hasBin: true
+
+ vite@5.4.11:
+ resolution: {integrity: sha512-c7jFQRklXua0mTzneGW9QVyxFjUgwcihC4bXEtujIo2ouWCe1Ajt/amn2PCxYnhYfd5k09JX3SB7OYWFKYqj8Q==}
+ engines: {node: ^18.0.0 || >=20.0.0}
+ hasBin: true
+ peerDependencies:
+ '@types/node': ^18.0.0 || >=20.0.0
+ less: '*'
+ lightningcss: ^1.21.0
+ sass: '*'
+ sass-embedded: '*'
+ stylus: '*'
+ sugarss: '*'
+ terser: ^5.4.0
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+ less:
+ optional: true
+ lightningcss:
+ optional: true
+ sass:
+ optional: true
+ sass-embedded:
+ optional: true
+ stylus:
+ optional: true
+ sugarss:
+ optional: true
+ terser:
+ optional: true
+
+ vite@6.0.3:
+ resolution: {integrity: sha512-Cmuo5P0ENTN6HxLSo6IHsjCLn/81Vgrp81oaiFFMRa8gGDj5xEjIcEpf2ZymZtZR8oU0P2JX5WuUp/rlXcHkAw==}
+ engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0}
+ hasBin: true
+ peerDependencies:
+ '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0
+ jiti: '>=1.21.0'
+ less: '*'
+ lightningcss: ^1.21.0
+ sass: '*'
+ sass-embedded: '*'
+ stylus: '*'
+ sugarss: '*'
+ terser: ^5.16.0
+ tsx: ^4.8.1
+ yaml: ^2.4.2
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+ jiti:
+ optional: true
+ less:
+ optional: true
+ lightningcss:
+ optional: true
+ sass:
+ optional: true
+ sass-embedded:
+ optional: true
+ stylus:
+ optional: true
+ sugarss:
+ optional: true
+ terser:
+ optional: true
+ tsx:
+ optional: true
+ yaml:
+ optional: true
+
+ vitest@2.1.8:
+ resolution: {integrity: sha512-1vBKTZskHw/aosXqQUlVWWlGUxSJR8YtiyZDJAFeW2kPAeX6S3Sool0mjspO+kXLuxVWlEDDowBAeqeAQefqLQ==}
+ engines: {node: ^18.0.0 || >=20.0.0}
+ hasBin: true
+ peerDependencies:
+ '@edge-runtime/vm': '*'
+ '@types/node': ^18.0.0 || >=20.0.0
+ '@vitest/browser': 2.1.8
+ '@vitest/ui': 2.1.8
+ happy-dom: '*'
+ jsdom: '*'
+ peerDependenciesMeta:
+ '@edge-runtime/vm':
+ optional: true
+ '@types/node':
+ optional: true
+ '@vitest/browser':
+ optional: true
+ '@vitest/ui':
+ optional: true
+ happy-dom:
+ optional: true
+ jsdom:
+ optional: true
+
+ vscode-uri@3.0.8:
+ resolution: {integrity: sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==}
+
+ vue-demi@0.14.10:
+ resolution: {integrity: sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==}
+ 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-template-compiler@2.7.16:
+ resolution: {integrity: sha512-AYbUWAJHLGGQM7+cNTELw+KsOG9nl2CnSv467WobS5Cv9uk3wFcnr1Etsz2sEIHEZvw1U+o9mRlEO6QbZvUPGQ==}
+
+ vue-tsc@2.1.10:
+ resolution: {integrity: sha512-RBNSfaaRHcN5uqVqJSZh++Gy/YUzryuv9u1aFWhsammDJXNtUiJMNoJ747lZcQ68wUQFx6E73y4FY3D8E7FGMA==}
+ hasBin: true
+ peerDependencies:
+ typescript: '>=5.0.0'
+
+ vue@2.7.16:
+ resolution: {integrity: sha512-4gCtFXaAA3zYZdTp5s4Hl2sozuySsgz4jy1EnpBHNfpMa9dK1ZCG7viqBPCwXtmgc8nHqUsAu3G4gtmXkkY3Sw==}
+ deprecated: Vue 2 has reached EOL and is no longer actively maintained. See https://v2.vuejs.org/eol/ for more details.
+
+ vue@3.5.13:
+ resolution: {integrity: sha512-wmeiSMxkZCSc+PM2w2VRsOYAZC8GdipNFRTsLSfodVqI9mbejKeXEGr8SckuLnrQPGe3oJN5c3K0vpoU9q/wCQ==}
+ peerDependencies:
+ typescript: '*'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+
+ why-is-node-running@2.3.0:
+ resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==}
+ engines: {node: '>=8'}
+ hasBin: true
+
+ yallist@3.1.1:
+ resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
+
+snapshots:
+
+ '@ampproject/remapping@2.3.0':
+ dependencies:
+ '@jridgewell/gen-mapping': 0.3.5
+ '@jridgewell/trace-mapping': 0.3.25
+
+ '@babel/code-frame@7.26.2':
+ dependencies:
+ '@babel/helper-validator-identifier': 7.25.9
+ js-tokens: 4.0.0
+ picocolors: 1.1.1
+
+ '@babel/compat-data@7.26.3': {}
+
+ '@babel/core@7.26.0':
+ dependencies:
+ '@ampproject/remapping': 2.3.0
+ '@babel/code-frame': 7.26.2
+ '@babel/generator': 7.26.3
+ '@babel/helper-compilation-targets': 7.25.9
+ '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0)
+ '@babel/helpers': 7.26.0
+ '@babel/parser': 7.26.3
+ '@babel/template': 7.25.9
+ '@babel/traverse': 7.26.4
+ '@babel/types': 7.26.3
+ convert-source-map: 2.0.0
+ debug: 4.4.0
+ gensync: 1.0.0-beta.2
+ json5: 2.2.3
+ semver: 6.3.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/generator@7.26.3':
+ dependencies:
+ '@babel/parser': 7.26.3
+ '@babel/types': 7.26.3
+ '@jridgewell/gen-mapping': 0.3.5
+ '@jridgewell/trace-mapping': 0.3.25
+ jsesc: 3.0.2
+
+ '@babel/helper-annotate-as-pure@7.25.9':
+ dependencies:
+ '@babel/types': 7.26.3
+
+ '@babel/helper-compilation-targets@7.25.9':
+ dependencies:
+ '@babel/compat-data': 7.26.3
+ '@babel/helper-validator-option': 7.25.9
+ browserslist: 4.24.2
+ lru-cache: 5.1.1
+ semver: 6.3.1
+
+ '@babel/helper-create-class-features-plugin@7.25.9(@babel/core@7.26.0)':
+ dependencies:
+ '@babel/core': 7.26.0
+ '@babel/helper-annotate-as-pure': 7.25.9
+ '@babel/helper-member-expression-to-functions': 7.25.9
+ '@babel/helper-optimise-call-expression': 7.25.9
+ '@babel/helper-replace-supers': 7.25.9(@babel/core@7.26.0)
+ '@babel/helper-skip-transparent-expression-wrappers': 7.25.9
+ '@babel/traverse': 7.26.4
+ semver: 6.3.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-member-expression-to-functions@7.25.9':
+ dependencies:
+ '@babel/traverse': 7.26.4
+ '@babel/types': 7.26.3
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-module-imports@7.25.9':
+ dependencies:
+ '@babel/traverse': 7.26.4
+ '@babel/types': 7.26.3
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-module-transforms@7.26.0(@babel/core@7.26.0)':
+ dependencies:
+ '@babel/core': 7.26.0
+ '@babel/helper-module-imports': 7.25.9
+ '@babel/helper-validator-identifier': 7.25.9
+ '@babel/traverse': 7.26.4
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-optimise-call-expression@7.25.9':
+ dependencies:
+ '@babel/types': 7.26.3
+
+ '@babel/helper-plugin-utils@7.25.9': {}
+
+ '@babel/helper-replace-supers@7.25.9(@babel/core@7.26.0)':
+ dependencies:
+ '@babel/core': 7.26.0
+ '@babel/helper-member-expression-to-functions': 7.25.9
+ '@babel/helper-optimise-call-expression': 7.25.9
+ '@babel/traverse': 7.26.4
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-skip-transparent-expression-wrappers@7.25.9':
+ dependencies:
+ '@babel/traverse': 7.26.4
+ '@babel/types': 7.26.3
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-string-parser@7.25.9': {}
+
+ '@babel/helper-validator-identifier@7.25.9': {}
+
+ '@babel/helper-validator-option@7.25.9': {}
+
+ '@babel/helpers@7.26.0':
+ dependencies:
+ '@babel/template': 7.25.9
+ '@babel/types': 7.26.3
+
+ '@babel/parser@7.26.3':
+ dependencies:
+ '@babel/types': 7.26.3
+
+ '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.26.0)':
+ dependencies:
+ '@babel/core': 7.26.0
+ '@babel/helper-plugin-utils': 7.25.9
+
+ '@babel/plugin-syntax-jsx@7.25.9(@babel/core@7.26.0)':
+ dependencies:
+ '@babel/core': 7.26.0
+ '@babel/helper-plugin-utils': 7.25.9
+
+ '@babel/plugin-syntax-typescript@7.25.9(@babel/core@7.26.0)':
+ dependencies:
+ '@babel/core': 7.26.0
+ '@babel/helper-plugin-utils': 7.25.9
+
+ '@babel/plugin-transform-typescript@7.26.3(@babel/core@7.26.0)':
+ dependencies:
+ '@babel/core': 7.26.0
+ '@babel/helper-annotate-as-pure': 7.25.9
+ '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.0)
+ '@babel/helper-plugin-utils': 7.25.9
+ '@babel/helper-skip-transparent-expression-wrappers': 7.25.9
+ '@babel/plugin-syntax-typescript': 7.25.9(@babel/core@7.26.0)
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/template@7.25.9':
+ dependencies:
+ '@babel/code-frame': 7.26.2
+ '@babel/parser': 7.26.3
+ '@babel/types': 7.26.3
+
+ '@babel/traverse@7.26.4':
+ dependencies:
+ '@babel/code-frame': 7.26.2
+ '@babel/generator': 7.26.3
+ '@babel/parser': 7.26.3
+ '@babel/template': 7.25.9
+ '@babel/types': 7.26.3
+ debug: 4.4.0
+ globals: 11.12.0
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/types@7.26.3':
+ dependencies:
+ '@babel/helper-string-parser': 7.25.9
+ '@babel/helper-validator-identifier': 7.25.9
+
+ '@esbuild/aix-ppc64@0.21.5':
+ optional: true
+
+ '@esbuild/aix-ppc64@0.24.0':
+ optional: true
+
+ '@esbuild/android-arm64@0.21.5':
+ optional: true
+
+ '@esbuild/android-arm64@0.24.0':
+ optional: true
+
+ '@esbuild/android-arm@0.21.5':
+ optional: true
+
+ '@esbuild/android-arm@0.24.0':
+ optional: true
+
+ '@esbuild/android-x64@0.21.5':
+ optional: true
+
+ '@esbuild/android-x64@0.24.0':
+ optional: true
+
+ '@esbuild/darwin-arm64@0.21.5':
+ optional: true
+
+ '@esbuild/darwin-arm64@0.24.0':
+ optional: true
+
+ '@esbuild/darwin-x64@0.21.5':
+ optional: true
+
+ '@esbuild/darwin-x64@0.24.0':
+ optional: true
+
+ '@esbuild/freebsd-arm64@0.21.5':
+ optional: true
+
+ '@esbuild/freebsd-arm64@0.24.0':
+ optional: true
+
+ '@esbuild/freebsd-x64@0.21.5':
+ optional: true
+
+ '@esbuild/freebsd-x64@0.24.0':
+ optional: true
+
+ '@esbuild/linux-arm64@0.21.5':
+ optional: true
+
+ '@esbuild/linux-arm64@0.24.0':
+ optional: true
+
+ '@esbuild/linux-arm@0.21.5':
+ optional: true
+
+ '@esbuild/linux-arm@0.24.0':
+ optional: true
+
+ '@esbuild/linux-ia32@0.21.5':
+ optional: true
+
+ '@esbuild/linux-ia32@0.24.0':
+ optional: true
+
+ '@esbuild/linux-loong64@0.21.5':
+ optional: true
+
+ '@esbuild/linux-loong64@0.24.0':
+ optional: true
+
+ '@esbuild/linux-mips64el@0.21.5':
+ optional: true
+
+ '@esbuild/linux-mips64el@0.24.0':
+ optional: true
+
+ '@esbuild/linux-ppc64@0.21.5':
+ optional: true
+
+ '@esbuild/linux-ppc64@0.24.0':
+ optional: true
+
+ '@esbuild/linux-riscv64@0.21.5':
+ optional: true
+
+ '@esbuild/linux-riscv64@0.24.0':
+ optional: true
+
+ '@esbuild/linux-s390x@0.21.5':
+ optional: true
+
+ '@esbuild/linux-s390x@0.24.0':
+ optional: true
+
+ '@esbuild/linux-x64@0.21.5':
+ optional: true
+
+ '@esbuild/linux-x64@0.24.0':
+ optional: true
+
+ '@esbuild/netbsd-x64@0.21.5':
+ optional: true
+
+ '@esbuild/netbsd-x64@0.24.0':
+ optional: true
+
+ '@esbuild/openbsd-arm64@0.24.0':
+ optional: true
+
+ '@esbuild/openbsd-x64@0.21.5':
+ optional: true
+
+ '@esbuild/openbsd-x64@0.24.0':
+ optional: true
+
+ '@esbuild/sunos-x64@0.21.5':
+ optional: true
+
+ '@esbuild/sunos-x64@0.24.0':
+ optional: true
+
+ '@esbuild/win32-arm64@0.21.5':
+ optional: true
+
+ '@esbuild/win32-arm64@0.24.0':
+ optional: true
+
+ '@esbuild/win32-ia32@0.21.5':
+ optional: true
+
+ '@esbuild/win32-ia32@0.24.0':
+ optional: true
+
+ '@esbuild/win32-x64@0.21.5':
+ optional: true
+
+ '@esbuild/win32-x64@0.24.0':
+ optional: true
+
+ '@jridgewell/gen-mapping@0.3.5':
+ dependencies:
+ '@jridgewell/set-array': 1.2.1
+ '@jridgewell/sourcemap-codec': 1.5.0
+ '@jridgewell/trace-mapping': 0.3.25
+
+ '@jridgewell/resolve-uri@3.1.2': {}
+
+ '@jridgewell/set-array@1.2.1': {}
+
+ '@jridgewell/sourcemap-codec@1.5.0': {}
+
+ '@jridgewell/trace-mapping@0.3.25':
+ dependencies:
+ '@jridgewell/resolve-uri': 3.1.2
+ '@jridgewell/sourcemap-codec': 1.5.0
+
+ '@rollup/pluginutils@5.1.4(rollup@4.28.0)':
+ dependencies:
+ '@types/estree': 1.0.6
+ estree-walker: 2.0.2
+ picomatch: 4.0.2
+ optionalDependencies:
+ rollup: 4.28.0
+
+ '@rollup/rollup-android-arm-eabi@4.28.0':
+ optional: true
+
+ '@rollup/rollup-android-arm64@4.28.0':
+ optional: true
+
+ '@rollup/rollup-darwin-arm64@4.28.0':
+ optional: true
+
+ '@rollup/rollup-darwin-x64@4.28.0':
+ optional: true
+
+ '@rollup/rollup-freebsd-arm64@4.28.0':
+ optional: true
+
+ '@rollup/rollup-freebsd-x64@4.28.0':
+ optional: true
+
+ '@rollup/rollup-linux-arm-gnueabihf@4.28.0':
+ optional: true
+
+ '@rollup/rollup-linux-arm-musleabihf@4.28.0':
+ optional: true
+
+ '@rollup/rollup-linux-arm64-gnu@4.28.0':
+ optional: true
+
+ '@rollup/rollup-linux-arm64-musl@4.28.0':
+ optional: true
+
+ '@rollup/rollup-linux-powerpc64le-gnu@4.28.0':
+ optional: true
+
+ '@rollup/rollup-linux-riscv64-gnu@4.28.0':
+ optional: true
+
+ '@rollup/rollup-linux-s390x-gnu@4.28.0':
+ optional: true
+
+ '@rollup/rollup-linux-x64-gnu@4.28.0':
+ optional: true
+
+ '@rollup/rollup-linux-x64-musl@4.28.0':
+ optional: true
+
+ '@rollup/rollup-win32-arm64-msvc@4.28.0':
+ optional: true
+
+ '@rollup/rollup-win32-ia32-msvc@4.28.0':
+ optional: true
+
+ '@rollup/rollup-win32-x64-msvc@4.28.0':
+ optional: true
+
+ '@types/estree@1.0.6': {}
+
+ '@types/node@22.10.2':
+ dependencies:
+ undici-types: 6.20.0
+
+ '@vitejs/plugin-vue-jsx@4.1.1(vite@6.0.3(@types/node@22.10.2))(vue@3.5.13(typescript@5.6.3))':
+ dependencies:
+ '@babel/core': 7.26.0
+ '@babel/plugin-transform-typescript': 7.26.3(@babel/core@7.26.0)
+ '@vue/babel-plugin-jsx': 1.2.5(@babel/core@7.26.0)
+ vite: 6.0.3(@types/node@22.10.2)
+ vue: 3.5.13(typescript@5.6.3)
+ transitivePeerDependencies:
+ - supports-color
+
+ '@vitejs/plugin-vue2-jsx@1.1.1(rollup@4.28.0)(vite@6.0.3(@types/node@22.10.2))(vue@3.5.13(typescript@5.6.3))':
+ dependencies:
+ '@babel/core': 7.26.0
+ '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.26.0)
+ '@babel/plugin-transform-typescript': 7.26.3(@babel/core@7.26.0)
+ '@rollup/pluginutils': 5.1.4(rollup@4.28.0)
+ '@vue/babel-preset-jsx': 1.4.0(@babel/core@7.26.0)(vue@3.5.13(typescript@5.6.3))
+ vite: 6.0.3(@types/node@22.10.2)
+ vue: 3.5.13(typescript@5.6.3)
+ transitivePeerDependencies:
+ - rollup
+ - supports-color
+
+ '@vitejs/plugin-vue2@2.3.3(vite@6.0.3(@types/node@22.10.2))(vue@3.5.13(typescript@5.6.3))':
+ dependencies:
+ vite: 6.0.3(@types/node@22.10.2)
+ vue: 3.5.13(typescript@5.6.3)
+
+ '@vitejs/plugin-vue@5.2.1(vite@6.0.3(@types/node@22.10.2))(vue@3.5.13(typescript@5.6.3))':
+ dependencies:
+ vite: 6.0.3(@types/node@22.10.2)
+ vue: 3.5.13(typescript@5.6.3)
+
+ '@vitest/expect@2.1.8':
+ dependencies:
+ '@vitest/spy': 2.1.8
+ '@vitest/utils': 2.1.8
+ chai: 5.1.2
+ tinyrainbow: 1.2.0
+
+ '@vitest/mocker@2.1.8(vite@5.4.11(@types/node@22.10.2))':
+ dependencies:
+ '@vitest/spy': 2.1.8
+ estree-walker: 3.0.3
+ magic-string: 0.30.14
+ optionalDependencies:
+ vite: 5.4.11(@types/node@22.10.2)
+
+ '@vitest/pretty-format@2.1.8':
+ dependencies:
+ tinyrainbow: 1.2.0
+
+ '@vitest/runner@2.1.8':
+ dependencies:
+ '@vitest/utils': 2.1.8
+ pathe: 1.1.2
+
+ '@vitest/snapshot@2.1.8':
+ dependencies:
+ '@vitest/pretty-format': 2.1.8
+ magic-string: 0.30.14
+ pathe: 1.1.2
+
+ '@vitest/spy@2.1.8':
+ dependencies:
+ tinyspy: 3.0.2
+
+ '@vitest/utils@2.1.8':
+ dependencies:
+ '@vitest/pretty-format': 2.1.8
+ loupe: 3.1.2
+ tinyrainbow: 1.2.0
+
+ '@volar/language-core@2.4.10':
+ dependencies:
+ '@volar/source-map': 2.4.10
+
+ '@volar/source-map@2.4.10': {}
+
+ '@volar/typescript@2.4.10':
+ dependencies:
+ '@volar/language-core': 2.4.10
+ path-browserify: 1.0.1
+ vscode-uri: 3.0.8
+
+ '@vue/babel-helper-vue-jsx-merge-props@1.4.0': {}
+
+ '@vue/babel-helper-vue-transform-on@1.2.5': {}
+
+ '@vue/babel-plugin-jsx@1.2.5(@babel/core@7.26.0)':
+ dependencies:
+ '@babel/helper-module-imports': 7.25.9
+ '@babel/helper-plugin-utils': 7.25.9
+ '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.0)
+ '@babel/template': 7.25.9
+ '@babel/traverse': 7.26.4
+ '@babel/types': 7.26.3
+ '@vue/babel-helper-vue-transform-on': 1.2.5
+ '@vue/babel-plugin-resolve-type': 1.2.5(@babel/core@7.26.0)
+ html-tags: 3.3.1
+ svg-tags: 1.0.0
+ optionalDependencies:
+ '@babel/core': 7.26.0
+ transitivePeerDependencies:
+ - supports-color
+
+ '@vue/babel-plugin-resolve-type@1.2.5(@babel/core@7.26.0)':
+ dependencies:
+ '@babel/code-frame': 7.26.2
+ '@babel/core': 7.26.0
+ '@babel/helper-module-imports': 7.25.9
+ '@babel/helper-plugin-utils': 7.25.9
+ '@babel/parser': 7.26.3
+ '@vue/compiler-sfc': 3.5.13
+ transitivePeerDependencies:
+ - supports-color
+
+ '@vue/babel-plugin-transform-vue-jsx@1.4.0(@babel/core@7.26.0)':
+ dependencies:
+ '@babel/core': 7.26.0
+ '@babel/helper-module-imports': 7.25.9
+ '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.0)
+ '@vue/babel-helper-vue-jsx-merge-props': 1.4.0
+ html-tags: 2.0.0
+ lodash.kebabcase: 4.1.1
+ svg-tags: 1.0.0
+ transitivePeerDependencies:
+ - supports-color
+
+ '@vue/babel-preset-jsx@1.4.0(@babel/core@7.26.0)(vue@3.5.13(typescript@5.6.3))':
+ dependencies:
+ '@babel/core': 7.26.0
+ '@vue/babel-helper-vue-jsx-merge-props': 1.4.0
+ '@vue/babel-plugin-transform-vue-jsx': 1.4.0(@babel/core@7.26.0)
+ '@vue/babel-sugar-composition-api-inject-h': 1.4.0(@babel/core@7.26.0)
+ '@vue/babel-sugar-composition-api-render-instance': 1.4.0(@babel/core@7.26.0)
+ '@vue/babel-sugar-functional-vue': 1.4.0(@babel/core@7.26.0)
+ '@vue/babel-sugar-inject-h': 1.4.0(@babel/core@7.26.0)
+ '@vue/babel-sugar-v-model': 1.4.0(@babel/core@7.26.0)
+ '@vue/babel-sugar-v-on': 1.4.0(@babel/core@7.26.0)
+ optionalDependencies:
+ vue: 3.5.13(typescript@5.6.3)
+ transitivePeerDependencies:
+ - supports-color
+
+ '@vue/babel-sugar-composition-api-inject-h@1.4.0(@babel/core@7.26.0)':
+ dependencies:
+ '@babel/core': 7.26.0
+ '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.0)
+
+ '@vue/babel-sugar-composition-api-render-instance@1.4.0(@babel/core@7.26.0)':
+ dependencies:
+ '@babel/core': 7.26.0
+ '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.0)
+
+ '@vue/babel-sugar-functional-vue@1.4.0(@babel/core@7.26.0)':
+ dependencies:
+ '@babel/core': 7.26.0
+ '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.0)
+
+ '@vue/babel-sugar-inject-h@1.4.0(@babel/core@7.26.0)':
+ dependencies:
+ '@babel/core': 7.26.0
+ '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.0)
+
+ '@vue/babel-sugar-v-model@1.4.0(@babel/core@7.26.0)':
+ dependencies:
+ '@babel/core': 7.26.0
+ '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.0)
+ '@vue/babel-helper-vue-jsx-merge-props': 1.4.0
+ '@vue/babel-plugin-transform-vue-jsx': 1.4.0(@babel/core@7.26.0)
+ camelcase: 5.3.1
+ html-tags: 2.0.0
+ svg-tags: 1.0.0
+ transitivePeerDependencies:
+ - supports-color
+
+ '@vue/babel-sugar-v-on@1.4.0(@babel/core@7.26.0)':
+ dependencies:
+ '@babel/core': 7.26.0
+ '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.0)
+ '@vue/babel-plugin-transform-vue-jsx': 1.4.0(@babel/core@7.26.0)
+ camelcase: 5.3.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@vue/compiler-core@3.5.13':
+ dependencies:
+ '@babel/parser': 7.26.3
+ '@vue/shared': 3.5.13
+ entities: 4.5.0
+ estree-walker: 2.0.2
+ source-map-js: 1.2.1
+
+ '@vue/compiler-dom@3.5.13':
+ dependencies:
+ '@vue/compiler-core': 3.5.13
+ '@vue/shared': 3.5.13
+
+ '@vue/compiler-sfc@2.7.16':
+ dependencies:
+ '@babel/parser': 7.26.3
+ postcss: 8.4.49
+ source-map: 0.6.1
+ optionalDependencies:
+ prettier: 2.8.8
+
+ '@vue/compiler-sfc@3.5.13':
+ dependencies:
+ '@babel/parser': 7.26.3
+ '@vue/compiler-core': 3.5.13
+ '@vue/compiler-dom': 3.5.13
+ '@vue/compiler-ssr': 3.5.13
+ '@vue/shared': 3.5.13
+ estree-walker: 2.0.2
+ magic-string: 0.30.14
+ postcss: 8.4.49
+ source-map-js: 1.2.1
+
+ '@vue/compiler-ssr@3.5.13':
+ dependencies:
+ '@vue/compiler-dom': 3.5.13
+ '@vue/shared': 3.5.13
+
+ '@vue/compiler-vue2@2.7.16':
+ dependencies:
+ de-indent: 1.0.2
+ he: 1.2.0
+
+ '@vue/composition-api@1.7.2(vue@3.5.13(typescript@5.6.3))':
+ dependencies:
+ vue: 3.5.13(typescript@5.6.3)
+ optional: true
+
+ '@vue/language-core@2.1.10(typescript@5.6.3)':
+ dependencies:
+ '@volar/language-core': 2.4.10
+ '@vue/compiler-dom': 3.5.13
+ '@vue/compiler-vue2': 2.7.16
+ '@vue/shared': 3.5.13
+ alien-signals: 0.2.2
+ minimatch: 9.0.5
+ muggle-string: 0.4.1
+ path-browserify: 1.0.1
+ optionalDependencies:
+ typescript: 5.6.3
+
+ '@vue/reactivity@3.5.13':
+ dependencies:
+ '@vue/shared': 3.5.13
+
+ '@vue/runtime-core@3.5.13':
+ dependencies:
+ '@vue/reactivity': 3.5.13
+ '@vue/shared': 3.5.13
+
+ '@vue/runtime-dom@3.5.13':
+ dependencies:
+ '@vue/reactivity': 3.5.13
+ '@vue/runtime-core': 3.5.13
+ '@vue/shared': 3.5.13
+ csstype: 3.1.3
+
+ '@vue/server-renderer@3.5.13(vue@3.5.13(typescript@5.6.3))':
+ dependencies:
+ '@vue/compiler-ssr': 3.5.13
+ '@vue/shared': 3.5.13
+ vue: 3.5.13(typescript@5.6.3)
+
+ '@vue/shared@3.5.13': {}
+
+ alien-signals@0.2.2: {}
+
+ assertion-error@2.0.1: {}
+
+ balanced-match@1.0.2: {}
+
+ brace-expansion@2.0.1:
+ dependencies:
+ balanced-match: 1.0.2
+
+ browserslist@4.24.2:
+ dependencies:
+ caniuse-lite: 1.0.30001687
+ electron-to-chromium: 1.5.71
+ node-releases: 2.0.18
+ update-browserslist-db: 1.1.1(browserslist@4.24.2)
+
+ cac@6.7.14: {}
+
+ camelcase@5.3.1: {}
+
+ caniuse-lite@1.0.30001687: {}
+
+ chai@5.1.2:
+ dependencies:
+ assertion-error: 2.0.1
+ check-error: 2.1.1
+ deep-eql: 5.0.2
+ loupe: 3.1.2
+ pathval: 2.0.0
+
+ check-error@2.1.1: {}
+
+ convert-source-map@2.0.0: {}
+
+ csstype@3.1.3: {}
+
+ de-indent@1.0.2: {}
+
+ debug@4.4.0:
+ dependencies:
+ ms: 2.1.3
+
+ deep-eql@5.0.2: {}
+
+ electron-to-chromium@1.5.71: {}
+
+ entities@4.5.0: {}
+
+ es-module-lexer@1.5.4: {}
+
+ esbuild@0.21.5:
+ optionalDependencies:
+ '@esbuild/aix-ppc64': 0.21.5
+ '@esbuild/android-arm': 0.21.5
+ '@esbuild/android-arm64': 0.21.5
+ '@esbuild/android-x64': 0.21.5
+ '@esbuild/darwin-arm64': 0.21.5
+ '@esbuild/darwin-x64': 0.21.5
+ '@esbuild/freebsd-arm64': 0.21.5
+ '@esbuild/freebsd-x64': 0.21.5
+ '@esbuild/linux-arm': 0.21.5
+ '@esbuild/linux-arm64': 0.21.5
+ '@esbuild/linux-ia32': 0.21.5
+ '@esbuild/linux-loong64': 0.21.5
+ '@esbuild/linux-mips64el': 0.21.5
+ '@esbuild/linux-ppc64': 0.21.5
+ '@esbuild/linux-riscv64': 0.21.5
+ '@esbuild/linux-s390x': 0.21.5
+ '@esbuild/linux-x64': 0.21.5
+ '@esbuild/netbsd-x64': 0.21.5
+ '@esbuild/openbsd-x64': 0.21.5
+ '@esbuild/sunos-x64': 0.21.5
+ '@esbuild/win32-arm64': 0.21.5
+ '@esbuild/win32-ia32': 0.21.5
+ '@esbuild/win32-x64': 0.21.5
+
+ esbuild@0.24.0:
+ optionalDependencies:
+ '@esbuild/aix-ppc64': 0.24.0
+ '@esbuild/android-arm': 0.24.0
+ '@esbuild/android-arm64': 0.24.0
+ '@esbuild/android-x64': 0.24.0
+ '@esbuild/darwin-arm64': 0.24.0
+ '@esbuild/darwin-x64': 0.24.0
+ '@esbuild/freebsd-arm64': 0.24.0
+ '@esbuild/freebsd-x64': 0.24.0
+ '@esbuild/linux-arm': 0.24.0
+ '@esbuild/linux-arm64': 0.24.0
+ '@esbuild/linux-ia32': 0.24.0
+ '@esbuild/linux-loong64': 0.24.0
+ '@esbuild/linux-mips64el': 0.24.0
+ '@esbuild/linux-ppc64': 0.24.0
+ '@esbuild/linux-riscv64': 0.24.0
+ '@esbuild/linux-s390x': 0.24.0
+ '@esbuild/linux-x64': 0.24.0
+ '@esbuild/netbsd-x64': 0.24.0
+ '@esbuild/openbsd-arm64': 0.24.0
+ '@esbuild/openbsd-x64': 0.24.0
+ '@esbuild/sunos-x64': 0.24.0
+ '@esbuild/win32-arm64': 0.24.0
+ '@esbuild/win32-ia32': 0.24.0
+ '@esbuild/win32-x64': 0.24.0
+
+ escalade@3.2.0: {}
+
+ estree-walker@2.0.2: {}
+
+ estree-walker@3.0.3:
+ dependencies:
+ '@types/estree': 1.0.6
+
+ expect-type@1.1.0: {}
+
+ fsevents@2.3.3:
+ optional: true
+
+ gensync@1.0.0-beta.2: {}
+
+ globals@11.12.0: {}
+
+ he@1.2.0: {}
+
+ html-tags@2.0.0: {}
+
+ html-tags@3.3.1: {}
+
+ js-tokens@4.0.0: {}
+
+ jsesc@3.0.2: {}
+
+ json5@2.2.3: {}
+
+ lodash.kebabcase@4.1.1: {}
+
+ loupe@3.1.2: {}
+
+ lru-cache@5.1.1:
+ dependencies:
+ yallist: 3.1.1
+
+ magic-string@0.30.14:
+ dependencies:
+ '@jridgewell/sourcemap-codec': 1.5.0
+
+ minimatch@9.0.5:
+ dependencies:
+ brace-expansion: 2.0.1
+
+ ms@2.1.3: {}
+
+ muggle-string@0.4.1: {}
+
+ nanoid@3.3.8: {}
+
+ node-releases@2.0.18: {}
+
+ path-browserify@1.0.1: {}
+
+ pathe@1.1.2: {}
+
+ pathval@2.0.0: {}
+
+ picocolors@1.1.1: {}
+
+ picomatch@4.0.2: {}
+
+ postcss@8.4.49:
+ dependencies:
+ nanoid: 3.3.8
+ picocolors: 1.1.1
+ source-map-js: 1.2.1
+
+ prettier@2.8.8:
+ optional: true
+
+ rollup@4.28.0:
+ dependencies:
+ '@types/estree': 1.0.6
+ optionalDependencies:
+ '@rollup/rollup-android-arm-eabi': 4.28.0
+ '@rollup/rollup-android-arm64': 4.28.0
+ '@rollup/rollup-darwin-arm64': 4.28.0
+ '@rollup/rollup-darwin-x64': 4.28.0
+ '@rollup/rollup-freebsd-arm64': 4.28.0
+ '@rollup/rollup-freebsd-x64': 4.28.0
+ '@rollup/rollup-linux-arm-gnueabihf': 4.28.0
+ '@rollup/rollup-linux-arm-musleabihf': 4.28.0
+ '@rollup/rollup-linux-arm64-gnu': 4.28.0
+ '@rollup/rollup-linux-arm64-musl': 4.28.0
+ '@rollup/rollup-linux-powerpc64le-gnu': 4.28.0
+ '@rollup/rollup-linux-riscv64-gnu': 4.28.0
+ '@rollup/rollup-linux-s390x-gnu': 4.28.0
+ '@rollup/rollup-linux-x64-gnu': 4.28.0
+ '@rollup/rollup-linux-x64-musl': 4.28.0
+ '@rollup/rollup-win32-arm64-msvc': 4.28.0
+ '@rollup/rollup-win32-ia32-msvc': 4.28.0
+ '@rollup/rollup-win32-x64-msvc': 4.28.0
+ fsevents: 2.3.3
+
+ semver@6.3.1: {}
+
+ semver@7.6.3: {}
+
+ siginfo@2.0.0: {}
+
+ source-map-js@1.2.1: {}
+
+ source-map@0.6.1: {}
+
+ stackback@0.0.2: {}
+
+ std-env@3.8.0: {}
+
+ svg-tags@1.0.0: {}
+
+ tinybench@2.9.0: {}
+
+ tinyexec@0.3.1: {}
+
+ tinypool@1.0.2: {}
+
+ tinyrainbow@1.2.0: {}
+
+ tinyspy@3.0.2: {}
+
+ typescript@5.6.3: {}
+
+ undici-types@6.20.0: {}
+
+ update-browserslist-db@1.1.1(browserslist@4.24.2):
+ dependencies:
+ browserslist: 4.24.2
+ escalade: 3.2.0
+ picocolors: 1.1.1
+
+ vite-node@2.1.8(@types/node@22.10.2):
+ dependencies:
+ cac: 6.7.14
+ debug: 4.4.0
+ es-module-lexer: 1.5.4
+ pathe: 1.1.2
+ vite: 5.4.11(@types/node@22.10.2)
+ transitivePeerDependencies:
+ - '@types/node'
+ - less
+ - lightningcss
+ - sass
+ - sass-embedded
+ - stylus
+ - sugarss
+ - supports-color
+ - terser
+
+ vite@5.4.11(@types/node@22.10.2):
+ dependencies:
+ esbuild: 0.21.5
+ postcss: 8.4.49
+ rollup: 4.28.0
+ optionalDependencies:
+ '@types/node': 22.10.2
+ fsevents: 2.3.3
+
+ vite@6.0.3(@types/node@22.10.2):
+ dependencies:
+ esbuild: 0.24.0
+ postcss: 8.4.49
+ rollup: 4.28.0
+ optionalDependencies:
+ '@types/node': 22.10.2
+ fsevents: 2.3.3
+
+ vitest@2.1.8(@types/node@22.10.2):
+ dependencies:
+ '@vitest/expect': 2.1.8
+ '@vitest/mocker': 2.1.8(vite@5.4.11(@types/node@22.10.2))
+ '@vitest/pretty-format': 2.1.8
+ '@vitest/runner': 2.1.8
+ '@vitest/snapshot': 2.1.8
+ '@vitest/spy': 2.1.8
+ '@vitest/utils': 2.1.8
+ chai: 5.1.2
+ debug: 4.4.0
+ expect-type: 1.1.0
+ magic-string: 0.30.14
+ pathe: 1.1.2
+ std-env: 3.8.0
+ tinybench: 2.9.0
+ tinyexec: 0.3.1
+ tinypool: 1.0.2
+ tinyrainbow: 1.2.0
+ vite: 5.4.11(@types/node@22.10.2)
+ vite-node: 2.1.8(@types/node@22.10.2)
+ why-is-node-running: 2.3.0
+ optionalDependencies:
+ '@types/node': 22.10.2
+ transitivePeerDependencies:
+ - less
+ - lightningcss
+ - msw
+ - sass
+ - sass-embedded
+ - stylus
+ - sugarss
+ - supports-color
+ - terser
+
+ vscode-uri@3.0.8: {}
+
+ vue-demi@0.14.10(@vue/composition-api@1.7.2(vue@3.5.13(typescript@5.6.3)))(vue@3.5.13(typescript@5.6.3)):
+ dependencies:
+ vue: 3.5.13(typescript@5.6.3)
+ optionalDependencies:
+ '@vue/composition-api': 1.7.2(vue@3.5.13(typescript@5.6.3))
+
+ vue-template-compiler@2.7.16:
+ dependencies:
+ de-indent: 1.0.2
+ he: 1.2.0
+
+ vue-tsc@2.1.10(typescript@5.6.3):
+ dependencies:
+ '@volar/typescript': 2.4.10
+ '@vue/language-core': 2.1.10(typescript@5.6.3)
+ semver: 7.6.3
+ typescript: 5.6.3
+
+ vue@2.7.16:
+ dependencies:
+ '@vue/compiler-sfc': 2.7.16
+ csstype: 3.1.3
+
+ vue@3.5.13(typescript@5.6.3):
+ dependencies:
+ '@vue/compiler-dom': 3.5.13
+ '@vue/compiler-sfc': 3.5.13
+ '@vue/runtime-dom': 3.5.13
+ '@vue/server-renderer': 3.5.13(vue@3.5.13(typescript@5.6.3))
+ '@vue/shared': 3.5.13
+ optionalDependencies:
+ typescript: 5.6.3
+
+ why-is-node-running@2.3.0:
+ dependencies:
+ siginfo: 2.0.0
+ stackback: 0.0.2
+
+ yallist@3.1.1: {}
diff --git a/public/vite.svg b/public/vite.svg
new file mode 100644
index 0000000..e7b8dfb
--- /dev/null
+++ b/public/vite.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..660678e
--- /dev/null
+++ b/src/App.vue
@@ -0,0 +1,74 @@
+
+
+ vue-{{ vueVer }}
+
+
+
+
+
+
+
+
diff --git a/src/JumpBtn.vue b/src/JumpBtn.vue
new file mode 100644
index 0000000..f1012f4
--- /dev/null
+++ b/src/JumpBtn.vue
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/SlotTester.vue b/src/SlotTester.vue
new file mode 100644
index 0000000..285d476
--- /dev/null
+++ b/src/SlotTester.vue
@@ -0,0 +1,18 @@
+
+
+
+ Default Title
+
+
+ Default Content
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/child.tsx b/src/child.tsx
new file mode 100644
index 0000000..9838bfe
--- /dev/null
+++ b/src/child.tsx
@@ -0,0 +1,29 @@
+import { createApp, defineComponent } from 'vue-demi'
+
+import Receiver from './components/Receiver'
+import SlotTester from './SlotTester.vue';
+const App = defineComponent({
+ setup(){
+ return (h)=>()
+ }
+})
+
+const app = createApp(App);
+app.component('slot-tester', SlotTester);
+app.component('test-parent',defineComponent({
+ props:{
+ message:{
+ type:String,
+ default:()=>'empty'
+ }
+ },
+ setup(props, { slots, emit }) {
+ return (h) => ({props.message} {slots.default?.()}
)
+ }
+}))
+app.component('test-child',defineComponent({
+ setup(){
+ return (h)=>(test-child
)
+ }
+}))
+app.mount('#app')
diff --git a/src/components/DemiHelper.ts b/src/components/DemiHelper.ts
new file mode 100644
index 0000000..b5094f3
--- /dev/null
+++ b/src/components/DemiHelper.ts
@@ -0,0 +1,132 @@
+import * as Vue3 from "vue";
+import { h, isVue2, isVue3, type VNode, type VNodeChildren, type VNodeData } from "vue-demi";
+import { InvokerItem } from "./InvokerItem";
+import { ComponentInternalInstance } from "vue-demi/lib/v2/index.js";
+
+function splitAttrs(obj: object) : { attrs: Record, on: Record } {
+ const attrs: Record = {};
+ const listeners: Record = {};
+ for (const key in obj) {
+ if (key.indexOf('on') == 0) {
+ const newKey = key[2].toLowerCase() + key.substring(3);
+ listeners[newKey] = obj[key];
+ } else {
+ attrs[key] = obj[key];
+ }
+ }
+ console.log("Listener", listeners)
+ return { attrs, on: listeners };
+}
+
+/**
+ * 将扁平化的组件数据对象分离为Vue2形式的data对象
+ * @param rawData
+ * @returns
+ */
+function splitVue2Data(rawData?: Record | null) {
+ console.warn("Handling Vue2 data: ", rawData);
+ if (!rawData) return {};
+
+ if (isVue3) throw new Error("Vue3 data object is not supported in Vue2");
+ // Vue2分离式处理
+ else {
+ const on = {}; // 可能需要区分NativeOn
+ const { class: cls, style, attrs = {}, props = {}, ...rest } = rawData;
+
+ // 处理事件
+ for (const key in rest) {
+ if (key.indexOf('on') == 0 && key != 'on') {
+ const newKey = key[2].toLowerCase() + key.substring(3);
+ on[newKey] = rest[key];
+ }
+ }
+ const v2data = {
+ class: cls,
+ style,
+ attrs: attrs,
+ props: { ...props, ...rest }, // 未明确的属性放入props
+ on,
+ }
+ return v2data;
+ }
+}
+
+/**
+ * 渲染具名插槽
+ * @param slotFn
+ * @param args
+ * @returns
+ */
+function renderSlot(slotFn: Function, args: any, ctx?: ComponentInternalInstance) {
+ let child: string | Array | InvokerItem = slotFn(args);
+ // console.warn("Rendering Slot: ", child);
+ // 字符串情况
+ if (typeof child == 'string') {
+ return child;
+ }
+ // Array情况
+ else if (Array.isArray(child)) {
+ return child.map((c: InvokerItem) => hh(c.tag, c.data, c.children, ctx));
+ }
+ // InvokerItem情况
+ else {
+ return hh(child.tag, child.data, child.children, ctx);
+ }
+}
+
+export function hh(tag: string, data?: Record | null, children?: string | Array | Record, ctx?: ComponentInternalInstance) {
+ // 适配Vue2渲染函数结构
+ // console.debug("Rendering", tag, data, children, `Vue Version: ${isVue2 ? 'Vue2' : 'Vue3'}`);
+
+ // 处理tag
+ let processedTag: string | object = tag;
+ if (isVue3 && typeof tag == 'string') {
+ // Vue 3 需要解析全局组件
+ // @ts-ignore - Vue 3 的 resolveComponent 需要特殊处理
+ const resolved = Vue3?.resolveComponent?.(tag);
+ processedTag = resolved || tag;
+ }
+
+ // 处理data
+ let processedData: any = null;
+ if (isVue2) {
+ processedData = splitVue2Data(data);
+ }
+ else processedData = data;
+
+ // 处理children
+ let processedChildren: any = {};
+ // 字符串则直接返回
+ if (typeof children == 'string') {
+ processedChildren = children
+ }
+ // 子节点列表则递归处理
+ else if (Array.isArray(children)) {
+ processedChildren = children.map(child => hh(child.tag, child.data, child.children, ctx));
+ }
+ // 处理具名插槽对象
+ else if (children && typeof children == 'object') {
+ if (isVue3) {
+ processedChildren = Object.fromEntries(
+ Object.entries(children).map(([name, slotFn]) => [
+ name,
+ (args) => renderSlot(slotFn, args, ctx)
+ ])
+ )
+ }
+ else {
+ // 兼容Vue2插槽
+ processedData['scopedSlots'] = Object.fromEntries(
+ Object.entries(children).map(([name, slotFn]) => [
+ name,
+ (args) => {
+ return renderSlot(slotFn, args);
+ }
+ ])
+ );
+ }
+ }
+
+ console.debug("Processed", processedTag, processedData, processedChildren);
+ return h(processedTag, processedData, processedChildren);
+}
\ No newline at end of file
diff --git a/src/components/Invoker.tsx b/src/components/Invoker.tsx
new file mode 100644
index 0000000..f5e99cc
--- /dev/null
+++ b/src/components/Invoker.tsx
@@ -0,0 +1,152 @@
+import {
+ defineComponent,
+ onBeforeUpdate,
+ onUnmounted,
+ watch,
+} from "vue-demi";
+
+let idCount = 0 ;
+
+export default defineComponent({
+ props: {
+ name: {
+ type: String,
+ default: () => null,
+ },
+ height: {
+ type: String,
+ default: () => "auto",
+ },
+ scroll: {
+ type: Boolean,
+ default: () => false,
+ },
+ items: {
+ type: Array ,
+ default: () => undefined,
+ },
+ url: {
+ type: String,
+ default: () => null,
+ },
+ },
+ setup(props, { slots, expose }) {
+ // const { proxy } = getCurrentInstance();
+ //
+ // const id = modService.addInvoker(proxy);
+ const id = ++idCount;
+ const isLocalInvoker = false;
+ let modContext: any = null;
+ const invokeMethods: { method: string; args: any[] }[] = [];
+ let isTemplate = false;
+
+ window["MES_MOD_INVOKERS"] ||= {};
+ window["MES_MOD_INVOKERS"][id] = {
+ getRenderContext,
+ initFinish,
+ modContext,
+ };
+
+ function updateComponent() {
+ if (modContext) {
+ // 判断子页面vue对象是否存在
+ modContext.renderVersion += 1;
+ modContext.$forceUpdate(); // 强制渲染
+ // 重新计算el-button的computed
+ const list = [modContext];
+
+ while (list.length != 0) {
+ const item = list.pop();
+ list.push(...item.$children);
+ const tag = item.$options._componentTag;
+
+ if (tag == "el-button" || tag == "ElButton") {
+ if (item.disabled) item._computedWatchers.buttonDisabled.run();
+ console.log("[Invoker]: force recalculate computed property...");
+ }
+ }
+ }
+ }
+
+ // 子组件调用
+ function eventCallback(type: string, ...args: any[]) {
+ switch (type) {
+ case "created":
+ initFinish(args[0]);
+ break;
+ }
+ }
+ function initFinish(context) {
+ modContext = context;
+ let m: { method: string; args: any[] } | undefined;
+ while ((m = invokeMethods.pop())) {
+ invokeMethod(m.method, m.args);
+ }
+ console.log("invoker init finish");
+ }
+ function invokeMethod(
+ method: string,
+ args: any[] = [],
+ callback: ((result: any) => void) | null = null
+ ) {
+ // if(!this.component) throw new Error('子组件不支持此方法调用');
+ if (modContext) {
+ console.log("method", modContext.$children);
+ const result = modContext.$children[0][method](...args);
+ if (callback) {
+ callback(result);
+ }
+ } else {
+ invokeMethods.push({ method, args });
+ }
+ }
+ function getRefs() {
+ return modContext.$refs;
+ }
+
+ // vue3 渲染上下文
+ function getRenderContext() {
+ return props.items;
+ }
+
+ expose({
+ getRefs,
+ getRenderContext,
+ eventCallback,
+ initFinish,
+ });
+
+ watch(
+ () => props.items,
+ () => {
+ updateComponent();
+ }
+ );
+
+ onBeforeUpdate(() => {
+ console.log("invoker-beforeUpdate", slots.default);
+ if (isTemplate) {
+ // 只更新slots变更
+ updateComponent();
+ }
+ });
+ onUnmounted(() => {
+ console.log("invoker-destroyed");
+ modContext && modContext.$destroy();
+ });
+
+ return (h) => {
+ if (isLocalInvoker && slots.default) {
+ return {slots.default()}
;
+ }
+
+ return (
+
+ );
+ };
+ },
+});
diff --git a/src/components/InvokerItem.ts b/src/components/InvokerItem.ts
new file mode 100644
index 0000000..0d5f804
--- /dev/null
+++ b/src/components/InvokerItem.ts
@@ -0,0 +1,8 @@
+export interface InvokerItem {
+ /** 组件的标签或是Component对象 */
+ tag: string,
+ /** 组件数据对象,包含attr, props, class, style, 事件等对象 */
+ data: Record | null,
+ /** 子节点和插槽 */
+ children: string | Array | Record
+}
\ No newline at end of file
diff --git a/src/components/Receiver.ts b/src/components/Receiver.ts
new file mode 100644
index 0000000..4cbf240
--- /dev/null
+++ b/src/components/Receiver.ts
@@ -0,0 +1,136 @@
+import { defineComponent, nextTick, onMounted, ref, getCurrentInstance, isVue3, h } from 'vue-demi';
+import { hh } from './DemiHelper';
+import SlotTester from '../SlotTester.vue';
+
+console.log('receiver-loaded');
+
+
+function renderContext(item: object | Array, toSlot: boolean = false) {
+ /**
+ * 对象为字符串的情况
+ * # { tag: 'div', attrs: undefined, children: 'hhh' } => h('span', undefined, 'hhh')
+ */
+ if (typeof item === 'string')
+ return item;
+
+ /**
+ * 对象为函数的情况
+ * # { tag: 'div', attrs: undefined, children: () => 'hhh' } => h('span', undefined, 'hhh')
+ */
+ if (typeof (item) === "function") {
+
+ // return item;
+ return item();
+ }
+
+ /**
+ * 对象为数组的情况
+ * # { tag: 'div', attrs: undefined, [ { tag: 'span', attrs: undefined, 'hhh' } ] } => h('div', undefined, [ h('span', undefined, 'hhh') ])
+ */
+ if (Array.isArray(item)) {
+
+ const list = item.map(i => {
+ if (isVue3) {
+ // const comp = resolveComponent(i.tag);
+ return hh(i.tag, i.attrs, i.children);
+ // return hDemi(comp, i.attrs, renderContext(i.children, typeof (comp) !== 'string') as any); // vue3
+ }
+
+ // const { attrs, listeners, ref } = splitAttrs(i.attrs);
+ const slots = renderContext(i.children);
+ if (typeof (slots) === "object") {
+ return hh(i.tag, {
+ attrs: i.attrs
+ // attrs,
+ // on: listeners,
+ // scopedSlots: slots,
+ // ref
+ });
+ }
+ return hh(i.tag, {
+ attrs: i.attrs,
+ }, slots);
+
+ });
+ if (toSlot) {
+ return () => list;
+ }
+ return list;
+ }
+
+ /**
+ * 复合对象的情况
+ * #
+ */
+ const children: Record = {};
+ for (const key in item) {
+
+ children[key] = function (scope) {
+ const child = item[key](scope);
+ if (isVue3) {
+ return hh(child.tag, child.attrs, renderContext(child.children, true));
+ }
+
+ if (Array.isArray(child)) {
+ const slots = renderContext(child);
+ return slots;
+ } else {
+ // const { attrs, listeners, ref } = splitAttrs(child.attrs);
+ const slots = renderContext(child.children);
+ return hh(child.tag, {
+ attrs: child.attrs
+ // attrs,
+ // on: listeners,
+ // ref
+ }, slots);
+ }
+
+ };
+ }
+ return children;
+}
+export default defineComponent({
+ name: 'Receiver',
+ props: {
+ parentId: {
+ type: [Number, String],
+ default: () => 0
+ }
+ },
+ setup(props) {
+ const instance = getCurrentInstance();
+ let invokerContext: any = null;
+ const renderVersion = ref(0);
+ if (window.parent != window) {
+ const invoker = window.parent['MES_MOD_INVOKERS'][props.parentId];
+ invokerContext = invoker;
+
+ }
+
+ onMounted(() => {
+ nextTick().then(() => {
+ console.log('mounted-finish');
+ if (!invokerContext['modContext']) {
+ invokerContext.initFinish(instance?.proxy);
+ }
+ });
+ });
+ return () => {
+ try {
+ console.log('receiver-update', renderVersion.value);
+ if (renderVersion.value < 0) return;
+ if (invokerContext.getRenderContext) {
+ const itemList = invokerContext.getRenderContext();
+
+ // const list = renderContext(itemList);
+ // console.log('item-list', list);
+ return hh('div', undefined, itemList);
+ }
+ return hh('div');
+ }
+ catch (e) {
+ console.error("[Receiver] 渲染节点过程中出现错误", e);
+ }
+ };
+ }
+});
diff --git a/src/main.ts b/src/main.ts
new file mode 100644
index 0000000..7ac6154
--- /dev/null
+++ b/src/main.ts
@@ -0,0 +1,5 @@
+import { createApp, Vue2 } from 'vue-demi'
+import App from './App.vue'
+
+const app = createApp(App)
+app.mount('#app')
diff --git a/src/vite-env.d.ts b/src/vite-env.d.ts
new file mode 100644
index 0000000..11f02fe
--- /dev/null
+++ b/src/vite-env.d.ts
@@ -0,0 +1 @@
+///
diff --git a/tsconfig.app.json b/tsconfig.app.json
new file mode 100644
index 0000000..0c1a0c2
--- /dev/null
+++ b/tsconfig.app.json
@@ -0,0 +1,27 @@
+{
+ "compilerOptions": {
+ "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo",
+ "target": "ES2020",
+ "useDefineForClassFields": true,
+ "module": "ESNext",
+ "lib": ["ES2020", "DOM", "DOM.Iterable"],
+ "skipLibCheck": true,
+
+ /* Bundler mode */
+ "moduleResolution": "bundler",
+ "allowImportingTsExtensions": true,
+ "isolatedModules": true,
+ "moduleDetection": "force",
+ "noEmit": true,
+ "jsx": "preserve",
+
+ /* Linting */
+ "strict": true,
+ "noUnusedLocals": true,
+ "noUnusedParameters": true,
+ "noFallthroughCasesInSwitch": true,
+ "noUncheckedSideEffectImports": true,
+ "noImplicitAny": false
+ },
+ "include": ["src/**/*.ts", "src/**/*.tsx", "src/**/*.vue", "index.ts"]
+}
diff --git a/tsconfig.json b/tsconfig.json
new file mode 100644
index 0000000..1ffef60
--- /dev/null
+++ b/tsconfig.json
@@ -0,0 +1,7 @@
+{
+ "files": [],
+ "references": [
+ { "path": "./tsconfig.app.json" },
+ { "path": "./tsconfig.node.json" }
+ ]
+}
diff --git a/tsconfig.node.json b/tsconfig.node.json
new file mode 100644
index 0000000..db0becc
--- /dev/null
+++ b/tsconfig.node.json
@@ -0,0 +1,24 @@
+{
+ "compilerOptions": {
+ "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo",
+ "target": "ES2022",
+ "lib": ["ES2023"],
+ "module": "ESNext",
+ "skipLibCheck": true,
+
+ /* Bundler mode */
+ "moduleResolution": "bundler",
+ "allowImportingTsExtensions": true,
+ "isolatedModules": true,
+ "moduleDetection": "force",
+ "noEmit": true,
+
+ /* Linting */
+ "strict": true,
+ "noUnusedLocals": true,
+ "noUnusedParameters": true,
+ "noFallthroughCasesInSwitch": true,
+ "noUncheckedSideEffectImports": true
+ },
+ "include": ["vite.config.ts"]
+}
diff --git a/vite.config.ts b/vite.config.ts
new file mode 100644
index 0000000..202484f
--- /dev/null
+++ b/vite.config.ts
@@ -0,0 +1,38 @@
+import { defineConfig } from 'vite'
+import vue from '@vitejs/plugin-vue'
+import vueJsx from '@vitejs/plugin-vue-jsx'
+
+import vue2 from '@vitejs/plugin-vue2'
+import vue2Jsx from '@vitejs/plugin-vue2-jsx'
+import { isVue2, isVue3,version } from 'vue-demi'
+import path from 'node:path'
+import { createRequire } from 'node:module'
+
+const resolve = (str: string) => {
+ return path.resolve(__dirname, str)
+}
+console.log('vue',version)
+
+function getV2Compiler() {
+ const req = createRequire(import.meta.url);
+ const rt = req.resolve("./node_modules/vue2/compiler-sfc");
+ console.log(rt);
+ const c = req(rt)
+ console.log(c);
+ return c;
+}
+
+// https://vite.dev/config/
+export default defineConfig({
+ plugins: isVue3 ? [vue(), vueJsx()] : [vue2({
+ compiler: getV2Compiler()
+ }), vue2Jsx()],
+ resolve:{
+ alias:{
+ vue: isVue2 ? resolve('./node_modules/vue2') : resolve('./node_modules/vue'),
+ }
+ },
+ optimizeDeps: {
+ exclude: ['vue-demi']
+ },
+})