From 6fdf336b9e214c3a996a2c783c9e09fbb1d5e5d7 Mon Sep 17 00:00:00 2001 From: wintsa <770775984@qq.com> Date: Tue, 7 Apr 2026 16:27:49 +0800 Subject: [PATCH] 1 --- .dockerignore | 7 + .gitignore | 24 + .vscode/extensions.json | 3 + Dockerfile.dist | 18 + bun.lock | 587 +++ components.json | 21 + docker/dist-server/go.mod | 3 + docker/dist-server/main.go | 69 + index.html | 34 + package-lock.json | 2195 ++++++++++++ package.json | 50 + public/favicon.ico | Bin 0 -> 9662 bytes public/logo.jpg | Bin 0 -> 9662 bytes public/template202603.xlsx | Bin 0 -> 32539 bytes scripts/package-dist-image.ps1 | 45 + src/App.vue | 323 ++ src/assets/vue.svg | 1 + src/components/ui/button/Button.vue | 29 + src/components/ui/button/index.ts | 38 + src/components/ui/card/Card.vue | 22 + src/components/ui/card/CardAction.vue | 17 + src/components/ui/card/CardContent.vue | 17 + src/components/ui/card/CardDescription.vue | 17 + src/components/ui/card/CardFooter.vue | 17 + src/components/ui/card/CardHeader.vue | 17 + src/components/ui/card/CardTitle.vue | 17 + src/components/ui/card/index.ts | 7 + src/components/ui/scroll-area/ScrollArea.vue | 39 + src/components/ui/scroll-area/ScrollBar.vue | 32 + src/components/ui/scroll-area/index.ts | 2 + src/components/ui/tooltip/TooltipContent.vue | 33 + src/components/ui/tooltip/index.ts | 2 + src/features/ht/components/Ht.vue | 1615 +++++++++ .../ht/components/HtAdditionalWorkFee.vue | 27 + src/features/ht/components/HtBaseInfo.vue | 88 + .../ht/components/HtConsultCategoryFactor.vue | 70 + .../ht/components/HtContractSummary.vue | 522 +++ .../ht/components/HtFeeRateMethodForm.vue | 242 ++ src/features/ht/components/HtMajorFactor.vue | 70 + src/features/ht/components/HtReserveFee.vue | 27 + src/features/ht/components/htCard.vue | 361 ++ src/features/ht/components/htInfo.vue | 25 + src/features/ht/components/zxFw.vue | 1429 ++++++++ src/features/ht/contracts.ts | 50 + src/features/ht/ht.css | 210 ++ src/features/ht/importExport.ts | 172 + src/features/ht/types.ts | 39 + .../pricing/components/HourlyPricingPane.vue | 24 + .../components/InvestmentScalePricingPane.vue | 1275 +++++++ .../components/LandScalePricingPane.vue | 1108 ++++++ .../components/ScaleFormulaReadonlyPane.vue | 219 ++ .../components/WorkloadPricingPane.vue | 692 ++++ .../shared/components/HourlyFeeGrid.vue | 769 ++++ src/features/shared/components/HtFeeGrid.vue | 546 +++ .../shared/components/HtFeeMethodGrid.vue | 769 ++++ .../components/MethodUnavailableNotice.vue | 24 + .../components/ServiceCheckboxSelector.vue | 69 + .../shared/components/WorkContentGrid.vue | 857 +++++ .../shared/components/XmFactorGrid.vue | 498 +++ .../shared/components/xmCommonAgGrid.vue | 806 +++++ src/features/tab/importExport.ts | 134 + src/features/tab/tab.css | 46 + src/features/tab/types.ts | 342 ++ .../workbench/components/HomeEntryView.vue | 822 +++++ .../components/HtFeeMethodTypeLineView.vue | 136 + .../components/QuickCalcWorkbenchView.vue | 1449 ++++++++ .../workbench/components/ZxFwView.vue | 204 ++ .../xm/components/XmConsultCategoryFactor.vue | 59 + src/features/xm/components/XmMajorFactor.vue | 69 + src/features/xm/components/info.vue | 441 +++ src/features/xm/components/xmCard.vue | 33 + src/features/xm/components/xmInfo.vue | 13 + src/i18n/dictionary-en.ts | 130 + src/i18n/index.ts | 36 + src/i18n/locales/en-US.ts | 679 ++++ src/i18n/locales/zh-CN.ts | 678 ++++ src/layout/tab.vue | 2340 ++++++++++++ src/layout/typeLine.vue | 394 +++ src/lib/agGridReadonlyAutoHeight.ts | 165 + src/lib/agGridResetHeader.ts | 80 + src/lib/contractSegment.ts | 141 + src/lib/decimal.ts | 198 ++ src/lib/diyAgGridOptions.ts | 204 ++ src/lib/number.ts | 41 + src/lib/numberFormat.ts | 42 + src/lib/pricingHourlyCalc.ts | 68 + src/lib/pricingMethodTotals.ts | 1023 ++++++ src/lib/pricingPersistControl.ts | 75 + src/lib/pricingPinnedRows.ts | 64 + src/lib/pricingScaleCalc.ts | 220 ++ src/lib/pricingScaleColumns.ts | 298 ++ src/lib/pricingScaleDetail.ts | 164 + src/lib/pricingScaleDict.ts | 120 + src/lib/pricingScaleFee.ts | 143 + src/lib/pricingScaleGrid.ts | 234 ++ src/lib/pricingScaleLink.ts | 168 + src/lib/pricingScalePaneData.ts | 147 + src/lib/pricingScalePaneLifecycle.ts | 52 + src/lib/pricingScaleProject.ts | 41 + src/lib/pricingScaleRowMap.ts | 57 + src/lib/pricingWorkloadCalc.ts | 101 + src/lib/projectEvents.ts | 180 + src/lib/projectKvStore.ts | 29 + src/lib/projectRegistry.ts | 158 + src/lib/projectSessionLock.ts | 285 ++ src/lib/projectWorkspace.ts | 309 ++ src/lib/reportExportBuilders.ts | 664 ++++ src/lib/servicePricing.ts | 63 + src/lib/utils.ts | 21 + src/lib/workspace.ts | 191 + src/lib/xmFactorDefaults.ts | 86 + src/lib/zwArchive.ts | 133 + src/lib/zxFwPricingSync.ts | 520 +++ src/main.ts | 86 + src/pinia/Plugin/indexdb.ts | 174 + src/pinia/Plugin/types.d.ts | 13 + src/pinia/kv.ts | 104 + src/pinia/tab.ts | 143 + src/pinia/uiPrefs.ts | 57 + src/pinia/zxFwPricing.ts | 952 +++++ src/pinia/zxFwPricingHtFee.ts | 287 ++ src/pinia/zxFwPricingKeys.ts | 155 + src/sql.ts | 3139 +++++++++++++++++ src/style.css | 533 +++ src/types/pricing.ts | 269 ++ tsconfig.json | 30 + tsconfig.tsbuildinfo | 1 + vite.config.ts | 67 + 128 files changed, 36789 insertions(+) create mode 100644 .dockerignore create mode 100644 .gitignore create mode 100644 .vscode/extensions.json create mode 100644 Dockerfile.dist create mode 100644 bun.lock create mode 100644 components.json create mode 100644 docker/dist-server/go.mod create mode 100644 docker/dist-server/main.go create mode 100644 index.html create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 public/favicon.ico create mode 100644 public/logo.jpg create mode 100644 public/template202603.xlsx create mode 100644 scripts/package-dist-image.ps1 create mode 100644 src/App.vue create mode 100644 src/assets/vue.svg create mode 100644 src/components/ui/button/Button.vue create mode 100644 src/components/ui/button/index.ts create mode 100644 src/components/ui/card/Card.vue create mode 100644 src/components/ui/card/CardAction.vue create mode 100644 src/components/ui/card/CardContent.vue create mode 100644 src/components/ui/card/CardDescription.vue create mode 100644 src/components/ui/card/CardFooter.vue create mode 100644 src/components/ui/card/CardHeader.vue create mode 100644 src/components/ui/card/CardTitle.vue create mode 100644 src/components/ui/card/index.ts create mode 100644 src/components/ui/scroll-area/ScrollArea.vue create mode 100644 src/components/ui/scroll-area/ScrollBar.vue create mode 100644 src/components/ui/scroll-area/index.ts create mode 100644 src/components/ui/tooltip/TooltipContent.vue create mode 100644 src/components/ui/tooltip/index.ts create mode 100644 src/features/ht/components/Ht.vue create mode 100644 src/features/ht/components/HtAdditionalWorkFee.vue create mode 100644 src/features/ht/components/HtBaseInfo.vue create mode 100644 src/features/ht/components/HtConsultCategoryFactor.vue create mode 100644 src/features/ht/components/HtContractSummary.vue create mode 100644 src/features/ht/components/HtFeeRateMethodForm.vue create mode 100644 src/features/ht/components/HtMajorFactor.vue create mode 100644 src/features/ht/components/HtReserveFee.vue create mode 100644 src/features/ht/components/htCard.vue create mode 100644 src/features/ht/components/htInfo.vue create mode 100644 src/features/ht/components/zxFw.vue create mode 100644 src/features/ht/contracts.ts create mode 100644 src/features/ht/ht.css create mode 100644 src/features/ht/importExport.ts create mode 100644 src/features/ht/types.ts create mode 100644 src/features/pricing/components/HourlyPricingPane.vue create mode 100644 src/features/pricing/components/InvestmentScalePricingPane.vue create mode 100644 src/features/pricing/components/LandScalePricingPane.vue create mode 100644 src/features/pricing/components/ScaleFormulaReadonlyPane.vue create mode 100644 src/features/pricing/components/WorkloadPricingPane.vue create mode 100644 src/features/shared/components/HourlyFeeGrid.vue create mode 100644 src/features/shared/components/HtFeeGrid.vue create mode 100644 src/features/shared/components/HtFeeMethodGrid.vue create mode 100644 src/features/shared/components/MethodUnavailableNotice.vue create mode 100644 src/features/shared/components/ServiceCheckboxSelector.vue create mode 100644 src/features/shared/components/WorkContentGrid.vue create mode 100644 src/features/shared/components/XmFactorGrid.vue create mode 100644 src/features/shared/components/xmCommonAgGrid.vue create mode 100644 src/features/tab/importExport.ts create mode 100644 src/features/tab/tab.css create mode 100644 src/features/tab/types.ts create mode 100644 src/features/workbench/components/HomeEntryView.vue create mode 100644 src/features/workbench/components/HtFeeMethodTypeLineView.vue create mode 100644 src/features/workbench/components/QuickCalcWorkbenchView.vue create mode 100644 src/features/workbench/components/ZxFwView.vue create mode 100644 src/features/xm/components/XmConsultCategoryFactor.vue create mode 100644 src/features/xm/components/XmMajorFactor.vue create mode 100644 src/features/xm/components/info.vue create mode 100644 src/features/xm/components/xmCard.vue create mode 100644 src/features/xm/components/xmInfo.vue create mode 100644 src/i18n/dictionary-en.ts create mode 100644 src/i18n/index.ts create mode 100644 src/i18n/locales/en-US.ts create mode 100644 src/i18n/locales/zh-CN.ts create mode 100644 src/layout/tab.vue create mode 100644 src/layout/typeLine.vue create mode 100644 src/lib/agGridReadonlyAutoHeight.ts create mode 100644 src/lib/agGridResetHeader.ts create mode 100644 src/lib/contractSegment.ts create mode 100644 src/lib/decimal.ts create mode 100644 src/lib/diyAgGridOptions.ts create mode 100644 src/lib/number.ts create mode 100644 src/lib/numberFormat.ts create mode 100644 src/lib/pricingHourlyCalc.ts create mode 100644 src/lib/pricingMethodTotals.ts create mode 100644 src/lib/pricingPersistControl.ts create mode 100644 src/lib/pricingPinnedRows.ts create mode 100644 src/lib/pricingScaleCalc.ts create mode 100644 src/lib/pricingScaleColumns.ts create mode 100644 src/lib/pricingScaleDetail.ts create mode 100644 src/lib/pricingScaleDict.ts create mode 100644 src/lib/pricingScaleFee.ts create mode 100644 src/lib/pricingScaleGrid.ts create mode 100644 src/lib/pricingScaleLink.ts create mode 100644 src/lib/pricingScalePaneData.ts create mode 100644 src/lib/pricingScalePaneLifecycle.ts create mode 100644 src/lib/pricingScaleProject.ts create mode 100644 src/lib/pricingScaleRowMap.ts create mode 100644 src/lib/pricingWorkloadCalc.ts create mode 100644 src/lib/projectEvents.ts create mode 100644 src/lib/projectKvStore.ts create mode 100644 src/lib/projectRegistry.ts create mode 100644 src/lib/projectSessionLock.ts create mode 100644 src/lib/projectWorkspace.ts create mode 100644 src/lib/reportExportBuilders.ts create mode 100644 src/lib/servicePricing.ts create mode 100644 src/lib/utils.ts create mode 100644 src/lib/workspace.ts create mode 100644 src/lib/xmFactorDefaults.ts create mode 100644 src/lib/zwArchive.ts create mode 100644 src/lib/zxFwPricingSync.ts create mode 100644 src/main.ts create mode 100644 src/pinia/Plugin/indexdb.ts create mode 100644 src/pinia/Plugin/types.d.ts create mode 100644 src/pinia/kv.ts create mode 100644 src/pinia/tab.ts create mode 100644 src/pinia/uiPrefs.ts create mode 100644 src/pinia/zxFwPricing.ts create mode 100644 src/pinia/zxFwPricingHtFee.ts create mode 100644 src/pinia/zxFwPricingKeys.ts create mode 100644 src/sql.ts create mode 100644 src/style.css create mode 100644 src/types/pricing.ts create mode 100644 tsconfig.json create mode 100644 tsconfig.tsbuildinfo create mode 100644 vite.config.ts diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..22909d0 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,7 @@ +** +!dist/ +!dist/** +!Dockerfile.dist +!docker/ +!docker/dist-server/ +!docker/dist-server/** diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c3e478b --- /dev/null +++ b/.gitignore @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local +*.exe +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 0000000..a7cea0b --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,3 @@ +{ + "recommendations": ["Vue.volar"] +} diff --git a/Dockerfile.dist b/Dockerfile.dist new file mode 100644 index 0000000..4236d28 --- /dev/null +++ b/Dockerfile.dist @@ -0,0 +1,18 @@ +FROM golang:1.24-alpine AS builder + +WORKDIR /src + +COPY docker/dist-server/ ./ + +RUN CGO_ENABLED=0 GOOS=linux go build -trimpath -ldflags="-s -w" -o /out/dist-server . + +FROM scratch + +WORKDIR /www + +COPY --from=builder /out/dist-server /dist-server +COPY dist/ /www/ + +EXPOSE 80 + +ENTRYPOINT ["/dist-server"] diff --git a/bun.lock b/bun.lock new file mode 100644 index 0000000..b51b06c --- /dev/null +++ b/bun.lock @@ -0,0 +1,587 @@ +{ + "lockfileVersion": 1, + "configVersion": 0, + "workspaces": { + "": { + "name": "my-vue-app", + "dependencies": { + "@ag-grid-community/locale": "^35.1.0", + "@iconify/vue": "^5.0.0", + "@internationalized/date": "^3.12.0", + "@internationalized/number": "^3.6.5", + "@noble/ciphers": "^2.1.1", + "@noble/hashes": "^2.0.1", + "@tailwindcss/vite": "^4.1.18", + "@vueuse/core": "^14.2.1", + "ag-grid-enterprise": "^35.1.0", + "ag-grid-vue3": "^35.1.0", + "class-variance-authority": "^0.7.1", + "clsx": "^2.1.1", + "decimal.js": "^10.6.0", + "exceljs": "^4.4.0", + "localforage": "^1.10.0", + "lucide-vue-next": "^0.563.0", + "motion-v": "^2.0.0", + "pinia": "^3.0.4", + "pinia-plugin-persistedstate": "^4.7.1", + "reka-ui": "^2.8.0", + "tailwind-merge": "^3.4.0", + "tailwindcss": "^4.1.18", + "vue": "^3.5.25", + "vue-i18n": "^11.3.0", + "vuedraggable": "^4.1.0", + }, + "devDependencies": { + "@types/bun": "latest", + "@types/node": "^24.10.1", + "@vitejs/plugin-vue": "^6.0.2", + "@vue/tsconfig": "^0.8.1", + "tw-animate-css": "^1.4.0", + "typescript": "~5.9.3", + "vite": "^8.0.0-beta.13", + "vue-tsc": "^3.1.5", + }, + }, + }, + "packages": { + "@ag-grid-community/locale": ["@ag-grid-community/locale@35.1.0", "", {}, "sha512-Tez1imtqfipMT3O1Ay+dyDcFJIj6H6gXBp45s44pwkzWQzxO20IBpZUrmAPTNRMYVZNXqCVbNsozWrPaVFAgeQ=="], + + "@babel/helper-string-parser": ["@babel/helper-string-parser@7.27.1", "", {}, "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA=="], + + "@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.28.5", "", {}, "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q=="], + + "@babel/parser": ["@babel/parser@7.29.0", "", { "dependencies": { "@babel/types": "^7.29.0" }, "bin": "./bin/babel-parser.js" }, "sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww=="], + + "@babel/types": ["@babel/types@7.29.0", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.28.5" } }, "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A=="], + + "@emnapi/core": ["@emnapi/core@1.8.1", "", { "dependencies": { "@emnapi/wasi-threads": "1.1.0", "tslib": "^2.4.0" } }, "sha512-AvT9QFpxK0Zd8J0jopedNm+w/2fIzvtPKPjqyw9jwvBaReTTqPBk9Hixaz7KbjimP+QNz605/XnjFcDAL2pqBg=="], + + "@emnapi/runtime": ["@emnapi/runtime@1.8.1", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg=="], + + "@emnapi/wasi-threads": ["@emnapi/wasi-threads@1.1.0", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ=="], + + "@fast-csv/format": ["@fast-csv/format@4.3.5", "", { "dependencies": { "@types/node": "^14.0.1", "lodash.escaperegexp": "^4.1.2", "lodash.isboolean": "^3.0.3", "lodash.isequal": "^4.5.0", "lodash.isfunction": "^3.0.9", "lodash.isnil": "^4.0.0" } }, "sha512-8iRn6QF3I8Ak78lNAa+Gdl5MJJBM5vRHivFtMRUWINdevNo00K7OXxS2PshawLKTejVwieIlPmK5YlLu6w4u8A=="], + + "@fast-csv/parse": ["@fast-csv/parse@4.3.6", "", { "dependencies": { "@types/node": "^14.0.1", "lodash.escaperegexp": "^4.1.2", "lodash.groupby": "^4.6.0", "lodash.isfunction": "^3.0.9", "lodash.isnil": "^4.0.0", "lodash.isundefined": "^3.0.1", "lodash.uniq": "^4.5.0" } }, "sha512-uRsLYksqpbDmWaSmzvJcuApSEe38+6NQZBUsuAyMZKqHxH0g1wcJgsKUvN3WC8tewaqFjBMMGrkHmC+T7k8LvA=="], + + "@floating-ui/core": ["@floating-ui/core@1.7.4", "", { "dependencies": { "@floating-ui/utils": "^0.2.10" } }, "sha512-C3HlIdsBxszvm5McXlB8PeOEWfBhcGBTZGkGlWc2U0KFY5IwG5OQEuQ8rq52DZmcHDlPLd+YFBK+cZcytwIFWg=="], + + "@floating-ui/dom": ["@floating-ui/dom@1.7.5", "", { "dependencies": { "@floating-ui/core": "^1.7.4", "@floating-ui/utils": "^0.2.10" } }, "sha512-N0bD2kIPInNHUHehXhMke1rBGs1dwqvC9O9KYMyyjK7iXt7GAhnro7UlcuYcGdS/yYOlq0MAVgrow8IbWJwyqg=="], + + "@floating-ui/utils": ["@floating-ui/utils@0.2.10", "", {}, "sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ=="], + + "@floating-ui/vue": ["@floating-ui/vue@1.1.10", "", { "dependencies": { "@floating-ui/dom": "^1.7.5", "@floating-ui/utils": "^0.2.10", "vue-demi": ">=0.13.0" } }, "sha512-vdf8f6rHnFPPLRsmL4p12wYl+Ux4mOJOkjzKEMYVnwdf7UFdvBtHlLvQyx8iKG5vhPRbDRgZxdtpmyigDPjzYg=="], + + "@iconify/types": ["@iconify/types@2.0.0", "", {}, "sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg=="], + + "@iconify/vue": ["@iconify/vue@5.0.0", "", { "dependencies": { "@iconify/types": "^2.0.0" }, "peerDependencies": { "vue": ">=3" } }, "sha512-C+KuEWIF5nSBrobFJhT//JS87OZ++QDORB6f2q2Wm6fl2mueSTpFBeBsveK0KW9hWiZ4mNiPjsh6Zs4jjdROSg=="], + + "@internationalized/date": ["@internationalized/date@3.12.0", "", { "dependencies": { "@swc/helpers": "^0.5.0" } }, "sha512-/PyIMzK29jtXaGU23qTvNZxvBXRtKbNnGDFD+PY6CZw/Y8Ex8pFUzkuCJCG9aOqmShjqhS9mPqP6Dk5onQY8rQ=="], + + "@internationalized/number": ["@internationalized/number@3.6.5", "", { "dependencies": { "@swc/helpers": "^0.5.0" } }, "sha512-6hY4Kl4HPBvtfS62asS/R22JzNNy8vi/Ssev7x6EobfCp+9QIB2hKvI2EtbdJ0VSQacxVNtqhE/NmF/NZ0gm6g=="], + + "@intlify/core-base": ["@intlify/core-base@11.3.1", "", { "dependencies": { "@intlify/devtools-types": "11.3.1", "@intlify/message-compiler": "11.3.1", "@intlify/shared": "11.3.1" } }, "sha512-9nG3ItSD5ApZHmTbv2UFqvJSy3m+u6C/orMohukNKoT/Yuwiz8tPtlNw6ylLuPqSP2kP7ZF4Cdqwp6V1m3BQgw=="], + + "@intlify/devtools-types": ["@intlify/devtools-types@11.3.1", "", { "dependencies": { "@intlify/core-base": "11.3.1", "@intlify/shared": "11.3.1" } }, "sha512-qrOknIx294W4YYVYBgldDOeOnv2NlpabW+aYGjMuXMSrY36f7GCAPlEBE2G+qTC5x0oAWDBSY5BmvLlPUx1exg=="], + + "@intlify/message-compiler": ["@intlify/message-compiler@11.3.1", "", { "dependencies": { "@intlify/shared": "11.3.1", "source-map-js": "^1.0.2" } }, "sha512-uIa4YurbphU+4Cl5CoL6nq/c7uQhVNRowEelgboNmXNs+UEcyFLQBESwaUjMvdtYxzA2qh+vGim080KZ84ruDA=="], + + "@intlify/shared": ["@intlify/shared@11.3.1", "", {}, "sha512-9GWc5PKuRdeWkT7FJN43c/+rD6xpSB3WtizewkfFCK/0XzYqCk4gQBWWcTdfKo8ylEcHwqYsR2Z3HRE3XhEHrQ=="], + + "@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], + + "@jridgewell/remapping": ["@jridgewell/remapping@2.3.5", "", { "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ=="], + + "@jridgewell/resolve-uri": ["@jridgewell/resolve-uri@3.1.2", "", {}, "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw=="], + + "@jridgewell/sourcemap-codec": ["@jridgewell/sourcemap-codec@1.5.5", "", {}, "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og=="], + + "@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.31", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw=="], + + "@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@1.1.1", "", { "dependencies": { "@emnapi/core": "^1.7.1", "@emnapi/runtime": "^1.7.1", "@tybys/wasm-util": "^0.10.1" } }, "sha512-p64ah1M1ld8xjWv3qbvFwHiFVWrq1yFvV4f7w+mzaqiR4IlSgkqhcRdHwsGgomwzBH51sRY4NEowLxnaBjcW/A=="], + + "@noble/ciphers": ["@noble/ciphers@2.1.1", "", {}, "sha512-bysYuiVfhxNJuldNXlFEitTVdNnYUc+XNJZd7Qm2a5j1vZHgY+fazadNFWFaMK/2vye0JVlxV3gHmC0WDfAOQw=="], + + "@noble/hashes": ["@noble/hashes@2.0.1", "", {}, "sha512-XlOlEbQcE9fmuXxrVTXCTlG2nlRXa9Rj3rr5Ue/+tX+nmkgbX720YHh0VR3hBF9xDvwnb8D2shVGOwNx+ulArw=="], + + "@oxc-project/runtime": ["@oxc-project/runtime@0.114.0", "", {}, "sha512-mVGQvr/uFJGQ3hsvgQ1sJfh79t5owyZZZtw+VaH+WhtvsmtgjT6imznB9sz2Q67Q0/4obM9mOOtQscU4aJteSg=="], + + "@oxc-project/types": ["@oxc-project/types@0.114.0", "", {}, "sha512-//nBfbzHQHvJs8oFIjv6coZ6uxQ4alLfiPe6D5vit6c4pmxATHHlVwgB1k+Hv4yoAMyncdxgRBF5K4BYWUCzvA=="], + + "@rolldown/binding-android-arm64": ["@rolldown/binding-android-arm64@1.0.0-rc.5", "", { "os": "android", "cpu": "arm64" }, "sha512-zCEmUrt1bggwgBgeKLxNj217J1OrChrp3jJt24VK9jAharSTeVaHODNL+LpcQVhRz+FktYWfT9cjo5oZ99ZLpg=="], + + "@rolldown/binding-darwin-arm64": ["@rolldown/binding-darwin-arm64@1.0.0-rc.5", "", { "os": "darwin", "cpu": "arm64" }, "sha512-ZP9xb9lPAex36pvkNWCjSEJW/Gfdm9I3ssiqOFLmpZ/vosPXgpoGxCmh+dX1Qs+/bWQE6toNFXWWL8vYoKoK9Q=="], + + "@rolldown/binding-darwin-x64": ["@rolldown/binding-darwin-x64@1.0.0-rc.5", "", { "os": "darwin", "cpu": "x64" }, "sha512-7IdrPunf6dp9mywMgTOKMMGDnMHQ6+h5gRl6LW8rhD8WK2kXX0IwzcM5Zc0B5J7xQs8QWOlKjv8BJsU/1CD3pg=="], + + "@rolldown/binding-freebsd-x64": ["@rolldown/binding-freebsd-x64@1.0.0-rc.5", "", { "os": "freebsd", "cpu": "x64" }, "sha512-o/JCk+dL0IN68EBhZ4DqfsfvxPfMeoM6cJtxORC1YYoxGHZyth2Kb2maXDb4oddw2wu8iIbnYXYPEzBtAF5CAg=="], + + "@rolldown/binding-linux-arm-gnueabihf": ["@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.5", "", { "os": "linux", "cpu": "arm" }, "sha512-IIBwTtA6VwxQLcEgq2mfrUgam7VvPZjhd/jxmeS1npM+edWsrrpRLHUdze+sk4rhb8/xpP3flemgcZXXUW6ukw=="], + + "@rolldown/binding-linux-arm64-gnu": ["@rolldown/binding-linux-arm64-gnu@1.0.0-rc.5", "", { "os": "linux", "cpu": "arm64" }, "sha512-KSol1De1spMZL+Xg7K5IBWXIvRWv7+pveaxFWXpezezAG7CS6ojzRjtCGCiLxQricutTAi/LkNWKMsd2wNhMKQ=="], + + "@rolldown/binding-linux-arm64-musl": ["@rolldown/binding-linux-arm64-musl@1.0.0-rc.5", "", { "os": "linux", "cpu": "arm64" }, "sha512-WFljyDkxtXRlWxMjxeegf7xMYXxUr8u7JdXlOEWKYgDqEgxUnSEsVDxBiNWQ1D5kQKwf8Wo4sVKEYPRhCdsjwA=="], + + "@rolldown/binding-linux-x64-gnu": ["@rolldown/binding-linux-x64-gnu@1.0.0-rc.5", "", { "os": "linux", "cpu": "x64" }, "sha512-CUlplTujmbDWp2gamvrqVKi2Or8lmngXT1WxsizJfts7JrvfGhZObciaY/+CbdbS9qNnskvwMZNEhTPrn7b+WA=="], + + "@rolldown/binding-linux-x64-musl": ["@rolldown/binding-linux-x64-musl@1.0.0-rc.5", "", { "os": "linux", "cpu": "x64" }, "sha512-wdf7g9NbVZCeAo2iGhsjJb7I8ZFfs6X8bumfrWg82VK+8P6AlLXwk48a1ASiJQDTS7Svq2xVzZg3sGO2aXpHRA=="], + + "@rolldown/binding-openharmony-arm64": ["@rolldown/binding-openharmony-arm64@1.0.0-rc.5", "", { "os": "none", "cpu": "arm64" }, "sha512-0CWY7ubu12nhzz+tkpHjoG3IRSTlWYe0wrfJRf4qqjqQSGtAYgoL9kwzdvlhaFdZ5ffVeyYw9qLsChcjUMEloQ=="], + + "@rolldown/binding-wasm32-wasi": ["@rolldown/binding-wasm32-wasi@1.0.0-rc.5", "", { "dependencies": { "@napi-rs/wasm-runtime": "^1.1.1" }, "cpu": "none" }, "sha512-LztXnGzv6t2u830mnZrFLRVqT/DPJ9DL4ZTz/y93rqUVkeHjMMYIYaFj+BUthiYxbVH9dH0SZYufETspKY/NhA=="], + + "@rolldown/binding-win32-arm64-msvc": ["@rolldown/binding-win32-arm64-msvc@1.0.0-rc.5", "", { "os": "win32", "cpu": "arm64" }, "sha512-jUct1XVeGtyjqJXEAfvdFa8xoigYZ2rge7nYEm70ppQxpfH9ze2fbIrpHmP2tNM2vL/F6Dd0CpXhpjPbC6bSxQ=="], + + "@rolldown/binding-win32-x64-msvc": ["@rolldown/binding-win32-x64-msvc@1.0.0-rc.5", "", { "os": "win32", "cpu": "x64" }, "sha512-VQ8F9ld5gw29epjnVGdrx8ugiLTe8BMqmhDYy7nGbdeDo4HAt4bgdZvLbViEhg7DZyHLpiEUlO5/jPSUrIuxRQ=="], + + "@rolldown/pluginutils": ["@rolldown/pluginutils@1.0.0-rc.2", "", {}, "sha512-izyXV/v+cHiRfozX62W9htOAvwMo4/bXKDrQ+vom1L1qRuexPock/7VZDAhnpHCLNejd3NJ6hiab+tO0D44Rgw=="], + + "@swc/helpers": ["@swc/helpers@0.5.18", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-TXTnIcNJQEKwThMMqBXsZ4VGAza6bvN4pa41Rkqoio6QBKMvo+5lexeTMScGCIxtzgQJzElcvIltani+adC5PQ=="], + + "@tailwindcss/node": ["@tailwindcss/node@4.2.0", "", { "dependencies": { "@jridgewell/remapping": "^2.3.5", "enhanced-resolve": "^5.19.0", "jiti": "^2.6.1", "lightningcss": "1.31.1", "magic-string": "^0.30.21", "source-map-js": "^1.2.1", "tailwindcss": "4.2.0" } }, "sha512-Yv+fn/o2OmL5fh/Ir62VXItdShnUxfpkMA4Y7jdeC8O81WPB8Kf6TT6GSHvnqgSwDzlB5iT7kDpeXxLsUS0T6Q=="], + + "@tailwindcss/oxide": ["@tailwindcss/oxide@4.2.0", "", { "optionalDependencies": { "@tailwindcss/oxide-android-arm64": "4.2.0", "@tailwindcss/oxide-darwin-arm64": "4.2.0", "@tailwindcss/oxide-darwin-x64": "4.2.0", "@tailwindcss/oxide-freebsd-x64": "4.2.0", "@tailwindcss/oxide-linux-arm-gnueabihf": "4.2.0", "@tailwindcss/oxide-linux-arm64-gnu": "4.2.0", "@tailwindcss/oxide-linux-arm64-musl": "4.2.0", "@tailwindcss/oxide-linux-x64-gnu": "4.2.0", "@tailwindcss/oxide-linux-x64-musl": "4.2.0", "@tailwindcss/oxide-wasm32-wasi": "4.2.0", "@tailwindcss/oxide-win32-arm64-msvc": "4.2.0", "@tailwindcss/oxide-win32-x64-msvc": "4.2.0" } }, "sha512-AZqQzADaj742oqn2xjl5JbIOzZB/DGCYF/7bpvhA8KvjUj9HJkag6bBuwZvH1ps6dfgxNHyuJVlzSr2VpMgdTQ=="], + + "@tailwindcss/oxide-android-arm64": ["@tailwindcss/oxide-android-arm64@4.2.0", "", { "os": "android", "cpu": "arm64" }, "sha512-F0QkHAVaW/JNBWl4CEKWdZ9PMb0khw5DCELAOnu+RtjAfx5Zgw+gqCHFvqg3AirU1IAd181fwOtJQ5I8Yx5wtw=="], + + "@tailwindcss/oxide-darwin-arm64": ["@tailwindcss/oxide-darwin-arm64@4.2.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-I0QylkXsBsJMZ4nkUNSR04p6+UptjcwhcVo3Zu828ikiEqHjVmQL9RuQ6uT/cVIiKpvtVA25msu/eRV97JeNSA=="], + + "@tailwindcss/oxide-darwin-x64": ["@tailwindcss/oxide-darwin-x64@4.2.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-6TmQIn4p09PBrmnkvbYQ0wbZhLtbaksCDx7Y7R3FYYx0yxNA7xg5KP7dowmQ3d2JVdabIHvs3Hx4K3d5uCf8xg=="], + + "@tailwindcss/oxide-freebsd-x64": ["@tailwindcss/oxide-freebsd-x64@4.2.0", "", { "os": "freebsd", "cpu": "x64" }, "sha512-qBudxDvAa2QwGlq9y7VIzhTvp2mLJ6nD/G8/tI70DCDoneaUeLWBJaPcbfzqRIWraj+o969aDQKvKW9dvkUizw=="], + + "@tailwindcss/oxide-linux-arm-gnueabihf": ["@tailwindcss/oxide-linux-arm-gnueabihf@4.2.0", "", { "os": "linux", "cpu": "arm" }, "sha512-7XKkitpy5NIjFZNUQPeUyNJNJn1CJeV7rmMR+exHfTuOsg8rxIO9eNV5TSEnqRcaOK77zQpsyUkBWmPy8FgdSg=="], + + "@tailwindcss/oxide-linux-arm64-gnu": ["@tailwindcss/oxide-linux-arm64-gnu@4.2.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-Mff5a5Q3WoQR01pGU1gr29hHM1N93xYrKkGXfPw/aRtK4bOc331Ho4Tgfsm5WDGvpevqMpdlkCojT3qlCQbCpA=="], + + "@tailwindcss/oxide-linux-arm64-musl": ["@tailwindcss/oxide-linux-arm64-musl@4.2.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-XKcSStleEVnbH6W/9DHzZv1YhjE4eSS6zOu2eRtYAIh7aV4o3vIBs+t/B15xlqoxt6ef/0uiqJVB6hkHjWD/0A=="], + + "@tailwindcss/oxide-linux-x64-gnu": ["@tailwindcss/oxide-linux-x64-gnu@4.2.0", "", { "os": "linux", "cpu": "x64" }, "sha512-/hlXCBqn9K6fi7eAM0RsobHwJYa5V/xzWspVTzxnX+Ft9v6n+30Pz8+RxCn7sQL/vRHHLS30iQPrHQunu6/vJA=="], + + "@tailwindcss/oxide-linux-x64-musl": ["@tailwindcss/oxide-linux-x64-musl@4.2.0", "", { "os": "linux", "cpu": "x64" }, "sha512-lKUaygq4G7sWkhQbfdRRBkaq4LY39IriqBQ+Gk6l5nKq6Ay2M2ZZb1tlIyRNgZKS8cbErTwuYSor0IIULC0SHw=="], + + "@tailwindcss/oxide-wasm32-wasi": ["@tailwindcss/oxide-wasm32-wasi@4.2.0", "", { "dependencies": { "@emnapi/core": "^1.8.1", "@emnapi/runtime": "^1.8.1", "@emnapi/wasi-threads": "^1.1.0", "@napi-rs/wasm-runtime": "^1.1.1", "@tybys/wasm-util": "^0.10.1", "tslib": "^2.8.1" }, "cpu": "none" }, "sha512-xuDjhAsFdUuFP5W9Ze4k/o4AskUtI8bcAGU4puTYprr89QaYFmhYOPfP+d1pH+k9ets6RoE23BXZM1X1jJqoyw=="], + + "@tailwindcss/oxide-win32-arm64-msvc": ["@tailwindcss/oxide-win32-arm64-msvc@4.2.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-2UU/15y1sWDEDNJXxEIrfWKC2Yb4YgIW5Xz2fKFqGzFWfoMHWFlfa1EJlGO2Xzjkq/tvSarh9ZTjvbxqWvLLXA=="], + + "@tailwindcss/oxide-win32-x64-msvc": ["@tailwindcss/oxide-win32-x64-msvc@4.2.0", "", { "os": "win32", "cpu": "x64" }, "sha512-CrFadmFoc+z76EV6LPG1jx6XceDsaCG3lFhyLNo/bV9ByPrE+FnBPckXQVP4XRkN76h3Fjt/a+5Er/oA/nCBvQ=="], + + "@tailwindcss/vite": ["@tailwindcss/vite@4.2.0", "", { "dependencies": { "@tailwindcss/node": "4.2.0", "@tailwindcss/oxide": "4.2.0", "tailwindcss": "4.2.0" }, "peerDependencies": { "vite": "^5.2.0 || ^6 || ^7" } }, "sha512-da9mFCaHpoOgtQiWtDGIikTrSpUFBtIZCG3jy/u2BGV+l/X1/pbxzmIUxNt6JWm19N3WtGi4KlJdSH/Si83WOA=="], + + "@tanstack/virtual-core": ["@tanstack/virtual-core@3.13.18", "", {}, "sha512-Mx86Hqu1k39icq2Zusq+Ey2J6dDWTjDvEv43PJtRCoEYTLyfaPnxIQ6iy7YAOK0NV/qOEmZQ/uCufrppZxTgcg=="], + + "@tanstack/vue-virtual": ["@tanstack/vue-virtual@3.13.18", "", { "dependencies": { "@tanstack/virtual-core": "3.13.18" }, "peerDependencies": { "vue": "^2.7.0 || ^3.0.0" } }, "sha512-6pT8HdHtTU5Z+t906cGdCroUNA5wHjFXsNss9gwk7QAr1VNZtz9IQCs2Nhx0gABK48c+OocHl2As+TMg8+Hy4A=="], + + "@tybys/wasm-util": ["@tybys/wasm-util@0.10.1", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg=="], + + "@types/bun": ["@types/bun@1.3.9", "", { "dependencies": { "bun-types": "1.3.9" } }, "sha512-KQ571yULOdWJiMH+RIWIOZ7B2RXQGpL1YQrBtLIV3FqDcCu6FsbFUBwhdKUlCKUpS3PJDsHlJ1QKlpxoVR+xtw=="], + + "@types/node": ["@types/node@24.10.13", "", { "dependencies": { "undici-types": "~7.16.0" } }, "sha512-oH72nZRfDv9lADUBSo104Aq7gPHpQZc4BTx38r9xf9pg5LfP6EzSyH2n7qFmmxRQXh7YlUXODcYsg6PuTDSxGg=="], + + "@types/web-bluetooth": ["@types/web-bluetooth@0.0.21", "", {}, "sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA=="], + + "@vitejs/plugin-vue": ["@vitejs/plugin-vue@6.0.4", "", { "dependencies": { "@rolldown/pluginutils": "1.0.0-rc.2" }, "peerDependencies": { "vite": "^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0", "vue": "^3.2.25" } }, "sha512-uM5iXipgYIn13UUQCZNdWkYk+sysBeA97d5mHsAoAt1u/wpN3+zxOmsVJWosuzX+IMGRzeYUNytztrYznboIkQ=="], + + "@volar/language-core": ["@volar/language-core@2.4.28", "", { "dependencies": { "@volar/source-map": "2.4.28" } }, "sha512-w4qhIJ8ZSitgLAkVay6AbcnC7gP3glYM3fYwKV3srj8m494E3xtrCv6E+bWviiK/8hs6e6t1ij1s2Endql7vzQ=="], + + "@volar/source-map": ["@volar/source-map@2.4.28", "", {}, "sha512-yX2BDBqJkRXfKw8my8VarTyjv48QwxdJtvRgUpNE5erCsgEUdI2DsLbpa+rOQVAJYshY99szEcRDmyHbF10ggQ=="], + + "@volar/typescript": ["@volar/typescript@2.4.28", "", { "dependencies": { "@volar/language-core": "2.4.28", "path-browserify": "^1.0.1", "vscode-uri": "^3.0.8" } }, "sha512-Ja6yvWrbis2QtN4ClAKreeUZPVYMARDYZl9LMEv1iQ1QdepB6wn0jTRxA9MftYmYa4DQ4k/DaSZpFPUfxl8giw=="], + + "@vue/compiler-core": ["@vue/compiler-core@3.5.28", "", { "dependencies": { "@babel/parser": "^7.29.0", "@vue/shared": "3.5.28", "entities": "^7.0.1", "estree-walker": "^2.0.2", "source-map-js": "^1.2.1" } }, "sha512-kviccYxTgoE8n6OCw96BNdYlBg2GOWfBuOW4Vqwrt7mSKWKwFVvI8egdTltqRgITGPsTFYtKYfxIG8ptX2PJHQ=="], + + "@vue/compiler-dom": ["@vue/compiler-dom@3.5.28", "", { "dependencies": { "@vue/compiler-core": "3.5.28", "@vue/shared": "3.5.28" } }, "sha512-/1ZepxAb159jKR1btkefDP+J2xuWL5V3WtleRmxaT+K2Aqiek/Ab/+Ebrw2pPj0sdHO8ViAyyJWfhXXOP/+LQA=="], + + "@vue/compiler-sfc": ["@vue/compiler-sfc@3.5.28", "", { "dependencies": { "@babel/parser": "^7.29.0", "@vue/compiler-core": "3.5.28", "@vue/compiler-dom": "3.5.28", "@vue/compiler-ssr": "3.5.28", "@vue/shared": "3.5.28", "estree-walker": "^2.0.2", "magic-string": "^0.30.21", "postcss": "^8.5.6", "source-map-js": "^1.2.1" } }, "sha512-6TnKMiNkd6u6VeVDhZn/07KhEZuBSn43Wd2No5zaP5s3xm8IqFTHBj84HJah4UepSUJTro5SoqqlOY22FKY96g=="], + + "@vue/compiler-ssr": ["@vue/compiler-ssr@3.5.28", "", { "dependencies": { "@vue/compiler-dom": "3.5.28", "@vue/shared": "3.5.28" } }, "sha512-JCq//9w1qmC6UGLWJX7RXzrGpKkroubey/ZFqTpvEIDJEKGgntuDMqkuWiZvzTzTA5h2qZvFBFHY7fAAa9475g=="], + + "@vue/devtools-api": ["@vue/devtools-api@7.7.9", "", { "dependencies": { "@vue/devtools-kit": "^7.7.9" } }, "sha512-kIE8wvwlcZ6TJTbNeU2HQNtaxLx3a84aotTITUuL/4bzfPxzajGBOoqjMhwZJ8L9qFYDU/lAYMEEm11dnZOD6g=="], + + "@vue/devtools-kit": ["@vue/devtools-kit@7.7.9", "", { "dependencies": { "@vue/devtools-shared": "^7.7.9", "birpc": "^2.3.0", "hookable": "^5.5.3", "mitt": "^3.0.1", "perfect-debounce": "^1.0.0", "speakingurl": "^14.0.1", "superjson": "^2.2.2" } }, "sha512-PyQ6odHSgiDVd4hnTP+aDk2X4gl2HmLDfiyEnn3/oV+ckFDuswRs4IbBT7vacMuGdwY/XemxBoh302ctbsptuA=="], + + "@vue/devtools-shared": ["@vue/devtools-shared@7.7.9", "", { "dependencies": { "rfdc": "^1.4.1" } }, "sha512-iWAb0v2WYf0QWmxCGy0seZNDPdO3Sp5+u78ORnyeonS6MT4PC7VPrryX2BpMJrwlDeaZ6BD4vP4XKjK0SZqaeA=="], + + "@vue/language-core": ["@vue/language-core@3.2.5", "", { "dependencies": { "@volar/language-core": "2.4.28", "@vue/compiler-dom": "^3.5.0", "@vue/shared": "^3.5.0", "alien-signals": "^3.0.0", "muggle-string": "^0.4.1", "path-browserify": "^1.0.1", "picomatch": "^4.0.2" } }, "sha512-d3OIxN/+KRedeM5wQ6H6NIpwS3P5gC9nmyaHgBk+rO6dIsjY+tOh4UlPpiZbAh3YtLdCGEX4M16RmsBqPmJV+g=="], + + "@vue/reactivity": ["@vue/reactivity@3.5.28", "", { "dependencies": { "@vue/shared": "3.5.28" } }, "sha512-gr5hEsxvn+RNyu9/9o1WtdYdwDjg5FgjUSBEkZWqgTKlo/fvwZ2+8W6AfKsc9YN2k/+iHYdS9vZYAhpi10kNaw=="], + + "@vue/runtime-core": ["@vue/runtime-core@3.5.28", "", { "dependencies": { "@vue/reactivity": "3.5.28", "@vue/shared": "3.5.28" } }, "sha512-POVHTdbgnrBBIpnbYU4y7pOMNlPn2QVxVzkvEA2pEgvzbelQq4ZOUxbp2oiyo+BOtiYlm8Q44wShHJoBvDPAjQ=="], + + "@vue/runtime-dom": ["@vue/runtime-dom@3.5.28", "", { "dependencies": { "@vue/reactivity": "3.5.28", "@vue/runtime-core": "3.5.28", "@vue/shared": "3.5.28", "csstype": "^3.2.3" } }, "sha512-4SXxSF8SXYMuhAIkT+eBRqOkWEfPu6nhccrzrkioA6l0boiq7sp18HCOov9qWJA5HML61kW8p/cB4MmBiG9dSA=="], + + "@vue/server-renderer": ["@vue/server-renderer@3.5.28", "", { "dependencies": { "@vue/compiler-ssr": "3.5.28", "@vue/shared": "3.5.28" }, "peerDependencies": { "vue": "3.5.28" } }, "sha512-pf+5ECKGj8fX95bNincbzJ6yp6nyzuLDhYZCeFxUNp8EBrQpPpQaLX3nNCp49+UbgbPun3CeVE+5CXVV1Xydfg=="], + + "@vue/shared": ["@vue/shared@3.5.28", "", {}, "sha512-cfWa1fCGBxrvaHRhvV3Is0MgmrbSCxYTXCSCau2I0a1Xw1N1pHAvkWCiXPRAqjvToILvguNyEwjevUqAuBQWvQ=="], + + "@vue/tsconfig": ["@vue/tsconfig@0.8.1", "", { "peerDependencies": { "typescript": "5.x", "vue": "^3.4.0" }, "optionalPeers": ["typescript", "vue"] }, "sha512-aK7feIWPXFSUhsCP9PFqPyFOcz4ENkb8hZ2pneL6m2UjCkccvaOhC/5KCKluuBufvp2KzkbdA2W2pk20vLzu3g=="], + + "@vueuse/core": ["@vueuse/core@14.2.1", "", { "dependencies": { "@types/web-bluetooth": "^0.0.21", "@vueuse/metadata": "14.2.1", "@vueuse/shared": "14.2.1" }, "peerDependencies": { "vue": "^3.5.0" } }, "sha512-3vwDzV+GDUNpdegRY6kzpLm4Igptq+GA0QkJ3W61Iv27YWwW/ufSlOfgQIpN6FZRMG0mkaz4gglJRtq5SeJyIQ=="], + + "@vueuse/metadata": ["@vueuse/metadata@14.2.1", "", {}, "sha512-1ButlVtj5Sb/HDtIy1HFr1VqCP4G6Ypqt5MAo0lCgjokrk2mvQKsK2uuy0vqu/Ks+sHfuHo0B9Y9jn9xKdjZsw=="], + + "@vueuse/shared": ["@vueuse/shared@14.2.1", "", { "peerDependencies": { "vue": "^3.5.0" } }, "sha512-shTJncjV9JTI4oVNyF1FQonetYAiTBd+Qj7cY89SWbXSkx7gyhrgtEdF2ZAVWS1S3SHlaROO6F2IesJxQEkZBw=="], + + "ag-charts-community": ["ag-charts-community@13.1.0", "", { "dependencies": { "ag-charts-core": "13.1.0", "ag-charts-locale": "13.1.0", "ag-charts-types": "13.1.0" } }, "sha512-w+uFTjxlAoTq1+8tgUORtB/zr9jm38ibXzbbWnkBP9Dep9yahi5a1jZL7yExAX35uq3g9QtjTh0Oj/QPDBQ9Ew=="], + + "ag-charts-core": ["ag-charts-core@13.1.0", "", { "dependencies": { "ag-charts-types": "13.1.0" } }, "sha512-mLHJZ8oU5CPeLRURescdISCtMsiiA/m4d1iBr6aQBEgiTVogRMGpFpsYNtQiYtoW2sRh+62I9sN8fhC3JQjX/g=="], + + "ag-charts-enterprise": ["ag-charts-enterprise@13.1.0", "", { "dependencies": { "ag-charts-community": "13.1.0", "ag-charts-core": "13.1.0" } }, "sha512-WyKIqvkOdtdvEJxq76hjTacXTCpIR2lq1JDMYc5MtoHYtiVt1KHApsxS0nbutp/CxGKRgdOqJtxUF+3r33pgPw=="], + + "ag-charts-locale": ["ag-charts-locale@13.1.0", "", {}, "sha512-mPgJnVsOI4Cf17CAlRh8BvLz19e165sdQJeUXNaB7M+DPB+pxODOcfx4oqZlR4Wc8Zu++TGb/2ueHa/aeV2qeQ=="], + + "ag-charts-types": ["ag-charts-types@13.1.0", "", {}, "sha512-DytRM3CXli+Y013SC1Mr8lQBrhVTACK+11ilDHOhwUM0sRpmGuR51XFGcBKOliW1Vas1AycP31Cm3Pp0jx3hqw=="], + + "ag-grid-community": ["ag-grid-community@35.1.0", "", { "dependencies": { "ag-charts-types": "13.1.0" } }, "sha512-yWFQfRNjv3KUBkHHzFdDOYGjPcDMU0B8Up4qG651diFlGRUGEGVs94SK73niWvk1FDZdpV9oWrwq3f30/qAoVg=="], + + "ag-grid-enterprise": ["ag-grid-enterprise@35.1.0", "", { "dependencies": { "ag-grid-community": "35.1.0" }, "optionalDependencies": { "ag-charts-community": "13.1.0", "ag-charts-enterprise": "13.1.0" } }, "sha512-Zhod3fpgWa9KE0JNFkkkb8/3Qv66UR9KF3wFyCz++wQUtQm5wdExul4UA8wm1ukvBmD6QyBLQ5Cs9zDnIEb0uQ=="], + + "ag-grid-vue3": ["ag-grid-vue3@35.1.0", "", { "dependencies": { "ag-grid-community": "35.1.0" }, "peerDependencies": { "vue": "^3.5.0" } }, "sha512-BvM7yrFxRB/r5hZ4xSyE6T2lU2Rj+Ls6RH5tTu/n8DmhCTmLj4QCEkoU7EuaE0/Az3uEHOubYMaCX4jcDf181A=="], + + "alien-signals": ["alien-signals@3.1.2", "", {}, "sha512-d9dYqZTS90WLiU0I5c6DHj/HcKkF8ZyGN3G5x8wSbslulz70KOxaqCT0hQCo9KOyhVqzqGojvNdJXoTumZOtcw=="], + + "archiver": ["archiver@5.3.2", "", { "dependencies": { "archiver-utils": "^2.1.0", "async": "^3.2.4", "buffer-crc32": "^0.2.1", "readable-stream": "^3.6.0", "readdir-glob": "^1.1.2", "tar-stream": "^2.2.0", "zip-stream": "^4.1.0" } }, "sha512-+25nxyyznAXF7Nef3y0EbBeqmGZgeN/BxHX29Rs39djAfaFalmQ89SE6CWyDCHzGL0yt/ycBtNOmGTW0FyGWNw=="], + + "archiver-utils": ["archiver-utils@2.1.0", "", { "dependencies": { "glob": "^7.1.4", "graceful-fs": "^4.2.0", "lazystream": "^1.0.0", "lodash.defaults": "^4.2.0", "lodash.difference": "^4.5.0", "lodash.flatten": "^4.4.0", "lodash.isplainobject": "^4.0.6", "lodash.union": "^4.6.0", "normalize-path": "^3.0.0", "readable-stream": "^2.0.0" } }, "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw=="], + + "aria-hidden": ["aria-hidden@1.2.6", "", { "dependencies": { "tslib": "^2.0.0" } }, "sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA=="], + + "async": ["async@3.2.6", "", {}, "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA=="], + + "balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], + + "base64-js": ["base64-js@1.5.1", "", {}, "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="], + + "big-integer": ["big-integer@1.6.52", "", {}, "sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg=="], + + "binary": ["binary@0.3.0", "", { "dependencies": { "buffers": "~0.1.1", "chainsaw": "~0.1.0" } }, "sha512-D4H1y5KYwpJgK8wk1Cue5LLPgmwHKYSChkbspQg5JtVuR5ulGckxfR62H3AE9UDkdMC8yyXlqYihuz3Aqg2XZg=="], + + "birpc": ["birpc@2.9.0", "", {}, "sha512-KrayHS5pBi69Xi9JmvoqrIgYGDkD6mcSe/i6YKi3w5kekCLzrX4+nawcXqrj2tIp50Kw/mT/s3p+GVK0A0sKxw=="], + + "bl": ["bl@4.1.0", "", { "dependencies": { "buffer": "^5.5.0", "inherits": "^2.0.4", "readable-stream": "^3.4.0" } }, "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w=="], + + "bluebird": ["bluebird@3.4.7", "", {}, "sha512-iD3898SR7sWVRHbiQv+sHUtHnMvC1o3nW5rAcqnq3uOn07DSAppZYUkIGslDz6gXC7HfunPe7YVBgoEJASPcHA=="], + + "brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="], + + "buffer": ["buffer@5.7.1", "", { "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" } }, "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ=="], + + "buffer-crc32": ["buffer-crc32@0.2.13", "", {}, "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ=="], + + "buffer-indexof-polyfill": ["buffer-indexof-polyfill@1.0.2", "", {}, "sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A=="], + + "buffers": ["buffers@0.1.1", "", {}, "sha512-9q/rDEGSb/Qsvv2qvzIzdluL5k7AaJOTrw23z9reQthrbF7is4CtlT0DXyO1oei2DCp4uojjzQ7igaSHp1kAEQ=="], + + "bun-types": ["bun-types@1.3.9", "", { "dependencies": { "@types/node": "*" } }, "sha512-+UBWWOakIP4Tswh0Bt0QD0alpTY8cb5hvgiYeWCMet9YukHbzuruIEeXC2D7nMJPB12kbh8C7XJykSexEqGKJg=="], + + "chainsaw": ["chainsaw@0.1.0", "", { "dependencies": { "traverse": ">=0.3.0 <0.4" } }, "sha512-75kWfWt6MEKNC8xYXIdRpDehRYY/tNSgwKaJq+dbbDcxORuVrrQ+SEHoWsniVn9XPYfP4gmdWIeDk/4YNp1rNQ=="], + + "class-variance-authority": ["class-variance-authority@0.7.1", "", { "dependencies": { "clsx": "^2.1.1" } }, "sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg=="], + + "clsx": ["clsx@2.1.1", "", {}, "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA=="], + + "compress-commons": ["compress-commons@4.1.2", "", { "dependencies": { "buffer-crc32": "^0.2.13", "crc32-stream": "^4.0.2", "normalize-path": "^3.0.0", "readable-stream": "^3.6.0" } }, "sha512-D3uMHtGc/fcO1Gt1/L7i1e33VOvD4A9hfQLP+6ewd+BvG/gQ84Yh4oftEhAdjSMgBgwGL+jsppT7JYNpo6MHHg=="], + + "concat-map": ["concat-map@0.0.1", "", {}, "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="], + + "copy-anything": ["copy-anything@4.0.5", "", { "dependencies": { "is-what": "^5.2.0" } }, "sha512-7Vv6asjS4gMOuILabD3l739tsaxFQmC+a7pLZm02zyvs8p977bL3zEgq3yDk5rn9B0PbYgIv++jmHcuUab4RhA=="], + + "core-util-is": ["core-util-is@1.0.3", "", {}, "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="], + + "crc-32": ["crc-32@1.2.2", "", { "bin": { "crc32": "bin/crc32.njs" } }, "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ=="], + + "crc32-stream": ["crc32-stream@4.0.3", "", { "dependencies": { "crc-32": "^1.2.0", "readable-stream": "^3.4.0" } }, "sha512-NT7w2JVU7DFroFdYkeq8cywxrgjPHWkdX1wjpRQXPX5Asews3tA+Ght6lddQO5Mkumffp3X7GEqku3epj2toIw=="], + + "csstype": ["csstype@3.2.3", "", {}, "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ=="], + + "dayjs": ["dayjs@1.11.19", "", {}, "sha512-t5EcLVS6QPBNqM2z8fakk/NKel+Xzshgt8FFKAn+qwlD1pzZWxh0nVCrvFK7ZDb6XucZeF9z8C7CBWTRIVApAw=="], + + "decimal.js": ["decimal.js@10.6.0", "", {}, "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg=="], + + "defu": ["defu@6.1.4", "", {}, "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg=="], + + "detect-libc": ["detect-libc@2.1.2", "", {}, "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ=="], + + "duplexer2": ["duplexer2@0.1.4", "", { "dependencies": { "readable-stream": "^2.0.2" } }, "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA=="], + + "end-of-stream": ["end-of-stream@1.4.5", "", { "dependencies": { "once": "^1.4.0" } }, "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg=="], + + "enhanced-resolve": ["enhanced-resolve@5.19.0", "", { "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.3.0" } }, "sha512-phv3E1Xl4tQOShqSte26C7Fl84EwUdZsyOuSSk9qtAGyyQs2s3jJzComh+Abf4g187lUUAvH+H26omrqia2aGg=="], + + "entities": ["entities@7.0.1", "", {}, "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA=="], + + "estree-walker": ["estree-walker@2.0.2", "", {}, "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="], + + "exceljs": ["exceljs@4.4.0", "", { "dependencies": { "archiver": "^5.0.0", "dayjs": "^1.8.34", "fast-csv": "^4.3.1", "jszip": "^3.10.1", "readable-stream": "^3.6.0", "saxes": "^5.0.1", "tmp": "^0.2.0", "unzipper": "^0.10.11", "uuid": "^8.3.0" } }, "sha512-XctvKaEMaj1Ii9oDOqbW/6e1gXknSY4g/aLCDicOXqBE4M0nRWkUu0PTp++UPNzoFY12BNHMfs/VadKIS6llvg=="], + + "fast-csv": ["fast-csv@4.3.6", "", { "dependencies": { "@fast-csv/format": "4.3.5", "@fast-csv/parse": "4.3.6" } }, "sha512-2RNSpuwwsJGP0frGsOmTb9oUF+VkFSM4SyLTDgwf2ciHWTarN0lQTC+F2f/t5J9QjW+c65VFIAAu85GsvMIusw=="], + + "fdir": ["fdir@6.5.0", "", { "peerDependencies": { "picomatch": "^3 || ^4" }, "optionalPeers": ["picomatch"] }, "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg=="], + + "framer-motion": ["framer-motion@12.34.3", "", { "dependencies": { "motion-dom": "^12.34.3", "motion-utils": "^12.29.2", "tslib": "^2.4.0" }, "peerDependencies": { "@emotion/is-prop-valid": "*", "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0" }, "optionalPeers": ["@emotion/is-prop-valid", "react", "react-dom"] }, "sha512-v81ecyZKYO/DfpTwHivqkxSUBzvceOpoI+wLfgCgoUIKxlFKEXdg0oR9imxwXumT4SFy8vRk9xzJ5l3/Du/55Q=="], + + "fs-constants": ["fs-constants@1.0.0", "", {}, "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow=="], + + "fs.realpath": ["fs.realpath@1.0.0", "", {}, "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="], + + "fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="], + + "fstream": ["fstream@1.0.12", "", { "dependencies": { "graceful-fs": "^4.1.2", "inherits": "~2.0.0", "mkdirp": ">=0.5 0", "rimraf": "2" } }, "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg=="], + + "glob": ["glob@7.2.3", "", { "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } }, "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q=="], + + "graceful-fs": ["graceful-fs@4.2.11", "", {}, "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="], + + "hey-listen": ["hey-listen@1.0.8", "", {}, "sha512-COpmrF2NOg4TBWUJ5UVyaCU2A88wEMkUPK4hNqyCkqHbxT92BbvfjoSozkAIIm6XhicGlJHhFdullInrdhwU8Q=="], + + "hookable": ["hookable@5.5.3", "", {}, "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ=="], + + "ieee754": ["ieee754@1.2.1", "", {}, "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="], + + "immediate": ["immediate@3.0.6", "", {}, "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ=="], + + "inflight": ["inflight@1.0.6", "", { "dependencies": { "once": "^1.3.0", "wrappy": "1" } }, "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA=="], + + "inherits": ["inherits@2.0.4", "", {}, "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="], + + "is-what": ["is-what@5.5.0", "", {}, "sha512-oG7cgbmg5kLYae2N5IVd3jm2s+vldjxJzK1pcu9LfpGuQ93MQSzo0okvRna+7y5ifrD+20FE8FvjusyGaz14fw=="], + + "isarray": ["isarray@1.0.0", "", {}, "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="], + + "jiti": ["jiti@2.6.1", "", { "bin": { "jiti": "lib/jiti-cli.mjs" } }, "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ=="], + + "jszip": ["jszip@3.10.1", "", { "dependencies": { "lie": "~3.3.0", "pako": "~1.0.2", "readable-stream": "~2.3.6", "setimmediate": "^1.0.5" } }, "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g=="], + + "lazystream": ["lazystream@1.0.1", "", { "dependencies": { "readable-stream": "^2.0.5" } }, "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw=="], + + "lie": ["lie@3.1.1", "", { "dependencies": { "immediate": "~3.0.5" } }, "sha512-RiNhHysUjhrDQntfYSfY4MU24coXXdEOgw9WGcKHNeEwffDYbF//u87M1EWaMGzuFoSbqW0C9C6lEEhDOAswfw=="], + + "lightningcss": ["lightningcss@1.31.1", "", { "dependencies": { "detect-libc": "^2.0.3" }, "optionalDependencies": { "lightningcss-android-arm64": "1.31.1", "lightningcss-darwin-arm64": "1.31.1", "lightningcss-darwin-x64": "1.31.1", "lightningcss-freebsd-x64": "1.31.1", "lightningcss-linux-arm-gnueabihf": "1.31.1", "lightningcss-linux-arm64-gnu": "1.31.1", "lightningcss-linux-arm64-musl": "1.31.1", "lightningcss-linux-x64-gnu": "1.31.1", "lightningcss-linux-x64-musl": "1.31.1", "lightningcss-win32-arm64-msvc": "1.31.1", "lightningcss-win32-x64-msvc": "1.31.1" } }, "sha512-l51N2r93WmGUye3WuFoN5k10zyvrVs0qfKBhyC5ogUQ6Ew6JUSswh78mbSO+IU3nTWsyOArqPCcShdQSadghBQ=="], + + "lightningcss-android-arm64": ["lightningcss-android-arm64@1.31.1", "", { "os": "android", "cpu": "arm64" }, "sha512-HXJF3x8w9nQ4jbXRiNppBCqeZPIAfUo8zE/kOEGbW5NZvGc/K7nMxbhIr+YlFlHW5mpbg/YFPdbnCh1wAXCKFg=="], + + "lightningcss-darwin-arm64": ["lightningcss-darwin-arm64@1.31.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-02uTEqf3vIfNMq3h/z2cJfcOXnQ0GRwQrkmPafhueLb2h7mqEidiCzkE4gBMEH65abHRiQvhdcQ+aP0D0g67sg=="], + + "lightningcss-darwin-x64": ["lightningcss-darwin-x64@1.31.1", "", { "os": "darwin", "cpu": "x64" }, "sha512-1ObhyoCY+tGxtsz1lSx5NXCj3nirk0Y0kB/g8B8DT+sSx4G9djitg9ejFnjb3gJNWo7qXH4DIy2SUHvpoFwfTA=="], + + "lightningcss-freebsd-x64": ["lightningcss-freebsd-x64@1.31.1", "", { "os": "freebsd", "cpu": "x64" }, "sha512-1RINmQKAItO6ISxYgPwszQE1BrsVU5aB45ho6O42mu96UiZBxEXsuQ7cJW4zs4CEodPUioj/QrXW1r9pLUM74A=="], + + "lightningcss-linux-arm-gnueabihf": ["lightningcss-linux-arm-gnueabihf@1.31.1", "", { "os": "linux", "cpu": "arm" }, "sha512-OOCm2//MZJ87CdDK62rZIu+aw9gBv4azMJuA8/KB74wmfS3lnC4yoPHm0uXZ/dvNNHmnZnB8XLAZzObeG0nS1g=="], + + "lightningcss-linux-arm64-gnu": ["lightningcss-linux-arm64-gnu@1.31.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-WKyLWztD71rTnou4xAD5kQT+982wvca7E6QoLpoawZ1gP9JM0GJj4Tp5jMUh9B3AitHbRZ2/H3W5xQmdEOUlLg=="], + + "lightningcss-linux-arm64-musl": ["lightningcss-linux-arm64-musl@1.31.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-mVZ7Pg2zIbe3XlNbZJdjs86YViQFoJSpc41CbVmKBPiGmC4YrfeOyz65ms2qpAobVd7WQsbW4PdsSJEMymyIMg=="], + + "lightningcss-linux-x64-gnu": ["lightningcss-linux-x64-gnu@1.31.1", "", { "os": "linux", "cpu": "x64" }, "sha512-xGlFWRMl+0KvUhgySdIaReQdB4FNudfUTARn7q0hh/V67PVGCs3ADFjw+6++kG1RNd0zdGRlEKa+T13/tQjPMA=="], + + "lightningcss-linux-x64-musl": ["lightningcss-linux-x64-musl@1.31.1", "", { "os": "linux", "cpu": "x64" }, "sha512-eowF8PrKHw9LpoZii5tdZwnBcYDxRw2rRCyvAXLi34iyeYfqCQNA9rmUM0ce62NlPhCvof1+9ivRaTY6pSKDaA=="], + + "lightningcss-win32-arm64-msvc": ["lightningcss-win32-arm64-msvc@1.31.1", "", { "os": "win32", "cpu": "arm64" }, "sha512-aJReEbSEQzx1uBlQizAOBSjcmr9dCdL3XuC/6HLXAxmtErsj2ICo5yYggg1qOODQMtnjNQv2UHb9NpOuFtYe4w=="], + + "lightningcss-win32-x64-msvc": ["lightningcss-win32-x64-msvc@1.31.1", "", { "os": "win32", "cpu": "x64" }, "sha512-I9aiFrbd7oYHwlnQDqr1Roz+fTz61oDDJX7n9tYF9FJymH1cIN1DtKw3iYt6b8WZgEjoNwVSncwF4wx/ZedMhw=="], + + "listenercount": ["listenercount@1.0.1", "", {}, "sha512-3mk/Zag0+IJxeDrxSgaDPy4zZ3w05PRZeJNnlWhzFz5OkX49J4krc+A8X2d2M69vGMBEX0uyl8M+W+8gH+kBqQ=="], + + "localforage": ["localforage@1.10.0", "", { "dependencies": { "lie": "3.1.1" } }, "sha512-14/H1aX7hzBBmmh7sGPd+AOMkkIrHM3Z1PAyGgZigA1H1p5O5ANnMyWzvpAETtG68/dC4pC0ncy3+PPGzXZHPg=="], + + "lodash.defaults": ["lodash.defaults@4.2.0", "", {}, "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ=="], + + "lodash.difference": ["lodash.difference@4.5.0", "", {}, "sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA=="], + + "lodash.escaperegexp": ["lodash.escaperegexp@4.1.2", "", {}, "sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw=="], + + "lodash.flatten": ["lodash.flatten@4.4.0", "", {}, "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g=="], + + "lodash.groupby": ["lodash.groupby@4.6.0", "", {}, "sha512-5dcWxm23+VAoz+awKmBaiBvzox8+RqMgFhi7UvX9DHZr2HdxHXM/Wrf8cfKpsW37RNrvtPn6hSwNqurSILbmJw=="], + + "lodash.isboolean": ["lodash.isboolean@3.0.3", "", {}, "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg=="], + + "lodash.isequal": ["lodash.isequal@4.5.0", "", {}, "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ=="], + + "lodash.isfunction": ["lodash.isfunction@3.0.9", "", {}, "sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw=="], + + "lodash.isnil": ["lodash.isnil@4.0.0", "", {}, "sha512-up2Mzq3545mwVnMhTDMdfoG1OurpA/s5t88JmQX809eH3C8491iu2sfKhTfhQtKY78oPNhiaHJUpT/dUDAAtng=="], + + "lodash.isplainobject": ["lodash.isplainobject@4.0.6", "", {}, "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA=="], + + "lodash.isundefined": ["lodash.isundefined@3.0.1", "", {}, "sha512-MXB1is3s899/cD8jheYYE2V9qTHwKvt+npCwpD+1Sxm3Q3cECXCiYHjeHWXNwr6Q0SOBPrYUDxendrO6goVTEA=="], + + "lodash.union": ["lodash.union@4.6.0", "", {}, "sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw=="], + + "lodash.uniq": ["lodash.uniq@4.5.0", "", {}, "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ=="], + + "lucide-vue-next": ["lucide-vue-next@0.563.0", "", { "peerDependencies": { "vue": ">=3.0.1" } }, "sha512-zsE/lCKtmaa7bGfhSpN84br1K9YoQ5pCN+2oKWjQQG3Lo6ufUUKBuHSjNFI6RvUevxaajNXb8XwFUKeTXG3sIA=="], + + "magic-string": ["magic-string@0.30.21", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.5" } }, "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ=="], + + "minimatch": ["minimatch@5.1.9", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw=="], + + "mitt": ["mitt@3.0.1", "", {}, "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw=="], + + "mkdirp": ["mkdirp@3.0.1", "", { "bin": { "mkdirp": "dist/cjs/src/bin.js" } }, "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg=="], + + "motion-dom": ["motion-dom@12.34.3", "", { "dependencies": { "motion-utils": "^12.29.2" } }, "sha512-sYgFe+pR9aIM7o4fhs2aXtOI+oqlUd33N9Yoxcgo1Fv7M20sRkHtCmzE/VRNIcq7uNJ+qio+Xubt1FXH3pQ+eQ=="], + + "motion-utils": ["motion-utils@12.29.2", "", {}, "sha512-G3kc34H2cX2gI63RqU+cZq+zWRRPSsNIOjpdl9TN4AQwC4sgwYPl/Q/Obf/d53nOm569T0fYK+tcoSV50BWx8A=="], + + "motion-v": ["motion-v@2.0.0", "", { "dependencies": { "framer-motion": "^12.29.2", "hey-listen": "^1.0.8", "motion-dom": "^12.29.2", "motion-utils": "^12.29.2" }, "peerDependencies": { "@vueuse/core": ">=10.0.0", "vue": ">=3.0.0" } }, "sha512-oQuQMrPhti+Zps6OosOaW3b/eqzaGAuwI54XHJKq/dIWtQWcNzfyhTo4VB5xmp7yLN+3BE9FKF6skLsynfgbHQ=="], + + "muggle-string": ["muggle-string@0.4.1", "", {}, "sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ=="], + + "nanoid": ["nanoid@3.3.11", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w=="], + + "normalize-path": ["normalize-path@3.0.0", "", {}, "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="], + + "ohash": ["ohash@2.0.11", "", {}, "sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ=="], + + "once": ["once@1.4.0", "", { "dependencies": { "wrappy": "1" } }, "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w=="], + + "pako": ["pako@1.0.11", "", {}, "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw=="], + + "path-browserify": ["path-browserify@1.0.1", "", {}, "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g=="], + + "path-is-absolute": ["path-is-absolute@1.0.1", "", {}, "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg=="], + + "perfect-debounce": ["perfect-debounce@1.0.0", "", {}, "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA=="], + + "picocolors": ["picocolors@1.1.1", "", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="], + + "picomatch": ["picomatch@4.0.3", "", {}, "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q=="], + + "pinia": ["pinia@3.0.4", "", { "dependencies": { "@vue/devtools-api": "^7.7.7" }, "peerDependencies": { "typescript": ">=4.5.0", "vue": "^3.5.11" }, "optionalPeers": ["typescript"] }, "sha512-l7pqLUFTI/+ESXn6k3nu30ZIzW5E2WZF/LaHJEpoq6ElcLD+wduZoB2kBN19du6K/4FDpPMazY2wJr+IndBtQw=="], + + "pinia-plugin-persistedstate": ["pinia-plugin-persistedstate@4.7.1", "", { "dependencies": { "defu": "^6.1.4" }, "peerDependencies": { "@nuxt/kit": ">=3.0.0", "@pinia/nuxt": ">=0.10.0", "pinia": ">=3.0.0" }, "optionalPeers": ["@nuxt/kit", "@pinia/nuxt", "pinia"] }, "sha512-WHOqh2esDlR3eAaknPbqXrkkj0D24h8shrDPqysgCFR6ghqP/fpFfJmMPJp0gETHsvrh9YNNg6dQfo2OEtDnIQ=="], + + "postcss": ["postcss@8.5.6", "", { "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg=="], + + "process-nextick-args": ["process-nextick-args@2.0.1", "", {}, "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="], + + "readable-stream": ["readable-stream@3.6.2", "", { "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" } }, "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA=="], + + "readdir-glob": ["readdir-glob@1.1.3", "", { "dependencies": { "minimatch": "^5.1.0" } }, "sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA=="], + + "reka-ui": ["reka-ui@2.8.2", "", { "dependencies": { "@floating-ui/dom": "^1.6.13", "@floating-ui/vue": "^1.1.6", "@internationalized/date": "^3.5.0", "@internationalized/number": "^3.5.0", "@tanstack/vue-virtual": "^3.12.0", "@vueuse/core": "^14.1.0", "@vueuse/shared": "^14.1.0", "aria-hidden": "^1.2.4", "defu": "^6.1.4", "ohash": "^2.0.11" }, "peerDependencies": { "vue": ">= 3.2.0" } }, "sha512-8lTKcJhmG+D3UyJxhBnNnW/720sLzm0pbA9AC1MWazmJ5YchJAyTSl+O00xP/kxBmEN0fw5JqWVHguiFmsGjzA=="], + + "rfdc": ["rfdc@1.4.1", "", {}, "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA=="], + + "rimraf": ["rimraf@2.7.1", "", { "dependencies": { "glob": "^7.1.3" }, "bin": { "rimraf": "./bin.js" } }, "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w=="], + + "rolldown": ["rolldown@1.0.0-rc.5", "", { "dependencies": { "@oxc-project/types": "=0.114.0", "@rolldown/pluginutils": "1.0.0-rc.5" }, "optionalDependencies": { "@rolldown/binding-android-arm64": "1.0.0-rc.5", "@rolldown/binding-darwin-arm64": "1.0.0-rc.5", "@rolldown/binding-darwin-x64": "1.0.0-rc.5", "@rolldown/binding-freebsd-x64": "1.0.0-rc.5", "@rolldown/binding-linux-arm-gnueabihf": "1.0.0-rc.5", "@rolldown/binding-linux-arm64-gnu": "1.0.0-rc.5", "@rolldown/binding-linux-arm64-musl": "1.0.0-rc.5", "@rolldown/binding-linux-x64-gnu": "1.0.0-rc.5", "@rolldown/binding-linux-x64-musl": "1.0.0-rc.5", "@rolldown/binding-openharmony-arm64": "1.0.0-rc.5", "@rolldown/binding-wasm32-wasi": "1.0.0-rc.5", "@rolldown/binding-win32-arm64-msvc": "1.0.0-rc.5", "@rolldown/binding-win32-x64-msvc": "1.0.0-rc.5" }, "bin": { "rolldown": "bin/cli.mjs" } }, "sha512-0AdalTs6hNTioaCYIkAa7+xsmHBfU5hCNclZnM/lp7lGGDuUOb6N4BVNtwiomybbencDjq/waKjTImqiGCs5sw=="], + + "safe-buffer": ["safe-buffer@5.1.2", "", {}, "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="], + + "saxes": ["saxes@5.0.1", "", { "dependencies": { "xmlchars": "^2.2.0" } }, "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw=="], + + "setimmediate": ["setimmediate@1.0.5", "", {}, "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA=="], + + "sortablejs": ["sortablejs@1.14.0", "", {}, "sha512-pBXvQCs5/33fdN1/39pPL0NZF20LeRbLQ5jtnheIPN9JQAaufGjKdWduZn4U7wCtVuzKhmRkI0DFYHYRbB2H1w=="], + + "source-map-js": ["source-map-js@1.2.1", "", {}, "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="], + + "speakingurl": ["speakingurl@14.0.1", "", {}, "sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ=="], + + "string_decoder": ["string_decoder@1.3.0", "", { "dependencies": { "safe-buffer": "~5.2.0" } }, "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA=="], + + "superjson": ["superjson@2.2.6", "", { "dependencies": { "copy-anything": "^4" } }, "sha512-H+ue8Zo4vJmV2nRjpx86P35lzwDT3nItnIsocgumgr0hHMQ+ZGq5vrERg9kJBo5AWGmxZDhzDo+WVIJqkB0cGA=="], + + "tailwind-merge": ["tailwind-merge@3.5.0", "", {}, "sha512-I8K9wewnVDkL1NTGoqWmVEIlUcB9gFriAEkXkfCjX5ib8ezGxtR3xD7iZIxrfArjEsH7F1CHD4RFUtxefdqV/A=="], + + "tailwindcss": ["tailwindcss@4.2.0", "", {}, "sha512-yYzTZ4++b7fNYxFfpnberEEKu43w44aqDMNM9MHMmcKuCH7lL8jJ4yJ7LGHv7rSwiqM0nkiobF9I6cLlpS2P7Q=="], + + "tapable": ["tapable@2.3.0", "", {}, "sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg=="], + + "tar-stream": ["tar-stream@2.2.0", "", { "dependencies": { "bl": "^4.0.3", "end-of-stream": "^1.4.1", "fs-constants": "^1.0.0", "inherits": "^2.0.3", "readable-stream": "^3.1.1" } }, "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ=="], + + "tinyglobby": ["tinyglobby@0.2.15", "", { "dependencies": { "fdir": "^6.5.0", "picomatch": "^4.0.3" } }, "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ=="], + + "tmp": ["tmp@0.2.5", "", {}, "sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow=="], + + "traverse": ["traverse@0.3.9", "", {}, "sha512-iawgk0hLP3SxGKDfnDJf8wTz4p2qImnyihM5Hh/sGvQ3K37dPi/w8sRhdNIxYA1TwFwc5mDhIJq+O0RsvXBKdQ=="], + + "tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], + + "tw-animate-css": ["tw-animate-css@1.4.0", "", {}, "sha512-7bziOlRqH0hJx80h/3mbicLW7o8qLsH5+RaLR2t+OHM3D0JlWGODQKQ4cxbK7WlvmUxpcj6Kgu6EKqjrGFe3QQ=="], + + "typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + + "undici-types": ["undici-types@7.16.0", "", {}, "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw=="], + + "unzipper": ["unzipper@0.10.14", "", { "dependencies": { "big-integer": "^1.6.17", "binary": "~0.3.0", "bluebird": "~3.4.1", "buffer-indexof-polyfill": "~1.0.0", "duplexer2": "~0.1.4", "fstream": "^1.0.12", "graceful-fs": "^4.2.2", "listenercount": "~1.0.1", "readable-stream": "~2.3.6", "setimmediate": "~1.0.4" } }, "sha512-ti4wZj+0bQTiX2KmKWuwj7lhV+2n//uXEotUmGuQqrbVZSEGFMbI68+c6JCQ8aAmUWYvtHEz2A8K6wXvueR/6g=="], + + "util-deprecate": ["util-deprecate@1.0.2", "", {}, "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="], + + "uuid": ["uuid@8.3.2", "", { "bin": { "uuid": "dist/bin/uuid" } }, "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg=="], + + "vite": ["vite@8.0.0-beta.15", "", { "dependencies": { "@oxc-project/runtime": "0.114.0", "lightningcss": "^1.31.1", "picomatch": "^4.0.3", "postcss": "^8.5.6", "rolldown": "1.0.0-rc.5", "tinyglobby": "^0.2.15" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", "@vitejs/devtools": "^0.0.0-alpha.31", "esbuild": "^0.27.0", "jiti": ">=1.21.0", "less": "^4.0.0", "sass": "^1.70.0", "sass-embedded": "^1.70.0", "stylus": ">=0.54.8", "sugarss": "^5.0.0", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "@vitejs/devtools", "esbuild", "jiti", "less", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-RHX7IvsJlEfjyA1rS7MY0UsmF91etdLAamslHR5lfuO3W/BXRdXm2tRE64ztpSPZbKqB4wAAZ0AwtF6QzfKZLA=="], + + "vscode-uri": ["vscode-uri@3.1.0", "", {}, "sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ=="], + + "vue": ["vue@3.5.28", "", { "dependencies": { "@vue/compiler-dom": "3.5.28", "@vue/compiler-sfc": "3.5.28", "@vue/runtime-dom": "3.5.28", "@vue/server-renderer": "3.5.28", "@vue/shared": "3.5.28" }, "peerDependencies": { "typescript": "*" }, "optionalPeers": ["typescript"] }, "sha512-BRdrNfeoccSoIZeIhyPBfvWSLFP4q8J3u8Ju8Ug5vu3LdD+yTM13Sg4sKtljxozbnuMu1NB1X5HBHRYUzFocKg=="], + + "vue-demi": ["vue-demi@0.14.10", "", { "peerDependencies": { "@vue/composition-api": "^1.0.0-rc.1", "vue": "^3.0.0-0 || ^2.6.0" }, "optionalPeers": ["@vue/composition-api"], "bin": { "vue-demi-fix": "bin/vue-demi-fix.js", "vue-demi-switch": "bin/vue-demi-switch.js" } }, "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg=="], + + "vue-i18n": ["vue-i18n@11.3.1", "", { "dependencies": { "@intlify/core-base": "11.3.1", "@intlify/devtools-types": "11.3.1", "@intlify/shared": "11.3.1", "@vue/devtools-api": "^6.5.0" }, "peerDependencies": { "vue": "^3.0.0" } }, "sha512-azq8fhVnCwJAw0iXW7i44h9P+Bj+snNuevBAaJ9bxn0I3YVsRU3deVFPNnTfZ2uxVJefGp83JUmL68ddCPw5Pw=="], + + "vue-tsc": ["vue-tsc@3.2.5", "", { "dependencies": { "@volar/typescript": "2.4.28", "@vue/language-core": "3.2.5" }, "peerDependencies": { "typescript": ">=5.0.0" }, "bin": { "vue-tsc": "bin/vue-tsc.js" } }, "sha512-/htfTCMluQ+P2FISGAooul8kO4JMheOTCbCy4M6dYnYYjqLe3BExZudAua6MSIKSFYQtFOYAll7XobYwcpokGA=="], + + "vuedraggable": ["vuedraggable@4.1.0", "", { "dependencies": { "sortablejs": "1.14.0" }, "peerDependencies": { "vue": "^3.0.1" } }, "sha512-FU5HCWBmsf20GpP3eudURW3WdWTKIbEIQxh9/8GE806hydR9qZqRRxRE3RjqX7PkuLuMQG/A7n3cfj9rCEchww=="], + + "wrappy": ["wrappy@1.0.2", "", {}, "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="], + + "xmlchars": ["xmlchars@2.2.0", "", {}, "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw=="], + + "zip-stream": ["zip-stream@4.1.1", "", { "dependencies": { "archiver-utils": "^3.0.4", "compress-commons": "^4.1.2", "readable-stream": "^3.6.0" } }, "sha512-9qv4rlDiopXg4E69k+vMHjNN63YFMe9sZMrdlvKnCjlCRWeCBswPPMPUfx+ipsAWq1LXHe70RcbaHdJJpS6hyQ=="], + + "@fast-csv/format/@types/node": ["@types/node@14.18.63", "", {}, "sha512-fAtCfv4jJg+ExtXhvCkCqUKZ+4ok/JQk01qDKhL5BDDoS3AxKXhV5/MAVUZyQnSEd2GT92fkgZl0pz0Q0AzcIQ=="], + + "@fast-csv/parse/@types/node": ["@types/node@14.18.63", "", {}, "sha512-fAtCfv4jJg+ExtXhvCkCqUKZ+4ok/JQk01qDKhL5BDDoS3AxKXhV5/MAVUZyQnSEd2GT92fkgZl0pz0Q0AzcIQ=="], + + "@tailwindcss/oxide-wasm32-wasi/@emnapi/core": ["@emnapi/core@1.8.1", "", { "dependencies": { "@emnapi/wasi-threads": "1.1.0", "tslib": "^2.4.0" }, "bundled": true }, "sha512-AvT9QFpxK0Zd8J0jopedNm+w/2fIzvtPKPjqyw9jwvBaReTTqPBk9Hixaz7KbjimP+QNz605/XnjFcDAL2pqBg=="], + + "@tailwindcss/oxide-wasm32-wasi/@emnapi/runtime": ["@emnapi/runtime@1.8.1", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg=="], + + "@tailwindcss/oxide-wasm32-wasi/@emnapi/wasi-threads": ["@emnapi/wasi-threads@1.1.0", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ=="], + + "@tailwindcss/oxide-wasm32-wasi/@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@1.1.1", "", { "dependencies": { "@emnapi/core": "^1.7.1", "@emnapi/runtime": "^1.7.1", "@tybys/wasm-util": "^0.10.1" }, "bundled": true }, "sha512-p64ah1M1ld8xjWv3qbvFwHiFVWrq1yFvV4f7w+mzaqiR4IlSgkqhcRdHwsGgomwzBH51sRY4NEowLxnaBjcW/A=="], + + "@tailwindcss/oxide-wasm32-wasi/@tybys/wasm-util": ["@tybys/wasm-util@0.10.1", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg=="], + + "@tailwindcss/oxide-wasm32-wasi/tslib": ["tslib@2.8.1", "", { "bundled": true }, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], + + "archiver-utils/readable-stream": ["readable-stream@2.3.8", "", { "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", "isarray": "~1.0.0", "process-nextick-args": "~2.0.0", "safe-buffer": "~5.1.1", "string_decoder": "~1.1.1", "util-deprecate": "~1.0.1" } }, "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA=="], + + "duplexer2/readable-stream": ["readable-stream@2.3.8", "", { "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", "isarray": "~1.0.0", "process-nextick-args": "~2.0.0", "safe-buffer": "~5.1.1", "string_decoder": "~1.1.1", "util-deprecate": "~1.0.1" } }, "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA=="], + + "glob/minimatch": ["minimatch@3.1.5", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w=="], + + "jszip/lie": ["lie@3.3.0", "", { "dependencies": { "immediate": "~3.0.5" } }, "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ=="], + + "jszip/readable-stream": ["readable-stream@2.3.8", "", { "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", "isarray": "~1.0.0", "process-nextick-args": "~2.0.0", "safe-buffer": "~5.1.1", "string_decoder": "~1.1.1", "util-deprecate": "~1.0.1" } }, "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA=="], + + "lazystream/readable-stream": ["readable-stream@2.3.8", "", { "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", "isarray": "~1.0.0", "process-nextick-args": "~2.0.0", "safe-buffer": "~5.1.1", "string_decoder": "~1.1.1", "util-deprecate": "~1.0.1" } }, "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA=="], + + "reka-ui/@internationalized/date": ["@internationalized/date@3.11.0", "", { "dependencies": { "@swc/helpers": "^0.5.0" } }, "sha512-BOx5huLAWhicM9/ZFs84CzP+V3gBW6vlpM02yzsdYC7TGlZJX1OJiEEHcSayF00Z+3jLlm4w79amvSt6RqKN3Q=="], + + "rolldown/@rolldown/pluginutils": ["@rolldown/pluginutils@1.0.0-rc.5", "", {}, "sha512-RxlLX/DPoarZ9PtxVrQgZhPoor987YtKQqCo5zkjX+0S0yLJ7Vv515Wk6+xtTL67VONKJKxETWZwuZjss2idYw=="], + + "string_decoder/safe-buffer": ["safe-buffer@5.2.1", "", {}, "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="], + + "unzipper/readable-stream": ["readable-stream@2.3.8", "", { "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", "isarray": "~1.0.0", "process-nextick-args": "~2.0.0", "safe-buffer": "~5.1.1", "string_decoder": "~1.1.1", "util-deprecate": "~1.0.1" } }, "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA=="], + + "vue-i18n/@vue/devtools-api": ["@vue/devtools-api@6.6.4", "", {}, "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g=="], + + "zip-stream/archiver-utils": ["archiver-utils@3.0.4", "", { "dependencies": { "glob": "^7.2.3", "graceful-fs": "^4.2.0", "lazystream": "^1.0.0", "lodash.defaults": "^4.2.0", "lodash.difference": "^4.5.0", "lodash.flatten": "^4.4.0", "lodash.isplainobject": "^4.0.6", "lodash.union": "^4.6.0", "normalize-path": "^3.0.0", "readable-stream": "^3.6.0" } }, "sha512-KVgf4XQVrTjhyWmx6cte4RxonPLR9onExufI1jhvw/MQ4BB6IsZD5gT8Lq+u/+pRkWna/6JoHpiQioaqFP5Rzw=="], + + "archiver-utils/readable-stream/string_decoder": ["string_decoder@1.1.1", "", { "dependencies": { "safe-buffer": "~5.1.0" } }, "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg=="], + + "duplexer2/readable-stream/string_decoder": ["string_decoder@1.1.1", "", { "dependencies": { "safe-buffer": "~5.1.0" } }, "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg=="], + + "glob/minimatch/brace-expansion": ["brace-expansion@1.1.12", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg=="], + + "jszip/readable-stream/string_decoder": ["string_decoder@1.1.1", "", { "dependencies": { "safe-buffer": "~5.1.0" } }, "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg=="], + + "lazystream/readable-stream/string_decoder": ["string_decoder@1.1.1", "", { "dependencies": { "safe-buffer": "~5.1.0" } }, "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg=="], + + "unzipper/readable-stream/string_decoder": ["string_decoder@1.1.1", "", { "dependencies": { "safe-buffer": "~5.1.0" } }, "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg=="], + } +} diff --git a/components.json b/components.json new file mode 100644 index 0000000..09b9b8c --- /dev/null +++ b/components.json @@ -0,0 +1,21 @@ +{ + "$schema": "https://shadcn-vue.com/schema.json", + "style": "new-york", + "typescript": true, + "tailwind": { + "config": "", + "css": "src/style.css", + "baseColor": "neutral", + "cssVariables": true, + "prefix": "" + }, + "iconLibrary": "lucide", + "aliases": { + "components": "@/components", + "utils": "@/lib/utils", + "ui": "@/components/ui", + "lib": "@/lib", + "composables": "@/composables" + }, + "registries": {} +} diff --git a/docker/dist-server/go.mod b/docker/dist-server/go.mod new file mode 100644 index 0000000..80bc90b --- /dev/null +++ b/docker/dist-server/go.mod @@ -0,0 +1,3 @@ +module dist-server + +go 1.24 diff --git a/docker/dist-server/main.go b/docker/dist-server/main.go new file mode 100644 index 0000000..adf127d --- /dev/null +++ b/docker/dist-server/main.go @@ -0,0 +1,69 @@ +package main + +import ( + "log" + "net/http" + "os" + "path/filepath" + "strings" +) + +const ( + defaultPort = "80" + webRoot = "/www" + indexName = "index.html" +) + +func main() { + port := strings.TrimSpace(os.Getenv("PORT")) + if port == "" { + port = defaultPort + } + + server := &http.Server{ + Addr: ":" + port, + Handler: http.HandlerFunc(serve), + } + + log.Printf("dist server listening on :%s", port) + if err := server.ListenAndServe(); err != nil && err != http.ErrServerClosed { + log.Fatal(err) + } +} + +func serve(w http.ResponseWriter, r *http.Request) { + requestPath := strings.TrimPrefix(filepath.Clean("/"+r.URL.Path), "/") + if requestPath == "." || requestPath == "" { + serveIndex(w, r) + return + } + + fullPath := filepath.Join(webRoot, filepath.FromSlash(requestPath)) + if info, err := os.Stat(fullPath); err == nil && !info.IsDir() { + applyAssetCacheHeaders(w, requestPath) + http.ServeFile(w, r, fullPath) + return + } + + serveIndex(w, r) +} + +func serveIndex(w http.ResponseWriter, r *http.Request) { + w.Header().Set("Cache-Control", "no-cache") + w.Header().Set("Pragma", "no-cache") + w.Header().Set("Expires", "0") + http.ServeFile(w, r, filepath.Join(webRoot, indexName)) +} + +func applyAssetCacheHeaders(w http.ResponseWriter, requestPath string) { + if strings.EqualFold(requestPath, indexName) { + w.Header().Set("Cache-Control", "no-cache") + w.Header().Set("Pragma", "no-cache") + w.Header().Set("Expires", "0") + return + } + + if strings.HasPrefix(requestPath, "static/") { + w.Header().Set("Cache-Control", "public, max-age=31536000, immutable") + } +} diff --git a/index.html b/index.html new file mode 100644 index 0000000..332cdab --- /dev/null +++ b/index.html @@ -0,0 +1,34 @@ + + + + + + + 联众咨询 + + +
+ + + + diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..efdf609 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,2195 @@ +{ + "name": "my-vue-app", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "my-vue-app", + "version": "0.0.0", + "dependencies": { + "@ag-grid-community/locale": "^35.1.0", + "@iconify/vue": "^5.0.0", + "@internationalized/date": "^3.12.0", + "@internationalized/number": "^3.6.5", + "@noble/ciphers": "^2.1.1", + "@noble/hashes": "^2.0.1", + "@tailwindcss/vite": "^4.1.18", + "@vueuse/core": "^14.2.1", + "ag-grid-enterprise": "^35.1.0", + "ag-grid-vue3": "^35.1.0", + "class-variance-authority": "^0.7.1", + "clsx": "^2.1.1", + "decimal.js": "^10.6.0", + "exceljs": "^4.4.0", + "localforage": "^1.10.0", + "lucide-vue-next": "^0.563.0", + "motion-v": "^2.0.0", + "pinia": "^3.0.4", + "pinia-plugin-persistedstate": "^4.7.1", + "reka-ui": "^2.8.0", + "tailwind-merge": "^3.4.0", + "tailwindcss": "^4.1.18", + "vue": "^3.5.25", + "vue-i18n": "^11.3.0", + "vuedraggable": "^4.1.0" + }, + "devDependencies": { + "@types/bun": "latest", + "@types/node": "^24.10.1", + "@vitejs/plugin-vue": "^6.0.2", + "@vue/tsconfig": "^0.8.1", + "tw-animate-css": "^1.4.0", + "typescript": "~5.9.3", + "vite": "^8.0.0-beta.13", + "vue-tsc": "^3.1.5" + } + }, + "node_modules/@ag-grid-community/locale": { + "version": "35.1.0", + "license": "MIT" + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.28.5", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.29.0", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/types": { + "version": "7.29.0", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@fast-csv/format": { + "version": "4.3.5", + "license": "MIT", + "dependencies": { + "@types/node": "^14.0.1", + "lodash.escaperegexp": "^4.1.2", + "lodash.isboolean": "^3.0.3", + "lodash.isequal": "^4.5.0", + "lodash.isfunction": "^3.0.9", + "lodash.isnil": "^4.0.0" + } + }, + "node_modules/@fast-csv/format/node_modules/@types/node": { + "version": "14.18.63", + "license": "MIT" + }, + "node_modules/@fast-csv/parse": { + "version": "4.3.6", + "license": "MIT", + "dependencies": { + "@types/node": "^14.0.1", + "lodash.escaperegexp": "^4.1.2", + "lodash.groupby": "^4.6.0", + "lodash.isfunction": "^3.0.9", + "lodash.isnil": "^4.0.0", + "lodash.isundefined": "^3.0.1", + "lodash.uniq": "^4.5.0" + } + }, + "node_modules/@fast-csv/parse/node_modules/@types/node": { + "version": "14.18.63", + "license": "MIT" + }, + "node_modules/@floating-ui/core": { + "version": "1.7.4", + "license": "MIT", + "dependencies": { + "@floating-ui/utils": "^0.2.10" + } + }, + "node_modules/@floating-ui/dom": { + "version": "1.7.5", + "license": "MIT", + "dependencies": { + "@floating-ui/core": "^1.7.4", + "@floating-ui/utils": "^0.2.10" + } + }, + "node_modules/@floating-ui/utils": { + "version": "0.2.10", + "license": "MIT" + }, + "node_modules/@floating-ui/vue": { + "version": "1.1.10", + "license": "MIT", + "dependencies": { + "@floating-ui/dom": "^1.7.5", + "@floating-ui/utils": "^0.2.10", + "vue-demi": ">=0.13.0" + } + }, + "node_modules/@iconify/types": { + "version": "2.0.0", + "license": "MIT" + }, + "node_modules/@iconify/vue": { + "version": "5.0.0", + "license": "MIT", + "dependencies": { + "@iconify/types": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/cyberalien" + }, + "peerDependencies": { + "vue": ">=3" + } + }, + "node_modules/@internationalized/date": { + "version": "3.12.0", + "license": "Apache-2.0", + "dependencies": { + "@swc/helpers": "^0.5.0" + } + }, + "node_modules/@internationalized/number": { + "version": "3.6.5", + "license": "Apache-2.0", + "dependencies": { + "@swc/helpers": "^0.5.0" + } + }, + "node_modules/@intlify/core-base": { + "version": "11.3.0", + "resolved": "https://registry.npmjs.org/@intlify/core-base/-/core-base-11.3.0.tgz", + "integrity": "sha512-NNX5jIwF4TJBe7RtSKDMOA6JD9mp2mRcBHAwt2X+Q8PvnZub0yj5YYXlFu2AcESdgQpEv/5Yx2uOCV/yh7YkZg==", + "license": "MIT", + "dependencies": { + "@intlify/devtools-types": "11.3.0", + "@intlify/message-compiler": "11.3.0", + "@intlify/shared": "11.3.0" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/kazupon" + } + }, + "node_modules/@intlify/devtools-types": { + "version": "11.3.0", + "resolved": "https://registry.npmjs.org/@intlify/devtools-types/-/devtools-types-11.3.0.tgz", + "integrity": "sha512-G9CNL4WpANWVdUjubOIIS7/D2j/0j+1KJmhBJxHilWNKr9mmt3IjFV3Hq4JoBP23uOoC5ynxz/FHZ42M+YxfGw==", + "license": "MIT", + "dependencies": { + "@intlify/core-base": "11.3.0", + "@intlify/shared": "11.3.0" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/kazupon" + } + }, + "node_modules/@intlify/message-compiler": { + "version": "11.3.0", + "resolved": "https://registry.npmjs.org/@intlify/message-compiler/-/message-compiler-11.3.0.tgz", + "integrity": "sha512-RAJp3TMsqohg/Wa7bVF3cChRhecSYBLrTCQSj7j0UtWVFLP+6iEJoE2zb7GU5fp+fmG5kCbUdzhmlAUCWXiUJw==", + "license": "MIT", + "dependencies": { + "@intlify/shared": "11.3.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/kazupon" + } + }, + "node_modules/@intlify/shared": { + "version": "11.3.0", + "resolved": "https://registry.npmjs.org/@intlify/shared/-/shared-11.3.0.tgz", + "integrity": "sha512-LC6P/uay7rXL5zZ5+5iRJfLs/iUN8apu9tm8YqQVmW3Uq3X4A0dOFUIDuAmB7gAC29wTHOS3EiN/IosNSz0eNQ==", + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/kazupon" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@noble/ciphers": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@noble/ciphers/-/ciphers-2.1.1.tgz", + "integrity": "sha512-bysYuiVfhxNJuldNXlFEitTVdNnYUc+XNJZd7Qm2a5j1vZHgY+fazadNFWFaMK/2vye0JVlxV3gHmC0WDfAOQw==", + "license": "MIT", + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@noble/hashes": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-2.0.1.tgz", + "integrity": "sha512-XlOlEbQcE9fmuXxrVTXCTlG2nlRXa9Rj3rr5Ue/+tX+nmkgbX720YHh0VR3hBF9xDvwnb8D2shVGOwNx+ulArw==", + "license": "MIT", + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@oxc-project/runtime": { + "version": "0.114.0", + "dev": true, + "license": "MIT", + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-project/types": { + "version": "0.114.0", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/Boshen" + } + }, + "node_modules/@rolldown/binding-win32-x64-msvc": { + "version": "1.0.0-rc.5", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.0-rc.2", + "dev": true, + "license": "MIT" + }, + "node_modules/@swc/helpers": { + "version": "0.5.18", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.8.0" + } + }, + "node_modules/@tailwindcss/node": { + "version": "4.2.0", + "license": "MIT", + "dependencies": { + "@jridgewell/remapping": "^2.3.5", + "enhanced-resolve": "^5.19.0", + "jiti": "^2.6.1", + "lightningcss": "1.31.1", + "magic-string": "^0.30.21", + "source-map-js": "^1.2.1", + "tailwindcss": "4.2.0" + } + }, + "node_modules/@tailwindcss/oxide": { + "version": "4.2.0", + "license": "MIT", + "engines": { + "node": ">= 20" + }, + "optionalDependencies": { + "@tailwindcss/oxide-android-arm64": "4.2.0", + "@tailwindcss/oxide-darwin-arm64": "4.2.0", + "@tailwindcss/oxide-darwin-x64": "4.2.0", + "@tailwindcss/oxide-freebsd-x64": "4.2.0", + "@tailwindcss/oxide-linux-arm-gnueabihf": "4.2.0", + "@tailwindcss/oxide-linux-arm64-gnu": "4.2.0", + "@tailwindcss/oxide-linux-arm64-musl": "4.2.0", + "@tailwindcss/oxide-linux-x64-gnu": "4.2.0", + "@tailwindcss/oxide-linux-x64-musl": "4.2.0", + "@tailwindcss/oxide-wasm32-wasi": "4.2.0", + "@tailwindcss/oxide-win32-arm64-msvc": "4.2.0", + "@tailwindcss/oxide-win32-x64-msvc": "4.2.0" + } + }, + "node_modules/@tailwindcss/oxide-win32-x64-msvc": { + "version": "4.2.0", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/vite": { + "version": "4.2.0", + "license": "MIT", + "dependencies": { + "@tailwindcss/node": "4.2.0", + "@tailwindcss/oxide": "4.2.0", + "tailwindcss": "4.2.0" + }, + "peerDependencies": { + "vite": "^5.2.0 || ^6 || ^7" + } + }, + "node_modules/@tanstack/virtual-core": { + "version": "3.13.18", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + } + }, + "node_modules/@tanstack/vue-virtual": { + "version": "3.13.18", + "license": "MIT", + "dependencies": { + "@tanstack/virtual-core": "3.13.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "vue": "^2.7.0 || ^3.0.0" + } + }, + "node_modules/@types/bun": { + "version": "1.3.11", + "resolved": "https://registry.npmjs.org/@types/bun/-/bun-1.3.11.tgz", + "integrity": "sha512-5vPne5QvtpjGpsGYXiFyycfpDF2ECyPcTSsFBMa0fraoxiQyMJ3SmuQIGhzPg2WJuWxVBoxWJ2kClYTcw/4fAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "bun-types": "1.3.11" + } + }, + "node_modules/@types/node": { + "version": "24.10.13", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~7.16.0" + } + }, + "node_modules/@types/web-bluetooth": { + "version": "0.0.21", + "license": "MIT" + }, + "node_modules/@vitejs/plugin-vue": { + "version": "6.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@rolldown/pluginutils": "1.0.0-rc.2" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "peerDependencies": { + "vite": "^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0", + "vue": "^3.2.25" + } + }, + "node_modules/@volar/language-core": { + "version": "2.4.28", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/source-map": "2.4.28" + } + }, + "node_modules/@volar/source-map": { + "version": "2.4.28", + "dev": true, + "license": "MIT" + }, + "node_modules/@volar/typescript": { + "version": "2.4.28", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/language-core": "2.4.28", + "path-browserify": "^1.0.1", + "vscode-uri": "^3.0.8" + } + }, + "node_modules/@vue/compiler-core": { + "version": "3.5.28", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.0", + "@vue/shared": "3.5.28", + "entities": "^7.0.1", + "estree-walker": "^2.0.2", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-dom": { + "version": "3.5.28", + "license": "MIT", + "dependencies": { + "@vue/compiler-core": "3.5.28", + "@vue/shared": "3.5.28" + } + }, + "node_modules/@vue/compiler-sfc": { + "version": "3.5.28", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.0", + "@vue/compiler-core": "3.5.28", + "@vue/compiler-dom": "3.5.28", + "@vue/compiler-ssr": "3.5.28", + "@vue/shared": "3.5.28", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.21", + "postcss": "^8.5.6", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-ssr": { + "version": "3.5.28", + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.5.28", + "@vue/shared": "3.5.28" + } + }, + "node_modules/@vue/devtools-api": { + "version": "7.7.9", + "license": "MIT", + "dependencies": { + "@vue/devtools-kit": "^7.7.9" + } + }, + "node_modules/@vue/devtools-kit": { + "version": "7.7.9", + "license": "MIT", + "dependencies": { + "@vue/devtools-shared": "^7.7.9", + "birpc": "^2.3.0", + "hookable": "^5.5.3", + "mitt": "^3.0.1", + "perfect-debounce": "^1.0.0", + "speakingurl": "^14.0.1", + "superjson": "^2.2.2" + } + }, + "node_modules/@vue/devtools-shared": { + "version": "7.7.9", + "license": "MIT", + "dependencies": { + "rfdc": "^1.4.1" + } + }, + "node_modules/@vue/language-core": { + "version": "3.2.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/language-core": "2.4.28", + "@vue/compiler-dom": "^3.5.0", + "@vue/shared": "^3.5.0", + "alien-signals": "^3.0.0", + "muggle-string": "^0.4.1", + "path-browserify": "^1.0.1", + "picomatch": "^4.0.2" + } + }, + "node_modules/@vue/reactivity": { + "version": "3.5.28", + "license": "MIT", + "dependencies": { + "@vue/shared": "3.5.28" + } + }, + "node_modules/@vue/runtime-core": { + "version": "3.5.28", + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.5.28", + "@vue/shared": "3.5.28" + } + }, + "node_modules/@vue/runtime-dom": { + "version": "3.5.28", + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.5.28", + "@vue/runtime-core": "3.5.28", + "@vue/shared": "3.5.28", + "csstype": "^3.2.3" + } + }, + "node_modules/@vue/server-renderer": { + "version": "3.5.28", + "license": "MIT", + "dependencies": { + "@vue/compiler-ssr": "3.5.28", + "@vue/shared": "3.5.28" + }, + "peerDependencies": { + "vue": "3.5.28" + } + }, + "node_modules/@vue/shared": { + "version": "3.5.28", + "license": "MIT" + }, + "node_modules/@vue/tsconfig": { + "version": "0.8.1", + "dev": true, + "license": "MIT", + "peerDependencies": { + "typescript": "5.x", + "vue": "^3.4.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + }, + "vue": { + "optional": true + } + } + }, + "node_modules/@vueuse/core": { + "version": "14.2.1", + "license": "MIT", + "dependencies": { + "@types/web-bluetooth": "^0.0.21", + "@vueuse/metadata": "14.2.1", + "@vueuse/shared": "14.2.1" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vue": "^3.5.0" + } + }, + "node_modules/@vueuse/metadata": { + "version": "14.2.1", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/shared": { + "version": "14.2.1", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vue": "^3.5.0" + } + }, + "node_modules/ag-charts-community": { + "version": "13.1.0", + "license": "MIT", + "optional": true, + "dependencies": { + "ag-charts-core": "13.1.0", + "ag-charts-locale": "13.1.0", + "ag-charts-types": "13.1.0" + } + }, + "node_modules/ag-charts-core": { + "version": "13.1.0", + "license": "MIT", + "optional": true, + "dependencies": { + "ag-charts-types": "13.1.0" + } + }, + "node_modules/ag-charts-enterprise": { + "version": "13.1.0", + "license": "Commercial", + "optional": true, + "dependencies": { + "ag-charts-community": "13.1.0", + "ag-charts-core": "13.1.0" + } + }, + "node_modules/ag-charts-locale": { + "version": "13.1.0", + "license": "MIT", + "optional": true + }, + "node_modules/ag-charts-types": { + "version": "13.1.0", + "license": "MIT" + }, + "node_modules/ag-grid-community": { + "version": "35.1.0", + "license": "MIT", + "dependencies": { + "ag-charts-types": "13.1.0" + } + }, + "node_modules/ag-grid-enterprise": { + "version": "35.1.0", + "license": "Commercial", + "dependencies": { + "ag-grid-community": "35.1.0" + }, + "optionalDependencies": { + "ag-charts-community": "13.1.0", + "ag-charts-enterprise": "13.1.0" + } + }, + "node_modules/ag-grid-vue3": { + "version": "35.1.0", + "license": "MIT", + "dependencies": { + "ag-grid-community": "35.1.0" + }, + "peerDependencies": { + "vue": "^3.5.0" + } + }, + "node_modules/alien-signals": { + "version": "3.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/archiver": { + "version": "5.3.2", + "license": "MIT", + "dependencies": { + "archiver-utils": "^2.1.0", + "async": "^3.2.4", + "buffer-crc32": "^0.2.1", + "readable-stream": "^3.6.0", + "readdir-glob": "^1.1.2", + "tar-stream": "^2.2.0", + "zip-stream": "^4.1.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/archiver-utils": { + "version": "2.1.0", + "license": "MIT", + "dependencies": { + "glob": "^7.1.4", + "graceful-fs": "^4.2.0", + "lazystream": "^1.0.0", + "lodash.defaults": "^4.2.0", + "lodash.difference": "^4.5.0", + "lodash.flatten": "^4.4.0", + "lodash.isplainobject": "^4.0.6", + "lodash.union": "^4.6.0", + "normalize-path": "^3.0.0", + "readable-stream": "^2.0.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/archiver-utils/node_modules/readable-stream": { + "version": "2.3.8", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/archiver-utils/node_modules/readable-stream/node_modules/string_decoder": { + "version": "1.1.1", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/aria-hidden": { + "version": "1.2.6", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/async": { + "version": "3.2.6", + "license": "MIT" + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "license": "MIT" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/big-integer": { + "version": "1.6.52", + "license": "Unlicense", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/binary": { + "version": "0.3.0", + "license": "MIT", + "dependencies": { + "buffers": "~0.1.1", + "chainsaw": "~0.1.0" + } + }, + "node_modules/birpc": { + "version": "2.9.0", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "license": "MIT", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/bluebird": { + "version": "3.4.7", + "license": "MIT" + }, + "node_modules/brace-expansion": { + "version": "2.0.2", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/buffer-indexof-polyfill": { + "version": "1.0.2", + "license": "MIT", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/buffers": { + "version": "0.1.1", + "engines": { + "node": ">=0.2.0" + } + }, + "node_modules/bun-types": { + "version": "1.3.11", + "resolved": "https://registry.npmjs.org/bun-types/-/bun-types-1.3.11.tgz", + "integrity": "sha512-1KGPpoxQWl9f6wcZh57LvrPIInQMn2TQ7jsgxqpRzg+l0QPOFvJVH7HmvHo/AiPgwXy+/Thf6Ov3EdVn1vOabg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/chainsaw": { + "version": "0.1.0", + "license": "MIT/X11", + "dependencies": { + "traverse": ">=0.3.0 <0.4" + } + }, + "node_modules/class-variance-authority": { + "version": "0.7.1", + "license": "Apache-2.0", + "dependencies": { + "clsx": "^2.1.1" + }, + "funding": { + "url": "https://polar.sh/cva" + } + }, + "node_modules/clsx": { + "version": "2.1.1", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/compress-commons": { + "version": "4.1.2", + "license": "MIT", + "dependencies": { + "buffer-crc32": "^0.2.13", + "crc32-stream": "^4.0.2", + "normalize-path": "^3.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "license": "MIT" + }, + "node_modules/copy-anything": { + "version": "4.0.5", + "license": "MIT", + "dependencies": { + "is-what": "^5.2.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "license": "MIT" + }, + "node_modules/crc-32": { + "version": "1.2.2", + "license": "Apache-2.0", + "bin": { + "crc32": "bin/crc32.njs" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/crc32-stream": { + "version": "4.0.3", + "license": "MIT", + "dependencies": { + "crc-32": "^1.2.0", + "readable-stream": "^3.4.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/csstype": { + "version": "3.2.3", + "license": "MIT" + }, + "node_modules/dayjs": { + "version": "1.11.19", + "license": "MIT" + }, + "node_modules/decimal.js": { + "version": "10.6.0", + "license": "MIT" + }, + "node_modules/defu": { + "version": "6.1.4", + "license": "MIT" + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/duplexer2": { + "version": "0.1.4", + "license": "BSD-3-Clause", + "dependencies": { + "readable-stream": "^2.0.2" + } + }, + "node_modules/duplexer2/node_modules/readable-stream": { + "version": "2.3.8", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/duplexer2/node_modules/readable-stream/node_modules/string_decoder": { + "version": "1.1.1", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.5", + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.19.0", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.3.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/entities": { + "version": "7.0.1", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "license": "MIT" + }, + "node_modules/exceljs": { + "version": "4.4.0", + "license": "MIT", + "dependencies": { + "archiver": "^5.0.0", + "dayjs": "^1.8.34", + "fast-csv": "^4.3.1", + "jszip": "^3.10.1", + "readable-stream": "^3.6.0", + "saxes": "^5.0.1", + "tmp": "^0.2.0", + "unzipper": "^0.10.11", + "uuid": "^8.3.0" + }, + "engines": { + "node": ">=8.3.0" + } + }, + "node_modules/fast-csv": { + "version": "4.3.6", + "license": "MIT", + "dependencies": { + "@fast-csv/format": "4.3.5", + "@fast-csv/parse": "4.3.6" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/fdir": { + "version": "6.5.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/framer-motion": { + "version": "12.34.3", + "license": "MIT", + "dependencies": { + "motion-dom": "^12.34.3", + "motion-utils": "^12.29.2", + "tslib": "^2.4.0" + }, + "peerDependencies": { + "@emotion/is-prop-valid": "*", + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@emotion/is-prop-valid": { + "optional": true + }, + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, + "node_modules/fs-constants": { + "version": "1.0.0", + "license": "MIT" + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "license": "ISC" + }, + "node_modules/fstream": { + "version": "1.0.12", + "license": "ISC", + "dependencies": { + "graceful-fs": "^4.1.2", + "inherits": "~2.0.0", + "mkdirp": ">=0.5 0", + "rimraf": "2" + }, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/fstream/node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "license": "MIT", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "3.1.5", + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/glob/node_modules/minimatch/node_modules/brace-expansion": { + "version": "1.1.12", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "license": "ISC" + }, + "node_modules/hey-listen": { + "version": "1.0.8", + "license": "MIT" + }, + "node_modules/hookable": { + "version": "5.5.3", + "license": "MIT" + }, + "node_modules/ieee754": { + "version": "1.2.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/immediate": { + "version": "3.0.6", + "license": "MIT" + }, + "node_modules/inflight": { + "version": "1.0.6", + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "license": "ISC" + }, + "node_modules/is-what": { + "version": "5.5.0", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "license": "MIT" + }, + "node_modules/jiti": { + "version": "2.6.1", + "license": "MIT", + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, + "node_modules/jszip": { + "version": "3.10.1", + "license": "(MIT OR GPL-3.0-or-later)", + "dependencies": { + "lie": "~3.3.0", + "pako": "~1.0.2", + "readable-stream": "~2.3.6", + "setimmediate": "^1.0.5" + } + }, + "node_modules/jszip/node_modules/lie": { + "version": "3.3.0", + "license": "MIT", + "dependencies": { + "immediate": "~3.0.5" + } + }, + "node_modules/jszip/node_modules/readable-stream": { + "version": "2.3.8", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/jszip/node_modules/readable-stream/node_modules/string_decoder": { + "version": "1.1.1", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/lazystream": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "readable-stream": "^2.0.5" + }, + "engines": { + "node": ">= 0.6.3" + } + }, + "node_modules/lazystream/node_modules/readable-stream": { + "version": "2.3.8", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/lazystream/node_modules/readable-stream/node_modules/string_decoder": { + "version": "1.1.1", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/lie": { + "version": "3.1.1", + "license": "MIT", + "dependencies": { + "immediate": "~3.0.5" + } + }, + "node_modules/lightningcss": { + "version": "1.31.1", + "license": "MPL-2.0", + "dependencies": { + "detect-libc": "^2.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-android-arm64": "1.31.1", + "lightningcss-darwin-arm64": "1.31.1", + "lightningcss-darwin-x64": "1.31.1", + "lightningcss-freebsd-x64": "1.31.1", + "lightningcss-linux-arm-gnueabihf": "1.31.1", + "lightningcss-linux-arm64-gnu": "1.31.1", + "lightningcss-linux-arm64-musl": "1.31.1", + "lightningcss-linux-x64-gnu": "1.31.1", + "lightningcss-linux-x64-musl": "1.31.1", + "lightningcss-win32-arm64-msvc": "1.31.1", + "lightningcss-win32-x64-msvc": "1.31.1" + } + }, + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.31.1", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/listenercount": { + "version": "1.0.1", + "license": "ISC" + }, + "node_modules/localforage": { + "version": "1.10.0", + "license": "Apache-2.0", + "dependencies": { + "lie": "3.1.1" + } + }, + "node_modules/lodash.defaults": { + "version": "4.2.0", + "license": "MIT" + }, + "node_modules/lodash.difference": { + "version": "4.5.0", + "license": "MIT" + }, + "node_modules/lodash.escaperegexp": { + "version": "4.1.2", + "license": "MIT" + }, + "node_modules/lodash.flatten": { + "version": "4.4.0", + "license": "MIT" + }, + "node_modules/lodash.groupby": { + "version": "4.6.0", + "license": "MIT" + }, + "node_modules/lodash.isboolean": { + "version": "3.0.3", + "license": "MIT" + }, + "node_modules/lodash.isequal": { + "version": "4.5.0", + "license": "MIT" + }, + "node_modules/lodash.isfunction": { + "version": "3.0.9", + "license": "MIT" + }, + "node_modules/lodash.isnil": { + "version": "4.0.0", + "license": "MIT" + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "license": "MIT" + }, + "node_modules/lodash.isundefined": { + "version": "3.0.1", + "license": "MIT" + }, + "node_modules/lodash.union": { + "version": "4.6.0", + "license": "MIT" + }, + "node_modules/lodash.uniq": { + "version": "4.5.0", + "license": "MIT" + }, + "node_modules/lucide-vue-next": { + "version": "0.563.0", + "license": "ISC", + "peerDependencies": { + "vue": ">=3.0.1" + } + }, + "node_modules/magic-string": { + "version": "0.30.21", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/minimatch": { + "version": "5.1.9", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/mitt": { + "version": "3.0.1", + "license": "MIT" + }, + "node_modules/motion-dom": { + "version": "12.34.3", + "license": "MIT", + "dependencies": { + "motion-utils": "^12.29.2" + } + }, + "node_modules/motion-utils": { + "version": "12.29.2", + "license": "MIT" + }, + "node_modules/motion-v": { + "version": "2.0.0", + "license": "MIT", + "dependencies": { + "framer-motion": "^12.29.2", + "hey-listen": "^1.0.8", + "motion-dom": "^12.29.2", + "motion-utils": "^12.29.2" + }, + "peerDependencies": { + "@vueuse/core": ">=10.0.0", + "vue": ">=3.0.0" + } + }, + "node_modules/muggle-string": { + "version": "0.4.1", + "dev": true, + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.11", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ohash": { + "version": "2.0.11", + "license": "MIT" + }, + "node_modules/once": { + "version": "1.4.0", + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/pako": { + "version": "1.0.11", + "license": "(MIT AND Zlib)" + }, + "node_modules/path-browserify": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/perfect-debounce": { + "version": "1.0.0", + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pinia": { + "version": "3.0.4", + "license": "MIT", + "dependencies": { + "@vue/devtools-api": "^7.7.7" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "typescript": ">=4.5.0", + "vue": "^3.5.11" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/pinia-plugin-persistedstate": { + "version": "4.7.1", + "license": "MIT", + "dependencies": { + "defu": "^6.1.4" + }, + "peerDependencies": { + "@nuxt/kit": ">=3.0.0", + "@pinia/nuxt": ">=0.10.0", + "pinia": ">=3.0.0" + }, + "peerDependenciesMeta": { + "@nuxt/kit": { + "optional": true + }, + "@pinia/nuxt": { + "optional": true + }, + "pinia": { + "optional": true + } + } + }, + "node_modules/postcss": { + "version": "8.5.6", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "license": "MIT" + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdir-glob": { + "version": "1.1.3", + "license": "Apache-2.0", + "dependencies": { + "minimatch": "^5.1.0" + } + }, + "node_modules/reka-ui": { + "version": "2.8.2", + "license": "MIT", + "dependencies": { + "@floating-ui/dom": "^1.6.13", + "@floating-ui/vue": "^1.1.6", + "@internationalized/date": "^3.5.0", + "@internationalized/number": "^3.5.0", + "@tanstack/vue-virtual": "^3.12.0", + "@vueuse/core": "^14.1.0", + "@vueuse/shared": "^14.1.0", + "aria-hidden": "^1.2.4", + "defu": "^6.1.4", + "ohash": "^2.0.11" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/zernonia" + }, + "peerDependencies": { + "vue": ">= 3.2.0" + } + }, + "node_modules/reka-ui/node_modules/@internationalized/date": { + "version": "3.11.0", + "license": "Apache-2.0", + "dependencies": { + "@swc/helpers": "^0.5.0" + } + }, + "node_modules/rfdc": { + "version": "1.4.1", + "license": "MIT" + }, + "node_modules/rimraf": { + "version": "2.7.1", + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/rolldown": { + "version": "1.0.0-rc.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@oxc-project/types": "=0.114.0", + "@rolldown/pluginutils": "1.0.0-rc.5" + }, + "bin": { + "rolldown": "bin/cli.mjs" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "optionalDependencies": { + "@rolldown/binding-android-arm64": "1.0.0-rc.5", + "@rolldown/binding-darwin-arm64": "1.0.0-rc.5", + "@rolldown/binding-darwin-x64": "1.0.0-rc.5", + "@rolldown/binding-freebsd-x64": "1.0.0-rc.5", + "@rolldown/binding-linux-arm-gnueabihf": "1.0.0-rc.5", + "@rolldown/binding-linux-arm64-gnu": "1.0.0-rc.5", + "@rolldown/binding-linux-arm64-musl": "1.0.0-rc.5", + "@rolldown/binding-linux-x64-gnu": "1.0.0-rc.5", + "@rolldown/binding-linux-x64-musl": "1.0.0-rc.5", + "@rolldown/binding-openharmony-arm64": "1.0.0-rc.5", + "@rolldown/binding-wasm32-wasi": "1.0.0-rc.5", + "@rolldown/binding-win32-arm64-msvc": "1.0.0-rc.5", + "@rolldown/binding-win32-x64-msvc": "1.0.0-rc.5" + } + }, + "node_modules/rolldown/node_modules/@rolldown/pluginutils": { + "version": "1.0.0-rc.5", + "dev": true, + "license": "MIT" + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "license": "MIT" + }, + "node_modules/saxes": { + "version": "5.0.1", + "license": "ISC", + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/setimmediate": { + "version": "1.0.5", + "license": "MIT" + }, + "node_modules/sortablejs": { + "version": "1.14.0", + "license": "MIT" + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/speakingurl": { + "version": "14.0.1", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.2.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/superjson": { + "version": "2.2.6", + "license": "MIT", + "dependencies": { + "copy-anything": "^4" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/tailwind-merge": { + "version": "3.5.0", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/dcastil" + } + }, + "node_modules/tailwindcss": { + "version": "4.2.0", + "license": "MIT" + }, + "node_modules/tapable": { + "version": "2.3.0", + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/tar-stream": { + "version": "2.2.0", + "license": "MIT", + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.15", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tmp": { + "version": "0.2.5", + "license": "MIT", + "engines": { + "node": ">=14.14" + } + }, + "node_modules/traverse": { + "version": "0.3.9", + "license": "MIT/X11" + }, + "node_modules/tslib": { + "version": "2.8.1", + "license": "0BSD" + }, + "node_modules/tw-animate-css": { + "version": "1.4.0", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/Wombosvideo" + } + }, + "node_modules/typescript": { + "version": "5.9.3", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/undici-types": { + "version": "7.16.0", + "dev": true, + "license": "MIT" + }, + "node_modules/unzipper": { + "version": "0.10.14", + "license": "MIT", + "dependencies": { + "big-integer": "^1.6.17", + "binary": "~0.3.0", + "bluebird": "~3.4.1", + "buffer-indexof-polyfill": "~1.0.0", + "duplexer2": "~0.1.4", + "fstream": "^1.0.12", + "graceful-fs": "^4.2.2", + "listenercount": "~1.0.1", + "readable-stream": "~2.3.6", + "setimmediate": "~1.0.4" + } + }, + "node_modules/unzipper/node_modules/readable-stream": { + "version": "2.3.8", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/unzipper/node_modules/readable-stream/node_modules/string_decoder": { + "version": "1.1.1", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "license": "MIT" + }, + "node_modules/uuid": { + "version": "8.3.2", + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/vite": { + "version": "8.0.0-beta.15", + "dev": true, + "license": "MIT", + "dependencies": { + "@oxc-project/runtime": "0.114.0", + "lightningcss": "^1.31.1", + "picomatch": "^4.0.3", + "postcss": "^8.5.6", + "rolldown": "1.0.0-rc.5", + "tinyglobby": "^0.2.15" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "@vitejs/devtools": "^0.0.0-alpha.31", + "esbuild": "^0.27.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "@vitejs/devtools": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vscode-uri": { + "version": "3.1.0", + "dev": true, + "license": "MIT" + }, + "node_modules/vue": { + "version": "3.5.28", + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.5.28", + "@vue/compiler-sfc": "3.5.28", + "@vue/runtime-dom": "3.5.28", + "@vue/server-renderer": "3.5.28", + "@vue/shared": "3.5.28" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/vue-demi": { + "version": "0.14.10", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/vue-i18n": { + "version": "11.3.0", + "resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-11.3.0.tgz", + "integrity": "sha512-1J+xDfDJTLhDxElkd3+XUhT7FYSZd2b8pa7IRKGxhWH/8yt6PTvi3xmWhGwhYT5EaXdatui11pF2R6tL73/zPA==", + "license": "MIT", + "dependencies": { + "@intlify/core-base": "11.3.0", + "@intlify/devtools-types": "11.3.0", + "@intlify/shared": "11.3.0", + "@vue/devtools-api": "^6.5.0" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/kazupon" + }, + "peerDependencies": { + "vue": "^3.0.0" + } + }, + "node_modules/vue-i18n/node_modules/@vue/devtools-api": { + "version": "6.6.4", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.6.4.tgz", + "integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==", + "license": "MIT" + }, + "node_modules/vue-tsc": { + "version": "3.2.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/typescript": "2.4.28", + "@vue/language-core": "3.2.5" + }, + "bin": { + "vue-tsc": "bin/vue-tsc.js" + }, + "peerDependencies": { + "typescript": ">=5.0.0" + } + }, + "node_modules/vuedraggable": { + "version": "4.1.0", + "license": "MIT", + "dependencies": { + "sortablejs": "1.14.0" + }, + "peerDependencies": { + "vue": "^3.0.1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "license": "ISC" + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "license": "MIT" + }, + "node_modules/zip-stream": { + "version": "4.1.1", + "license": "MIT", + "dependencies": { + "archiver-utils": "^3.0.4", + "compress-commons": "^4.1.2", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/zip-stream/node_modules/archiver-utils": { + "version": "3.0.4", + "license": "MIT", + "dependencies": { + "glob": "^7.2.3", + "graceful-fs": "^4.2.0", + "lazystream": "^1.0.0", + "lodash.defaults": "^4.2.0", + "lodash.difference": "^4.5.0", + "lodash.flatten": "^4.4.0", + "lodash.isplainobject": "^4.0.6", + "lodash.union": "^4.6.0", + "normalize-path": "^3.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">= 10" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..41ac945 --- /dev/null +++ b/package.json @@ -0,0 +1,50 @@ +{ + "name": "my-vue-app", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "bunx --bun vite", + "build": "bunx vue-tsc -b && bunx --bun vite build", + "preview": "bunx --bun vite preview", + "type-check": "bunx vue-tsc --noEmit", + "dockerPush":"bun run build && docker build -f Dockerfile.dist -t wintsa/zwzjjstool2026:latest . && docker push wintsa/zwzjjstool2026:latest" + }, + "dependencies": { + "@ag-grid-community/locale": "^35.1.0", + "@iconify/vue": "^5.0.0", + "@internationalized/date": "^3.12.0", + "@internationalized/number": "^3.6.5", + "@noble/ciphers": "^2.1.1", + "@noble/hashes": "^2.0.1", + "@tailwindcss/vite": "^4.1.18", + "@vueuse/core": "^14.2.1", + "ag-grid-enterprise": "^35.1.0", + "ag-grid-vue3": "^35.1.0", + "class-variance-authority": "^0.7.1", + "clsx": "^2.1.1", + "decimal.js": "^10.6.0", + "exceljs": "^4.4.0", + "localforage": "^1.10.0", + "lucide-vue-next": "^0.563.0", + "motion-v": "^2.0.0", + "pinia": "^3.0.4", + "pinia-plugin-persistedstate": "^4.7.1", + "reka-ui": "^2.8.0", + "tailwind-merge": "^3.4.0", + "tailwindcss": "^4.1.18", + "vue": "^3.5.25", + "vue-i18n": "^11.3.0", + "vuedraggable": "^4.1.0" + }, + "devDependencies": { + "@types/bun": "latest", + "@types/node": "^24.10.1", + "@vitejs/plugin-vue": "^6.0.2", + "@vue/tsconfig": "^0.8.1", + "tw-animate-css": "^1.4.0", + "typescript": "~5.9.3", + "vite": "^8.0.0-beta.13", + "vue-tsc": "^3.1.5" + } +} diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..0b5169c55c3a3cb7cb279c8841a001171771f196 GIT binary patch literal 9662 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 fSiT*Q#bqFuEHI0qo~^pYARg0}+pYk_lH;GBi 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 fSiT*Q#bqFuEHI0qo~^pYA$( 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 +import { computed, onBeforeUnmount, onMounted, ref } from 'vue' +import { useI18n } from 'vue-i18n' +import { useTabStore } from '@/pinia/tab' +import HomeEntryView from '@/features/workbench/components/HomeEntryView.vue' +import Tab from '@/layout/tab.vue' +import { waitForHydration } from '@/pinia/Plugin/indexdb' +import localforage from 'localforage' +import { + buildProjectUrl, + DEFAULT_PROJECT_ID, + ensureProjectIdInUrl, + FORCE_HOME_QUERY_KEY, + getProjectDbName, + NEW_PROJECT_QUERY_KEY, + PROJECT_TAB_ID, + QUICK_PROJECT_ID +} from '@/lib/workspace' +import { collectActiveProjectSessionLocks, initProjectSessionLock } from '@/lib/projectSessionLock' +import { listenProjectDeleted, listenResetAll } from '@/lib/projectEvents' +import { listProjects, type ProjectMeta } from '@/lib/projectRegistry' +import { closePage } from './lib/utils' + +const tabStore = useTabStore() +const { t } = useI18n() +const isReady = ref(false) +const lockConflict = ref(false) +const currentProjectId = ref('') +const currentProjectName = ref('') +const conflictProjectList = ref([]) +const openedProjectIds = ref([]) +const closeCountdown = ref(10) +const isNewProjectRequest = ref(false) +const isForceHomeRequest = ref(false) +let closeCountdownTimer: ReturnType | null = null +let releaseLock: (() => void) | null = null +let stopProjectDeletedListener: (() => void) | null = null +let stopResetAllListener: (() => void) | null = null +let isHandlingDeletedProject = false +let isHandlingGlobalReset = false + +const showHomeEntry = computed(() => !tabStore.hasCompletedSetup) + +const handleImportComplete = () => { + tabStore.hasCompletedSetup = true +} + +const initCurrentProjectLock = () => { + if (releaseLock) return + const projectId = String(currentProjectId.value || '').trim() + if (!projectId || projectId === QUICK_PROJECT_ID) { + lockConflict.value = false + return + } + const lock = initProjectSessionLock({ + projectId, + onConflict: (next) => { + lockConflict.value = next + if (next) { + refreshConflictProjectList() + startCloseCountdown() + } else { + clearCloseCountdown() + } + } + }) + releaseLock = lock.release +} + +const refreshConflictProjectList = () => { + void (async () => { + const projects = listProjects() + const enriched = await Promise.all( + projects.map(async (project) => { + try { + const kvStoreInstance = localforage.createInstance({ + name: getProjectDbName(project.id), + storeName: 'pinia-kv' + }) + const kvState = await kvStoreInstance.getItem('pinia-kv') + const entries = kvState?.entries && typeof kvState.entries === 'object' ? kvState.entries : null + const projectInfo = entries?.['xm-base-info-v1'] + const projectName = + projectInfo && typeof projectInfo === 'object' && typeof projectInfo.projectName === 'string' + ? projectInfo.projectName.trim() + : '' + return { + ...project, + name: projectName || project.name + } + } catch { + return project + } + }) + ) + conflictProjectList.value = enriched + const hit = enriched.find(item => item.id === currentProjectId.value) + currentProjectName.value = hit?.name || currentProjectId.value + openedProjectIds.value = Array.from(collectActiveProjectSessionLocks(enriched.map(item => item.id))) + })() +} + +const clearCloseCountdown = () => { + if (!closeCountdownTimer) return + clearInterval(closeCountdownTimer) + closeCountdownTimer = null +} + +const startCloseCountdown = () => { + clearCloseCountdown() + closeCountdown.value = 10 + closeCountdownTimer = setInterval(() => { + closeCountdown.value -= 1 + if (closeCountdown.value <= 0) { + clearCloseCountdown() + try { + closePage() + } catch { + + // 部分浏览器会阻止关闭,保留阻断页。 + } + } + }, 1000) +} + +const isConflictProjectOpen = (projectId: string) => openedProjectIds.value.includes(projectId) + +const openProjectInNewTab = (projectId: string, options?: { newProject?: boolean }) => { + if (isConflictProjectOpen(projectId)) return + const href = buildProjectUrl(projectId, options) + window.open(href, '_blank', 'noopener') +} + +const createProjectAndOpen = () => { + + refreshConflictProjectList() + openProjectInNewTab(DEFAULT_PROJECT_ID, { newProject: true }) +} + +const syncRouteRequestFlags = () => { + try { + const url = new URL(window.location.href) + isNewProjectRequest.value = url.searchParams.get(NEW_PROJECT_QUERY_KEY) === '1' + isForceHomeRequest.value = url.searchParams.get(FORCE_HOME_QUERY_KEY) === '1' + } catch { + isNewProjectRequest.value = false + isForceHomeRequest.value = false + } +} + +const formatProjectEditedTime = (value: string) => { + const date = new Date(value) + if (Number.isNaN(date.getTime())) return '-' + const pad = (num: number) => String(num).padStart(2, '0') + return `${date.getFullYear()}-${pad(date.getMonth() + 1)}-${pad(date.getDate())} ${pad(date.getHours())}:${pad(date.getMinutes())}` +} + +const handleReleaseProjectLock = () => { + if (!releaseLock) return + releaseLock() + releaseLock = null + lockConflict.value = false +} + +const handleProjectDeleted = (deletedProjectId: string) => { + if (String(deletedProjectId || '').trim() !== currentProjectId.value) return + if (isHandlingDeletedProject) return + isHandlingDeletedProject = true + handleReleaseProjectLock() + tabStore.resetTabs() + tabStore.hasCompletedSetup = false + const href = buildProjectUrl(DEFAULT_PROJECT_ID, { forceHome: true }) + try { + window.close() + } catch { + // ignore and fallback to redirect + } + window.setTimeout(() => { + window.location.href = href + }, 120) +} + +const handleResetAll = () => { + if (isHandlingGlobalReset) return + isHandlingGlobalReset = true + handleReleaseProjectLock() + tabStore.resetTabs() + tabStore.hasCompletedSetup = false + const href = buildProjectUrl(DEFAULT_PROJECT_ID, { forceHome: true }) + try { + window.close() + } catch { + // ignore and fallback to redirect + } + window.setTimeout(() => { + window.location.href = href + }, 120) +} + +onMounted(() => { + + currentProjectId.value = ensureProjectIdInUrl() + syncRouteRequestFlags() + refreshConflictProjectList() + if (!isForceHomeRequest.value && currentProjectId.value !== QUICK_PROJECT_ID && currentProjectId.value !== DEFAULT_PROJECT_ID) { + initCurrentProjectLock() + } + + window.addEventListener('home-import-selected', handleImportComplete) + window.addEventListener('jgjs-release-project-lock', handleReleaseProjectLock) + stopProjectDeletedListener = listenProjectDeleted(handleProjectDeleted) + stopResetAllListener = listenResetAll(handleResetAll) + waitForHydration('tabs').then(() => { + if (isForceHomeRequest.value) { + tabStore.resetTabs() + tabStore.hasCompletedSetup = false + } + if (!tabStore.hasCompletedSetup && !isNewProjectRequest.value && !isForceHomeRequest.value) { + const hasProjects = listProjects().length > 0 + if (hasProjects && currentProjectId.value !== DEFAULT_PROJECT_ID) { + if (Array.isArray(tabStore.tabs) && tabStore.tabs.length > 0) { + tabStore.hasCompletedSetup = true + } else { + tabStore.enterWorkspace({ + id: PROJECT_TAB_ID, + title: t('home.cards.projectBudget'), + componentName: 'ProjectCalcView' + }) + tabStore.hasCompletedSetup = true + } + } + } + if (tabStore.hasCompletedSetup && Array.isArray(tabStore.tabs) && tabStore.tabs.length > 0) { + const activeId = typeof tabStore.activeTabId === 'string' ? tabStore.activeTabId : '' + const hasActive = Boolean(activeId) && tabStore.tabs.some(tab => tab.id === activeId) + if (!hasActive) { + tabStore.activeTabId = tabStore.tabs[0]?.id + } + } + if (!releaseLock) { + lockConflict.value = false + clearCloseCountdown() + } + isReady.value = true + }) +}) + +onBeforeUnmount(() => { + clearCloseCountdown() + window.removeEventListener('home-import-selected', handleImportComplete) + window.removeEventListener('jgjs-release-project-lock', handleReleaseProjectLock) + if (stopProjectDeletedListener) { + stopProjectDeletedListener() + stopProjectDeletedListener = null + } + if (stopResetAllListener) { + stopResetAllListener() + stopResetAllListener = null + } + if (releaseLock) { + releaseLock() + releaseLock = null + } +}) + + + diff --git a/src/assets/vue.svg b/src/assets/vue.svg new file mode 100644 index 0000000..770e9d3 --- /dev/null +++ b/src/assets/vue.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/components/ui/button/Button.vue b/src/components/ui/button/Button.vue new file mode 100644 index 0000000..374320b --- /dev/null +++ b/src/components/ui/button/Button.vue @@ -0,0 +1,29 @@ + + + diff --git a/src/components/ui/button/index.ts b/src/components/ui/button/index.ts new file mode 100644 index 0000000..b1eb116 --- /dev/null +++ b/src/components/ui/button/index.ts @@ -0,0 +1,38 @@ +import type { VariantProps } from "class-variance-authority" +import { cva } from "class-variance-authority" + +export { default as Button } from "./Button.vue" + +export const buttonVariants = cva( + "inline-flex cursor-pointer items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive", + { + variants: { + variant: { + default: + "bg-primary text-primary-foreground hover:bg-primary/90", + destructive: + "bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60", + outline: + "border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50", + secondary: + "bg-secondary text-secondary-foreground hover:bg-secondary/80", + ghost: + "hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50", + link: "text-primary underline-offset-4 hover:underline", + }, + size: { + "default": "h-9 px-4 py-2 has-[>svg]:px-3", + "sm": "h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5", + "lg": "h-10 rounded-md px-6 has-[>svg]:px-4", + "icon": "size-9", + "icon-sm": "size-8", + "icon-lg": "size-10", + }, + }, + defaultVariants: { + variant: "default", + size: "default", + }, + }, +) +export type ButtonVariants = VariantProps diff --git a/src/components/ui/card/Card.vue b/src/components/ui/card/Card.vue new file mode 100644 index 0000000..f5a0707 --- /dev/null +++ b/src/components/ui/card/Card.vue @@ -0,0 +1,22 @@ + + + diff --git a/src/components/ui/card/CardAction.vue b/src/components/ui/card/CardAction.vue new file mode 100644 index 0000000..c91638b --- /dev/null +++ b/src/components/ui/card/CardAction.vue @@ -0,0 +1,17 @@ + + + diff --git a/src/components/ui/card/CardContent.vue b/src/components/ui/card/CardContent.vue new file mode 100644 index 0000000..dfbc552 --- /dev/null +++ b/src/components/ui/card/CardContent.vue @@ -0,0 +1,17 @@ + + + diff --git a/src/components/ui/card/CardDescription.vue b/src/components/ui/card/CardDescription.vue new file mode 100644 index 0000000..71c1b8d --- /dev/null +++ b/src/components/ui/card/CardDescription.vue @@ -0,0 +1,17 @@ + + + diff --git a/src/components/ui/card/CardFooter.vue b/src/components/ui/card/CardFooter.vue new file mode 100644 index 0000000..9e3739e --- /dev/null +++ b/src/components/ui/card/CardFooter.vue @@ -0,0 +1,17 @@ + + + diff --git a/src/components/ui/card/CardHeader.vue b/src/components/ui/card/CardHeader.vue new file mode 100644 index 0000000..4fe4da4 --- /dev/null +++ b/src/components/ui/card/CardHeader.vue @@ -0,0 +1,17 @@ + + + diff --git a/src/components/ui/card/CardTitle.vue b/src/components/ui/card/CardTitle.vue new file mode 100644 index 0000000..5f479e7 --- /dev/null +++ b/src/components/ui/card/CardTitle.vue @@ -0,0 +1,17 @@ + + + diff --git a/src/components/ui/card/index.ts b/src/components/ui/card/index.ts new file mode 100644 index 0000000..1627758 --- /dev/null +++ b/src/components/ui/card/index.ts @@ -0,0 +1,7 @@ +export { default as Card } from "./Card.vue" +export { default as CardAction } from "./CardAction.vue" +export { default as CardContent } from "./CardContent.vue" +export { default as CardDescription } from "./CardDescription.vue" +export { default as CardFooter } from "./CardFooter.vue" +export { default as CardHeader } from "./CardHeader.vue" +export { default as CardTitle } from "./CardTitle.vue" diff --git a/src/components/ui/scroll-area/ScrollArea.vue b/src/components/ui/scroll-area/ScrollArea.vue new file mode 100644 index 0000000..781da99 --- /dev/null +++ b/src/components/ui/scroll-area/ScrollArea.vue @@ -0,0 +1,39 @@ + + + + + diff --git a/src/components/ui/scroll-area/ScrollBar.vue b/src/components/ui/scroll-area/ScrollBar.vue new file mode 100644 index 0000000..a0b6f9b --- /dev/null +++ b/src/components/ui/scroll-area/ScrollBar.vue @@ -0,0 +1,32 @@ + + + diff --git a/src/components/ui/scroll-area/index.ts b/src/components/ui/scroll-area/index.ts new file mode 100644 index 0000000..c416759 --- /dev/null +++ b/src/components/ui/scroll-area/index.ts @@ -0,0 +1,2 @@ +export { default as ScrollArea } from "./ScrollArea.vue" +export { default as ScrollBar } from "./ScrollBar.vue" diff --git a/src/components/ui/tooltip/TooltipContent.vue b/src/components/ui/tooltip/TooltipContent.vue new file mode 100644 index 0000000..1533d3f --- /dev/null +++ b/src/components/ui/tooltip/TooltipContent.vue @@ -0,0 +1,33 @@ + + + diff --git a/src/components/ui/tooltip/index.ts b/src/components/ui/tooltip/index.ts new file mode 100644 index 0000000..173a7dc --- /dev/null +++ b/src/components/ui/tooltip/index.ts @@ -0,0 +1,2 @@ +export { default as TooltipContent } from './TooltipContent.vue' +export { TooltipProvider, TooltipRoot, TooltipTrigger } from 'reka-ui' diff --git a/src/features/ht/components/Ht.vue b/src/features/ht/components/Ht.vue new file mode 100644 index 0000000..61ed8e5 --- /dev/null +++ b/src/features/ht/components/Ht.vue @@ -0,0 +1,1615 @@ + + + + + + diff --git a/src/features/ht/components/HtAdditionalWorkFee.vue b/src/features/ht/components/HtAdditionalWorkFee.vue new file mode 100644 index 0000000..bcde35f --- /dev/null +++ b/src/features/ht/components/HtAdditionalWorkFee.vue @@ -0,0 +1,27 @@ + + + diff --git a/src/features/ht/components/HtBaseInfo.vue b/src/features/ht/components/HtBaseInfo.vue new file mode 100644 index 0000000..8455b68 --- /dev/null +++ b/src/features/ht/components/HtBaseInfo.vue @@ -0,0 +1,88 @@ + + +