diff --git a/build/buildEnv.ts b/build/buildEnv.ts index fa314f1..7c3c4ab 100644 --- a/build/buildEnv.ts +++ b/build/buildEnv.ts @@ -33,6 +33,7 @@ export const buildEnv = (): BuildOptions => { rollupOptions: { external: ['md-editor-v3', 'echarts'], input: { + // @ts-ignore index: pathResolve('../index.html', import.meta.url), }, // 静态资源分类打包 diff --git a/build/css.ts b/build/css.ts index 818e645..3c27162 100644 --- a/build/css.ts +++ b/build/css.ts @@ -1,12 +1,18 @@ +import type { AcceptedPlugin } from 'postcss'; import postCssPxToViewport8plugin from 'postcss-px-to-viewport-8-plugin'; -import type { CSSOptions, Plugin } from 'vite'; +import type { CSSOptions } from 'vite'; import { wrapperEnv } from './utils'; -export const css = (mode): CSSOptions => { - const plugins: Plugin[] = [usePostCssPxToViewport8plugin(mode)]; +export const css = (mode: string): CSSOptions => { + const plugins: AcceptedPlugin[] = [usePostCssPxToViewport8plugin(mode)]; return { + preprocessorOptions: { + scss: { + additionalData: `@use "@/assets/styles/minix/sidebar" as *;`, + }, + }, postcss: { plugins: plugins.filter(Boolean), }, @@ -14,7 +20,7 @@ export const css = (mode): CSSOptions => { }; /** 是否启用px转换vw插件 */ -const usePostCssPxToViewport8plugin = (mode): Plugin => { +const usePostCssPxToViewport8plugin = (mode: string): AcceptedPlugin => { const { VITE_POST_CSS_PX_TO_VIEWPORT8_PLUGIN } = wrapperEnv(mode, 'VITE'); const cssPxToVw = postCssPxToViewport8plugin({ diff --git a/build/info.ts b/build/info.ts index b887e0f..da94b93 100644 --- a/build/info.ts +++ b/build/info.ts @@ -3,7 +3,7 @@ import dayjs, { type Dayjs } from 'dayjs'; import duration from 'dayjs/plugin/duration'; import gradientString from 'gradient-string'; -import { wrapperEnv } from './utils'; +import { logOutputSize, wrapperEnv } from './utils'; dayjs.extend(duration); @@ -17,13 +17,12 @@ const boxenOptions: BoxenOptions = { /* 输出日志信息 */ const printLogMessage = (VITE_PORT: number) => { return gradientString('cyan', 'magenta').multiline( - `保存成功!服务器重新启动... -项目访问地址如下: + `欢迎使用此项目,项目访问地址如下: http://localhost:${VITE_PORT}` ); }; -export const viteConsoleLog = (mode) => { +export const viteConsoleLog = (mode: string) => { const { VITE_PORT } = wrapperEnv(mode); let config: { command: string }; @@ -44,9 +43,12 @@ export const viteConsoleLog = (mode) => { if (config.command === 'build') { endTime = dayjs(new Date()); const format = dayjs.duration(endTime.diff(startTime)).format('mm分ss秒'); + console.log( boxen( - gradientString('cyan', 'magenta').multiline(`🎉 恭喜打包完成(总用时${format})`), + gradientString('cyan', 'magenta').multiline( + `🎉 恭喜打包完成(总用时${format})打包大小(${logOutputSize()})` + ), boxenOptions ) ); diff --git a/build/optimize.ts b/build/optimize.ts index bb7665b..5771b6e 100644 --- a/build/optimize.ts +++ b/build/optimize.ts @@ -9,6 +9,6 @@ const include = ['vue', 'vue-router', 'dayjs', 'axios', 'pinia', 'vue-types', 'j /** * 在预构建中强制排除的依赖项 */ -const exclude = []; +const exclude: string[] = []; export { include, exclude }; diff --git a/build/plugins.ts b/build/plugins.ts index bc6b743..0658976 100644 --- a/build/plugins.ts +++ b/build/plugins.ts @@ -1,24 +1,26 @@ import UnoCssIcons from '@unocss/preset-icons'; import vue from '@vitejs/plugin-vue'; import vueJsx from '@vitejs/plugin-vue-jsx'; -import { presetIcons, presetUno } from 'unocss'; +import { presetIcons } from 'unocss'; import UnoCSS from 'unocss/vite'; import type { PluginOption } from 'vite'; import { vitePluginFakeServer } from 'vite-plugin-fake-server'; import removeConsole from 'vite-plugin-remove-console'; +import vueDevTools from 'vite-plugin-vue-devtools'; import Inspector from 'vite-plugin-vue-inspector'; import { useCDN } from './cdn'; import { viteConsoleLog } from './info'; import { compressPack, report, wrapperEnv } from './utils'; -export const plugins = (mode): PluginOption[] => { +export const plugins = (mode: string): PluginOption[] => { return [ vue(), vueJsx(), Inspector(), report(), removeConsole(), + vueDevTools(), useCDN(mode), viteConsoleLog(mode), UnoCSS({ @@ -26,18 +28,19 @@ export const plugins = (mode): PluginOption[] => { inspector: true, // 控制台是否打印 UnoCSS inspector presets: [ presetIcons({ + prefix: '', extraProperties: { display: 'inline-block', 'vertical-align': 'middle', }, }), UnoCssIcons({ - prefix: 'i-', + prefix: '', extraProperties: { display: 'inline-block', + 'vertical-align': 'middle', }, }), - presetUno(), ], }), compressPack(mode), @@ -46,7 +49,7 @@ export const plugins = (mode): PluginOption[] => { }; /** MOCK 服务 */ -const useMock = (mode) => { +const useMock = (mode: string) => { const { VITE_MOCK_DEV_SERVER } = wrapperEnv(mode); return VITE_MOCK_DEV_SERVER diff --git a/build/resolve.ts b/build/resolve.ts index f55c5af..3fd4624 100644 --- a/build/resolve.ts +++ b/build/resolve.ts @@ -4,7 +4,7 @@ export const resolve = () => { return { alias: { '@': pathResolve('../src'), - '@build': pathResolve(), + // '@build': pathResolve(), }, }; }; diff --git a/build/server.ts b/build/server.ts index 28f37a9..6ec5454 100644 --- a/build/server.ts +++ b/build/server.ts @@ -3,7 +3,7 @@ import type { ServerOptions } from 'vite'; import { wrapperEnv } from './utils'; /* 开发服务配置 */ -export const server = (mode) => { +export const server = (mode: string) => { const { VITE_PORT, VITE_APP_URL, VITE_STRICT_PORT } = wrapperEnv(mode); const options: ServerOptions = { diff --git a/build/utils.ts b/build/utils.ts index bdf8813..baabe97 100644 --- a/build/utils.ts +++ b/build/utils.ts @@ -1,10 +1,14 @@ import { dirname, resolve } from 'node:path'; import { fileURLToPath } from 'node:url'; +import fs from 'fs'; +import path from 'path'; import { visualizer } from 'rollup-plugin-visualizer'; import { loadEnv } from 'vite'; import viteCompression from 'vite-plugin-compression'; +import { buildEnv } from './buildEnv'; + export const root: string = process.cwd(); /** @@ -12,6 +16,7 @@ export const root: string = process.cwd(); * @param dir 路径片段,默认`build` * @param metaUrl 模块的完整`url`,如果在`build`目录外调用必传`import.meta.url` */ +// @ts-ignore export const pathResolve = (dir = '.', metaUrl = import.meta.url) => { // 当前文件目录的绝对路径 const currentFileDir = dirname(fileURLToPath(metaUrl)); @@ -34,18 +39,20 @@ export const pathResolve = (dir = '.', metaUrl = import.meta.url) => { * @param prefix 需要过滤的前缀 * @link 参考:https://cn.vite.dev/config/#using-environment-variables-in-config */ -export const wrapperEnv = (mode, prefix: string = ''): ViteEnv => { - const env = loadEnv(mode, root, prefix); +// @ts-ignore +export const wrapperEnv = (mode: string, prefix: string = ''): ViteEnv => { + const env: any = loadEnv(mode, root, prefix); // 将变量转换指定类型 for (const envName of Object.keys(env)) { - let realName = env[envName].replace(/\\n/g, '\n'); + let realName: string | boolean | number = env[envName].replace(/\\n/g, '\n'); realName = realName === 'true' ? true : realName === 'false' ? false : realName; if (envName === 'VITE_PORT') { realName = Number(realName); } env[envName] = realName; + // @ts-ignore process.env[envName] = realName; } return env; @@ -60,8 +67,52 @@ export const report = () => { }; /* 启用gzip压缩 */ -export const compressPack = (mode) => { +export const compressPack = (mode: string) => { const { VITE_COMPRESSION } = wrapperEnv(mode); return VITE_COMPRESSION == 'gzip' ? viteCompression({ threshold: 1024000 }) : null; }; + +/** + * 计算打包后文件夹大小 + * @returns + */ +export const logOutputSize = (): string => { + const outDir = `../${buildEnv().outDir}`; + + function convertSize(size: number) { + const units: Array = ['byte', 'KB', 'MB', 'GB']; + + // 输入的单位是否存在 + let index = 0; + + while (size >= 1024) { + size /= 1024; + index++; + } + + return `${size.toFixed(2)} ${units[index]}`; + } + + // 计算文件夹字节大小 + function getFolderSize(folderPath: string) { + let size = 0; + + fs.readdirSync(folderPath).forEach((fileName: string) => { + const filePath = path.join(folderPath, fileName); + const stats = fs.statSync(filePath); + + if (stats.isFile()) { + size += stats.size; + } else if (stats.isDirectory()) { + size += getFolderSize(filePath); + } + }); + + return size; + } + + const folderSize = getFolderSize(path.resolve(__dirname, outDir)); + + return convertSize(folderSize); +}; diff --git a/package.json b/package.json index f7f7571..aeee351 100644 --- a/package.json +++ b/package.json @@ -1,29 +1,39 @@ { - "name": "dashboard-template", + "name": "screen-template", "private": true, "version": "1.0.0", "type": "module", + "author": { + "name": "Bunny", + "url": "https://github.com/BunnyMaster" + }, "scripts": { "dev": "vite", "build": "vite build", "preview": "vite preview", "report": "rimraf dist && vite build", + "lint:eslint": "eslint --cache --max-warnings 0 \"{src,mock,build}/**/*.{vue,js,ts,tsx}\" --fix", + "lint:prettier": "prettier --write \"src/**/*.{js,ts,json,tsx,css,scss,vue,html,md}\"", "lint:stylelint": "stylelint --cache --fix \"**/*.{html,vue,css,scss}\" --cache-location node_modules/.cache/stylelint/", "lint": "pnpm lint:eslint && pnpm lint:prettier && pnpm lint:stylelint" }, "dependencies": { "@eslint/js": "^9.21.0", + "@parcel/watcher": "^2.5.1", + "@types/node": "^22.13.10", "@typescript-eslint/eslint-plugin": "^8.24.1", "@typescript-eslint/parser": "^8.24.1", "@unocss/preset-icons": "^66.0.0", "@unocss/reset": "^66.0.0", "@vitejs/plugin-vue-jsx": "^4.1.1", + "@vueuse/core": "^12.8.2", "animate.css": "^4.1.1", "autofit.js": "^3.2.4", "axios": "^1.7.9", "boxen": "^8.0.1", "dayjs": "^1.11.13", "echarts": "^5.6.0", + "esbuild": "^0.25.1", "eslint": "^9.9.1", "eslint-config-prettier": "^9.1.0", "eslint-define-config": "^2.1.0", @@ -35,6 +45,7 @@ "nprogress": "^0.2.0", "pinia": "^2.3.1", "pinia-plugin-persistedstate": "^3.2.3", + "postcss": "^8.5.3", "postcss-px-to-viewport-8-plugin": "^1.2.5", "prettier": "^3.3.3", "qs": "^6.14.0", @@ -53,19 +64,24 @@ "vite-plugin-remove-console": "^2.2.0", "vite-plugin-vue-inspector": "^5.3.1", "vue": "^3.5.13", + "vue-demi": "^0.14.10", "vue-eslint-parser": "^9.4.3", "vue-router": "^4.4.3", "vue-types": "^6.0.0" }, "devDependencies": { "@iconify/json": "^2.2.310", + "@types/nprogress": "^0.2.3", + "@types/qs": "^6.9.18", "@vitejs/plugin-vue": "^5.2.1", "@vue/tsconfig": "^0.7.0", "eslint-plugin-simple-import-sort": "^12.1.1", "typescript": "~5.7.2", "vite": "^6.1.0", "vite-plugin-compression": "^0.5.1", - "vue-tsc": "^2.2.0" + "vue-tsc": "^2.2.0", + "vite-plugin-vue-devtools": "^7.7.2", + "jiti": "^2.4.2" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0", @@ -85,4 +101,4 @@ } } } -} +} \ No newline at end of file diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ee482b4..b09b4aa 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -11,6 +11,12 @@ importers: '@eslint/js': specifier: ^9.21.0 version: 9.21.0 + '@parcel/watcher': + specifier: ^2.5.1 + version: 2.5.1 + '@types/node': + specifier: ^22.13.10 + version: 22.13.10 '@typescript-eslint/eslint-plugin': specifier: ^8.24.1 version: 8.24.1(@typescript-eslint/parser@8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) @@ -25,7 +31,10 @@ importers: version: 66.0.0 '@vitejs/plugin-vue-jsx': specifier: ^4.1.1 - version: 4.1.1(vite@6.1.1(jiti@2.4.2)(sass@1.85.0)(terser@5.39.0))(vue@3.5.13(typescript@5.7.3)) + version: 4.1.1(vite@6.1.1(@types/node@22.13.10)(jiti@2.4.2)(sass@1.85.0)(terser@5.39.0))(vue@3.5.13(typescript@5.7.3)) + '@vueuse/core': + specifier: ^12.8.2 + version: 12.8.2(typescript@5.7.3) animate.css: specifier: ^4.1.1 version: 4.1.1 @@ -44,6 +53,9 @@ importers: echarts: specifier: ^5.6.0 version: 5.6.0 + esbuild: + specifier: ^0.25.1 + version: 0.25.1 eslint: specifier: ^9.9.1 version: 9.21.0(jiti@2.4.2) @@ -77,6 +89,9 @@ importers: pinia-plugin-persistedstate: specifier: ^3.2.3 version: 3.2.3(pinia@2.3.1(typescript@5.7.3)(vue@3.5.13(typescript@5.7.3))) + postcss: + specifier: ^8.5.3 + version: 8.5.3 postcss-px-to-viewport-8-plugin: specifier: ^1.2.5 version: 1.2.5 @@ -115,10 +130,10 @@ importers: version: 5.39.0 unocss: specifier: ^66.0.0 - version: 66.0.0(postcss@8.5.3)(vite@6.1.1(jiti@2.4.2)(sass@1.85.0)(terser@5.39.0))(vue@3.5.13(typescript@5.7.3)) + version: 66.0.0(postcss@8.5.3)(vite@6.1.1(@types/node@22.13.10)(jiti@2.4.2)(sass@1.85.0)(terser@5.39.0))(vue@3.5.13(typescript@5.7.3)) vite-plugin-cdn-import: specifier: ^1.0.1 - version: 1.0.1(rollup@4.34.8)(vite@6.1.1(jiti@2.4.2)(sass@1.85.0)(terser@5.39.0)) + version: 1.0.1(rollup@4.34.8)(vite@6.1.1(@types/node@22.13.10)(jiti@2.4.2)(sass@1.85.0)(terser@5.39.0)) vite-plugin-fake-server: specifier: ^2.2.0 version: 2.2.0 @@ -127,10 +142,13 @@ importers: version: 2.2.0 vite-plugin-vue-inspector: specifier: ^5.3.1 - version: 5.3.1(vite@6.1.1(jiti@2.4.2)(sass@1.85.0)(terser@5.39.0)) + version: 5.3.1(vite@6.1.1(@types/node@22.13.10)(jiti@2.4.2)(sass@1.85.0)(terser@5.39.0)) vue: specifier: ^3.5.13 version: 3.5.13(typescript@5.7.3) + vue-demi: + specifier: ^0.14.10 + version: 0.14.10(vue@3.5.13(typescript@5.7.3)) vue-eslint-parser: specifier: ^9.4.3 version: 9.4.3(eslint@9.21.0(jiti@2.4.2)) @@ -144,24 +162,36 @@ importers: '@iconify/json': specifier: ^2.2.310 version: 2.2.310 + '@types/nprogress': + specifier: ^0.2.3 + version: 0.2.3 + '@types/qs': + specifier: ^6.9.18 + version: 6.9.18 '@vitejs/plugin-vue': specifier: ^5.2.1 - version: 5.2.1(vite@6.1.1(jiti@2.4.2)(sass@1.85.0)(terser@5.39.0))(vue@3.5.13(typescript@5.7.3)) + version: 5.2.1(vite@6.1.1(@types/node@22.13.10)(jiti@2.4.2)(sass@1.85.0)(terser@5.39.0))(vue@3.5.13(typescript@5.7.3)) '@vue/tsconfig': specifier: ^0.7.0 version: 0.7.0(typescript@5.7.3)(vue@3.5.13(typescript@5.7.3)) eslint-plugin-simple-import-sort: specifier: ^12.1.1 version: 12.1.1(eslint@9.21.0(jiti@2.4.2)) + jiti: + specifier: ^2.4.2 + version: 2.4.2 typescript: specifier: ~5.7.2 version: 5.7.3 vite: specifier: ^6.1.0 - version: 6.1.1(jiti@2.4.2)(sass@1.85.0)(terser@5.39.0) + version: 6.1.1(@types/node@22.13.10)(jiti@2.4.2)(sass@1.85.0)(terser@5.39.0) vite-plugin-compression: specifier: ^0.5.1 - version: 0.5.1(vite@6.1.1(jiti@2.4.2)(sass@1.85.0)(terser@5.39.0)) + version: 0.5.1(vite@6.1.1(@types/node@22.13.10)(jiti@2.4.2)(sass@1.85.0)(terser@5.39.0)) + vite-plugin-vue-devtools: + specifier: ^7.7.2 + version: 7.7.6(rollup@4.34.8)(vite@6.1.1(@types/node@22.13.10)(jiti@2.4.2)(sass@1.85.0)(terser@5.39.0))(vue@3.5.13(typescript@5.7.3)) vue-tsc: specifier: ^2.2.0 version: 2.2.4(typescript@5.7.3) @@ -175,6 +205,9 @@ packages: '@antfu/install-pkg@1.0.0': resolution: {integrity: sha512-xvX6P/lo1B3ej0OsaErAjqgFYzYVcJpamjLAFLYh9vRJngBrMoUG7aVnrGTeqM7yxbyTD5p3F2+0/QUEh8Vzhw==} + '@antfu/utils@0.7.10': + resolution: {integrity: sha512-+562v9k4aI80m1+VuMHehNJWLOFjBnXn3tdOitzD0il5b7smkSBal4+a3oKiQTbrwMmN/TBUMDvbdoWDehgOww==} + '@antfu/utils@8.1.1': resolution: {integrity: sha512-Mex9nXf9vR6AhcXmMrlz/HVgYYZpVGJ6YlPgwl7UnaFpnshXs6EK/oa5Gpf3CzENMjkvEx2tQtntGnb7UtSTOQ==} @@ -346,150 +379,300 @@ packages: cpu: [ppc64] os: [aix] + '@esbuild/aix-ppc64@0.25.1': + resolution: {integrity: sha512-kfYGy8IdzTGy+z0vFGvExZtxkFlA4zAxgKEahG9KE1ScBjpQnFsNOX8KTU5ojNru5ed5CVoJYXFtoxaq5nFbjQ==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + '@esbuild/android-arm64@0.24.2': resolution: {integrity: sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg==} engines: {node: '>=18'} cpu: [arm64] os: [android] + '@esbuild/android-arm64@0.25.1': + resolution: {integrity: sha512-50tM0zCJW5kGqgG7fQ7IHvQOcAn9TKiVRuQ/lN0xR+T2lzEFvAi1ZcS8DiksFcEpf1t/GYOeOfCAgDHFpkiSmA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + '@esbuild/android-arm@0.24.2': resolution: {integrity: sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q==} engines: {node: '>=18'} cpu: [arm] os: [android] + '@esbuild/android-arm@0.25.1': + resolution: {integrity: sha512-dp+MshLYux6j/JjdqVLnMglQlFu+MuVeNrmT5nk6q07wNhCdSnB7QZj+7G8VMUGh1q+vj2Bq8kRsuyA00I/k+Q==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + '@esbuild/android-x64@0.24.2': resolution: {integrity: sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw==} engines: {node: '>=18'} cpu: [x64] os: [android] + '@esbuild/android-x64@0.25.1': + resolution: {integrity: sha512-GCj6WfUtNldqUzYkN/ITtlhwQqGWu9S45vUXs7EIYf+7rCiiqH9bCloatO9VhxsL0Pji+PF4Lz2XXCES+Q8hDw==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + '@esbuild/darwin-arm64@0.24.2': resolution: {integrity: sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] + '@esbuild/darwin-arm64@0.25.1': + resolution: {integrity: sha512-5hEZKPf+nQjYoSr/elb62U19/l1mZDdqidGfmFutVUjjUZrOazAtwK+Kr+3y0C/oeJfLlxo9fXb1w7L+P7E4FQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + '@esbuild/darwin-x64@0.24.2': resolution: {integrity: sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA==} engines: {node: '>=18'} cpu: [x64] os: [darwin] + '@esbuild/darwin-x64@0.25.1': + resolution: {integrity: sha512-hxVnwL2Dqs3fM1IWq8Iezh0cX7ZGdVhbTfnOy5uURtao5OIVCEyj9xIzemDi7sRvKsuSdtCAhMKarxqtlyVyfA==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + '@esbuild/freebsd-arm64@0.24.2': resolution: {integrity: sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] + '@esbuild/freebsd-arm64@0.25.1': + resolution: {integrity: sha512-1MrCZs0fZa2g8E+FUo2ipw6jw5qqQiH+tERoS5fAfKnRx6NXH31tXBKI3VpmLijLH6yriMZsxJtaXUyFt/8Y4A==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + '@esbuild/freebsd-x64@0.24.2': resolution: {integrity: sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] + '@esbuild/freebsd-x64@0.25.1': + resolution: {integrity: sha512-0IZWLiTyz7nm0xuIs0q1Y3QWJC52R8aSXxe40VUxm6BB1RNmkODtW6LHvWRrGiICulcX7ZvyH6h5fqdLu4gkww==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + '@esbuild/linux-arm64@0.24.2': resolution: {integrity: sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg==} engines: {node: '>=18'} cpu: [arm64] os: [linux] + '@esbuild/linux-arm64@0.25.1': + resolution: {integrity: sha512-jaN3dHi0/DDPelk0nLcXRm1q7DNJpjXy7yWaWvbfkPvI+7XNSc/lDOnCLN7gzsyzgu6qSAmgSvP9oXAhP973uQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + '@esbuild/linux-arm@0.24.2': resolution: {integrity: sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA==} engines: {node: '>=18'} cpu: [arm] os: [linux] + '@esbuild/linux-arm@0.25.1': + resolution: {integrity: sha512-NdKOhS4u7JhDKw9G3cY6sWqFcnLITn6SqivVArbzIaf3cemShqfLGHYMx8Xlm/lBit3/5d7kXvriTUGa5YViuQ==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + '@esbuild/linux-ia32@0.24.2': resolution: {integrity: sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw==} engines: {node: '>=18'} cpu: [ia32] os: [linux] + '@esbuild/linux-ia32@0.25.1': + resolution: {integrity: sha512-OJykPaF4v8JidKNGz8c/q1lBO44sQNUQtq1KktJXdBLn1hPod5rE/Hko5ugKKZd+D2+o1a9MFGUEIUwO2YfgkQ==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + '@esbuild/linux-loong64@0.24.2': resolution: {integrity: sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ==} engines: {node: '>=18'} cpu: [loong64] os: [linux] + '@esbuild/linux-loong64@0.25.1': + resolution: {integrity: sha512-nGfornQj4dzcq5Vp835oM/o21UMlXzn79KobKlcs3Wz9smwiifknLy4xDCLUU0BWp7b/houtdrgUz7nOGnfIYg==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + '@esbuild/linux-mips64el@0.24.2': resolution: {integrity: sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] + '@esbuild/linux-mips64el@0.25.1': + resolution: {integrity: sha512-1osBbPEFYwIE5IVB/0g2X6i1qInZa1aIoj1TdL4AaAb55xIIgbg8Doq6a5BzYWgr+tEcDzYH67XVnTmUzL+nXg==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + '@esbuild/linux-ppc64@0.24.2': resolution: {integrity: sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] + '@esbuild/linux-ppc64@0.25.1': + resolution: {integrity: sha512-/6VBJOwUf3TdTvJZ82qF3tbLuWsscd7/1w+D9LH0W/SqUgM5/JJD0lrJ1fVIfZsqB6RFmLCe0Xz3fmZc3WtyVg==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + '@esbuild/linux-riscv64@0.24.2': resolution: {integrity: sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] + '@esbuild/linux-riscv64@0.25.1': + resolution: {integrity: sha512-nSut/Mx5gnilhcq2yIMLMe3Wl4FK5wx/o0QuuCLMtmJn+WeWYoEGDN1ipcN72g1WHsnIbxGXd4i/MF0gTcuAjQ==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + '@esbuild/linux-s390x@0.24.2': resolution: {integrity: sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw==} engines: {node: '>=18'} cpu: [s390x] os: [linux] + '@esbuild/linux-s390x@0.25.1': + resolution: {integrity: sha512-cEECeLlJNfT8kZHqLarDBQso9a27o2Zd2AQ8USAEoGtejOrCYHNtKP8XQhMDJMtthdF4GBmjR2au3x1udADQQQ==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + '@esbuild/linux-x64@0.24.2': resolution: {integrity: sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q==} engines: {node: '>=18'} cpu: [x64] os: [linux] + '@esbuild/linux-x64@0.25.1': + resolution: {integrity: sha512-xbfUhu/gnvSEg+EGovRc+kjBAkrvtk38RlerAzQxvMzlB4fXpCFCeUAYzJvrnhFtdeyVCDANSjJvOvGYoeKzFA==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + '@esbuild/netbsd-arm64@0.24.2': resolution: {integrity: sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw==} engines: {node: '>=18'} cpu: [arm64] os: [netbsd] + '@esbuild/netbsd-arm64@0.25.1': + resolution: {integrity: sha512-O96poM2XGhLtpTh+s4+nP7YCCAfb4tJNRVZHfIE7dgmax+yMP2WgMd2OecBuaATHKTHsLWHQeuaxMRnCsH8+5g==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + '@esbuild/netbsd-x64@0.24.2': resolution: {integrity: sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw==} engines: {node: '>=18'} cpu: [x64] os: [netbsd] + '@esbuild/netbsd-x64@0.25.1': + resolution: {integrity: sha512-X53z6uXip6KFXBQ+Krbx25XHV/NCbzryM6ehOAeAil7X7oa4XIq+394PWGnwaSQ2WRA0KI6PUO6hTO5zeF5ijA==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + '@esbuild/openbsd-arm64@0.24.2': resolution: {integrity: sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] + '@esbuild/openbsd-arm64@0.25.1': + resolution: {integrity: sha512-Na9T3szbXezdzM/Kfs3GcRQNjHzM6GzFBeU1/6IV/npKP5ORtp9zbQjvkDJ47s6BCgaAZnnnu/cY1x342+MvZg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + '@esbuild/openbsd-x64@0.24.2': resolution: {integrity: sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA==} engines: {node: '>=18'} cpu: [x64] os: [openbsd] + '@esbuild/openbsd-x64@0.25.1': + resolution: {integrity: sha512-T3H78X2h1tszfRSf+txbt5aOp/e7TAz3ptVKu9Oyir3IAOFPGV6O9c2naym5TOriy1l0nNf6a4X5UXRZSGX/dw==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + '@esbuild/sunos-x64@0.24.2': resolution: {integrity: sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig==} engines: {node: '>=18'} cpu: [x64] os: [sunos] + '@esbuild/sunos-x64@0.25.1': + resolution: {integrity: sha512-2H3RUvcmULO7dIE5EWJH8eubZAI4xw54H1ilJnRNZdeo8dTADEZ21w6J22XBkXqGJbe0+wnNJtw3UXRoLJnFEg==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + '@esbuild/win32-arm64@0.24.2': resolution: {integrity: sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ==} engines: {node: '>=18'} cpu: [arm64] os: [win32] + '@esbuild/win32-arm64@0.25.1': + resolution: {integrity: sha512-GE7XvrdOzrb+yVKB9KsRMq+7a2U/K5Cf/8grVFRAGJmfADr/e/ODQ134RK2/eeHqYV5eQRFxb1hY7Nr15fv1NQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + '@esbuild/win32-ia32@0.24.2': resolution: {integrity: sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA==} engines: {node: '>=18'} cpu: [ia32] os: [win32] + '@esbuild/win32-ia32@0.25.1': + resolution: {integrity: sha512-uOxSJCIcavSiT6UnBhBzE8wy3n0hOkJsBOzy7HDAuTDE++1DJMRRVCPGisULScHL+a/ZwdXPpXD3IyFKjA7K8A==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + '@esbuild/win32-x64@0.24.2': resolution: {integrity: sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg==} engines: {node: '>=18'} cpu: [x64] os: [win32] + '@esbuild/win32-x64@0.25.1': + resolution: {integrity: sha512-Y1EQdcfwMSeQN/ujR5VayLOJ1BHaK+ssyk0AEzPjC+t1lITgsnccPqFjb6V+LsTp/9Iov4ysfjxLaGJ9RPtkVg==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + '@eslint-community/eslint-utils@4.4.1': resolution: {integrity: sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -806,15 +989,34 @@ packages: cpu: [x64] os: [win32] + '@sec-ant/readable-stream@0.4.1': + resolution: {integrity: sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==} + + '@sindresorhus/merge-streams@4.0.0': + resolution: {integrity: sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==} + engines: {node: '>=18'} + '@types/estree@1.0.6': resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + '@types/node@22.13.10': + resolution: {integrity: sha512-I6LPUvlRH+O6VRUqYOcMudhaIdUVWfsjnZavnsraHvpBwaEyMN29ry+0UVJhImYL16xsscu0aske3yA+uPOWfw==} + + '@types/nprogress@0.2.3': + resolution: {integrity: sha512-k7kRA033QNtC+gLc4VPlfnue58CM1iQLgn1IMAU8VPHGOj7oIHPp9UlhedEnD/Gl8evoCjwkZjlBORtZ3JByUA==} + + '@types/qs@6.9.18': + resolution: {integrity: sha512-kK7dgTYDyGqS+e2Q4aK9X3D7q234CIZ1Bv0q/7Z5IwRDoADNU81xXJK/YVyLbLTZCoIwUoDoffFeF+p/eIklAA==} + '@types/tinycolor2@1.4.6': resolution: {integrity: sha512-iEN8J0BoMnsWBqjVbWH/c0G0Hh7O21lpR2/+PrvAVgWdzL7eexIFm4JN/Wn10PTcmNdtS6U67r499mlWMXOxNw==} + '@types/web-bluetooth@0.0.21': + resolution: {integrity: sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA==} + '@typescript-eslint/eslint-plugin@8.24.1': resolution: {integrity: sha512-ll1StnKtBigWIGqvYDVuDmXJHVH4zLVot1yQ4fJtLpL7qacwkxJc1T0bptqw+miBQ/QfUbhl1TcQ4accW5KUyA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -1002,6 +1204,17 @@ packages: '@vue/devtools-api@6.6.4': resolution: {integrity: sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==} + '@vue/devtools-core@7.7.6': + resolution: {integrity: sha512-ghVX3zjKPtSHu94Xs03giRIeIWlb9M+gvDRVpIZ/cRIxKHdW6HE/sm1PT3rUYS3aV92CazirT93ne+7IOvGUWg==} + peerDependencies: + vue: ^3.0.0 + + '@vue/devtools-kit@7.7.6': + resolution: {integrity: sha512-geu7ds7tem2Y7Wz+WgbnbZ6T5eadOvozHZ23Atk/8tksHMFOFylKi1xgGlQlVn0wlkEf4hu+vd5ctj1G4kFtwA==} + + '@vue/devtools-shared@7.7.6': + resolution: {integrity: sha512-yFEgJZ/WblEsojQQceuyK6FzpFDx4kqrz2ohInxNj5/DnhoX023upTv4OD6lNPLAA5LLkbwPVb10o/7b+Y4FVA==} + '@vue/language-core@2.2.4': resolution: {integrity: sha512-eGGdw7eWUwdIn9Fy/irJ7uavCGfgemuHQABgJ/hU1UgZFnbTg9VWeXvHQdhY+2SPQZWJqWXvRWIg67t4iWEa+Q==} peerDependencies: @@ -1038,6 +1251,15 @@ packages: vue: optional: true + '@vueuse/core@12.8.2': + resolution: {integrity: sha512-HbvCmZdzAu3VGi/pWYm5Ut+Kd9mn1ZHnn4L5G8kOQTPs/IwIAmJoBrmYk2ckLArgMXZj0AW3n5CAejLUO+PhdQ==} + + '@vueuse/metadata@12.8.2': + resolution: {integrity: sha512-rAyLGEuoBJ/Il5AmFHiziCPdQzRt88VxR+Y/A/QhJ1EWtWqPBBAxTAFaSkviwEuOEZNtW8pvkPgoCZQ+HxqW1A==} + + '@vueuse/shared@12.8.2': + resolution: {integrity: sha512-dznP38YzxZoNloI0qpEfpkms8knDtaoQ6Y/sfS0L7Yki4zh40LFHEhur0odJC6xTHG5dxWVPiUWBXn+wCG2s5w==} + acorn-jsx@5.3.2: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: @@ -1116,6 +1338,9 @@ packages: resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} engines: {node: '>=8'} + birpc@2.3.0: + resolution: {integrity: sha512-ijbtkn/F3Pvzb6jHypHRyve2QApOCZDR25D/VnkY2G/lBNcXCTsnsCxgY4k4PkVB7zfwzYbY3O9Lcqe3xufS5g==} + boolbase@1.0.0: resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} @@ -1147,6 +1372,10 @@ packages: bundle-import@0.0.2: resolution: {integrity: sha512-XB3T6xlgqJHThyr2luo3pNAVhfN/Y2qFEsblrzUO5QZLpJtesget8jmGDImSairScy80ZKBDVcRdFzTzWv3v8A==} + bundle-name@4.1.0: + resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==} + engines: {node: '>=18'} + cac@6.7.14: resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} engines: {node: '>=8'} @@ -1230,6 +1459,10 @@ packages: convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + copy-anything@3.0.5: + resolution: {integrity: sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==} + engines: {node: '>=12.13'} + cosmiconfig@9.0.0: resolution: {integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==} engines: {node: '>=14'} @@ -1277,10 +1510,22 @@ packages: deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + default-browser-id@5.0.0: + resolution: {integrity: sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==} + engines: {node: '>=18'} + + default-browser@5.2.1: + resolution: {integrity: sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==} + engines: {node: '>=18'} + define-lazy-prop@2.0.0: resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} engines: {node: '>=8'} + define-lazy-prop@3.0.0: + resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} + engines: {node: '>=12'} + defu@6.1.4: resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} @@ -1349,6 +1594,9 @@ packages: error-ex@1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + error-stack-parser-es@0.1.5: + resolution: {integrity: sha512-xHku1X40RO+fO8yJ8Wh2f2rZWVjqyhb1zgq1yZ8aZRQkv6OOKhKWRUaht3eSCUbAOBaKIgM+ykwFLE+QUxgGeg==} + es-define-property@1.0.1: resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} engines: {node: '>= 0.4'} @@ -1373,6 +1621,11 @@ packages: engines: {node: '>=18'} hasBin: true + esbuild@0.25.1: + resolution: {integrity: sha512-BGO5LtrGC7vxnqucAe/rmvKdJllfGaYWdyABvyMoXQlfYMb2bbRuReWR5tEGE//4LcNJj9XrkovTqNYRFZHAMQ==} + engines: {node: '>=18'} + hasBin: true + escalade@3.2.0: resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} engines: {node: '>=6'} @@ -1472,6 +1725,10 @@ packages: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} + execa@9.5.3: + resolution: {integrity: sha512-QFNnTvU3UjgWFy8Ef9iDHvIdcgZ344ebkwYx4/KLbR+CKQA4xBaHzv+iRpp86QfMHP8faFQLh8iOc57215y4Rg==} + engines: {node: ^18.19.0 || >=20.5.0} + fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} @@ -1506,6 +1763,10 @@ packages: picomatch: optional: true + figures@6.1.0: + resolution: {integrity: sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==} + engines: {node: '>=18'} + file-entry-cache@10.0.6: resolution: {integrity: sha512-0wvv16mVo9nN0Md3k7DMjgAPKG/TY4F/gYMBVb/wMThFRJvzrpaqBFqF6km9wf8QfYTN+mNg5aeaBLfy8k35uA==} @@ -1552,6 +1813,10 @@ packages: resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} engines: {node: '>=12'} + fs-extra@11.3.0: + resolution: {integrity: sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==} + engines: {node: '>=14.14'} + fsevents@2.3.3: resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} @@ -1580,6 +1845,10 @@ packages: resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} engines: {node: '>= 0.4'} + get-stream@9.0.1: + resolution: {integrity: sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==} + engines: {node: '>=18'} + get-tsconfig@4.10.0: resolution: {integrity: sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A==} @@ -1664,6 +1933,9 @@ packages: resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} hasBin: true + hookable@5.5.3: + resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==} + hookified@1.7.1: resolution: {integrity: sha512-OXcdHsXeOiD7OJ5zvWj8Oy/6RCdLwntAX+wUrfemNcMGn6sux4xbEHi2QXwqePYhjQ/yvxxq2MvCRirdlHscBw==} @@ -1674,6 +1946,10 @@ packages: htmlparser2@8.0.2: resolution: {integrity: sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==} + human-signals@8.0.1: + resolution: {integrity: sha512-eKCa6bwnJhvxj14kZk5NCPc6Hb6BdsU9DZcOnmQKSnO1VKrfV0zCvtttPZUsBvjmNDn8rpcJfpwSYnHBjc95MQ==} + engines: {node: '>=18.18.0'} + ieee754@1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} @@ -1717,6 +1993,11 @@ packages: engines: {node: '>=8'} hasBin: true + is-docker@3.0.0: + resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + hasBin: true + is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} @@ -1729,10 +2010,19 @@ packages: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} + is-inside-container@1.0.0: + resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} + engines: {node: '>=14.16'} + hasBin: true + is-number@7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} + is-plain-obj@4.1.0: + resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} + engines: {node: '>=12'} + is-plain-object@5.0.0: resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} engines: {node: '>=0.10.0'} @@ -1740,10 +2030,26 @@ packages: is-reference@3.0.3: resolution: {integrity: sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==} + is-stream@4.0.1: + resolution: {integrity: sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==} + engines: {node: '>=18'} + + is-unicode-supported@2.1.0: + resolution: {integrity: sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==} + engines: {node: '>=18'} + + is-what@4.1.16: + resolution: {integrity: sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==} + engines: {node: '>=12.13'} + is-wsl@2.2.0: resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} engines: {node: '>=8'} + is-wsl@3.1.0: + resolution: {integrity: sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==} + engines: {node: '>=16'} + isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} @@ -1895,6 +2201,9 @@ packages: resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} engines: {node: '>=16 || 14 >=14.17'} + mitt@3.0.1: + resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==} + mlly@1.7.4: resolution: {integrity: sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw==} @@ -1913,6 +2222,11 @@ packages: engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true + nanoid@5.1.5: + resolution: {integrity: sha512-Ir/+ZpE9fDsNH0hQ3C68uyThDXzYcim2EqcZ8zn8Chtt1iylPT9xXJB0kPCnqzgcEGikO9RxSrh63MsmVCU7Fw==} + engines: {node: ^18 || >=20} + hasBin: true + natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} @@ -1929,6 +2243,10 @@ packages: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} + npm-run-path@6.0.0: + resolution: {integrity: sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==} + engines: {node: '>=18'} + nprogress@0.2.0: resolution: {integrity: sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==} @@ -1946,6 +2264,10 @@ packages: ofetch@1.4.1: resolution: {integrity: sha512-QZj2DfGplQAr2oj9KzceK9Hwz6Whxazmn85yYeVuS3u9XTMOGMRx0kO95MQ+vLsj/S/NwBDMMLU5hpxvI6Tklw==} + open@10.1.2: + resolution: {integrity: sha512-cxN6aIDPz6rm8hbebcP7vrQNhvRcveZoJU72Y7vskh4oIm+BZwBECnx5nTmrlres1Qapvx27Qo1Auukpf8PKXw==} + engines: {node: '>=18'} + open@8.4.2: resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} engines: {node: '>=12'} @@ -1976,6 +2298,10 @@ packages: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} + parse-ms@4.0.0: + resolution: {integrity: sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==} + engines: {node: '>=18'} + path-browserify@1.0.1: resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} @@ -1987,6 +2313,10 @@ packages: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} + path-key@4.0.0: + resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} + engines: {node: '>=12'} + path-scurry@1.11.1: resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} engines: {node: '>=16 || 14 >=14.18'} @@ -2100,6 +2430,10 @@ packages: engines: {node: '>=14'} hasBin: true + pretty-ms@9.2.0: + resolution: {integrity: sha512-4yf0QO/sllf/1zbZWYnvWw3NxCQwLXKzIj0G849LSufP15BXKM0rbD2Z3wVnkMfjdn/CB0Dpp444gYAACdsplg==} + engines: {node: '>=18'} + proxy-from-env@1.1.0: resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} @@ -2145,6 +2479,9 @@ packages: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + rfdc@1.4.1: + resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} + rimraf@5.0.10: resolution: {integrity: sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==} hasBin: true @@ -2172,6 +2509,10 @@ packages: engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true + run-applescript@7.0.0: + resolution: {integrity: sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==} + engines: {node: '>=18'} + run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} @@ -2248,6 +2589,10 @@ packages: resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} deprecated: Please use @jridgewell/sourcemap-codec instead + speakingurl@14.0.1: + resolution: {integrity: sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==} + engines: {node: '>=0.10.0'} + string-width@4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} @@ -2268,6 +2613,10 @@ packages: resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} engines: {node: '>=12'} + strip-final-newline@4.0.0: + resolution: {integrity: sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==} + engines: {node: '>=18'} + strip-json-comments@3.1.1: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} @@ -2346,6 +2695,10 @@ packages: engines: {node: '>=18.12.0'} hasBin: true + superjson@2.2.2: + resolution: {integrity: sha512-5JRxVqC8I8NuOUjzBbvVJAKNM8qoVuH0O77h4WInc/qC2q5IreqKxYwgkga3PfA22OayK2ikceb/B26dztPl+Q==} + engines: {node: '>=16'} + supports-color@7.2.0: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} @@ -2426,6 +2779,13 @@ packages: unconfig@7.0.0: resolution: {integrity: sha512-G5CJSoG6ZTxgzCJblEfgpdRK2tos9+UdD2WtecDUVfImzQ0hFjwpH5RVvGMhP4pRpC9ML7NrC4qBsBl0Ttj35A==} + undici-types@6.20.0: + resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==} + + unicorn-magic@0.3.0: + resolution: {integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==} + engines: {node: '>=18'} + universalify@2.0.1: resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} engines: {node: '>= 10.0.0'} @@ -2458,6 +2818,11 @@ packages: util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + vite-hot-client@2.0.4: + resolution: {integrity: sha512-W9LOGAyGMrbGArYJN4LBCdOC5+Zwh7dHvOHC0KmGKkJhsOzaKbpo/jEjpPKVHIW0/jBWj8RZG0NUxfgA8BxgAg==} + peerDependencies: + vite: ^2.6.0 || ^3.0.0 || ^4.0.0 || ^5.0.0-0 || ^6.0.0-0 + vite-plugin-cdn-import@1.0.1: resolution: {integrity: sha512-lgjLxgwFSKvJLbqjVBirUZ0rQo00GpUGJzRpgQu8RyBw9LA7jaqG6fUMQzBC9qWmTGabPC3iOzwCcoi7PseRAQ==} @@ -2475,9 +2840,25 @@ packages: vite-plugin-fake-server@2.2.0: resolution: {integrity: sha512-RP691997Q207nenNMhg7cvYyBXZyjqXwApTBa+a9kHmILgcAU2w4TMRDiAhIU0HPLAAR5MHlWTEpxA9Tbf+v8g==} + vite-plugin-inspect@0.8.9: + resolution: {integrity: sha512-22/8qn+LYonzibb1VeFZmISdVao5kC22jmEKm24vfFE8siEn47EpVcCLYMv6iKOYMJfjSvSJfueOwcFCkUnV3A==} + engines: {node: '>=14'} + peerDependencies: + '@nuxt/kit': '*' + vite: ^3.1.0 || ^4.0.0 || ^5.0.0-0 || ^6.0.1 + peerDependenciesMeta: + '@nuxt/kit': + optional: true + vite-plugin-remove-console@2.2.0: resolution: {integrity: sha512-qgjh5pz75MdE9Kzs8J0kBwaCfifHV0ezRbB9rpGsIOxam+ilcGV7WOk91vFJXquzRmiKrFh3Hxlh0JJWAmXTbQ==} + vite-plugin-vue-devtools@7.7.6: + resolution: {integrity: sha512-L7nPVM5a7lgit/Z+36iwoqHOaP3wxqVi1UvaDJwGCfblS9Y6vNqf32ILlzJVH9c47aHu90BhDXeZc+rgzHRHcw==} + engines: {node: '>=v14.21.3'} + peerDependencies: + vite: ^3.1.0 || ^4.0.0-0 || ^5.0.0-0 || ^6.0.0-0 + vite-plugin-vue-inspector@5.3.1: resolution: {integrity: sha512-cBk172kZKTdvGpJuzCCLg8lJ909wopwsu3Ve9FsL1XsnLBiRT9U3MePcqrgGHgCX2ZgkqZmAGR8taxw+TV6s7A==} peerDependencies: @@ -2632,6 +3013,10 @@ packages: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} + yoctocolors@2.1.1: + resolution: {integrity: sha512-GQHQqAopRhwU8Kt1DDM8NjibDXHC8eoh1erhGAJPEyveY9qqVeXvVikNKrDz69sHowPMorbPUrH/mx8c50eiBQ==} + engines: {node: '>=18'} + zrender@5.6.1: resolution: {integrity: sha512-OFXkDJKcrlx5su2XbzJvj/34Q3m6PvyCZkVPHGYpcCJ52ek4U/ymZyfuV1nKE23AyBJ51E/6Yr0mhZ7xGTO4ag==} @@ -2647,6 +3032,8 @@ snapshots: package-manager-detector: 0.2.9 tinyexec: 0.3.2 + '@antfu/utils@0.7.10': {} + '@antfu/utils@8.1.1': {} '@babel/code-frame@7.26.2': @@ -2858,78 +3245,153 @@ snapshots: '@esbuild/aix-ppc64@0.24.2': optional: true + '@esbuild/aix-ppc64@0.25.1': + optional: true + '@esbuild/android-arm64@0.24.2': optional: true + '@esbuild/android-arm64@0.25.1': + optional: true + '@esbuild/android-arm@0.24.2': optional: true + '@esbuild/android-arm@0.25.1': + optional: true + '@esbuild/android-x64@0.24.2': optional: true + '@esbuild/android-x64@0.25.1': + optional: true + '@esbuild/darwin-arm64@0.24.2': optional: true + '@esbuild/darwin-arm64@0.25.1': + optional: true + '@esbuild/darwin-x64@0.24.2': optional: true + '@esbuild/darwin-x64@0.25.1': + optional: true + '@esbuild/freebsd-arm64@0.24.2': optional: true + '@esbuild/freebsd-arm64@0.25.1': + optional: true + '@esbuild/freebsd-x64@0.24.2': optional: true + '@esbuild/freebsd-x64@0.25.1': + optional: true + '@esbuild/linux-arm64@0.24.2': optional: true + '@esbuild/linux-arm64@0.25.1': + optional: true + '@esbuild/linux-arm@0.24.2': optional: true + '@esbuild/linux-arm@0.25.1': + optional: true + '@esbuild/linux-ia32@0.24.2': optional: true + '@esbuild/linux-ia32@0.25.1': + optional: true + '@esbuild/linux-loong64@0.24.2': optional: true + '@esbuild/linux-loong64@0.25.1': + optional: true + '@esbuild/linux-mips64el@0.24.2': optional: true + '@esbuild/linux-mips64el@0.25.1': + optional: true + '@esbuild/linux-ppc64@0.24.2': optional: true + '@esbuild/linux-ppc64@0.25.1': + optional: true + '@esbuild/linux-riscv64@0.24.2': optional: true + '@esbuild/linux-riscv64@0.25.1': + optional: true + '@esbuild/linux-s390x@0.24.2': optional: true + '@esbuild/linux-s390x@0.25.1': + optional: true + '@esbuild/linux-x64@0.24.2': optional: true + '@esbuild/linux-x64@0.25.1': + optional: true + '@esbuild/netbsd-arm64@0.24.2': optional: true + '@esbuild/netbsd-arm64@0.25.1': + optional: true + '@esbuild/netbsd-x64@0.24.2': optional: true + '@esbuild/netbsd-x64@0.25.1': + optional: true + '@esbuild/openbsd-arm64@0.24.2': optional: true + '@esbuild/openbsd-arm64@0.25.1': + optional: true + '@esbuild/openbsd-x64@0.24.2': optional: true + '@esbuild/openbsd-x64@0.25.1': + optional: true + '@esbuild/sunos-x64@0.24.2': optional: true + '@esbuild/sunos-x64@0.25.1': + optional: true + '@esbuild/win32-arm64@0.24.2': optional: true + '@esbuild/win32-arm64@0.25.1': + optional: true + '@esbuild/win32-ia32@0.24.2': optional: true + '@esbuild/win32-ia32@0.25.1': + optional: true + '@esbuild/win32-x64@0.24.2': optional: true + '@esbuild/win32-x64@0.25.1': + optional: true + '@eslint-community/eslint-utils@4.4.1(eslint@9.21.0(jiti@2.4.2))': dependencies: eslint: 9.21.0(jiti@2.4.2) @@ -3111,7 +3573,6 @@ snapshots: '@parcel/watcher-win32-arm64': 2.5.1 '@parcel/watcher-win32-ia32': 2.5.1 '@parcel/watcher-win32-x64': 2.5.1 - optional: true '@pkgjs/parseargs@0.11.0': optional: true @@ -3185,12 +3646,26 @@ snapshots: '@rollup/rollup-win32-x64-msvc@4.34.8': optional: true + '@sec-ant/readable-stream@0.4.1': {} + + '@sindresorhus/merge-streams@4.0.0': {} + '@types/estree@1.0.6': {} '@types/json-schema@7.0.15': {} + '@types/node@22.13.10': + dependencies: + undici-types: 6.20.0 + + '@types/nprogress@0.2.3': {} + + '@types/qs@6.9.18': {} + '@types/tinycolor2@1.4.6': {} + '@types/web-bluetooth@0.0.21': {} + '@typescript-eslint/eslint-plugin@8.24.1(@typescript-eslint/parser@8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)': dependencies: '@eslint-community/regexpp': 4.12.1 @@ -3268,13 +3743,13 @@ snapshots: '@typescript-eslint/types': 8.24.1 eslint-visitor-keys: 4.2.0 - '@unocss/astro@66.0.0(vite@6.1.1(jiti@2.4.2)(sass@1.85.0)(terser@5.39.0))(vue@3.5.13(typescript@5.7.3))': + '@unocss/astro@66.0.0(vite@6.1.1(@types/node@22.13.10)(jiti@2.4.2)(sass@1.85.0)(terser@5.39.0))(vue@3.5.13(typescript@5.7.3))': dependencies: '@unocss/core': 66.0.0 '@unocss/reset': 66.0.0 - '@unocss/vite': 66.0.0(vite@6.1.1(jiti@2.4.2)(sass@1.85.0)(terser@5.39.0))(vue@3.5.13(typescript@5.7.3)) + '@unocss/vite': 66.0.0(vite@6.1.1(@types/node@22.13.10)(jiti@2.4.2)(sass@1.85.0)(terser@5.39.0))(vue@3.5.13(typescript@5.7.3)) optionalDependencies: - vite: 6.1.1(jiti@2.4.2)(sass@1.85.0)(terser@5.39.0) + vite: 6.1.1(@types/node@22.13.10)(jiti@2.4.2)(sass@1.85.0)(terser@5.39.0) transitivePeerDependencies: - vue @@ -3399,7 +3874,7 @@ snapshots: dependencies: '@unocss/core': 66.0.0 - '@unocss/vite@66.0.0(vite@6.1.1(jiti@2.4.2)(sass@1.85.0)(terser@5.39.0))(vue@3.5.13(typescript@5.7.3))': + '@unocss/vite@66.0.0(vite@6.1.1(@types/node@22.13.10)(jiti@2.4.2)(sass@1.85.0)(terser@5.39.0))(vue@3.5.13(typescript@5.7.3))': dependencies: '@ampproject/remapping': 2.3.0 '@unocss/config': 66.0.0 @@ -3409,23 +3884,23 @@ snapshots: magic-string: 0.30.17 tinyglobby: 0.2.12 unplugin-utils: 0.2.4 - vite: 6.1.1(jiti@2.4.2)(sass@1.85.0)(terser@5.39.0) + vite: 6.1.1(@types/node@22.13.10)(jiti@2.4.2)(sass@1.85.0)(terser@5.39.0) transitivePeerDependencies: - vue - '@vitejs/plugin-vue-jsx@4.1.1(vite@6.1.1(jiti@2.4.2)(sass@1.85.0)(terser@5.39.0))(vue@3.5.13(typescript@5.7.3))': + '@vitejs/plugin-vue-jsx@4.1.1(vite@6.1.1(@types/node@22.13.10)(jiti@2.4.2)(sass@1.85.0)(terser@5.39.0))(vue@3.5.13(typescript@5.7.3))': dependencies: '@babel/core': 7.26.9 '@babel/plugin-transform-typescript': 7.26.8(@babel/core@7.26.9) '@vue/babel-plugin-jsx': 1.2.5(@babel/core@7.26.9) - vite: 6.1.1(jiti@2.4.2)(sass@1.85.0)(terser@5.39.0) + vite: 6.1.1(@types/node@22.13.10)(jiti@2.4.2)(sass@1.85.0)(terser@5.39.0) vue: 3.5.13(typescript@5.7.3) transitivePeerDependencies: - supports-color - '@vitejs/plugin-vue@5.2.1(vite@6.1.1(jiti@2.4.2)(sass@1.85.0)(terser@5.39.0))(vue@3.5.13(typescript@5.7.3))': + '@vitejs/plugin-vue@5.2.1(vite@6.1.1(@types/node@22.13.10)(jiti@2.4.2)(sass@1.85.0)(terser@5.39.0))(vue@3.5.13(typescript@5.7.3))': dependencies: - vite: 6.1.1(jiti@2.4.2)(sass@1.85.0)(terser@5.39.0) + vite: 6.1.1(@types/node@22.13.10)(jiti@2.4.2)(sass@1.85.0)(terser@5.39.0) vue: 3.5.13(typescript@5.7.3) '@volar/language-core@2.4.11': @@ -3507,6 +3982,32 @@ snapshots: '@vue/devtools-api@6.6.4': {} + '@vue/devtools-core@7.7.6(vite@6.1.1(@types/node@22.13.10)(jiti@2.4.2)(sass@1.85.0)(terser@5.39.0))(vue@3.5.13(typescript@5.7.3))': + dependencies: + '@vue/devtools-kit': 7.7.6 + '@vue/devtools-shared': 7.7.6 + mitt: 3.0.1 + nanoid: 5.1.5 + pathe: 2.0.3 + vite-hot-client: 2.0.4(vite@6.1.1(@types/node@22.13.10)(jiti@2.4.2)(sass@1.85.0)(terser@5.39.0)) + vue: 3.5.13(typescript@5.7.3) + transitivePeerDependencies: + - vite + + '@vue/devtools-kit@7.7.6': + dependencies: + '@vue/devtools-shared': 7.7.6 + 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 + + '@vue/devtools-shared@7.7.6': + dependencies: + rfdc: 1.4.1 + '@vue/language-core@2.2.4(typescript@5.7.3)': dependencies: '@volar/language-core': 2.4.11 @@ -3549,6 +4050,23 @@ snapshots: typescript: 5.7.3 vue: 3.5.13(typescript@5.7.3) + '@vueuse/core@12.8.2(typescript@5.7.3)': + dependencies: + '@types/web-bluetooth': 0.0.21 + '@vueuse/metadata': 12.8.2 + '@vueuse/shared': 12.8.2(typescript@5.7.3) + vue: 3.5.13(typescript@5.7.3) + transitivePeerDependencies: + - typescript + + '@vueuse/metadata@12.8.2': {} + + '@vueuse/shared@12.8.2(typescript@5.7.3)': + dependencies: + vue: 3.5.13(typescript@5.7.3) + transitivePeerDependencies: + - typescript + acorn-jsx@5.3.2(acorn@8.14.0): dependencies: acorn: 8.14.0 @@ -3618,6 +4136,8 @@ snapshots: binary-extensions@2.3.0: {} + birpc@2.3.0: {} + boolbase@1.0.0: {} boxen@8.0.1: @@ -3663,6 +4183,10 @@ snapshots: get-tsconfig: 4.10.0 import-from-string: 0.0.5 + bundle-name@4.1.0: + dependencies: + run-applescript: 7.0.0 + cac@6.7.14: {} cacheable@1.8.8: @@ -3741,6 +4265,10 @@ snapshots: convert-source-map@2.0.0: {} + copy-anything@3.0.5: + dependencies: + is-what: 4.1.16 + cosmiconfig@9.0.0(typescript@5.7.3): dependencies: env-paths: 2.2.1 @@ -3777,16 +4305,24 @@ snapshots: deep-is@0.1.4: {} + default-browser-id@5.0.0: {} + + default-browser@5.2.1: + dependencies: + bundle-name: 4.1.0 + default-browser-id: 5.0.0 + define-lazy-prop@2.0.0: {} + define-lazy-prop@3.0.0: {} + defu@6.1.4: {} delayed-stream@1.0.0: {} destr@2.0.3: {} - detect-libc@1.0.3: - optional: true + detect-libc@1.0.3: {} dir-glob@3.0.1: dependencies: @@ -3841,6 +4377,8 @@ snapshots: dependencies: is-arrayish: 0.2.1 + error-stack-parser-es@0.1.5: {} + es-define-property@1.0.1: {} es-errors@1.3.0: {} @@ -3886,6 +4424,34 @@ snapshots: '@esbuild/win32-ia32': 0.24.2 '@esbuild/win32-x64': 0.24.2 + esbuild@0.25.1: + optionalDependencies: + '@esbuild/aix-ppc64': 0.25.1 + '@esbuild/android-arm': 0.25.1 + '@esbuild/android-arm64': 0.25.1 + '@esbuild/android-x64': 0.25.1 + '@esbuild/darwin-arm64': 0.25.1 + '@esbuild/darwin-x64': 0.25.1 + '@esbuild/freebsd-arm64': 0.25.1 + '@esbuild/freebsd-x64': 0.25.1 + '@esbuild/linux-arm': 0.25.1 + '@esbuild/linux-arm64': 0.25.1 + '@esbuild/linux-ia32': 0.25.1 + '@esbuild/linux-loong64': 0.25.1 + '@esbuild/linux-mips64el': 0.25.1 + '@esbuild/linux-ppc64': 0.25.1 + '@esbuild/linux-riscv64': 0.25.1 + '@esbuild/linux-s390x': 0.25.1 + '@esbuild/linux-x64': 0.25.1 + '@esbuild/netbsd-arm64': 0.25.1 + '@esbuild/netbsd-x64': 0.25.1 + '@esbuild/openbsd-arm64': 0.25.1 + '@esbuild/openbsd-x64': 0.25.1 + '@esbuild/sunos-x64': 0.25.1 + '@esbuild/win32-arm64': 0.25.1 + '@esbuild/win32-ia32': 0.25.1 + '@esbuild/win32-x64': 0.25.1 + escalade@3.2.0: {} escape-string-regexp@4.0.0: {} @@ -4008,6 +4574,21 @@ snapshots: esutils@2.0.3: {} + execa@9.5.3: + dependencies: + '@sindresorhus/merge-streams': 4.0.0 + cross-spawn: 7.0.6 + figures: 6.1.0 + get-stream: 9.0.1 + human-signals: 8.0.1 + is-plain-obj: 4.1.0 + is-stream: 4.0.1 + npm-run-path: 6.0.0 + pretty-ms: 9.2.0 + signal-exit: 4.1.0 + strip-final-newline: 4.0.0 + yoctocolors: 2.1.1 + fast-deep-equal@3.1.3: {} fast-diff@1.3.0: {} @@ -4036,6 +4617,10 @@ snapshots: optionalDependencies: picomatch: 4.0.2 + figures@6.1.0: + dependencies: + is-unicode-supported: 2.1.0 + file-entry-cache@10.0.6: dependencies: flat-cache: 6.1.6 @@ -4086,6 +4671,12 @@ snapshots: jsonfile: 6.1.0 universalify: 2.0.1 + fs-extra@11.3.0: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.1 + fsevents@2.3.3: optional: true @@ -4115,6 +4706,11 @@ snapshots: dunder-proto: 1.0.1 es-object-atoms: 1.1.1 + get-stream@9.0.1: + dependencies: + '@sec-ant/readable-stream': 0.4.1 + is-stream: 4.0.1 + get-tsconfig@4.10.0: dependencies: resolve-pkg-maps: 1.0.0 @@ -4196,6 +4792,8 @@ snapshots: he@1.2.0: {} + hookable@5.5.3: {} + hookified@1.7.1: {} html-tags@3.3.1: {} @@ -4207,6 +4805,8 @@ snapshots: domutils: 3.2.2 entities: 4.5.0 + human-signals@8.0.1: {} + ieee754@1.2.1: {} ignore@5.3.2: {} @@ -4239,6 +4839,8 @@ snapshots: is-docker@2.2.1: {} + is-docker@3.0.0: {} + is-extglob@2.1.1: {} is-fullwidth-code-point@3.0.0: {} @@ -4247,18 +4849,34 @@ snapshots: dependencies: is-extglob: 2.1.1 + is-inside-container@1.0.0: + dependencies: + is-docker: 3.0.0 + is-number@7.0.0: {} + is-plain-obj@4.1.0: {} + is-plain-object@5.0.0: {} is-reference@3.0.3: dependencies: '@types/estree': 1.0.6 + is-stream@4.0.1: {} + + is-unicode-supported@2.1.0: {} + + is-what@4.1.16: {} + is-wsl@2.2.0: dependencies: is-docker: 2.2.1 + is-wsl@3.1.0: + dependencies: + is-inside-container: 1.0.0 + isexe@2.0.0: {} jackspeak@3.4.3: @@ -4384,6 +5002,8 @@ snapshots: minipass@7.1.2: {} + mitt@3.0.1: {} + mlly@1.7.4: dependencies: acorn: 8.14.0 @@ -4399,10 +5019,11 @@ snapshots: nanoid@3.3.8: {} + nanoid@5.1.5: {} + natural-compare@1.4.0: {} - node-addon-api@7.1.1: - optional: true + node-addon-api@7.1.1: {} node-fetch-native@1.6.6: {} @@ -4410,6 +5031,11 @@ snapshots: normalize-path@3.0.0: {} + npm-run-path@6.0.0: + dependencies: + path-key: 4.0.0 + unicorn-magic: 0.3.0 + nprogress@0.2.0: {} nth-check@2.1.1: @@ -4426,6 +5052,13 @@ snapshots: node-fetch-native: 1.6.6 ufo: 1.5.4 + open@10.1.2: + dependencies: + default-browser: 5.2.1 + define-lazy-prop: 3.0.0 + is-inside-container: 1.0.0 + is-wsl: 3.1.0 + open@8.4.2: dependencies: define-lazy-prop: 2.0.0 @@ -4464,12 +5097,16 @@ snapshots: json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 + parse-ms@4.0.0: {} + path-browserify@1.0.1: {} path-exists@4.0.0: {} path-key@3.1.1: {} + path-key@4.0.0: {} + path-scurry@1.11.1: dependencies: lru-cache: 10.4.3 @@ -4568,6 +5205,10 @@ snapshots: prettier@3.5.2: {} + pretty-ms@9.2.0: + dependencies: + parse-ms: 4.0.0 + proxy-from-env@1.1.0: {} punycode@2.3.1: {} @@ -4596,6 +5237,8 @@ snapshots: reusify@1.0.4: {} + rfdc@1.4.1: {} + rimraf@5.0.10: dependencies: glob: 10.4.5 @@ -4642,6 +5285,8 @@ snapshots: '@rollup/rollup-win32-x64-msvc': 4.34.8 fsevents: 2.3.3 + run-applescript@7.0.0: {} + run-parallel@1.2.0: dependencies: queue-microtask: 1.2.3 @@ -4721,6 +5366,8 @@ snapshots: sourcemap-codec@1.4.8: {} + speakingurl@14.0.1: {} + string-width@4.2.3: dependencies: emoji-regex: 8.0.0 @@ -4747,6 +5394,8 @@ snapshots: dependencies: ansi-regex: 6.1.0 + strip-final-newline@4.0.0: {} + strip-json-comments@3.1.1: {} stylelint-config-html@1.1.0(postcss-html@1.8.0)(stylelint@16.14.1(typescript@5.7.3)): @@ -4861,6 +5510,10 @@ snapshots: - supports-color - typescript + superjson@2.2.2: + dependencies: + copy-anything: 3.0.5 + supports-color@7.2.0: dependencies: has-flag: 4.0.0 @@ -4938,11 +5591,15 @@ snapshots: defu: 6.1.4 jiti: 2.4.2 + undici-types@6.20.0: {} + + unicorn-magic@0.3.0: {} + universalify@2.0.1: {} - unocss@66.0.0(postcss@8.5.3)(vite@6.1.1(jiti@2.4.2)(sass@1.85.0)(terser@5.39.0))(vue@3.5.13(typescript@5.7.3)): + unocss@66.0.0(postcss@8.5.3)(vite@6.1.1(@types/node@22.13.10)(jiti@2.4.2)(sass@1.85.0)(terser@5.39.0))(vue@3.5.13(typescript@5.7.3)): dependencies: - '@unocss/astro': 66.0.0(vite@6.1.1(jiti@2.4.2)(sass@1.85.0)(terser@5.39.0))(vue@3.5.13(typescript@5.7.3)) + '@unocss/astro': 66.0.0(vite@6.1.1(@types/node@22.13.10)(jiti@2.4.2)(sass@1.85.0)(terser@5.39.0))(vue@3.5.13(typescript@5.7.3)) '@unocss/cli': 66.0.0 '@unocss/core': 66.0.0 '@unocss/postcss': 66.0.0(postcss@8.5.3) @@ -4959,9 +5616,9 @@ snapshots: '@unocss/transformer-compile-class': 66.0.0 '@unocss/transformer-directives': 66.0.0 '@unocss/transformer-variant-group': 66.0.0 - '@unocss/vite': 66.0.0(vite@6.1.1(jiti@2.4.2)(sass@1.85.0)(terser@5.39.0))(vue@3.5.13(typescript@5.7.3)) + '@unocss/vite': 66.0.0(vite@6.1.1(@types/node@22.13.10)(jiti@2.4.2)(sass@1.85.0)(terser@5.39.0))(vue@3.5.13(typescript@5.7.3)) optionalDependencies: - vite: 6.1.1(jiti@2.4.2)(sass@1.85.0)(terser@5.39.0) + vite: 6.1.1(@types/node@22.13.10)(jiti@2.4.2)(sass@1.85.0)(terser@5.39.0) transitivePeerDependencies: - postcss - supports-color @@ -4984,30 +5641,34 @@ snapshots: util-deprecate@1.0.2: {} - vite-plugin-cdn-import@1.0.1(rollup@4.34.8)(vite@6.1.1(jiti@2.4.2)(sass@1.85.0)(terser@5.39.0)): + vite-hot-client@2.0.4(vite@6.1.1(@types/node@22.13.10)(jiti@2.4.2)(sass@1.85.0)(terser@5.39.0)): + dependencies: + vite: 6.1.1(@types/node@22.13.10)(jiti@2.4.2)(sass@1.85.0)(terser@5.39.0) + + vite-plugin-cdn-import@1.0.1(rollup@4.34.8)(vite@6.1.1(@types/node@22.13.10)(jiti@2.4.2)(sass@1.85.0)(terser@5.39.0)): dependencies: rollup-plugin-external-globals: 0.10.0(rollup@4.34.8) - vite-plugin-externals: 0.6.2(vite@6.1.1(jiti@2.4.2)(sass@1.85.0)(terser@5.39.0)) + vite-plugin-externals: 0.6.2(vite@6.1.1(@types/node@22.13.10)(jiti@2.4.2)(sass@1.85.0)(terser@5.39.0)) transitivePeerDependencies: - rollup - vite - vite-plugin-compression@0.5.1(vite@6.1.1(jiti@2.4.2)(sass@1.85.0)(terser@5.39.0)): + vite-plugin-compression@0.5.1(vite@6.1.1(@types/node@22.13.10)(jiti@2.4.2)(sass@1.85.0)(terser@5.39.0)): dependencies: chalk: 4.1.2 debug: 4.4.0 fs-extra: 10.1.0 - vite: 6.1.1(jiti@2.4.2)(sass@1.85.0)(terser@5.39.0) + vite: 6.1.1(@types/node@22.13.10)(jiti@2.4.2)(sass@1.85.0)(terser@5.39.0) transitivePeerDependencies: - supports-color - vite-plugin-externals@0.6.2(vite@6.1.1(jiti@2.4.2)(sass@1.85.0)(terser@5.39.0)): + vite-plugin-externals@0.6.2(vite@6.1.1(@types/node@22.13.10)(jiti@2.4.2)(sass@1.85.0)(terser@5.39.0)): dependencies: acorn: 8.14.0 es-module-lexer: 0.4.1 fs-extra: 10.1.0 magic-string: 0.25.9 - vite: 6.1.1(jiti@2.4.2)(sass@1.85.0)(terser@5.39.0) + vite: 6.1.1(@types/node@22.13.10)(jiti@2.4.2)(sass@1.85.0)(terser@5.39.0) vite-plugin-fake-server@2.2.0: dependencies: @@ -5017,9 +5678,41 @@ snapshots: picocolors: 1.1.1 tinyglobby: 0.2.12 + vite-plugin-inspect@0.8.9(rollup@4.34.8)(vite@6.1.1(@types/node@22.13.10)(jiti@2.4.2)(sass@1.85.0)(terser@5.39.0)): + dependencies: + '@antfu/utils': 0.7.10 + '@rollup/pluginutils': 5.1.4(rollup@4.34.8) + debug: 4.4.0 + error-stack-parser-es: 0.1.5 + fs-extra: 11.3.0 + open: 10.1.2 + perfect-debounce: 1.0.0 + picocolors: 1.1.1 + sirv: 3.0.1 + vite: 6.1.1(@types/node@22.13.10)(jiti@2.4.2)(sass@1.85.0)(terser@5.39.0) + transitivePeerDependencies: + - rollup + - supports-color + vite-plugin-remove-console@2.2.0: {} - vite-plugin-vue-inspector@5.3.1(vite@6.1.1(jiti@2.4.2)(sass@1.85.0)(terser@5.39.0)): + vite-plugin-vue-devtools@7.7.6(rollup@4.34.8)(vite@6.1.1(@types/node@22.13.10)(jiti@2.4.2)(sass@1.85.0)(terser@5.39.0))(vue@3.5.13(typescript@5.7.3)): + dependencies: + '@vue/devtools-core': 7.7.6(vite@6.1.1(@types/node@22.13.10)(jiti@2.4.2)(sass@1.85.0)(terser@5.39.0))(vue@3.5.13(typescript@5.7.3)) + '@vue/devtools-kit': 7.7.6 + '@vue/devtools-shared': 7.7.6 + execa: 9.5.3 + sirv: 3.0.1 + vite: 6.1.1(@types/node@22.13.10)(jiti@2.4.2)(sass@1.85.0)(terser@5.39.0) + vite-plugin-inspect: 0.8.9(rollup@4.34.8)(vite@6.1.1(@types/node@22.13.10)(jiti@2.4.2)(sass@1.85.0)(terser@5.39.0)) + vite-plugin-vue-inspector: 5.3.1(vite@6.1.1(@types/node@22.13.10)(jiti@2.4.2)(sass@1.85.0)(terser@5.39.0)) + transitivePeerDependencies: + - '@nuxt/kit' + - rollup + - supports-color + - vue + + vite-plugin-vue-inspector@5.3.1(vite@6.1.1(@types/node@22.13.10)(jiti@2.4.2)(sass@1.85.0)(terser@5.39.0)): dependencies: '@babel/core': 7.26.9 '@babel/plugin-proposal-decorators': 7.25.9(@babel/core@7.26.9) @@ -5030,16 +5723,17 @@ snapshots: '@vue/compiler-dom': 3.5.13 kolorist: 1.8.0 magic-string: 0.30.17 - vite: 6.1.1(jiti@2.4.2)(sass@1.85.0)(terser@5.39.0) + vite: 6.1.1(@types/node@22.13.10)(jiti@2.4.2)(sass@1.85.0)(terser@5.39.0) transitivePeerDependencies: - supports-color - vite@6.1.1(jiti@2.4.2)(sass@1.85.0)(terser@5.39.0): + vite@6.1.1(@types/node@22.13.10)(jiti@2.4.2)(sass@1.85.0)(terser@5.39.0): dependencies: esbuild: 0.24.2 postcss: 8.5.3 rollup: 4.34.8 optionalDependencies: + '@types/node': 22.13.10 fsevents: 2.3.3 jiti: 2.4.2 sass: 1.85.0 @@ -5150,6 +5844,8 @@ snapshots: yocto-queue@0.1.0: {} + yoctocolors@2.1.1: {} + zrender@5.6.1: dependencies: tslib: 2.3.0 diff --git a/push.sh b/push.sh new file mode 100644 index 0000000..7b9a8ff --- /dev/null +++ b/push.sh @@ -0,0 +1,5 @@ +git checkout master +git merge dev +git push --all +git push --tags +git checkout dev diff --git a/src/App.vue b/src/App.vue index 470c788..11b5c9e 100644 --- a/src/App.vue +++ b/src/App.vue @@ -1,7 +1,28 @@ + + + diff --git a/src/api/server/request.ts b/src/api/server/request.ts index 72dae80..1da108c 100644 --- a/src/api/server/request.ts +++ b/src/api/server/request.ts @@ -44,7 +44,7 @@ service.interceptors.response.use( } // ElMessage.error(msg || '系统出错'); - return Promise.reject(msg || 'Error'); + return Promise.reject(response.data.message || 'Error'); }, (error: any) => { // 异常处理 diff --git a/src/api/server/requestMock.ts b/src/api/server/requestMock.ts index 795bb34..ee02fb6 100644 --- a/src/api/server/requestMock.ts +++ b/src/api/server/requestMock.ts @@ -44,7 +44,7 @@ service.interceptors.response.use( } // ElMessage.error(msg || '系统出错'); - return Promise.reject(msg || 'Error'); + return Promise.reject(response.data.message || 'Error'); }, (error: any) => { // 异常处理 diff --git a/src/assets/styles/minix/sidebar.scss b/src/assets/styles/minix/sidebar.scss new file mode 100644 index 0000000..31b1e23 --- /dev/null +++ b/src/assets/styles/minix/sidebar.scss @@ -0,0 +1,50 @@ +@mixin view-style-default($sidebar-width,$content-width) { + &__sidebar { + display: flex; + flex-wrap: wrap; + flex-direction: column; + justify-content: space-between; + align-items: center; + width: $sidebar-width; + height: 100%; + color: #fff; + + &-item { + padding: 9px 15px; + width: 100%; + background: rgba(14, 95, 255, 0.2); + } + + &-tag { + float: left; + margin: 0 7px 0 0; + width: 62px; + height: 26px; + line-height: 26px; + font-size: 14px; + text-align: center; + background: rgba(24, 69, 135, 0.55); + color: #fff; + cursor: default; + } + + &-title { + width: 172px; + height: 42px; + font-size: 22px; + color: #fff; + background: url('@/assets/images/business-supervision/bg/sidebar/bg-frame-4.png') no-repeat; + background-size: cover; + } + + &-title-describe { + font-size: 12px; + color: var(--color-info-secondary-1); + } + } + + &__content { + width: $content-width; + height: 100%; + } +} diff --git a/src/main.ts b/src/main.ts index a55041b..60e247e 100644 --- a/src/main.ts +++ b/src/main.ts @@ -2,6 +2,7 @@ import 'animate.css'; import '@unocss/reset/tailwind-compat.css'; import 'uno.css'; import 'virtual:unocss-devtools'; +import '@/assets/styles/global.scss'; import { createApp } from 'vue'; diff --git a/src/plugins/echarts.ts b/src/plugins/echarts.ts index 0cba96d..308dcb9 100644 --- a/src/plugins/echarts.ts +++ b/src/plugins/echarts.ts @@ -1,4 +1,4 @@ -import { BarChart, LineChart, PieChart } from 'echarts/charts'; +import { BarChart, GaugeChart, LineChart, PictorialBarChart, PieChart } from 'echarts/charts'; import { DataZoomComponent, GraphicComponent, @@ -15,7 +15,6 @@ import { CanvasRenderer, SVGRenderer } from 'echarts/renderers'; import type { App } from 'vue'; const { use } = echarts; - use([ PieChart, BarChart, @@ -31,6 +30,8 @@ use([ TooltipComponent, DataZoomComponent, VisualMapComponent, + PictorialBarChart, + GaugeChart, ]); /** diff --git a/src/plugins/index.ts b/src/plugins/index.ts index bab9d90..562309f 100644 --- a/src/plugins/index.ts +++ b/src/plugins/index.ts @@ -3,19 +3,20 @@ import type { App } from 'vue'; import { setupDirective } from '@/directive'; import { autoFit } from '@/plugins/autofit'; import { useEcharts } from '@/plugins/echarts'; -import { setUpRouter } from '@/router'; +import { setupRouter } from '@/router'; import { setupStore } from '@/store'; export default { install(app: App) { // 设置路由 - setUpRouter(app); + setupRouter(app); // 设置状态管理 setupStore(app); // 设置指令 setupDirective(app); // 根据需求引入echarts useEcharts(app); + // 使用autoFit,在环境配置文件中设置 autoFit(); }, }; diff --git a/src/router/index.ts b/src/router/index.ts index 1499403..f022f2e 100644 --- a/src/router/index.ts +++ b/src/router/index.ts @@ -6,15 +6,15 @@ import home from '@/router/modules/home'; import remaining from '@/router/modules/remaining'; // 静态路由 -const routes: RouteRecordRaw[] = [...remaining, ...home, ...error]; +const routes: RouteRecordRaw[] = [...remaining, ...home, ...error] as RouteRecordRaw[]; const router = createRouter({ history: createWebHashHistory(), routes, - scrollBehavior: () => ({ x: 0, y: 0 }), + scrollBehavior: () => ({ left: 0, top: 0, behavior: 'smooth' }), }); /** 全局注册 router */ -export const setUpRouter = (app: App) => { +export const setupRouter = (app: App) => { app.use(router); }; @@ -23,4 +23,10 @@ export const resetRouter = () => { router.replace({ path: '/' }).then(); }; +// router.afterEach((to, from) => { +// const toDepth = to.path.split('/').length; +// const fromDepth = from.path.split('/').length; +// to.meta.transition = toDepth < fromDepth ? 'slide-right' : 'slide-left'; +// }); + export default router; diff --git a/src/router/modules/error.ts b/src/router/modules/error.ts index 0a1ec66..92d3a26 100644 --- a/src/router/modules/error.ts +++ b/src/router/modules/error.ts @@ -1,6 +1,8 @@ import type { RouteRecordRaw } from 'vue-router'; -const routes: RouteRecordRaw[] = [ +import type { RouteConfigsTable } from '@/types/router/Route'; + +const routes: RouteRecordRaw[] | RouteConfigsTable[] = [ { path: '/error', component: () => import('@/views/error-page/404.vue'), diff --git a/src/router/modules/home.ts b/src/router/modules/home.ts index 4371a95..afa8cdc 100644 --- a/src/router/modules/home.ts +++ b/src/router/modules/home.ts @@ -1,13 +1,13 @@ import type { RouteRecordRaw } from 'vue-router'; import Layout from '@/layout/index.vue'; +import type { RouteConfigsTable } from '@/types/router/Route'; -const routes: RouteRecordRaw[] = [ +const routes: RouteRecordRaw[] | RouteConfigsTable[] = [ { path: '/', name: '/', component: Layout, - meta: { transition: 'fade' }, }, ]; diff --git a/src/router/modules/remaining.ts b/src/router/modules/remaining.ts index 5e17fcb..8094836 100644 --- a/src/router/modules/remaining.ts +++ b/src/router/modules/remaining.ts @@ -1,8 +1,9 @@ import type { RouteRecordRaw } from 'vue-router'; import Layout from '@/layout/index.vue'; +import type { RouteConfigsTable } from '@/types/router/Route'; -const routes: RouteRecordRaw[] = [ +const routes: RouteRecordRaw[] | RouteConfigsTable[] = [ { path: '/redirect', component: Layout, diff --git a/src/store/app.ts b/src/store/app.ts new file mode 100644 index 0000000..86a3fcc --- /dev/null +++ b/src/store/app.ts @@ -0,0 +1,27 @@ +import { defineStore } from 'pinia'; + +import { isCSSColor, isPath } from '@/utils/regexp/regexpBackground'; + +const useAppStore = defineStore('appStore', { + state() { + return { + background: '', + }; + }, + getters: {}, + actions: { + setBackground(background: string) { + if (isCSSColor(background)) { + this.background = background; + } else if (isPath(background)) { + const href = new URL(background, import.meta.url).href; + this.background = `url(${href})`; + } else { + const href = new URL('@/assets/images/common/bg/bg-layout.png', import.meta.url).href; + this.background = `url(${href})`; + } + }, + }, +}); + +export { useAppStore }; diff --git a/src/types/router.d.ts b/src/types/router.d.ts new file mode 100644 index 0000000..19f8153 --- /dev/null +++ b/src/types/router.d.ts @@ -0,0 +1,11 @@ +// types/router.d.ts +import 'vue-router'; + +declare module 'vue-router' { + interface RouteMeta { + transition?: { + enter: string; + leave: string; + }; + } +} diff --git a/src/types/router/Route.ts b/src/types/router/Route.ts index c718c54..920f655 100644 --- a/src/types/router/Route.ts +++ b/src/types/router/Route.ts @@ -1,18 +1,29 @@ import type { RouteComponent } from 'vue-router'; +/** + * @description 动画入场和离场 + */ +interface Transition { + enter?: string; + leave?: string; +} + /** * @description 完整子路由的`meta`配置表 */ interface CustomizeRouteMeta { - title: string; - subtitle: string; - transition: string; + title?: string; + subtitle?: string; + transition?: Transition; + hidden?: boolean; + /* 头部类型 */ + headerType?: any; } /** * @description 整体路由配置表(包括完整子路由) */ -interface RouteConfigsTable { +export interface RouteConfigsTable { /** 路由地址 `必填` */ path: string; /** 路由名字(保持唯一)`可选` */ @@ -25,5 +36,3 @@ interface RouteConfigsTable { /** 子路由配置项 */ children?: Array; } - -export { RouteConfigsTable }; diff --git a/src/utils/chart.ts b/src/utils/chart.ts index b8969c9..0d68ecb 100644 --- a/src/utils/chart.ts +++ b/src/utils/chart.ts @@ -1,20 +1,18 @@ -import { useEventListener } from '@vueuse/core'; -import type { EChartsType } from 'echarts'; +import { useDebounceFn, useEventListener } from '@vueuse/core'; + +import echarts from '@/plugins/echarts'; /** 通用重置图表样式 */ -export const debounceChart = (myChart: EChartsType) => { - useEventListener( - window, - 'resize', - () => { - myChart.resize(); - }, - 500 - ); +export const debounceChart = (myChart: echarts.ECharts | undefined) => { + const debounceFn = useDebounceFn(() => { + myChart!.resize(); + }, 500); + + useEventListener(window, 'resize', debounceFn); }; /** 数字格式化 */ -export const formatter = (number) => { +export const formatter = (number: any) => { const numbers = number.toString().split('').reverse(); const segs = []; @@ -22,3 +20,21 @@ export const formatter = (number) => { return segs.join(',').split('').reverse().join(''); }; + +/** 颜色渲染 */ +export const graphicLinearGradient = ( + color1: string, + color2: string, + coordinate: Array = [0, 0, 0, 1] +) => { + return new echarts.graphic.LinearGradient( + coordinate[0], + coordinate[1], + coordinate[2], + coordinate[3], + [ + { offset: 0, color: color1 }, + { offset: 1, color: color2 }, + ] + ); +}; diff --git a/src/utils/file.ts b/src/utils/file.ts index 8ed1faa..20316f8 100644 --- a/src/utils/file.ts +++ b/src/utils/file.ts @@ -25,7 +25,7 @@ export const downloadBlob = (response: any) => { const contentDisposition = response.headers['content-disposition']; let fileName = 'download.zip'; if (contentDisposition) { - const fileNameMatch = contentDisposition.match(/filename="?(.+)"?/); + const fileNameMatch = contentDisposition.match(/filename="?(.+)"/); if (fileNameMatch && fileNameMatch[1]) { fileName = fileNameMatch[1]; } diff --git a/src/utils/regexp/regexpBackground.ts b/src/utils/regexp/regexpBackground.ts index 85e053b..b613ad7 100644 --- a/src/utils/regexp/regexpBackground.ts +++ b/src/utils/regexp/regexpBackground.ts @@ -1,5 +1,5 @@ /** 判断是否是CSS颜色 */ -function isCSSColor(str) { +function isCSSColor(str: string) { // 匹配十六进制颜色(如 #fff, #ffffff) const hexColor = /^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/; @@ -16,7 +16,7 @@ function isCSSColor(str) { } /** 判断是否是相对路径或绝对路径 */ -function isPath(str) { +function isPath(str: string) { // 匹配相对路径(如 ./path, ../path, path/to/file) const relativePath = /^\.{0,2}\/[^\/].*$/; diff --git a/tsconfig.json b/tsconfig.json index 5633b67..b2688ae 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,49 +1,49 @@ { "compilerOptions": { - "target": "esnext", - "useDefineForClassFields": true, - "module": "esnext", - "moduleResolution": "node", - "strict": true, - "noLib": false, - "sourceMap": true, - "resolveJsonModule": true, - "esModuleInterop": true, - "lib": [ - "esnext", - "dom" - ], - "baseUrl": ".", - "allowJs": true, + "target": "ESNext", + "module": "ESNext", + "moduleResolution": "bundler", + "strict": false, + "jsx": "preserve", + "importHelpers": true, + "experimentalDecorators": true, + "strictFunctionTypes": false, "skipLibCheck": true, + "esModuleInterop": true, + "isolatedModules": true, "allowSyntheticDefaultImports": true, "forceConsistentCasingInFileNames": true, - "jsx": "preserve", - "jsxFactory": "h", - "jsxFragmentFactory": "Fragment", + "sourceMap": true, + "baseUrl": ".", + "allowJs": false, + "resolveJsonModule": true, + "lib": [ + "ESNext", + "DOM" + ], "paths": { "@/*": [ "src/*" + ], + "@build/*": [ + "build/*" ] }, "types": [ - "vite/client", - "unplugin-icons/types/vue", - "element-plus/global" + "node", + "vite/client" ] }, - "files": [], "include": [ "mock/*.ts", "src/**/*.ts", "src/**/*.tsx", "src/**/*.vue", - "src/types/*.d.ts", - "vite.config.ts" + "vite.config.ts", + "src/**/*.d.ts" ], "exclude": [ "dist", - "**/*.js", "node_modules" ] } diff --git a/vite.config.ts b/vite.config.ts index 4479b11..bd73a1c 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -10,7 +10,8 @@ import { server } from './build/server'; import { root, wrapperEnv } from './build/utils'; // https://vite.dev/config/ -export default defineConfig(({ command, mode, isSsrBuild, isPreview }) => { +// export default defineConfig(({ command, mode, isSsrBuild, isPreview }) => { +export default defineConfig(({ mode }) => { const env = wrapperEnv(mode, 'VITE'); return {