diff --git a/web-admin/package.json b/web-admin/package.json
index 62d2e83b9..64074ebb0 100644
--- a/web-admin/package.json
+++ b/web-admin/package.json
@@ -61,6 +61,9 @@
"@tailwindcss/vite": "^4.1.14",
"@tinymce/tinymce-vue": "^6.3.0",
"@turbodocx/html-to-docx": "^1.22.2",
+ "@univerjs/preset-sheets-core": "1.4.0",
+ "@univerjs/preset-sheets-filter": "1.4.0",
+ "@univerjs/presets": "1.4.0",
"@vue-flow/core": "^1.48.2",
"@vue/reactivity": "^3.5.21",
"@vueuse/core": "^13.9.0",
@@ -86,6 +89,9 @@
"pinia-plugin-persistedstate": "^4.3.0",
"pinyin-pro": "^3.28.1",
"qrcode.vue": "^3.6.0",
+ "react": "18.3.1",
+ "react-dom": "18.3.1",
+ "rxjs": "7.8.2",
"sortablejs": "^1.15.7",
"tailwindcss": "^4.1.14",
"tinymce": "^8.5.1",
diff --git a/web-admin/pnpm-lock.yaml b/web-admin/pnpm-lock.yaml
index 75096488e..18bf4c598 100644
--- a/web-admin/pnpm-lock.yaml
+++ b/web-admin/pnpm-lock.yaml
@@ -29,6 +29,15 @@ importers:
'@turbodocx/html-to-docx':
specifier: ^1.22.2
version: 1.22.2
+ '@univerjs/preset-sheets-core':
+ specifier: 1.4.0
+ version: 1.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rxjs@7.8.2)
+ '@univerjs/preset-sheets-filter':
+ specifier: 1.4.0
+ version: 1.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rxjs@7.8.2)
+ '@univerjs/presets':
+ specifier: 1.4.0
+ version: 1.4.0(react@18.3.1)(rxjs@7.8.2)
'@vue-flow/core':
specifier: ^1.48.2
version: 1.48.2(vue@3.5.22(typescript@5.6.3))
@@ -58,7 +67,7 @@ importers:
version: 0.8.5
echarts:
specifier: ^6.0.0
- version: 6.0.0
+ version: 6.1.0
element-plus:
specifier: ^2.11.2
version: 2.11.4(vue@3.5.22(typescript@5.6.3))
@@ -104,6 +113,15 @@ importers:
qrcode.vue:
specifier: ^3.6.0
version: 3.6.0(vue@3.5.22(typescript@5.6.3))
+ react:
+ specifier: 18.3.1
+ version: 18.3.1
+ react-dom:
+ specifier: 18.3.1
+ version: 18.3.1(react@18.3.1)
+ rxjs:
+ specifier: 7.8.2
+ version: 7.8.2
sortablejs:
specifier: ^1.15.7
version: 1.15.7
@@ -748,15 +766,42 @@ packages:
'@fast-csv/parse@4.3.6':
resolution: {integrity: sha512-uRsLYksqpbDmWaSmzvJcuApSEe38+6NQZBUsuAyMZKqHxH0g1wcJgsKUvN3WC8tewaqFjBMMGrkHmC+T7k8LvA==}
+ '@flatten-js/interval-tree@1.1.3':
+ resolution: {integrity: sha512-xhFWUBoHJFF77cJO1D6REjdgJEMRf2Y2Z+eKEPav8evGKcLSnj1ud5pLXQSbGuxF3VSvT1rWhMfVpXEKJLTL+A==}
+
'@floating-ui/core@1.7.3':
resolution: {integrity: sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==}
+ '@floating-ui/core@1.8.0':
+ resolution: {integrity: sha512-0CIZ5itps/8x7BG8dEIhs53BvCUH2PCoogtakwRTut+Arm58sJooJ0AuZhLw2HJYIR5cMLNPBSS728sPho2khQ==}
+
'@floating-ui/dom@1.7.4':
resolution: {integrity: sha512-OOchDgh4F2CchOX94cRVqhvy7b3AFb+/rQXyswmzmGakRfkMgoWVjfnLWkRirfLEfuD4ysVW16eXzwt3jHIzKA==}
+ '@floating-ui/dom@1.8.0':
+ resolution: {integrity: sha512-yXSrzeHZBTZadLOlfyhCkJHNeLJnHRnRInwdZ40L7ZiaAtrBwoYlsDrX3v5zB1Utk7CLfzcOVnVVWoXEky7Ceg==}
+
+ '@floating-ui/react-dom@2.1.9':
+ resolution: {integrity: sha512-JDjEFGCpImxDCA7JJKviA0M9+RtmJdj0m/NVU5IMgBK+AmZouAQQ7/+2GLH0GXXY0YMw9oXPB8hKdbPYg5QLYg==}
+ peerDependencies:
+ react: '>=16.8.0'
+ react-dom: '>=16.8.0'
+
'@floating-ui/utils@0.2.10':
resolution: {integrity: sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==}
+ '@floating-ui/utils@0.2.12':
+ resolution: {integrity: sha512-HpCo8tmWzLVad5s2d19EhAz5zqrrQ6s69qd6moPMQvkOuSwDT1YgRfWSVuc4ennqrgv3OHppiOGMQ7oC13yIww==}
+
+ '@grpc/grpc-js@1.14.7':
+ resolution: {integrity: sha512-W4W/fcBMGRVtG6dW2c7cw2mnpS3hvbBd+oQXjh2iYFTZDk1JJmcNqkM5KSaPubQpamlUUurrlb7G1s9NJeERmQ==}
+ engines: {node: '>=12.10.0'}
+
+ '@grpc/proto-loader@0.8.1':
+ resolution: {integrity: sha512-wtF6h+DY6M3YaDBPAmvuuA6jV8Sif9MjtOI5euKFWRgCDl5PeDpPsHR9u2l6St5ceY8AZgoNDww5+HvEsXFsGg==}
+ engines: {node: '>=6'}
+ hasBin: true
+
'@humanfs/core@0.19.1':
resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==}
engines: {node: '>=18.18.0'}
@@ -819,6 +864,9 @@ packages:
'@jridgewell/trace-mapping@0.3.31':
resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==}
+ '@js-sdsl/ordered-map@4.4.2':
+ resolution: {integrity: sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw==}
+
'@keyv/bigmap@1.0.2':
resolution: {integrity: sha512-KR03xkEZlAZNF4IxXgVXb+uNIVNvwdh8UwI0cnc7WI6a+aQcDp8GL80qVfeB4E5NpsKJzou5jU0r6yLSSbMOtA==}
engines: {node: '>= 18'}
@@ -826,6 +874,10 @@ packages:
'@keyv/serialize@1.1.1':
resolution: {integrity: sha512-dXn3FZhPv0US+7dtJsIi2R+c7qWYiReoEh5zUntWCf4oSpMNib8FDhSoed6m3QyZdx5hK7iLFkYk3rNxwt8vTA==}
+ '@noble/hashes@1.8.0':
+ resolution: {integrity: sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==}
+ engines: {node: ^14.21.3 || >=16}
+
'@nodelib/fs.scandir@2.1.5':
resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
engines: {node: '>= 8'}
@@ -965,6 +1017,351 @@ packages:
'@polka/url@1.0.0-next.29':
resolution: {integrity: sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==}
+ '@protobufjs/aspromise@1.1.2':
+ resolution: {integrity: sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==}
+
+ '@protobufjs/base64@1.1.2':
+ resolution: {integrity: sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==}
+
+ '@protobufjs/codegen@2.0.5':
+ resolution: {integrity: sha512-zgXFLzW3Ap33e6d0Wlj4MGIm6Ce8O89n/apUaGNB/jx+hw+ruWEp7EwGUshdLKVRCxZW12fp9r40E1mQrf/34g==}
+
+ '@protobufjs/eventemitter@1.1.1':
+ resolution: {integrity: sha512-vW1GmwMZNnL+gMRaovlh9yZX74kc+TTU3FObkkurpMaRtBfLP3ldjS9KQWlwZgraRE0+dheEEoAxdzcJQ8eXZg==}
+
+ '@protobufjs/fetch@1.1.1':
+ resolution: {integrity: sha512-GpptLrs57adMSuHi3VNj0mAF8dwh36LMaYF6XyJ6JMWlVsc+t42tm1HSEDmOs3A8fC9yyeisgLhsTVQokOZ0zw==}
+
+ '@protobufjs/float@1.0.2':
+ resolution: {integrity: sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==}
+
+ '@protobufjs/path@1.1.2':
+ resolution: {integrity: sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==}
+
+ '@protobufjs/pool@1.1.0':
+ resolution: {integrity: sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==}
+
+ '@protobufjs/utf8@1.1.2':
+ resolution: {integrity: sha512-b1UQwcEZ4yCnMCD8DAL1VlbvBJE9/IX4FTIp7BG1xYpf29SLazLSrqUkj4w7Y5y7cCVP6E5tcqqcI0xemPkHug==}
+
+ '@radix-ui/primitive@1.2.0':
+ resolution: {integrity: sha512-KABY+VMIRPJL+Vyzv/335FEhXXD/xDv8BMb1kl48/aXJZMH0LtHCTx5ga5RnxaEP3nZHtmTLf1P9vanmFX46bw==}
+
+ '@radix-ui/react-arrow@1.1.17':
+ resolution: {integrity: sha512-67jjcVvxjXCCStnTW3Z+M7jmaFMuMR7M2JgpDzH4w7JSRrikmzhjfYgP/09ECb8n7whnsgh1ifJ+Ie96qEj+pQ==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-collection@1.2.0':
+ resolution: {integrity: sha512-+yiQzqcc7Sy7/5s0jrMCjpPRFB3538VNrXPWdTLZhE/SCfgEws4aI6lHWN/vvcnyhHndROWBzqmqB4QBrITZ9Q==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-compose-refs@1.1.5':
+ resolution: {integrity: sha512-+48PbAAbq3didjJxa+OaWY2ZwgAKsNiRGyeHKszblZMQ+kcpd9pAaT11cMkGEie0vsOi3QdeTE6d5Fe3Gn61kA==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-context@1.3.0':
+ resolution: {integrity: sha512-v5AYEocMISkbJ+1fTXzZpiFv7NRr3D2WiYbLIKf+FkmJ8VkP6d503eV2n34MFussHXY1pcoq3yfJiQH77dc4Mg==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-dialog@1.3.1':
+ resolution: {integrity: sha512-+0E4qvVTwjAWra9sEhJ+9BTsvHE00zkUuNw1VGh7S+Gc13dfYk+S1PVQdchWDj+XYHhAai7Z7IpzXVDCGsDplg==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-direction@1.2.0':
+ resolution: {integrity: sha512-FtRA52a/r+LKStFT+neLUm+8vSe7wbzkbQGGeU8ixFiwC8NU14Evoq9ATECqL3eGbcUzJR4fyfA4KkK/q6dfqg==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-dismissable-layer@1.2.1':
+ resolution: {integrity: sha512-KIfDcAsx+oVylFZ4xryVKusJUrLLhTQmfnJW4kwk4Km5myvhHCrj04hnWWUC166+xD4DHdH8tQGylwYX1h6+Pg==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-dropdown-menu@2.2.1':
+ resolution: {integrity: sha512-XsHcmYG2AcqnvTqrOXXWcMrhquEIlqucizuDH1MV/qMRW+DndpBCMvNeTRXOxqmG1H5j89M/+I0/34Zdd+zDcQ==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-focus-guards@1.2.0':
+ resolution: {integrity: sha512-MPm5R0iRGUDrDnPNxmLBkv+X7pN4XKzt+MbWJEuJQsH3NFH4omrbpXpucyYCCKTSt+na/ZxGhEWQrWTZ0285cA==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-focus-scope@1.3.1':
+ resolution: {integrity: sha512-ugeMhbXt4y5S2T1GnIqbWDKEN962PDwnX1fN0eKOOgf5f63Dh2mn8F1FUySlgW0iF6GiVsRF32DzuDIWTUyQJg==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-hover-card@1.2.1':
+ resolution: {integrity: sha512-4QooHxgmpCKRjj1Pft+hETKidYcrbPKcVwMGtk2Oa5DcWY2IH1fHuQt9LG6q5hUQBBV2MhQxSvtx6B/C1xfiTw==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-id@1.1.4':
+ resolution: {integrity: sha512-TMQp2llA+RYn7JcjnrMnz7wN4pcVttPZnRZo52PLQsoLVKzNlVwUeHmfePgTgRluXFvlD3GD5g5MOVVTJCO0qA==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-menu@2.2.1':
+ resolution: {integrity: sha512-G34BsU90SBj5foYpz8pQqq/Q0Dlfyyl6KitWEfRwXC0QvfwhWNAwS49DWP2+rRJ0iwv20Z2Qx7Sk+T03bGo5JA==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-popover@1.3.1':
+ resolution: {integrity: sha512-ZNxvXRx5W2Wos4fXCXb5lpdqN0Z5chf+mStOUOTr4ik7d+62MRvoe9rzCA/eGNg36lxXqSrKEKmwuZEcUrIstw==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-popper@1.4.0':
+ resolution: {integrity: sha512-yCWRvLeGv9Pz3+efwHqGPp70mZ56r3kfIgQVF56Oj2aAa4uP/Tb+IE59wNcc+758rctqbCKx4LbK8II/r7Bn0Q==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-portal@1.2.0':
+ resolution: {integrity: sha512-StX7xXnaRU41VvFtMm9zlhVGz8XF6GmWWTXftkQaY+tqVkbs/R9UmAp5mLzHHapk5hM9RMZQvO/3usyIP/g42g==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-presence@1.1.11':
+ resolution: {integrity: sha512-Z7/atlkab36Z8hm+V8zYc79r0W+tiOB1o0tun1By94JyadkekLQmtEAnBSP9XKXBNQsStoStS4+gX10JpS5akA==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-primitive@2.2.0':
+ resolution: {integrity: sha512-HCTSPMNqv55Qk0IX4geJbpyXazmqulcimwuyjxTkKi29v+QZbG2Zho9BnbBq4YS2PF+KlNb2CXoLz66uUmblkg==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-roving-focus@1.2.1':
+ resolution: {integrity: sha512-UwraORzVUeEPMclhO1p0vz0qI+TbdDLO9i+FiOqhJyHKwdpCRCck9yVEscUnAMIzCiuNoQa8D4A9bIpOPXGt6Q==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-separator@1.2.0':
+ resolution: {integrity: sha512-1jUAap0wZEqVP05Ou7kJgRxe/W+Qftng+rUNWGa0qkKbv9r5pWTG3E7a3ELKo2eJoHKMECnzuYrZpSyO1YgcYQ==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-slot@1.5.0':
+ resolution: {integrity: sha512-tyYd9ddPXAysAbdbD9eYxgwpCSv6f3PncqVSNKQFSR5lcJVLz3cb/pANDoYrLiHBpXv7skortyUgGUWsYuPPFQ==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-use-callback-ref@1.1.5':
+ resolution: {integrity: sha512-Y5GBf4NKeADoXI1geiMlMuMoURT3k9MizzzKhGb/m55H94aGigZ01PIpkvsO6lML13BA6XYAXSJ6gza7vTn5nw==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-use-controllable-state@1.3.0':
+ resolution: {integrity: sha512-TAcBI7bw2ljYCbv4+zuTSd6zICu8pRt6SDN2vJ/Z06K2MXh6I9WYFe/A9ovlFDtR5HVHGm5iDxDoABm/++dbKg==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-use-effect-event@0.0.5':
+ resolution: {integrity: sha512-7cshFL8HGS/7HEiHH+9kL9HBwp2sa9yX18Knwek6KYWmXwM7pegMgta2AXMQKI+rq3JnfSj9x8wYqFMTdG1Jgg==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-use-is-hydrated@0.1.3':
+ resolution: {integrity: sha512-umO/aJ+82CpOnhDZUTbILCQf7kU/g0iv+oGs/Q8jw7IkhWBzaEP4sA268PhFAJTFetbwp3ICc6ktpI4TqtxcIw==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-use-layout-effect@1.1.4':
+ resolution: {integrity: sha512-K20DkRkUwDnxEYMBPcg3Y6voLkEy5p5QQmszZgLngKKiC7dzBR/aEuK3w1qlx2JWDUNH6FluahYdgR3BP+QbYw==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-use-rect@1.1.4':
+ resolution: {integrity: sha512-cSOCh6JlkmfjLyNcLiu2nB4v+nm+dkZ+Q5KHWk/soo4U7ZLiEQFKHK9/YmtBHjfCEaU43IBKQOc4/uJmCaiCTQ==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-use-size@1.1.5':
+ resolution: {integrity: sha512-V1McDQkMGzgivwqdu7u96APs7oi0Jvj9LTzgq3WWrDZqxWdAqU9yZnZQqk5OizGFR8badUQwZsrlao7MOlWYOA==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/rect@1.1.3':
+ resolution: {integrity: sha512-JtyZR+mqgBibTo8xea3B6ZRmzZiM/YeVBtUkas6zMuXjAlfIFIW2FgqeM9eLyvEaYX66vr6DJMK+4U6LV0KhNw==}
+
'@rolldown/pluginutils@1.0.0-beta.29':
resolution: {integrity: sha512-NIJgOsMjbxAXvoGq/X0gD7VPMQ8j9g0BiDaNjVNVjvl+iKXxL3Jre0v31RmBYeLEmkbj2s02v8vFTbUXi5XS2Q==}
@@ -1242,6 +1639,9 @@ packages:
'@types/node@14.18.63':
resolution: {integrity: sha512-fAtCfv4jJg+ExtXhvCkCqUKZ+4ok/JQk01qDKhL5BDDoS3AxKXhV5/MAVUZyQnSEd2GT92fkgZl0pz0Q0AzcIQ==}
+ '@types/node@24.19.2':
+ resolution: {integrity: sha512-93d49wCWJkCyN87MxLpNN6KXPCwFw7bVUg79mGUV1OS40JGWwVCr8n61DXCSqz7CV6/VfPkb7xec7uP2M+QHWQ==}
+
'@types/node@24.8.1':
resolution: {integrity: sha512-alv65KGRadQVfVcG69MuB4IzdYVpRwMG/mq8KWOaoOdyY617P5ivaDiMCGOFDWD2sAn5Q0mR3mRtUOgm99hL9Q==}
@@ -1325,6 +1725,137 @@ packages:
resolution: {integrity: sha512-576+u0QD+Jp3tZzvfRfxon0EA2lzcDt3lhUbsC6Lgzy9x2VR4E+JUiNyGHi5T8vk0TV+fpJ5GLG1JsJuWCaKhw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ '@univerjs/core@1.4.0':
+ resolution: {integrity: sha512-xZTeE/wsGvms9gppCS4yTyJ1XzZBVd0sxF1yG1k686eZApQox+/mtn511JREU37e6gsRRZvkHdKS1Ga/8Dvu0Q==}
+ peerDependencies:
+ rxjs: '>=7.0.0'
+
+ '@univerjs/design@1.4.0':
+ resolution: {integrity: sha512-JIfOjJqCfkAMRPLoly3K5EaTVB24XSk2Ax6xQ/yQH09VQmnCBjTg/zzLJB7b2DpESb/m2lT4AtuDhkk38U/LSQ==}
+ peerDependencies:
+ react: ^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc
+ react-dom: ^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc
+
+ '@univerjs/docs-ui@1.4.0':
+ resolution: {integrity: sha512-LMNh5fFrUbWsopl6dg4oEHBEj60vS/Q5WcsCmQVOvfBNdSvfqd91hcLxXAqgR3Qh20INsFZ+4CUd0cHLJ5jMYQ==}
+ peerDependencies:
+ react: ^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc
+ rxjs: '>=7.0.0'
+
+ '@univerjs/docs@1.4.0':
+ resolution: {integrity: sha512-Z+5Et6gOKDfwPKHbI2VmenJl6WZtNYu4vUZsAtkrXFhbsh1Rh2Rx4r6ijNV9+i8lCQ0bigOZg5wN2nSubcMAKQ==}
+ peerDependencies:
+ rxjs: '>=7.0.0'
+
+ '@univerjs/drawing@1.4.0':
+ resolution: {integrity: sha512-gY1Y3BQuuiwgWYwNiuPrRtTllKKAqqzGGjwvdq9L68TAG1ire3TYPM2Lf+MAgjYcXk8tUthE9+O5leVph/bB9w==}
+ peerDependencies:
+ rxjs: '>=7.0.0'
+
+ '@univerjs/engine-formula@1.4.0':
+ resolution: {integrity: sha512-OiIgBy9m0hD2MmZbF1zk9avoE8bRKgMF8VPfqT6i+HhhfsxFZ2iECgYk85mJmTSG6SXVwrgg7KqI760WbFEeKA==}
+ peerDependencies:
+ rxjs: '>=7.0.0'
+
+ '@univerjs/engine-render@1.4.0':
+ resolution: {integrity: sha512-lamcdKakINNvK6qmbCspcuBuHcJjNZaPO58iLL8Y6XsOP8ZqpeVHXTWtyVDoegOVhbWzLCPgeuaf8R+zv/T9wA==}
+ peerDependencies:
+ rxjs: '>=7.0.0'
+
+ '@univerjs/icons@1.47.0':
+ resolution: {integrity: sha512-c7ujagbPpufqoFYpUZhOlLcSLjWJsR/U/DfW7lfSJcA2Ud5EV2oQNwmIVdOyupcmdTKWd2PP8Rg9TQknz8FpPg==}
+ peerDependencies:
+ react: '*'
+ react-dom: '*'
+
+ '@univerjs/network@1.4.0':
+ resolution: {integrity: sha512-9q5U/+1hw40M8xXeIpBreMj9mIjJB1a3M/nvpjx9XGsei/cdxJ7slaRG3Fq0Qw/2PvYiA+AoJ51txJJnX/OdNg==}
+ peerDependencies:
+ rxjs: '>=7.0.0'
+
+ '@univerjs/preset-sheets-core@1.4.0':
+ resolution: {integrity: sha512-q01rUtapnaeKqe1GDikdnwgiWG+5R0+xufnJcp8+lizHuTrxhJ/s+Jdvi6ufc3lGG67H39uxSSILjS8/QmpJWA==}
+ peerDependencies:
+ react: ^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc
+ react-dom: ^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc
+ rxjs: '>=7.0.0'
+
+ '@univerjs/preset-sheets-filter@1.4.0':
+ resolution: {integrity: sha512-H76WMRrwCSXhqHvpdK+6Qkqbwm0MtLvWKx0EnizuNRaPAvbMCN6ysx09pqGKQAxN+V9B9A4YNUeNUb3dFoiYew==}
+ peerDependencies:
+ react: ^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc
+ react-dom: ^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc
+ rxjs: '>=7.0.0'
+
+ '@univerjs/presets@1.4.0':
+ resolution: {integrity: sha512-xB/YF3FGQYkCy/kQSQsKYAx9/4lT3v1/tlcCddxL6R2iAPXvRue1ZeO+9mZsmsIpqZke32n5llcJ9I6TFBo2AQ==}
+
+ '@univerjs/protocol@1.4.0':
+ resolution: {integrity: sha512-3huWRbcDZwO1DWM4jJOSYgZFFoG5GuEaSPLe0kXM4RKoEpBFnwFTtXQCMDglLx2j4DHgA26m/cwMIZPpBPqWvA==}
+
+ '@univerjs/rpc@1.4.0':
+ resolution: {integrity: sha512-R2IOoDK1d0RIkE08yUhaHIZ+OQlRS/Hn8HvclH+1pvoOjaEJgflj5PgZD2zHERnW0KNl3v0fEvqvNkSUhCNNLg==}
+ peerDependencies:
+ rxjs: '>=7.0.0'
+
+ '@univerjs/sheets-filter-ui@1.4.0':
+ resolution: {integrity: sha512-GGV/VdA37SStiR80+3sTgWZoTdDO9iduPl8sLkkyjT+rk8+YAxZK+5PKN/7dOPHUzuqkgWqOTpdJVeWuDO8Qfg==}
+ peerDependencies:
+ react: ^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc
+ rxjs: '>=7.0.0'
+
+ '@univerjs/sheets-filter@1.4.0':
+ resolution: {integrity: sha512-x4C4e47BbgOCTNEK6T+LVn9Z690Tv58KM3Dms/4anQlaJhwaaPjxA64xEjo+T/Yg3aB+8lKoPA3rD5CiXRBsJw==}
+ peerDependencies:
+ rxjs: '>=7.0.0'
+
+ '@univerjs/sheets-formula-ui@1.4.0':
+ resolution: {integrity: sha512-Vucg1NRkVGe3FlLfbDerMp3co6N5Dg0jxJs1PAk5FAQaIXCSLV5xEil+XE89/IBKItD5/YXqMgb3SP9PvXwFJQ==}
+ peerDependencies:
+ react: ^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc
+ react-dom: ^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc
+ rxjs: '>=7.0.0'
+
+ '@univerjs/sheets-formula@1.4.0':
+ resolution: {integrity: sha512-RFvQABbMBeWjVrl7mqO9mgyjHqec86K6J4XhLv15W98k8Bvv0wfzJpKVRCPBJ94kYBq7joglsfPCsKXHyuoGCg==}
+ peerDependencies:
+ rxjs: '>=7.0.0'
+
+ '@univerjs/sheets-numfmt-ui@1.4.0':
+ resolution: {integrity: sha512-T4K8xnhqAzeMuwI/pQFBm8ABVpfwGyNHJNildoXwQXGYIKO9QGF9ks/2G6/JN0mVjuf27jT3l0P/rgUvOy63ZA==}
+ peerDependencies:
+ react: ^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc
+ rxjs: '>=7.0.0'
+
+ '@univerjs/sheets-numfmt@1.4.0':
+ resolution: {integrity: sha512-oJ+SX5Z+qMx+brxzdm/B6OJ4OhFBYAq3Z9/8GoPK3hfTheWtv5IuYqsuG0vLU1EhN9l2OmKIgX8pQrkUa1FYww==}
+ peerDependencies:
+ rxjs: '>=7.0.0'
+
+ '@univerjs/sheets-ui@1.4.0':
+ resolution: {integrity: sha512-37Eme1ieQGZ4pzDoRVi8Yj2ysI3XrBTDFw7s5IbQIRr1uWo34r1qUM9kcTnrkTXKRUrEovOwiMryuGoxqgUBdQ==}
+ peerDependencies:
+ react: ^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc
+ rxjs: '>=7.0.0'
+
+ '@univerjs/sheets@1.4.0':
+ resolution: {integrity: sha512-a70g8gQ41ZbHf31w32PTQ6RAGt4J3z3WSQidPATsGU4gi03NC5B52Z2c5wOxVZRLlGEU9doPvWVIsHrekBcLwg==}
+ peerDependencies:
+ rxjs: '>=7.0.0'
+
+ '@univerjs/telemetry@1.4.0':
+ resolution: {integrity: sha512-B8/fJ74sr7vwLVrjfTBZNg5iMtjdTvKBF6yN3LgHjcpxwvEqrySrQAClXdpV0vchJEsyvwVvVfia1eatfSuZ2Q==}
+
+ '@univerjs/themes@1.4.0':
+ resolution: {integrity: sha512-5Ipb6KiXU3LRJpq5BDewMnXJJXMyExl6cIcfFnJj7nz/tBJiYTyhMNF3AWXEYEXeWjvwgGuPZE12eHw7+tZRdA==}
+
+ '@univerjs/ui@1.4.0':
+ resolution: {integrity: sha512-9WyIRha3V4HALeG1Tov9Z5VT0nwv/FVFiFsD+1LhKohYlqDkQFjGBLv7NTiTVhbvBeREjRnU0B/wFF/Iwl+uRQ==}
+ peerDependencies:
+ react: ^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc
+ react-dom: ^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc
+ rxjs: '>=7.0.0'
+
'@uppy/companion-client@2.2.2':
resolution: {integrity: sha512-5mTp2iq97/mYSisMaBtFRry6PTgZA6SIL7LePteOV5x0/DxKfrZW3DEiQERJmYpHzy7k8johpm2gHnEKto56Og==}
@@ -1568,6 +2099,14 @@ packages:
slate: ^0.72.0
snabbdom: ^3.1.0
+ '@wendellhu/redi@1.1.3':
+ resolution: {integrity: sha512-XjSi+q350RzOE0WCHB1tspodtdmtzdpMlscOQvlDY27IFft5Pm/nbzsBnTX5Wg5vjtLM/T3ehlJ98wXhqN9xfg==}
+ peerDependencies:
+ react: '>=16.8.0'
+ peerDependenciesMeta:
+ react:
+ optional: true
+
JSONStream@1.3.5:
resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==}
hasBin: true
@@ -1651,6 +2190,10 @@ packages:
argparse@2.0.1:
resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
+ aria-hidden@1.2.6:
+ resolution: {integrity: sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==}
+ engines: {node: '>=10'}
+
array-ify@1.0.0:
resolution: {integrity: sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==}
@@ -1662,6 +2205,9 @@ packages:
resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==}
engines: {node: '>=8'}
+ async-lock@1.5.0:
+ resolution: {integrity: sha512-JgULma1mWaHlyJ67lvicyel5Cq+k55bXafE0gyvJBdHkH0vdE/IGGDF1glNyRInisNS6pZL2oho96S6Hw68kfQ==}
+
async-validator@4.2.5:
resolution: {integrity: sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==}
@@ -1819,6 +2365,9 @@ packages:
resolution: {integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==}
engines: {node: '>=18'}
+ class-variance-authority@0.7.1:
+ resolution: {integrity: sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==}
+
clean-css@5.3.3:
resolution: {integrity: sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==}
engines: {node: '>= 10.0'}
@@ -1851,10 +2400,23 @@ packages:
resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==}
engines: {node: '>=0.8'}
+ clsx@2.1.1:
+ resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==}
+ engines: {node: '>=6'}
+
+ cmdk@1.1.1:
+ resolution: {integrity: sha512-Vsv7kFaXm+ptHDMZ7izaRsP70GgrW9NBNGswt9OZaVBLlE0SNpDq8eu/VGXyF9r7M0azK3Wy7OlYXsuyYLFzHg==}
+ peerDependencies:
+ react: ^18 || ^19 || ^19.0.0-rc
+ react-dom: ^18 || ^19 || ^19.0.0-rc
+
codepage@1.15.0:
resolution: {integrity: sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==}
engines: {node: '>=0.8'}
+ collapse-white-space@2.1.0:
+ resolution: {integrity: sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==}
+
color-convert@1.9.3:
resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==}
@@ -2089,6 +2651,9 @@ packages:
supports-color:
optional: true
+ decimal.js@10.6.0:
+ resolution: {integrity: sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==}
+
dedent@0.7.0:
resolution: {integrity: sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==}
@@ -2147,6 +2712,9 @@ packages:
resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==}
engines: {node: '>=8'}
+ detect-node-es@1.1.0:
+ resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==}
+
dir-glob@3.0.1:
resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==}
engines: {node: '>=8'}
@@ -2190,8 +2758,8 @@ packages:
duplexer2@0.1.4:
resolution: {integrity: sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==}
- echarts@6.0.0:
- resolution: {integrity: sha512-Tte/grDQRiETQP4xz3iZWSvoHrkCQtwqd6hs+mifXcjrCuo2iKWbajFObuLJVBlDIJlOzgQPd1hsaKt/3+OMkQ==}
+ echarts@6.1.0:
+ resolution: {integrity: sha512-q0yaFPggC9FUdsWH4blavRWFmxdrIodbkoKNAjJudAI6CA9gNPxHtV2RcZNEepZVlk4yvBYkOkbk6HIVpIyHZA==}
electron-to-chromium@1.5.227:
resolution: {integrity: sha512-ITxuoPfJu3lsNWUi2lBM2PaBPYgH3uqmxut5vmBxgYvyI4AlJ6P3Cai1O76mOrkJCBzq0IxWg/NtqOrpu/0gKA==}
@@ -2536,6 +3104,9 @@ packages:
resolution: {integrity: sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==}
engines: {node: '>=0.8'}
+ franc-min@6.2.0:
+ resolution: {integrity: sha512-1uDIEUSlUZgvJa2AKYR/dmJC66v/PvGQ9mWfI9nOr/kPpMFyvswK0gPXOwpYJYiYD008PpHLkGfG58SPjQJFxw==}
+
fs-constants@1.0.0:
resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==}
@@ -2588,6 +3159,10 @@ packages:
resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==}
engines: {node: '>= 0.4'}
+ get-nonce@1.0.1:
+ resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==}
+ engines: {node: '>=6'}
+
get-proto@1.0.1:
resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==}
engines: {node: '>= 0.4'}
@@ -2984,6 +3559,9 @@ packages:
jszip@3.10.1:
resolution: {integrity: sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==}
+ kdbush@4.1.0:
+ resolution: {integrity: sha512-e9vurzrXJQrFX6ckpHP3bvj5l+9CnYzkxDNnNQ1h2QTqdWsUAJgXiKdGNcOa1EY85dU8KbQ+z/FdQdB7P+9yfQ==}
+
keyv@4.5.4:
resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
@@ -3116,6 +3694,9 @@ packages:
lodash-es@4.17.21:
resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==}
+ lodash-es@4.18.1:
+ resolution: {integrity: sha512-J8xewKD/Gk22OZbhpOVSwcs60zhd95ESDwezOFuA3/099925PdHJ7OFHNTGtajL3AlZkykD32HykiMo+BIBI8A==}
+
lodash-unified@1.0.3:
resolution: {integrity: sha512-WK9qSozxXOD7ZJQlpSqOT+om2ZfcT4yO+03FuzAHD0wF6S0l0090LRPDx3vhTTLZ8cFKpBn+IOcVXK6qOcIlfQ==}
peerDependencies:
@@ -3219,10 +3800,17 @@ packages:
resolution: {integrity: sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==}
engines: {node: '>=18'}
+ long@5.3.2:
+ resolution: {integrity: sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==}
+
longest@2.0.1:
resolution: {integrity: sha512-Ajzxb8CM6WAnFjgiloPsI3bF+WCxcvhdIG3KNA2KN962+tdBsHcuQ4k4qX/EcS/2CRkcc0iAkR956Nib6aXU/Q==}
engines: {node: '>=0.10.0'}
+ loose-envify@1.4.0:
+ resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
+ hasBin: true
+
lower-case@2.0.2:
resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==}
@@ -3350,6 +3938,9 @@ packages:
mute-stream@0.0.8:
resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==}
+ n-gram@2.0.2:
+ resolution: {integrity: sha512-S24aGsn+HLBxUGVAUFOwGpKs7LBcG4RudKU//eWzt/mQ97/NMKQxDWHyHx63UNWk/OOdihgmzoETn1tf5nQDzQ==}
+
namespace-emitter@2.0.1:
resolution: {integrity: sha512-N/sMKHniSDJBjfrkbS/tpkPj4RAbvW3mr8UAzvlMHyun93XEm83IAvhWtJVHo+RHn/oO8Job5YN4b+wRjSVp5g==}
@@ -3447,6 +4038,12 @@ packages:
resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==}
engines: {node: '>=0.10.0'}
+ ot-json1@1.0.2:
+ resolution: {integrity: sha512-IhxkqVWQqlkWULoi/Q2AdzKk0N5vQRbUMUwubFXFCPcY4TsOZjmp2YKrk0/z1TeiECPadWEK060sdFdQ3Grokg==}
+
+ ot-text-unicode@4.0.0:
+ resolution: {integrity: sha512-W7ZLU8QXesY2wagYFv47zErXud3E93FGImmSGJsQnBzE+idcPPyo2u2KMilIrTwBh4pbCizy71qRjmmV6aDhcQ==}
+
p-limit@3.1.0:
resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
engines: {node: '>=10'}
@@ -3663,6 +4260,10 @@ packages:
process-nextick-args@2.0.1:
resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==}
+ protobufjs@7.6.6:
+ resolution: {integrity: sha512-dYDWdjSl5RNb7SgPxGQcRU+GtvP7s2fpkrY0r432PcOIaZ0/rBcxEZnQN67iJhFuQiVw754JDoPruPCNdGsbjg==}
+ engines: {node: '>=12.0.0'}
+
proxy-from-env@1.1.0:
resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==}
@@ -3685,9 +4286,54 @@ packages:
queue-microtask@1.2.3:
resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
+ quickselect@3.0.0:
+ resolution: {integrity: sha512-XdjUArbK4Bm5fLLvlm5KpTFOiOThgfWWI4axAZDWg4E/0mKdZyI9tNEfds27qCi1ze/vwTR16kvmmGhRra3c2g==}
+
raf@3.4.1:
resolution: {integrity: sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==}
+ rbush@4.0.1:
+ resolution: {integrity: sha512-IP0UpfeWQujYC8Jg162rMNc01Rf0gWMMAb2Uxus/Q0qOFw4lCcq6ZnQEZwUoJqWyUGJ9th7JjwI4yIWo+uvoAQ==}
+
+ react-dom@18.3.1:
+ resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==}
+ peerDependencies:
+ react: ^18.3.1
+
+ react-remove-scroll-bar@2.3.8:
+ resolution: {integrity: sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ react-remove-scroll@2.7.2:
+ resolution: {integrity: sha512-Iqb9NjCCTt6Hf+vOdNIZGdTiH1QSqr27H/Ek9sv/a97gfueI/5h1s3yRi1nngzMUaOOToin5dI1dXKdXiF+u0Q==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ react-style-singleton@2.2.3:
+ resolution: {integrity: sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ react@18.3.1:
+ resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==}
+ engines: {node: '>=0.10.0'}
+
readable-stream@2.3.8:
resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==}
@@ -3814,6 +4460,9 @@ packages:
resolution: {integrity: sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==}
engines: {node: '>=10'}
+ scheduler@0.23.2:
+ resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==}
+
scroll-into-view-if-needed@2.2.31:
resolution: {integrity: sha512-dGCXy99wZQivjmjIqihaBQNjryrz5rueJY7eHfTdyWEiR4ttYpsajb14rn9s5d4DY4EcY6+4+U/maARBXJedkA==}
@@ -3879,6 +4528,16 @@ packages:
resolution: {integrity: sha512-ig5qOnCDbugFntKi6c7Xlib8bA6xiJVk8O+WdFrV3wxbMqeHO0hXFQC4nAhPVWfZfi8255lcZkNhtIBINCc4+Q==}
engines: {node: '>=12.17.0'}
+ sonner@2.0.8:
+ resolution: {integrity: sha512-UM/ByIoFra8yzV75n1o0Puu0bw5U/9UNnDacrJNspekBewIfsQ3D6ez1nvlWpt7aTsO6rujQtifBpycwIivqlg==}
+ peerDependencies:
+ '@types/react': ^18.0.0 || ^19.0.0
+ react: ^18.0.0 || ^19.0.0 || ^19.0.0-rc
+ react-dom: ^18.0.0 || ^19.0.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
sortablejs@1.15.7:
resolution: {integrity: sha512-Kk8wLQPlS+yi1ZEf48a4+fzHa4yxjC30M/Sr2AnQu+f/MPwvvX9XjZ6OWejiz8crBsLwSq8GHqaxaET7u6ux0A==}
@@ -4126,6 +4785,9 @@ packages:
traverse@0.3.9:
resolution: {integrity: sha512-iawgk0hLP3SxGKDfnDJf8wTz4p2qImnyihM5Hh/sGvQ3K37dPi/w8sRhdNIxYA1TwFwc5mDhIJq+O0RsvXBKdQ==}
+ trigram-utils@2.0.1:
+ resolution: {integrity: sha512-nfWIXHEaB+HdyslAfMxSqWKDdmqY9I32jS7GnqpdWQnLH89r6A5sdk3fDVYqGAZ0CrT8ovAFSAo6HRiWcWNIGQ==}
+
ts-api-utils@2.1.0:
resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==}
engines: {node: '>=18.12'}
@@ -4135,8 +4797,8 @@ packages:
tslib@2.3.0:
resolution: {integrity: sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==}
- tslib@2.8.1:
- resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
+ tslib@2.9.1:
+ resolution: {integrity: sha512-a4Ux9VKuIMHsOS7ENbEq6hK2ZGYIT27Rtl0E4eD9KqwxhKiQeMZE/9xb3IdYwWaSOyIBQLExhQgXDTYoiCxnWA==}
tsx@4.20.6:
resolution: {integrity: sha512-ytQKuwgmrrkDTFP4LjR0ToE2nqgy886GpvRSpU0JAnrdBYppuY5rLkRUYPU1yCryb24SsKBTL/hlDQAEFVwtZg==}
@@ -4176,6 +4838,9 @@ packages:
undici-types@7.14.0:
resolution: {integrity: sha512-QQiYxHuyZ9gQUIrmPo3IA+hUl4KYk8uSA7cHrcKd/l3p1OTpZcM0Tbp9x7FAtXdAYhlasd60ncPpgu6ihG6TOA==}
+ undici-types@7.24.6:
+ resolution: {integrity: sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg==}
+
unicorn-magic@0.1.0:
resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==}
engines: {node: '>=18'}
@@ -4184,6 +4849,9 @@ packages:
resolution: {integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==}
engines: {node: '>=18'}
+ unicount@1.1.0:
+ resolution: {integrity: sha512-RlwWt1ywVW4WErPGAVHw/rIuJ2+MxvTME0siJ6lk9zBhpDfExDbspe6SRlWT3qU6AucNjotPl9qAJRVjP7guCQ==}
+
unimport@5.4.0:
resolution: {integrity: sha512-g/OLFZR2mEfqbC6NC9b2225eCJGvufxq34mj6kM3OmI5gdSL0qyqtnv+9qmsGpAmnzSl6x0IWZj4W+8j2hLkMA==}
engines: {node: '>=18.12.0'}
@@ -4245,6 +4913,26 @@ packages:
uri-js@4.4.1:
resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
+ use-callback-ref@1.3.3:
+ resolution: {integrity: sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ use-sidecar@1.1.3:
+ resolution: {integrity: sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
util-deprecate@1.0.2:
resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
@@ -4493,6 +5181,10 @@ packages:
resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==}
engines: {node: '>=12'}
+ yargs@17.7.3:
+ resolution: {integrity: sha512-GZtjxm/J/4TSxuL3FNYjCmLktBTnIw/rVmKSIyKeYAZpmJB2ig9VauCC5xsa82GNKVKDAqpOn3KVzNt0zmrU0g==}
+ engines: {node: '>=12'}
+
yocto-queue@0.1.0:
resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
engines: {node: '>=10'}
@@ -4509,8 +5201,8 @@ packages:
resolution: {integrity: sha512-9qv4rlDiopXg4E69k+vMHjNN63YFMe9sZMrdlvKnCjlCRWeCBswPPMPUfx+ipsAWq1LXHe70RcbaHdJJpS6hyQ==}
engines: {node: '>= 10'}
- zrender@6.0.0:
- resolution: {integrity: sha512-41dFXEEXuJpNecuUQq6JlbybmnHaqqpGlbH1yxnA5V9MMP4SbohSVZsJIwz+zdjQXSSlR1Vc34EgH1zxyTDvhg==}
+ zrender@6.1.0:
+ resolution: {integrity: sha512-oEGMDB6pOP2S6OwRR4PdVv610zrjnA3Bh+JnSG12fYJlBKjtNAoEb5fSUoCOOINlH96I2fU38/A2UpRKs67xYQ==}
snapshots:
@@ -5046,17 +5738,48 @@ snapshots:
lodash.isundefined: 3.0.1
lodash.uniq: 4.5.0
+ '@flatten-js/interval-tree@1.1.3': {}
+
'@floating-ui/core@1.7.3':
dependencies:
- '@floating-ui/utils': 0.2.10
+ '@floating-ui/utils': 0.2.12
+
+ '@floating-ui/core@1.8.0':
+ dependencies:
+ '@floating-ui/utils': 0.2.12
'@floating-ui/dom@1.7.4':
dependencies:
'@floating-ui/core': 1.7.3
'@floating-ui/utils': 0.2.10
+ '@floating-ui/dom@1.8.0':
+ dependencies:
+ '@floating-ui/core': 1.8.0
+ '@floating-ui/utils': 0.2.12
+
+ '@floating-ui/react-dom@2.1.9(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@floating-ui/dom': 1.8.0
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+
'@floating-ui/utils@0.2.10': {}
+ '@floating-ui/utils@0.2.12': {}
+
+ '@grpc/grpc-js@1.14.7':
+ dependencies:
+ '@grpc/proto-loader': 0.8.1
+ '@js-sdsl/ordered-map': 4.4.2
+
+ '@grpc/proto-loader@0.8.1':
+ dependencies:
+ lodash.camelcase: 4.3.0
+ long: 5.3.2
+ protobufjs: 7.6.6
+ yargs: 17.7.3
+
'@humanfs/core@0.19.1': {}
'@humanfs/node@0.16.7':
@@ -5119,12 +5842,16 @@ snapshots:
'@jridgewell/resolve-uri': 3.1.2
'@jridgewell/sourcemap-codec': 1.5.5
+ '@js-sdsl/ordered-map@4.4.2': {}
+
'@keyv/bigmap@1.0.2':
dependencies:
hookified: 1.12.1
'@keyv/serialize@1.1.1': {}
+ '@noble/hashes@1.8.0': {}
+
'@nodelib/fs.scandir@2.1.5':
dependencies:
'@nodelib/fs.stat': 2.0.5
@@ -5229,6 +5956,272 @@ snapshots:
'@polka/url@1.0.0-next.29': {}
+ '@protobufjs/aspromise@1.1.2': {}
+
+ '@protobufjs/base64@1.1.2': {}
+
+ '@protobufjs/codegen@2.0.5': {}
+
+ '@protobufjs/eventemitter@1.1.1': {}
+
+ '@protobufjs/fetch@1.1.1':
+ dependencies:
+ '@protobufjs/aspromise': 1.1.2
+
+ '@protobufjs/float@1.0.2': {}
+
+ '@protobufjs/path@1.1.2': {}
+
+ '@protobufjs/pool@1.1.0': {}
+
+ '@protobufjs/utf8@1.1.2': {}
+
+ '@radix-ui/primitive@1.2.0': {}
+
+ '@radix-ui/react-arrow@1.1.17(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@radix-ui/react-primitive': 2.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+
+ '@radix-ui/react-collection@1.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@radix-ui/react-compose-refs': 1.1.5(react@18.3.1)
+ '@radix-ui/react-context': 1.3.0(react@18.3.1)
+ '@radix-ui/react-primitive': 2.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-slot': 1.5.0(react@18.3.1)
+ '@radix-ui/react-use-layout-effect': 1.1.4(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+
+ '@radix-ui/react-compose-refs@1.1.5(react@18.3.1)':
+ dependencies:
+ react: 18.3.1
+
+ '@radix-ui/react-context@1.3.0(react@18.3.1)':
+ dependencies:
+ react: 18.3.1
+
+ '@radix-ui/react-dialog@1.3.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@radix-ui/primitive': 1.2.0
+ '@radix-ui/react-compose-refs': 1.1.5(react@18.3.1)
+ '@radix-ui/react-context': 1.3.0(react@18.3.1)
+ '@radix-ui/react-dismissable-layer': 1.2.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-focus-guards': 1.2.0(react@18.3.1)
+ '@radix-ui/react-focus-scope': 1.3.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-id': 1.1.4(react@18.3.1)
+ '@radix-ui/react-portal': 1.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-presence': 1.1.11(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-primitive': 2.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-slot': 1.5.0(react@18.3.1)
+ '@radix-ui/react-use-controllable-state': 1.3.0(react@18.3.1)
+ '@radix-ui/react-use-layout-effect': 1.1.4(react@18.3.1)
+ aria-hidden: 1.2.6
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ react-remove-scroll: 2.7.2(react@18.3.1)
+
+ '@radix-ui/react-direction@1.2.0(react@18.3.1)':
+ dependencies:
+ react: 18.3.1
+
+ '@radix-ui/react-dismissable-layer@1.2.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@radix-ui/primitive': 1.2.0
+ '@radix-ui/react-compose-refs': 1.1.5(react@18.3.1)
+ '@radix-ui/react-primitive': 2.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-use-callback-ref': 1.1.5(react@18.3.1)
+ '@radix-ui/react-use-effect-event': 0.0.5(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+
+ '@radix-ui/react-dropdown-menu@2.2.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@radix-ui/primitive': 1.2.0
+ '@radix-ui/react-compose-refs': 1.1.5(react@18.3.1)
+ '@radix-ui/react-context': 1.3.0(react@18.3.1)
+ '@radix-ui/react-id': 1.1.4(react@18.3.1)
+ '@radix-ui/react-menu': 2.2.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-primitive': 2.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-use-controllable-state': 1.3.0(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+
+ '@radix-ui/react-focus-guards@1.2.0(react@18.3.1)':
+ dependencies:
+ react: 18.3.1
+
+ '@radix-ui/react-focus-scope@1.3.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@radix-ui/react-compose-refs': 1.1.5(react@18.3.1)
+ '@radix-ui/react-primitive': 2.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-use-callback-ref': 1.1.5(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+
+ '@radix-ui/react-hover-card@1.2.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@radix-ui/primitive': 1.2.0
+ '@radix-ui/react-compose-refs': 1.1.5(react@18.3.1)
+ '@radix-ui/react-context': 1.3.0(react@18.3.1)
+ '@radix-ui/react-dismissable-layer': 1.2.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-focus-scope': 1.3.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-popper': 1.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-portal': 1.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-presence': 1.1.11(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-primitive': 2.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-use-controllable-state': 1.3.0(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+
+ '@radix-ui/react-id@1.1.4(react@18.3.1)':
+ dependencies:
+ '@radix-ui/react-use-layout-effect': 1.1.4(react@18.3.1)
+ react: 18.3.1
+
+ '@radix-ui/react-menu@2.2.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@radix-ui/primitive': 1.2.0
+ '@radix-ui/react-collection': 1.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-compose-refs': 1.1.5(react@18.3.1)
+ '@radix-ui/react-context': 1.3.0(react@18.3.1)
+ '@radix-ui/react-direction': 1.2.0(react@18.3.1)
+ '@radix-ui/react-dismissable-layer': 1.2.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-focus-guards': 1.2.0(react@18.3.1)
+ '@radix-ui/react-focus-scope': 1.3.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-id': 1.1.4(react@18.3.1)
+ '@radix-ui/react-popper': 1.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-portal': 1.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-presence': 1.1.11(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-primitive': 2.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-roving-focus': 1.2.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-slot': 1.5.0(react@18.3.1)
+ '@radix-ui/react-use-callback-ref': 1.1.5(react@18.3.1)
+ aria-hidden: 1.2.6
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ react-remove-scroll: 2.7.2(react@18.3.1)
+
+ '@radix-ui/react-popover@1.3.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@radix-ui/primitive': 1.2.0
+ '@radix-ui/react-compose-refs': 1.1.5(react@18.3.1)
+ '@radix-ui/react-context': 1.3.0(react@18.3.1)
+ '@radix-ui/react-dismissable-layer': 1.2.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-focus-guards': 1.2.0(react@18.3.1)
+ '@radix-ui/react-focus-scope': 1.3.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-id': 1.1.4(react@18.3.1)
+ '@radix-ui/react-popper': 1.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-portal': 1.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-presence': 1.1.11(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-primitive': 2.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-slot': 1.5.0(react@18.3.1)
+ '@radix-ui/react-use-controllable-state': 1.3.0(react@18.3.1)
+ '@radix-ui/react-use-layout-effect': 1.1.4(react@18.3.1)
+ aria-hidden: 1.2.6
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ react-remove-scroll: 2.7.2(react@18.3.1)
+
+ '@radix-ui/react-popper@1.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@floating-ui/react-dom': 2.1.9(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-arrow': 1.1.17(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-compose-refs': 1.1.5(react@18.3.1)
+ '@radix-ui/react-context': 1.3.0(react@18.3.1)
+ '@radix-ui/react-primitive': 2.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-use-callback-ref': 1.1.5(react@18.3.1)
+ '@radix-ui/react-use-layout-effect': 1.1.4(react@18.3.1)
+ '@radix-ui/react-use-rect': 1.1.4(react@18.3.1)
+ '@radix-ui/react-use-size': 1.1.5(react@18.3.1)
+ '@radix-ui/rect': 1.1.3
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+
+ '@radix-ui/react-portal@1.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@radix-ui/react-primitive': 2.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-use-layout-effect': 1.1.4(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+
+ '@radix-ui/react-presence@1.1.11(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@radix-ui/react-use-layout-effect': 1.1.4(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+
+ '@radix-ui/react-primitive@2.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@radix-ui/react-slot': 1.5.0(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+
+ '@radix-ui/react-roving-focus@1.2.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@radix-ui/primitive': 1.2.0
+ '@radix-ui/react-collection': 1.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-compose-refs': 1.1.5(react@18.3.1)
+ '@radix-ui/react-context': 1.3.0(react@18.3.1)
+ '@radix-ui/react-direction': 1.2.0(react@18.3.1)
+ '@radix-ui/react-id': 1.1.4(react@18.3.1)
+ '@radix-ui/react-primitive': 2.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-use-callback-ref': 1.1.5(react@18.3.1)
+ '@radix-ui/react-use-controllable-state': 1.3.0(react@18.3.1)
+ '@radix-ui/react-use-is-hydrated': 0.1.3(react@18.3.1)
+ '@radix-ui/react-use-layout-effect': 1.1.4(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+
+ '@radix-ui/react-separator@1.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@radix-ui/react-primitive': 2.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+
+ '@radix-ui/react-slot@1.5.0(react@18.3.1)':
+ dependencies:
+ '@radix-ui/react-compose-refs': 1.1.5(react@18.3.1)
+ react: 18.3.1
+
+ '@radix-ui/react-use-callback-ref@1.1.5(react@18.3.1)':
+ dependencies:
+ '@radix-ui/react-use-layout-effect': 1.1.4(react@18.3.1)
+ react: 18.3.1
+
+ '@radix-ui/react-use-controllable-state@1.3.0(react@18.3.1)':
+ dependencies:
+ '@radix-ui/primitive': 1.2.0
+ '@radix-ui/react-use-effect-event': 0.0.5(react@18.3.1)
+ '@radix-ui/react-use-layout-effect': 1.1.4(react@18.3.1)
+ react: 18.3.1
+
+ '@radix-ui/react-use-effect-event@0.0.5(react@18.3.1)':
+ dependencies:
+ '@radix-ui/react-use-layout-effect': 1.1.4(react@18.3.1)
+ react: 18.3.1
+
+ '@radix-ui/react-use-is-hydrated@0.1.3(react@18.3.1)':
+ dependencies:
+ react: 18.3.1
+
+ '@radix-ui/react-use-layout-effect@1.1.4(react@18.3.1)':
+ dependencies:
+ react: 18.3.1
+
+ '@radix-ui/react-use-rect@1.1.4(react@18.3.1)':
+ dependencies:
+ '@radix-ui/rect': 1.1.3
+ react: 18.3.1
+
+ '@radix-ui/react-use-size@1.1.5(react@18.3.1)':
+ dependencies:
+ '@radix-ui/react-use-layout-effect': 1.1.4(react@18.3.1)
+ react: 18.3.1
+
+ '@radix-ui/rect@1.1.3': {}
+
'@rolldown/pluginutils@1.0.0-beta.29': {}
'@rollup/pluginutils@5.3.0(rollup@4.52.3)':
@@ -5428,6 +6421,10 @@ snapshots:
'@types/node@14.18.63': {}
+ '@types/node@24.19.2':
+ dependencies:
+ undici-types: 7.24.6
+
'@types/node@24.8.1':
dependencies:
undici-types: 7.14.0
@@ -5541,6 +6538,309 @@ snapshots:
'@typescript-eslint/types': 8.44.1
eslint-visitor-keys: 4.2.1
+ '@univerjs/core@1.4.0(react@18.3.1)(rxjs@7.8.2)':
+ dependencies:
+ '@univerjs/protocol': 1.4.0
+ '@univerjs/themes': 1.4.0
+ '@wendellhu/redi': 1.1.3(react@18.3.1)
+ async-lock: 1.5.0
+ fast-diff: 1.3.0
+ kdbush: 4.1.0
+ lodash-es: 4.18.1
+ ot-json1: 1.0.2
+ rbush: 4.0.1
+ rxjs: 7.8.2
+ transitivePeerDependencies:
+ - react
+
+ '@univerjs/design@1.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@radix-ui/react-dialog': 1.3.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-direction': 1.2.0(react@18.3.1)
+ '@radix-ui/react-dropdown-menu': 2.2.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-hover-card': 1.2.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-popover': 1.3.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-separator': 1.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-slot': 1.5.0(react@18.3.1)
+ '@univerjs/icons': 1.47.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ class-variance-authority: 0.7.1
+ cmdk: 1.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ sonner: 2.0.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ transitivePeerDependencies:
+ - '@types/react'
+ - '@types/react-dom'
+
+ '@univerjs/docs-ui@1.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rxjs@7.8.2)':
+ dependencies:
+ '@univerjs/core': 1.4.0(react@18.3.1)(rxjs@7.8.2)
+ '@univerjs/design': 1.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@univerjs/docs': 1.4.0(react@18.3.1)(rxjs@7.8.2)
+ '@univerjs/drawing': 1.4.0(react@18.3.1)(rxjs@7.8.2)
+ '@univerjs/engine-render': 1.4.0(react@18.3.1)(rxjs@7.8.2)
+ '@univerjs/icons': 1.47.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@univerjs/protocol': 1.4.0
+ '@univerjs/ui': 1.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rxjs@7.8.2)
+ react: 18.3.1
+ rxjs: 7.8.2
+ transitivePeerDependencies:
+ - '@types/react'
+ - '@types/react-dom'
+ - react-dom
+
+ '@univerjs/docs@1.4.0(react@18.3.1)(rxjs@7.8.2)':
+ dependencies:
+ '@univerjs/core': 1.4.0(react@18.3.1)(rxjs@7.8.2)
+ '@univerjs/engine-render': 1.4.0(react@18.3.1)(rxjs@7.8.2)
+ '@univerjs/protocol': 1.4.0
+ '@univerjs/rpc': 1.4.0(react@18.3.1)(rxjs@7.8.2)
+ rxjs: 7.8.2
+ transitivePeerDependencies:
+ - react
+
+ '@univerjs/drawing@1.4.0(react@18.3.1)(rxjs@7.8.2)':
+ dependencies:
+ '@noble/hashes': 1.8.0
+ '@univerjs/core': 1.4.0(react@18.3.1)(rxjs@7.8.2)
+ rxjs: 7.8.2
+ transitivePeerDependencies:
+ - react
+
+ '@univerjs/engine-formula@1.4.0(react@18.3.1)(rxjs@7.8.2)':
+ dependencies:
+ '@flatten-js/interval-tree': 1.1.3
+ '@univerjs/core': 1.4.0(react@18.3.1)(rxjs@7.8.2)
+ '@univerjs/rpc': 1.4.0(react@18.3.1)(rxjs@7.8.2)
+ decimal.js: 10.6.0
+ rxjs: 7.8.2
+ transitivePeerDependencies:
+ - react
+
+ '@univerjs/engine-render@1.4.0(react@18.3.1)(rxjs@7.8.2)':
+ dependencies:
+ '@floating-ui/dom': 1.8.0
+ '@floating-ui/utils': 0.2.12
+ '@univerjs/core': 1.4.0(react@18.3.1)(rxjs@7.8.2)
+ franc-min: 6.2.0
+ rxjs: 7.8.2
+ transitivePeerDependencies:
+ - react
+
+ '@univerjs/icons@1.47.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+
+ '@univerjs/network@1.4.0(react@18.3.1)(rxjs@7.8.2)':
+ dependencies:
+ '@univerjs/core': 1.4.0(react@18.3.1)(rxjs@7.8.2)
+ rxjs: 7.8.2
+ transitivePeerDependencies:
+ - react
+
+ '@univerjs/preset-sheets-core@1.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rxjs@7.8.2)':
+ dependencies:
+ '@univerjs/design': 1.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@univerjs/docs': 1.4.0(react@18.3.1)(rxjs@7.8.2)
+ '@univerjs/docs-ui': 1.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rxjs@7.8.2)
+ '@univerjs/engine-formula': 1.4.0(react@18.3.1)(rxjs@7.8.2)
+ '@univerjs/engine-render': 1.4.0(react@18.3.1)(rxjs@7.8.2)
+ '@univerjs/network': 1.4.0(react@18.3.1)(rxjs@7.8.2)
+ '@univerjs/rpc': 1.4.0(react@18.3.1)(rxjs@7.8.2)
+ '@univerjs/sheets': 1.4.0(react@18.3.1)(rxjs@7.8.2)
+ '@univerjs/sheets-formula': 1.4.0(react@18.3.1)(rxjs@7.8.2)
+ '@univerjs/sheets-formula-ui': 1.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rxjs@7.8.2)
+ '@univerjs/sheets-numfmt': 1.4.0(react@18.3.1)(rxjs@7.8.2)
+ '@univerjs/sheets-numfmt-ui': 1.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rxjs@7.8.2)
+ '@univerjs/sheets-ui': 1.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rxjs@7.8.2)
+ '@univerjs/ui': 1.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rxjs@7.8.2)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ rxjs: 7.8.2
+ transitivePeerDependencies:
+ - '@types/react'
+ - '@types/react-dom'
+
+ '@univerjs/preset-sheets-filter@1.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rxjs@7.8.2)':
+ dependencies:
+ '@univerjs/sheets-filter': 1.4.0(react@18.3.1)(rxjs@7.8.2)
+ '@univerjs/sheets-filter-ui': 1.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rxjs@7.8.2)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ rxjs: 7.8.2
+ transitivePeerDependencies:
+ - '@types/react'
+ - '@types/react-dom'
+
+ '@univerjs/presets@1.4.0(react@18.3.1)(rxjs@7.8.2)':
+ dependencies:
+ '@univerjs/core': 1.4.0(react@18.3.1)(rxjs@7.8.2)
+ '@univerjs/drawing': 1.4.0(react@18.3.1)(rxjs@7.8.2)
+ '@univerjs/engine-formula': 1.4.0(react@18.3.1)(rxjs@7.8.2)
+ '@univerjs/engine-render': 1.4.0(react@18.3.1)(rxjs@7.8.2)
+ '@univerjs/network': 1.4.0(react@18.3.1)(rxjs@7.8.2)
+ '@univerjs/protocol': 1.4.0
+ '@univerjs/rpc': 1.4.0(react@18.3.1)(rxjs@7.8.2)
+ '@univerjs/telemetry': 1.4.0(react@18.3.1)(rxjs@7.8.2)
+ '@univerjs/themes': 1.4.0
+ transitivePeerDependencies:
+ - react
+ - rxjs
+
+ '@univerjs/protocol@1.4.0':
+ dependencies:
+ '@grpc/grpc-js': 1.14.7
+
+ '@univerjs/rpc@1.4.0(react@18.3.1)(rxjs@7.8.2)':
+ dependencies:
+ '@univerjs/core': 1.4.0(react@18.3.1)(rxjs@7.8.2)
+ rxjs: 7.8.2
+ transitivePeerDependencies:
+ - react
+
+ '@univerjs/sheets-filter-ui@1.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rxjs@7.8.2)':
+ dependencies:
+ '@univerjs/core': 1.4.0(react@18.3.1)(rxjs@7.8.2)
+ '@univerjs/design': 1.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@univerjs/engine-render': 1.4.0(react@18.3.1)(rxjs@7.8.2)
+ '@univerjs/icons': 1.47.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@univerjs/rpc': 1.4.0(react@18.3.1)(rxjs@7.8.2)
+ '@univerjs/sheets': 1.4.0(react@18.3.1)(rxjs@7.8.2)
+ '@univerjs/sheets-filter': 1.4.0(react@18.3.1)(rxjs@7.8.2)
+ '@univerjs/sheets-ui': 1.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rxjs@7.8.2)
+ '@univerjs/ui': 1.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rxjs@7.8.2)
+ react: 18.3.1
+ rxjs: 7.8.2
+ transitivePeerDependencies:
+ - '@types/react'
+ - '@types/react-dom'
+ - react-dom
+
+ '@univerjs/sheets-filter@1.4.0(react@18.3.1)(rxjs@7.8.2)':
+ dependencies:
+ '@univerjs/core': 1.4.0(react@18.3.1)(rxjs@7.8.2)
+ '@univerjs/engine-formula': 1.4.0(react@18.3.1)(rxjs@7.8.2)
+ '@univerjs/engine-render': 1.4.0(react@18.3.1)(rxjs@7.8.2)
+ '@univerjs/rpc': 1.4.0(react@18.3.1)(rxjs@7.8.2)
+ '@univerjs/sheets': 1.4.0(react@18.3.1)(rxjs@7.8.2)
+ rxjs: 7.8.2
+ transitivePeerDependencies:
+ - react
+
+ '@univerjs/sheets-formula-ui@1.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rxjs@7.8.2)':
+ dependencies:
+ '@univerjs/core': 1.4.0(react@18.3.1)(rxjs@7.8.2)
+ '@univerjs/design': 1.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@univerjs/docs': 1.4.0(react@18.3.1)(rxjs@7.8.2)
+ '@univerjs/docs-ui': 1.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rxjs@7.8.2)
+ '@univerjs/engine-formula': 1.4.0(react@18.3.1)(rxjs@7.8.2)
+ '@univerjs/engine-render': 1.4.0(react@18.3.1)(rxjs@7.8.2)
+ '@univerjs/icons': 1.47.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@univerjs/sheets': 1.4.0(react@18.3.1)(rxjs@7.8.2)
+ '@univerjs/sheets-formula': 1.4.0(react@18.3.1)(rxjs@7.8.2)
+ '@univerjs/sheets-ui': 1.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rxjs@7.8.2)
+ '@univerjs/ui': 1.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rxjs@7.8.2)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ rxjs: 7.8.2
+ transitivePeerDependencies:
+ - '@types/react'
+ - '@types/react-dom'
+
+ '@univerjs/sheets-formula@1.4.0(react@18.3.1)(rxjs@7.8.2)':
+ dependencies:
+ '@univerjs/core': 1.4.0(react@18.3.1)(rxjs@7.8.2)
+ '@univerjs/docs': 1.4.0(react@18.3.1)(rxjs@7.8.2)
+ '@univerjs/engine-formula': 1.4.0(react@18.3.1)(rxjs@7.8.2)
+ '@univerjs/rpc': 1.4.0(react@18.3.1)(rxjs@7.8.2)
+ '@univerjs/sheets': 1.4.0(react@18.3.1)(rxjs@7.8.2)
+ rxjs: 7.8.2
+ transitivePeerDependencies:
+ - react
+
+ '@univerjs/sheets-numfmt-ui@1.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rxjs@7.8.2)':
+ dependencies:
+ '@univerjs/core': 1.4.0(react@18.3.1)(rxjs@7.8.2)
+ '@univerjs/design': 1.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@univerjs/engine-formula': 1.4.0(react@18.3.1)(rxjs@7.8.2)
+ '@univerjs/engine-render': 1.4.0(react@18.3.1)(rxjs@7.8.2)
+ '@univerjs/icons': 1.47.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@univerjs/sheets': 1.4.0(react@18.3.1)(rxjs@7.8.2)
+ '@univerjs/sheets-numfmt': 1.4.0(react@18.3.1)(rxjs@7.8.2)
+ '@univerjs/sheets-ui': 1.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rxjs@7.8.2)
+ '@univerjs/ui': 1.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rxjs@7.8.2)
+ react: 18.3.1
+ rxjs: 7.8.2
+ transitivePeerDependencies:
+ - '@types/react'
+ - '@types/react-dom'
+ - react-dom
+
+ '@univerjs/sheets-numfmt@1.4.0(react@18.3.1)(rxjs@7.8.2)':
+ dependencies:
+ '@univerjs/core': 1.4.0(react@18.3.1)(rxjs@7.8.2)
+ '@univerjs/engine-formula': 1.4.0(react@18.3.1)(rxjs@7.8.2)
+ '@univerjs/sheets': 1.4.0(react@18.3.1)(rxjs@7.8.2)
+ rxjs: 7.8.2
+ transitivePeerDependencies:
+ - react
+
+ '@univerjs/sheets-ui@1.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rxjs@7.8.2)':
+ dependencies:
+ '@univerjs/core': 1.4.0(react@18.3.1)(rxjs@7.8.2)
+ '@univerjs/design': 1.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@univerjs/docs': 1.4.0(react@18.3.1)(rxjs@7.8.2)
+ '@univerjs/docs-ui': 1.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rxjs@7.8.2)
+ '@univerjs/engine-formula': 1.4.0(react@18.3.1)(rxjs@7.8.2)
+ '@univerjs/engine-render': 1.4.0(react@18.3.1)(rxjs@7.8.2)
+ '@univerjs/icons': 1.47.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@univerjs/protocol': 1.4.0
+ '@univerjs/sheets': 1.4.0(react@18.3.1)(rxjs@7.8.2)
+ '@univerjs/telemetry': 1.4.0(react@18.3.1)(rxjs@7.8.2)
+ '@univerjs/ui': 1.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rxjs@7.8.2)
+ react: 18.3.1
+ rxjs: 7.8.2
+ transitivePeerDependencies:
+ - '@types/react'
+ - '@types/react-dom'
+ - react-dom
+
+ '@univerjs/sheets@1.4.0(react@18.3.1)(rxjs@7.8.2)':
+ dependencies:
+ '@univerjs/core': 1.4.0(react@18.3.1)(rxjs@7.8.2)
+ '@univerjs/engine-formula': 1.4.0(react@18.3.1)(rxjs@7.8.2)
+ '@univerjs/engine-render': 1.4.0(react@18.3.1)(rxjs@7.8.2)
+ '@univerjs/protocol': 1.4.0
+ '@univerjs/rpc': 1.4.0(react@18.3.1)(rxjs@7.8.2)
+ rxjs: 7.8.2
+ transitivePeerDependencies:
+ - react
+
+ '@univerjs/telemetry@1.4.0(react@18.3.1)(rxjs@7.8.2)':
+ dependencies:
+ '@univerjs/core': 1.4.0(react@18.3.1)(rxjs@7.8.2)
+ transitivePeerDependencies:
+ - react
+ - rxjs
+
+ '@univerjs/themes@1.4.0': {}
+
+ '@univerjs/ui@1.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rxjs@7.8.2)':
+ dependencies:
+ '@univerjs/core': 1.4.0(react@18.3.1)(rxjs@7.8.2)
+ '@univerjs/design': 1.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@univerjs/engine-render': 1.4.0(react@18.3.1)(rxjs@7.8.2)
+ '@univerjs/icons': 1.47.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@univerjs/protocol': 1.4.0
+ '@wendellhu/redi': 1.1.3(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ rxjs: 7.8.2
+ transitivePeerDependencies:
+ - '@types/react'
+ - '@types/react-dom'
+
'@uppy/companion-client@2.2.2':
dependencies:
'@uppy/utils': 4.1.3
@@ -5901,6 +7201,10 @@ snapshots:
slate: 0.72.8
snabbdom: 3.6.2
+ '@wendellhu/redi@1.1.3(react@18.3.1)':
+ optionalDependencies:
+ react: 18.3.1
+
JSONStream@1.3.5:
dependencies:
jsonparse: 1.3.1
@@ -6003,12 +7307,18 @@ snapshots:
argparse@2.0.1: {}
+ aria-hidden@1.2.6:
+ dependencies:
+ tslib: 2.9.1
+
array-ify@1.0.0: {}
array-union@2.1.0: {}
astral-regex@2.0.0: {}
+ async-lock@1.5.0: {}
+
async-validator@4.2.5: {}
async@3.2.6: {}
@@ -6129,7 +7439,7 @@ snapshots:
camel-case@4.1.2:
dependencies:
pascal-case: 3.1.2
- tslib: 2.8.1
+ tslib: 2.9.1
caniuse-lite@1.0.30001745: {}
@@ -6187,6 +7497,10 @@ snapshots:
chownr@3.0.0: {}
+ class-variance-authority@0.7.1:
+ dependencies:
+ clsx: 2.1.1
+
clean-css@5.3.3:
dependencies:
source-map: 0.6.1
@@ -6216,8 +7530,24 @@ snapshots:
clone@1.0.4: {}
+ clsx@2.1.1: {}
+
+ cmdk@1.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
+ dependencies:
+ '@radix-ui/react-compose-refs': 1.1.5(react@18.3.1)
+ '@radix-ui/react-dialog': 1.3.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-id': 1.1.4(react@18.3.1)
+ '@radix-ui/react-primitive': 2.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ transitivePeerDependencies:
+ - '@types/react'
+ - '@types/react-dom'
+
codepage@1.15.0: {}
+ collapse-white-space@2.1.0: {}
+
color-convert@1.9.3:
dependencies:
color-name: 1.1.3
@@ -6443,6 +7773,8 @@ snapshots:
dependencies:
ms: 2.1.3
+ decimal.js@10.6.0: {}
+
dedent@0.7.0: {}
deep-is@0.1.4: {}
@@ -6481,6 +7813,8 @@ snapshots:
detect-libc@2.1.2: {}
+ detect-node-es@1.1.0: {}
+
dir-glob@3.0.1:
dependencies:
path-type: 4.0.0
@@ -6517,7 +7851,7 @@ snapshots:
dot-case@3.0.4:
dependencies:
no-case: 3.0.4
- tslib: 2.8.1
+ tslib: 2.9.1
dot-prop@5.3.0:
dependencies:
@@ -6535,10 +7869,10 @@ snapshots:
dependencies:
readable-stream: 2.3.8
- echarts@6.0.0:
+ echarts@6.1.0:
dependencies:
tslib: 2.3.0
- zrender: 6.0.0
+ zrender: 6.1.0
electron-to-chromium@1.5.227: {}
@@ -6971,6 +8305,10 @@ snapshots:
frac@1.1.2: {}
+ franc-min@6.2.0:
+ dependencies:
+ trigram-utils: 2.0.1
+
fs-constants@1.0.0: {}
fs-extra@10.1.0:
@@ -7028,6 +8366,8 @@ snapshots:
hasown: 2.0.4
math-intrinsics: 1.1.0
+ get-nonce@1.0.1: {}
+
get-proto@1.0.1:
dependencies:
dunder-proto: 1.0.1
@@ -7386,6 +8726,8 @@ snapshots:
readable-stream: 2.3.8
setimmediate: 1.0.5
+ kdbush@4.1.0: {}
+
keyv@4.5.4:
dependencies:
json-buffer: 3.0.1
@@ -7506,6 +8848,8 @@ snapshots:
lodash-es@4.17.21: {}
+ lodash-es@4.18.1: {}
+
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
@@ -7583,11 +8927,17 @@ snapshots:
strip-ansi: 7.1.2
wrap-ansi: 9.0.2
+ long@5.3.2: {}
+
longest@2.0.1: {}
+ loose-envify@1.4.0:
+ dependencies:
+ js-tokens: 4.0.0
+
lower-case@2.0.2:
dependencies:
- tslib: 2.8.1
+ tslib: 2.9.1
lru-cache@10.4.3: {}
@@ -7687,6 +9037,8 @@ snapshots:
mute-stream@0.0.8: {}
+ n-gram@2.0.2: {}
+
namespace-emitter@2.0.1: {}
nanoid@3.3.11: {}
@@ -7710,7 +9062,7 @@ snapshots:
no-case@3.0.4:
dependencies:
lower-case: 2.0.2
- tslib: 2.8.1
+ tslib: 2.9.1
node-addon-api@7.1.1:
optional: true
@@ -7790,6 +9142,14 @@ snapshots:
os-tmpdir@1.0.2: {}
+ ot-json1@1.0.2:
+ dependencies:
+ ot-text-unicode: 4.0.0
+
+ ot-text-unicode@4.0.0:
+ dependencies:
+ unicount: 1.1.0
+
p-limit@3.1.0:
dependencies:
yocto-queue: 0.1.0
@@ -7813,7 +9173,7 @@ snapshots:
param-case@3.0.4:
dependencies:
dot-case: 3.0.4
- tslib: 2.8.1
+ tslib: 2.9.1
parent-module@1.0.1:
dependencies:
@@ -7833,7 +9193,7 @@ snapshots:
pascal-case@3.1.2:
dependencies:
no-case: 3.0.4
- tslib: 2.8.1
+ tslib: 2.9.1
path-browserify@1.0.1: {}
@@ -7972,6 +9332,20 @@ snapshots:
process-nextick-args@2.0.1: {}
+ protobufjs@7.6.6:
+ dependencies:
+ '@protobufjs/aspromise': 1.1.2
+ '@protobufjs/base64': 1.1.2
+ '@protobufjs/codegen': 2.0.5
+ '@protobufjs/eventemitter': 1.1.1
+ '@protobufjs/fetch': 1.1.1
+ '@protobufjs/float': 1.0.2
+ '@protobufjs/path': 1.1.2
+ '@protobufjs/pool': 1.1.0
+ '@protobufjs/utf8': 1.1.2
+ '@types/node': 24.19.2
+ long: 5.3.2
+
proxy-from-env@1.1.0: {}
proxy-from-env@2.1.0: {}
@@ -7986,11 +9360,48 @@ snapshots:
queue-microtask@1.2.3: {}
+ quickselect@3.0.0: {}
+
raf@3.4.1:
dependencies:
performance-now: 2.1.0
optional: true
+ rbush@4.0.1:
+ dependencies:
+ quickselect: 3.0.0
+
+ react-dom@18.3.1(react@18.3.1):
+ dependencies:
+ loose-envify: 1.4.0
+ react: 18.3.1
+ scheduler: 0.23.2
+
+ react-remove-scroll-bar@2.3.8(react@18.3.1):
+ dependencies:
+ react: 18.3.1
+ react-style-singleton: 2.2.3(react@18.3.1)
+ tslib: 2.9.1
+
+ react-remove-scroll@2.7.2(react@18.3.1):
+ dependencies:
+ react: 18.3.1
+ react-remove-scroll-bar: 2.3.8(react@18.3.1)
+ react-style-singleton: 2.2.3(react@18.3.1)
+ tslib: 2.9.1
+ use-callback-ref: 1.3.3(react@18.3.1)
+ use-sidecar: 1.1.3(react@18.3.1)
+
+ react-style-singleton@2.2.3(react@18.3.1):
+ dependencies:
+ get-nonce: 1.0.1
+ react: 18.3.1
+ tslib: 2.9.1
+
+ react@18.3.1:
+ dependencies:
+ loose-envify: 1.4.0
+
readable-stream@2.3.8:
dependencies:
core-util-is: 1.0.3
@@ -8105,7 +9516,7 @@ snapshots:
rxjs@7.8.2:
dependencies:
- tslib: 2.8.1
+ tslib: 2.9.1
safe-buffer@5.1.2: {}
@@ -8127,6 +9538,10 @@ snapshots:
dependencies:
xmlchars: 2.2.0
+ scheduler@0.23.2:
+ dependencies:
+ loose-envify: 1.4.0
+
scroll-into-view-if-needed@2.2.31:
dependencies:
compute-scroll-into-view: 1.0.20
@@ -8186,6 +9601,11 @@ snapshots:
snabbdom@3.6.2: {}
+ sonner@2.0.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
+ dependencies:
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+
sortablejs@1.15.7: {}
source-map-js@1.2.1: {}
@@ -8463,13 +9883,18 @@ snapshots:
traverse@0.3.9: {}
+ trigram-utils@2.0.1:
+ dependencies:
+ collapse-white-space: 2.1.0
+ n-gram: 2.0.2
+
ts-api-utils@2.1.0(typescript@5.6.3):
dependencies:
typescript: 5.6.3
tslib@2.3.0: {}
- tslib@2.8.1: {}
+ tslib@2.9.1: {}
tsx@4.20.6:
dependencies:
@@ -8505,10 +9930,14 @@ snapshots:
undici-types@7.14.0: {}
+ undici-types@7.24.6: {}
+
unicorn-magic@0.1.0: {}
unicorn-magic@0.3.0: {}
+ unicount@1.1.0: {}
+
unimport@5.4.0:
dependencies:
acorn: 8.15.0
@@ -8602,6 +10031,17 @@ snapshots:
dependencies:
punycode: 2.3.1
+ use-callback-ref@1.3.3(react@18.3.1):
+ dependencies:
+ react: 18.3.1
+ tslib: 2.9.1
+
+ use-sidecar@1.1.3(react@18.3.1):
+ dependencies:
+ detect-node-es: 1.1.0
+ react: 18.3.1
+ tslib: 2.9.1
+
util-deprecate@1.0.2: {}
utility-types@3.11.0: {}
@@ -8856,6 +10296,16 @@ snapshots:
y18n: 5.0.8
yargs-parser: 21.1.1
+ yargs@17.7.3:
+ dependencies:
+ cliui: 8.0.1
+ escalade: 3.2.0
+ get-caller-file: 2.0.5
+ require-directory: 2.1.1
+ string-width: 4.2.3
+ y18n: 5.0.8
+ yargs-parser: 21.1.1
+
yocto-queue@0.1.0: {}
yocto-queue@1.2.1: {}
@@ -8868,6 +10318,6 @@ snapshots:
compress-commons: 4.1.2
readable-stream: 3.6.2
- zrender@6.0.0:
+ zrender@6.1.0:
dependencies:
tslib: 2.3.0
diff --git a/web-admin/pnpm-workspace.yaml b/web-admin/pnpm-workspace.yaml
index 96220d2d7..18ab3382d 100644
--- a/web-admin/pnpm-workspace.yaml
+++ b/web-admin/pnpm-workspace.yaml
@@ -9,4 +9,5 @@ allowBuilds:
core-js: false
es5-ext: false
esbuild: true
+ protobufjs: false
vue-demi: true
diff --git a/web-admin/src/assets/styles/core/app.scss b/web-admin/src/assets/styles/core/app.scss
index f75746b0b..c8351f470 100755
--- a/web-admin/src/assets/styles/core/app.scss
+++ b/web-admin/src/assets/styles/core/app.scss
@@ -1900,19 +1900,6 @@ body {
}
}
-.list-table.is-excel-copy {
- th.is-excel-col,
- td.is-excel-rowhead {
- background: var(--mint-primary-bg) !important;
- color: var(--mint-primary-dark);
- }
-
- td.is-excel-cell {
- background: rgba(16, 185, 129, 0.16) !important;
- box-shadow: inset 0 0 0 1px var(--mint-primary-dark);
- }
-}
-
/* 筛选区 label:13px 次要色(对齐 zkxw filter-form 实践;filter-hint 仍为 11px) */
.page-container .filter-block .el-form-item__label,
.console-container .filter-block .el-form-item__label,
diff --git a/web-admin/src/components/business/list-excel-viewer-dialog/index.vue b/web-admin/src/components/business/list-excel-viewer-dialog/index.vue
new file mode 100644
index 000000000..c4830b726
--- /dev/null
+++ b/web-admin/src/components/business/list-excel-viewer-dialog/index.vue
@@ -0,0 +1,256 @@
+
+
+
+
+
只读模式:可筛选、复制;不可编辑或写回系统。
+
+
+
+
+
+
+
+
+
+
diff --git a/web-admin/src/components/business/list-table/index.vue b/web-admin/src/components/business/list-table/index.vue
index 715a3dd46..680f46bbd 100644
--- a/web-admin/src/components/business/list-table/index.vue
+++ b/web-admin/src/components/business/list-table/index.vue
@@ -1,6 +1,7 @@
(),
{
@@ -71,17 +68,11 @@
computed(() => props.tableKey)
)
- const excelMode = ref(false)
- const selectedCols = ref(new Set())
- const selectedRows = ref(new Set())
- let colAnchor: number | null = null
- let rowAnchor: number | null = null
-
const resolvedBorder = computed(() => props.border !== false)
const tableClass = computed(() => {
const extra = attrs.class
- return ['list-table', { 'is-excel-copy': excelMode.value }, extra]
+ return ['list-table', extra]
})
const tableAttrs = computed(() => {
@@ -157,14 +148,6 @@
}))
}
- function copyableColumns(): ListExcelColumn[] {
- return readColumns().filter((col) => col.id && isCopyableColumn(col))
- }
-
- function indexColumn(): ListExcelColumn | undefined {
- return readColumns().find((col) => col.id && isRowSelectorColumn(col))
- }
-
function tableRoot(): HTMLElement | null {
const el = tableRef.value?.$el as HTMLElement | undefined
return el ?? null
@@ -176,254 +159,45 @@
return Array.from(root.querySelectorAll('.el-table__body-wrapper tbody > tr.el-table__row'))
}
- function columnFromCell(cell: HTMLElement): ListExcelColumn | undefined {
+ /** 当前可见列 + 当前页行文本,供 Excel 只读弹层使用 */
+ function getExcelSnapshot(): ListExcelSnapshot {
+ if (!props.excelCopy) return { headers: [], rows: [] }
const columns = readColumns()
- const matched = columns.find((col) => col.id && cell.classList.contains(col.id))
- if (matched) return matched
- const row = cell.parentElement
- if (!row) return undefined
- const cells = Array.from(row.children).filter(
- (el): el is HTMLTableCellElement => el instanceof HTMLTableCellElement
+ const copyable = columns.filter((col) => col.id && isCopyableColumn(col))
+ const rows = bodyRows()
+ const rowValues = rows.map((row) =>
+ copyable.map((col) => {
+ const td = row.querySelector(`td.${CSS.escape(col.id)}`)
+ return td?.textContent ?? ''
+ })
)
- const visualIndex = cells.indexOf(cell as HTMLTableCellElement)
- return visualIndex >= 0 ? columns[visualIndex] : undefined
+ // rowValues 已按可复制列对齐,传入过滤后的 columns
+ return buildExcelSnapshot({ columns: copyable, rowValues })
}
- function paintExcelSelection() {
+ function bindSnapshotApi() {
const root = tableRoot()
if (!root) return
- root.querySelectorAll('.is-excel-col, .is-excel-rowhead, .is-excel-cell').forEach((el) => {
- el.classList.remove('is-excel-col', 'is-excel-rowhead', 'is-excel-cell')
- })
- if (!excelMode.value) return
-
- const columns = copyableColumns()
- const rows = bodyRows()
- const axes = resolveCopyAxes({
- selectedCols: [...selectedCols.value],
- selectedRows: [...selectedRows.value],
- columnCount: columns.length,
- rowCount: rows.length
- })
- const indexCol = indexColumn()
-
- selectedCols.value.forEach((index) => {
- const col = columns[index]
- if (!col) return
- root.querySelectorAll(`th.${CSS.escape(col.id)}`).forEach((el) => {
- el.classList.add('is-excel-col')
- })
- })
- const bodies = root.querySelectorAll(
- '.el-table__body-wrapper tbody, .el-table__fixed-body-wrapper tbody'
- )
- if (indexCol) {
- selectedRows.value.forEach((index) => {
- bodies.forEach((tbody) => {
- const row = tbody.querySelectorAll(':scope > tr.el-table__row')[index]
- row?.querySelector(`td.${CSS.escape(indexCol.id)}`)?.classList.add('is-excel-rowhead')
- })
- })
- }
- if (!axes) return
- axes.rows.forEach((rowIndex) => {
- axes.cols.forEach((colIndex) => {
- const col = columns[colIndex]
- if (!col) return
- bodies.forEach((tbody) => {
- const row = tbody.querySelectorAll(':scope > tr.el-table__row')[rowIndex]
- row?.querySelector(`td.${CSS.escape(col.id)}`)?.classList.add('is-excel-cell')
- })
- })
- })
+ ;(root as HTMLElement & { __sxGetExcelSnapshot?: () => ListExcelSnapshot }).__sxGetExcelSnapshot =
+ getExcelSnapshot
}
- function clearExcelSelection() {
- selectedCols.value = new Set()
- selectedRows.value = new Set()
- colAnchor = null
- rowAnchor = null
- paintExcelSelection()
- }
-
- function setExcelMode(next: boolean) {
- // excelCopy 已关闭时拒绝进入;仍允许关掉,否则 prop 变 false 后无法退出。
- if (!props.excelCopy && next) return
- excelMode.value = next
- if (!next) clearExcelSelection()
- else paintExcelSelection()
- tableRoot()?.dispatchEvent(
- new CustomEvent('sx-list-excel-state', {
- bubbles: true,
- detail: { active: excelMode.value }
- })
- )
- }
-
- function clickedRowIndex(row: HTMLTableRowElement): number {
- const rows = bodyRows()
- const direct = rows.indexOf(row)
- if (direct >= 0) return direct
- const tbody = row.parentElement
- if (!tbody) return -1
- const index = Array.from(tbody.querySelectorAll(':scope > tr.el-table__row')).indexOf(row)
- if (index < 0 || index >= rows.length) return -1
- return index
- }
-
- function keepCopyFocus() {
+ function unbindSnapshotApi() {
const root = tableRoot()
if (!root) return
- const panel = root.closest('.panel')
- const active = document.activeElement
- if (panel && active instanceof Node && panel.contains(active)) return
- if (!root.hasAttribute('tabindex')) root.setAttribute('tabindex', '-1')
- root.focus({ preventScroll: true })
- }
-
- function onTableClick(event: MouseEvent) {
- if (!excelMode.value || !props.excelCopy) return
- const target = event.target as HTMLElement | null
- if (!target) return
- const header = target.closest('th')
- const cell = target.closest('td')
- if (header) {
- event.preventDefault()
- event.stopPropagation()
- const columns = copyableColumns()
- const index = columns.findIndex((col) => header.classList.contains(col.id))
- if (index < 0) {
- keepCopyFocus()
- return
- }
- const result = toggleAxis(selectedCols.value, index, event.shiftKey, colAnchor)
- selectedCols.value = result.selected
- colAnchor = result.anchor
- paintExcelSelection()
- keepCopyFocus()
- return
- }
- if (!cell) return
- event.preventDefault()
- event.stopPropagation()
- keepCopyFocus()
- const row = cell.closest('tr')
- const column = columnFromCell(cell)
- // 序号格和数据格都选整行;勾选列、展开列、操作列不选行。
- if (!row || !column || !(isRowSelectorColumn(column) || isCopyableColumn(column))) return
- const rowIndex = clickedRowIndex(row)
- if (rowIndex < 0) return
- const result = toggleAxis(selectedRows.value, rowIndex, event.shiftKey, rowAnchor)
- selectedRows.value = result.selected
- rowAnchor = result.anchor
- paintExcelSelection()
- }
-
- function onTableDblClick(event: MouseEvent) {
- if (!excelMode.value || !props.excelCopy) return
- const target = event.target as HTMLElement | null
- if (!target?.closest('td, th')) return
- event.preventDefault()
- event.stopPropagation()
- }
-
- function currentTsv(): string {
- const columns = copyableColumns()
- const rows = bodyRows()
- const axes = resolveCopyAxes({
- selectedCols: [...selectedCols.value],
- selectedRows: [...selectedRows.value],
- columnCount: columns.length,
- rowCount: rows.length
- })
- if (!axes) return ''
- const headers = axes.cols.map((index) => columns[index]?.label ?? '')
- const matrix = axes.rows.map((rowIndex) =>
- axes.cols.map((colIndex) => {
- const col = columns[colIndex]
- const td = col ? rows[rowIndex]?.querySelector(`td.${CSS.escape(col.id)}`) : null
- return excelCell(td?.textContent ?? '')
- })
- )
- return buildExcelTsv(headers, matrix)
- }
-
- async function copyExcelSelection() {
- const text = currentTsv()
- if (!text) return
- try {
- await navigator.clipboard.write([
- new ClipboardItem({ 'text/plain': new Blob([text], { type: 'text/plain' }) })
- ])
- ElMessage.success('已复制,到 Excel 中直接粘贴')
- } catch {
- const area = document.createElement('textarea')
- area.value = text
- area.setAttribute('readonly', 'true')
- area.style.position = 'fixed'
- area.style.left = '-9999px'
- document.body.appendChild(area)
- area.select()
- const ok = document.execCommand('copy')
- area.remove()
- if (ok) ElMessage.success('已复制,到 Excel 中直接粘贴')
- else ElMessage.warning('复制失败,请允许剪贴板权限后重试')
- }
- }
-
- function isTextEntryTarget(target: EventTarget | null): boolean {
- if (target instanceof HTMLTextAreaElement || target instanceof HTMLSelectElement) return true
- if (target instanceof HTMLInputElement) {
- const type = (target.getAttribute('type') || 'text').toLowerCase()
- return type !== 'checkbox' && type !== 'radio'
- }
- return target instanceof HTMLElement && target.isContentEditable
- }
-
- function onKeydown(event: KeyboardEvent) {
- if (!excelMode.value || !props.excelCopy) return
- if (isTextEntryTarget(event.target)) return
- const root = tableRoot()
- const panel = root?.closest('.panel')
- const target = event.target as Node | null
- if (panel && target && !panel.contains(target)) return
- if ((event.metaKey || event.ctrlKey) && event.key.toLowerCase() === 'c') {
- if (!currentTsv()) return
- event.preventDefault()
- void copyExcelSelection()
- }
- if (event.key === 'Escape') clearExcelSelection()
- }
-
- function onExcelToggle() {
- setExcelMode(!excelMode.value)
- }
-
- function bindExcelEvents() {
- const root = tableRoot()
- root?.addEventListener('click', onTableClick, true)
- root?.addEventListener('dblclick', onTableDblClick, true)
- root?.addEventListener('sx-list-excel-toggle', onExcelToggle)
- document.addEventListener('keydown', onKeydown)
- }
-
- function unbindExcelEvents() {
- const root = tableRoot()
- root?.removeEventListener('click', onTableClick, true)
- root?.removeEventListener('dblclick', onTableDblClick, true)
- root?.removeEventListener('sx-list-excel-toggle', onExcelToggle)
- document.removeEventListener('keydown', onKeydown)
+ delete (root as HTMLElement & { __sxGetExcelSnapshot?: () => ListExcelSnapshot })
+ .__sxGetExcelSnapshot
}
onMounted(() => {
scheduleApply()
- // 首屏列尚未完全注册时再补一次
mountApplyTimer = setTimeout(() => scheduleApply(), 100)
- bindExcelEvents()
+ bindSnapshotApi()
})
onBeforeUnmount(() => {
- unbindExcelEvents()
+ unbindSnapshotApi()
+ clearApplyTimers()
})
onDeactivated(() => {
@@ -432,13 +206,13 @@
onActivated(() => {
scheduleApply()
+ bindSnapshotApi()
})
watch(
() => (attrs as any).data,
() => {
scheduleApply()
- if (excelMode.value) clearExcelSelection()
},
{ deep: false }
)
@@ -448,7 +222,6 @@
() => scheduleApply()
)
- // 列显隐导致列数量变化时写回(避免在 drag 过程中用 onUpdated 反复 apply)
watch(
() => {
const cols = tableRef.value?.store?.states?.columns
@@ -456,24 +229,6 @@
},
() => {
scheduleApply()
- if (excelMode.value) clearExcelSelection()
- }
- )
-
- watch(
- () =>
- readColumns()
- .map((col) => col.id)
- .join('|'),
- () => {
- if (excelMode.value) clearExcelSelection()
- }
- )
-
- watch(
- () => props.excelCopy,
- (enabled) => {
- if (!enabled) setExcelMode(false)
}
)
@@ -495,13 +250,19 @@
resetWidths()
}
}
+ if (prop === 'getExcelSnapshot') return getExcelSnapshot
const table = tableRef.value
if (!table) return undefined
const value = table[prop as keyof typeof table]
return typeof value === 'function' ? value.bind(table) : value
},
has(_target, prop) {
- if (prop === 'elTableRef' || prop === 'applyColumnWidths' || prop === 'resetColumnWidths') {
+ if (
+ prop === 'elTableRef' ||
+ prop === 'applyColumnWidths' ||
+ prop === 'resetColumnWidths' ||
+ prop === 'getExcelSnapshot'
+ ) {
return true
}
const table = tableRef.value
diff --git a/web-admin/src/components/business/list-toolbar-end-actions/index.vue b/web-admin/src/components/business/list-toolbar-end-actions/index.vue
index 445fc471e..c17a5b18e 100644
--- a/web-admin/src/components/business/list-toolbar-end-actions/index.vue
+++ b/web-admin/src/components/business/list-toolbar-end-actions/index.vue
@@ -1,17 +1,11 @@
-
+
-
+
+
+
diff --git a/web-admin/src/env.d.ts b/web-admin/src/env.d.ts
index b1589d8b9..158c1b6eb 100755
--- a/web-admin/src/env.d.ts
+++ b/web-admin/src/env.d.ts
@@ -39,6 +39,16 @@ declare module '@turbodocx/html-to-docx/dist/html-to-docx.browser.esm.js' {
export default HTMLtoDOCX
}
+declare module '@univerjs/preset-sheets-core/locales/zh-CN' {
+ const locale: Record
+ export default locale
+}
+
+declare module '@univerjs/preset-sheets-filter/locales/zh-CN' {
+ const locale: Record
+ export default locale
+}
+
declare module 'qrcode.vue' {
export type Level = 'L' | 'M' | 'Q' | 'H'
export type RenderAs = 'canvas' | 'svg'
diff --git a/web-admin/src/utils/list-excel-copy.test.ts b/web-admin/src/utils/list-excel-copy.test.ts
index 9191950df..aa8d71956 100644
--- a/web-admin/src/utils/list-excel-copy.test.ts
+++ b/web-admin/src/utils/list-excel-copy.test.ts
@@ -1,11 +1,13 @@
import assert from 'node:assert/strict'
import { describe, it } from 'node:test'
import {
+ buildExcelSnapshot,
buildExcelTsv,
excelCell,
isCopyableColumn,
isRowSelectorColumn,
resolveCopyAxes,
+ snapshotToUniverCellData,
toggleAxis
} from './list-excel-copy'
@@ -135,3 +137,45 @@ describe('buildExcelTsv', () => {
assert.equal(tsv, '联系人\t状态\r\n张三\t合作中\r\n李四\t跟进中')
})
})
+
+describe('buildExcelSnapshot', () => {
+ it('keeps copyable columns, cleans cells, and drops 操作', () => {
+ const snapshot = buildExcelSnapshot({
+ columns: [
+ { id: 'name', label: ' 联系人\n' },
+ { id: 'act', label: '操作' },
+ { id: 'status', label: '状态' }
+ ],
+ rowValues: [
+ ['张三\t甲', '编辑', '合作中'],
+ ['李四', '删除', '跟进中']
+ ]
+ })
+ assert.deepEqual(snapshot.headers, ['联系人', '状态'])
+ assert.deepEqual(snapshot.rows, [
+ ['张三 甲', '合作中'],
+ ['李四', '跟进中']
+ ])
+ })
+
+ it('returns empty snapshot when no copyable columns', () => {
+ const snapshot = buildExcelSnapshot({
+ columns: [{ id: 'a', label: '操作' }],
+ rowValues: [['x']]
+ })
+ assert.deepEqual(snapshot, { headers: [], rows: [] })
+ })
+})
+
+describe('snapshotToUniverCellData', () => {
+ it('puts headers on row 0 and data from row 1', () => {
+ const cellData = snapshotToUniverCellData({
+ headers: ['A', 'B'],
+ rows: [['1', '2']]
+ })
+ assert.deepEqual(cellData[0][0], { v: 'A', t: 1 })
+ assert.deepEqual(cellData[0][1], { v: 'B', t: 1 })
+ assert.deepEqual(cellData[1][0], { v: '1', t: 1 })
+ assert.deepEqual(cellData[1][1], { v: '2', t: 1 })
+ })
+})
diff --git a/web-admin/src/utils/list-excel-copy.ts b/web-admin/src/utils/list-excel-copy.ts
index 40a0b6267..716e3b50f 100644
--- a/web-admin/src/utils/list-excel-copy.ts
+++ b/web-admin/src/utils/list-excel-copy.ts
@@ -68,6 +68,54 @@ export function buildExcelTsv(headers: string[], rows: string[][]): string {
return lines.join('\r\n')
}
+/** 灌入只读在线表格的快照:表头 + 当前页文本矩阵 */
+export type ListExcelSnapshot = {
+ headers: string[]
+ rows: string[][]
+}
+
+/**
+ * 从可复制列与行文本构建快照。headers/rows 均经 excelCell 清洗。
+ * rowValues 与 columns 按下标对齐;操作列等会被跳过。
+ * 无可复制列时返回 { headers: [], rows: [] }。
+ */
+export function buildExcelSnapshot(input: {
+ columns: ListExcelColumn[]
+ /** 与 columns 按下标对齐的行文本;通常来自表格 DOM textContent */
+ rowValues: string[][]
+}): ListExcelSnapshot {
+ const indices: number[] = []
+ const headers: string[] = []
+ input.columns.forEach((col, index) => {
+ if (!col.id || !isCopyableColumn(col)) return
+ indices.push(index)
+ headers.push(excelCell(col.label))
+ })
+ if (!indices.length) return { headers: [], rows: [] }
+ const rows = input.rowValues.map((row) =>
+ indices.map((colIndex) => excelCell(row[colIndex] ?? ''))
+ )
+ return { headers, rows }
+}
+
+/** 将快照转为 Univer cellData(第 0 行为表头)。 */
+export function snapshotToUniverCellData(snapshot: ListExcelSnapshot): Record<
+ number,
+ Record
+> {
+ const cellData: Record> = {}
+ const writeRow = (r: number, values: string[]) => {
+ const row: Record = {}
+ values.forEach((value, c) => {
+ row[c] = { v: value, t: 1 }
+ })
+ cellData[r] = row
+ }
+ writeRow(0, snapshot.headers)
+ snapshot.rows.forEach((row, index) => writeRow(index + 1, row))
+ return cellData
+}
+
function range(count: number): number[] {
return Array.from({ length: count }, (_, index) => index)
}