diff --git a/.env.development b/.env.development index 63e4f95..5db78e4 100644 --- a/.env.development +++ b/.env.development @@ -10,7 +10,8 @@ VITE_APP_TITLE = FastapiAdmin VITE_API_URL = / # 代理目标:本机后端(若出现 ENOTFOUND,说明上面域名在当前网络/DNS 下不可解析,改用本地或可用地址) -VITE_API_BASE_URL = http://127.0.0.1:8001 +# VITE_API_BASE_URL = http://127.0.0.1:8001 +VITE_API_BASE_URL = http://192.168.5.5:8011 # VITE_API_BASE_URL = https://service.fastapiadmin.com # 是否删除控制台输出 @@ -19,3 +20,6 @@ VITE_DROP_CONSOLE = false # WebSocket 端点(AI对话功能需要配置) VITE_APP_WS_ENDPOINT = ws://127.0.0.1:8001 # VITE_APP_WS_ENDPOINT = wss://service.fastapiadmin.com + +# Dify 知识库后端代理目标地址 +VITE_DIFY_API_BASE_URL = https://p30-dify.ngsk.tech:7001/ diff --git a/package.json b/package.json index e06d130..be5a08f 100644 --- a/package.json +++ b/package.json @@ -69,6 +69,8 @@ }, "dependencies": { "@element-plus/icons-vue": "^2.3.2", + "@file-viewer/preset-all": "^2.1.17", + "@file-viewer/vue3": "^2.1.17", "@iconify-json/line-md": "^1.2.16", "@iconify-json/ri": "^1.2.10", "@iconify-json/svg-spinners": "^1.2.4", @@ -89,6 +91,7 @@ "crypto-js": "^4.2.0", "dagre": "^0.8.5", "dayjs": "^1.11.20", + "docx-preview": "^0.3.7", "dompurify": "^3.4.3", "echarts": "^6.0.0", "element-plus": "~2.13.7", @@ -96,6 +99,7 @@ "file-saver": "^2.0.5", "highlight.js": "^11.11.1", "js-beautify": "^1.15.4", + "jszip": "^3.10.1", "markdown-it": "^14.1.0", "markdown-it-highlightjs": "^4.3.0", "mitt": "^3.0.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 56dafbe..17c93c8 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -18,6 +18,12 @@ importers: '@element-plus/icons-vue': specifier: ^2.3.2 version: 2.3.2(vue@3.5.34(typescript@6.0.3)) + '@file-viewer/preset-all': + specifier: ^2.1.17 + version: 2.1.17(three@0.184.0) + '@file-viewer/vue3': + specifier: ^2.1.17 + version: 2.1.17(typescript@6.0.3) '@iconify-json/line-md': specifier: ^1.2.16 version: 1.2.16 @@ -78,6 +84,9 @@ importers: dayjs: specifier: ^1.11.20 version: 1.11.20 + docx-preview: + specifier: ^0.3.7 + version: 0.3.7 dompurify: specifier: ^3.4.3 version: 3.4.3 @@ -99,6 +108,9 @@ importers: js-beautify: specifier: ^1.15.4 version: 1.15.4 + jszip: + specifier: ^3.10.1 + version: 3.10.1 markdown-it: specifier: ^14.1.0 version: 14.1.1 @@ -219,7 +231,7 @@ importers: version: 3.5.34 '@vue/test-utils': specifier: ^2.4.10 - version: 2.4.10(@vue/compiler-dom@3.5.34)(@vue/server-renderer@3.5.34(vue@3.5.34(typescript@6.0.3)))(vue@3.5.34(typescript@6.0.3)) + version: 2.4.10(@vue/compiler-dom@3.5.39)(@vue/server-renderer@3.5.39(vue@3.5.34(typescript@6.0.3)))(vue@3.5.34(typescript@6.0.3)) autoprefixer: specifier: ^10.4.21 version: 10.5.0(postcss@8.5.14) @@ -321,7 +333,7 @@ importers: version: 0.10.0 unplugin-vue-components: specifier: ^29.1.0 - version: 29.2.0(@babel/parser@7.29.3)(vue@3.5.34(typescript@6.0.3)) + version: 29.2.0(@babel/parser@7.29.7)(vue@3.5.34(typescript@6.0.3)) vite: specifier: ^7.1.5 version: 7.3.3(@types/node@24.12.4)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.99.0)(terser@5.47.1)(tsx@4.22.0)(yaml@2.9.0) @@ -444,6 +456,10 @@ packages: resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} engines: {node: '>=6.9.0'} + '@babel/helper-string-parser@7.29.7': + resolution: {integrity: sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==} + engines: {node: '>=6.9.0'} + '@babel/helper-string-parser@8.0.0-rc.5': resolution: {integrity: sha512-sN7R8rBvDurfaziNfDEIjIntlazmlkCDGO4SNl2RJ3wRCn+QxspLV7hzYAE8WWVd2joVuT8sUxeePdLp2idI1A==} engines: {node: ^22.18.0 || >=24.11.0} @@ -452,6 +468,10 @@ packages: resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} engines: {node: '>=6.9.0'} + '@babel/helper-validator-identifier@7.29.7': + resolution: {integrity: sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==} + engines: {node: '>=6.9.0'} + '@babel/helper-validator-identifier@8.0.0-rc.5': resolution: {integrity: sha512-ehJDxHvtbZ85RtX/L2fi0h9AGsBNqB5Euv1EB8RMAvGYvD+2X+QbpzzOpbklnNXO+WSZJNOaetw2BBj27xsWVg==} engines: {node: ^22.18.0 || >=24.11.0} @@ -469,6 +489,11 @@ packages: engines: {node: '>=6.0.0'} hasBin: true + '@babel/parser@7.29.7': + resolution: {integrity: sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==} + engines: {node: '>=6.0.0'} + hasBin: true + '@babel/parser@8.0.0-rc.5': resolution: {integrity: sha512-/Mfg83rK3+jsRbl4Vbd0jqxc6M1A1/WNFtgrowRM1unEsD3XcNnrBdMM0JWakd0/RN9lseQKwPduW1TiEwKOlQ==} engines: {node: ^22.18.0 || >=24.11.0} @@ -531,10 +556,17 @@ packages: resolution: {integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==} engines: {node: '>=6.9.0'} + '@babel/types@7.29.7': + resolution: {integrity: sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==} + engines: {node: '>=6.9.0'} + '@babel/types@8.0.0-rc.5': resolution: {integrity: sha512-JeSVu/m8x/zpp4CLjYHVNXuhEyOkhPXuxM8YOXjh6L4LlvQNKuUNOTo5KdBuKAcTDHw8DquToTaEkhsBqPXOaA==} engines: {node: ^22.18.0 || >=24.11.0} + '@braintree/sanitize-url@7.1.2': + resolution: {integrity: sha512-jigsZK+sMF/cuiB7sERuo9V7N9jx+dhmHHnQyDSVdpZwVutaBu7WvNYqMDLSgFgfB30n452TP3vjDAvFC973mA==} + '@bramus/specificity@2.4.2': resolution: {integrity: sha512-ctxtJ/eA+t+6q2++vj5j7FYX3nRu311q1wfYH3xjlLOsczhlhxAg2FWNUXhpGvAw3BWo1xBcvOV6/YLc2r5FJw==} hasBin: true @@ -545,6 +577,9 @@ packages: '@cacheable/utils@2.4.1': resolution: {integrity: sha512-eiFgzCbIneyMlLOmNG4g9xzF7Hv3Mga4LjxjcSC/ues6VYq2+gUbQI8JqNuw/ZM8tJIeIaBGpswAsqV2V7ApgA==} + '@chevrotain/types@11.1.2': + resolution: {integrity: sha512-U+HFai5+zmJCkK86QsaJtoITlboZHBqrVketcO2ROv865xfCMSFpELQoz1GkX5GzME8pTa+3kbKrZHQtI0gdbw==} + '@commitlint/cli@21.0.1': resolution: {integrity: sha512-8vq10krmbJwBkvzXKhbs4o4JQEVscd3pqOlWuDUaDBwbeL694/P33UC29tZQFTAgPU9fVJ2+f2m3zw16yKWxHg==} engines: {node: '>=22.12.0'} @@ -1056,6 +1091,90 @@ packages: '@fast-csv/parse@4.3.6': resolution: {integrity: sha512-uRsLYksqpbDmWaSmzvJcuApSEe38+6NQZBUsuAyMZKqHxH0g1wcJgsKUvN3WC8tewaqFjBMMGrkHmC+T7k8LvA==} + '@file-viewer/core@2.1.17': + resolution: {integrity: sha512-tqRKek9se0WU/1M7da7rQpDp9jWF1BZzHmQQ3973FUwMrTfYeLi2sblNTVRSQwOEifEXTI13QiZ8tQOx1plzSg==} + + '@file-viewer/doc@2.1.17': + resolution: {integrity: sha512-SieBUVeEerVizCel/crVuUDHPKkeOzh88Nc1Unaap7dzdksp98/3F/MYjsf1j+irIzrf2/WWA/yeGvFOVIlTXA==} + + '@file-viewer/docx@0.3.16': + resolution: {integrity: sha512-TniYvAtaTQuLw6u4v1cO8lqg1NyAid9rZDiM4oTAl6QRgO8jTk/6JZ831qcQclMzogyuytiot9qChS4zzoe76g==} + + '@file-viewer/eda-layout@2.1.17': + resolution: {integrity: sha512-F5Xdnc6B6viRWY9iDMeAdEWFEKGJRIlJ4PTsuCBBqWKyhW/Cz7bOEvTWFeS3/JTkqXKPrVr1duk+9VesbB3eVA==} + + '@file-viewer/eda-orcad@2.1.17': + resolution: {integrity: sha512-h+xnJb6e08chbAqrp8XW9Ge7xyHBpsXzcLIgIffgpwUrlhGDj2F9M46W/+zOa8PIh+XVKKXnUbbVbP3sC5IY1g==} + + '@file-viewer/geometry-engine@2.1.17': + resolution: {integrity: sha512-v4EL9mSUMfZxDaDmxw/mN7LUM8reH9OL8qPvjxIm8IUQn3IgDaFRt3kNnNv6ZM7QCXvzorudcI0BSjxmKj4yKA==} + + '@file-viewer/pptx@2.1.17': + resolution: {integrity: sha512-nvdM9/lhj9y9m7smHV8ZTNcXEq8QKluUbXvM0HdVJfbGyVovPp8ysCIwyITcBpu4K+8MiGDu+gRyQFBeINfTwg==} + + '@file-viewer/preset-all@2.1.17': + resolution: {integrity: sha512-FhZfkVvCotA1Xg3tvwwA65T/EexnarFvTcLpZHAnonKA2CENq88SmFuY/F0fRAO6QAR0BOXlb8LBEVM72OzEOA==} + + '@file-viewer/renderer-3d@2.1.17': + resolution: {integrity: sha512-Ycz2/k7+wUACwkea8Thc4JjHe95+10lB1ymBp4NrsgwlqN3UK50Qwk9I5kMVGLN8moEAAjBtuEToalZAmdALDA==} + + '@file-viewer/renderer-archive@2.1.17': + resolution: {integrity: sha512-2jCQiC5OgvMFvSvie0N3OWYodIQCEkcAmgWNIdC+d9dcSwWMYqwXItCTFxBorvTApxBVUveIZM5S3WCBoXnMYA==} + + '@file-viewer/renderer-cad@2.1.17': + resolution: {integrity: sha512-9MIAhAgeJ4MIqNZCeLlFKGtRmtv5qLxSSkBLDQ7sXvYbboykgCZqinOuz6vTf7yUZfwqPfM/JmxcjjWVlcicWA==} + + '@file-viewer/renderer-data@2.1.17': + resolution: {integrity: sha512-RM9aXmVo9CTlupjdbcP7zAV3EUmeWPjEnB5UYSc7yY00KGd/W+mFvyRUGOoJqftXTrbAiC/WwMv5BhwLBL/4cw==} + + '@file-viewer/renderer-drawing@2.1.17': + resolution: {integrity: sha512-Q/Djzk0NSCmy2bW0wnlyMpGtcWgO+7KhjnzQZ2lvtJYt8qEE+LAg+51qWo2FGuSuRv1gK25mw35INbRaH4KAmQ==} + + '@file-viewer/renderer-eda@2.1.17': + resolution: {integrity: sha512-zOQKpt8D2V1juUrx8nbReTTsH8k43Ub+AVzIVYxzJr/KwM7epvWihyiqHAhBe5bjwSlK/njzQiFiL/+geR9JYQ==} + + '@file-viewer/renderer-email@2.1.17': + resolution: {integrity: sha512-nMcXTZkoPWAwLowRgRCp6o+BKhuZ+gYBONgvoLuWfk68hTqltMzR4+7EILR208qHDYQ5oFqSEqD/9tK8wCWTMQ==} + + '@file-viewer/renderer-epub@2.1.17': + resolution: {integrity: sha512-rfJlBpeYu1PjsnFMJfP8bYTuCK1xHQ9WiJRs3c9jVnvE8DgQIP71eQC4tpEGWF+81MrtRYeMhyvNUuB+HpXUbg==} + + '@file-viewer/renderer-geo@2.1.17': + resolution: {integrity: sha512-LMRq6wolCb8wo4CGTejZXllhOGmOa47B1vH8AKSM7DHCiLatjQ8OjQ8IpUDeqH2JNEIUjiK+RuXNcTFAtgw9kw==} + + '@file-viewer/renderer-image@2.1.17': + resolution: {integrity: sha512-J5w/70p6VNRh47IgtSZPZxqYrB9d0+rI710lM6pXVKGAOo2ErDxCYWwbwkyY9e/7/K5TWjRhAvEecySFDqeekg==} + + '@file-viewer/renderer-media@2.1.17': + resolution: {integrity: sha512-YOw7vS3AtsdDPjC2E+/cziLzhK3EBlqpmJ0r7+eC3jUIPfTlBRemCsMJbrgZpYMYSBLMpXOUnvCs89efRm4BfQ==} + + '@file-viewer/renderer-mindmap@2.1.17': + resolution: {integrity: sha512-cWV8XkpTGobASOUqV81kjR9EjXx/LhHv/UA1VihsQCKkacXJFW/+vvk5PFWc4qwH2v9fmmbNVQi7Rn6VYw0Y1w==} + + '@file-viewer/renderer-ofd@2.1.17': + resolution: {integrity: sha512-FV2m1BsI5h6DXdoLKDPlRQUMoq3fhO2y6+mYliUPzJ/HenkhNhjm1pmBgE1/OVANYJN0N3TyTRNfQR7p+Oa2EA==} + + '@file-viewer/renderer-pdf@2.1.17': + resolution: {integrity: sha512-ktn2fNjdUgiC1zDLUJ6fvmmXomg3FHmTzECKXByENeALMwfD4Jk75tNA7UrINhoRSisytFSiD523PKauYj0uAw==} + + '@file-viewer/renderer-presentation@2.1.17': + resolution: {integrity: sha512-K9FuG3tJTGLjCjaza1Kq+LmWC3DNeyA1kgdz2aqArY3u4ZDB95vqYwCn2hN3+OvQTE/r+yH/tB42+SMaGyEJiA==} + + '@file-viewer/renderer-spreadsheet@2.1.17': + resolution: {integrity: sha512-G8pwMMR6KG84QwaAkGKV0pX5Y9XyHlSUViSDoS5W2L2aVG3f4A2YDJM2UOIVII05zbcq256BWd05/w9Zl8MclQ==} + + '@file-viewer/renderer-text@2.1.17': + resolution: {integrity: sha512-mQJUAcBZZ+MLQz/PwqnF/D4BKOUVehgRD6N1VvNTG+QqaweU7NzbjjHSOnmdvElnDeV4BxWiMwg9iejNXQlsAw==} + + '@file-viewer/renderer-typst@2.1.17': + resolution: {integrity: sha512-g187rwDzBiJy2LHG3mCj5U2U4shwMBgMbOSDm7dJOAbpDoSY/Rz5SYPxaK7oAJWO7jqL8My8+CLsNjdcpdNwQA==} + + '@file-viewer/renderer-word@2.1.17': + resolution: {integrity: sha512-Y4atjszpJ3FcoNZL+AZpcw4D6aA/Uxdce6BmO634pPO5JjBygerRI7laXR+uO2AuqvmBWb7BmlP7PLx0FeGLeA==} + + '@file-viewer/vue3@2.1.17': + resolution: {integrity: sha512-yQjkxMetoFue32Eo1Zgdmmz9q4bjlnG2feir2nL7NWsF9zQz+Aj7du7UEt/1tFELrBVi5KR65qtznLXfWKaneg==} + '@floating-ui/core@1.7.5': resolution: {integrity: sha512-1Ih4WTWyw0+lKyFMcBHGbb5U5FtuHJuujoyyr5zTaWS5EYMeT6Jb2AuDeftsCsEuchO+mM2ij5+q9crhydzLhQ==} @@ -1065,6 +1184,10 @@ packages: '@floating-ui/utils@0.2.11': resolution: {integrity: sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg==} + '@flyfish-dev/cad-viewer@0.6.4': + resolution: {integrity: sha512-9GiILTzBfkyACcd65rSYiN9CMhoXzn1Bh9pvwaSMcWAHCkJoAx/xN1wP3M+z2KFtFVGqfipA1SmnPRVZIXaAow==} + engines: {node: '>=20.19.0'} + '@humanfs/core@0.19.2': resolution: {integrity: sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA==} engines: {node: '>=18.18.0'} @@ -1100,6 +1223,9 @@ packages: '@iconify/utils@2.3.0': resolution: {integrity: sha512-GmQ78prtwYW6EtzXRU1rY+KwOKfz32PD7iJh6Iyqw68GiKuoZ2A6pRtzWONz5VQJbp50mEjXh/7NkumtrAgRKA==} + '@iconify/utils@3.1.3': + resolution: {integrity: sha512-LPKOXPn/zV+zis1oOfGWogaXVpqUybF3ZS6SCZIsz8vg0ivVp9+fVqyYB7xq0aiST/VhUQYGO1qo6uoYSiEJqw==} + '@iconify/vue@5.0.1': resolution: {integrity: sha512-aumwwooJlFJ5H5qYWB6ZTAyM0C8hpfcSVLB9/a3qnH1GGvIJ+FEbpEs4s/HfErYe/M5qZeLjwmESR5fFm3lXEw==} peerDependencies: @@ -1140,6 +1266,13 @@ packages: '@jridgewell/trace-mapping@0.3.31': resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} + '@kenjiuno/decompressrtf@0.1.4': + resolution: {integrity: sha512-v9c/iFz17jRWyd2cRnrvJg4VOg/4I/VCk+bG8JnoX2gJ9sAesPzo3uTqcmlVXdpasTI8hChpBVw00pghKe3qTQ==} + + '@kenjiuno/msgreader@1.28.0': + resolution: {integrity: sha512-+iv2rWCGRHmX/3sBwXZzkThEuuywGJjnYsvxj6Kp1L/FDMICQcFrtqN+6MFrnh2d+umtfGtX904wxaYEDZ52MQ==} + engines: {node: '>= 10'} + '@keyv/bigmap@1.3.1': resolution: {integrity: sha512-WbzE9sdmQtKy8vrNPa9BRnwZh5UF4s1KTmSK0KUVLo3eff5BlQNNWDnFOouNpKfPKDnms9xynJjsMYjMaT/aFQ==} engines: {node: '>= 18'} @@ -1149,6 +1282,150 @@ packages: '@keyv/serialize@1.1.1': resolution: {integrity: sha512-dXn3FZhPv0US+7dtJsIi2R+c7qWYiReoEh5zUntWCf4oSpMNib8FDhSoed6m3QyZdx5hK7iLFkYk3rNxwt8vTA==} + '@ljheee/xmind-parser@1.1.3': + resolution: {integrity: sha512-cAfbd8ANkOmyHgE3FZrCJwdyQv8ty0woMC6toSUvgo6Cm2crS3ibS+YKrTPDbDhjP6cJoVsoboRNdCWeDL5xMg==} + engines: {node: '>=14.8.0'} + + '@lucide/vue@1.23.0': + resolution: {integrity: sha512-9SIYeY5K+R1iv8F8JUKMGSL7Pck/86BJ8djtZz/lnYsoHtKFUj1H2z6+PvKnC/8blZ8tqTDeDXAoTKobuX80hg==} + peerDependencies: + vue: '>=3.0.1' + + '@mapbox/jsonlint-lines-primitives@2.0.3': + resolution: {integrity: sha512-0SElaV0uMxEnxzBhhX9WTuPyUeMsAN/SS0i16tjuba4/mio63MG9khjC1a0JAiPGXAwvwm4UfHJURCN7nyudQg==} + engines: {node: '>= 22'} + + '@mapbox/point-geometry@1.1.0': + resolution: {integrity: sha512-YGcBz1cg4ATXDCM/71L9xveh4dynfGmcLDqufR+nQQy3fKwsAZsWd/x4621/6uJaeB9mwOHE6hPeDgXz9uViUQ==} + + '@mapbox/tiny-sdf@2.2.0': + resolution: {integrity: sha512-LVL4wgI9YAum5V+LNVQO6QgFBPw7/MIIY4XJPNsPDMrjEwcE+JfKk1LuIl8GnF197ejVdC9QdPaxrx5gfgdGXg==} + + '@mapbox/unitbezier@0.0.1': + resolution: {integrity: sha512-nMkuDXFv60aBr9soUG5q+GvZYL+2KZHVvsqFCzqnkGEf46U2fvmytHaEVc1/YZbiLn8X+eR3QzX1+dwDO1lxlw==} + + '@mapbox/unitbezier@1.0.0': + resolution: {integrity: sha512-fqd515fjBmANKGGsQ286E2Wvj/XvDFpGzwJxq4CI6jMQue6Oy04uCKp+JWKF00xRTmk6cEu1jPJ9p3xqH8YWqQ==} + + '@mapbox/vector-tile@2.0.5': + resolution: {integrity: sha512-pXj8m7KTsqZt+1jsE0xIpGvqTSbblfkuEJL/NJmNePMtEwxO8V3XMDo9WMSfDeqHvCtBI9Lmt4mGcGR10zecmw==} + + '@mapbox/whoots-js@3.1.0': + resolution: {integrity: sha512-Es6WcD0nO5l+2BOQS4uLfNPYQaNDfbot3X1XUoloz+x0mPDS3eeORZJl06HXjwBG1fOGwCRnzK88LMdxKRrd6Q==} + engines: {node: '>=6.0.0'} + + '@maplibre/geojson-vt@6.1.1': + resolution: {integrity: sha512-FVMOcmSP/yqol45t7StApEyTL5/vmqBCuFhH9n+fFuINenhaX+YgHHIt1yJ86S8kln3uJLcMvmEU2cfn6E2eCQ==} + + '@maplibre/maplibre-gl-style-spec@24.10.0': + resolution: {integrity: sha512-lichxSiagMEBBrqHF0trtMQH9RKh+9jUlIJl0qW0QHvt2H/tbvUWdE+ZzI2Jd0/pT7j/iavLonlPu7EQ/ixTOw==} + hasBin: true + + '@maplibre/mlt@1.1.12': + resolution: {integrity: sha512-ZeK5w2TTeHOajcLaEQs1KZXw2V9wIKo1PmThlxlsHoXsQsYlBqLJzPOd6tJHRtGTChUY3DPPmjXRArYVvAbmZw==} + + '@maplibre/vt-pbf@4.3.2': + resolution: {integrity: sha512-j6p0AdjvAR19Z3XaCysle7A4ZSo08tYOzxD0Y9NQylwPAkwJJeYub5b2eVucdeDh7erhv69DahoLOevDRERRUw==} + + '@mermaid-js/parser@1.2.0': + resolution: {integrity: sha512-oYPyv8A4As1yH5Bx+04iQEQxXuIQDe0GKCNSRgao6z8AM9jixXIfP0vsppRLvGf+nKIOb9/LdpWA4YuJiVvESA==} + + '@mlightcad/libredwg-web@0.7.7': + resolution: {integrity: sha512-JnEug2IVXafUecM9/WCQgH8mJRliaEq0Uxu3Mxt0Zk82n1MrSd25iA0Boo7e7t9qVwRPxQLGFxWoyPIrAeTy4w==} + engines: {node: '>=20'} + + '@myriaddreamin/typst-ts-renderer@0.7.0': + resolution: {integrity: sha512-3sXIGxZn9MufPrPn6251DeuLf2FIEILYNzY5lX0XOJmaIYqgvQ3qpfqkCjgQD+splBvt5R1N3BuuNFrZKsHhMw==} + + '@myriaddreamin/typst-ts-web-compiler@0.7.0': + resolution: {integrity: sha512-nMwMcfOBy5pABPDuVM7/u8425SxhPUM+OJe6daqqgVOT3+neCTz4JKwx2L8XasfEHTNvd0cUI07LR9q5ADo7Gw==} + + '@myriaddreamin/typst.ts@0.7.0': + resolution: {integrity: sha512-JtO5Td/1QesH1IBKAZtbayFNK8u2sl3iz18Y67uYqBEdcXiu3z+wpZcDDKlmVJvAcCgSjHTnuk6ZLfkYclrGGQ==} + peerDependencies: + '@myriaddreamin/typst-ts-renderer': ^0.7.0 + '@myriaddreamin/typst-ts-web-compiler': ^0.7.0 + peerDependenciesMeta: + '@myriaddreamin/typst-ts-renderer': + optional: true + '@myriaddreamin/typst-ts-web-compiler': + optional: true + + '@napi-rs/canvas-android-arm64@1.0.2': + resolution: {integrity: sha512-IMXKVQod0ol4vt3gmClUfXz4JAgHYESGPCUqmH3lQxBoL0K/2greJaQE1HVBVxWWFKfLc4OLZVdxg7kXVyXv+g==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [android] + + '@napi-rs/canvas-darwin-arm64@1.0.2': + resolution: {integrity: sha512-Sc8tPi6cF+5lqOzCCKFALJHhDiRwyMzTPYm3bbhdXsOunU0lQO5f05ucyOzN2r55I23Hg5bsjH63uSCvWp3EgQ==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + + '@napi-rs/canvas-darwin-x64@1.0.2': + resolution: {integrity: sha512-niDXZ9LhKB1zLrUdYB64RHQFDGz9rr0eGx061qtJJU3U20EMMIx28ADF5fVYbhtOgkWQrBjFicfaye1yM0U62A==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + + '@napi-rs/canvas-linux-arm-gnueabihf@1.0.2': + resolution: {integrity: sha512-sgatQL9JxGRH/Amzcvu0P3t8Am3duou74CisfuJ41Dwt8cWy723z/9KZ8LlgmxfypEwEZxSTNFJtU8d281lmhQ==} + engines: {node: '>= 10'} + cpu: [arm] + os: [linux] + + '@napi-rs/canvas-linux-arm64-gnu@1.0.2': + resolution: {integrity: sha512-dgKuX0peF3xwY6ZF5QxGS4wbfDqpoFAJYXiLSp+guZKARQUKMkRqZSDrXKj7nfrec3UCMzC0PFCPte0ES98AiA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@napi-rs/canvas-linux-arm64-musl@1.0.2': + resolution: {integrity: sha512-qwROoDIC9upfvDoRLuPn2aNg9CGW1x0Ygr4k2Or+8paA9d0qBLwk87U+g8KQpoOviKoPoiwl97kvBYuYD7qZoA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@napi-rs/canvas-linux-riscv64-gnu@1.0.2': + resolution: {integrity: sha512-fXRjnPihdnbO6qy1QQOgxAonb68A0TCEG7rj1x7v7rxNElsE8EVIKIEUTvyDtU+sthYSbX+8e7g3oZiLGnOmxw==} + engines: {node: '>= 10'} + cpu: [riscv64] + os: [linux] + libc: [glibc] + + '@napi-rs/canvas-linux-x64-gnu@1.0.2': + resolution: {integrity: sha512-nPR97DXhbWIAy7yazF3jc06kEPMqYMLmPzFOVNlwKPfIoSChnI+x7dc0hTLaihz3jxrjL6j4BbA7earxfx4X3g==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@napi-rs/canvas-linux-x64-musl@1.0.2': + resolution: {integrity: sha512-l7zZY5+jL5qnBZtDz7CoBtY6p7EkHu422g/0zWwrOrzIwWyWxZFRfZZORY1UG7YApymPLx+UbOkN206xXn/c1Q==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + libc: [musl] + + '@napi-rs/canvas-win32-arm64-msvc@1.0.2': + resolution: {integrity: sha512-yE0koHCFF4PIbMc2o2SEALhnipz7WBISh5glLvQiomtIoCcW0np3H4Lw93ceJAfJttTTeIIWFbwH84F7EVzjMQ==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + + '@napi-rs/canvas-win32-x64-msvc@1.0.2': + resolution: {integrity: sha512-okU8/t2foV6C31n0GtvEMbfD5rOFc70+/6xUNME9Guld29sgSOIGUEDScAWFlcP3k5TYQRl9TNkwJEEjh15w8A==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + + '@napi-rs/canvas@1.0.2': + resolution: {integrity: sha512-EYEqlMYaCbpZDz+IgDH5xp9MTd3ui4dmGqbQYryhMLnSRxrhHKq5KQWHHKxFUcEP4Hp8/BWgvqXocX4j7iSbOQ==} + engines: {node: '>= 10'} + '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -1164,6 +1441,9 @@ packages: '@one-ini/wasm@0.1.1': resolution: {integrity: sha512-XuySG1E38YScSJoMlqovLru4KTUNSjgVTIjyh7qMX6aNN5HY5Ct5LhRJdxO79JtTzKfzV/bnWpz+zquYrISsvw==} + '@panzoom/panzoom@4.6.2': + resolution: {integrity: sha512-Zn3B5/hwa6eYIPRSKX0xf2clv8nviTX8AnAU5kU/EugiTDhG41ya2wlBqYrZJYCWQROr/5XkWObZhIkepi89qw==} + '@parcel/watcher-android-arm64@2.5.6': resolution: {integrity: sha512-YQxSS34tPF/6ZG7r/Ih9xy+kP/WwediEUsqmtf0cuCV5TPPKw/PQHRhueUo6JdeFJaqV3pyjm0GdYjZotbRt/A==} engines: {node: '>= 10.0.0'} @@ -1259,6 +1539,10 @@ packages: '@polka/url@1.0.0-next.29': resolution: {integrity: sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==} + '@profoundlogic/hogan@3.0.4': + resolution: {integrity: sha512-pmNVGuooS30Mm7YbZd5T7E5zYVO6D5Ct91sn4T39mUvMUc3sCGridcnhAufL1/Bz2QzAtzEn0agNrdk3+5yWzw==} + hasBin: true + '@rolldown/pluginutils@1.0.1': resolution: {integrity: sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==} @@ -1512,6 +1796,12 @@ packages: peerDependencies: vite: ^5.2.0 || ^6 || ^7 || ^8 + '@tmcw/togeojson@7.1.2': + resolution: {integrity: sha512-QKnFs9DAuqqBVj4d6c69tV1Dj2TspSBTqffivoN0YoBCVdP/JY1+WaYCJbzU49RkoU5NOSOJ3jtFHCdEUVh21A==} + + '@tonejs/midi@2.0.28': + resolution: {integrity: sha512-RII6YpInPsOZ5t3Si/20QKpNqB1lZ2OCFJSOzJxz38YdY/3zqDr3uaml4JuCWkdixuPqP1/TBnXzhQ39csyoVg==} + '@transloadit/prettier-bytes@0.0.7': resolution: {integrity: sha512-VeJbUb0wEKbcwaSlj5n+LscBl9IPgLPkHVGBkh00cztv6X4L/TJXK58LzFuBKX7/GAfiGhIwH67YTLTlzvIzBA==} @@ -1521,6 +1811,99 @@ packages: '@types/codemirror@5.60.17': resolution: {integrity: sha512-AZq2FIsUHVMlp7VSe2hTfl5w4pcUkoFkM3zVsRKsn1ca8CXRDYvnin04+HP2REkwsxemuHqvDofdlhUWNpbwfw==} + '@types/d3-array@3.2.2': + resolution: {integrity: sha512-hOLWVbm7uRza0BYXpIIW5pxfrKe0W+D5lrFiAEYR+pb6w3N2SwSMaJbXdUfSEv+dT4MfHBLtn5js0LAWaO6otw==} + + '@types/d3-axis@3.0.6': + resolution: {integrity: sha512-pYeijfZuBd87T0hGn0FO1vQ/cgLk6E1ALJjfkC0oJ8cbwkZl3TpgS8bVBLZN+2jjGgg38epgxb2zmoGtSfvgMw==} + + '@types/d3-brush@3.0.6': + resolution: {integrity: sha512-nH60IZNNxEcrh6L1ZSMNA28rj27ut/2ZmI3r96Zd+1jrZD++zD3LsMIjWlvg4AYrHn/Pqz4CF3veCxGjtbqt7A==} + + '@types/d3-chord@3.0.6': + resolution: {integrity: sha512-LFYWWd8nwfwEmTZG9PfQxd17HbNPksHBiJHaKuY1XeqscXacsS2tyoo6OdRsjf+NQYeB6XrNL3a25E3gH69lcg==} + + '@types/d3-color@3.1.3': + resolution: {integrity: sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==} + + '@types/d3-contour@3.0.6': + resolution: {integrity: sha512-BjzLgXGnCWjUSYGfH1cpdo41/hgdWETu4YxpezoztawmqsvCeep+8QGfiY6YbDvfgHz/DkjeIkkZVJavB4a3rg==} + + '@types/d3-delaunay@6.0.4': + resolution: {integrity: sha512-ZMaSKu4THYCU6sV64Lhg6qjf1orxBthaC161plr5KuPHo3CNm8DTHiLw/5Eq2b6TsNP0W0iJrUOFscY6Q450Hw==} + + '@types/d3-dispatch@3.0.7': + resolution: {integrity: sha512-5o9OIAdKkhN1QItV2oqaE5KMIiXAvDWBDPrD85e58Qlz1c1kI/J0NcqbEG88CoTwJrYe7ntUCVfeUl2UJKbWgA==} + + '@types/d3-drag@3.0.7': + resolution: {integrity: sha512-HE3jVKlzU9AaMazNufooRJ5ZpWmLIoc90A37WU2JMmeq28w1FQqCZswHZ3xR+SuxYftzHq6WU6KJHvqxKzTxxQ==} + + '@types/d3-dsv@3.0.7': + resolution: {integrity: sha512-n6QBF9/+XASqcKK6waudgL0pf/S5XHPPI8APyMLLUHd8NqouBGLsU8MgtO7NINGtPBtk9Kko/W4ea0oAspwh9g==} + + '@types/d3-ease@3.0.2': + resolution: {integrity: sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA==} + + '@types/d3-fetch@3.0.7': + resolution: {integrity: sha512-fTAfNmxSb9SOWNB9IoG5c8Hg6R+AzUHDRlsXsDZsNp6sxAEOP0tkP3gKkNSO/qmHPoBFTxNrjDprVHDQDvo5aA==} + + '@types/d3-force@3.0.10': + resolution: {integrity: sha512-ZYeSaCF3p73RdOKcjj+swRlZfnYpK1EbaDiYICEEp5Q6sUiqFaFQ9qgoshp5CzIyyb/yD09kD9o2zEltCexlgw==} + + '@types/d3-format@3.0.4': + resolution: {integrity: sha512-fALi2aI6shfg7vM5KiR1wNJnZ7r6UuggVqtDA+xiEdPZQwy/trcQaHnwShLuLdta2rTymCNpxYTiMZX/e09F4g==} + + '@types/d3-geo@3.1.0': + resolution: {integrity: sha512-856sckF0oP/diXtS4jNsiQw/UuK5fQG8l/a9VVLeSouf1/PPbBE1i1W852zVwKwYCBkFJJB7nCFTbk6UMEXBOQ==} + + '@types/d3-hierarchy@3.1.7': + resolution: {integrity: sha512-tJFtNoYBtRtkNysX1Xq4sxtjK8YgoWUNpIiUee0/jHGRwqvzYxkq0hGVbbOGSz+JgFxxRu4K8nb3YpG3CMARtg==} + + '@types/d3-interpolate@3.0.4': + resolution: {integrity: sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==} + + '@types/d3-path@3.1.1': + resolution: {integrity: sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg==} + + '@types/d3-polygon@3.0.2': + resolution: {integrity: sha512-ZuWOtMaHCkN9xoeEMr1ubW2nGWsp4nIql+OPQRstu4ypeZ+zk3YKqQT0CXVe/PYqrKpZAi+J9mTs05TKwjXSRA==} + + '@types/d3-quadtree@3.0.6': + resolution: {integrity: sha512-oUzyO1/Zm6rsxKRHA1vH0NEDG58HrT5icx/azi9MF1TWdtttWl0UIUsjEQBBh+SIkrpd21ZjEv7ptxWys1ncsg==} + + '@types/d3-random@3.0.4': + resolution: {integrity: sha512-UHYId5WTCx4L4YNel7NU00XUXXgvgpgZOvp10PuvsQENjMDXhh2RyFc0KBjO7B45ne4Ha1yVH7ii0vnzKkuzWA==} + + '@types/d3-scale-chromatic@3.1.0': + resolution: {integrity: sha512-iWMJgwkK7yTRmWqRB5plb1kadXyQ5Sj8V/zYlFGMUBbIPKQScw+Dku9cAAMgJG+z5GYDoMjWGLVOvjghDEFnKQ==} + + '@types/d3-scale@4.0.9': + resolution: {integrity: sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw==} + + '@types/d3-selection@3.0.11': + resolution: {integrity: sha512-bhAXu23DJWsrI45xafYpkQ4NtcKMwWnAC/vKrd2l+nxMFuvOT3XMYTIj2opv8vq8AO5Yh7Qac/nSeP/3zjTK0w==} + + '@types/d3-shape@3.1.8': + resolution: {integrity: sha512-lae0iWfcDeR7qt7rA88BNiqdvPS5pFVPpo5OfjElwNaT2yyekbM0C9vK+yqBqEmHr6lDkRnYNoTBYlAgJa7a4w==} + + '@types/d3-time-format@4.0.3': + resolution: {integrity: sha512-5xg9rC+wWL8kdDj153qZcsJ0FWiFt0J5RB6LYUNZjwSnesfblqrI/bJ1wBdJ8OQfncgbJG5+2F+qfqnqyzYxyg==} + + '@types/d3-time@3.0.4': + resolution: {integrity: sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g==} + + '@types/d3-timer@3.0.2': + resolution: {integrity: sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==} + + '@types/d3-transition@3.0.9': + resolution: {integrity: sha512-uZS5shfxzO3rGlu0cC3bjmMFKsXv+SmZZcgp0KD22ts4uGXp5EVYGzu/0YdwZeKmddhcAccYtREJKkPfXkZuCg==} + + '@types/d3-zoom@3.0.8': + resolution: {integrity: sha512-iqMC4/YlFCSlO8+2Ii1GGGliCAY4XdeG748w5vQUbevlbDu0zSjH/+jojorQVBK/se0j6DUFNPBGSqD3YWYnDw==} + + '@types/d3@7.4.3': + resolution: {integrity: sha512-lZXZ9ckh5R8uiFVt8ogUNf+pIrK4EsWrx2Np75WvF/eTpJ0FMHNhjXk8CKEx/+gpHbNQyJWehbFaTvqmHWB3ww==} + '@types/dagre@0.7.54': resolution: {integrity: sha512-QjcRY+adGbYvBFS7cwv5txhVIwX1XXIUswWl+kSQTbI6NjgZydrZkEKX/etzVd7i+bCsCb40Z/xlBY5eoFuvWQ==} @@ -1542,6 +1925,9 @@ packages: '@types/file-saver@2.0.7': resolution: {integrity: sha512-dNKVfHd/jk0SkR/exKGj2ggkB45MAkzvWCaqLUUgkyjITkGNzH8H+yUwr+BLJUBjZOe9w8X3wgmXhZDRg1ED6A==} + '@types/geojson@7946.0.16': + resolution: {integrity: sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==} + '@types/jsesc@2.5.1': resolution: {integrity: sha512-9VN+6yxLOPLOav+7PwjZbxiID2bVaeq0ED4qSQmdQTdjnXJSaCVKTR58t15oqH1H5t8Ng2ZX1SabJVoN9Q34bw==} @@ -1551,6 +1937,10 @@ packages: '@types/linkify-it@5.0.0': resolution: {integrity: sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==} + '@types/localforage@0.0.34': + resolution: {integrity: sha512-tJxahnjm9dEI1X+hQSC5f2BSd/coZaqbIl1m3TCl0q9SVuC52XcXfV0XmoCU1+PmjyucuVITwoTnN8OlTbEXXA==} + deprecated: This is a stub types definition for localforage (https://github.com/localForage/localForage). localforage provides its own type definitions, so you don't need @types/localforage installed! + '@types/lodash-es@4.17.12': resolution: {integrity: sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==} @@ -1669,6 +2059,9 @@ packages: peerDependencies: '@uppy/core': ^2.3.3 + '@upsetjs/venn.js@2.0.0': + resolution: {integrity: sha512-WbBhLrooyePuQ1VZxrJjtLvTc4NVfpOyKx0sKqioq9bX1C1m7Jgykkn8gLrtwumBioXIqam8DLxp88Adbue6Hw==} + '@vitejs/plugin-vue@6.0.7': resolution: {integrity: sha512-km+p+XdSz9Sxm5rqUbqcSfZYaAniKxWBj1KURl+Jr7UaPvvX7BmaWMdP69I5rrFDeQGyxAG7NXdc57vz+snhWg==} engines: {node: ^20.19.0 || >=22.12.0} @@ -1765,15 +2158,27 @@ packages: '@vue/compiler-core@3.5.34': resolution: {integrity: sha512-s9cLyK5mLcvZ4Agva5QgRsQyLKvts9WbU9DB6NqiZkkGEdwmcEiylj5Jbwkp680drF/NNCV8OlAJSe+yMLxaJw==} + '@vue/compiler-core@3.5.39': + resolution: {integrity: sha512-16KBTEXAJCpDr0mwlw+AZyhu8iyC7R3S2vBwsI7QnWJU6X3WKc9VKeNEZpiMdZ569qWhz9574L3vV55qRL0Vtw==} + '@vue/compiler-dom@3.5.34': resolution: {integrity: sha512-EbF/T++k0e2MMZlJsBhzK8Sgwt0HcIPOhzn1CTB/lv6sQcyk+OWf8YeiLxZp3ro7MbbLcAfAJ6sEvjFWuNgUCw==} + '@vue/compiler-dom@3.5.39': + resolution: {integrity: sha512-oQPigALqYbNxTNPvNgSOe+czwVExfbVF02lz8jP0S3AXJiu3jxYDygNUiqSep4ezzW8XgnubqH63My2A7JR/vg==} + '@vue/compiler-sfc@3.5.34': resolution: {integrity: sha512-D/ihr6uZeIt6r+pVZf46RWT1fAsLFMbUP7k8G1VkiiWexriED9GrX3echHd4Abbt17zjlfiFJ8z7a3BxZOPNjg==} + '@vue/compiler-sfc@3.5.39': + resolution: {integrity: sha512-d0ki86iOyN8LoZPBmk5SJWNwHP19CnDDCfuo//+2WJa2g5Ke0Jay983PIBIcSSzldC68I8DrD5GrHV3OSDfodg==} + '@vue/compiler-ssr@3.5.34': resolution: {integrity: sha512-cDtTHKibkThKGHH1SP+WdccquNRYQDFH6rRjQCqT9G2ltFAfoR5pUftpab/z+aM5mW9HLLVQW7hfKKQe/1GBeQ==} + '@vue/compiler-ssr@3.5.39': + resolution: {integrity: sha512-Ce7/wvwMHai74bdszfXExdazFigYnlF9zgCmEQUcM1j0fOymlouZ7XilTYNo8oUjhlnjYOZbGrcYKuqjz89Ucw==} + '@vue/devtools-api@6.6.4': resolution: {integrity: sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==} @@ -1806,20 +2211,37 @@ packages: '@vue/reactivity@3.5.34': resolution: {integrity: sha512-y9XDjCEuBp+98k+UL5dbYkh57AHU4o6cxZedOPXw3bmrZZYLQsVHguGurq7hVrPCSrQtrnz1f9dssyFr+dMXfQ==} + '@vue/reactivity@3.5.39': + resolution: {integrity: sha512-TpsuBJ9gGlZa5d23XcM2y8EXanz9dZeVDQBXRwzy46ItgvM+rWpzs+UVM0wcRLxGvcav0HE5jz2gNL53xlRAog==} + '@vue/runtime-core@3.5.34': resolution: {integrity: sha512-mKeBYvu8tcMSLhypAHBmriUFfWXKTCF/23Z4jiCoYK3UtWepkliViNLuR90V9XOyD62mUxs9p1jsrpK3CCGIzw==} + '@vue/runtime-core@3.5.39': + resolution: {integrity: sha512-9GLtNyRvPAUMbX+7ono0RC2j0guo2LXVi8LvcmAooImACUKm0oFf0jjwbX8/H0AE/t1nxhAkn8RSl9PMCzzxZw==} + '@vue/runtime-dom@3.5.34': resolution: {integrity: sha512-e8kZzERmCwUnBRVsgSQlAfrfU2rGoy0FFKPBXSlfEjc/O3KfA7QP0t1/2ZylrbchjmIKB4dPTd07A6WPr0eOrg==} + '@vue/runtime-dom@3.5.39': + resolution: {integrity: sha512-7Y6aAGboKcXAZ3ECuUy7RrS5yy2r47dhTp2SKaJmYxjopImaVFaNa5Ne66NwGovsrxVAl5S5rwc7m22UG7Lmww==} + '@vue/server-renderer@3.5.34': resolution: {integrity: sha512-nHxmJoTrKsmrkbILRhkC9gY1G3moZbJTqCzDd7DOOzG5KH9oeJ0Unqrff5f9v0pW//jES05ZkJcNtfE8JjOIew==} peerDependencies: vue: 3.5.34 + '@vue/server-renderer@3.5.39': + resolution: {integrity: sha512-yZSakiAGw85rZfG7UM8akMnIF+FmeiNk47uvHf2nVBBSe+dIKUhZuZq9+XgJhbV3nS5Z4ALH23/MpXofW+mbcw==} + peerDependencies: + vue: 3.5.39 + '@vue/shared@3.5.34': resolution: {integrity: sha512-24uqU4OIiX29ryC3MeWid/Xf2fa2EFRUVLb77nRhk+UrTVrh/XiGtFAFmJBAtBRbjwNdsPRP+jj/OL27Eg1NDA==} + '@vue/shared@3.5.39': + resolution: {integrity: sha512-l1rrBtBfTnmxvtsvdQDXltUUy8S1Y+ZaqdfUzmAnJkTd8Z8rv5v/ytW+TKiqEOWyHPoqtPlNFSs0lhRmYVSHVA==} + '@vue/test-utils@2.4.10': resolution: {integrity: sha512-SmoZ5EA1kYiAFs9NkYdiFFQF+cSnUwnvlYEbY+DogWQZUiqOm/Y29eSbc5T6yi75SgSF9863SBeXniIEoPajCA==} peerDependencies: @@ -1947,6 +2369,18 @@ packages: slate: ^0.123.0 snabbdom: ^3.6.0 + '@xmldom/xmldom@0.7.13': + resolution: {integrity: sha512-lm2GW5PkosIzccsaZIz7tp8cPADSIlIHWDFTR1N0SzfinhhYgeIQjFMz4rYzanCScr3DqQLeomUDArp6MWKm+g==} + engines: {node: '>=10.0.0'} + deprecated: this version is no longer supported, please update to at least 0.8.* + + '@xmldom/xmldom@0.9.10': + resolution: {integrity: sha512-A9gOqLdi6cV4ibazAjcQufGj0B1y/vDqYrcuP6d/6x8P27gRS8643Dj9o1dEKtB6O7fwxb2FgBmJS2mX7gpvdw==} + engines: {node: '>=14.6'} + + abbrev@1.1.1: + resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} + abbrev@2.0.0: resolution: {integrity: sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -1965,6 +2399,9 @@ packages: resolution: {integrity: sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==} engines: {node: '>=0.8'} + ag-psd@30.2.0: + resolution: {integrity: sha512-tSAWfNzLl5brFqKEer7egxASZ1a0LwHnReM/D5VVpvrgdwdsa8OVfCQpysK7tGaOuE2tPEqp3mAuH7aIvPhcig==} + agent-base@6.0.2: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} engines: {node: '>= 6.0.0'} @@ -2032,6 +2469,9 @@ packages: argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + array-flatten@3.0.0: + resolution: {integrity: sha512-zPMVc3ZYlGLNk4mpK1NzP2wg0ml9t7fUgDsayR5Y5rSzxQilzR9FGu/EH2jQOcKSAeAfWeylyW8juy3OkWRvNA==} + array-ify@1.0.0: resolution: {integrity: sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==} @@ -2071,6 +2511,10 @@ packages: peerDependencies: postcss: ^8.1.0 + avsc@5.7.9: + resolution: {integrity: sha512-yOA4wFeI7ET3v32Di/sUybQ+ttP20JHSW3mxLuNGeO0uD6PPcvLrIQXSvy/rhJOWU5JrYh7U4OHplWMmtAtjMg==} + engines: {node: '>=0.11'} + axios@1.16.1: resolution: {integrity: sha512-caYkukvroVPO8KrzuJEb50Hm07KwfBZPEC3VeFHTsqWHvKTsy54hjJz9BS/cdaypROE2rH6xvm9mHX4fgWkr3A==} @@ -2096,6 +2540,9 @@ packages: resolution: {integrity: sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==} engines: {node: '>=0.6'} + billboard.js@3.18.0: + resolution: {integrity: sha512-aci69MLwOX0HfdmQHk+v/iA7L4R+wG53hW9VwhkYzMOyqemWLjscf229XsQRrTau9EJSVyOHnr/rpVukoqppXw==} + binary-extensions@2.3.0: resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} engines: {node: '>=8'} @@ -2152,6 +2599,9 @@ packages: resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==} engines: {node: '>=18'} + but-unzip@0.1.10: + resolution: {integrity: sha512-hLfQ9WlUimmv/okzsRl6AYG3Ew5HNWhWgUslSR93FsDdeL0MAoQvmC/BJfs35lqEAO5t/QD7Y4vCFcPJtijt3A==} + cacheable@2.3.5: resolution: {integrity: sha512-EQfaKe09tl615iNvq/TBRWTFf1AKJNXYQSsMx0Z3EI0nA+pVsVPS8wJhnRlkbdacKPh1d0qVIhwTc2zsQNFEEg==} @@ -2284,6 +2734,9 @@ packages: resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} engines: {node: '>= 0.8'} + comlink@4.4.2: + resolution: {integrity: sha512-OxGdvBmJuNKSCMO4NTl1L47VRp6xn2wG4F/2hYzB6tiCb709otOxtEYCSvK80PtjODfXXZu8ds+Nw5kVCjqd2g==} + commander@10.0.1: resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==} engines: {node: '>=14'} @@ -2295,6 +2748,14 @@ packages: commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + commander@7.2.0: + resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} + engines: {node: '>= 10'} + + commander@8.3.0: + resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} + engines: {node: '>= 12'} + commitizen@4.3.1: resolution: {integrity: sha512-gwAPAVTy/j5YcOOebcCRIijn+mSjWJC+IYKivTu6aG8Ei/scoXgfsMRnuAk6b0GRste2J4NGxVdMN3ZpfNaVaw==} engines: {node: '>= 12'} @@ -2348,6 +2809,12 @@ packages: core-util-is@1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + cose-base@1.0.3: + resolution: {integrity: sha512-s9whTXInMSgAp/NVXVNuVxVKzGH2qck3aQlVHxDCdAEPgtMKwc4Wq6/QKhgdEdgbLSi9rBTAcPoRa6JpiG4ksg==} + + cose-base@2.2.0: + resolution: {integrity: sha512-AzlgcsCbUMymkADOJtQm3wO9S3ltPfYOFD5033keQn9NJzIbtnZj+UdBJe7DYml/8TdbtHJW3j58SOnKhWY/5g==} + cosmiconfig-typescript-loader@6.3.0: resolution: {integrity: sha512-Akr82WH1Wfqatyiqpj8HDkO2o2KmJRu1FhKfSNJP3K4IdXwHfEyL7MOb62i1AGQVLtIQM+iCE9CGOtrfhR+mmA==} engines: {node: '>=v18'} @@ -2397,6 +2864,20 @@ packages: csstype@3.2.3: resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} + cytoscape-cose-bilkent@4.1.0: + resolution: {integrity: sha512-wgQlVIUJF13Quxiv5e1gstZ08rnZj2XaLHGoFMYXz7SkNfCDOOteKBE6SYRfA9WxxI/iBc3ajfDoc6hb/MRAHQ==} + peerDependencies: + cytoscape: ^3.2.0 + + cytoscape-fcose@2.2.0: + resolution: {integrity: sha512-ki1/VuRIHFCzxWNrsshHYPs6L7TvLu3DL+TyIGEsRcvVERmxokbf5Gdk7mFxZnTdiGtnA4cfSmjZJMviqSuZrQ==} + peerDependencies: + cytoscape: ^3.2.0 + + cytoscape@3.34.0: + resolution: {integrity: sha512-62rNSrioXw93uliKFBwjukeQyeWwH2PqDrTac31r2P6464u3AUvTk0xS4LVvT251g7IgkFunrI48ZEZGjywSOg==} + engines: {node: '>=0.10'} + cz-conventional-changelog@3.3.0: resolution: {integrity: sha512-U466fIzU5U22eES5lTNiNbZ+d8dfcHcssH4o7QsdWaCcRs/feIPCxKYSWkYBNs5mny7MvEfwpTLWjvbm94hecw==} engines: {node: '>= 10'} @@ -2405,10 +2886,37 @@ packages: resolution: {integrity: sha512-xeMA5ci+gkBY6uKmqc6nzhG/Q4pmK1DKbVVUgByOTBgregoiYE0f3otEF0ADelyEWH4vNsO1W2o7QZYEe7Nwlw==} engines: {node: '>=v12.20.0'} + d3-array@2.12.1: + resolution: {integrity: sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==} + + d3-array@3.2.4: + resolution: {integrity: sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==} + engines: {node: '>=12'} + + d3-axis@3.0.0: + resolution: {integrity: sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==} + engines: {node: '>=12'} + + d3-brush@3.0.0: + resolution: {integrity: sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==} + engines: {node: '>=12'} + + d3-chord@3.0.1: + resolution: {integrity: sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==} + engines: {node: '>=12'} + d3-color@3.1.0: resolution: {integrity: sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==} engines: {node: '>=12'} + d3-contour@4.0.2: + resolution: {integrity: sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==} + engines: {node: '>=12'} + + d3-delaunay@6.0.4: + resolution: {integrity: sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==} + engines: {node: '>=12'} + d3-dispatch@3.0.1: resolution: {integrity: sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==} engines: {node: '>=12'} @@ -2417,18 +2925,88 @@ packages: resolution: {integrity: sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==} engines: {node: '>=12'} + d3-dsv@3.0.1: + resolution: {integrity: sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==} + engines: {node: '>=12'} + hasBin: true + d3-ease@3.0.1: resolution: {integrity: sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==} engines: {node: '>=12'} + d3-fetch@3.0.1: + resolution: {integrity: sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==} + engines: {node: '>=12'} + + d3-force@3.0.0: + resolution: {integrity: sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==} + engines: {node: '>=12'} + + d3-format@3.1.2: + resolution: {integrity: sha512-AJDdYOdnyRDV5b6ArilzCPPwc1ejkHcoyFarqlPqT7zRYjhavcT3uSrqcMvsgh2CgoPbK3RCwyHaVyxYcP2Arg==} + engines: {node: '>=12'} + + d3-geo@3.1.1: + resolution: {integrity: sha512-637ln3gXKXOwhalDzinUgY83KzNWZRKbYubaG+fGVuc/dxO64RRljtCTnf5ecMyE1RIdtqpkVcq0IbtU2S8j2Q==} + engines: {node: '>=12'} + + d3-hierarchy@3.1.2: + resolution: {integrity: sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==} + engines: {node: '>=12'} + d3-interpolate@3.0.1: resolution: {integrity: sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==} engines: {node: '>=12'} + d3-path@1.0.9: + resolution: {integrity: sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==} + + d3-path@3.1.0: + resolution: {integrity: sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==} + engines: {node: '>=12'} + + d3-polygon@3.0.1: + resolution: {integrity: sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==} + engines: {node: '>=12'} + + d3-quadtree@3.0.1: + resolution: {integrity: sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==} + engines: {node: '>=12'} + + d3-random@3.0.1: + resolution: {integrity: sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==} + engines: {node: '>=12'} + + d3-sankey@0.12.3: + resolution: {integrity: sha512-nQhsBRmM19Ax5xEIPLMY9ZmJ/cDvd1BG3UVvt5h3WRxKg5zGRbvnteTyWAbzeSvlh3tW7ZEmq4VwR5mB3tutmQ==} + + d3-scale-chromatic@3.1.0: + resolution: {integrity: sha512-A3s5PWiZ9YCXFye1o246KoscMWqf8BsD9eRiJ3He7C9OBaxKhAd5TFCdEx/7VbKtxxTsu//1mMJFrEt572cEyQ==} + engines: {node: '>=12'} + + d3-scale@4.0.2: + resolution: {integrity: sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==} + engines: {node: '>=12'} + d3-selection@3.0.0: resolution: {integrity: sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==} engines: {node: '>=12'} + d3-shape@1.3.7: + resolution: {integrity: sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==} + + d3-shape@3.2.0: + resolution: {integrity: sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==} + engines: {node: '>=12'} + + d3-time-format@4.1.0: + resolution: {integrity: sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==} + engines: {node: '>=12'} + + d3-time@3.1.0: + resolution: {integrity: sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==} + engines: {node: '>=12'} + d3-timer@3.0.1: resolution: {integrity: sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==} engines: {node: '>=12'} @@ -2443,10 +3021,17 @@ packages: resolution: {integrity: sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==} engines: {node: '>=12'} + d3@7.9.0: + resolution: {integrity: sha512-e1U46jVP+w7Iut8Jt8ri1YsPOvFpg46k+K8TpCb0P+zjCkjkPnV7WzfDJzMHy1LnA+wj5pLT1wjO901gLXeEhA==} + engines: {node: '>=12'} + d@1.0.2: resolution: {integrity: sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==} engines: {node: '>=0.12'} + dagre-d3-es@7.0.14: + resolution: {integrity: sha512-P4rFMVq9ESWqmOgK+dlXvOtLwYg0i7u0HBGJER0LZDJT2VHIPAMZ/riPxqJceWMStH5+E61QxFra9kIS3AqdMg==} + dagre@0.8.5: resolution: {integrity: sha512-/aTqmnRta7x7MCCpExk7HQL2O4owCT2h8NT//9I1OQ9vt29Pa0BzSAkR5lwFUcQ7491yVi/3CXU9jQ5o0Mn2Sw==} @@ -2500,6 +3085,9 @@ packages: defu@6.1.7: resolution: {integrity: sha512-7z22QmUWiQ/2d0KkdYmANbRUVABpZ9SNYyH5vx6PZ+nE5bcC0l7uFvEfHlyld/HcGBFTL536ClDt3DEcSlEJAQ==} + delaunator@5.1.0: + resolution: {integrity: sha512-AGrQ4QSgssa1NGmWmLPqN5NY2KajF5MqxetNEO+o0n3ZwZZeTmt7bBnvzHWrmkZFxGgr4HdyFgelzgi06otLuQ==} + delayed-stream@1.0.0: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} @@ -2522,6 +3110,20 @@ packages: diff-match-patch@1.0.5: resolution: {integrity: sha512-IayShXAgj/QMXgB0IWmKx+rOPuGMhqm5w6jvFxmVenXKIzRqTAAsbBPT3kWQeGANj3jGgvcvv4yK6SxqYmikgw==} + diff2html@3.4.56: + resolution: {integrity: sha512-u9gfn+BlbHcyO7vItCIC4z49LJDUt31tODzOfAuJ5R1E7IdlRL6KjugcB9zOpejD+XiR+dDZbsnHSQ3g6A/u8A==} + engines: {node: '>=12'} + + diff@8.0.4: + resolution: {integrity: sha512-DPi0FmjiSU5EvQV0++GFDOJ9ASQUVFh5kD+OzOnYdi7n3Wpm9hWWGfB/O2blfHcMVTL5WkQXSnRiK9makhrcnw==} + engines: {node: '>=0.3.1'} + + dingbat-to-unicode@1.0.1: + resolution: {integrity: sha512-98l0sW87ZT58pU4i61wa2OHwxbiYSbuxsCBozaVnYX2iCnr3bLM3fIes1/ej7h1YdOKuKt/MLs706TVnALA65w==} + + docx-preview@0.3.7: + resolution: {integrity: sha512-Lav69CTA/IYZPJTsKH7oYeoZjyg96N0wEJMNslGJnZJ+dMUZK85Lt5ASC79yUlD48ecWjuv+rkcmFt6EVPV0Xg==} + dom-serializer@2.0.0: resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} @@ -2552,6 +3154,24 @@ packages: duplexer2@0.1.4: resolution: {integrity: sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==} + dwf-viewer@0.6.4: + resolution: {integrity: sha512-lDZ0gfQM3jGj/IiCEru3vIMh9kMH8duFes6VzoHZr+/wEQ15lJadRSngQpHoLy8mGYTX1TuQtSJ3Qklf9rKNLg==} + engines: {node: '>=18'} + peerDependencies: + three: '>=0.150.0' + peerDependenciesMeta: + three: + optional: true + + dxf-parser@1.1.2: + resolution: {integrity: sha512-GPTumUvRkounlIazLIyJMmTWt+nlg+ksS0Hdm8jWvejmZKBTz6gvHTam76wRm4PQMma5sgKLThblQyeIJcH79Q==} + + e-virt-table@1.4.2: + resolution: {integrity: sha512-yQMljhgJLjjUCOcvnitIy6IQHG17t7+f7EId1AswYUqcYh5av8lXfZwT8qUzWoStJgr1kKHsDvEv+FtGd4HQ4Q==} + + earcut@3.2.3: + resolution: {integrity: sha512-vnS4AVwp1KHAF13i1vp1/2D5evWy3k5u/iW/B81QVsUZtV8cv2tU0b2VNFlqvh4kYwrFMDdjPCfAmfyJW9y14Q==} + echarts@6.0.0: resolution: {integrity: sha512-Tte/grDQRiETQP4xz3iZWSvoHrkCQtwqd6hs+mifXcjrCuo2iKWbajFObuLJVBlDIJlOzgQPd1hsaKt/3+OMkQ==} @@ -2601,6 +3221,9 @@ packages: resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==} engines: {node: '>=18'} + epubjs@0.3.93: + resolution: {integrity: sha512-c06pNSdBxcXv3dZSbXAVLE1/pmleRhOT6mXNZo6INKmvuKpYB65MwU/lO7830czCtjIiK9i+KR+3S+p0wtljrw==} + error-ex@1.3.4: resolution: {integrity: sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==} @@ -2948,6 +3571,9 @@ packages: engines: {node: '>=18'} hasBin: true + gl-matrix@3.4.4: + resolution: {integrity: sha512-latSnyDNt/8zYUB6VIJ6PCh2jBjJX6gnDsoCZ7LyW7GkqrD51EWwa9qCoGixj8YqBtETQK/xY7OmpTF8xz1DdQ==} + glob-parent@5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} @@ -3004,6 +3630,9 @@ packages: graphlib@2.1.8: resolution: {integrity: sha512-jcLLfkpoVGmH7/InMC/1hIvOPSUh38oJtGhvrOFGzioE1DZ+0YW16RgmOJhHiuWTvGiJQ9Z1Ik43JvkRPRvE+A==} + hachure-fill@0.5.2: + resolution: {integrity: sha512-3GKBOn+m2LX9iq+JC1064cSFprJY4jL1jCXTcpnfER5HYE2l/4EfWSGzkPa/ZDBmYI0ZOEj5VHV/eKnPGkHuOg==} + has-flag@3.0.0: resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} engines: {node: '>=4'} @@ -3032,10 +3661,16 @@ packages: resolution: {integrity: sha512-ej4AhfhfL2Q2zpMmLo7U1Uv9+PyhIZpgQLGT1F9miIGmiCJIoCgSmczFdrc97mWT4kVY72KA+WnnhJ5pghSvSg==} engines: {node: '>= 0.4'} + heic2any@0.0.4: + resolution: {integrity: sha512-3lLnZiDELfabVH87htnRolZ2iehX9zwpRyGNz22GKXIu0fznlblf0/ftppXKNqS26dqFSeqfIBhAmAj/uSp0cA==} + highlight.js@11.11.1: resolution: {integrity: sha512-Xwwo44whKBVCYoliBQwaPvtd/2tYFkRQtXDWj1nackaV2JPXx3L0+Jvd8/qCJ2p+ML0/XVkJ2q+Mr+UVdpJK5w==} engines: {node: '>=12.0.0'} + hls.js@1.6.16: + resolution: {integrity: sha512-VSIRpLfRwlAAdGL4wiTucx2ScRipo0ed1FBatWkyt832jC4CReKstga6yIhYVwGu9LOBjuX9wzmRMeQdBJtzEA==} + homedir-polyfill@1.0.3: resolution: {integrity: sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==} engines: {node: '>=0.10.0'} @@ -3076,6 +3711,9 @@ packages: engines: {node: '>=18'} hasBin: true + hyparquet@1.26.2: + resolution: {integrity: sha512-6qjyK7R2tZ4vnYP1J8NpcCeDPK1UIYk3xh5XgtQUnUM1iwkYbvI6Mz3xtmpMd6AfCCeoUoJVbEq29k5GReZRWA==} + i18next@23.16.8: resolution: {integrity: sha512-06r/TitrM88Mg5FdUXAKL96dJMzgqLE5dv3ryBAra4KCwD9mJ4ndOTS95ZuymIGoE+2hzfdaMak2X11/es7ZWg==} @@ -3083,6 +3721,13 @@ packages: resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} engines: {node: '>=0.10.0'} + iconv-lite@0.6.3: + resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} + engines: {node: '>=0.10.0'} + + idb@7.1.1: + resolution: {integrity: sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==} + ieee754@1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} @@ -3125,6 +3770,13 @@ packages: resolution: {integrity: sha512-QAgPDQMEgrDssk1XiwwHoOGYF9BAbUcc1+j+FhEvaOt8/cKRqyLn0U5qA6F74fGhTMGxf92pOvPBeh29jQJDTQ==} engines: {node: '>=12.0.0'} + internmap@1.0.1: + resolution: {integrity: sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==} + + internmap@2.0.3: + resolution: {integrity: sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==} + engines: {node: '>=12'} + is-arrayish@0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} @@ -3289,6 +3941,9 @@ packages: json-stable-stringify-without-jsonify@1.0.1: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + json-stringify-pretty-compact@4.0.0: + resolution: {integrity: sha512-3CNZ2DnrpByG9Nqj6Xo8vqbjT4F6N+tb4Gb28ESAZjYZ5yqvmc56J+/kuIwkaAMOyblTQhUW7PxMkUb8Q36N3Q==} + json5@2.2.3: resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} engines: {node: '>=6'} @@ -3300,12 +3955,22 @@ packages: jszip@3.10.1: resolution: {integrity: sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==} + katex@0.16.47: + resolution: {integrity: sha512-Eeo8Ys1doU1z+x8AZsPpQu+p/QcZBI5PeOo7QGQdy2x2m0MU/hYagBbGOmXwr5KVbEfVuWv9LpnQWeehogurjg==} + hasBin: true + + kdbush@4.1.0: + resolution: {integrity: sha512-e9vurzrXJQrFX6ckpHP3bvj5l+9CnYzkxDNnNQ1h2QTqdWsUAJgXiKdGNcOa1EY85dU8KbQ+z/FdQdB7P+9yfQ==} + keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} keyv@5.6.0: resolution: {integrity: sha512-CYDD3SOtsHtyXeEORYRx2qBtpDJFjRTGXUtmNEMGyzYOKj1TE3tycdlho7kA1Ufx9OYWZzg52QFBGALTirzDSw==} + khroma@2.1.0: + resolution: {integrity: sha512-Ls993zuzfayK269Svk9hzpeGUKob/sIgZzyHYdjQoAdQetRKpOLj+k/QQQ/6Qi0Yz65mlROrfd+Ev+1+7dz9Kw==} + kind-of@6.0.3: resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} engines: {node: '>=0.10.0'} @@ -3316,6 +3981,12 @@ packages: kolorist@1.8.0: resolution: {integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==} + layout-base@1.0.2: + resolution: {integrity: sha512-8h2oVEZNktL4BH2JCOI90iD1yXwL6iNW7KcCKT2QZgQJR2vbqDsldCTPRU9NifTCqHZci57XvQQ15YTu+sTYPg==} + + layout-base@2.0.1: + resolution: {integrity: sha512-dp3s92+uNI1hWIpPGH3jK2kxE2lMjdXdr+DH8ynZHpd6PUlH6x6cbuXnoMmiNumznqaNO31xu9e79F0uuZ0JFg==} + lazystream@1.0.1: resolution: {integrity: sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==} engines: {node: '>= 0.6.3'} @@ -3324,6 +3995,12 @@ packages: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} + libarchive.js@2.0.2: + resolution: {integrity: sha512-JHb+P4suNSjvz/dMdRgOe7JAxluXJeialzSFkKHU5y0ZK+m175drPOaIYW6I9WXSDcPcQ13eCUgMnpgY0ggmoQ==} + + lie@3.1.1: + resolution: {integrity: sha512-RiNhHysUjhrDQntfYSfY4MU24coXXdEOgw9WGcKHNeEwffDYbF//u87M1EWaMGzuFoSbqW0C9C6lEEhDOAswfw==} + lie@3.3.0: resolution: {integrity: sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==} @@ -3427,6 +4104,9 @@ packages: resolution: {integrity: sha512-arhlxbFRmoQHl33a0Zkle/YWlmNwoyt6QNZEIJcqNbdrsix5Lvc4HyyI3EnwxTYlZYc32EbYrQ8SzEZ7dqgg9A==} engines: {node: '>=14'} + localforage@1.10.0: + resolution: {integrity: sha512-14/H1aX7hzBBmmh7sGPd+AOMkkIrHM3Z1PAyGgZigA1H1p5O5ANnMyWzvpAETtG68/dC4pC0ncy3+PPGzXZHPg==} + locate-path@6.0.0: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} @@ -3519,6 +4199,10 @@ packages: resolution: {integrity: sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==} engines: {node: '>=18'} + loglevel@1.9.2: + resolution: {integrity: sha512-HgMmCqIJSAKqo68l0rS2AanEWfkxaZ5wNiEFb5ggm08lDs9Xl2KxBlX3PTcaD2chBM1gXAYf491/M2Rv8Jwayg==} + engines: {node: '>= 0.6.0'} + longest@2.0.1: resolution: {integrity: sha512-Ajzxb8CM6WAnFjgiloPsI3bF+WCxcvhdIG3KNA2KN962+tdBsHcuQ4k4qX/EcS/2CRkcc0iAkR956Nib6aXU/Q==} engines: {node: '>=0.10.0'} @@ -3537,6 +4221,10 @@ packages: magic-string@0.30.21: resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} + maplibre-gl@5.24.0: + resolution: {integrity: sha512-ALyFxgtd5R+65UqZ/++lOqwWcC0SNho9c27fYSyLmG7AfnAul2o46F05aDJGPbFU57wos9dgcIySHs0Xe6ia3A==} + engines: {node: '>=16.14.0', npm: '>=8.1.0'} + markdown-it-highlightjs@4.3.0: resolution: {integrity: sha512-dTEXpTV2J9WJiO8TA/FJ4DxidrYtTNcfBAdl+CLjQ3UFWj8s4dJyCPTcvoXNLmN5U5ZTCGu7TSkSvBvi4fUqkQ==} @@ -3544,6 +4232,19 @@ packages: resolution: {integrity: sha512-BuU2qnTti9YKgK5N+IeMubp14ZUKUUw7yeJbkjtosvHiP0AZ5c8IAgEMk79D0eC8F23r4Ac/q8cAIFdm2FtyoA==} hasBin: true + marked@16.4.2: + resolution: {integrity: sha512-TI3V8YYWvkVf3KJe1dRkpnjs68JUPyEa5vjKrp1XEEJUAOaQc+Qj+L1qWbPd0SJuAdQkFU0h73sXXqwDYxsiDA==} + engines: {node: '>= 20'} + hasBin: true + + marked@18.0.5: + resolution: {integrity: sha512-S6GcvALHg6K4ohtu4E7x0a1AqhAjp6cV8KhLSyN9qVapnzJkusVBxZRcIU9AeYsbe6P1hKDusSbEOzGyyuce6w==} + engines: {node: '>= 20'} + hasBin: true + + marks-pane@1.0.9: + resolution: {integrity: sha512-Ahs4oeG90tbdPWwAJkAAoHg2lRR8lAs9mZXETNPO9hYg3AkjUJBKi1NQ4aaIQZVGrig7c/3NUV1jANl8rFTeMg==} + math-intrinsics@1.1.0: resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} engines: {node: '>= 0.4'} @@ -3578,10 +4279,19 @@ packages: merge@2.1.1: resolution: {integrity: sha512-jz+Cfrg9GWOZbQAnDQ4hlVnQky+341Yk5ru8bZSe6sIDTCIg8n9i/u7hSQGSVOF3C7lH6mGtqjkiT9G4wFLL0w==} + mermaid@11.16.0: + resolution: {integrity: sha512-Zvm3kbstgdpvIJPPItlL7fppIZ3kibvc1oZIGxdvk9t6UFz6flv+Jw7FtRGKwfcI8OckmH04LqG6LlS6X4B1pA==} + + mgrs@1.0.0: + resolution: {integrity: sha512-awNbTOqCxK1DBGjalK3xqWIstBZgN6fxsMSiXLs9/spqWkF2pAhb2rrYCFSsr1/tT7PhcDGjZndG8SWYn0byYA==} + micromatch@4.0.8: resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} engines: {node: '>=8.6'} + midi-file@1.2.4: + resolution: {integrity: sha512-B5SnBC6i2bwJIXTY9MElIydJwAmnKx+r5eJ1jknTLetzLflEl0GWveuBB6ACrQpecSRkOB6fhTx1PwXk2BVxnA==} + mime-db@1.52.0: resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} engines: {node: '>= 0.6'} @@ -3647,6 +4357,9 @@ packages: muggle-string@0.4.1: resolution: {integrity: sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==} + murmurhash-js@1.0.0: + resolution: {integrity: sha512-TvmkNhkv8yct0SVBSy+o8wYzXjE4Zz3PCesbfs8HiCXXdcTuocApFv11UWlNFWKYsP2okqrhb7JNlSm9InBhIw==} + mute-stream@0.0.8: resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==} @@ -3675,6 +4388,10 @@ packages: node-releases@2.0.44: resolution: {integrity: sha512-5WUyunoPMsvvEhS8AxHtRzP+oA8UCkJ7YRxatWKjngndhDGLiqEVAQKWjFAiAiuL8zMRGzGSJxFnLetoa43qGQ==} + nopt@1.0.10: + resolution: {integrity: sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==} + hasBin: true + nopt@7.2.1: resolution: {integrity: sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -3759,6 +4476,12 @@ packages: pako@1.0.11: resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==} + pako@2.1.0: + resolution: {integrity: sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==} + + pako@2.2.0: + resolution: {integrity: sha512-zJq6RP/5q+TO2OpFV3FHzlPnFjmkb7Nc99a5SNjJE+uu/PkpChs+NIZSSzbBoD+6kjiISXjfYdwj1ZRQ81dz/w==} + parent-module@1.0.1: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} @@ -3774,9 +4497,15 @@ packages: parse5@8.0.1: resolution: {integrity: sha512-z1e/HMG90obSGeidlli3hj7cbocou0/wa5HacvI3ASx34PecNjNQeaHNo5WIZpWofN9kgkqV1q5YvXe3F0FoPw==} + parsedbf@2.0.0: + resolution: {integrity: sha512-WNjKn/cwgGBkXqQLif+2VMEahcRHkBRU0/RfBWZ7Vj7snRNNW63yW1mVuuHRDyXTRxuGCzAHHBcr/Fn+U/bXjQ==} + path-browserify@1.0.1: resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} + path-data-parser@0.1.0: + resolution: {integrity: sha512-NOnmBpt5Y2RWbuv0LMzsayp3lVylAHLPUTut412ZA3l+C4uw4ZVkQbjShYCQ8TCpUMdPapr4YjUqLYD6v68j+w==} + path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} @@ -3796,9 +4525,24 @@ packages: path-to-regexp@8.4.2: resolution: {integrity: sha512-qRcuIdP69NPm4qbACK+aDogI5CBDMi1jKe0ry5rSQJz8JVLsC7jV8XpiJjGRLLol3N+R5ihGYcrPLTno6pAdBA==} + path-webpack@0.0.3: + resolution: {integrity: sha512-AmeDxedoo5svf7aB3FYqSAKqMxys014lVKBzy1o/5vv9CtU7U4wgGWL1dA2o6MOzcD53ScN4Jmiq6VbtLz1vIQ==} + pathe@2.0.3: resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} + pbf@4.0.2: + resolution: {integrity: sha512-J0ajxARhZfpUEebxYs1vhMGMuLSXtBe1e+fFPDrf2uA2hgo+UshKfNUWOz92HJNz6/NFEXseQPddnHkTreWRqg==} + hasBin: true + + pbf@5.1.0: + resolution: {integrity: sha512-Wv0yo0+uZepnoNEKsquhar1F18LogB8oeEikIhUXG16udbiXG7JecHGySwoo6kuMgjmbQYzdrTZlO+/K9t8eZg==} + hasBin: true + + pdfjs-dist@6.1.200: + resolution: {integrity: sha512-o8MolyzirkkLrcdsae/HEOiIcXWI7DS5zGpvqW8xTC2YUsW30rltFw2bDGvw/fskUdEMrQm2br68jzDS5BH2vw==} + engines: {node: '>=22.13.0 || >=24'} + perfect-debounce@1.0.0: resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==} @@ -3850,6 +4594,18 @@ packages: pkg-types@2.3.1: resolution: {integrity: sha512-y+ichcgc2LrADuhLNAx8DFjVfgz91pRxfZdI3UDhxHvcVEZsenLO+7XaU5vOp0u/7V/wZ+plyuQxtrDlZJ+yeg==} + plantuml-encoder@1.4.0: + resolution: {integrity: sha512-sxMwpDw/ySY1WB2CE3+IdMuEcWibJ72DDOsXLkSmEaSzwEUaYBT6DWgOfBiHGCux4q433X6+OEFWjlVqp7gL6g==} + + points-on-curve@0.2.0: + resolution: {integrity: sha512-0mYKnYYe9ZcqMCWhUjItv/oHjvgEsfKvnUTg8sAtnHr3GVy7rGkXCb6d5cSyqrWqL4k81b9CPg3urd+T7aop3A==} + + points-on-path@0.2.1: + resolution: {integrity: sha512-25ClnWWuw7JbWZcgqY/gJ4FQWadKxGWk+3kR/7kD0tCaDtPPMj7oHu2ToLaVhfpnHrZzYby2w6tUA0eOIuUg8g==} + + postal-mime@2.7.5: + resolution: {integrity: sha512-GNEXKvWFQnbgO5NlrGzVa0FmWzBZ24PersAWErttSg1Hjpf0ATxTwS5DOMGaOpTG6bUh5cTr7xi0jAD942wCJA==} + postcss-html@1.8.1: resolution: {integrity: sha512-OLF6P7qctfAWayOhLpcVnTGqVeJzu2W3WpIYelfz2+JV5oGxfkcEvweN9U4XpeqE0P98dcD9ssusGwlF0TK0uQ==} engines: {node: ^12 || >=14} @@ -3894,6 +4650,13 @@ packages: resolution: {integrity: sha512-SoSL4+OSEtR99LHFZQiJLkT59C5B1amGO1NzTwj7TT1qCUgUO6hxOvzkOYxD+vMrXBM3XJIKzokoERdqQq/Zmg==} engines: {node: ^10 || ^12 || >=14} + postcss@8.5.16: + resolution: {integrity: sha512-vuwillviilfKZsg0VGj5R/YwwcHx4SLsIOI/7K6mQkWx+l5cUHTjj5g0AasTBcyXsbfTgrwsUNmVUb5xVwyPwg==} + engines: {node: ^10 || ^12 || >=14} + + potpack@2.1.0: + resolution: {integrity: sha512-pcaShQc1Shq0y+E7GqJqvZj8DTthWV1KeHGdi0Z6IAin2Oi3JnLCOfwnCo84qc+HAp52wT9nK9H7FAJp5a44GQ==} + preact@10.29.1: resolution: {integrity: sha512-gQCLc/vWroE8lIpleXtdJhTFDogTdZG9AjMUpVkDf2iTCNwYNWA+u16dL41TqUDJO4gm2IgrcMv3uTpjd4Pwmg==} @@ -3917,9 +4680,20 @@ packages: process-nextick-args@2.0.1: resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + proj4@2.20.9: + resolution: {integrity: sha512-GLBGqXaTcdWnppre3o1sMmy4DcMGSGq/ng+9k2MTNddarRK6SveINqlqYzi3xEXuy06ljY1TTrC6H9C4f360IQ==} + peerDependencies: + geotiff: '*' + peerDependenciesMeta: + geotiff: + optional: true + proto-list@1.2.4: resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==} + protocol-buffers-schema@3.6.1: + resolution: {integrity: sha512-VG2K63Igkiv9p76tk1lilczEK1cT+kCjKtkdhw1dQZV3k3IXJbd3o6Ho8b9zJZaHSnT2hKe4I+ObmX9w6m5SmQ==} + proxy-from-env@2.1.0: resolution: {integrity: sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==} engines: {node: '>=10'} @@ -3951,6 +4725,9 @@ packages: queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + quickselect@3.0.0: + resolution: {integrity: sha512-XdjUArbK4Bm5fLLvlm5KpTFOiOThgfWWI4axAZDWg4E/0mKdZyI9tNEfds27qCi1ze/vwTR16kvmmGhRra3c2g==} + readable-stream@2.3.8: resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} @@ -3993,6 +4770,9 @@ packages: resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} engines: {node: '>=8'} + resolve-protobuf-schema@2.1.0: + resolution: {integrity: sha512-kI5ffTiZWmJaS/huM8wZfEMer1eRd7oJQhDuxeCLe3t7N7mX3z94CN0xPxBQxFYQTSNz9T0i+v6inKqSdK8xrQ==} + restore-cursor@3.1.0: resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} engines: {node: '>=8'} @@ -4013,6 +4793,9 @@ packages: engines: {node: 20 || >=22} hasBin: true + robust-predicates@3.0.3: + resolution: {integrity: sha512-NS3levdsRIUOmiJ8FZWCP7LG3QpJyrs/TE0Zpf1yvZu8cAJJ6QMW92H1c7kWpdIHo8RvmLxN/o2JXTKHp74lUA==} + rollup-plugin-visualizer@5.14.0: resolution: {integrity: sha512-VlDXneTDaKsHIw8yzJAFWtrzguoJ/LnQ+lMpoVfYJ3jJF4Ihe5oYLAqLklIK/35lgUY+1yEzCkHyZ1j4A5w5fA==} engines: {node: '>=18'} @@ -4031,6 +4814,12 @@ packages: engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true + roughjs@4.6.6: + resolution: {integrity: sha512-ZUz/69+SYpFN/g/lUlo2FXcIjRkSu3nDarreVdGGndHEBJ6cXPdKguS8JGxwj5HA5xIbVKSmLgr5b3AWxtRfvQ==} + + rtf.js@3.0.9: + resolution: {integrity: sha512-I1GpDat4i548WzmeZXv27f/743984fvEeeBS8BC01/Sop17pMlUl3M7DYcdcB3PUvOZTrFIMxGZx8qw7cSMAKQ==} + run-applescript@7.1.0: resolution: {integrity: sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==} engines: {node: '>=18'} @@ -4042,6 +4831,9 @@ packages: run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + rw@1.3.3: + resolution: {integrity: sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==} + rxjs@7.8.2: resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==} @@ -4096,6 +4888,9 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} + shpjs@6.2.0: + resolution: {integrity: sha512-8cR/RKYHQepmVyBMtzZQ+1bnSbWrtLXS6aoEJmpUlOSHtSUddterebVxYmIWq2g9kOEX9jm2kjHiikyPX7cNQA==} + side-channel-list@1.0.1: resolution: {integrity: sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==} engines: {node: '>= 0.4'} @@ -4176,6 +4971,9 @@ packages: resolution: {integrity: sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==} engines: {node: '>=0.10.0'} + sql.js@1.14.1: + resolution: {integrity: sha512-gcj8zBWU5cFsi9WUP+4bFNXAyF1iRpA3LLyS/DP5xlrNzGmPIizUeBggKa8DbDwdqaKwUcTEnChtd2grWo/x/A==} + ssf@0.11.2: resolution: {integrity: sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==} engines: {node: '>=0.8'} @@ -4234,6 +5032,11 @@ packages: strip-literal@3.1.0: resolution: {integrity: sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg==} + styled-exceljs@0.21.1: + resolution: {integrity: sha512-9Z6PrWVaSDoy4UEnmX8rxCDYyCN1rn3q6bePsYfoO5vA7ROUE6NP4yC0pa4C3lwC063FQti0BwBV2J+ua7GYRA==} + engines: {node: '>=0.8'} + hasBin: true + stylelint-config-html@1.1.0: resolution: {integrity: sha512-IZv4IVESjKLumUGi+HWeb7skgO6/g4VMuAYrJdlqQFndgbj6WJAXPhaysvBiXefX79upBdQVumgYcdd17gCpjQ==} engines: {node: ^12 || >=14} @@ -4300,6 +5103,9 @@ packages: engines: {node: '>=20.19.0'} hasBin: true + stylis@4.4.0: + resolution: {integrity: sha512-5Z9ZpRzfuH6l/UAvCPAPUo3665Nk2wLaZU3x+TLHKVzIz33+sbJqbtrYoC3KD4/uVOr2Zp+L0LySezP9OHV9yA==} + superjson@2.2.6: resolution: {integrity: sha512-H+ue8Zo4vJmV2nRjpx86P35lzwDT3nItnIsocgumgr0hHMQ+ZGq5vrERg9kJBo5AWGmxZDhzDo+WVIJqkB0cGA==} engines: {node: '>=16'} @@ -4350,6 +5156,9 @@ packages: engines: {node: '>=10'} hasBin: true + three@0.184.0: + resolution: {integrity: sha512-wtTRjG92pM5eUg/KuUnHsqSAlPM296brTOcLgMRqEeylYTh/CdtvKUvCyyCQTzFuStieWxvZb8mVTMvdPyUpxg==} + through@2.3.8: resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} @@ -4359,6 +5168,9 @@ packages: tinybench@2.9.0: resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} + tinycolor2@1.6.0: + resolution: {integrity: sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==} + tinyexec@1.1.2: resolution: {integrity: sha512-dAqSqE/RabpBKI8+h26GfLq6Vb3JVXs30XYQjdMjaj/c2tS8IYYMbIzP599KtRj7c57/wYApb3QjgRgXmrCukA==} engines: {node: '>=18'} @@ -4367,6 +5179,9 @@ packages: resolution: {integrity: sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==} engines: {node: '>=12.0.0'} + tinyqueue@3.0.0: + resolution: {integrity: sha512-gRa9gwYU3ECmQYv3lslts5hxuIa90veaEcxDYuu3QGOIAEM2mOZkVHp48ANJuu1CURtRdHKUBY5Lm1tHV+sD4g==} + tinyrainbow@3.1.0: resolution: {integrity: sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==} engines: {node: '>=14.0.0'} @@ -4411,6 +5226,10 @@ packages: peerDependencies: typescript: '>=4.8.4' + ts-dedent@2.3.0: + resolution: {integrity: sha512-JfJeIHke7y2egdGGgRAvpCwYFUsHlM2gPcrVOxFkznt/4uzQ7HFmvE63iFHVLBJNDuyDOQgijDK/tXH/f6Msjg==} + engines: {node: '>=6.10'} + tslib@2.3.0: resolution: {integrity: sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==} @@ -4527,6 +5346,9 @@ packages: uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + utif@3.1.0: + resolution: {integrity: sha512-WEo4D/xOvFW53K5f5QTaTbbiORcm2/pCL9P6qmJnup+17eYfKaEhDeX9PeQkuyEoIxlbGklDuGl8xwuXYMrrXQ==} + util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} @@ -4739,6 +5561,14 @@ packages: typescript: optional: true + vue@3.5.39: + resolution: {integrity: sha512-xmZCYabFGcirU8r0fTuvl/LICc1OU620rnqepaJDL/a141ZigkG7AyaxQLdqJ02ZRYzWe6YPaDHeQx7MfknQfA==} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + vuedraggable@2.24.3: resolution: {integrity: sha512-6/HDXi92GzB+Hcs9fC6PAAozK1RLt1ewPTLjK0anTYguXLAeySDmcnqE8IC0xa7shvSzRjQXq3/+dsZ7ETGF3g==} @@ -4781,6 +5611,9 @@ packages: wildcard@1.1.2: resolution: {integrity: sha512-DXukZJxpHA8LuotRwL0pP1+rS6CS7FF2qStDDE1C7DDg2rLud2PXRMuEDYIPhgEezwnlHNL4c+N6MfMTjCGTng==} + wkt-parser@1.5.5: + resolution: {integrity: sha512-/zMYi94/7D7fxcOSlVmWn6vnOMj3Gq5d1xvVjaYOS9n6h0qOJ4I7YYVxBWYcH1vq9+suhqzXkn05Yx47zQNUIA==} + wmf@1.0.2: resolution: {integrity: sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==} engines: {node: '>=0.8'} @@ -5025,10 +5858,14 @@ snapshots: '@babel/helper-string-parser@7.27.1': {} + '@babel/helper-string-parser@7.29.7': {} + '@babel/helper-string-parser@8.0.0-rc.5': {} '@babel/helper-validator-identifier@7.28.5': {} + '@babel/helper-validator-identifier@7.29.7': {} + '@babel/helper-validator-identifier@8.0.0-rc.5': {} '@babel/helper-validator-option@7.27.1': {} @@ -5042,6 +5879,10 @@ snapshots: dependencies: '@babel/types': 7.29.0 + '@babel/parser@7.29.7': + dependencies: + '@babel/types': 7.29.7 + '@babel/parser@8.0.0-rc.5': dependencies: '@babel/types': 8.0.0-rc.5 @@ -5116,11 +5957,18 @@ snapshots: '@babel/helper-string-parser': 7.27.1 '@babel/helper-validator-identifier': 7.28.5 + '@babel/types@7.29.7': + dependencies: + '@babel/helper-string-parser': 7.29.7 + '@babel/helper-validator-identifier': 7.29.7 + '@babel/types@8.0.0-rc.5': dependencies: '@babel/helper-string-parser': 8.0.0-rc.5 '@babel/helper-validator-identifier': 8.0.0-rc.5 + '@braintree/sanitize-url@7.1.2': {} + '@bramus/specificity@2.4.2': dependencies: css-tree: 3.2.1 @@ -5137,6 +5985,8 @@ snapshots: hashery: 1.5.1 keyv: 5.6.0 + '@chevrotain/types@11.1.2': {} + '@commitlint/cli@21.0.1(@types/node@24.12.4)(conventional-commits-parser@6.4.0)(typescript@6.0.3)': dependencies: '@commitlint/format': 21.0.1 @@ -5507,6 +6357,190 @@ snapshots: lodash.isundefined: 3.0.1 lodash.uniq: 4.5.0 + '@file-viewer/core@2.1.17': {} + + '@file-viewer/doc@2.1.17': {} + + '@file-viewer/docx@0.3.16': + dependencies: + jszip: 3.10.1 + + '@file-viewer/eda-layout@2.1.17': {} + + '@file-viewer/eda-orcad@2.1.17': {} + + '@file-viewer/geometry-engine@2.1.17': {} + + '@file-viewer/pptx@2.1.17': + dependencies: + billboard.js: 3.18.0 + d3-format: 3.1.2 + dingbat-to-unicode: 1.0.1 + jszip: 3.10.1 + tinycolor2: 1.6.0 + utif: 3.1.0 + + '@file-viewer/preset-all@2.1.17(three@0.184.0)': + dependencies: + '@file-viewer/core': 2.1.17 + '@file-viewer/renderer-3d': 2.1.17 + '@file-viewer/renderer-archive': 2.1.17 + '@file-viewer/renderer-cad': 2.1.17(three@0.184.0) + '@file-viewer/renderer-data': 2.1.17 + '@file-viewer/renderer-drawing': 2.1.17 + '@file-viewer/renderer-eda': 2.1.17 + '@file-viewer/renderer-email': 2.1.17 + '@file-viewer/renderer-epub': 2.1.17 + '@file-viewer/renderer-geo': 2.1.17 + '@file-viewer/renderer-image': 2.1.17 + '@file-viewer/renderer-media': 2.1.17 + '@file-viewer/renderer-mindmap': 2.1.17 + '@file-viewer/renderer-ofd': 2.1.17 + '@file-viewer/renderer-pdf': 2.1.17 + '@file-viewer/renderer-presentation': 2.1.17 + '@file-viewer/renderer-spreadsheet': 2.1.17 + '@file-viewer/renderer-text': 2.1.17 + '@file-viewer/renderer-typst': 2.1.17 + '@file-viewer/renderer-word': 2.1.17 + transitivePeerDependencies: + - geotiff + - three + + '@file-viewer/renderer-3d@2.1.17': + dependencies: + '@file-viewer/core': 2.1.17 + '@file-viewer/geometry-engine': 2.1.17 + three: 0.184.0 + + '@file-viewer/renderer-archive@2.1.17': + dependencies: + '@file-viewer/core': 2.1.17 + jszip: 3.10.1 + libarchive.js: 2.0.2 + + '@file-viewer/renderer-cad@2.1.17(three@0.184.0)': + dependencies: + '@file-viewer/core': 2.1.17 + '@flyfish-dev/cad-viewer': 0.6.4(three@0.184.0) + transitivePeerDependencies: + - three + + '@file-viewer/renderer-data@2.1.17': + dependencies: + '@file-viewer/core': 2.1.17 + ag-psd: 30.2.0 + avsc: 5.7.9 + hyparquet: 1.26.2 + sql.js: 1.14.1 + + '@file-viewer/renderer-drawing@2.1.17': + dependencies: + '@file-viewer/core': 2.1.17 + '@panzoom/panzoom': 4.6.2 + mermaid: 11.16.0 + plantuml-encoder: 1.4.0 + roughjs: 4.6.6 + + '@file-viewer/renderer-eda@2.1.17': + dependencies: + '@file-viewer/core': 2.1.17 + '@file-viewer/eda-layout': 2.1.17 + '@file-viewer/eda-orcad': 2.1.17 + cfb: 1.2.2 + + '@file-viewer/renderer-email@2.1.17': + dependencies: + '@file-viewer/core': 2.1.17 + '@kenjiuno/msgreader': 1.28.0 + postal-mime: 2.7.5 + + '@file-viewer/renderer-epub@2.1.17': + dependencies: + '@file-viewer/core': 2.1.17 + epubjs: 0.3.93 + pako: 2.2.0 + + '@file-viewer/renderer-geo@2.1.17': + dependencies: + '@file-viewer/core': 2.1.17 + '@tmcw/togeojson': 7.1.2 + maplibre-gl: 5.24.0 + proj4: 2.20.9 + shpjs: 6.2.0 + transitivePeerDependencies: + - geotiff + + '@file-viewer/renderer-image@2.1.17': + dependencies: + '@file-viewer/core': 2.1.17 + heic2any: 0.0.4 + + '@file-viewer/renderer-media@2.1.17': + dependencies: + '@file-viewer/core': 2.1.17 + '@tonejs/midi': 2.0.28 + hls.js: 1.6.16 + + '@file-viewer/renderer-mindmap@2.1.17': + dependencies: + '@file-viewer/core': 2.1.17 + '@ljheee/xmind-parser': 1.1.3 + '@panzoom/panzoom': 4.6.2 + jszip: 3.10.1 + + '@file-viewer/renderer-ofd@2.1.17': + dependencies: + '@file-viewer/core': 2.1.17 + jszip: 3.10.1 + + '@file-viewer/renderer-pdf@2.1.17': + dependencies: + '@file-viewer/core': 2.1.17 + pdfjs-dist: 6.1.200 + + '@file-viewer/renderer-presentation@2.1.17': + dependencies: + '@file-viewer/core': 2.1.17 + '@file-viewer/pptx': 2.1.17 + + '@file-viewer/renderer-spreadsheet@2.1.17': + dependencies: + '@file-viewer/core': 2.1.17 + e-virt-table: 1.4.2 + styled-exceljs: 0.21.1 + tinycolor2: 1.6.0 + + '@file-viewer/renderer-text@2.1.17': + dependencies: + '@file-viewer/core': 2.1.17 + diff2html: 3.4.56 + highlight.js: 11.11.1 + marked: 18.0.5 + pako: 2.2.0 + + '@file-viewer/renderer-typst@2.1.17': + dependencies: + '@file-viewer/core': 2.1.17 + '@myriaddreamin/typst-ts-renderer': 0.7.0 + '@myriaddreamin/typst-ts-web-compiler': 0.7.0 + '@myriaddreamin/typst.ts': 0.7.0(@myriaddreamin/typst-ts-renderer@0.7.0)(@myriaddreamin/typst-ts-web-compiler@0.7.0) + + '@file-viewer/renderer-word@2.1.17': + dependencies: + '@file-viewer/core': 2.1.17 + '@file-viewer/doc': 2.1.17 + '@file-viewer/docx': 0.3.16 + jszip: 3.10.1 + rtf.js: 3.0.9 + + '@file-viewer/vue3@2.1.17(typescript@6.0.3)': + dependencies: + '@file-viewer/core': 2.1.17 + '@lucide/vue': 1.23.0(vue@3.5.39(typescript@6.0.3)) + vue: 3.5.39(typescript@6.0.3) + transitivePeerDependencies: + - typescript + '@floating-ui/core@1.7.5': dependencies: '@floating-ui/utils': 0.2.11 @@ -5518,6 +6552,14 @@ snapshots: '@floating-ui/utils@0.2.11': {} + '@flyfish-dev/cad-viewer@0.6.4(three@0.184.0)': + dependencies: + '@mlightcad/libredwg-web': 0.7.7 + dwf-viewer: 0.6.4(three@0.184.0) + dxf-parser: 1.1.2 + transitivePeerDependencies: + - three + '@humanfs/core@0.19.2': dependencies: '@humanfs/types': 0.15.0 @@ -5561,6 +6603,12 @@ snapshots: transitivePeerDependencies: - supports-color + '@iconify/utils@3.1.3': + dependencies: + '@antfu/install-pkg': 1.1.0 + '@iconify/types': 2.0.0 + import-meta-resolve: 4.2.0 + '@iconify/vue@5.0.1(vue@3.5.34(typescript@6.0.3))': dependencies: '@iconify/types': 2.0.0 @@ -5608,6 +6656,13 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.5 + '@kenjiuno/decompressrtf@0.1.4': {} + + '@kenjiuno/msgreader@1.28.0': + dependencies: + '@kenjiuno/decompressrtf': 0.1.4 + iconv-lite: 0.6.3 + '@keyv/bigmap@1.3.1(keyv@5.6.0)': dependencies: hashery: 1.5.1 @@ -5616,6 +6671,120 @@ snapshots: '@keyv/serialize@1.1.1': {} + '@ljheee/xmind-parser@1.1.3': + dependencies: + '@xmldom/xmldom': 0.9.10 + + '@lucide/vue@1.23.0(vue@3.5.39(typescript@6.0.3))': + dependencies: + vue: 3.5.39(typescript@6.0.3) + + '@mapbox/jsonlint-lines-primitives@2.0.3': {} + + '@mapbox/point-geometry@1.1.0': {} + + '@mapbox/tiny-sdf@2.2.0': {} + + '@mapbox/unitbezier@0.0.1': {} + + '@mapbox/unitbezier@1.0.0': {} + + '@mapbox/vector-tile@2.0.5': + dependencies: + '@mapbox/point-geometry': 1.1.0 + '@types/geojson': 7946.0.16 + pbf: 4.0.2 + + '@mapbox/whoots-js@3.1.0': {} + + '@maplibre/geojson-vt@6.1.1': + dependencies: + kdbush: 4.1.0 + + '@maplibre/maplibre-gl-style-spec@24.10.0': + dependencies: + '@mapbox/jsonlint-lines-primitives': 2.0.3 + '@mapbox/unitbezier': 1.0.0 + json-stringify-pretty-compact: 4.0.0 + minimist: 1.2.8 + quickselect: 3.0.0 + tinyqueue: 3.0.0 + + '@maplibre/mlt@1.1.12': + dependencies: + '@mapbox/point-geometry': 1.1.0 + + '@maplibre/vt-pbf@4.3.2': + dependencies: + '@mapbox/point-geometry': 1.1.0 + '@types/geojson': 7946.0.16 + pbf: 5.1.0 + + '@mermaid-js/parser@1.2.0': + dependencies: + '@chevrotain/types': 11.1.2 + + '@mlightcad/libredwg-web@0.7.7': {} + + '@myriaddreamin/typst-ts-renderer@0.7.0': {} + + '@myriaddreamin/typst-ts-web-compiler@0.7.0': {} + + '@myriaddreamin/typst.ts@0.7.0(@myriaddreamin/typst-ts-renderer@0.7.0)(@myriaddreamin/typst-ts-web-compiler@0.7.0)': + dependencies: + idb: 7.1.1 + optionalDependencies: + '@myriaddreamin/typst-ts-renderer': 0.7.0 + '@myriaddreamin/typst-ts-web-compiler': 0.7.0 + + '@napi-rs/canvas-android-arm64@1.0.2': + optional: true + + '@napi-rs/canvas-darwin-arm64@1.0.2': + optional: true + + '@napi-rs/canvas-darwin-x64@1.0.2': + optional: true + + '@napi-rs/canvas-linux-arm-gnueabihf@1.0.2': + optional: true + + '@napi-rs/canvas-linux-arm64-gnu@1.0.2': + optional: true + + '@napi-rs/canvas-linux-arm64-musl@1.0.2': + optional: true + + '@napi-rs/canvas-linux-riscv64-gnu@1.0.2': + optional: true + + '@napi-rs/canvas-linux-x64-gnu@1.0.2': + optional: true + + '@napi-rs/canvas-linux-x64-musl@1.0.2': + optional: true + + '@napi-rs/canvas-win32-arm64-msvc@1.0.2': + optional: true + + '@napi-rs/canvas-win32-x64-msvc@1.0.2': + optional: true + + '@napi-rs/canvas@1.0.2': + optionalDependencies: + '@napi-rs/canvas-android-arm64': 1.0.2 + '@napi-rs/canvas-darwin-arm64': 1.0.2 + '@napi-rs/canvas-darwin-x64': 1.0.2 + '@napi-rs/canvas-linux-arm-gnueabihf': 1.0.2 + '@napi-rs/canvas-linux-arm64-gnu': 1.0.2 + '@napi-rs/canvas-linux-arm64-musl': 1.0.2 + '@napi-rs/canvas-linux-riscv64-gnu': 1.0.2 + '@napi-rs/canvas-linux-x64-gnu': 1.0.2 + '@napi-rs/canvas-linux-x64-musl': 1.0.2 + '@napi-rs/canvas-win32-arm64-msvc': 1.0.2 + '@napi-rs/canvas-win32-x64-msvc': 1.0.2 + optional: true + '@nodelib/fs.scandir@2.1.5': dependencies: '@nodelib/fs.stat': 2.0.5 @@ -5630,6 +6799,8 @@ snapshots: '@one-ini/wasm@0.1.1': {} + '@panzoom/panzoom@4.6.2': {} + '@parcel/watcher-android-arm64@2.5.6': optional: true @@ -5695,6 +6866,10 @@ snapshots: '@polka/url@1.0.0-next.29': {} + '@profoundlogic/hogan@3.0.4': + dependencies: + nopt: 1.0.10 + '@rolldown/pluginutils@1.0.1': {} '@rollup/rollup-android-arm-eabi@4.60.4': @@ -5852,16 +7027,140 @@ snapshots: tailwindcss: 4.3.0 vite: 7.3.3(@types/node@24.12.4)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.99.0)(terser@5.47.1)(tsx@4.22.0)(yaml@2.9.0) + '@tmcw/togeojson@7.1.2': {} + + '@tonejs/midi@2.0.28': + dependencies: + array-flatten: 3.0.0 + midi-file: 1.2.4 + '@transloadit/prettier-bytes@0.0.7': {} - '@types/chai@5.2.3': + '@types/chai@5.2.3': + dependencies: + '@types/deep-eql': 4.0.2 + assertion-error: 2.0.1 + + '@types/codemirror@5.60.17': + dependencies: + '@types/tern': 0.23.9 + + '@types/d3-array@3.2.2': {} + + '@types/d3-axis@3.0.6': + dependencies: + '@types/d3-selection': 3.0.11 + + '@types/d3-brush@3.0.6': + dependencies: + '@types/d3-selection': 3.0.11 + + '@types/d3-chord@3.0.6': {} + + '@types/d3-color@3.1.3': {} + + '@types/d3-contour@3.0.6': + dependencies: + '@types/d3-array': 3.2.2 + '@types/geojson': 7946.0.16 + + '@types/d3-delaunay@6.0.4': {} + + '@types/d3-dispatch@3.0.7': {} + + '@types/d3-drag@3.0.7': + dependencies: + '@types/d3-selection': 3.0.11 + + '@types/d3-dsv@3.0.7': {} + + '@types/d3-ease@3.0.2': {} + + '@types/d3-fetch@3.0.7': + dependencies: + '@types/d3-dsv': 3.0.7 + + '@types/d3-force@3.0.10': {} + + '@types/d3-format@3.0.4': {} + + '@types/d3-geo@3.1.0': + dependencies: + '@types/geojson': 7946.0.16 + + '@types/d3-hierarchy@3.1.7': {} + + '@types/d3-interpolate@3.0.4': + dependencies: + '@types/d3-color': 3.1.3 + + '@types/d3-path@3.1.1': {} + + '@types/d3-polygon@3.0.2': {} + + '@types/d3-quadtree@3.0.6': {} + + '@types/d3-random@3.0.4': {} + + '@types/d3-scale-chromatic@3.1.0': {} + + '@types/d3-scale@4.0.9': + dependencies: + '@types/d3-time': 3.0.4 + + '@types/d3-selection@3.0.11': {} + + '@types/d3-shape@3.1.8': + dependencies: + '@types/d3-path': 3.1.1 + + '@types/d3-time-format@4.0.3': {} + + '@types/d3-time@3.0.4': {} + + '@types/d3-timer@3.0.2': {} + + '@types/d3-transition@3.0.9': + dependencies: + '@types/d3-selection': 3.0.11 + + '@types/d3-zoom@3.0.8': dependencies: - '@types/deep-eql': 4.0.2 - assertion-error: 2.0.1 + '@types/d3-interpolate': 3.0.4 + '@types/d3-selection': 3.0.11 - '@types/codemirror@5.60.17': + '@types/d3@7.4.3': dependencies: - '@types/tern': 0.23.9 + '@types/d3-array': 3.2.2 + '@types/d3-axis': 3.0.6 + '@types/d3-brush': 3.0.6 + '@types/d3-chord': 3.0.6 + '@types/d3-color': 3.1.3 + '@types/d3-contour': 3.0.6 + '@types/d3-delaunay': 6.0.4 + '@types/d3-dispatch': 3.0.7 + '@types/d3-drag': 3.0.7 + '@types/d3-dsv': 3.0.7 + '@types/d3-ease': 3.0.2 + '@types/d3-fetch': 3.0.7 + '@types/d3-force': 3.0.10 + '@types/d3-format': 3.0.4 + '@types/d3-geo': 3.1.0 + '@types/d3-hierarchy': 3.1.7 + '@types/d3-interpolate': 3.0.4 + '@types/d3-path': 3.1.1 + '@types/d3-polygon': 3.0.2 + '@types/d3-quadtree': 3.0.6 + '@types/d3-random': 3.0.4 + '@types/d3-scale': 4.0.9 + '@types/d3-scale-chromatic': 3.1.0 + '@types/d3-selection': 3.0.11 + '@types/d3-shape': 3.1.8 + '@types/d3-time': 3.0.4 + '@types/d3-time-format': 4.0.3 + '@types/d3-timer': 3.0.2 + '@types/d3-transition': 3.0.9 + '@types/d3-zoom': 3.0.8 '@types/dagre@0.7.54': {} @@ -5877,12 +7176,18 @@ snapshots: '@types/file-saver@2.0.7': {} + '@types/geojson@7946.0.16': {} + '@types/jsesc@2.5.1': {} '@types/json-schema@7.0.15': {} '@types/linkify-it@5.0.0': {} + '@types/localforage@0.0.34': + dependencies: + localforage: 1.10.0 + '@types/lodash-es@4.17.12': dependencies: '@types/lodash': 4.17.24 @@ -6041,6 +7346,11 @@ snapshots: '@uppy/utils': 4.1.3 nanoid: 3.3.12 + '@upsetjs/venn.js@2.0.0': + optionalDependencies: + d3-selection: 3.0.0 + d3-transition: 3.0.1(d3-selection@3.0.0) + '@vitejs/plugin-vue@6.0.7(vite@7.3.3(@types/node@24.12.4)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.99.0)(terser@5.47.1)(tsx@4.22.0)(yaml@2.9.0))(vue@3.5.34(typescript@6.0.3))': dependencies: '@rolldown/pluginutils': 1.0.1 @@ -6175,11 +7485,24 @@ snapshots: estree-walker: 2.0.2 source-map-js: 1.2.1 + '@vue/compiler-core@3.5.39': + dependencies: + '@babel/parser': 7.29.7 + '@vue/shared': 3.5.39 + entities: 7.0.1 + estree-walker: 2.0.2 + source-map-js: 1.2.1 + '@vue/compiler-dom@3.5.34': dependencies: '@vue/compiler-core': 3.5.34 '@vue/shared': 3.5.34 + '@vue/compiler-dom@3.5.39': + dependencies: + '@vue/compiler-core': 3.5.39 + '@vue/shared': 3.5.39 + '@vue/compiler-sfc@3.5.34': dependencies: '@babel/parser': 7.29.3 @@ -6192,11 +7515,28 @@ snapshots: postcss: 8.5.14 source-map-js: 1.2.1 + '@vue/compiler-sfc@3.5.39': + dependencies: + '@babel/parser': 7.29.7 + '@vue/compiler-core': 3.5.39 + '@vue/compiler-dom': 3.5.39 + '@vue/compiler-ssr': 3.5.39 + '@vue/shared': 3.5.39 + estree-walker: 2.0.2 + magic-string: 0.30.21 + postcss: 8.5.16 + source-map-js: 1.2.1 + '@vue/compiler-ssr@3.5.34': dependencies: '@vue/compiler-dom': 3.5.34 '@vue/shared': 3.5.34 + '@vue/compiler-ssr@3.5.39': + dependencies: + '@vue/compiler-dom': 3.5.39 + '@vue/shared': 3.5.39 + '@vue/devtools-api@6.6.4': {} '@vue/devtools-api@7.7.9': @@ -6250,11 +7590,20 @@ snapshots: dependencies: '@vue/shared': 3.5.34 + '@vue/reactivity@3.5.39': + dependencies: + '@vue/shared': 3.5.39 + '@vue/runtime-core@3.5.34': dependencies: '@vue/reactivity': 3.5.34 '@vue/shared': 3.5.34 + '@vue/runtime-core@3.5.39': + dependencies: + '@vue/reactivity': 3.5.39 + '@vue/shared': 3.5.39 + '@vue/runtime-dom@3.5.34': dependencies: '@vue/reactivity': 3.5.34 @@ -6262,22 +7611,44 @@ snapshots: '@vue/shared': 3.5.34 csstype: 3.2.3 + '@vue/runtime-dom@3.5.39': + dependencies: + '@vue/reactivity': 3.5.39 + '@vue/runtime-core': 3.5.39 + '@vue/shared': 3.5.39 + csstype: 3.2.3 + '@vue/server-renderer@3.5.34(vue@3.5.34(typescript@6.0.3))': dependencies: '@vue/compiler-ssr': 3.5.34 '@vue/shared': 3.5.34 vue: 3.5.34(typescript@6.0.3) + '@vue/server-renderer@3.5.39(vue@3.5.34(typescript@6.0.3))': + dependencies: + '@vue/compiler-ssr': 3.5.39 + '@vue/shared': 3.5.39 + vue: 3.5.34(typescript@6.0.3) + optional: true + + '@vue/server-renderer@3.5.39(vue@3.5.39(typescript@6.0.3))': + dependencies: + '@vue/compiler-ssr': 3.5.39 + '@vue/shared': 3.5.39 + vue: 3.5.39(typescript@6.0.3) + '@vue/shared@3.5.34': {} - '@vue/test-utils@2.4.10(@vue/compiler-dom@3.5.34)(@vue/server-renderer@3.5.34(vue@3.5.34(typescript@6.0.3)))(vue@3.5.34(typescript@6.0.3))': + '@vue/shared@3.5.39': {} + + '@vue/test-utils@2.4.10(@vue/compiler-dom@3.5.39)(@vue/server-renderer@3.5.39(vue@3.5.34(typescript@6.0.3)))(vue@3.5.34(typescript@6.0.3))': dependencies: - '@vue/compiler-dom': 3.5.34 + '@vue/compiler-dom': 3.5.39 js-beautify: 1.15.4 vue: 3.5.34(typescript@6.0.3) vue-component-type-helpers: 3.2.9 optionalDependencies: - '@vue/server-renderer': 3.5.34(vue@3.5.34(typescript@6.0.3)) + '@vue/server-renderer': 3.5.39(vue@3.5.34(typescript@6.0.3)) '@vueuse/core@10.11.1(vue@3.5.34(typescript@6.0.3))': dependencies: @@ -6434,6 +7805,12 @@ snapshots: slate: 0.123.0 snabbdom: 3.6.3 + '@xmldom/xmldom@0.7.13': {} + + '@xmldom/xmldom@0.9.10': {} + + abbrev@1.1.1: {} + abbrev@2.0.0: {} acorn-jsx@5.3.2(acorn@8.16.0): @@ -6444,6 +7821,11 @@ snapshots: adler-32@1.3.1: {} + ag-psd@30.2.0: + dependencies: + base64-js: 1.5.1 + pako: 2.1.0 + agent-base@6.0.2: dependencies: debug: 4.4.3 @@ -6535,6 +7917,8 @@ snapshots: argparse@2.0.1: {} + array-flatten@3.0.0: {} + array-ify@1.0.0: {} assertion-error@2.0.1: {} @@ -6568,6 +7952,8 @@ snapshots: postcss: 8.5.14 postcss-value-parser: 4.2.0 + avsc@5.7.9: {} + axios@1.16.1: dependencies: follow-redirects: 1.16.0 @@ -6592,6 +7978,24 @@ snapshots: big-integer@1.6.52: {} + billboard.js@3.18.0: + dependencies: + '@types/d3-selection': 3.0.11 + '@types/d3-transition': 3.0.9 + d3-axis: 3.0.0 + d3-brush: 3.0.0 + d3-drag: 3.0.0 + d3-dsv: 3.0.1 + d3-ease: 3.0.1 + d3-hierarchy: 3.1.2 + d3-interpolate: 3.0.1 + d3-scale: 4.0.2 + d3-selection: 3.0.0 + d3-shape: 3.2.0 + d3-time-format: 4.1.0 + d3-transition: 3.0.1(d3-selection@3.0.0) + d3-zoom: 3.0.0 + binary-extensions@2.3.0: {} binary@0.3.0: @@ -6648,6 +8052,8 @@ snapshots: dependencies: run-applescript: 7.1.0 + but-unzip@0.1.10: {} + cacheable@2.3.5: dependencies: '@cacheable/memory': 2.0.8 @@ -6785,12 +8191,18 @@ snapshots: dependencies: delayed-stream: 1.0.0 + comlink@4.4.2: {} + commander@10.0.1: {} commander@13.1.0: {} commander@2.20.3: {} + commander@7.2.0: {} + + commander@8.3.0: {} + commitizen@4.3.1(@types/node@24.12.4)(typescript@6.0.3): dependencies: cachedir: 2.3.0 @@ -6859,6 +8271,14 @@ snapshots: core-util-is@1.0.3: {} + cose-base@1.0.3: + dependencies: + layout-base: 1.0.2 + + cose-base@2.2.0: + dependencies: + layout-base: 2.0.1 + cosmiconfig-typescript-loader@6.3.0(@types/node@24.12.4)(cosmiconfig@9.0.1(typescript@6.0.3))(typescript@6.0.3): dependencies: '@types/node': 24.12.4 @@ -6901,6 +8321,18 @@ snapshots: csstype@3.2.3: {} + cytoscape-cose-bilkent@4.1.0(cytoscape@3.34.0): + dependencies: + cose-base: 1.0.3 + cytoscape: 3.34.0 + + cytoscape-fcose@2.2.0(cytoscape@3.34.0): + dependencies: + cose-base: 2.2.0 + cytoscape: 3.34.0 + + cytoscape@3.34.0: {} + cz-conventional-changelog@3.3.0(@types/node@24.12.4)(typescript@6.0.3): dependencies: chalk: 2.4.2 @@ -6917,8 +8349,38 @@ snapshots: cz-git@1.13.1: {} + d3-array@2.12.1: + dependencies: + internmap: 1.0.1 + + d3-array@3.2.4: + dependencies: + internmap: 2.0.3 + + d3-axis@3.0.0: {} + + d3-brush@3.0.0: + dependencies: + d3-dispatch: 3.0.1 + d3-drag: 3.0.0 + d3-interpolate: 3.0.1 + d3-selection: 3.0.0 + d3-transition: 3.0.1(d3-selection@3.0.0) + + d3-chord@3.0.1: + dependencies: + d3-path: 3.1.0 + d3-color@3.1.0: {} + d3-contour@4.0.2: + dependencies: + d3-array: 3.2.4 + + d3-delaunay@6.0.4: + dependencies: + delaunator: 5.1.0 + d3-dispatch@3.0.1: {} d3-drag@3.0.0: @@ -6926,14 +8388,82 @@ snapshots: d3-dispatch: 3.0.1 d3-selection: 3.0.0 + d3-dsv@3.0.1: + dependencies: + commander: 7.2.0 + iconv-lite: 0.6.3 + rw: 1.3.3 + d3-ease@3.0.1: {} + d3-fetch@3.0.1: + dependencies: + d3-dsv: 3.0.1 + + d3-force@3.0.0: + dependencies: + d3-dispatch: 3.0.1 + d3-quadtree: 3.0.1 + d3-timer: 3.0.1 + + d3-format@3.1.2: {} + + d3-geo@3.1.1: + dependencies: + d3-array: 3.2.4 + + d3-hierarchy@3.1.2: {} + d3-interpolate@3.0.1: dependencies: d3-color: 3.1.0 + d3-path@1.0.9: {} + + d3-path@3.1.0: {} + + d3-polygon@3.0.1: {} + + d3-quadtree@3.0.1: {} + + d3-random@3.0.1: {} + + d3-sankey@0.12.3: + dependencies: + d3-array: 2.12.1 + d3-shape: 1.3.7 + + d3-scale-chromatic@3.1.0: + dependencies: + d3-color: 3.1.0 + d3-interpolate: 3.0.1 + + d3-scale@4.0.2: + dependencies: + d3-array: 3.2.4 + d3-format: 3.1.2 + d3-interpolate: 3.0.1 + d3-time: 3.1.0 + d3-time-format: 4.1.0 + d3-selection@3.0.0: {} + d3-shape@1.3.7: + dependencies: + d3-path: 1.0.9 + + d3-shape@3.2.0: + dependencies: + d3-path: 3.1.0 + + d3-time-format@4.1.0: + dependencies: + d3-time: 3.1.0 + + d3-time@3.1.0: + dependencies: + d3-array: 3.2.4 + d3-timer@3.0.1: {} d3-transition@3.0.1(d3-selection@3.0.0): @@ -6953,11 +8483,49 @@ snapshots: d3-selection: 3.0.0 d3-transition: 3.0.1(d3-selection@3.0.0) + d3@7.9.0: + dependencies: + d3-array: 3.2.4 + d3-axis: 3.0.0 + d3-brush: 3.0.0 + d3-chord: 3.0.1 + d3-color: 3.1.0 + d3-contour: 4.0.2 + d3-delaunay: 6.0.4 + d3-dispatch: 3.0.1 + d3-drag: 3.0.0 + d3-dsv: 3.0.1 + d3-ease: 3.0.1 + d3-fetch: 3.0.1 + d3-force: 3.0.0 + d3-format: 3.1.2 + d3-geo: 3.1.1 + d3-hierarchy: 3.1.2 + d3-interpolate: 3.0.1 + d3-path: 3.1.0 + d3-polygon: 3.0.1 + d3-quadtree: 3.0.1 + d3-random: 3.0.1 + d3-scale: 4.0.2 + d3-scale-chromatic: 3.1.0 + d3-selection: 3.0.0 + d3-shape: 3.2.0 + d3-time: 3.1.0 + d3-time-format: 4.1.0 + d3-timer: 3.0.1 + d3-transition: 3.0.1(d3-selection@3.0.0) + d3-zoom: 3.0.0 + d@1.0.2: dependencies: es5-ext: 0.10.64 type: 2.7.3 + dagre-d3-es@7.0.14: + dependencies: + d3: 7.9.0 + lodash-es: 4.18.1 + dagre@0.8.5: dependencies: graphlib: 2.1.8 @@ -7003,6 +8571,10 @@ snapshots: defu@6.1.7: {} + delaunator@5.1.0: + dependencies: + robust-predicates: 3.0.3 + delayed-stream@1.0.0: {} delegate@3.2.0: {} @@ -7015,6 +8587,21 @@ snapshots: diff-match-patch@1.0.5: {} + diff2html@3.4.56: + dependencies: + '@profoundlogic/hogan': 3.0.4 + diff: 8.0.4 + optionalDependencies: + highlight.js: 11.11.1 + + diff@8.0.4: {} + + dingbat-to-unicode@1.0.1: {} + + docx-preview@0.3.7: + dependencies: + jszip: 3.10.1 + dom-serializer@2.0.0: dependencies: domelementtype: 2.3.0 @@ -7055,6 +8642,20 @@ snapshots: dependencies: readable-stream: 2.3.8 + dwf-viewer@0.6.4(three@0.184.0): + optionalDependencies: + three: 0.184.0 + + dxf-parser@1.1.2: + dependencies: + loglevel: 1.9.2 + + e-virt-table@1.4.2: + dependencies: + '@floating-ui/dom': 1.7.6 + + earcut@3.2.3: {} + echarts@6.0.0: dependencies: tslib: 2.3.0 @@ -7113,6 +8714,18 @@ snapshots: environment@1.1.0: {} + epubjs@0.3.93: + dependencies: + '@types/localforage': 0.0.34 + '@xmldom/xmldom': 0.7.13 + core-js: 3.49.0 + event-emitter: 0.3.5 + jszip: 3.10.1 + localforage: 1.10.0 + lodash: 4.18.1 + marks-pane: 1.0.9 + path-webpack: 0.0.3 + error-ex@1.3.4: dependencies: is-arrayish: 0.2.1 @@ -7544,6 +9157,8 @@ snapshots: - conventional-commits-filter - conventional-commits-parser + gl-matrix@3.4.4: {} + glob-parent@5.1.2: dependencies: is-glob: 4.0.3 @@ -7611,6 +9226,8 @@ snapshots: dependencies: lodash: 4.18.1 + hachure-fill@0.5.2: {} + has-flag@3.0.0: {} has-flag@4.0.0: {} @@ -7631,8 +9248,12 @@ snapshots: dependencies: function-bind: 1.1.2 + heic2any@0.0.4: {} + highlight.js@11.11.1: {} + hls.js@1.6.16: {} + homedir-polyfill@1.0.3: dependencies: parse-passwd: 1.0.0 @@ -7671,6 +9292,8 @@ snapshots: husky@9.1.7: {} + hyparquet@1.26.2: {} + i18next@23.16.8: dependencies: '@babel/runtime': 7.29.2 @@ -7679,6 +9302,12 @@ snapshots: dependencies: safer-buffer: 2.1.2 + iconv-lite@0.6.3: + dependencies: + safer-buffer: 2.1.2 + + idb@7.1.1: {} + ieee754@1.2.1: {} ignore@5.3.2: {} @@ -7722,6 +9351,10 @@ snapshots: through: 2.3.8 wrap-ansi: 7.0.0 + internmap@1.0.1: {} + + internmap@2.0.3: {} + is-arrayish@0.2.1: {} is-binary-path@2.1.0: @@ -7850,6 +9483,8 @@ snapshots: json-stable-stringify-without-jsonify@1.0.1: {} + json-stringify-pretty-compact@4.0.0: {} + json5@2.2.3: {} jsonfile@6.2.1: @@ -7865,6 +9500,12 @@ snapshots: readable-stream: 2.3.8 setimmediate: 1.0.5 + katex@0.16.47: + dependencies: + commander: 8.3.0 + + kdbush@4.1.0: {} + keyv@4.5.4: dependencies: json-buffer: 3.0.1 @@ -7873,12 +9514,18 @@ snapshots: dependencies: '@keyv/serialize': 1.1.1 + khroma@2.1.0: {} + kind-of@6.0.3: {} known-css-properties@0.37.0: {} kolorist@1.8.0: {} + layout-base@1.0.2: {} + + layout-base@2.0.1: {} + lazystream@1.0.1: dependencies: readable-stream: 2.3.8 @@ -7888,6 +9535,14 @@ snapshots: prelude-ls: 1.2.1 type-check: 0.4.0 + libarchive.js@2.0.2: + dependencies: + comlink: 4.4.2 + + lie@3.1.1: + dependencies: + immediate: 3.0.6 + lie@3.3.0: dependencies: immediate: 3.0.6 @@ -7981,6 +9636,10 @@ snapshots: pkg-types: 2.3.1 quansync: 0.2.11 + localforage@1.10.0: + dependencies: + lie: 3.1.1 + locate-path@6.0.0: dependencies: p-locate: 5.0.0 @@ -8052,6 +9711,8 @@ snapshots: strip-ansi: 7.2.0 wrap-ansi: 9.0.2 + loglevel@1.9.2: {} + longest@2.0.1: {} lru-cache@11.3.6: {} @@ -8068,6 +9729,28 @@ snapshots: dependencies: '@jridgewell/sourcemap-codec': 1.5.5 + maplibre-gl@5.24.0: + dependencies: + '@mapbox/jsonlint-lines-primitives': 2.0.3 + '@mapbox/point-geometry': 1.1.0 + '@mapbox/tiny-sdf': 2.2.0 + '@mapbox/unitbezier': 0.0.1 + '@mapbox/vector-tile': 2.0.5 + '@mapbox/whoots-js': 3.1.0 + '@maplibre/geojson-vt': 6.1.1 + '@maplibre/maplibre-gl-style-spec': 24.10.0 + '@maplibre/mlt': 1.1.12 + '@maplibre/vt-pbf': 4.3.2 + '@types/geojson': 7946.0.16 + earcut: 3.2.3 + gl-matrix: 3.4.4 + kdbush: 4.1.0 + murmurhash-js: 1.0.0 + pbf: 4.0.2 + potpack: 2.1.0 + quickselect: 3.0.0 + tinyqueue: 3.0.0 + markdown-it-highlightjs@4.3.0: dependencies: highlight.js: 11.11.1 @@ -8081,6 +9764,12 @@ snapshots: punycode.js: 2.3.1 uc.micro: 2.1.0 + marked@16.4.2: {} + + marked@18.0.5: {} + + marks-pane@1.0.9: {} + math-intrinsics@1.1.0: {} mathml-tag-names@4.0.0: {} @@ -8101,11 +9790,39 @@ snapshots: merge@2.1.1: {} + mermaid@11.16.0: + dependencies: + '@braintree/sanitize-url': 7.1.2 + '@iconify/utils': 3.1.3 + '@mermaid-js/parser': 1.2.0 + '@types/d3': 7.4.3 + '@upsetjs/venn.js': 2.0.0 + cytoscape: 3.34.0 + cytoscape-cose-bilkent: 4.1.0(cytoscape@3.34.0) + cytoscape-fcose: 2.2.0(cytoscape@3.34.0) + d3: 7.9.0 + d3-sankey: 0.12.3 + dagre-d3-es: 7.0.14 + dayjs: 1.11.20 + dompurify: 3.4.3 + es-toolkit: 1.46.1 + katex: 0.16.47 + khroma: 2.1.0 + marked: 16.4.2 + roughjs: 4.6.6 + stylis: 4.4.0 + ts-dedent: 2.3.0 + uuid: 14.0.0 + + mgrs@1.0.0: {} + micromatch@4.0.8: dependencies: braces: 3.0.3 picomatch: 2.3.2 + midi-file@1.2.4: {} + mime-db@1.52.0: {} mime-match@1.0.2: @@ -8159,6 +9876,8 @@ snapshots: muggle-string@0.4.1: {} + murmurhash-js@1.0.0: {} + mute-stream@0.0.8: {} namespace-emitter@2.0.1: {} @@ -8176,6 +9895,10 @@ snapshots: node-releases@2.0.44: {} + nopt@1.0.10: + dependencies: + abbrev: 1.1.1 + nopt@7.2.1: dependencies: abbrev: 2.0.0 @@ -8266,6 +9989,10 @@ snapshots: pako@1.0.11: {} + pako@2.1.0: {} + + pako@2.2.0: {} + parent-module@1.0.1: dependencies: callsites: 3.1.0 @@ -8283,8 +10010,12 @@ snapshots: dependencies: entities: 8.0.0 + parsedbf@2.0.0: {} + path-browserify@1.0.1: {} + path-data-parser@0.1.0: {} + path-exists@4.0.0: {} path-key@3.1.1: {} @@ -8298,8 +10029,22 @@ snapshots: path-to-regexp@8.4.2: {} + path-webpack@0.0.3: {} + pathe@2.0.3: {} + pbf@4.0.2: + dependencies: + resolve-protobuf-schema: 2.1.0 + + pbf@5.1.0: + dependencies: + resolve-protobuf-schema: 2.1.0 + + pdfjs-dist@6.1.200: + optionalDependencies: + '@napi-rs/canvas': 1.0.2 + perfect-debounce@1.0.0: {} perfect-debounce@2.1.0: {} @@ -8337,6 +10082,17 @@ snapshots: exsolve: 1.0.8 pathe: 2.0.3 + plantuml-encoder@1.4.0: {} + + points-on-curve@0.2.0: {} + + points-on-path@0.2.1: + dependencies: + path-data-parser: 0.1.0 + points-on-curve: 0.2.0 + + postal-mime@2.7.5: {} + postcss-html@1.8.1: dependencies: htmlparser2: 8.0.2 @@ -8377,6 +10133,14 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 + postcss@8.5.16: + dependencies: + nanoid: 3.3.12 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + potpack@2.1.0: {} + preact@10.29.1: {} prelude-ls@1.2.1: {} @@ -8391,8 +10155,15 @@ snapshots: process-nextick-args@2.0.1: {} + proj4@2.20.9: + dependencies: + mgrs: 1.0.0 + wkt-parser: 1.5.5 + proto-list@1.2.4: {} + protocol-buffers-schema@3.6.1: {} + proxy-from-env@2.1.0: {} punycode.js@2.3.1: {} @@ -8415,6 +10186,8 @@ snapshots: queue-microtask@1.2.3: {} + quickselect@3.0.0: {} + readable-stream@2.3.8: dependencies: core-util-is: 1.0.3 @@ -8456,6 +10229,10 @@ snapshots: resolve-from@5.0.0: {} + resolve-protobuf-schema@2.1.0: + dependencies: + protocol-buffers-schema: 3.6.1 + restore-cursor@3.1.0: dependencies: onetime: 5.1.2 @@ -8475,6 +10252,8 @@ snapshots: glob: 13.0.6 package-json-from-dist: 1.0.1 + robust-predicates@3.0.3: {} + rollup-plugin-visualizer@5.14.0(rollup@4.60.4): dependencies: open: 8.4.2 @@ -8515,6 +10294,17 @@ snapshots: '@rollup/rollup-win32-x64-msvc': 4.60.4 fsevents: 2.3.3 + roughjs@4.6.6: + dependencies: + hachure-fill: 0.5.2 + path-data-parser: 0.1.0 + points-on-curve: 0.2.0 + points-on-path: 0.2.1 + + rtf.js@3.0.9: + dependencies: + codepage: 1.15.0 + run-applescript@7.1.0: {} run-async@2.4.1: {} @@ -8523,6 +10313,8 @@ snapshots: dependencies: queue-microtask: 1.2.3 + rw@1.3.3: {} + rxjs@7.8.2: dependencies: tslib: 2.8.1 @@ -8569,6 +10361,14 @@ snapshots: shebang-regex@3.0.0: {} + shpjs@6.2.0: + dependencies: + but-unzip: 0.1.10 + parsedbf: 2.0.0 + proj4: 2.20.9 + transitivePeerDependencies: + - geotiff + side-channel-list@1.0.1: dependencies: es-errors: 1.3.0 @@ -8650,6 +10450,8 @@ snapshots: speakingurl@14.0.1: {} + sql.js@1.14.1: {} + ssf@0.11.2: dependencies: frac: 1.1.2 @@ -8705,6 +10507,8 @@ snapshots: dependencies: js-tokens: 9.0.1 + styled-exceljs@0.21.1: {} + stylelint-config-html@1.1.0(postcss-html@1.8.1)(stylelint@17.11.1(typescript@6.0.3)): dependencies: postcss-html: 1.8.1 @@ -8809,6 +10613,8 @@ snapshots: - supports-color - typescript + stylis@4.4.0: {} + superjson@2.2.6: dependencies: copy-anything: 4.0.5 @@ -8863,12 +10669,16 @@ snapshots: commander: 2.20.3 source-map-support: 0.5.21 + three@0.184.0: {} + through@2.3.8: {} tiny-emitter@2.1.0: {} tinybench@2.9.0: {} + tinycolor2@1.6.0: {} + tinyexec@1.1.2: {} tinyglobby@0.2.16: @@ -8876,6 +10686,8 @@ snapshots: fdir: 6.5.0(picomatch@4.0.4) picomatch: 4.0.4 + tinyqueue@3.0.0: {} + tinyrainbow@3.1.0: {} tldts-core@7.4.0: {} @@ -8910,6 +10722,8 @@ snapshots: dependencies: typescript: 6.0.3 + ts-dedent@2.3.0: {} + tslib@2.3.0: {} tslib@2.8.1: {} @@ -8998,7 +10812,7 @@ snapshots: pathe: 2.0.3 picomatch: 4.0.4 - unplugin-vue-components@29.2.0(@babel/parser@7.29.3)(vue@3.5.34(typescript@6.0.3)): + unplugin-vue-components@29.2.0(@babel/parser@7.29.7)(vue@3.5.34(typescript@6.0.3)): dependencies: chokidar: 3.6.0 debug: 4.4.3 @@ -9010,7 +10824,7 @@ snapshots: unplugin-utils: 0.3.1 vue: 3.5.34(typescript@6.0.3) optionalDependencies: - '@babel/parser': 7.29.3 + '@babel/parser': 7.29.7 transitivePeerDependencies: - supports-color @@ -9050,6 +10864,10 @@ snapshots: dependencies: punycode: 2.3.1 + utif@3.1.0: + dependencies: + pako: 1.0.11 + util-deprecate@1.0.2: {} uuid@14.0.0: {} @@ -9268,6 +11086,16 @@ snapshots: optionalDependencies: typescript: 6.0.3 + vue@3.5.39(typescript@6.0.3): + dependencies: + '@vue/compiler-dom': 3.5.39 + '@vue/compiler-sfc': 3.5.39 + '@vue/runtime-dom': 3.5.39 + '@vue/server-renderer': 3.5.39(vue@3.5.39(typescript@6.0.3)) + '@vue/shared': 3.5.39 + optionalDependencies: + typescript: 6.0.3 + vuedraggable@2.24.3: dependencies: sortablejs: 1.10.2 @@ -9309,6 +11137,8 @@ snapshots: wildcard@1.1.2: {} + wkt-parser@1.5.5: {} + wmf@1.0.2: {} word-wrap@1.2.5: {} diff --git a/src/components/views/fa-login/backdrops/FaLoginLeftView.vue b/src/components/views/fa-login/backdrops/FaLoginLeftView.vue index 2fb3da7..1b68c52 100644 --- a/src/components/views/fa-login/backdrops/FaLoginLeftView.vue +++ b/src/components/views/fa-login/backdrops/FaLoginLeftView.vue @@ -17,10 +17,10 @@ -
+
diff --git a/src/components/views/fa-login/forms/FaLoginAccountForm.vue b/src/components/views/fa-login/forms/FaLoginAccountForm.vue index 03fa170..0595369 100644 --- a/src/components/views/fa-login/forms/FaLoginAccountForm.vue +++ b/src/components/views/fa-login/forms/FaLoginAccountForm.vue @@ -146,18 +146,18 @@
- - + - + - + - + - +
diff --git a/src/views/module_ai_knowledge/CreateKnowledge.vue b/src/views/module_ai_knowledge/CreateKnowledge.vue new file mode 100644 index 0000000..5e68114 --- /dev/null +++ b/src/views/module_ai_knowledge/CreateKnowledge.vue @@ -0,0 +1,340 @@ + + + + + + diff --git a/src/views/module_ai_knowledge/Documents.vue b/src/views/module_ai_knowledge/Documents.vue new file mode 100644 index 0000000..586f73a --- /dev/null +++ b/src/views/module_ai_knowledge/Documents.vue @@ -0,0 +1,416 @@ + + + + + + diff --git a/src/views/module_ai_knowledge/api.ts b/src/views/module_ai_knowledge/api.ts new file mode 100644 index 0000000..db08165 --- /dev/null +++ b/src/views/module_ai_knowledge/api.ts @@ -0,0 +1,42 @@ +// 知识库 +export const knowledgeBase = { + pageList: "/console/api/datasets", + login: "/console/api/login", + supportType: "/console/api/files/support-type", + upload: "/console/api/files/upload", + indexingEstimate: "/console/api/datasets/indexing-estimate", + // 文本嵌入模型 + textEmbedding: "/console/api/workspaces/current/models/model-types/text-embedding", + // 排序模型 + rerank: "/console/api/workspaces/current/models/model-types/rerank", + // 初始化知识库查询数据 + initKnowledgeQueryData: "/console/api/datasets/init", + + // 文件创建解析 + indexingStatus: (dataset_id: string, batch_id: string) => + `/console/api/datasets/${dataset_id}/batch/${batch_id}/indexing-status`, + + // 文档 + documents: (dataset_id: string) => `/console/api/datasets/${dataset_id}/documents`, + + // 文件状态设置 + documentStatus: (dataset_id: string, status: "disable" | "enable") => + `/console/api/datasets/${dataset_id}/documents/status/${status}/batch`, + + // 文件重命名 + renameDocument: (dataset_id: string, document_id: string) => + `/console/api/datasets/${dataset_id}/documents/${document_id}/rename`, + + // 读取文档规则 + readCurrentDocumentRule: "/console/api/datasets/process-rule", + + // 新增文档保存文档 + createAndSaveDocument: (dataset_id: string) => `/console/api/datasets/${dataset_id}/documents`, + + // 查询当前知识库规则 + queryKnowledgeRule: (dataset_id: string) => `/console/api/datasets/${dataset_id}`, + + // 获取完整文件 + downloadDocument: (dataset_id: string, document_id: string) => + `/console/api/datasets/${dataset_id}/documents/${document_id}/download`, +}; diff --git a/src/views/module_ai_knowledge/components/AddDocument.vue b/src/views/module_ai_knowledge/components/AddDocument.vue new file mode 100644 index 0000000..b4bebf6 --- /dev/null +++ b/src/views/module_ai_knowledge/components/AddDocument.vue @@ -0,0 +1,381 @@ + + + + + + diff --git a/src/views/module_ai_knowledge/components/FileIcon.vue b/src/views/module_ai_knowledge/components/FileIcon.vue new file mode 100644 index 0000000..bc11b0d --- /dev/null +++ b/src/views/module_ai_knowledge/components/FileIcon.vue @@ -0,0 +1,77 @@ + + + + diff --git a/src/views/module_ai_knowledge/components/InformationVerification.vue b/src/views/module_ai_knowledge/components/InformationVerification.vue new file mode 100644 index 0000000..36e5f91 --- /dev/null +++ b/src/views/module_ai_knowledge/components/InformationVerification.vue @@ -0,0 +1,178 @@ + + + + + + diff --git a/src/views/module_ai_knowledge/components/KnowledgeInfo.vue b/src/views/module_ai_knowledge/components/KnowledgeInfo.vue new file mode 100644 index 0000000..e38f416 --- /dev/null +++ b/src/views/module_ai_knowledge/components/KnowledgeInfo.vue @@ -0,0 +1,77 @@ + + + + diff --git a/src/views/module_ai_knowledge/components/SegmentSetting.vue b/src/views/module_ai_knowledge/components/SegmentSetting.vue new file mode 100644 index 0000000..9089538 --- /dev/null +++ b/src/views/module_ai_knowledge/components/SegmentSetting.vue @@ -0,0 +1,517 @@ + + + + diff --git a/src/views/module_ai_knowledge/components/SegmenteInfo.vue b/src/views/module_ai_knowledge/components/SegmenteInfo.vue new file mode 100644 index 0000000..addf21c --- /dev/null +++ b/src/views/module_ai_knowledge/components/SegmenteInfo.vue @@ -0,0 +1,186 @@ + + + + diff --git a/src/views/module_ai_knowledge/components/SegmentedPreview.vue b/src/views/module_ai_knowledge/components/SegmentedPreview.vue new file mode 100644 index 0000000..e6974cd --- /dev/null +++ b/src/views/module_ai_knowledge/components/SegmentedPreview.vue @@ -0,0 +1,74 @@ + + + + + + diff --git a/src/views/module_ai_knowledge/components/UploadFile.vue b/src/views/module_ai_knowledge/components/UploadFile.vue new file mode 100644 index 0000000..b518bc8 --- /dev/null +++ b/src/views/module_ai_knowledge/components/UploadFile.vue @@ -0,0 +1,209 @@ + + + + + diff --git a/src/views/module_ai_knowledge/components/docPreview/DocxPreview.vue b/src/views/module_ai_knowledge/components/docPreview/DocxPreview.vue new file mode 100644 index 0000000..a79fc20 --- /dev/null +++ b/src/views/module_ai_knowledge/components/docPreview/DocxPreview.vue @@ -0,0 +1,36 @@ + + + + diff --git a/src/views/module_ai_knowledge/components/docPreview/ExcelPreview.vue b/src/views/module_ai_knowledge/components/docPreview/ExcelPreview.vue new file mode 100644 index 0000000..82ba885 --- /dev/null +++ b/src/views/module_ai_knowledge/components/docPreview/ExcelPreview.vue @@ -0,0 +1,80 @@ + + + + diff --git a/src/views/module_ai_knowledge/components/docPreview/HtmlPreview.vue b/src/views/module_ai_knowledge/components/docPreview/HtmlPreview.vue new file mode 100644 index 0000000..cd8269d --- /dev/null +++ b/src/views/module_ai_knowledge/components/docPreview/HtmlPreview.vue @@ -0,0 +1,36 @@ + + + + diff --git a/src/views/module_ai_knowledge/components/docPreview/PdfPreview.vue b/src/views/module_ai_knowledge/components/docPreview/PdfPreview.vue new file mode 100644 index 0000000..99d9249 --- /dev/null +++ b/src/views/module_ai_knowledge/components/docPreview/PdfPreview.vue @@ -0,0 +1,33 @@ + + + + diff --git a/src/views/module_ai_knowledge/components/docPreview/TextPreview.vue b/src/views/module_ai_knowledge/components/docPreview/TextPreview.vue new file mode 100644 index 0000000..5c8924c --- /dev/null +++ b/src/views/module_ai_knowledge/components/docPreview/TextPreview.vue @@ -0,0 +1,72 @@ + + + + diff --git a/src/views/module_ai_knowledge/components/docPreview/index.vue b/src/views/module_ai_knowledge/components/docPreview/index.vue new file mode 100644 index 0000000..1e6ef33 --- /dev/null +++ b/src/views/module_ai_knowledge/components/docPreview/index.vue @@ -0,0 +1,182 @@ + + + + diff --git a/src/views/module_ai_knowledge/components/fileStyles.ts b/src/views/module_ai_knowledge/components/fileStyles.ts new file mode 100644 index 0000000..3439877 --- /dev/null +++ b/src/views/module_ai_knowledge/components/fileStyles.ts @@ -0,0 +1,114 @@ +// 文件图标默认样式表 —— 对应 react-file-icon 的 defaultStyles +// 提供各类文件扩展名对应的颜色配置 + +export type FileIconStyle = { + type?: string; + color?: string; + gradient?: string; + labelColor?: string; + labelTextColor?: string; +}; + +export const defaultStyles: Record = { + // PDF + pdf: { type: "pdf", color: "#D32F2F", labelColor: "#D32F2F", labelTextColor: "#fff" }, + + // Word + doc: { type: "doc", color: "#1565C0", labelColor: "#1565C0", labelTextColor: "#fff" }, + docx: { type: "docx", color: "#1565C0", labelColor: "#1565C0", labelTextColor: "#fff" }, + docm: { type: "docm", color: "#1565C0", labelColor: "#1565C0", labelTextColor: "#fff" }, + dot: { type: "dot", color: "#1565C0", labelColor: "#1565C0", labelTextColor: "#fff" }, + dotx: { type: "dotx", color: "#1565C0", labelColor: "#1565C0", labelTextColor: "#fff" }, + dotm: { type: "dotm", color: "#1565C0", labelColor: "#1565C0", labelTextColor: "#fff" }, + pages: { type: "pages", color: "#1565C0", labelColor: "#1565C0", labelTextColor: "#fff" }, + + // PowerPoint + ppt: { type: "ppt", color: "#EF6C00", labelColor: "#EF6C00", labelTextColor: "#fff" }, + pptx: { type: "pptx", color: "#EF6C00", labelColor: "#EF6C00", labelTextColor: "#fff" }, + pptm: { type: "pptm", color: "#EF6C00", labelColor: "#EF6C00", labelTextColor: "#fff" }, + pot: { type: "pot", color: "#EF6C00", labelColor: "#EF6C00", labelTextColor: "#fff" }, + potx: { type: "potx", color: "#EF6C00", labelColor: "#EF6C00", labelTextColor: "#fff" }, + potm: { type: "potm", color: "#EF6C00", labelColor: "#EF6C00", labelTextColor: "#fff" }, + key: { type: "key", color: "#EF6C00", labelColor: "#EF6C00", labelTextColor: "#fff" }, + + // Excel + xls: { type: "xls", color: "#2E7D32", labelColor: "#2E7D32", labelTextColor: "#fff" }, + xlsx: { type: "xlsx", color: "#2E7D32", labelColor: "#2E7D32", labelTextColor: "#fff" }, + xlsm: { type: "xlsm", color: "#2E7D32", labelColor: "#2E7D32", labelTextColor: "#fff" }, + xlt: { type: "xlt", color: "#2E7D32", labelColor: "#2E7D32", labelTextColor: "#fff" }, + xltx: { type: "xltx", color: "#2E7D32", labelColor: "#2E7D32", labelTextColor: "#fff" }, + xltm: { type: "xltm", color: "#2E7D32", labelColor: "#2E7D32", labelTextColor: "#fff" }, + numbers: { type: "numbers", color: "#2E7D32", labelColor: "#2E7D32", labelTextColor: "#fff" }, + + // 压缩 + zip: { type: "zip", color: "#F9A825", labelColor: "#F9A825", labelTextColor: "#fff" }, + rar: { type: "rar", color: "#F9A825", labelColor: "#F9A825", labelTextColor: "#fff" }, + "7z": { type: "7z", color: "#F9A825", labelColor: "#F9A825", labelTextColor: "#fff" }, + gz: { type: "gz", color: "#F9A825", labelColor: "#F9A825", labelTextColor: "#fff" }, + tar: { type: "tar", color: "#F9A825", labelColor: "#F9A825", labelTextColor: "#fff" }, + + // 代码 + js: { type: "js", color: "#FBC02D", labelColor: "#FBC02D", labelTextColor: "#fff" }, + jsx: { type: "jsx", color: "#FBC02D", labelColor: "#FBC02D", labelTextColor: "#fff" }, + ts: { type: "ts", color: "#1565C0", labelColor: "#1565C0", labelTextColor: "#fff" }, + tsx: { type: "tsx", color: "#1565C0", labelColor: "#1565C0", labelTextColor: "#fff" }, + json: { type: "json", color: "#F9A825", labelColor: "#F9A825", labelTextColor: "#fff" }, + html: { type: "html", color: "#E53935", labelColor: "#E53935", labelTextColor: "#fff" }, + css: { type: "css", color: "#1565C0", labelColor: "#1565C0", labelTextColor: "#fff" }, + scss: { type: "scss", color: "#C2185B", labelColor: "#C2185B", labelTextColor: "#fff" }, + less: { type: "less", color: "#1565C0", labelColor: "#1565C0", labelTextColor: "#fff" }, + vue: { type: "vue", color: "#41B883", labelColor: "#41B883", labelTextColor: "#fff" }, + py: { type: "py", color: "#1565C0", labelColor: "#1565C0", labelTextColor: "#fff" }, + java: { type: "java", color: "#E53935", labelColor: "#E53935", labelTextColor: "#fff" }, + c: { type: "c", color: "#1565C0", labelColor: "#1565C0", labelTextColor: "#fff" }, + cpp: { type: "cpp", color: "#1565C0", labelColor: "#1565C0", labelTextColor: "#fff" }, + h: { type: "h", color: "#1565C0", labelColor: "#1565C0", labelTextColor: "#fff" }, + cs: { type: "cs", color: "#6A1B9A", labelColor: "#6A1B9A", labelTextColor: "#fff" }, + go: { type: "go", color: "#00ACC1", labelColor: "#00ACC1", labelTextColor: "#fff" }, + rs: { type: "rs", color: "#E53935", labelColor: "#E53935", labelTextColor: "#fff" }, + rb: { type: "rb", color: "#C2185B", labelColor: "#C2185B", labelTextColor: "#fff" }, + php: { type: "php", color: "#6A1B9A", labelColor: "#6A1B9A", labelTextColor: "#fff" }, + sh: { type: "sh", color: "#37474F", labelColor: "#37474F", labelTextColor: "#fff" }, + + // 文本/文档 + txt: { type: "txt", color: "#9E9E9E", labelColor: "#9E9E9E", labelTextColor: "#fff" }, + md: { type: "md", color: "#1565C0", labelColor: "#1565C0", labelTextColor: "#fff" }, + markdown: { type: "markdown", color: "#1565C0", labelColor: "#1565C0", labelTextColor: "#fff" }, + rtf: { type: "rtf", color: "#1565C0", labelColor: "#1565C0", labelTextColor: "#fff" }, + csv: { type: "csv", color: "#2E7D32", labelColor: "#2E7D32", labelTextColor: "#fff" }, + log: { type: "log", color: "#9E9E9E", labelColor: "#9E9E9E", labelTextColor: "#fff" }, + + // 图片 + png: { type: "png", color: "#7B1FA2", labelColor: "#7B1FA2", labelTextColor: "#fff" }, + jpg: { type: "jpg", color: "#7B1FA2", labelColor: "#7B1FA2", labelTextColor: "#fff" }, + jpeg: { type: "jpeg", color: "#7B1FA2", labelColor: "#7B1FA2", labelTextColor: "#fff" }, + gif: { type: "gif", color: "#7B1FA2", labelColor: "#7B1FA2", labelTextColor: "#fff" }, + bmp: { type: "bmp", color: "#7B1FA2", labelColor: "#7B1FA2", labelTextColor: "#fff" }, + svg: { type: "svg", color: "#7B1FA2", labelColor: "#7B1FA2", labelTextColor: "#fff" }, + webp: { type: "webp", color: "#7B1FA2", labelColor: "#7B1FA2", labelTextColor: "#fff" }, + ico: { type: "ico", color: "#7B1FA2", labelColor: "#7B1FA2", labelTextColor: "#fff" }, + tiff: { type: "tiff", color: "#7B1FA2", labelColor: "#7B1FA2", labelTextColor: "#fff" }, + + // 音视频 + mp3: { type: "mp3", color: "#E91E63", labelColor: "#E91E63", labelTextColor: "#fff" }, + wav: { type: "wav", color: "#E91E63", labelColor: "#E91E63", labelTextColor: "#fff" }, + flac: { type: "flac", color: "#E91E63", labelColor: "#E91E63", labelTextColor: "#fff" }, + mp4: { type: "mp4", color: "#7B1FA2", labelColor: "#7B1FA2", labelTextColor: "#fff" }, + avi: { type: "avi", color: "#7B1FA2", labelColor: "#7B1FA2", labelTextColor: "#fff" }, + mov: { type: "mov", color: "#7B1FA2", labelColor: "#7B1FA2", labelTextColor: "#fff" }, + wmv: { type: "wmv", color: "#7B1FA2", labelColor: "#7B1FA2", labelTextColor: "#fff" }, + + // 其他 + xml: { type: "xml", color: "#1565C0", labelColor: "#1565C0", labelTextColor: "#fff" }, + yaml: { type: "yaml", color: "#1565C0", labelColor: "#1565C0", labelTextColor: "#fff" }, + yml: { type: "yml", color: "#1565C0", labelColor: "#1565C0", labelTextColor: "#fff" }, + sql: { type: "sql", color: "#6A1B9A", labelColor: "#6A1B9A", labelTextColor: "#fff" }, + db: { type: "db", color: "#6A1B9A", labelColor: "#6A1B9A", labelTextColor: "#fff" }, + file: { type: "file", color: "#9E9E9E", labelColor: "#9E9E9E", labelTextColor: "#fff" }, +}; + +// 获取扩展名对应的图标样式,找不到时使用 txt 作为默认 +export function getFileIconStyle(ext: string): FileIconStyle { + const key = String(ext || "").toLowerCase(); + return defaultStyles[key] ?? defaultStyles.txt ?? { color: "#9E9E9E", labelColor: "#9E9E9E", labelTextColor: "#fff" }; +} diff --git a/src/views/module_ai_knowledge/index.vue b/src/views/module_ai_knowledge/index.vue new file mode 100644 index 0000000..0779309 --- /dev/null +++ b/src/views/module_ai_knowledge/index.vue @@ -0,0 +1,651 @@ + + + + + + diff --git a/src/views/module_ai_knowledge/style/common.module.scss b/src/views/module_ai_knowledge/style/common.module.scss new file mode 100644 index 0000000..3393353 --- /dev/null +++ b/src/views/module_ai_knowledge/style/common.module.scss @@ -0,0 +1,292 @@ +// 通用样式 —— 对应源代码 common.module.less +// 注意:createKnowledge.module.scss 已包含全部相同样式,此文件保留以维持目录结构一致 + +.segmentRight { + flex: 1; + min-width: 0; + min-height: 0; + height: 100%; + display: flex; + flex-direction: column; + border: 1px solid #e5e7eb; + border-radius: 10px; + background: #fff; + overflow: hidden; +} + +.previewHeader { + display: flex; + align-items: center; + justify-content: space-between; + padding: 12px 14px; + border-bottom: 1px solid #f0f0f0; +} + +.previewTitle { + display: flex; + align-items: center; + gap: 8px; + min-width: 0; + color: #1f2937; + font-size: 14px; + font-weight: 700; +} + +.previewFileName { + flex: 1; + min-width: 0; + color: #6b7280; + font-size: 13px; + font-weight: 600; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +.previewFileIcon { + width: 18px; + height: 22px; + flex: 0 0 18px; + display: flex; + align-items: center; + justify-content: center; +} + +.previewFileIcon :deep(svg) { + width: 18px; + height: 22px; +} + +.previewBody { + flex: 1; + min-height: 0; + display: block; + padding: 18px; + overflow: auto; +} + +.previewEmptyWrapper { + height: 100%; + min-height: 320px; + display: flex; + align-items: center; + justify-content: center; +} + +.previewEmpty { + display: flex; + flex-direction: column; + align-items: center; + gap: 10px; + color: #9ca3af; +} + +.previewEmptyIcon { + font-size: 34px; + color: #9ca3af; +} + +.previewEmptyText { + color: #9ca3af; + font-size: 13px; +} + +.previewChunkList { + display: flex; + flex-direction: column; + gap: 18px; +} + +.previewChunkHeader { + display: flex; + align-items: center; + gap: 10px; + margin-bottom: 10px; + color: #6b7280; + font-size: 13px; + font-weight: 600; +} + +.previewChunkIcon { + color: #9ca3af; + font-size: 14px; +} + +.previewChunkMeta { + min-width: 0; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +.previewChunkContent { + color: #111827; + font-size: 14px; + line-height: 22px; + white-space: pre-wrap; + word-break: break-word; +} + +.settingCard { + padding: 20px 22px 24px; + border: 2px solid #4096ff; + border-radius: 6px; + background: #fff; +} + +.settingHeader { + display: flex; + align-items: center; + gap: 12px; + margin-bottom: 12px; +} + +.settingIcon { + width: 28px; + height: 28px; + display: flex; + align-items: center; + justify-content: center; + border-radius: 6px; + background: #4096ff; + color: #fff; + font-size: 16px; + flex-shrink: 0; +} + +.settingName { + color: #1f2937; + font-size: 15px; + font-weight: 700; +} + +.settingDesc { + margin-top: 14px; + color: #9ca3af; + font-size: 14px; + font-weight: 600; +} + +.formRow { + display: grid; + grid-template-columns: repeat(3, minmax(0, 1fr)); + gap: 20px; + margin-top: 22px; +} + +.compactFormItem { + margin-bottom: 0; +} + +.infoIcon { + color: #9ca3af; +} + +.divider { + height: 1px; + margin: 20px 0; + background: #f0f0f0; +} + +.ruleTitle { + margin-bottom: 10px; + color: #374151; + font-weight: 700; +} + +.urlCheckbox { + margin-left: 28px; +} + +.segmentActions { + display: flex; + align-items: center; + gap: 12px; + margin-top: 14px; +} + +.resetBtn { + padding: 0; +} + +.filePreviewEmpty { + padding: 14px 12px; + border: 1px dashed #e5e7eb; + border-radius: 8px; + background: #fff; + color: #9ca3af; + font-size: 13px; +} + +.filePreviewList { + display: flex; + flex-direction: column; + gap: 8px; + padding-right: 4px; +} + +.verificationBlock { + margin-top: 18px; +} + +.verificationBlockTitle { + margin-bottom: 10px; + color: #1f2937; + font-size: 14px; + font-weight: 700; +} + +.filePreviewItemStatic { + display: flex; + align-items: center; + gap: 10px; + padding: 8px 10px; + border: 1px solid #e5e7eb; + border-radius: 8px; + background: #fff; +} + +.fileStatusIcon { + width: 18px; + flex: 0 0 18px; + display: flex; + align-items: center; + justify-content: center; + font-size: 18px; +} + +.fileStatusIconDone { + color: #16a34a; +} + +.filePreviewIcon { + width: 22px; + height: 28px; + flex: 0 0 22px; + display: flex; + align-items: center; + justify-content: center; +} + +.filePreviewIcon :deep(svg) { + width: 22px; + height: 28px; +} + +.filePreviewMeta { + flex: 1; + min-width: 0; +} + +.filePreviewName { + color: #111827; + font-size: 12px; + font-weight: 600; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +.fileIndexingProgress { + margin-top: 6px; +} diff --git a/src/views/module_ai_knowledge/style/createKnowledge.module.scss b/src/views/module_ai_knowledge/style/createKnowledge.module.scss new file mode 100644 index 0000000..c9a422f --- /dev/null +++ b/src/views/module_ai_knowledge/style/createKnowledge.module.scss @@ -0,0 +1,676 @@ +.page { + height: calc(100vh - 100px); + display: flex; + flex-direction: column; + overflow: hidden; + padding: 20px 18px 10px; + background: #fff; +} + +.formBody { + flex: 1; + min-height: 0; + overflow: auto; +} + +.steps { + max-width: 430px; + margin: 0 auto; +} + +.content { + padding: 0 30px; + padding-top: 20px; +} + +.titleBlock { + margin-bottom: 30px; +} + +.sectionTitle { + margin: 0 0 6px; + color: #1f2937; + font-size: 18px; + font-weight: 700; +} + +.sectionDesc { + margin: 0; + color: #9ca3af; + font-size: 14px; +} + +.fieldCard { + display: flex; + align-items: center; + gap: 20px; + padding: 12px; + margin-bottom: 20px; + border-radius: 12px; + background: #fafafa; +} + +.iconBox { + width: 58px; + height: 58px; + flex: 0 0 58px; + display: flex; + align-items: center; + justify-content: center; + border-radius: 12px; + background: #fff; + box-shadow: 0 10px 22px rgba(15, 23, 42, 0.04); + color: #4096ff; + font-size: 22px; +} + +.iconBoxOrange { + color: #fa8c16; +} + +.fullFormItem { + flex: 1; + margin-bottom: 0; +} + +.fullFormItem :deep(.el-form-item__label) { + padding-bottom: 4px; +} + +.uploadBlock { + // margin-top: 28px; +} + +.uploadTitle { + margin: 0 0 14px; + color: #344054; + font-size: 18px; + font-weight: 700; +} + +.uploadBlock :deep(.el-upload), +.uploadBlock :deep(.el-upload-dragger) { + width: 100%; +} + +.uploadBlock :deep(.el-upload-dragger) { + min-height: 128px; + display: flex; + align-items: center; + border: 1px dashed #d9dfe8; + border-radius: 10px; + background: #fbfcfe; +} + +.uploadBlock :deep(.el-upload-dragger:hover) { + border-color: #1677ff; +} + +.uploadMain { + display: flex; + align-items: center; + justify-content: center; + gap: 12px; + color: #344054; + font-weight: 700; +} + +.uploadIcon { + color: #344054; + font-size: 26px; +} + +.uploadLink { + color: #155eef; + cursor: pointer; +} + +.uploadDesc { + color: #667085; + line-height: 1.55; + word-break: break-word; +} + +.segmentContent { + max-width: 1220px; + margin-right: auto; + margin-left: auto; + height: 100%; + min-height: 0; + display: flex; + flex-direction: column; +} + +.segmentTitle { + margin: 0 0 16px; + font-size: 15px; + font-weight: 700; +} + +.segmentLayout { + display: flex; + align-items: stretch; + gap: 18px; + flex: 1; + min-height: 0; +} + +.segmentLeft { + flex: 0 0 520px; + max-width: 520px; + height: 100%; + min-height: 0; + overflow-y: auto; + padding-right: 6px; +} + +.segmentRight { + flex: 1; + min-width: 0; + min-height: 0; + height: 100%; + display: flex; + flex-direction: column; + border: 1px solid #e5e7eb; + border-radius: 10px; + background: #fff; + overflow: hidden; +} + +.previewHeader { + display: flex; + align-items: center; + justify-content: space-between; + padding: 12px 14px; + border-bottom: 1px solid #f0f0f0; +} + +.previewTitle { + display: flex; + align-items: center; + gap: 8px; + min-width: 0; + color: #1f2937; + font-size: 14px; + font-weight: 700; +} + +.previewFileName { + flex: 1; + min-width: 0; + color: #6b7280; + font-size: 13px; + font-weight: 600; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +.previewFileIcon { + width: 18px; + height: 22px; + flex: 0 0 18px; + display: flex; + align-items: center; + justify-content: center; +} + +.previewFileIcon :deep(svg) { + width: 18px; + height: 22px; +} + +.previewBody { + flex: 1; + min-height: 0; + display: block; + padding: 18px; + overflow: auto; +} + +.previewEmptyWrapper { + height: 100%; + min-height: 320px; + display: flex; + align-items: center; + justify-content: center; +} + +.previewEmpty { + display: flex; + flex-direction: column; + align-items: center; + gap: 10px; + color: #9ca3af; +} + +.previewEmptyIcon { + font-size: 34px; + color: #9ca3af; +} + +.previewEmptyText { + color: #9ca3af; + font-size: 13px; +} + +.previewChunkList { + display: flex; + flex-direction: column; + gap: 18px; +} + +.previewChunkHeader { + display: flex; + align-items: center; + gap: 10px; + margin-bottom: 10px; + color: #6b7280; + font-size: 13px; + font-weight: 600; +} + +.previewChunkIcon { + color: #9ca3af; + font-size: 14px; +} + +.previewChunkMeta { + min-width: 0; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +.previewChunkContent { + color: #111827; + font-size: 14px; + line-height: 22px; + white-space: pre-wrap; + word-break: break-word; +} + +.settingCard { + padding: 20px 22px 24px; + border: 2px solid #4096ff; + border-radius: 6px; + background: #fff; + overflow: auto; +} + +.settingHeader { + display: flex; + align-items: center; + gap: 12px; + margin-bottom: 12px; +} + +.settingIcon { + width: 28px; + height: 28px; + display: flex; + align-items: center; + justify-content: center; + border-radius: 6px; + background: #4096ff; + color: #fff; + font-size: 16px; + flex-shrink: 0; +} + +.settingName { + color: #1f2937; + font-size: 15px; + font-weight: 700; +} + +.settingDesc { + margin-top: 14px; + color: #9ca3af; + font-size: 14px; + font-weight: 600; +} + +.formRow { + display: grid; + grid-template-columns: repeat(3, minmax(0, 1fr)); + gap: 20px; + margin-top: 22px; +} + +.compactFormItem { + margin-bottom: 0; +} + +.infoIcon { + color: #9ca3af; +} + +.divider { + height: 1px; + margin: 20px 0; + background: #f0f0f0; +} + +.ruleTitle { + margin-bottom: 10px; + color: #374151; + font-weight: 700; +} + +.urlCheckbox { + margin-left: 28px; +} + +.segmentActions { + display: flex; + align-items: center; + gap: 12px; + margin-top: 14px; +} + +.resetBtn { + padding: 0; +} + +.embeddingItem { + margin-top: 20px; +} + +.embeddingSelect { + width: 100%; +} + +.embeddingGroupLabel { + color: #6b7280; + font-weight: 700; +} + +.embeddingOption { + display: flex; + align-items: center; + gap: 12px; +} + +.embeddingOptionIcon { + width: 22px; + height: 22px; + flex: 0 0 22px; + border-radius: 6px; + object-fit: contain; +} + +.embeddingOptionLabel { + flex: 1; + min-width: 0; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + font-weight: 600; + color: #111827; +} + +.retrievalSection { + margin-top: 22px; +} + +.retrievalForm { + margin-top: 16px; +} + +.retrievalRerankRow { + display: flex; + align-items: center; + justify-content: space-between; + gap: 12px; +} + +.retrievalLabel { + color: #374151; + font-weight: 700; +} + +.retrievalModelSelect { + margin-top: 12px; + width: 100%; +} + +.retrievalRow { + display: grid; + grid-template-columns: repeat(2, minmax(0, 1fr)); + gap: 16px; + margin-top: 16px; +} + +.retrievalControl { + padding: 12px 12px 10px; + border-radius: 10px; + background: #fafafa; +} + +.retrievalControlHeader { + display: flex; + align-items: center; + justify-content: space-between; + gap: 10px; + color: #374151; + font-weight: 700; +} + +.retrievalControlBody { + display: flex; + align-items: center; + gap: 12px; + margin-top: 10px; +} + +.retrievalNumberInput { + width: 72px; + flex: 0 0 72px; +} + +.retrievalSlider { + flex: 1; + margin: 0; +} + +.filePreviewSection { + margin-top: 14px; +} + +.filePreviewTitle { + margin-bottom: 8px; + color: #374151; + font-weight: 700; + font-size: 13px; +} + +.filePreviewEmpty { + padding: 14px 12px; + border: 1px dashed #e5e7eb; + border-radius: 8px; + background: #fff; + color: #9ca3af; + font-size: 13px; +} + +.filePreviewList { + display: flex; + flex-direction: column; + gap: 8px; + padding-right: 4px; +} + +.verificationBlock { + margin-top: 18px; +} + +.verificationBlockTitle { + margin-bottom: 10px; + color: #1f2937; + font-size: 14px; + font-weight: 700; +} + +.filePreviewItemStatic { + display: flex; + align-items: center; + gap: 10px; + padding: 8px 10px; + border: 1px solid #e5e7eb; + border-radius: 8px; + background: #fff; +} + +.fileStatusIcon { + width: 18px; + flex: 0 0 18px; + display: flex; + align-items: center; + justify-content: center; + font-size: 18px; +} + +.fileStatusIconDone { + color: #16a34a; +} + +.fileStatusIconPending { + color: #9ca3af; +} + +.verificationGrid { + display: grid; + grid-template-columns: repeat(2, minmax(0, 1fr)); + gap: 10px 22px; + padding: 12px 12px; + border-radius: 10px; + background: #fafafa; +} + +.verificationItem { + display: flex; + align-items: center; + justify-content: space-between; + gap: 10px; + min-width: 0; +} + +.verificationLabel { + color: #6b7280; + font-size: 13px; + font-weight: 600; + white-space: nowrap; +} + +.verificationValue { + flex: 1; + min-width: 0; + text-align: right; + color: #111827; + font-size: 13px; + font-weight: 600; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.filePreviewItem { + display: flex; + align-items: center; + gap: 10px; + padding: 8px 10px; + border: 1px solid #e5e7eb; + border-radius: 8px; + background: #fff; + cursor: pointer; + transition: + border-color 0.15s ease, + box-shadow 0.15s ease, + background-color 0.15s ease; +} + +.filePreviewItem:hover { + border-color: #4096ff; + background: #f5faff; +} + +.filePreviewItemSelected { + border: 2px solid #4096ff; + background: #f5faff; + box-shadow: 0 10px 22px rgba(15, 23, 42, 0.05); +} + +.filePreviewItemSelected:hover { + border-color: #4096ff; +} + +.filePreviewIcon { + width: 22px; + height: 28px; + flex: 0 0 22px; + display: flex; + align-items: center; + justify-content: center; +} + +.filePreviewIcon :deep(svg) { + width: 22px; + height: 28px; +} + +.filePreviewMeta { + flex: 1; + min-width: 0; +} + +.filePreviewName { + color: #111827; + font-size: 12px; + font-weight: 600; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +.filePreviewSub { + display: flex; + align-items: center; + gap: 10px; + margin-top: 2px; +} + +.fileIndexingProgress { + margin-top: 6px; +} + +.filePreviewSize { + color: #9ca3af; + font-size: 11px; +} + +.emptyStep { + min-height: 420px; +} + +.footer { + display: flex; + justify-content: flex-end; + gap: 12px; + margin-top: 10px; +} + +@media (max-width: 1060px) { + .segmentLayout { + flex-direction: column; + } + + .segmentLeft { + flex: 1; + max-width: none; + } + + .retrievalRow { + grid-template-columns: 1fr; + } +} diff --git a/src/views/module_ai_knowledge/style/doc.module.scss b/src/views/module_ai_knowledge/style/doc.module.scss new file mode 100644 index 0000000..1bca756 --- /dev/null +++ b/src/views/module_ai_knowledge/style/doc.module.scss @@ -0,0 +1,370 @@ +// 文档预览页样式 —— 对应源代码 style/doc.module.less + +.docPreviewCard { + position: relative; + display: flex; + flex-direction: column; + height: 100%; + background: #fff; + border-radius: 12px; + border: 1px solid #edf0f5; + overflow: hidden; +} + +.docPreviewHeader { + display: flex; + align-items: center; + gap: 8px; + padding: 12px 16px; + border-bottom: 1px solid #eef2f7; + background: #fafbfc; + flex-shrink: 0; +} + +.docPreviewHeaderTitle { + display: flex; + align-items: center; + gap: 8px; + min-width: 0; + flex: 1; +} + +.docPreviewFileName { + font-size: 15px; + font-weight: 600; + color: #1f2937; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + max-width: 60%; +} + +.docPreviewFileExt { + font-size: 11px; + color: #6b7280; + background: #f3f4f6; + border-radius: 4px; + padding: 2px 6px; + flex-shrink: 0; +} + +.docPreviewBody { + flex: 1; + min-height: 0; + overflow: auto; + position: relative; +} + +.docPreviewLoading { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + gap: 12px; + padding: 80px 20px; + color: #6b7280; +} + +.docPreviewLoadingTip { + font-size: 13px; + color: #9ca3af; +} + +.docPreviewError { + color: #ef4444; + font-size: 13px; + padding: 24px; + text-align: center; +} + +.docPreviewBackTop { + position: absolute; + right: 24px; + bottom: 24px; + z-index: 10; +} + +// ============ docx 预览 ============ +.docxPreviewContainer { + width: 100%; + height: 100%; + overflow: auto; + background: #f5f7fa; + padding: 24px 0; +} + +.docxPreviewBody { + max-width: 900px; + margin: 0 auto; + background: #fff; + box-shadow: 0 2px 12px rgba(0, 0, 0, 0.08); + padding: 48px 64px; + min-height: 100%; + + :deep(.docx-wrapper) { + background: transparent; + padding: 0; + + .docx { + box-shadow: none; + margin-bottom: 0; + padding: 0; + } + } +} + +// ============ PDF 预览 ============ +.pdfPreviewContainer { + width: 100%; + height: 100%; + display: flex; + align-items: center; + justify-content: center; + background: #525659; + // padding: 16px; + + iframe { + width: 100%; + height: 100%; + border: none; + background: #fff; + } +} + +// ============ Excel 预览 ============ +.excelPreviewContainer { + width: 100%; + height: 100%; + overflow: hidden; + display: flex; + flex-direction: column; + background: #fff; + + :deep(.el-tabs) { + height: 100%; + display: flex; + flex-direction: column; + } + + :deep(.el-tabs__header) { + margin: 0; + padding: 0 16px; + flex-shrink: 0; + } + + :deep(.el-tabs__content) { + flex: 1; + min-height: 0; + overflow: hidden; + } + + :deep(.el-tab-pane) { + height: 100%; + overflow: auto; + } +} + +.excelSheet { + padding: 12px 16px; + overflow: auto; + + table { + border-collapse: collapse; + width: 100%; + font-size: 12px; + } + + td { + border: 1px solid #e4e7ed; + padding: 4px 8px; + white-space: nowrap; + color: #333; + } +} + +// ============ 文本 / Markdown 预览 ============ +.textPreviewContainer { + width: 100%; + height: 100%; + overflow: auto; + background: #f5f7fa; + padding: 24px 0; +} + +.textPreviewBody { + max-width: 900px; + margin: 0 auto; + background: #fff; + box-shadow: 0 2px 12px rgba(0, 0, 0, 0.08); + padding: 32px 48px; + min-height: 100%; + font-size: 13px; + line-height: 1.8; + color: #333; + white-space: pre-wrap; + word-break: break-word; + font-family: "SFMono-Regular", Consolas, "Liberation Mono", Menlo, monospace; +} + +.markdownPreviewBody { + max-width: 900px; + margin: 0 auto; + background: #fff; + box-shadow: 0 2px 12px rgba(0, 0, 0, 0.08); + padding: 32px 48px; + min-height: 100%; + + // Markdown 渲染样式 + :deep(h1) { + font-size: 24px; + font-weight: 700; + margin: 24px 0 16px; + color: #1a1a1a; + } + + :deep(h2) { + font-size: 20px; + font-weight: 700; + margin: 20px 0 14px; + color: #2c2c2c; + } + + :deep(h3) { + font-size: 17px; + font-weight: 600; + margin: 18px 0 12px; + color: #3a3a3a; + } + + :deep(h4) { + font-size: 15px; + font-weight: 600; + margin: 14px 0 10px; + color: #444; + } + + :deep(h5) { + font-size: 14px; + font-weight: 600; + margin: 12px 0 8px; + color: #555; + } + + :deep(h6) { + font-size: 13px; + font-weight: 600; + margin: 10px 0 8px; + color: #666; + } + + :deep(p) { + font-size: 14px; + line-height: 1.8; + margin: 0 0 12px; + color: #333; + } + + :deep(table) { + width: 100%; + border-collapse: collapse; + margin: 12px 0; + font-size: 13px; + } + + :deep(th) { + border: 1px solid #d0d5dd; + padding: 8px 12px; + background: #f9fafb; + text-align: left; + font-weight: 600; + } + + :deep(td) { + border: 1px solid #e4e7ed; + padding: 8px 12px; + vertical-align: top; + } + + :deep(ul), + :deep(ol) { + margin: 0 0 12px; + padding-left: 24px; + } + + :deep(li) { + font-size: 14px; + line-height: 1.8; + margin-bottom: 4px; + } + + :deep(img) { + max-width: 100%; + height: auto; + border-radius: 8px; + margin: 8px 0; + } + + :deep(blockquote) { + margin: 12px 0; + padding: 8px 16px; + border-left: 4px solid #d1d5db; + background: #f9fafb; + color: #6b7280; + } + + :deep(pre) { + background: #1e1e1e; + color: #d4d4d4; + padding: 16px; + border-radius: 8px; + overflow-x: auto; + margin: 12px 0; + font-size: 13px; + line-height: 1.6; + } + + :deep(code) { + font-family: "SFMono-Regular", Consolas, "Liberation Mono", Menlo, monospace; + } + + :deep(:not(pre) > code) { + background: #f3f4f6; + color: #dc2626; + padding: 2px 6px; + border-radius: 4px; + font-size: 13px; + } + + :deep(a) { + color: #1677ff; + text-decoration: none; + + &:hover { + text-decoration: underline; + } + } + + :deep(hr) { + border: none; + border-top: 1px solid #e4e7ed; + margin: 20px 0; + } +} + +// ============ HTML 预览 ============ +.htmlPreviewContainer { + width: 100%; + height: 100%; + overflow: auto; + background: #f5f7fa; + padding: 24px 0; +} + +.htmlPreviewBody { + max-width: 900px; + margin: 0 auto; + background: #fff; + box-shadow: 0 2px 12px rgba(0, 0, 0, 0.08); + padding: 32px 48px; + min-height: 100%; +} diff --git a/src/views/module_ai_knowledge/style/documents.module.scss b/src/views/module_ai_knowledge/style/documents.module.scss new file mode 100644 index 0000000..5268abc --- /dev/null +++ b/src/views/module_ai_knowledge/style/documents.module.scss @@ -0,0 +1,196 @@ +.page { + min-height: calc(100vh - 90px); + padding: 22px 20px 14px; + background: #f7f9fc; + color: #1f2937; + display: flex; + flex-direction: column; +} + +.header { + display: flex; + justify-content: space-between; + align-items: flex-start; + margin-bottom: 16px; +} + +.title { + margin: 0 0 8px !important; + color: #111827 !important; + font-size: 18px !important; + line-height: 1.2 !important; +} + +.description { + font-size: 13px; + line-height: 20px; + color: #6b7280; +} + +.learnMore { + height: auto; + padding: 0 0 0 4px; + font-size: 13px; +} + +.toolbar { + display: flex; + justify-content: space-between; + align-items: center; + gap: 16px; + margin-bottom: 14px; +} + +.toolbarLeft, +.toolbarRight { + display: flex; + align-items: center; + gap: 10px; +} + +.toolbarLeft { + min-width: 0; + flex: 1; +} + +.typeSelect { + width: 150px; +} + +.searchInput { + width: 220px; +} + +.sortButton { + min-width: 144px; + color: #5f6b7a; +} + +.tableCard { + flex: 1; + min-height: 0; + background: #fff; + border-radius: 12px; + border: 1px solid #edf0f5; + box-shadow: 0 10px 24px rgba(15, 23, 42, 0.03); + + :deep(.el-table-wrapper), + :deep(.el-scrollbar), + :deep(.el-table__inner-wrapper), + :deep(.el-table), + :deep(.el-table__body-wrapper) { + height: 100%; + } + + :deep(.el-table) { + color: #334155; + border-radius: 12px; + } + + :deep(.el-table__header-wrapper th) { + height: 42px; + padding: 8px 12px; + background: #fff; + border-bottom: 1px solid #eef2f7; + color: #69758a; + font-size: 12px; + font-weight: 600; + } + + :deep(.el-table__body-wrapper td) { + height: 38px; + padding: 6px 12px; + border-bottom: 1px solid #f0f3f8; + color: #40506a; + font-size: 13px; + } + + :deep(.el-table__body tr:hover > td) { + background: #f8fbff; + } + + :deep(.el-table-column--selection) { + width: 42px; + min-width: 42px; + } +} + +.nameCell { + max-width: 100%; + color: #243247; + font-weight: 500; +} + +.nameText { + cursor: pointer; + + &:hover { + color: #1677ff; + } +} + +.fileIcon { + width: 16px; + height: 16px; + border-radius: 3px; + background: #2f80ed; + color: #fff; + display: inline-flex; + align-items: center; + justify-content: center; + flex-shrink: 0; + + :deep(.el-icon) { + font-size: 11px; + } +} + +.modeTag { + margin: 0; + height: 22px; + line-height: 20px; + border-color: #d8dee8; + border-radius: 5px; + background: #fff; + color: #59677e; + font-size: 12px; +} + +.statusAvailable { + display: inline-flex; + align-items: center; + gap: 7px; + color: #16a34a; + font-weight: 500; +} + +.statusDot { + width: 7px; + height: 7px; + border-radius: 50%; + background: #35d27f; +} + +.statusAvailableDisabled { + color: #999999; +} + +.statusDotDisabled { + background: #999999; +} + +.actionIcon { + color: #4b5b73; + cursor: pointer; + font-size: 15px; + + &:hover { + color: #1677ff; + } +} + +.footer { + padding-top: 14px; + display: flex; + justify-content: right; +} diff --git a/src/views/module_ai_knowledge/style/index.module.scss b/src/views/module_ai_knowledge/style/index.module.scss new file mode 100644 index 0000000..39e2bf7 --- /dev/null +++ b/src/views/module_ai_knowledge/style/index.module.scss @@ -0,0 +1,225 @@ +.container { + padding: 20px; +} + +.grid { + display: grid; + gap: 20px; + grid-template-columns: repeat(auto-fill, minmax(400px, 1fr)); + grid-auto-rows: 202px; +} + +.toolbar { + display: flex; + gap: 12px; + padding: 25px 20px 0 25px; + + :deep(.el-input__wrapper) { + width: 280px; + } +} + +.createCard { + width: 100%; + min-height: 202px; + height: 100%; + border: 2px dashed #d8dee9; + border-radius: 20px; + background: #fff; + box-shadow: 0 10px 24px rgba(31, 41, 55, 0.04); + cursor: pointer; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + gap: 24px; + color: #7f89a6; + transition: all 0.2s; + + &:hover { + border-color: #9aa6c1; + color: #5f6b89; + } +} + +.createIcon { + width: 60px; + height: 60px; + border-radius: 24px; + background: #fafafa; + display: flex; + align-items: center; + justify-content: center; + + :deep(.el-icon) { + font-size: 42px; + color: currentColor; + } +} + +.createTitle { + font-weight: 600; + line-height: 1; +} + +.card { + border-radius: 12px; + height: 100%; + border: 1px solid #e5e7eb; + position: relative; + + &:hover { + .cardMore { + opacity: 1; + pointer-events: auto; + } + } +} + +.cardMore { + position: absolute; + top: 10px; + right: 10px; + width: 28px; + height: 28px; + border-radius: 8px; + border: 1px solid rgba(229, 231, 235, 0.9); + background: rgba(255, 255, 255, 0.95); + display: flex; + align-items: center; + justify-content: center; + cursor: pointer; + opacity: 0; + pointer-events: none; + transition: opacity 0.15s ease; + + &:disabled { + cursor: not-allowed; + opacity: 0.6; + pointer-events: none; + } + + :deep(.el-icon) { + font-size: 18px; + color: #6b7280; + } +} + +.cardHeader { + display: flex; + gap: 12px; + align-items: flex-start; +} + +.iconWrapper { + flex-shrink: 0; + width: 48px; + height: 48px; + border-radius: 10px; + display: flex; + align-items: center; + justify-content: center; + font-size: 22px; + position: relative; +} + +.iconBadge { + position: absolute; + bottom: 2px; + right: 2px; + width: 16px; + height: 16px; + border-radius: 50%; + background: #3b82f6; + display: flex; + align-items: center; + justify-content: center; + + :deep(.el-icon) { + font-size: 9px; + color: #fff; + } +} + +.cardTitle { + flex: 1; + min-width: 0; +} + +.cardName { + font-size: 15px; + display: block; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.cardMeta { + font-size: 12px; + color: #9ca3af; + margin-top: 2px; +} + +.badgeRow { + display: flex; + gap: 6px; + margin-top: 6px; + flex-wrap: wrap; +} + +.permissionBadge { + font-size: 11px; + color: #6b7280; + background: #f3f4f6; + border-radius: 4px; + padding: 1px 6px; +} + +.techniqueBadge { + font-size: 11px; + color: #6b7280; +} + +.description { + font-size: 13px; + color: #374151; + margin: 0; + flex: 1; + + span { + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; + } +} + +.descriptionEmpty { + color: #d1d5db; +} + +.cardFooter { + display: flex; + align-items: center; + gap: 8px; + font-size: 12px; + color: #6b7280; + border-top: 1px solid #f3f4f6; + padding-top: 8px; +} + +.footerAppCount { + margin-left: 4px; +} + +.footerDivider { + color: #d1d5db; + margin: 0 2px; +} + +.pagination { + display: flex; + justify-content: flex-end; + margin-top: 16px; +} diff --git a/src/views/module_ai_knowledge/types.ts b/src/views/module_ai_knowledge/types.ts new file mode 100644 index 0000000..dbf59bd --- /dev/null +++ b/src/views/module_ai_knowledge/types.ts @@ -0,0 +1,248 @@ +// 知识库模块类型定义与工具函数 + +// 文档页视图模式:'documents' 列表 / 'add' 添加文件 / 'preview' 预览文档 +export type DocumentModalOpenType = "documents" | "add" | "preview"; + +export type KnowledgeBaseInfoType = { + name: string; + description: string; +}; + +// 上传文件类型 —— 对应源代码 antd 的 UploadFile +export type UploadFile = { + uid: string; + name: string; + status?: string; + size?: number; + url?: string; + response?: any; + originFileObj?: File | Blob; + raw?: File | Blob; +}; + +export type PreProcessingRule = "remove_extra_spaces" | "remove_urls_emails"; + +export interface IndexingEstimate { + segmentIdentifier: string; + maximumSegmentLength: number; + segmentOverlapLength: number; + pre_processing_rules: PreProcessingRule[]; +} + +export type ModelType = { + currentProvider: string; + currentModel: string; +}; + +export type IndexingStatusItem = { + id: string; + indexing_status: string; + completed_segments: number; + total_segments: number; +}; + +type KnowledgeQueryData = { + queryIndexingEstimateJsonResult: ReturnType; + top_k: number; + score_threshold_enabled: boolean; + score_threshold: number; + embedding_model: string; + embedding_model_provider: string; + reranking_provider_name: string; + reranking_model_name: string; +}; + +type preProcessingRulesType = { + id: PreProcessingRule; + enabled: boolean; +}[]; + +type SegmentationType = { + separator: string; + max_tokens: number; + chunk_overlap: number; +}; + +export const initIndexingEstimate: IndexingEstimate = { + segmentIdentifier: "\\n\\n", + maximumSegmentLength: 1000, + segmentOverlapLength: 100, + pre_processing_rules: ["remove_extra_spaces"] as PreProcessingRule[], +}; + +export const decodeInputValue = (value: string) => { + return value + .replace(/\\t/g, "\t") + .replace(/\\r/g, "\r") + .replace(/\\n/g, "\n") + .replace(/\\\\/g, "\\"); +}; + +// 文件预览 +export const getQueryIndexingEstimateJson = ( + file_ids: string[], + pre_processing_rules: preProcessingRulesType, + segmentation: SegmentationType +) => { + return { + info_list: { + data_source_type: "upload_file", // 显示上传的文件 + file_info_list: { + file_ids, + }, + }, + indexing_technique: "high_quality", + process_rule: { + rules: { + pre_processing_rules, + segmentation, + }, + mode: "custom", + }, + doc_form: "text_model", + doc_language: "Chinese Simplified", + }; +}; + +// 数据库初始化 +export const getInitKnowledgeQueryData = ({ + queryIndexingEstimateJsonResult, + top_k, + score_threshold_enabled, + score_threshold, + embedding_model, + embedding_model_provider, + reranking_provider_name, + reranking_model_name, +}: KnowledgeQueryData) => { + const { + info_list, + process_rule, + doc_form, + doc_language, + indexing_technique, + } = queryIndexingEstimateJsonResult; + + return { + data_source: { + type: "upload_file", + info_list: { + data_source_type: "upload_file", + file_info_list: { + file_ids: info_list.file_info_list.file_ids, + }, + }, + }, + indexing_technique, + process_rule, + doc_form, + doc_language, + retrieval_model: { + search_method: "hybrid_search", + reranking_enable: false, + reranking_model: { + reranking_provider_name, + reranking_model_name, + }, + top_k, + score_threshold_enabled, + score_threshold, + reranking_mode: "reranking_model", + weights: { + weight_type: "customized", + vector_setting: { + vector_weight: 0.7, + embedding_provider_name: "", + embedding_model_name: "", + }, + keyword_setting: { + keyword_weight: 0.3, + }, + }, + }, + embedding_model, + embedding_model_provider, + }; +}; + +// 数据库文档新增 +export const getCreateKnowledgeJson = (data: ReturnType) => { + const summaryIndexSetting = { + enable: null, + model_name: null, + model_provider_name: null, + summary_prompt: null, + }; + + return { + ...data, + process_rule: { + ...data.process_rule, + summary_index_setting: summaryIndexSetting, + }, + summary_index_setting: summaryIndexSetting, + }; +}; + +// ============ 工具函数 ============ + +// 获取 Cookie +export const getCookie = (name: string): string => { + if (typeof document === "undefined") return ""; + const value = `; ${document.cookie}`; + const parts = value.split(`; ${name}=`); + if (parts.length === 2) { + return parts.pop()?.split(";").shift() || ""; + } + return ""; +}; + +// 密码加密 + +/** + * Field Encoding Utilities + * Provides Base64 encoding for sensitive fields (password, verification code) + * during transmission from frontend to backend. + * + * Note: This uses Base64 encoding for obfuscation, not cryptographic encryption. + * Real security relies on HTTPS for transport layer encryption. + */ + +/** + * Encode sensitive field using Base64 + * @param plaintext - The plain text to encode + * @returns Base64 encoded text + */ +function encryptField(plaintext: string): string { + try { + // Base64 encode the plaintext + // btoa works with ASCII, so we need to handle UTF-8 properly + const utf8Bytes = new TextEncoder().encode(plaintext) + const base64 = btoa(String.fromCharCode(...utf8Bytes)) + return base64 + } catch (error) { + console.error('Field encoding failed:', error) + // If encoding fails, throw error to prevent sending plaintext + throw new Error('Encoding failed. Please check your input.') + } +} + +// 来自dify的加密函数,用于加密密码和验证码 + +/** + * Encrypt password field for login + * @param password - Plain password + * @returns Encrypted password or original if encryption disabled + */ +export function encryptPassword(password: string): string { + return encryptField(password) +} + +/** + * Encrypt verification code for email code login + * @param code - Plain verification code + * @returns Encrypted code or original if encryption disabled + */ +export function encryptVerificationCode(code: string): string { + return encryptField(code) +} diff --git a/src/views/module_ai_knowledge/useDifyApis.ts b/src/views/module_ai_knowledge/useDifyApis.ts new file mode 100644 index 0000000..9a35502 --- /dev/null +++ b/src/views/module_ai_knowledge/useDifyApis.ts @@ -0,0 +1,301 @@ +// Dify API 请求封装 —— Vue Composables 版本 +// 对应源代码 useDifyApis.ts,将 React Hooks 转换为 Vue Composables +import axios, { + type AxiosInstance, + type AxiosRequestConfig, + type AxiosResponse, + type Canceler, +} from "axios"; +import { ref, onMounted } from "vue"; +import { getCookie } from "./types"; + +export interface ApiResponse { + code?: string | number; + message?: string; + status?: number; + data: T; +} + +export interface UseGetOptions { + url?: string; + params?: object; + config?: AxiosRequestConfig; + moreOperations?: { + immediate?: boolean; + }; +} + +export interface UsePostOptions { + url?: string; + data?: object; + config?: AxiosRequestConfig; + moreOperations?: { + immediate?: boolean; + }; +} + +// 存储待取消请求 +const pendingRequests = new Map(); + +// 获取请求唯一 Key +function getRequestKey(config: AxiosRequestConfig) { + const { method, url, params, data } = config; + return [method, url, JSON.stringify(params), JSON.stringify(data)].join("&"); +} + +// 添加请求 +function addPendingRequest(config: AxiosRequestConfig) { + const requestKey = getRequestKey(config); + + if (pendingRequests.has(requestKey)) { + config.cancelToken = new axios.CancelToken((cancel) => { + cancel(`重复请求被取消: ${requestKey}`); + }); + } else { + config.cancelToken = new axios.CancelToken((cancel) => { + pendingRequests.set(requestKey, cancel); + }); + } +} + +// 删除请求 +function removePendingRequest(config: AxiosRequestConfig) { + const requestKey = getRequestKey(config); + pendingRequests.delete(requestKey); +} + +// 创建 axios +const service: AxiosInstance = axios.create({ + baseURL: "/p30", + timeout: 45 * 1000, +}); + +// 请求拦截 +service.interceptors.request.use( + (config) => { + removePendingRequest(config); + addPendingRequest(config); + config.headers = config.headers ?? {}; + config.headers["x-csrf-token"] = getCookie("csrf_token") || ""; + + return config; + }, + (error) => Promise.reject(error) +); + +// 响应拦截 +service.interceptors.response.use( + (response: AxiosResponse) => { + removePendingRequest(response.config); + + // 成功直接返回 data + return response.data; + }, + (error) => { + if (error.config) { + removePendingRequest(error.config); + } + + if (axios.isCancel(error)) { + console.warn(error.message); + return Promise.reject(error); + } + + const response = error.response; + + // 统一处理 401 + if (response?.status === 401) { + return Promise.reject({ + code: response.data?.code, + message: response.data?.message, + status: response.status, + }); + } + + // 其它错误 + return Promise.reject(response?.data ?? error); + } +); + +export function useRequest() { + const result = ref(null); + const loading = ref(false); + const error = ref(null); + + const doRequest = async ( + options: AxiosRequestConfig + ): Promise | ApiResponse> => { + loading.value = true; + error.value = null; + + try { + const resp = await service(options); + result.value = resp as ApiResponse; + return resp; + } catch (e) { + error.value = e; + throw e; + } finally { + loading.value = false; + } + }; + + return { + result, + loading, + error, + doRequest, + }; +} + +export function useDifyGet(options: UseGetOptions = {}) { + const { result, loading, error, doRequest } = useRequest(); + const { url, params, config, moreOperations } = options; + + const doGet = (override: Partial = {}) => { + const finalUrl = override.url ?? url; + const finalParams = override.params ?? params; + const finalConfig = { + ...config, + ...override.config, + }; + + if (!finalUrl) { + throw new Error("useDifyGet: url is required"); + } + + return doRequest({ + url: finalUrl, + method: "get", + params: finalParams, + ...finalConfig, + }); + }; + + if (moreOperations?.immediate && url) { + onMounted(() => { + doGet(); + }); + } + + return { + result, + loading, + error, + doGet, + }; +} + +export function useDifyPost(options: UsePostOptions = {}) { + const { result, loading, error, doRequest } = useRequest(); + const { url, data, config, moreOperations } = options; + + const doPost = (override: Partial = {}) => { + const finalUrl = override.url ?? url; + const finalData = override.data ?? data; + const finalConfig = { + ...config, + ...override.config, + }; + + if (!finalUrl) { + throw new Error("useDifyPost: url is required"); + } + + return doRequest({ + url: finalUrl, + method: "post", + data: finalData, + ...finalConfig, + }); + }; + + if (moreOperations?.immediate && url) { + onMounted(() => { + doPost(); + }); + } + + return { + result, + loading, + error, + doPost, + }; +} + +export function useDifyPatch(options: UsePostOptions = {}) { + const { result, loading, error, doRequest } = useRequest(); + const { url, data, config, moreOperations } = options; + + const doPatch = (override: Partial = {}) => { + const finalUrl = override.url ?? url; + const finalData = override.data ?? data; + const finalConfig = { + ...config, + ...override.config, + }; + + if (!finalUrl) { + throw new Error("useDifyPatch: url is required"); + } + + return doRequest({ + url: finalUrl, + method: "patch", + data: finalData, + ...finalConfig, + }); + }; + + if (moreOperations?.immediate && url) { + onMounted(() => { + doPatch(); + }); + } + + return { + result, + loading, + error, + doPatch, + }; +} + +export function useDifyDelete(options: UsePostOptions = {}) { + const { result, loading, error, doRequest } = useRequest(); + const { url, data, config, moreOperations } = options; + + const doDelete = (override: Partial = {}) => { + const finalUrl = override.url ?? url; + const finalData = override.data ?? data; + const finalConfig = { + ...config, + ...override.config, + }; + + if (!finalUrl) { + throw new Error("useDifyDelete: url is required"); + } + + return doRequest({ + url: finalUrl, + method: "delete", + data: finalData, + ...finalConfig, + }); + }; + + if (moreOperations?.immediate && url) { + onMounted(() => { + doDelete(); + }); + } + + return { + result, + loading, + error, + doDelete, + }; +} diff --git a/src/views/module_system/auth/login/index.vue b/src/views/module_system/auth/login/index.vue index ef97bb3..3a5a1fe 100644 --- a/src/views/module_system/auth/login/index.vue +++ b/src/views/module_system/auth/login/index.vue @@ -43,33 +43,30 @@ ("account"); const panelTitle = computed(() => { if (authPanel.value === "register") return t("login.reg"); if (authPanel.value === "forget") return t("login.resetPassword"); - if ( - authPanel.value === "login" && - (loginFlowMode.value === "mobile" || loginFlowMode.value === "qr") - ) { - return t("login.qrLoginTitle"); - } return t("login.title"); }); const panelSubTitle = computed(() => { if (authPanel.value === "register") return t("register.subTitle"); if (authPanel.value === "forget") return t("forgetPassword.subTitle"); - if (authPanel.value === "login" && loginFlowMode.value === "mobile") { - return t("login.mobileLoginSubTitle"); - } - if (authPanel.value === "login" && loginFlowMode.value === "qr") { - return t("login.qrLoginSubTitle"); - } return t("login.subTitle"); }); @@ -252,70 +237,70 @@ function setAuthPanel(panel: AuthPanel) { }); } -function openMobileLogin() { - loginFlowMode.value = "mobile"; -} - -function openQrLogin() { - loginFlowMode.value = "qr"; -} - -function backToAccountLogin() { - loginFlowMode.value = "account"; - nextTick(() => { - getCaptcha(); - loginForm.captcha = ""; - accountFormRef.value?.resetDragVerify?.(); - isPassing.value = false; - isClickPass.value = false; - }); -} - -function handleOAuthLogin(provider: OAuthProvider) { - startOAuthLogin(provider); -} - -async function tryConsumeOAuthCallback() { - const q = route.query; - const oauthError = q.oauth_error as string | undefined; - const access = q.access_token as string | undefined; - const refresh = q.refresh_token as string | undefined; - - if (!oauthError && !(access && refresh)) return; - - const rest: Record = { ...q }; - delete rest.oauth_error; - delete rest.access_token; - delete rest.refresh_token; - delete rest.token_type; - - if (oauthError) { - ElMessage.error(decodeURIComponent(oauthError)); - await router.replace({ path: route.path, query: rest as LocationQuery }); - return; - } - - if (access && refresh) { - try { - Auth.setTokens(access, refresh, true); - userStore.setToken(access, refresh); - userStore.setLoginStatus(true); - ElNotification({ - title: t("login.oauthNoticeTitle"), - message: t("login.oauthLoginSuccess"), - type: "success", - }); - await router.replace(resolveRedirectTarget(rest as LocationQuery)); - if (settingStore.showGuide) { - appStore.showGuide(true); - } - } catch (error) { - console.error("[Login] OAuth callback:", error); - ElMessage.error(t("login.oauthLoginFailed")); - await router.replace({ path: route.path, query: rest as LocationQuery }); - } - } -} +// function openMobileLogin() { +// loginFlowMode.value = "mobile"; +// } + +// function openQrLogin() { +// loginFlowMode.value = "qr"; +// } + +// function backToAccountLogin() { +// loginFlowMode.value = "account"; +// nextTick(() => { +// getCaptcha(); +// loginForm.captcha = ""; +// accountFormRef.value?.resetDragVerify?.(); +// isPassing.value = false; +// isClickPass.value = false; +// }); +// } + +// function handleOAuthLogin(provider: OAuthProvider) { +// startOAuthLogin(provider); +// } + +// async function tryConsumeOAuthCallback() { +// const q = route.query; +// const oauthError = q.oauth_error as string | undefined; +// const access = q.access_token as string | undefined; +// const refresh = q.refresh_token as string | undefined; + +// if (!oauthError && !(access && refresh)) return; + +// const rest: Record = { ...q }; +// delete rest.oauth_error; +// delete rest.access_token; +// delete rest.refresh_token; +// delete rest.token_type; + +// if (oauthError) { +// ElMessage.error(decodeURIComponent(oauthError)); +// await router.replace({ path: route.path, query: rest as LocationQuery }); +// return; +// } + +// if (access && refresh) { +// try { +// Auth.setTokens(access, refresh, true); +// userStore.setToken(access, refresh); +// userStore.setLoginStatus(true); +// ElNotification({ +// title: t("login.oauthNoticeTitle"), +// message: t("login.oauthLoginSuccess"), +// type: "success", +// }); +// await router.replace(resolveRedirectTarget(rest as LocationQuery)); +// if (settingStore.showGuide) { +// appStore.showGuide(true); +// } +// } catch (error) { +// console.error("[Login] OAuth callback:", error); +// ElMessage.error(t("login.oauthLoginFailed")); +// await router.replace({ path: route.path, query: rest as LocationQuery }); +// } +// } +// } const dragVerifyTextColor = computed(() => isDark.value ? "rgba(255, 255, 255, 0.45)" : "var(--fa-gray-700)" @@ -570,13 +555,13 @@ let voteTimer: ReturnType | null = null; onMounted(async () => { setupAccount("super"); await configStore.getConfig(true); - await tryConsumeOAuthCallback(); + // await tryConsumeOAuthCallback(); if (userStore.isLogin) { await router.replace(resolveRedirectTarget(route.query)); return; } getCaptcha(); - voteTimer = setTimeout(showVoteNotification, 500); + // voteTimer = setTimeout(showVoteNotification, 500); }); onActivated(() => { diff --git a/vite.config.ts b/vite.config.ts index 566ccee..0acc606 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -88,6 +88,13 @@ export default ({ mode }: { mode: string }) => { changeOrigin: true, // 是否跨域 // rewrite: (path: string) => path.replace(new RegExp("^" + env.VITE_APP_BASE_API), ""), }, + // Dify 知识库后端代理 + "/p30": { + target: env.VITE_DIFY_API_BASE_URL, + secure: false, + changeOrigin: true, + rewrite: (path: string) => path.replace(/^\/p30/, ""), + }, }, }, resolve: {