diff --git a/.editorconfig b/.editorconfig deleted file mode 100644 index 3dce414..0000000 --- a/.editorconfig +++ /dev/null @@ -1,9 +0,0 @@ -root = true - -[*] -charset = utf-8 -indent_style = space -indent_size = 2 -end_of_line = lf -insert_final_newline = true -trim_trailing_whitespace = true \ No newline at end of file diff --git a/.eslintcache b/.eslintcache deleted file mode 100644 index c2aa950..0000000 --- a/.eslintcache +++ /dev/null @@ -1 +0,0 @@ -[{"C:\\Users\\HiteVision station\\Documents\\LanStart\\LanMontainDesktop\\electron.vite.config.ts":"1","C:\\Users\\HiteVision station\\Documents\\LanStart\\LanMontainDesktop\\eslint.config.mjs":"2","C:\\Users\\HiteVision station\\Documents\\LanStart\\LanMontainDesktop\\src\\app_list\\index.ts":"3","C:\\Users\\HiteVision station\\Documents\\LanStart\\LanMontainDesktop\\src\\app_list\\launch.ts":"4","C:\\Users\\HiteVision station\\Documents\\LanStart\\LanMontainDesktop\\src\\app_list\\list.ts":"5","C:\\Users\\HiteVision station\\Documents\\LanStart\\LanMontainDesktop\\src\\app_list\\paths.ts":"6","C:\\Users\\HiteVision station\\Documents\\LanStart\\LanMontainDesktop\\src\\app_list\\types.ts":"7","C:\\Users\\HiteVision station\\Documents\\LanStart\\LanMontainDesktop\\src\\eiysia\\app.ts":"8","C:\\Users\\HiteVision station\\Documents\\LanStart\\LanMontainDesktop\\src\\eiysia\\index.ts":"9","C:\\Users\\HiteVision station\\Documents\\LanStart\\LanMontainDesktop\\src\\eiysia\\ipc.ts":"10","C:\\Users\\HiteVision station\\Documents\\LanStart\\LanMontainDesktop\\src\\eiysia\\server.ts":"11","C:\\Users\\HiteVision station\\Documents\\LanStart\\LanMontainDesktop\\src\\main\\index.ts":"12","C:\\Users\\HiteVision station\\Documents\\LanStart\\LanMontainDesktop\\src\\preload\\index.d.ts":"13","C:\\Users\\HiteVision station\\Documents\\LanStart\\LanMontainDesktop\\src\\preload\\index.ts":"14","C:\\Users\\HiteVision station\\Documents\\LanStart\\LanMontainDesktop\\src\\renderer\\src\\env.d.ts":"15","C:\\Users\\HiteVision station\\Documents\\LanStart\\LanMontainDesktop\\src\\renderer\\src\\main.ts":"16","C:\\Users\\HiteVision station\\Documents\\LanStart\\LanMontainDesktop\\src\\SQLitte\\index.ts":"17"},{"size":397,"mtime":1771392641198,"results":"18","hashOfConfig":"19"},{"size":335,"mtime":1770948616909,"results":"20","hashOfConfig":"21"},{"size":181,"mtime":1770951445071,"results":"22","hashOfConfig":"19"},{"size":1025,"mtime":1770952229497,"results":"23","hashOfConfig":"19"},{"size":5944,"mtime":1770955024555,"results":"24","hashOfConfig":"19"},{"size":778,"mtime":1770952651493,"results":"25","hashOfConfig":"19"},{"size":478,"mtime":1770952183776,"results":"26","hashOfConfig":"19"},{"size":8460,"mtime":1771393545129,"results":"27","hashOfConfig":"19"},{"size":131,"mtime":1770949683440,"results":"28","hashOfConfig":"19"},{"size":1562,"mtime":1770951750982,"results":"29","hashOfConfig":"19"},{"size":878,"mtime":1770953257990,"results":"30","hashOfConfig":"19"},{"size":2977,"mtime":1770983959147,"results":"31","hashOfConfig":"19"},{"size":518,"mtime":1770949733473,"results":"32","hashOfConfig":"19"},{"size":1422,"mtime":1770949725340,"results":"33","hashOfConfig":"19"},{"size":198,"mtime":1770948241682,"results":"34","hashOfConfig":"19"},{"size":119,"mtime":1770948217655,"results":"35","hashOfConfig":"19"},{"size":890,"mtime":1771393598051,"results":"36","hashOfConfig":"19"},{"filePath":"37","messages":"38","suppressedMessages":"39","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"ujohuf",{"filePath":"40","messages":"41","suppressedMessages":"42","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"siocln",{"filePath":"43","messages":"44","suppressedMessages":"45","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"46","messages":"47","suppressedMessages":"48","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"49","messages":"50","suppressedMessages":"51","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"52","messages":"53","suppressedMessages":"54","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"55","messages":"56","suppressedMessages":"57","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"58","messages":"59","suppressedMessages":"60","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"61","messages":"62","suppressedMessages":"63","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"64","messages":"65","suppressedMessages":"66","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"67","messages":"68","suppressedMessages":"69","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"70","messages":"71","suppressedMessages":"72","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"73","messages":"74","suppressedMessages":"75","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"76","messages":"77","suppressedMessages":"78","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"79","messages":"80","suppressedMessages":"81","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"82","messages":"83","suppressedMessages":"84","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"85","messages":"86","suppressedMessages":"87","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"C:\\Users\\HiteVision station\\Documents\\LanStart\\LanMontainDesktop\\electron.vite.config.ts",[],[],"C:\\Users\\HiteVision station\\Documents\\LanStart\\LanMontainDesktop\\eslint.config.mjs",[],[],"C:\\Users\\HiteVision station\\Documents\\LanStart\\LanMontainDesktop\\src\\app_list\\index.ts",[],[],"C:\\Users\\HiteVision station\\Documents\\LanStart\\LanMontainDesktop\\src\\app_list\\launch.ts",[],[],"C:\\Users\\HiteVision station\\Documents\\LanStart\\LanMontainDesktop\\src\\app_list\\list.ts",[],[],"C:\\Users\\HiteVision station\\Documents\\LanStart\\LanMontainDesktop\\src\\app_list\\paths.ts",[],[],"C:\\Users\\HiteVision station\\Documents\\LanStart\\LanMontainDesktop\\src\\app_list\\types.ts",[],[],"C:\\Users\\HiteVision station\\Documents\\LanStart\\LanMontainDesktop\\src\\eiysia\\app.ts",[],[],"C:\\Users\\HiteVision station\\Documents\\LanStart\\LanMontainDesktop\\src\\eiysia\\index.ts",[],[],"C:\\Users\\HiteVision station\\Documents\\LanStart\\LanMontainDesktop\\src\\eiysia\\ipc.ts",[],[],"C:\\Users\\HiteVision station\\Documents\\LanStart\\LanMontainDesktop\\src\\eiysia\\server.ts",[],[],"C:\\Users\\HiteVision station\\Documents\\LanStart\\LanMontainDesktop\\src\\main\\index.ts",[],[],"C:\\Users\\HiteVision station\\Documents\\LanStart\\LanMontainDesktop\\src\\preload\\index.d.ts",[],[],"C:\\Users\\HiteVision station\\Documents\\LanStart\\LanMontainDesktop\\src\\preload\\index.ts",[],[],"C:\\Users\\HiteVision station\\Documents\\LanStart\\LanMontainDesktop\\src\\renderer\\src\\env.d.ts",[],[],"C:\\Users\\HiteVision station\\Documents\\LanStart\\LanMontainDesktop\\src\\renderer\\src\\main.ts",[],[],"C:\\Users\\HiteVision station\\Documents\\LanStart\\LanMontainDesktop\\src\\SQLitte\\index.ts",[],[]] \ No newline at end of file diff --git a/.gitattributes b/.gitattributes deleted file mode 100644 index dfe0770..0000000 --- a/.gitattributes +++ /dev/null @@ -1,2 +0,0 @@ -# Auto detect text files and perform LF normalization -* text=auto diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 11fae49..0000000 --- a/.gitignore +++ /dev/null @@ -1,26 +0,0 @@ -# CakePHP 3 - -/vendor/* -/config/app.php - -/tmp/cache/models/* -!/tmp/cache/models/empty -/tmp/cache/persistent/* -!/tmp/cache/persistent/empty -/tmp/cache/views/* -!/tmp/cache/views/empty -/tmp/sessions/* -!/tmp/sessions/empty -/tmp/tests/* -!/tmp/tests/empty - -/logs/* -!/logs/empty - -# CakePHP 2 - -/app/tmp/* -/app/Config/core.php -/app/Config/database.php -/vendors/* -node_modules diff --git a/.npmrc b/.npmrc deleted file mode 100644 index 2ced952..0000000 --- a/.npmrc +++ /dev/null @@ -1,3 +0,0 @@ -electron_mirror=https://npmmirror.com/mirrors/electron/ -electron_builder_binaries_mirror=https://npmmirror.com/mirrors/electron-builder-binaries/ -shamefully-hoist=true diff --git a/.prettierignore b/.prettierignore deleted file mode 100644 index 9c6b791..0000000 --- a/.prettierignore +++ /dev/null @@ -1,6 +0,0 @@ -out -dist -pnpm-lock.yaml -LICENSE.md -tsconfig.json -tsconfig.*.json diff --git a/.prettierrc.yaml b/.prettierrc.yaml deleted file mode 100644 index 35893b3..0000000 --- a/.prettierrc.yaml +++ /dev/null @@ -1,4 +0,0 @@ -singleQuote: true -semi: false -printWidth: 100 -trailingComma: none diff --git a/.trae/.ignore b/.trae/.ignore deleted file mode 100644 index e69de29..0000000 diff --git a/.vscode/extensions.json b/.vscode/extensions.json deleted file mode 100644 index 940260d..0000000 --- a/.vscode/extensions.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "recommendations": ["dbaeumer.vscode-eslint"] -} diff --git a/.vscode/launch.json b/.vscode/launch.json deleted file mode 100644 index 0b6b9a6..0000000 --- a/.vscode/launch.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "version": "0.2.0", - "configurations": [ - { - "name": "Debug Main Process", - "type": "node", - "request": "launch", - "cwd": "${workspaceRoot}", - "runtimeExecutable": "${workspaceRoot}/node_modules/.bin/electron-vite", - "windows": { - "runtimeExecutable": "${workspaceRoot}/node_modules/.bin/electron-vite.cmd" - }, - "runtimeArgs": ["--sourcemap"], - "env": { - "REMOTE_DEBUGGING_PORT": "9222" - } - }, - { - "name": "Debug Renderer Process", - "port": 9222, - "request": "attach", - "type": "chrome", - "webRoot": "${workspaceFolder}/src/renderer", - "timeout": 60000, - "presentation": { - "hidden": true - } - } - ], - "compounds": [ - { - "name": "Debug All", - "configurations": ["Debug Main Process", "Debug Renderer Process"], - "presentation": { - "order": 1 - } - } - ] -} diff --git a/.vscode/settings.json b/.vscode/settings.json deleted file mode 100644 index 4c05394..0000000 --- a/.vscode/settings.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "[typescript]": { - "editor.defaultFormatter": "esbenp.prettier-vscode" - }, - "[javascript]": { - "editor.defaultFormatter": "esbenp.prettier-vscode" - }, - "[json]": { - "editor.defaultFormatter": "esbenp.prettier-vscode" - } -} diff --git a/README.md b/README.md deleted file mode 100644 index bc7616e..0000000 --- a/README.md +++ /dev/null @@ -1,55 +0,0 @@ -# LanMontainDesktop - -一个使用 Electron 打包的桌面应用:前端采用 Vue 3(Renderer),主进程内置 Elysia.js 作为本地后端服务(Main)。 - -## 技术栈 - -- Electron + electron-vite(主进程/构建/开发) -- Vue 3 + Vite + TypeScript(渲染进程 UI) -- Elysia.js + @elysiajs/node(主进程内的本地后端 API) - -## 架构说明 - -这个项目不是传统意义上“浏览器前端 + 远程后端”的部署形态,而是: - -- 主进程(Electron Main)负责创建窗口,并启动 Elysia.js(HTTP Server 绑定到 127.0.0.1 的随机端口)。 -- 预加载(Preload)通过 `ipcRenderer.invoke('eiysia:request', ...)` 把“类 HTTP 请求”转发到主进程里的 Elysia 路由。 -- 渲染进程(Vue 3 Renderer)通过 `window.api.call({ method, path, body })` 调用后端接口(例如 `/apps/list`、`/apps/launch`、`/open/external`)。 - -## 目录结构(关键) - -- `src/main/`:Electron 主进程入口(创建窗口、启动 Elysia 服务) -- `src/preload/`:Preload 桥接层(暴露 `window.api`) -- `src/renderer/`:Vue 3 渲染进程(UI 与交互) -- `src/eiysia/`:Elysia.js “后端”路由与启动逻辑 - -## 推荐 IDE - -- VSCode + Volar(Vue Language Features)+ ESLint + Prettier - -## 开发与构建 - -### 安装 - -```bash -$ pnpm install -``` - -### 开发 - -```bash -$ pnpm dev -``` - -### 构建 - -```bash -# For windows -$ pnpm build:win - -# For macOS -$ pnpm build:mac - -# For Linux -$ pnpm build:linux -``` diff --git a/build/entitlements.mac.plist b/build/entitlements.mac.plist deleted file mode 100644 index 38c887b..0000000 --- a/build/entitlements.mac.plist +++ /dev/null @@ -1,12 +0,0 @@ - - - - - com.apple.security.cs.allow-jit - - com.apple.security.cs.allow-unsigned-executable-memory - - com.apple.security.cs.allow-dyld-environment-variables - - - diff --git a/build/icon.icns b/build/icon.icns deleted file mode 100644 index 28644aa..0000000 Binary files a/build/icon.icns and /dev/null differ diff --git a/build/icon.ico b/build/icon.ico deleted file mode 100644 index 72c391e..0000000 Binary files a/build/icon.ico and /dev/null differ diff --git a/build/icon.png b/build/icon.png deleted file mode 100644 index cf9e8b2..0000000 Binary files a/build/icon.png and /dev/null differ diff --git a/dev-app-update.yml b/dev-app-update.yml deleted file mode 100644 index 592f420..0000000 --- a/dev-app-update.yml +++ /dev/null @@ -1,3 +0,0 @@ -provider: generic -url: https://example.com/auto-updates -updaterCacheDirName: desktop-updater diff --git a/electron-builder.yml b/electron-builder.yml deleted file mode 100644 index 7526a3f..0000000 --- a/electron-builder.yml +++ /dev/null @@ -1,46 +0,0 @@ -appId: com.electron.app -productName: desktop -directories: - buildResources: build -files: - - '!**/.vscode/*' - - '!src/*' - - '!electron.vite.config.{js,ts,mjs,cjs}' - - '!{.eslintcache,eslint.config.mjs,.prettierignore,.prettierrc.yaml,dev-app-update.yml,CHANGELOG.md,README.md}' - - '!{.env,.env.*,.npmrc,pnpm-lock.yaml}' - - '!{tsconfig.json,tsconfig.node.json,tsconfig.web.json}' -asarUnpack: - - resources/** - - '**/*.node' -win: - executableName: desktop -nsis: - artifactName: ${name}-${version}-setup.${ext} - shortcutName: ${productName} - uninstallDisplayName: ${productName} - createDesktopShortcut: always -mac: - entitlementsInherit: build/entitlements.mac.plist - extendInfo: - - NSCameraUsageDescription: Application requests access to the device's camera. - - NSMicrophoneUsageDescription: Application requests access to the device's microphone. - - NSDocumentsFolderUsageDescription: Application requests access to the user's Documents folder. - - NSDownloadsFolderUsageDescription: Application requests access to the user's Downloads folder. - notarize: false -dmg: - artifactName: ${name}-${version}.${ext} -linux: - target: - - AppImage - - snap - - deb - maintainer: electronjs.org - category: Utility -appImage: - artifactName: ${name}-${version}.${ext} -npmRebuild: false -publish: - provider: generic - url: https://example.com/auto-updates -electronDownload: - mirror: https://npmmirror.com/mirrors/electron/ diff --git a/electron.vite.config.ts b/electron.vite.config.ts deleted file mode 100644 index f7bab97..0000000 --- a/electron.vite.config.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { resolve } from 'path' -import { defineConfig } from 'electron-vite' -import vue from '@vitejs/plugin-vue' - -export default defineConfig({ - main: { - build: { - rollupOptions: { - external: ['better-sqlite3'] - } - } - }, - preload: {}, - renderer: { - resolve: { - alias: { - '@renderer': resolve('src/renderer/src') - } - }, - plugins: [vue()] - } -}) diff --git a/eslint.config.mjs b/eslint.config.mjs deleted file mode 100644 index faf8ee2..0000000 --- a/eslint.config.mjs +++ /dev/null @@ -1,9 +0,0 @@ -import { defineConfig } from 'eslint/config' -import tseslint from '@electron-toolkit/eslint-config-ts' -import eslintConfigPrettier from '@electron-toolkit/eslint-config-prettier' - -export default defineConfig( - { ignores: ['**/node_modules', '**/dist', '**/out', '**/*.vue'] }, - tseslint.configs.recommended, - eslintConfigPrettier -) diff --git a/icon/fluent_icon/fluent--agents-16-regular.svg b/icon/fluent_icon/fluent--agents-16-regular.svg deleted file mode 100644 index 0635975..0000000 --- a/icon/fluent_icon/fluent--agents-16-regular.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/icon/fluent_icon/fluent--agents-20-filled.svg b/icon/fluent_icon/fluent--agents-20-filled.svg deleted file mode 100644 index b19497a..0000000 --- a/icon/fluent_icon/fluent--agents-20-filled.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/icon/fluent_icon/fluent--apps-20-regular.svg b/icon/fluent_icon/fluent--apps-20-regular.svg deleted file mode 100644 index e2ac3c1..0000000 --- a/icon/fluent_icon/fluent--apps-20-regular.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/icon/fluent_icon/fluent--arrow-counterclockwise-20-regular.svg b/icon/fluent_icon/fluent--arrow-counterclockwise-20-regular.svg deleted file mode 100644 index e34add5..0000000 --- a/icon/fluent_icon/fluent--arrow-counterclockwise-20-regular.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/icon/fluent_icon/fluent--arrow-exit-20-regular.svg b/icon/fluent_icon/fluent--arrow-exit-20-regular.svg deleted file mode 100644 index e74f765..0000000 --- a/icon/fluent_icon/fluent--arrow-exit-20-regular.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/icon/fluent_icon/fluent--chat-history-20-regular.svg b/icon/fluent_icon/fluent--chat-history-20-regular.svg deleted file mode 100644 index 24af53c..0000000 --- a/icon/fluent_icon/fluent--chat-history-20-regular.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/icon/fluent_icon/fluent--circle-eraser-20-filled.svg b/icon/fluent_icon/fluent--circle-eraser-20-filled.svg deleted file mode 100644 index 66e70fe..0000000 --- a/icon/fluent_icon/fluent--circle-eraser-20-filled.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/icon/fluent_icon/fluent--circle-eraser-20-regular.svg b/icon/fluent_icon/fluent--circle-eraser-20-regular.svg deleted file mode 100644 index e500dab..0000000 --- a/icon/fluent_icon/fluent--circle-eraser-20-regular.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/icon/fluent_icon/fluent--circle-hint-cursor-20-regular.svg b/icon/fluent_icon/fluent--circle-hint-cursor-20-regular.svg deleted file mode 100644 index a268412..0000000 --- a/icon/fluent_icon/fluent--circle-hint-cursor-20-regular.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/icon/fluent_icon/fluent--clock-20-regular.svg b/icon/fluent_icon/fluent--clock-20-regular.svg deleted file mode 100644 index 8439a41..0000000 --- a/icon/fluent_icon/fluent--clock-20-regular.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/icon/fluent_icon/fluent--cursor-20-filled.svg b/icon/fluent_icon/fluent--cursor-20-filled.svg deleted file mode 100644 index 73ce55a..0000000 --- a/icon/fluent_icon/fluent--cursor-20-filled.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/icon/fluent_icon/fluent--cursor-20-regular.svg b/icon/fluent_icon/fluent--cursor-20-regular.svg deleted file mode 100644 index ee305cb..0000000 --- a/icon/fluent_icon/fluent--cursor-20-regular.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/icon/fluent_icon/fluent--database-person-20-regular.svg b/icon/fluent_icon/fluent--database-person-20-regular.svg deleted file mode 100644 index e0bfdb7..0000000 --- a/icon/fluent_icon/fluent--database-person-20-regular.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/icon/fluent_icon/fluent--developer-board-20-regular.svg b/icon/fluent_icon/fluent--developer-board-20-regular.svg deleted file mode 100644 index 4fb8c02..0000000 --- a/icon/fluent_icon/fluent--developer-board-20-regular.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/icon/fluent_icon/fluent--eraser-20-filled.svg b/icon/fluent_icon/fluent--eraser-20-filled.svg deleted file mode 100644 index 8b215cf..0000000 --- a/icon/fluent_icon/fluent--eraser-20-filled.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/icon/fluent_icon/fluent--eraser-20-regular.svg b/icon/fluent_icon/fluent--eraser-20-regular.svg deleted file mode 100644 index 9c0b9e1..0000000 --- a/icon/fluent_icon/fluent--eraser-20-regular.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/icon/fluent_icon/fluent--eraser-medium-20-filled.svg b/icon/fluent_icon/fluent--eraser-medium-20-filled.svg deleted file mode 100644 index 5526310..0000000 --- a/icon/fluent_icon/fluent--eraser-medium-20-filled.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/icon/fluent_icon/fluent--eraser-medium-20-regular.svg b/icon/fluent_icon/fluent--eraser-medium-20-regular.svg deleted file mode 100644 index 14ad6e9..0000000 --- a/icon/fluent_icon/fluent--eraser-medium-20-regular.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/icon/fluent_icon/fluent--history-20-regular.svg b/icon/fluent_icon/fluent--history-20-regular.svg deleted file mode 100644 index c6e06ab..0000000 --- a/icon/fluent_icon/fluent--history-20-regular.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/icon/fluent_icon/fluent--keyboard-20-filled.svg b/icon/fluent_icon/fluent--keyboard-20-filled.svg deleted file mode 100644 index 4aea898..0000000 --- a/icon/fluent_icon/fluent--keyboard-20-filled.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/icon/fluent_icon/fluent--keyboard-20-regular.svg b/icon/fluent_icon/fluent--keyboard-20-regular.svg deleted file mode 100644 index c50175e..0000000 --- a/icon/fluent_icon/fluent--keyboard-20-regular.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/icon/fluent_icon/fluent--pause-20-regular.svg b/icon/fluent_icon/fluent--pause-20-regular.svg deleted file mode 100644 index 5879f23..0000000 --- a/icon/fluent_icon/fluent--pause-20-regular.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/icon/fluent_icon/fluent--pen-20-filled.svg b/icon/fluent_icon/fluent--pen-20-filled.svg deleted file mode 100644 index 4a30b90..0000000 --- a/icon/fluent_icon/fluent--pen-20-filled.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/icon/fluent_icon/fluent--pen-20-regular.svg b/icon/fluent_icon/fluent--pen-20-regular.svg deleted file mode 100644 index 0966eaa..0000000 --- a/icon/fluent_icon/fluent--pen-20-regular.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/icon/fluent_icon/fluent--picture-in-picture-exit-20-filled.svg b/icon/fluent_icon/fluent--picture-in-picture-exit-20-filled.svg deleted file mode 100644 index 72ee77d..0000000 --- a/icon/fluent_icon/fluent--picture-in-picture-exit-20-filled.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/icon/fluent_icon/fluent--picture-in-picture-exit-20-regular.svg b/icon/fluent_icon/fluent--picture-in-picture-exit-20-regular.svg deleted file mode 100644 index 73aab40..0000000 --- a/icon/fluent_icon/fluent--picture-in-picture-exit-20-regular.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/icon/fluent_icon/fluent--pin-20-filled.svg b/icon/fluent_icon/fluent--pin-20-filled.svg deleted file mode 100644 index 88366d9..0000000 --- a/icon/fluent_icon/fluent--pin-20-filled.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/icon/fluent_icon/fluent--pin-20-regular.svg b/icon/fluent_icon/fluent--pin-20-regular.svg deleted file mode 100644 index eac307c..0000000 --- a/icon/fluent_icon/fluent--pin-20-regular.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/icon/fluent_icon/fluent--play-20-regular.svg b/icon/fluent_icon/fluent--play-20-regular.svg deleted file mode 100644 index 724f24f..0000000 --- a/icon/fluent_icon/fluent--play-20-regular.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/icon/fluent_icon/fluent--poll-horizontal-20-regular.svg b/icon/fluent_icon/fluent--poll-horizontal-20-regular.svg deleted file mode 100644 index 8473d89..0000000 --- a/icon/fluent_icon/fluent--poll-horizontal-20-regular.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/icon/fluent_icon/fluent--re-order-vertical-20-filled.svg b/icon/fluent_icon/fluent--re-order-vertical-20-filled.svg deleted file mode 100644 index 5507d80..0000000 --- a/icon/fluent_icon/fluent--re-order-vertical-20-filled.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/icon/fluent_icon/fluent--re-order-vertical-20-regular.svg b/icon/fluent_icon/fluent--re-order-vertical-20-regular.svg deleted file mode 100644 index ab18cc5..0000000 --- a/icon/fluent_icon/fluent--re-order-vertical-20-regular.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/icon/fluent_icon/fluent--settings-20-regular.svg b/icon/fluent_icon/fluent--settings-20-regular.svg deleted file mode 100644 index 81a488b..0000000 --- a/icon/fluent_icon/fluent--settings-20-regular.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/icon/fluent_icon/fluent--store-microsoft-20-regular.svg b/icon/fluent_icon/fluent--store-microsoft-20-regular.svg deleted file mode 100644 index 24cc18d..0000000 --- a/icon/fluent_icon/fluent--store-microsoft-20-regular.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/icon/fluent_icon/fluent--video-20-regular.svg b/icon/fluent_icon/fluent--video-20-regular.svg deleted file mode 100644 index 2cf49b8..0000000 --- a/icon/fluent_icon/fluent--video-20-regular.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/icon/fluent_icon/fluent--whiteboard-20-filled.svg b/icon/fluent_icon/fluent--whiteboard-20-filled.svg deleted file mode 100644 index 1499de5..0000000 --- a/icon/fluent_icon/fluent--whiteboard-20-filled.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/icon/fluent_icon/fluent--whiteboard-20-regular.svg b/icon/fluent_icon/fluent--whiteboard-20-regular.svg deleted file mode 100644 index d402220..0000000 --- a/icon/fluent_icon/fluent--whiteboard-20-regular.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/out/main/index.js b/out/main/index.js deleted file mode 100644 index b86099c..0000000 --- a/out/main/index.js +++ /dev/null @@ -1,470 +0,0 @@ -"use strict"; -const electron = require("electron"); -const path = require("path"); -const utils = require("@electron-toolkit/utils"); -const elysia = require("elysia"); -const child_process = require("child_process"); -const fs = require("fs"); -const util = require("util"); -const node = require("@elysiajs/node"); -const icon = path.join(__dirname, "../../resources/icon.png"); -function getStartMenuPaths() { - const appData = process.env["APPDATA"]; - const programData = process.env["ProgramData"] ?? process.env["PROGRAMDATA"]; - return { - userProgramsPath: appData ? path.join(appData, "Microsoft", "Windows", "Start Menu", "Programs") : null, - commonProgramsPath: programData ? path.join(programData, "Microsoft", "Windows", "Start Menu", "Programs") : null - }; -} -function getStartMenuRoots() { - const { userProgramsPath, commonProgramsPath } = getStartMenuPaths(); - return [userProgramsPath, commonProgramsPath].filter((p) => Boolean(p)); -} -const execFileAsync$2 = util.promisify(child_process.execFile); -function getWindowsPowerShellExe() { - const systemRoot = process.env["SystemRoot"] ?? process.env["WINDIR"] ?? "C:\\Windows"; - return path.join(systemRoot, "System32", "WindowsPowerShell", "v1.0", "powershell.exe"); -} -function buildPowerShellScript(roots) { - const rootsJson = JSON.stringify(roots).replace(/'/g, "''"); - return [ - "[Console]::OutputEncoding = [System.Text.Encoding]::UTF8", - '$ErrorActionPreference = "Stop"', - "$out = $null", - "try {", - `$roots = '${rootsJson}' | ConvertFrom-Json`, - "$wsh = New-Object -ComObject WScript.Shell", - "$entries = @()", - "foreach ($root in $roots) {", - " if (-not (Test-Path -LiteralPath $root)) { continue }", - " Get-ChildItem -LiteralPath $root -Recurse -File -ErrorAction SilentlyContinue | ForEach-Object {", - " $ext = $_.Extension.ToLowerInvariant()", - ' if ($ext -ne ".lnk" -and $ext -ne ".url" -and $ext -ne ".appref-ms") { return }', - ' $source = "unknown"', - ' if ($root -like "*\\\\AppData\\\\Roaming*") { $source = "user" }', - ' if ($root -like "*\\\\ProgramData*") { $source = "common" }', - ' $rel = $_.FullName.Substring($root.Length).TrimStart("\\\\")', - ' if ($ext -eq ".lnk") {', - " $sc = $wsh.CreateShortcut($_.FullName)", - " $entries += [pscustomobject]@{", - " id = $_.FullName", - " name = $_.BaseName", - ' type = "lnk"', - " filePath = $_.FullName", - " relativePath = $rel", - " targetPath = $sc.TargetPath", - " arguments = $sc.Arguments", - " workingDirectory = $sc.WorkingDirectory", - " iconLocation = $sc.IconLocation", - " description = $sc.Description", - " source = $source", - " }", - " return", - " }", - ' $t = "appref-ms"', - ' if ($ext -eq ".url") { $t = "url" }', - " $entries += [pscustomobject]@{", - " id = $_.FullName", - " name = $_.BaseName", - " type = $t", - " filePath = $_.FullName", - " relativePath = $rel", - " source = $source", - " }", - " }", - "}", - "$usedStartApps = $false", - "try {", - " $startApps = Get-StartApps | Select-Object Name, AppID", - " if ($startApps -ne $null) {", - " $usedStartApps = $true", - " foreach ($a in $startApps) {", - " if ([string]::IsNullOrWhiteSpace($a.AppID)) { continue }", - " $entries += [pscustomobject]@{", - ' id = "appsFolder:" + $a.AppID', - " name = $a.Name", - ' type = "uwp"', - ' filePath = "shell:AppsFolder\\\\" + $a.AppID', - ' relativePath = "AppsFolder\\\\" + $a.Name', - " appUserModelId = $a.AppID", - ' source = "appsfolder"', - " }", - " }", - " }", - "} catch { }", - "if (-not $usedStartApps) {", - " $shell = New-Object -ComObject Shell.Application", - ' $appsFolder = $shell.NameSpace("shell:AppsFolder")', - " if ($appsFolder -ne $null) {", - " $appsFolder.Items() | ForEach-Object {", - " $aumid = $_.Path", - " if ([string]::IsNullOrWhiteSpace($aumid)) { return }", - " $name = $_.Name", - " $entries += [pscustomobject]@{", - ' id = "appsFolder:" + $aumid', - " name = $name", - ' type = "uwp"', - ' filePath = "shell:AppsFolder\\\\" + $aumid', - ' relativePath = "AppsFolder\\\\" + $name', - " appUserModelId = $aumid", - ' source = "appsfolder"', - " }", - " }", - " }", - "}", - "$out = [pscustomobject]@{ ok = $true; entries = $entries }", - "} catch {", - " $out = [pscustomobject]@{ ok = $false; error = ($_ | Out-String); entries = @() }", - "}", - "$out | ConvertTo-Json -Depth 6" - ].join("\n"); -} -async function listWindowsStartMenuApps() { - if (process.platform !== "win32") return []; - const roots = getStartMenuRoots(); - const script = buildPowerShellScript(roots); - const powershellExe = getWindowsPowerShellExe(); - const { stdout } = await execFileAsync$2( - powershellExe, - ["-NoProfile", "-NonInteractive", "-Sta", "-ExecutionPolicy", "Bypass", "-Command", script], - { windowsHide: true, maxBuffer: 50 * 1024 * 1024, timeout: 6e4 } - ); - const trimmed = stdout.trim(); - if (!trimmed) return []; - const parsed = JSON.parse(trimmed); - if (typeof parsed === "object" && parsed !== null && "ok" in parsed) { - const ok = parsed.ok; - if (ok === false) { - const error = parsed.error; - throw new Error(typeof error === "string" ? error : "PowerShellFailed"); - } - } - const rawEntries = typeof parsed === "object" && parsed !== null && "entries" in parsed ? parsed.entries : parsed; - const list = Array.isArray(rawEntries) ? rawEntries : rawEntries ? [rawEntries] : []; - const isEntry = (value) => { - if (typeof value !== "object" || value === null) return false; - const v = value; - return typeof v.id === "string" && typeof v.name === "string" && typeof v.type === "string" && typeof v.filePath === "string" && typeof v.relativePath === "string"; - }; - const seen = /* @__PURE__ */ new Set(); - const result = []; - for (const item of list) { - if (!isEntry(item)) continue; - if (seen.has(item.id)) continue; - seen.add(item.id); - result.push(item); - } - result.sort((a, b) => a.name.localeCompare(b.name, "zh-CN")); - return result; -} -const execFileAsync$1 = util.promisify(child_process.execFile); -function isUnderRoot(filePath, root) { - const normalizedFile = path.resolve(filePath).toLowerCase(); - const normalizedRoot = path.resolve(root).toLowerCase(); - return normalizedFile === normalizedRoot || normalizedFile.startsWith(normalizedRoot + "\\"); -} -async function launchStartMenuEntry(filePath) { - if (process.platform !== "win32") return; - if (filePath.startsWith("shell:AppsFolder\\")) { - await execFileAsync$1("explorer.exe", [filePath], { windowsHide: true }); - return; - } - const roots = getStartMenuRoots(); - const allowed = roots.some((root) => isUnderRoot(filePath, root)); - if (!allowed) { - throw new Error("PathNotAllowed"); - } - const result = await electron.shell.openPath(filePath); - if (result) { - throw new Error(result); - } -} -const execFileAsync = util.promisify(child_process.execFile); -function createEiysiaApp(deps) { - const iconCache = /* @__PURE__ */ new Map(); - const appsCacheFilePath = path.join(electron.app.getPath("userData"), "apps-cache.json"); - let cachedApps = []; - let cacheLoadPromise = null; - let refreshPromise = null; - const ensureAppsCacheLoaded = async () => { - if (cacheLoadPromise) return cacheLoadPromise; - cacheLoadPromise = (async () => { - try { - const raw = await fs.promises.readFile(appsCacheFilePath, "utf-8"); - const parsed = JSON.parse(raw); - const apps = Array.isArray(parsed.apps) ? parsed.apps : []; - const parsedApps = apps.map((a) => { - const id = typeof a.id === "string" ? a.id : ""; - const name = typeof a.name === "string" ? a.name : ""; - const filePath = typeof a.filePath === "string" ? a.filePath : ""; - const iconDataUrl = typeof a.iconDataUrl === "string" ? a.iconDataUrl : ""; - if (!id || !name || !filePath || !iconDataUrl) return null; - return { id, name, filePath, iconDataUrl }; - }); - cachedApps = parsedApps.filter((a) => Boolean(a)); - } catch { - cachedApps = []; - } - })(); - return cacheLoadPromise; - }; - const persistAppsCache = async (apps) => { - const payload = JSON.stringify( - { - version: 1, - updatedAt: Date.now(), - apps - }, - null, - 2 - ); - await fs.promises.writeFile(appsCacheFilePath, payload, "utf-8"); - }; - const refreshAppsCache = async () => { - if (refreshPromise) return refreshPromise; - refreshPromise = (async () => { - const cachedById = new Map(cachedApps.map((a) => [a.id, a])); - const entries = await listWindowsStartMenuApps(); - let index = 0; - const limit = Math.max(4, Math.min(16, entries.length)); - const nextApps = new Array(entries.length); - const workers = Array.from({ length: limit }, async () => { - while (true) { - const i = index; - index += 1; - if (i >= entries.length) return; - const e = entries[i]; - const cached = cachedById.get(e.id); - if (cached && cached.name === e.name && cached.filePath === e.filePath && cached.iconDataUrl) { - nextApps[i] = cached; - continue; - } - const iconDataUrl = await getIconDataUrl(e); - nextApps[i] = { id: e.id, name: e.name, filePath: e.filePath, iconDataUrl }; - } - }); - await Promise.all(workers); - cachedApps = nextApps.filter(Boolean); - await persistAppsCache(cachedApps); - })().finally(() => { - refreshPromise = null; - }); - return refreshPromise; - }; - const placeholderIconDataUrl = (name, id) => { - const letter = (name.trim().charAt(0) || "?").toUpperCase(); - let hash = 0; - for (let i = 0; i < id.length; i += 1) { - hash = hash * 31 + id.charCodeAt(i) | 0; - } - const hue = Math.abs(hash) % 360; - const svg = `${letter.replace( - /[<>&]/g, - "" - )}`; - return `data:image/svg+xml;base64,${Buffer.from(svg, "utf-8").toString("base64")}`; - }; - const getIconDataUrl = async (entry) => { - const cached = iconCache.get(entry.id); - if (cached) return cached; - if (entry.type === "uwp" || entry.filePath.startsWith("shell:")) { - const dataUrl = placeholderIconDataUrl(entry.name, entry.id); - iconCache.set(entry.id, dataUrl); - return dataUrl; - } - if (!electron.app.isReady()) { - const dataUrl = placeholderIconDataUrl(entry.name, entry.id); - iconCache.set(entry.id, dataUrl); - return dataUrl; - } - try { - const tryPath = typeof entry.targetPath === "string" && entry.targetPath.trim() ? entry.targetPath : entry.filePath; - const rawIcon = await electron.app.getFileIcon(tryPath, { size: "large" }).catch(() => electron.app.getFileIcon(tryPath, { size: "normal" })); - let icon2 = rawIcon; - if (!icon2.isEmpty()) { - const { width, height } = icon2.getSize(); - const target = 64; - if (width > 0 && height > 0 && (width < target || height < target)) { - icon2 = icon2.resize({ width: target, height: target, quality: "best" }); - } - } - const dataUrl = icon2.isEmpty() ? placeholderIconDataUrl(entry.name, entry.id) : icon2.toDataURL(); - iconCache.set(entry.id, dataUrl); - return dataUrl; - } catch { - const dataUrl = placeholderIconDataUrl(entry.name, entry.id); - iconCache.set(entry.id, dataUrl); - return dataUrl; - } - }; - return new elysia.Elysia().get("/health", () => ({ - ok: true, - time: Date.now() - })).onStart(() => { - void ensureAppsCacheLoaded().then(() => refreshAppsCache()); - }).get("/apps/list", async () => { - try { - await ensureAppsCacheLoaded(); - if (cachedApps.length === 0) { - await refreshAppsCache(); - } else { - void refreshAppsCache(); - } - return { apps: cachedApps, error: null }; - } catch (error) { - const message = error instanceof Error ? error.message : "UnknownError"; - console.error("[apps/list] failed:", message); - return { apps: [], error: message }; - } - }).post("/apps/launch", async ({ body }) => { - const payload = body; - if (typeof payload.filePath !== "string") { - return new Response("BadRequest", { status: 400 }); - } - try { - await launchStartMenuEntry(payload.filePath); - return { ok: true }; - } catch (error) { - const message = error instanceof Error ? error.message : "UnknownError"; - if (message === "PathNotAllowed") return new Response("Forbidden", { status: 403 }); - return new Response("LaunchFailed", { status: 500 }); - } - }).post("/open/external", async ({ body }) => { - const payload = body; - if (typeof payload.url !== "string") { - return new Response("BadRequest", { status: 400 }); - } - const url = payload.url.trim(); - if (!url) return new Response("BadRequest", { status: 400 }); - const lower = url.toLowerCase(); - if (lower.startsWith("javascript:") || lower.startsWith("data:") || lower.startsWith("file:")) { - return new Response("Forbidden", { status: 403 }); - } - try { - if (process.platform === "win32" && lower.startsWith("shell:")) { - await execFileAsync("explorer.exe", [url], { windowsHide: true }); - return { ok: true }; - } - await electron.shell.openExternal(url); - return { ok: true }; - } catch { - return new Response("OpenFailed", { status: 500 }); - } - }).get("/backend/port", () => ({ - port: deps.getHttpPort() - })).post("/app/minimize", () => { - deps.getMainWindow()?.minimize(); - return { ok: true }; - }); -} -function registerEiysiaIpc(app) { - electron.ipcMain.handle( - "eiysia:request", - async (_event, payload) => { - const method = payload.method?.toUpperCase?.() ?? "GET"; - const path2 = payload.path?.startsWith("/") ? payload.path : `/${payload.path ?? ""}`; - const headers = new Headers(payload.headers ?? {}); - let body; - if (payload.body !== void 0) { - if (typeof payload.body === "string" || payload.body instanceof ArrayBuffer || ArrayBuffer.isView(payload.body)) { - body = payload.body; - } else { - body = JSON.stringify(payload.body); - if (!headers.has("content-type")) { - headers.set("content-type", "application/json"); - } - } - } - const request = new Request(`http://eiysia.local${path2}`, { - method, - headers, - body - }); - const response = await app.handle(request); - const bodyText = await response.text(); - return { - status: response.status, - headers: Object.fromEntries(response.headers.entries()), - bodyText - }; - } - ); -} -function startEiysiaHttpServer(app) { - const serverApp = new elysia.Elysia({ adapter: node.node() }).use(app).listen({ hostname: "127.0.0.1", port: 0 }); - let stopped = false; - const stop = () => { - if (stopped) return; - stopped = true; - try { - if (!serverApp.server) return; - const maybe = serverApp; - if (typeof maybe.stop === "function") maybe.stop(); - else if (typeof maybe.close === "function") maybe.close(); - } catch { - return; - } - }; - return { - app: serverApp, - port: serverApp.server?.port ?? null, - stop - }; -} -electron.app.commandLine.appendSwitch("touch-events", "enabled"); -let mainWindow = null; -let eiysiaServerStop = null; -let eiysiaHttpPort = null; -function createWindow() { - const window = new electron.BrowserWindow({ - show: false, - autoHideMenuBar: true, - fullscreen: true, - ...process.platform === "linux" ? { icon } : {}, - webPreferences: { - preload: path.join(__dirname, "../preload/index.js"), - sandbox: false - } - }); - mainWindow = window; - window.on("ready-to-show", () => { - window.show(); - }); - window.webContents.setWindowOpenHandler((details) => { - electron.shell.openExternal(details.url); - return { action: "deny" }; - }); - if (utils.is.dev && process.env["ELECTRON_RENDERER_URL"]) { - window.loadURL(process.env["ELECTRON_RENDERER_URL"]); - } else { - window.loadFile(path.join(__dirname, "../renderer/index.html")); - } -} -electron.app.whenReady().then(() => { - utils.electronApp.setAppUserModelId("com.electron"); - electron.app.on("browser-window-created", (_, window) => { - utils.optimizer.watchWindowShortcuts(window); - }); - const eiysia = createEiysiaApp({ - getMainWindow: () => mainWindow, - getHttpPort: () => eiysiaHttpPort - }); - registerEiysiaIpc(eiysia); - const server = startEiysiaHttpServer(eiysia); - eiysiaHttpPort = server.port; - eiysiaServerStop = server.stop; - createWindow(); - electron.app.on("activate", function() { - if (electron.BrowserWindow.getAllWindows().length === 0) createWindow(); - }); -}); -electron.app.on("window-all-closed", () => { - if (process.platform !== "darwin") { - electron.app.quit(); - } -}); -electron.app.on("before-quit", () => { - eiysiaServerStop?.(); - eiysiaServerStop = null; - eiysiaHttpPort = null; -}); diff --git a/out/preload/index.js b/out/preload/index.js deleted file mode 100644 index 61f1529..0000000 --- a/out/preload/index.js +++ /dev/null @@ -1,25 +0,0 @@ -"use strict"; -const electron = require("electron"); -const preload = require("@electron-toolkit/preload"); -const api = { - request: (payload) => electron.ipcRenderer.invoke("eiysia:request", payload), - call: async (payload) => { - const response = await electron.ipcRenderer.invoke("eiysia:request", payload); - const contentType = response.headers["content-type"] ?? response.headers["Content-Type"]; - if (contentType?.includes("application/json")) { - return JSON.parse(response.bodyText); - } - return response.bodyText; - } -}; -if (process.contextIsolated) { - try { - electron.contextBridge.exposeInMainWorld("electron", preload.electronAPI); - electron.contextBridge.exposeInMainWorld("api", api); - } catch (error) { - console.error(error); - } -} else { - window.electron = preload.electronAPI; - window.api = api; -} diff --git a/out/renderer/assets/index-BOqh2SqZ.css b/out/renderer/assets/index-BOqh2SqZ.css deleted file mode 100644 index 851ac91..0000000 --- a/out/renderer/assets/index-BOqh2SqZ.css +++ /dev/null @@ -1,1216 +0,0 @@ -:root { - --ev-c-white: #ffffff; - --ev-c-white-soft: #f8f8f8; - --ev-c-white-mute: #f2f2f2; - - --ev-c-black: #1b1b1f; - --ev-c-black-soft: #222222; - --ev-c-black-mute: #282828; - - --ev-c-gray-1: #515c67; - --ev-c-gray-2: #414853; - --ev-c-gray-3: #32363f; - - --ev-c-text-1: rgba(255, 255, 245, 0.86); - --ev-c-text-2: rgba(235, 235, 245, 0.6); - --ev-c-text-3: rgba(235, 235, 245, 0.38); - - --ev-button-alt-border: transparent; - --ev-button-alt-text: var(--ev-c-text-1); - --ev-button-alt-bg: var(--ev-c-gray-3); - --ev-button-alt-hover-border: transparent; - --ev-button-alt-hover-text: var(--ev-c-text-1); - --ev-button-alt-hover-bg: var(--ev-c-gray-2); -} - -:root { - --color-background: var(--ev-c-black); - --color-background-soft: var(--ev-c-black-soft); - --color-background-mute: var(--ev-c-black-mute); - - --color-text: var(--ev-c-text-1); -} - -*, -*::before, -*::after { - box-sizing: border-box; - margin: 0; - font-weight: normal; -} - -ul { - list-style: none; -} - -body { - min-height: 100vh; - color: var(--color-text); - background: var(--color-background); - line-height: 1.6; - font-family: - Inter, - -apple-system, - BlinkMacSystemFont, - 'Segoe UI', - Roboto, - Oxygen, - Ubuntu, - Cantarell, - 'Fira Sans', - 'Droid Sans', - 'Helvetica Neue', - sans-serif; - text-rendering: optimizeLegibility; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} - -body { - margin: 0; - width: 100vw; - height: 100vh; - overflow: hidden; - background-image: url("data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%201422%20800'%20opacity='0.3'%3e%3cdefs%3e%3clinearGradient%20x1='50%25'%20y1='0%25'%20x2='50%25'%20y2='100%25'%20id='oooscillate-grad'%3e%3cstop%20stop-color='hsl(206,%2075%25,%2049%25)'%20stop-opacity='1'%20offset='0%25'%3e%3c/stop%3e%3cstop%20stop-color='hsl(331,%2090%25,%2056%25)'%20stop-opacity='1'%20offset='100%25'%3e%3c/stop%3e%3c/linearGradient%3e%3c/defs%3e%3cg%20stroke-width='1'%20stroke='url(%23oooscillate-grad)'%20fill='none'%20stroke-linecap='round'%3e%3cpath%20d='M%200%20448%20Q%20355.5%20-100%20711%20400%20Q%201066.5%20900%201422%20448'%20opacity='0.05'%3e%3c/path%3e%3cpath%20d='M%200%20420%20Q%20355.5%20-100%20711%20400%20Q%201066.5%20900%201422%20420'%20opacity='0.11'%3e%3c/path%3e%3cpath%20d='M%200%20392%20Q%20355.5%20-100%20711%20400%20Q%201066.5%20900%201422%20392'%20opacity='0.18'%3e%3c/path%3e%3cpath%20d='M%200%20364%20Q%20355.5%20-100%20711%20400%20Q%201066.5%20900%201422%20364'%20opacity='0.24'%3e%3c/path%3e%3cpath%20d='M%200%20336%20Q%20355.5%20-100%20711%20400%20Q%201066.5%20900%201422%20336'%20opacity='0.30'%3e%3c/path%3e%3cpath%20d='M%200%20308%20Q%20355.5%20-100%20711%20400%20Q%201066.5%20900%201422%20308'%20opacity='0.37'%3e%3c/path%3e%3cpath%20d='M%200%20280%20Q%20355.5%20-100%20711%20400%20Q%201066.5%20900%201422%20280'%20opacity='0.43'%3e%3c/path%3e%3cpath%20d='M%200%20252%20Q%20355.5%20-100%20711%20400%20Q%201066.5%20900%201422%20252'%20opacity='0.49'%3e%3c/path%3e%3cpath%20d='M%200%20224%20Q%20355.5%20-100%20711%20400%20Q%201066.5%20900%201422%20224'%20opacity='0.56'%3e%3c/path%3e%3cpath%20d='M%200%20196%20Q%20355.5%20-100%20711%20400%20Q%201066.5%20900%201422%20196'%20opacity='0.62'%3e%3c/path%3e%3cpath%20d='M%200%20168%20Q%20355.5%20-100%20711%20400%20Q%201066.5%20900%201422%20168'%20opacity='0.68'%3e%3c/path%3e%3cpath%20d='M%200%20140%20Q%20355.5%20-100%20711%20400%20Q%201066.5%20900%201422%20140'%20opacity='0.75'%3e%3c/path%3e%3cpath%20d='M%200%20112%20Q%20355.5%20-100%20711%20400%20Q%201066.5%20900%201422%20112'%20opacity='0.81'%3e%3c/path%3e%3cpath%20d='M%200%2084%20Q%20355.5%20-100%20711%20400%20Q%201066.5%20900%201422%2084'%20opacity='0.87'%3e%3c/path%3e%3cpath%20d='M%200%2056%20Q%20355.5%20-100%20711%20400%20Q%201066.5%20900%201422%2056'%20opacity='0.94'%3e%3c/path%3e%3c/g%3e%3c/svg%3e"); - background-size: cover; - user-select: none; -} - -#root { - width: 100%; - height: 100%; -} - -.screen { - width: 100%; - height: 100%; -} - -.pagesViewport { - width: 100%; - height: 100%; - overflow: hidden; -} - -.pagesTrack { - width: 200%; - height: 100%; - display: flex; - flex-direction: row; - transition: transform 220ms ease; - will-change: transform; -} - -.pagesTrack[data-active='home'] { - transform: translateX(0); -} - -.pagesTrack[data-active='apps'] { - transform: translateX(-50%); -} - -.page { - width: 50%; - height: 100%; - transform: translateZ(0); - position: relative; -} - -.touchButton { - touch-action: manipulation; - -webkit-tap-highlight-color: transparent; -} - -.launcher { - position: fixed; - left: 16px; - top: 84px; - width: 520px; - height: calc(100vh - 168px); - padding: 12px; - background: rgba(0, 0, 0, 0.28); - border: 1px solid rgba(255, 255, 255, 0.12); - border-radius: 14px; - backdrop-filter: blur(12px); - box-sizing: border-box; -} - -.home { - position: fixed; - left: 0; - top: 0; - width: 100%; - height: 100%; - display: flex; - align-items: stretch; - justify-content: flex-start; -} - -.desktopGridShell { - position: fixed; - left: 16px; - top: 88px; - bottom: 96px; - right: calc(50vw + 8px); - display: block; - box-sizing: border-box; -} - -.desktopGrid { - display: grid; - grid-template-columns: repeat(4, minmax(160px, 1fr)); - grid-template-rows: repeat(4, minmax(120px, 1fr)); - gap: 12px; - box-sizing: border-box; -} - -.deskTile { - cursor: default; - border-radius: 16px; - border: 1px solid rgba(255, 255, 255, 0.12); - background: rgba(0, 0, 0, 0.25); - color: var(--ev-c-text-1); - padding: 14px; - box-sizing: border-box; - display: flex; - flex-direction: column; - justify-content: center; - align-items: flex-start; - text-align: left; - overflow: hidden; -} - -button.deskTile { - cursor: pointer; -} - -.deskTile:hover { - border-color: rgba(255, 255, 255, 0.2); - background: rgba(0, 0, 0, 0.35); -} - -.deskTile:active { - border-color: rgba(255, 255, 255, 0.26); - background: rgba(0, 0, 0, 0.5); -} - -.deskTileTitle { - font-size: 20px; - line-height: 24px; - font-weight: 900; -} - -.deskTileSubtitle { - font-size: 14px; - line-height: 18px; - font-weight: 700; - opacity: 0.85; -} - -.deskTileRow { - width: 100%; - display: flex; - align-items: center; - gap: 12px; -} - -.deskTileIcon { - width: 34px; - height: 34px; - flex: 0 0 auto; - opacity: 0.95; -} - -.deskTileText { - font-size: 20px; - line-height: 24px; - font-weight: 900; -} - -.deskTile--panel { - justify-content: flex-start; - padding: 12px; -} - -.writingPanelTitle { - font-size: 20px; - line-height: 24px; - font-weight: 900; - margin-bottom: 10px; -} - -.writingPanelButtons { - width: 100%; - display: grid; - grid-template-columns: 1fr; - gap: 10px; -} - -.writingActionButton { - width: 100%; - height: 52px; - cursor: pointer; - display: flex; - align-items: center; - gap: 12px; - border-radius: 14px; - padding: 0 12px; - border: 1px solid rgba(255, 255, 255, 0.12); - background: rgba(0, 0, 0, 0.18); - color: var(--ev-c-text-1); - box-sizing: border-box; -} - -.writingActionButton:hover { - border-color: rgba(255, 255, 255, 0.22); - background: rgba(0, 0, 0, 0.3); -} - -.writingActionButton:active { - border-color: rgba(255, 255, 255, 0.26); - background: rgba(0, 0, 0, 0.45); -} - -.writingActionIcon { - width: 20px; - height: 20px; - flex: 0 0 auto; - opacity: 0.95; -} - -.writingActionText { - font-size: 16px; - line-height: 18px; - font-weight: 900; -} - -.deskTile--accent { - background: rgba(0, 0, 0, 0.45); -} - -.deskTile--soft { - background: rgba(0, 0, 0, 0.18); -} - -.notesPanel { - position: fixed; - top: 88px; - right: 16px; - bottom: 96px; - left: calc(50vw + 8px); - background: rgba(0, 0, 0, 0.28); - border: 1px solid rgba(255, 255, 255, 0.12); - border-radius: 14px; - backdrop-filter: blur(12px); - box-sizing: border-box; - overflow: hidden; - display: grid; - grid-template-rows: 56px 1fr; -} - -.notesHeader { - display: flex; - align-items: center; - justify-content: space-between; - padding: 0 14px; - font-size: 18px; - line-height: 22px; - font-weight: 800; - border-bottom: 1px solid rgba(255, 255, 255, 0.1); - background: rgba(0, 0, 0, 0.2); -} - -.notesHeaderTitle { - font-size: 18px; - line-height: 22px; - font-weight: 900; -} - -.notesAddButton { - cursor: pointer; - border-radius: 14px; - padding: 0 14px; - border: 1px solid rgba(255, 255, 255, 0.12); - color: var(--ev-c-text-1); - background: rgba(0, 0, 0, 0.18); - font-size: 16px; - line-height: 18px; - font-weight: 800; - height: 40px; -} - -.notesAddButton:hover { - border-color: rgba(255, 255, 255, 0.22); - background: rgba(0, 0, 0, 0.32); -} - -.notesGrid { - height: 100%; - overflow: auto; - padding: 12px; - box-sizing: border-box; - display: grid; - grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); - grid-auto-rows: 200px; - gap: 12px; - scrollbar-width: none; - -ms-overflow-style: none; -} - -.notesGrid::-webkit-scrollbar { - width: 0; - height: 0; - display: none; -} - -.noteCard { - border-radius: 14px; - border: 1px solid rgba(255, 255, 255, 0.12); - background: rgba(0, 0, 0, 0.22); - overflow: hidden; - box-sizing: border-box; -} - -.noteTextarea { - width: 100%; - height: 100%; - resize: none; - border: none; - outline: none; - background: transparent; - color: var(--ev-c-text-1); - padding: 12px; - box-sizing: border-box; - font-size: 16px; - line-height: 22px; - font-weight: 700; - user-select: text; - scrollbar-width: none; - -ms-overflow-style: none; -} - -.noteTextarea::-webkit-scrollbar { - width: 0; - height: 0; - display: none; -} - -.openAppsButton { - cursor: pointer; - border-radius: 18px; - padding: 20px 28px; - border: 1px solid rgba(255, 255, 255, 0.16); - color: var(--ev-c-text-1); - background: rgba(0, 0, 0, 0.35); - backdrop-filter: blur(12px); - font-size: 22px; - line-height: 26px; - font-weight: 800; -} - -.openAppsButton:hover { - border-color: rgba(255, 255, 255, 0.26); - background: rgba(0, 0, 0, 0.45); -} - -.appsPage { - position: fixed; - left: 0; - top: 0; - width: 100%; - height: 100%; - padding: 16px; - box-sizing: border-box; -} - -.settingsPage { - position: fixed; - left: 0; - top: 0; - width: 100%; - height: 100%; - padding: 16px; - box-sizing: border-box; -} - -.settingsContentArea { - position: fixed; - left: 16px; - right: 16px; - top: 88px; - bottom: 120px; - padding: 12px; - background: rgba(0, 0, 0, 0.28); - border: 1px solid rgba(255, 255, 255, 0.12); - border-radius: 14px; - backdrop-filter: blur(12px); - box-sizing: border-box; - overflow: hidden; - display: grid; - grid-template-columns: 240px 1fr; - grid-template-rows: 1fr; - gap: 12px; -} - -.settingsSidebar { - height: 100%; - overflow: hidden; - border-radius: 14px; - border: 1px solid rgba(255, 255, 255, 0.12); - background: rgba(0, 0, 0, 0.18); - padding: 12px; - box-sizing: border-box; - display: flex; - flex-direction: column; - gap: 10px; -} - -.settingsSidebarTitle { - font-size: 18px; - line-height: 22px; - font-weight: 900; - opacity: 0.95; - padding: 4px 4px 8px; -} - -.settingsTabButton { - cursor: pointer; - height: 56px; - border-radius: 14px; - padding: 0 14px; - border: 1px solid rgba(255, 255, 255, 0.12); - color: var(--ev-c-text-1); - background: rgba(0, 0, 0, 0.22); - font-size: 16px; - line-height: 18px; - font-weight: 900; - text-align: left; -} - -.settingsTabButton[data-active='true'] { - background: rgba(0, 0, 0, 0.4); - border-color: rgba(255, 255, 255, 0.22); -} - -.settingsTabButton:hover { - border-color: rgba(255, 255, 255, 0.22); - background: rgba(0, 0, 0, 0.32); -} - -.settingsDetail { - height: 100%; - overflow: hidden; - border-radius: 14px; - border: 1px solid rgba(255, 255, 255, 0.12); - background: rgba(0, 0, 0, 0.12); - padding: 12px; - box-sizing: border-box; - display: grid; - grid-template-rows: 64px 1fr; - gap: 10px; -} - -.settingsDetailHeader { - display: flex; - align-items: center; - justify-content: space-between; - gap: 12px; - padding: 0 4px; -} - -.settingsDetailTitle { - font-size: 20px; - line-height: 24px; - font-weight: 900; -} - -.settingsDetailHeaderActions { - display: flex; - align-items: center; - justify-content: flex-end; - gap: 10px; - flex-wrap: wrap; -} - -.settingsDetailBody { - height: 100%; - overflow: auto; - padding: 0 4px 4px; - box-sizing: border-box; - scrollbar-width: none; - -ms-overflow-style: none; -} - -.settingsDetailBody::-webkit-scrollbar { - width: 0; - height: 0; - display: none; -} - -.settingsSection { - padding: 8px 2px; -} - -.settingsSectionTitle { - font-size: 16px; - line-height: 18px; - font-weight: 900; - opacity: 0.9; - margin-bottom: 10px; -} - -.settingsPrimaryButton { - cursor: pointer; - border-radius: 14px; - padding: 0 16px; - border: 1px solid rgba(255, 255, 255, 0.12); - color: var(--ev-c-text-1); - background: rgba(0, 0, 0, 0.35); - font-size: 16px; - line-height: 18px; - font-weight: 900; - height: 46px; -} - -.settingsPrimaryButton:hover { - border-color: rgba(255, 255, 255, 0.22); - background: rgba(0, 0, 0, 0.48); -} - -.settingsResetButton { - cursor: pointer; - border-radius: 14px; - padding: 0 16px; - border: 1px solid rgba(255, 255, 255, 0.12); - color: var(--ev-c-text-1); - background: rgba(0, 0, 0, 0.22); - font-size: 16px; - line-height: 18px; - font-weight: 800; - height: 46px; -} - -.settingsResetButton:hover { - border-color: rgba(255, 255, 255, 0.22); - background: rgba(0, 0, 0, 0.35); -} - -.settingsPreviewList { - display: grid; - grid-template-columns: 1fr; - gap: 12px; -} - -.settingsPreviewItem { - display: flex; - align-items: center; - justify-content: space-between; - gap: 12px; - padding: 12px; - border-radius: 14px; - border: 1px solid rgba(255, 255, 255, 0.12); - background: rgba(0, 0, 0, 0.22); - flex-wrap: wrap; -} - -.settingsPreviewMain { - min-width: 220px; -} - -.settingsPreviewTitle { - font-size: 18px; - line-height: 22px; - font-weight: 900; -} - -.settingsPreviewMeta { - margin-top: 4px; - font-size: 13px; - line-height: 16px; - font-weight: 700; - opacity: 0.85; -} - -.settingsPreviewBehavior { - width: 100%; - border-top: 1px solid rgba(255, 255, 255, 0.08); - padding-top: 10px; - display: grid; - gap: 8px; -} - -.settingsPreviewBehaviorTitle { - font-size: 14px; - line-height: 18px; - font-weight: 900; - opacity: 0.9; -} - -.settingsPreviewBehaviorRow { - display: grid; - grid-template-columns: 160px 1fr; - gap: 10px; -} - -.settingsPreviewBehaviorLabel { - font-size: 14px; - line-height: 18px; - font-weight: 800; - opacity: 0.9; -} - -.settingsPreviewBehaviorValue { - font-size: 14px; - line-height: 18px; - font-weight: 700; - opacity: 0.9; - word-break: break-all; -} - -.homeEditGrid { - display: grid; - grid-template-columns: repeat(auto-fill, minmax(160px, 1fr)); - gap: 12px; -} - -.homeWidgetCard { - cursor: pointer; - border-radius: 14px; - border: 1px solid rgba(255, 255, 255, 0.12); - background: rgba(0, 0, 0, 0.2); - color: var(--ev-c-text-1); - padding: 12px; - box-sizing: border-box; - text-align: left; - display: grid; - grid-template-rows: 24px 1fr 18px; - gap: 8px; - height: 112px; -} - -.homeWidgetCard[data-active='true'] { - border-color: rgba(255, 255, 255, 0.22); - background: rgba(0, 0, 0, 0.35); - box-shadow: - 0 0 0 1px rgba(255, 255, 255, 0.12), - 0 0 0 1px rgba(255, 255, 255, 0.12) inset; -} - -.homeWidgetCard[data-selected='true'] { - outline: 2px solid rgba(255, 255, 255, 0.3); - outline-offset: 2px; -} - -.homeWidgetCardIcon { - width: 22px; - height: 22px; - opacity: 0.95; -} - -.homeWidgetCardTitle { - font-size: 16px; - line-height: 18px; - font-weight: 900; - align-self: end; -} - -.homeWidgetCardMeta { - font-size: 13px; - line-height: 16px; - font-weight: 700; - opacity: 0.75; -} - -.homeEditOrderList { - display: grid; - grid-template-columns: 1fr; - gap: 10px; -} - -.homeEditOrderRow { - display: flex; - align-items: center; - justify-content: space-between; - gap: 12px; - padding: 10px 12px; - border-radius: 14px; - border: 1px solid rgba(255, 255, 255, 0.12); - background: rgba(0, 0, 0, 0.18); - flex-wrap: wrap; -} - -.homeEditOrderTitle { - font-size: 16px; - line-height: 18px; - font-weight: 900; -} - -.homeEditOrderActions { - display: flex; - align-items: center; - justify-content: flex-end; - gap: 10px; - flex-wrap: wrap; -} - -.settingsConfigArea { - width: 100%; - display: grid; - gap: 10px; -} - -.settingsSingleActionRow { - width: 100%; - display: grid; - grid-template-columns: 140px 1fr 92px; - gap: 10px; -} - -.settingsActionHint { - font-size: 13px; - line-height: 16px; - font-weight: 700; - opacity: 0.8; - word-break: break-all; -} - -.settingsSelect { - height: 46px; - border-radius: 14px; - border: 1px solid rgba(255, 255, 255, 0.12); - background: rgba(0, 0, 0, 0.18); - color: var(--ev-c-text-1); - padding: 0 12px; - box-sizing: border-box; - outline: none; - font-size: 16px; - line-height: 18px; - font-weight: 800; -} - -.settingsInput { - height: 46px; - border-radius: 14px; - border: 1px solid rgba(255, 255, 255, 0.12); - background: rgba(0, 0, 0, 0.18); - color: var(--ev-c-text-1); - padding: 0 12px; - box-sizing: border-box; - outline: none; - font-size: 16px; - line-height: 18px; - font-weight: 700; - user-select: text; -} - -.settingsMiniButton { - cursor: pointer; - height: 46px; - border-radius: 14px; - border: 1px solid rgba(255, 255, 255, 0.12); - background: rgba(0, 0, 0, 0.18); - color: var(--ev-c-text-1); - font-size: 16px; - line-height: 18px; - font-weight: 800; -} - -.settingsMiniButton:hover { - border-color: rgba(255, 255, 255, 0.22); - background: rgba(0, 0, 0, 0.32); -} - -.settingsSubAction { - width: 100%; - display: grid; - grid-template-columns: 180px 140px 1fr 92px; - gap: 10px; - align-items: center; -} - -.settingsSubActionTitle { - font-size: 16px; - line-height: 18px; - font-weight: 900; - opacity: 0.9; -} - -.settingsActionButton { - cursor: pointer; - border-radius: 14px; - padding: 0 14px; - border: 1px solid rgba(255, 255, 255, 0.12); - color: var(--ev-c-text-1); - background: rgba(0, 0, 0, 0.18); - font-size: 16px; - line-height: 18px; - font-weight: 800; - height: 46px; - min-width: 92px; -} - -.settingsActionButton[data-active='true'] { - background: rgba(0, 0, 0, 0.4); - border-color: rgba(255, 255, 255, 0.22); -} - -.settingsActionButton:hover { - border-color: rgba(255, 255, 255, 0.22); - background: rgba(0, 0, 0, 0.32); -} - -.settingsBottomBar { - position: fixed; - left: 16px; - right: 16px; - bottom: 16px; - height: 92px; - padding: 10px 12px; - display: grid; - grid-template-columns: 140px 1fr 180px; - gap: 12px; - align-items: center; - background: rgba(0, 0, 0, 0.35); - border: 1px solid rgba(255, 255, 255, 0.12); - border-radius: 16px; - backdrop-filter: blur(12px); - box-sizing: border-box; -} - -.settingsBottomBar .backButton { - height: 72px; -} - -.settingsBottomBar .appsExitButton { - height: 72px; -} - -.backButton { - cursor: pointer; - border-radius: 16px; - padding: 0 18px; - border: 1px solid rgba(255, 255, 255, 0.12); - color: var(--ev-c-text-1); - background: rgba(0, 0, 0, 0.35); - font-size: 18px; - line-height: 22px; - font-weight: 800; - height: 72px; - min-width: 120px; -} - -.backButton:hover { - border-color: rgba(255, 255, 255, 0.22); - background: rgba(0, 0, 0, 0.45); -} - -.appsTilesArea { - position: fixed; - left: 16px; - right: 16px; - top: 88px; - bottom: 120px; - padding: 12px; - background: rgba(0, 0, 0, 0.28); - border: 1px solid rgba(255, 255, 255, 0.12); - border-radius: 14px; - backdrop-filter: blur(12px); - box-sizing: border-box; - overflow: hidden; -} - -.appsList { - height: 100%; - overflow-x: auto; - overflow-y: hidden; - padding: 4px 6px; - box-sizing: border-box; - columns: 6 280px; - column-gap: 14px; - column-fill: auto; - touch-action: pan-x; - -webkit-overflow-scrolling: touch; - overscroll-behavior-x: contain; - scrollbar-width: none; - -ms-overflow-style: none; -} - -.appsList::-webkit-scrollbar { - width: 0; - height: 0; - display: none; -} - -.appsLoading { - height: 100%; - display: flex; - align-items: center; - justify-content: center; - font-size: 16px; - font-weight: 700; - opacity: 0.9; -} - -.appsBottomBar { - position: fixed; - left: 16px; - right: 16px; - bottom: 16px; - height: 92px; - padding: 10px 12px; - display: grid; - grid-template-columns: 140px 1fr 140px; - gap: 12px; - align-items: center; - background: rgba(0, 0, 0, 0.35); - border: 1px solid rgba(255, 255, 255, 0.12); - border-radius: 16px; - backdrop-filter: blur(12px); - box-sizing: border-box; -} - -.appsSearch { - width: 100%; - height: 72px; - border-radius: 14px; - border: 1px solid rgba(255, 255, 255, 0.12); - background: rgba(0, 0, 0, 0.35); - color: var(--ev-c-text-1); - padding: 0 16px; - box-sizing: border-box; - outline: none; - font-size: 20px; - line-height: 24px; - user-select: text; -} - -.appsExitButton { - display: inline-flex; - align-items: center; - justify-content: center; - gap: 10px; - cursor: pointer; - border-radius: 16px; - padding: 0 18px; - border: 1px solid rgba(255, 255, 255, 0.12); - color: var(--ev-c-text-1); - background: rgba(0, 0, 0, 0.35); - font-size: 18px; - line-height: 22px; - font-weight: 800; - height: 72px; - min-width: 120px; -} - -.appsExitButton:hover { - border-color: rgba(255, 255, 255, 0.22); - background: rgba(0, 0, 0, 0.45); -} - -.search { - width: 100%; - height: 38px; - border-radius: 12px; - border: 1px solid rgba(255, 255, 255, 0.12); - background: rgba(0, 0, 0, 0.35); - color: var(--ev-c-text-1); - padding: 0 12px; - box-sizing: border-box; - outline: none; -} - -.error { - margin-top: 10px; - padding: 10px 12px; - border-radius: 12px; - border: 1px solid rgba(255, 120, 120, 0.25); - background: rgba(120, 0, 0, 0.18); - color: var(--ev-c-text-1); - font-size: 12px; - line-height: 16px; - user-select: text; - white-space: pre-wrap; - word-break: break-word; -} - -.errorHeader { - display: flex; - align-items: center; - justify-content: space-between; - gap: 10px; - margin-bottom: 8px; -} - -.errorTitle { - font-weight: 700; - font-size: 12px; - line-height: 16px; -} - -.errorBody { - white-space: pre-wrap; - word-break: break-word; -} - -.copyButton { - cursor: pointer; - border-radius: 10px; - padding: 6px 10px; - border: 1px solid rgba(255, 255, 255, 0.16); - background: rgba(0, 0, 0, 0.25); - color: var(--ev-c-text-1); - font-size: 12px; - line-height: 14px; -} - -.copyButton:hover { - border-color: rgba(255, 255, 255, 0.26); - background: rgba(0, 0, 0, 0.35); -} - -.list { - margin-top: 12px; - height: calc(100% - 50px); - overflow: auto; - display: grid; - gap: 10px; -} - -.groupHeader { - display: inline-block; - width: 100%; - box-sizing: border-box; - margin: 0 0 10px; - padding: 6px 10px; - border-radius: 10px; - border: 1px solid rgba(255, 255, 255, 0.08); - background: rgba(0, 0, 0, 0.2); - font-size: 12px; - font-weight: 700; - letter-spacing: 0.4px; - opacity: 0.9; - break-inside: avoid; - -webkit-column-break-inside: avoid; -} - -.item { - display: inline-flex; - align-items: center; - gap: 10px; - text-align: left; - cursor: pointer; - width: 100%; - box-sizing: border-box; - min-height: 72px; - padding: 12px 14px; - border-radius: 12px; - border: 1px solid rgba(255, 255, 255, 0.12); - background: rgba(0, 0, 0, 0.25); - color: var(--ev-c-text-1); - margin: 0 0 10px; - break-inside: avoid; - -webkit-column-break-inside: avoid; -} - -.item:hover { - border-color: rgba(255, 255, 255, 0.22); - background: rgba(0, 0, 0, 0.35); -} - -.item:active { - border-color: rgba(255, 255, 255, 0.26); - background: rgba(0, 0, 0, 0.5); -} - -.name { - font-weight: 700; - font-size: 18px; - line-height: 22px; -} - -.icon { - width: 48px; - height: 48px; - border-radius: 10px; - flex: 0 0 auto; -} - -.path { - margin-top: 4px; - font-size: 12px; - line-height: 16px; - opacity: 0.75; - word-break: break-all; -} - -.clock { - position: fixed; - left: 16px; - top: 16px; - padding: 10px 12px; - font-size: 28px; - line-height: 28px; - font-weight: 700; - color: var(--ev-c-text-1); - background: rgba(0, 0, 0, 0.35); - border: 1px solid rgba(255, 255, 255, 0.12); - border-radius: 12px; - backdrop-filter: blur(12px); -} - -.exitButton { - position: fixed; - right: 16px; - bottom: 16px; - display: inline-flex; - align-items: center; - justify-content: center; - gap: 10px; - cursor: pointer; - text-align: center; - font-weight: 600; - border-radius: 14px; - padding: 10px 16px; - line-height: 20px; - font-size: 14px; - border: 1px solid rgba(255, 255, 255, 0.12); - color: var(--ev-c-text-1); - background: rgba(0, 0, 0, 0.35); - backdrop-filter: blur(12px); -} - -.settingsButton { - position: fixed; - left: 16px; - bottom: 16px; - display: inline-flex; - align-items: center; - justify-content: center; - cursor: pointer; - text-align: center; - font-weight: 800; - border-radius: 14px; - padding: 10px 18px; - line-height: 20px; - font-size: 14px; - border: 1px solid rgba(255, 255, 255, 0.12); - color: var(--ev-c-text-1); - background: rgba(0, 0, 0, 0.35); - backdrop-filter: blur(12px); -} - -.settingsButton:hover { - border-color: rgba(255, 255, 255, 0.22); - background: rgba(0, 0, 0, 0.45); -} - -.buttonIcon { - width: 20px; - height: 20px; - flex: 0 0 auto; -} - -.exitButton:hover { - border-color: rgba(255, 255, 255, 0.22); - background: rgba(0, 0, 0, 0.45); -} diff --git a/out/renderer/assets/index-CkK6wThO.js b/out/renderer/assets/index-CkK6wThO.js deleted file mode 100644 index c799fd9..0000000 --- a/out/renderer/assets/index-CkK6wThO.js +++ /dev/null @@ -1,7574 +0,0 @@ -// @__NO_SIDE_EFFECTS__ -function makeMap(str) { - const map = /* @__PURE__ */ Object.create(null); - for (const key of str.split(",")) map[key] = 1; - return (val) => val in map; -} -const EMPTY_OBJ = {}; -const EMPTY_ARR = []; -const NOOP = () => { -}; -const NO = () => false; -const isOn = (key) => key.charCodeAt(0) === 111 && key.charCodeAt(1) === 110 && // uppercase letter -(key.charCodeAt(2) > 122 || key.charCodeAt(2) < 97); -const isModelListener = (key) => key.startsWith("onUpdate:"); -const extend = Object.assign; -const remove = (arr, el) => { - const i = arr.indexOf(el); - if (i > -1) { - arr.splice(i, 1); - } -}; -const hasOwnProperty$1 = Object.prototype.hasOwnProperty; -const hasOwn = (val, key) => hasOwnProperty$1.call(val, key); -const isArray = Array.isArray; -const isMap = (val) => toTypeString(val) === "[object Map]"; -const isSet = (val) => toTypeString(val) === "[object Set]"; -const isDate = (val) => toTypeString(val) === "[object Date]"; -const isFunction = (val) => typeof val === "function"; -const isString = (val) => typeof val === "string"; -const isSymbol = (val) => typeof val === "symbol"; -const isObject = (val) => val !== null && typeof val === "object"; -const isPromise = (val) => { - return (isObject(val) || isFunction(val)) && isFunction(val.then) && isFunction(val.catch); -}; -const objectToString = Object.prototype.toString; -const toTypeString = (value) => objectToString.call(value); -const toRawType = (value) => { - return toTypeString(value).slice(8, -1); -}; -const isPlainObject = (val) => toTypeString(val) === "[object Object]"; -const isIntegerKey = (key) => isString(key) && key !== "NaN" && key[0] !== "-" && "" + parseInt(key, 10) === key; -const isReservedProp = /* @__PURE__ */ makeMap( - // the leading comma is intentional so empty string "" is also included - ",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted" -); -const cacheStringFunction = (fn) => { - const cache = /* @__PURE__ */ Object.create(null); - return ((str) => { - const hit = cache[str]; - return hit || (cache[str] = fn(str)); - }); -}; -const camelizeRE = /-\w/g; -const camelize = cacheStringFunction( - (str) => { - return str.replace(camelizeRE, (c) => c.slice(1).toUpperCase()); - } -); -const hyphenateRE = /\B([A-Z])/g; -const hyphenate = cacheStringFunction( - (str) => str.replace(hyphenateRE, "-$1").toLowerCase() -); -const capitalize = cacheStringFunction((str) => { - return str.charAt(0).toUpperCase() + str.slice(1); -}); -const toHandlerKey = cacheStringFunction( - (str) => { - const s = str ? `on${capitalize(str)}` : ``; - return s; - } -); -const hasChanged = (value, oldValue) => !Object.is(value, oldValue); -const invokeArrayFns = (fns, ...arg) => { - for (let i = 0; i < fns.length; i++) { - fns[i](...arg); - } -}; -const def = (obj, key, value, writable = false) => { - Object.defineProperty(obj, key, { - configurable: true, - enumerable: false, - writable, - value - }); -}; -const looseToNumber = (val) => { - const n = parseFloat(val); - return isNaN(n) ? val : n; -}; -let _globalThis; -const getGlobalThis = () => { - return _globalThis || (_globalThis = typeof globalThis !== "undefined" ? globalThis : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : typeof global !== "undefined" ? global : {}); -}; -function normalizeStyle(value) { - if (isArray(value)) { - const res = {}; - for (let i = 0; i < value.length; i++) { - const item = value[i]; - const normalized = isString(item) ? parseStringStyle(item) : normalizeStyle(item); - if (normalized) { - for (const key in normalized) { - res[key] = normalized[key]; - } - } - } - return res; - } else if (isString(value) || isObject(value)) { - return value; - } -} -const listDelimiterRE = /;(?![^(]*\))/g; -const propertyDelimiterRE = /:([^]+)/; -const styleCommentRE = /\/\*[^]*?\*\//g; -function parseStringStyle(cssText) { - const ret = {}; - cssText.replace(styleCommentRE, "").split(listDelimiterRE).forEach((item) => { - if (item) { - const tmp = item.split(propertyDelimiterRE); - tmp.length > 1 && (ret[tmp[0].trim()] = tmp[1].trim()); - } - }); - return ret; -} -function normalizeClass(value) { - let res = ""; - if (isString(value)) { - res = value; - } else if (isArray(value)) { - for (let i = 0; i < value.length; i++) { - const normalized = normalizeClass(value[i]); - if (normalized) { - res += normalized + " "; - } - } - } else if (isObject(value)) { - for (const name in value) { - if (value[name]) { - res += name + " "; - } - } - } - return res.trim(); -} -const specialBooleanAttrs = `itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly`; -const isSpecialBooleanAttr = /* @__PURE__ */ makeMap(specialBooleanAttrs); -function includeBooleanAttr(value) { - return !!value || value === ""; -} -function looseCompareArrays(a, b) { - if (a.length !== b.length) return false; - let equal = true; - for (let i = 0; equal && i < a.length; i++) { - equal = looseEqual(a[i], b[i]); - } - return equal; -} -function looseEqual(a, b) { - if (a === b) return true; - let aValidType = isDate(a); - let bValidType = isDate(b); - if (aValidType || bValidType) { - return aValidType && bValidType ? a.getTime() === b.getTime() : false; - } - aValidType = isSymbol(a); - bValidType = isSymbol(b); - if (aValidType || bValidType) { - return a === b; - } - aValidType = isArray(a); - bValidType = isArray(b); - if (aValidType || bValidType) { - return aValidType && bValidType ? looseCompareArrays(a, b) : false; - } - aValidType = isObject(a); - bValidType = isObject(b); - if (aValidType || bValidType) { - if (!aValidType || !bValidType) { - return false; - } - const aKeysCount = Object.keys(a).length; - const bKeysCount = Object.keys(b).length; - if (aKeysCount !== bKeysCount) { - return false; - } - for (const key in a) { - const aHasKey = a.hasOwnProperty(key); - const bHasKey = b.hasOwnProperty(key); - if (aHasKey && !bHasKey || !aHasKey && bHasKey || !looseEqual(a[key], b[key])) { - return false; - } - } - } - return String(a) === String(b); -} -const isRef$1 = (val) => { - return !!(val && val["__v_isRef"] === true); -}; -const toDisplayString = (val) => { - return isString(val) ? val : val == null ? "" : isArray(val) || isObject(val) && (val.toString === objectToString || !isFunction(val.toString)) ? isRef$1(val) ? toDisplayString(val.value) : JSON.stringify(val, replacer, 2) : String(val); -}; -const replacer = (_key, val) => { - if (isRef$1(val)) { - return replacer(_key, val.value); - } else if (isMap(val)) { - return { - [`Map(${val.size})`]: [...val.entries()].reduce( - (entries, [key, val2], i) => { - entries[stringifySymbol(key, i) + " =>"] = val2; - return entries; - }, - {} - ) - }; - } else if (isSet(val)) { - return { - [`Set(${val.size})`]: [...val.values()].map((v) => stringifySymbol(v)) - }; - } else if (isSymbol(val)) { - return stringifySymbol(val); - } else if (isObject(val) && !isArray(val) && !isPlainObject(val)) { - return String(val); - } - return val; -}; -const stringifySymbol = (v, i = "") => { - var _a; - return ( - // Symbol.description in es2019+ so we need to cast here to pass - // the lib: es2016 check - isSymbol(v) ? `Symbol(${(_a = v.description) != null ? _a : i})` : v - ); -}; -let activeEffectScope; -class EffectScope { - // TODO isolatedDeclarations "__v_skip" - constructor(detached = false) { - this.detached = detached; - this._active = true; - this._on = 0; - this.effects = []; - this.cleanups = []; - this._isPaused = false; - this.__v_skip = true; - this.parent = activeEffectScope; - if (!detached && activeEffectScope) { - this.index = (activeEffectScope.scopes || (activeEffectScope.scopes = [])).push( - this - ) - 1; - } - } - get active() { - return this._active; - } - pause() { - if (this._active) { - this._isPaused = true; - let i, l; - if (this.scopes) { - for (i = 0, l = this.scopes.length; i < l; i++) { - this.scopes[i].pause(); - } - } - for (i = 0, l = this.effects.length; i < l; i++) { - this.effects[i].pause(); - } - } - } - /** - * Resumes the effect scope, including all child scopes and effects. - */ - resume() { - if (this._active) { - if (this._isPaused) { - this._isPaused = false; - let i, l; - if (this.scopes) { - for (i = 0, l = this.scopes.length; i < l; i++) { - this.scopes[i].resume(); - } - } - for (i = 0, l = this.effects.length; i < l; i++) { - this.effects[i].resume(); - } - } - } - } - run(fn) { - if (this._active) { - const currentEffectScope = activeEffectScope; - try { - activeEffectScope = this; - return fn(); - } finally { - activeEffectScope = currentEffectScope; - } - } - } - /** - * This should only be called on non-detached scopes - * @internal - */ - on() { - if (++this._on === 1) { - this.prevScope = activeEffectScope; - activeEffectScope = this; - } - } - /** - * This should only be called on non-detached scopes - * @internal - */ - off() { - if (this._on > 0 && --this._on === 0) { - activeEffectScope = this.prevScope; - this.prevScope = void 0; - } - } - stop(fromParent) { - if (this._active) { - this._active = false; - let i, l; - for (i = 0, l = this.effects.length; i < l; i++) { - this.effects[i].stop(); - } - this.effects.length = 0; - for (i = 0, l = this.cleanups.length; i < l; i++) { - this.cleanups[i](); - } - this.cleanups.length = 0; - if (this.scopes) { - for (i = 0, l = this.scopes.length; i < l; i++) { - this.scopes[i].stop(true); - } - this.scopes.length = 0; - } - if (!this.detached && this.parent && !fromParent) { - const last = this.parent.scopes.pop(); - if (last && last !== this) { - this.parent.scopes[this.index] = last; - last.index = this.index; - } - } - this.parent = void 0; - } - } -} -function getCurrentScope() { - return activeEffectScope; -} -let activeSub; -const pausedQueueEffects = /* @__PURE__ */ new WeakSet(); -class ReactiveEffect { - constructor(fn) { - this.fn = fn; - this.deps = void 0; - this.depsTail = void 0; - this.flags = 1 | 4; - this.next = void 0; - this.cleanup = void 0; - this.scheduler = void 0; - if (activeEffectScope && activeEffectScope.active) { - activeEffectScope.effects.push(this); - } - } - pause() { - this.flags |= 64; - } - resume() { - if (this.flags & 64) { - this.flags &= -65; - if (pausedQueueEffects.has(this)) { - pausedQueueEffects.delete(this); - this.trigger(); - } - } - } - /** - * @internal - */ - notify() { - if (this.flags & 2 && !(this.flags & 32)) { - return; - } - if (!(this.flags & 8)) { - batch(this); - } - } - run() { - if (!(this.flags & 1)) { - return this.fn(); - } - this.flags |= 2; - cleanupEffect(this); - prepareDeps(this); - const prevEffect = activeSub; - const prevShouldTrack = shouldTrack; - activeSub = this; - shouldTrack = true; - try { - return this.fn(); - } finally { - cleanupDeps(this); - activeSub = prevEffect; - shouldTrack = prevShouldTrack; - this.flags &= -3; - } - } - stop() { - if (this.flags & 1) { - for (let link = this.deps; link; link = link.nextDep) { - removeSub(link); - } - this.deps = this.depsTail = void 0; - cleanupEffect(this); - this.onStop && this.onStop(); - this.flags &= -2; - } - } - trigger() { - if (this.flags & 64) { - pausedQueueEffects.add(this); - } else if (this.scheduler) { - this.scheduler(); - } else { - this.runIfDirty(); - } - } - /** - * @internal - */ - runIfDirty() { - if (isDirty(this)) { - this.run(); - } - } - get dirty() { - return isDirty(this); - } -} -let batchDepth = 0; -let batchedSub; -let batchedComputed; -function batch(sub, isComputed = false) { - sub.flags |= 8; - if (isComputed) { - sub.next = batchedComputed; - batchedComputed = sub; - return; - } - sub.next = batchedSub; - batchedSub = sub; -} -function startBatch() { - batchDepth++; -} -function endBatch() { - if (--batchDepth > 0) { - return; - } - if (batchedComputed) { - let e = batchedComputed; - batchedComputed = void 0; - while (e) { - const next = e.next; - e.next = void 0; - e.flags &= -9; - e = next; - } - } - let error; - while (batchedSub) { - let e = batchedSub; - batchedSub = void 0; - while (e) { - const next = e.next; - e.next = void 0; - e.flags &= -9; - if (e.flags & 1) { - try { - ; - e.trigger(); - } catch (err) { - if (!error) error = err; - } - } - e = next; - } - } - if (error) throw error; -} -function prepareDeps(sub) { - for (let link = sub.deps; link; link = link.nextDep) { - link.version = -1; - link.prevActiveLink = link.dep.activeLink; - link.dep.activeLink = link; - } -} -function cleanupDeps(sub) { - let head; - let tail = sub.depsTail; - let link = tail; - while (link) { - const prev = link.prevDep; - if (link.version === -1) { - if (link === tail) tail = prev; - removeSub(link); - removeDep(link); - } else { - head = link; - } - link.dep.activeLink = link.prevActiveLink; - link.prevActiveLink = void 0; - link = prev; - } - sub.deps = head; - sub.depsTail = tail; -} -function isDirty(sub) { - for (let link = sub.deps; link; link = link.nextDep) { - if (link.dep.version !== link.version || link.dep.computed && (refreshComputed(link.dep.computed) || link.dep.version !== link.version)) { - return true; - } - } - if (sub._dirty) { - return true; - } - return false; -} -function refreshComputed(computed2) { - if (computed2.flags & 4 && !(computed2.flags & 16)) { - return; - } - computed2.flags &= -17; - if (computed2.globalVersion === globalVersion) { - return; - } - computed2.globalVersion = globalVersion; - if (!computed2.isSSR && computed2.flags & 128 && (!computed2.deps && !computed2._dirty || !isDirty(computed2))) { - return; - } - computed2.flags |= 2; - const dep = computed2.dep; - const prevSub = activeSub; - const prevShouldTrack = shouldTrack; - activeSub = computed2; - shouldTrack = true; - try { - prepareDeps(computed2); - const value = computed2.fn(computed2._value); - if (dep.version === 0 || hasChanged(value, computed2._value)) { - computed2.flags |= 128; - computed2._value = value; - dep.version++; - } - } catch (err) { - dep.version++; - throw err; - } finally { - activeSub = prevSub; - shouldTrack = prevShouldTrack; - cleanupDeps(computed2); - computed2.flags &= -3; - } -} -function removeSub(link, soft = false) { - const { dep, prevSub, nextSub } = link; - if (prevSub) { - prevSub.nextSub = nextSub; - link.prevSub = void 0; - } - if (nextSub) { - nextSub.prevSub = prevSub; - link.nextSub = void 0; - } - if (dep.subs === link) { - dep.subs = prevSub; - if (!prevSub && dep.computed) { - dep.computed.flags &= -5; - for (let l = dep.computed.deps; l; l = l.nextDep) { - removeSub(l, true); - } - } - } - if (!soft && !--dep.sc && dep.map) { - dep.map.delete(dep.key); - } -} -function removeDep(link) { - const { prevDep, nextDep } = link; - if (prevDep) { - prevDep.nextDep = nextDep; - link.prevDep = void 0; - } - if (nextDep) { - nextDep.prevDep = prevDep; - link.nextDep = void 0; - } -} -let shouldTrack = true; -const trackStack = []; -function pauseTracking() { - trackStack.push(shouldTrack); - shouldTrack = false; -} -function resetTracking() { - const last = trackStack.pop(); - shouldTrack = last === void 0 ? true : last; -} -function cleanupEffect(e) { - const { cleanup } = e; - e.cleanup = void 0; - if (cleanup) { - const prevSub = activeSub; - activeSub = void 0; - try { - cleanup(); - } finally { - activeSub = prevSub; - } - } -} -let globalVersion = 0; -class Link { - constructor(sub, dep) { - this.sub = sub; - this.dep = dep; - this.version = dep.version; - this.nextDep = this.prevDep = this.nextSub = this.prevSub = this.prevActiveLink = void 0; - } -} -class Dep { - // TODO isolatedDeclarations "__v_skip" - constructor(computed2) { - this.computed = computed2; - this.version = 0; - this.activeLink = void 0; - this.subs = void 0; - this.map = void 0; - this.key = void 0; - this.sc = 0; - this.__v_skip = true; - } - track(debugInfo) { - if (!activeSub || !shouldTrack || activeSub === this.computed) { - return; - } - let link = this.activeLink; - if (link === void 0 || link.sub !== activeSub) { - link = this.activeLink = new Link(activeSub, this); - if (!activeSub.deps) { - activeSub.deps = activeSub.depsTail = link; - } else { - link.prevDep = activeSub.depsTail; - activeSub.depsTail.nextDep = link; - activeSub.depsTail = link; - } - addSub(link); - } else if (link.version === -1) { - link.version = this.version; - if (link.nextDep) { - const next = link.nextDep; - next.prevDep = link.prevDep; - if (link.prevDep) { - link.prevDep.nextDep = next; - } - link.prevDep = activeSub.depsTail; - link.nextDep = void 0; - activeSub.depsTail.nextDep = link; - activeSub.depsTail = link; - if (activeSub.deps === link) { - activeSub.deps = next; - } - } - } - return link; - } - trigger(debugInfo) { - this.version++; - globalVersion++; - this.notify(debugInfo); - } - notify(debugInfo) { - startBatch(); - try { - if (false) ; - for (let link = this.subs; link; link = link.prevSub) { - if (link.sub.notify()) { - ; - link.sub.dep.notify(); - } - } - } finally { - endBatch(); - } - } -} -function addSub(link) { - link.dep.sc++; - if (link.sub.flags & 4) { - const computed2 = link.dep.computed; - if (computed2 && !link.dep.subs) { - computed2.flags |= 4 | 16; - for (let l = computed2.deps; l; l = l.nextDep) { - addSub(l); - } - } - const currentTail = link.dep.subs; - if (currentTail !== link) { - link.prevSub = currentTail; - if (currentTail) currentTail.nextSub = link; - } - link.dep.subs = link; - } -} -const targetMap = /* @__PURE__ */ new WeakMap(); -const ITERATE_KEY = /* @__PURE__ */ Symbol( - "" -); -const MAP_KEY_ITERATE_KEY = /* @__PURE__ */ Symbol( - "" -); -const ARRAY_ITERATE_KEY = /* @__PURE__ */ Symbol( - "" -); -function track(target, type, key) { - if (shouldTrack && activeSub) { - let depsMap = targetMap.get(target); - if (!depsMap) { - targetMap.set(target, depsMap = /* @__PURE__ */ new Map()); - } - let dep = depsMap.get(key); - if (!dep) { - depsMap.set(key, dep = new Dep()); - dep.map = depsMap; - dep.key = key; - } - { - dep.track(); - } - } -} -function trigger(target, type, key, newValue, oldValue, oldTarget) { - const depsMap = targetMap.get(target); - if (!depsMap) { - globalVersion++; - return; - } - const run = (dep) => { - if (dep) { - { - dep.trigger(); - } - } - }; - startBatch(); - if (type === "clear") { - depsMap.forEach(run); - } else { - const targetIsArray = isArray(target); - const isArrayIndex = targetIsArray && isIntegerKey(key); - if (targetIsArray && key === "length") { - const newLength = Number(newValue); - depsMap.forEach((dep, key2) => { - if (key2 === "length" || key2 === ARRAY_ITERATE_KEY || !isSymbol(key2) && key2 >= newLength) { - run(dep); - } - }); - } else { - if (key !== void 0 || depsMap.has(void 0)) { - run(depsMap.get(key)); - } - if (isArrayIndex) { - run(depsMap.get(ARRAY_ITERATE_KEY)); - } - switch (type) { - case "add": - if (!targetIsArray) { - run(depsMap.get(ITERATE_KEY)); - if (isMap(target)) { - run(depsMap.get(MAP_KEY_ITERATE_KEY)); - } - } else if (isArrayIndex) { - run(depsMap.get("length")); - } - break; - case "delete": - if (!targetIsArray) { - run(depsMap.get(ITERATE_KEY)); - if (isMap(target)) { - run(depsMap.get(MAP_KEY_ITERATE_KEY)); - } - } - break; - case "set": - if (isMap(target)) { - run(depsMap.get(ITERATE_KEY)); - } - break; - } - } - } - endBatch(); -} -function reactiveReadArray(array) { - const raw = /* @__PURE__ */ toRaw(array); - if (raw === array) return raw; - track(raw, "iterate", ARRAY_ITERATE_KEY); - return /* @__PURE__ */ isShallow(array) ? raw : raw.map(toReactive); -} -function shallowReadArray(arr) { - track(arr = /* @__PURE__ */ toRaw(arr), "iterate", ARRAY_ITERATE_KEY); - return arr; -} -function toWrapped(target, item) { - if (/* @__PURE__ */ isReadonly(target)) { - return /* @__PURE__ */ isReactive(target) ? toReadonly(toReactive(item)) : toReadonly(item); - } - return toReactive(item); -} -const arrayInstrumentations = { - __proto__: null, - [Symbol.iterator]() { - return iterator(this, Symbol.iterator, (item) => toWrapped(this, item)); - }, - concat(...args) { - return reactiveReadArray(this).concat( - ...args.map((x) => isArray(x) ? reactiveReadArray(x) : x) - ); - }, - entries() { - return iterator(this, "entries", (value) => { - value[1] = toWrapped(this, value[1]); - return value; - }); - }, - every(fn, thisArg) { - return apply(this, "every", fn, thisArg, void 0, arguments); - }, - filter(fn, thisArg) { - return apply( - this, - "filter", - fn, - thisArg, - (v) => v.map((item) => toWrapped(this, item)), - arguments - ); - }, - find(fn, thisArg) { - return apply( - this, - "find", - fn, - thisArg, - (item) => toWrapped(this, item), - arguments - ); - }, - findIndex(fn, thisArg) { - return apply(this, "findIndex", fn, thisArg, void 0, arguments); - }, - findLast(fn, thisArg) { - return apply( - this, - "findLast", - fn, - thisArg, - (item) => toWrapped(this, item), - arguments - ); - }, - findLastIndex(fn, thisArg) { - return apply(this, "findLastIndex", fn, thisArg, void 0, arguments); - }, - // flat, flatMap could benefit from ARRAY_ITERATE but are not straight-forward to implement - forEach(fn, thisArg) { - return apply(this, "forEach", fn, thisArg, void 0, arguments); - }, - includes(...args) { - return searchProxy(this, "includes", args); - }, - indexOf(...args) { - return searchProxy(this, "indexOf", args); - }, - join(separator) { - return reactiveReadArray(this).join(separator); - }, - // keys() iterator only reads `length`, no optimization required - lastIndexOf(...args) { - return searchProxy(this, "lastIndexOf", args); - }, - map(fn, thisArg) { - return apply(this, "map", fn, thisArg, void 0, arguments); - }, - pop() { - return noTracking(this, "pop"); - }, - push(...args) { - return noTracking(this, "push", args); - }, - reduce(fn, ...args) { - return reduce(this, "reduce", fn, args); - }, - reduceRight(fn, ...args) { - return reduce(this, "reduceRight", fn, args); - }, - shift() { - return noTracking(this, "shift"); - }, - // slice could use ARRAY_ITERATE but also seems to beg for range tracking - some(fn, thisArg) { - return apply(this, "some", fn, thisArg, void 0, arguments); - }, - splice(...args) { - return noTracking(this, "splice", args); - }, - toReversed() { - return reactiveReadArray(this).toReversed(); - }, - toSorted(comparer) { - return reactiveReadArray(this).toSorted(comparer); - }, - toSpliced(...args) { - return reactiveReadArray(this).toSpliced(...args); - }, - unshift(...args) { - return noTracking(this, "unshift", args); - }, - values() { - return iterator(this, "values", (item) => toWrapped(this, item)); - } -}; -function iterator(self2, method, wrapValue) { - const arr = shallowReadArray(self2); - const iter = arr[method](); - if (arr !== self2 && !/* @__PURE__ */ isShallow(self2)) { - iter._next = iter.next; - iter.next = () => { - const result = iter._next(); - if (!result.done) { - result.value = wrapValue(result.value); - } - return result; - }; - } - return iter; -} -const arrayProto = Array.prototype; -function apply(self2, method, fn, thisArg, wrappedRetFn, args) { - const arr = shallowReadArray(self2); - const needsWrap = arr !== self2 && !/* @__PURE__ */ isShallow(self2); - const methodFn = arr[method]; - if (methodFn !== arrayProto[method]) { - const result2 = methodFn.apply(self2, args); - return needsWrap ? toReactive(result2) : result2; - } - let wrappedFn = fn; - if (arr !== self2) { - if (needsWrap) { - wrappedFn = function(item, index) { - return fn.call(this, toWrapped(self2, item), index, self2); - }; - } else if (fn.length > 2) { - wrappedFn = function(item, index) { - return fn.call(this, item, index, self2); - }; - } - } - const result = methodFn.call(arr, wrappedFn, thisArg); - return needsWrap && wrappedRetFn ? wrappedRetFn(result) : result; -} -function reduce(self2, method, fn, args) { - const arr = shallowReadArray(self2); - let wrappedFn = fn; - if (arr !== self2) { - if (!/* @__PURE__ */ isShallow(self2)) { - wrappedFn = function(acc, item, index) { - return fn.call(this, acc, toWrapped(self2, item), index, self2); - }; - } else if (fn.length > 3) { - wrappedFn = function(acc, item, index) { - return fn.call(this, acc, item, index, self2); - }; - } - } - return arr[method](wrappedFn, ...args); -} -function searchProxy(self2, method, args) { - const arr = /* @__PURE__ */ toRaw(self2); - track(arr, "iterate", ARRAY_ITERATE_KEY); - const res = arr[method](...args); - if ((res === -1 || res === false) && /* @__PURE__ */ isProxy(args[0])) { - args[0] = /* @__PURE__ */ toRaw(args[0]); - return arr[method](...args); - } - return res; -} -function noTracking(self2, method, args = []) { - pauseTracking(); - startBatch(); - const res = (/* @__PURE__ */ toRaw(self2))[method].apply(self2, args); - endBatch(); - resetTracking(); - return res; -} -const isNonTrackableKeys = /* @__PURE__ */ makeMap(`__proto__,__v_isRef,__isVue`); -const builtInSymbols = new Set( - /* @__PURE__ */ Object.getOwnPropertyNames(Symbol).filter((key) => key !== "arguments" && key !== "caller").map((key) => Symbol[key]).filter(isSymbol) -); -function hasOwnProperty(key) { - if (!isSymbol(key)) key = String(key); - const obj = /* @__PURE__ */ toRaw(this); - track(obj, "has", key); - return obj.hasOwnProperty(key); -} -class BaseReactiveHandler { - constructor(_isReadonly = false, _isShallow = false) { - this._isReadonly = _isReadonly; - this._isShallow = _isShallow; - } - get(target, key, receiver) { - if (key === "__v_skip") return target["__v_skip"]; - const isReadonly2 = this._isReadonly, isShallow2 = this._isShallow; - if (key === "__v_isReactive") { - return !isReadonly2; - } else if (key === "__v_isReadonly") { - return isReadonly2; - } else if (key === "__v_isShallow") { - return isShallow2; - } else if (key === "__v_raw") { - if (receiver === (isReadonly2 ? isShallow2 ? shallowReadonlyMap : readonlyMap : isShallow2 ? shallowReactiveMap : reactiveMap).get(target) || // receiver is not the reactive proxy, but has the same prototype - // this means the receiver is a user proxy of the reactive proxy - Object.getPrototypeOf(target) === Object.getPrototypeOf(receiver)) { - return target; - } - return; - } - const targetIsArray = isArray(target); - if (!isReadonly2) { - let fn; - if (targetIsArray && (fn = arrayInstrumentations[key])) { - return fn; - } - if (key === "hasOwnProperty") { - return hasOwnProperty; - } - } - const res = Reflect.get( - target, - key, - // if this is a proxy wrapping a ref, return methods using the raw ref - // as receiver so that we don't have to call `toRaw` on the ref in all - // its class methods - /* @__PURE__ */ isRef(target) ? target : receiver - ); - if (isSymbol(key) ? builtInSymbols.has(key) : isNonTrackableKeys(key)) { - return res; - } - if (!isReadonly2) { - track(target, "get", key); - } - if (isShallow2) { - return res; - } - if (/* @__PURE__ */ isRef(res)) { - const value = targetIsArray && isIntegerKey(key) ? res : res.value; - return isReadonly2 && isObject(value) ? /* @__PURE__ */ readonly(value) : value; - } - if (isObject(res)) { - return isReadonly2 ? /* @__PURE__ */ readonly(res) : /* @__PURE__ */ reactive(res); - } - return res; - } -} -class MutableReactiveHandler extends BaseReactiveHandler { - constructor(isShallow2 = false) { - super(false, isShallow2); - } - set(target, key, value, receiver) { - let oldValue = target[key]; - const isArrayWithIntegerKey = isArray(target) && isIntegerKey(key); - if (!this._isShallow) { - const isOldValueReadonly = /* @__PURE__ */ isReadonly(oldValue); - if (!/* @__PURE__ */ isShallow(value) && !/* @__PURE__ */ isReadonly(value)) { - oldValue = /* @__PURE__ */ toRaw(oldValue); - value = /* @__PURE__ */ toRaw(value); - } - if (!isArrayWithIntegerKey && /* @__PURE__ */ isRef(oldValue) && !/* @__PURE__ */ isRef(value)) { - if (isOldValueReadonly) { - return true; - } else { - oldValue.value = value; - return true; - } - } - } - const hadKey = isArrayWithIntegerKey ? Number(key) < target.length : hasOwn(target, key); - const result = Reflect.set( - target, - key, - value, - /* @__PURE__ */ isRef(target) ? target : receiver - ); - if (target === /* @__PURE__ */ toRaw(receiver)) { - if (!hadKey) { - trigger(target, "add", key, value); - } else if (hasChanged(value, oldValue)) { - trigger(target, "set", key, value); - } - } - return result; - } - deleteProperty(target, key) { - const hadKey = hasOwn(target, key); - target[key]; - const result = Reflect.deleteProperty(target, key); - if (result && hadKey) { - trigger(target, "delete", key, void 0); - } - return result; - } - has(target, key) { - const result = Reflect.has(target, key); - if (!isSymbol(key) || !builtInSymbols.has(key)) { - track(target, "has", key); - } - return result; - } - ownKeys(target) { - track( - target, - "iterate", - isArray(target) ? "length" : ITERATE_KEY - ); - return Reflect.ownKeys(target); - } -} -class ReadonlyReactiveHandler extends BaseReactiveHandler { - constructor(isShallow2 = false) { - super(true, isShallow2); - } - set(target, key) { - return true; - } - deleteProperty(target, key) { - return true; - } -} -const mutableHandlers = /* @__PURE__ */ new MutableReactiveHandler(); -const readonlyHandlers = /* @__PURE__ */ new ReadonlyReactiveHandler(); -const shallowReactiveHandlers = /* @__PURE__ */ new MutableReactiveHandler(true); -const shallowReadonlyHandlers = /* @__PURE__ */ new ReadonlyReactiveHandler(true); -const toShallow = (value) => value; -const getProto = (v) => Reflect.getPrototypeOf(v); -function createIterableMethod(method, isReadonly2, isShallow2) { - return function(...args) { - const target = this["__v_raw"]; - const rawTarget = /* @__PURE__ */ toRaw(target); - const targetIsMap = isMap(rawTarget); - const isPair = method === "entries" || method === Symbol.iterator && targetIsMap; - const isKeyOnly = method === "keys" && targetIsMap; - const innerIterator = target[method](...args); - const wrap = isShallow2 ? toShallow : isReadonly2 ? toReadonly : toReactive; - !isReadonly2 && track( - rawTarget, - "iterate", - isKeyOnly ? MAP_KEY_ITERATE_KEY : ITERATE_KEY - ); - return extend( - // inheriting all iterator properties - Object.create(innerIterator), - { - // iterator protocol - next() { - const { value, done } = innerIterator.next(); - return done ? { value, done } : { - value: isPair ? [wrap(value[0]), wrap(value[1])] : wrap(value), - done - }; - } - } - ); - }; -} -function createReadonlyMethod(type) { - return function(...args) { - return type === "delete" ? false : type === "clear" ? void 0 : this; - }; -} -function createInstrumentations(readonly2, shallow) { - const instrumentations = { - get(key) { - const target = this["__v_raw"]; - const rawTarget = /* @__PURE__ */ toRaw(target); - const rawKey = /* @__PURE__ */ toRaw(key); - if (!readonly2) { - if (hasChanged(key, rawKey)) { - track(rawTarget, "get", key); - } - track(rawTarget, "get", rawKey); - } - const { has } = getProto(rawTarget); - const wrap = shallow ? toShallow : readonly2 ? toReadonly : toReactive; - if (has.call(rawTarget, key)) { - return wrap(target.get(key)); - } else if (has.call(rawTarget, rawKey)) { - return wrap(target.get(rawKey)); - } else if (target !== rawTarget) { - target.get(key); - } - }, - get size() { - const target = this["__v_raw"]; - !readonly2 && track(/* @__PURE__ */ toRaw(target), "iterate", ITERATE_KEY); - return target.size; - }, - has(key) { - const target = this["__v_raw"]; - const rawTarget = /* @__PURE__ */ toRaw(target); - const rawKey = /* @__PURE__ */ toRaw(key); - if (!readonly2) { - if (hasChanged(key, rawKey)) { - track(rawTarget, "has", key); - } - track(rawTarget, "has", rawKey); - } - return key === rawKey ? target.has(key) : target.has(key) || target.has(rawKey); - }, - forEach(callback, thisArg) { - const observed = this; - const target = observed["__v_raw"]; - const rawTarget = /* @__PURE__ */ toRaw(target); - const wrap = shallow ? toShallow : readonly2 ? toReadonly : toReactive; - !readonly2 && track(rawTarget, "iterate", ITERATE_KEY); - return target.forEach((value, key) => { - return callback.call(thisArg, wrap(value), wrap(key), observed); - }); - } - }; - extend( - instrumentations, - readonly2 ? { - add: createReadonlyMethod("add"), - set: createReadonlyMethod("set"), - delete: createReadonlyMethod("delete"), - clear: createReadonlyMethod("clear") - } : { - add(value) { - if (!shallow && !/* @__PURE__ */ isShallow(value) && !/* @__PURE__ */ isReadonly(value)) { - value = /* @__PURE__ */ toRaw(value); - } - const target = /* @__PURE__ */ toRaw(this); - const proto = getProto(target); - const hadKey = proto.has.call(target, value); - if (!hadKey) { - target.add(value); - trigger(target, "add", value, value); - } - return this; - }, - set(key, value) { - if (!shallow && !/* @__PURE__ */ isShallow(value) && !/* @__PURE__ */ isReadonly(value)) { - value = /* @__PURE__ */ toRaw(value); - } - const target = /* @__PURE__ */ toRaw(this); - const { has, get } = getProto(target); - let hadKey = has.call(target, key); - if (!hadKey) { - key = /* @__PURE__ */ toRaw(key); - hadKey = has.call(target, key); - } - const oldValue = get.call(target, key); - target.set(key, value); - if (!hadKey) { - trigger(target, "add", key, value); - } else if (hasChanged(value, oldValue)) { - trigger(target, "set", key, value); - } - return this; - }, - delete(key) { - const target = /* @__PURE__ */ toRaw(this); - const { has, get } = getProto(target); - let hadKey = has.call(target, key); - if (!hadKey) { - key = /* @__PURE__ */ toRaw(key); - hadKey = has.call(target, key); - } - get ? get.call(target, key) : void 0; - const result = target.delete(key); - if (hadKey) { - trigger(target, "delete", key, void 0); - } - return result; - }, - clear() { - const target = /* @__PURE__ */ toRaw(this); - const hadItems = target.size !== 0; - const result = target.clear(); - if (hadItems) { - trigger( - target, - "clear", - void 0, - void 0 - ); - } - return result; - } - } - ); - const iteratorMethods = [ - "keys", - "values", - "entries", - Symbol.iterator - ]; - iteratorMethods.forEach((method) => { - instrumentations[method] = createIterableMethod(method, readonly2, shallow); - }); - return instrumentations; -} -function createInstrumentationGetter(isReadonly2, shallow) { - const instrumentations = createInstrumentations(isReadonly2, shallow); - return (target, key, receiver) => { - if (key === "__v_isReactive") { - return !isReadonly2; - } else if (key === "__v_isReadonly") { - return isReadonly2; - } else if (key === "__v_raw") { - return target; - } - return Reflect.get( - hasOwn(instrumentations, key) && key in target ? instrumentations : target, - key, - receiver - ); - }; -} -const mutableCollectionHandlers = { - get: /* @__PURE__ */ createInstrumentationGetter(false, false) -}; -const shallowCollectionHandlers = { - get: /* @__PURE__ */ createInstrumentationGetter(false, true) -}; -const readonlyCollectionHandlers = { - get: /* @__PURE__ */ createInstrumentationGetter(true, false) -}; -const shallowReadonlyCollectionHandlers = { - get: /* @__PURE__ */ createInstrumentationGetter(true, true) -}; -const reactiveMap = /* @__PURE__ */ new WeakMap(); -const shallowReactiveMap = /* @__PURE__ */ new WeakMap(); -const readonlyMap = /* @__PURE__ */ new WeakMap(); -const shallowReadonlyMap = /* @__PURE__ */ new WeakMap(); -function targetTypeMap(rawType) { - switch (rawType) { - case "Object": - case "Array": - return 1; - case "Map": - case "Set": - case "WeakMap": - case "WeakSet": - return 2; - default: - return 0; - } -} -function getTargetType(value) { - return value["__v_skip"] || !Object.isExtensible(value) ? 0 : targetTypeMap(toRawType(value)); -} -// @__NO_SIDE_EFFECTS__ -function reactive(target) { - if (/* @__PURE__ */ isReadonly(target)) { - return target; - } - return createReactiveObject( - target, - false, - mutableHandlers, - mutableCollectionHandlers, - reactiveMap - ); -} -// @__NO_SIDE_EFFECTS__ -function shallowReactive(target) { - return createReactiveObject( - target, - false, - shallowReactiveHandlers, - shallowCollectionHandlers, - shallowReactiveMap - ); -} -// @__NO_SIDE_EFFECTS__ -function readonly(target) { - return createReactiveObject( - target, - true, - readonlyHandlers, - readonlyCollectionHandlers, - readonlyMap - ); -} -// @__NO_SIDE_EFFECTS__ -function shallowReadonly(target) { - return createReactiveObject( - target, - true, - shallowReadonlyHandlers, - shallowReadonlyCollectionHandlers, - shallowReadonlyMap - ); -} -function createReactiveObject(target, isReadonly2, baseHandlers, collectionHandlers, proxyMap) { - if (!isObject(target)) { - return target; - } - if (target["__v_raw"] && !(isReadonly2 && target["__v_isReactive"])) { - return target; - } - const targetType = getTargetType(target); - if (targetType === 0) { - return target; - } - const existingProxy = proxyMap.get(target); - if (existingProxy) { - return existingProxy; - } - const proxy = new Proxy( - target, - targetType === 2 ? collectionHandlers : baseHandlers - ); - proxyMap.set(target, proxy); - return proxy; -} -// @__NO_SIDE_EFFECTS__ -function isReactive(value) { - if (/* @__PURE__ */ isReadonly(value)) { - return /* @__PURE__ */ isReactive(value["__v_raw"]); - } - return !!(value && value["__v_isReactive"]); -} -// @__NO_SIDE_EFFECTS__ -function isReadonly(value) { - return !!(value && value["__v_isReadonly"]); -} -// @__NO_SIDE_EFFECTS__ -function isShallow(value) { - return !!(value && value["__v_isShallow"]); -} -// @__NO_SIDE_EFFECTS__ -function isProxy(value) { - return value ? !!value["__v_raw"] : false; -} -// @__NO_SIDE_EFFECTS__ -function toRaw(observed) { - const raw = observed && observed["__v_raw"]; - return raw ? /* @__PURE__ */ toRaw(raw) : observed; -} -function markRaw(value) { - if (!hasOwn(value, "__v_skip") && Object.isExtensible(value)) { - def(value, "__v_skip", true); - } - return value; -} -const toReactive = (value) => isObject(value) ? /* @__PURE__ */ reactive(value) : value; -const toReadonly = (value) => isObject(value) ? /* @__PURE__ */ readonly(value) : value; -// @__NO_SIDE_EFFECTS__ -function isRef(r) { - return r ? r["__v_isRef"] === true : false; -} -// @__NO_SIDE_EFFECTS__ -function ref(value) { - return createRef(value, false); -} -function createRef(rawValue, shallow) { - if (/* @__PURE__ */ isRef(rawValue)) { - return rawValue; - } - return new RefImpl(rawValue, shallow); -} -class RefImpl { - constructor(value, isShallow2) { - this.dep = new Dep(); - this["__v_isRef"] = true; - this["__v_isShallow"] = false; - this._rawValue = isShallow2 ? value : /* @__PURE__ */ toRaw(value); - this._value = isShallow2 ? value : toReactive(value); - this["__v_isShallow"] = isShallow2; - } - get value() { - { - this.dep.track(); - } - return this._value; - } - set value(newValue) { - const oldValue = this._rawValue; - const useDirectValue = this["__v_isShallow"] || /* @__PURE__ */ isShallow(newValue) || /* @__PURE__ */ isReadonly(newValue); - newValue = useDirectValue ? newValue : /* @__PURE__ */ toRaw(newValue); - if (hasChanged(newValue, oldValue)) { - this._rawValue = newValue; - this._value = useDirectValue ? newValue : toReactive(newValue); - { - this.dep.trigger(); - } - } - } -} -function unref(ref2) { - return /* @__PURE__ */ isRef(ref2) ? ref2.value : ref2; -} -const shallowUnwrapHandlers = { - get: (target, key, receiver) => key === "__v_raw" ? target : unref(Reflect.get(target, key, receiver)), - set: (target, key, value, receiver) => { - const oldValue = target[key]; - if (/* @__PURE__ */ isRef(oldValue) && !/* @__PURE__ */ isRef(value)) { - oldValue.value = value; - return true; - } else { - return Reflect.set(target, key, value, receiver); - } - } -}; -function proxyRefs(objectWithRefs) { - return /* @__PURE__ */ isReactive(objectWithRefs) ? objectWithRefs : new Proxy(objectWithRefs, shallowUnwrapHandlers); -} -class ComputedRefImpl { - constructor(fn, setter, isSSR) { - this.fn = fn; - this.setter = setter; - this._value = void 0; - this.dep = new Dep(this); - this.__v_isRef = true; - this.deps = void 0; - this.depsTail = void 0; - this.flags = 16; - this.globalVersion = globalVersion - 1; - this.next = void 0; - this.effect = this; - this["__v_isReadonly"] = !setter; - this.isSSR = isSSR; - } - /** - * @internal - */ - notify() { - this.flags |= 16; - if (!(this.flags & 8) && // avoid infinite self recursion - activeSub !== this) { - batch(this, true); - return true; - } - } - get value() { - const link = this.dep.track(); - refreshComputed(this); - if (link) { - link.version = this.dep.version; - } - return this._value; - } - set value(newValue) { - if (this.setter) { - this.setter(newValue); - } - } -} -// @__NO_SIDE_EFFECTS__ -function computed$1(getterOrOptions, debugOptions, isSSR = false) { - let getter; - let setter; - if (isFunction(getterOrOptions)) { - getter = getterOrOptions; - } else { - getter = getterOrOptions.get; - setter = getterOrOptions.set; - } - const cRef = new ComputedRefImpl(getter, setter, isSSR); - return cRef; -} -const INITIAL_WATCHER_VALUE = {}; -const cleanupMap = /* @__PURE__ */ new WeakMap(); -let activeWatcher = void 0; -function onWatcherCleanup(cleanupFn, failSilently = false, owner = activeWatcher) { - if (owner) { - let cleanups = cleanupMap.get(owner); - if (!cleanups) cleanupMap.set(owner, cleanups = []); - cleanups.push(cleanupFn); - } -} -function watch$1(source, cb, options = EMPTY_OBJ) { - const { immediate, deep, once, scheduler, augmentJob, call } = options; - const reactiveGetter = (source2) => { - if (deep) return source2; - if (/* @__PURE__ */ isShallow(source2) || deep === false || deep === 0) - return traverse(source2, 1); - return traverse(source2); - }; - let effect2; - let getter; - let cleanup; - let boundCleanup; - let forceTrigger = false; - let isMultiSource = false; - if (/* @__PURE__ */ isRef(source)) { - getter = () => source.value; - forceTrigger = /* @__PURE__ */ isShallow(source); - } else if (/* @__PURE__ */ isReactive(source)) { - getter = () => reactiveGetter(source); - forceTrigger = true; - } else if (isArray(source)) { - isMultiSource = true; - forceTrigger = source.some((s) => /* @__PURE__ */ isReactive(s) || /* @__PURE__ */ isShallow(s)); - getter = () => source.map((s) => { - if (/* @__PURE__ */ isRef(s)) { - return s.value; - } else if (/* @__PURE__ */ isReactive(s)) { - return reactiveGetter(s); - } else if (isFunction(s)) { - return call ? call(s, 2) : s(); - } else ; - }); - } else if (isFunction(source)) { - if (cb) { - getter = call ? () => call(source, 2) : source; - } else { - getter = () => { - if (cleanup) { - pauseTracking(); - try { - cleanup(); - } finally { - resetTracking(); - } - } - const currentEffect = activeWatcher; - activeWatcher = effect2; - try { - return call ? call(source, 3, [boundCleanup]) : source(boundCleanup); - } finally { - activeWatcher = currentEffect; - } - }; - } - } else { - getter = NOOP; - } - if (cb && deep) { - const baseGetter = getter; - const depth = deep === true ? Infinity : deep; - getter = () => traverse(baseGetter(), depth); - } - const scope = getCurrentScope(); - const watchHandle = () => { - effect2.stop(); - if (scope && scope.active) { - remove(scope.effects, effect2); - } - }; - if (once && cb) { - const _cb = cb; - cb = (...args) => { - _cb(...args); - watchHandle(); - }; - } - let oldValue = isMultiSource ? new Array(source.length).fill(INITIAL_WATCHER_VALUE) : INITIAL_WATCHER_VALUE; - const job = (immediateFirstRun) => { - if (!(effect2.flags & 1) || !effect2.dirty && !immediateFirstRun) { - return; - } - if (cb) { - const newValue = effect2.run(); - if (deep || forceTrigger || (isMultiSource ? newValue.some((v, i) => hasChanged(v, oldValue[i])) : hasChanged(newValue, oldValue))) { - if (cleanup) { - cleanup(); - } - const currentWatcher = activeWatcher; - activeWatcher = effect2; - try { - const args = [ - newValue, - // pass undefined as the old value when it's changed for the first time - oldValue === INITIAL_WATCHER_VALUE ? void 0 : isMultiSource && oldValue[0] === INITIAL_WATCHER_VALUE ? [] : oldValue, - boundCleanup - ]; - oldValue = newValue; - call ? call(cb, 3, args) : ( - // @ts-expect-error - cb(...args) - ); - } finally { - activeWatcher = currentWatcher; - } - } - } else { - effect2.run(); - } - }; - if (augmentJob) { - augmentJob(job); - } - effect2 = new ReactiveEffect(getter); - effect2.scheduler = scheduler ? () => scheduler(job, false) : job; - boundCleanup = (fn) => onWatcherCleanup(fn, false, effect2); - cleanup = effect2.onStop = () => { - const cleanups = cleanupMap.get(effect2); - if (cleanups) { - if (call) { - call(cleanups, 4); - } else { - for (const cleanup2 of cleanups) cleanup2(); - } - cleanupMap.delete(effect2); - } - }; - if (cb) { - if (immediate) { - job(true); - } else { - oldValue = effect2.run(); - } - } else if (scheduler) { - scheduler(job.bind(null, true), true); - } else { - effect2.run(); - } - watchHandle.pause = effect2.pause.bind(effect2); - watchHandle.resume = effect2.resume.bind(effect2); - watchHandle.stop = watchHandle; - return watchHandle; -} -function traverse(value, depth = Infinity, seen) { - if (depth <= 0 || !isObject(value) || value["__v_skip"]) { - return value; - } - seen = seen || /* @__PURE__ */ new Map(); - if ((seen.get(value) || 0) >= depth) { - return value; - } - seen.set(value, depth); - depth--; - if (/* @__PURE__ */ isRef(value)) { - traverse(value.value, depth, seen); - } else if (isArray(value)) { - for (let i = 0; i < value.length; i++) { - traverse(value[i], depth, seen); - } - } else if (isSet(value) || isMap(value)) { - value.forEach((v) => { - traverse(v, depth, seen); - }); - } else if (isPlainObject(value)) { - for (const key in value) { - traverse(value[key], depth, seen); - } - for (const key of Object.getOwnPropertySymbols(value)) { - if (Object.prototype.propertyIsEnumerable.call(value, key)) { - traverse(value[key], depth, seen); - } - } - } - return value; -} -const stack = []; -let isWarning = false; -function warn$1(msg, ...args) { - if (isWarning) return; - isWarning = true; - pauseTracking(); - const instance = stack.length ? stack[stack.length - 1].component : null; - const appWarnHandler = instance && instance.appContext.config.warnHandler; - const trace = getComponentTrace(); - if (appWarnHandler) { - callWithErrorHandling( - appWarnHandler, - instance, - 11, - [ - // eslint-disable-next-line no-restricted-syntax - msg + args.map((a) => { - var _a, _b; - return (_b = (_a = a.toString) == null ? void 0 : _a.call(a)) != null ? _b : JSON.stringify(a); - }).join(""), - instance && instance.proxy, - trace.map( - ({ vnode }) => `at <${formatComponentName(instance, vnode.type)}>` - ).join("\n"), - trace - ] - ); - } else { - const warnArgs = [`[Vue warn]: ${msg}`, ...args]; - if (trace.length && // avoid spamming console during tests - true) { - warnArgs.push(` -`, ...formatTrace(trace)); - } - console.warn(...warnArgs); - } - resetTracking(); - isWarning = false; -} -function getComponentTrace() { - let currentVNode = stack[stack.length - 1]; - if (!currentVNode) { - return []; - } - const normalizedStack = []; - while (currentVNode) { - const last = normalizedStack[0]; - if (last && last.vnode === currentVNode) { - last.recurseCount++; - } else { - normalizedStack.push({ - vnode: currentVNode, - recurseCount: 0 - }); - } - const parentInstance = currentVNode.component && currentVNode.component.parent; - currentVNode = parentInstance && parentInstance.vnode; - } - return normalizedStack; -} -function formatTrace(trace) { - const logs = []; - trace.forEach((entry, i) => { - logs.push(...i === 0 ? [] : [` -`], ...formatTraceEntry(entry)); - }); - return logs; -} -function formatTraceEntry({ vnode, recurseCount }) { - const postfix = recurseCount > 0 ? `... (${recurseCount} recursive calls)` : ``; - const isRoot = vnode.component ? vnode.component.parent == null : false; - const open = ` at <${formatComponentName( - vnode.component, - vnode.type, - isRoot - )}`; - const close = `>` + postfix; - return vnode.props ? [open, ...formatProps(vnode.props), close] : [open + close]; -} -function formatProps(props) { - const res = []; - const keys = Object.keys(props); - keys.slice(0, 3).forEach((key) => { - res.push(...formatProp(key, props[key])); - }); - if (keys.length > 3) { - res.push(` ...`); - } - return res; -} -function formatProp(key, value, raw) { - if (isString(value)) { - value = JSON.stringify(value); - return raw ? value : [`${key}=${value}`]; - } else if (typeof value === "number" || typeof value === "boolean" || value == null) { - return raw ? value : [`${key}=${value}`]; - } else if (/* @__PURE__ */ isRef(value)) { - value = formatProp(key, /* @__PURE__ */ toRaw(value.value), true); - return raw ? value : [`${key}=Ref<`, value, `>`]; - } else if (isFunction(value)) { - return [`${key}=fn${value.name ? `<${value.name}>` : ``}`]; - } else { - value = /* @__PURE__ */ toRaw(value); - return raw ? value : [`${key}=`, value]; - } -} -function callWithErrorHandling(fn, instance, type, args) { - try { - return args ? fn(...args) : fn(); - } catch (err) { - handleError(err, instance, type); - } -} -function callWithAsyncErrorHandling(fn, instance, type, args) { - if (isFunction(fn)) { - const res = callWithErrorHandling(fn, instance, type, args); - if (res && isPromise(res)) { - res.catch((err) => { - handleError(err, instance, type); - }); - } - return res; - } - if (isArray(fn)) { - const values = []; - for (let i = 0; i < fn.length; i++) { - values.push(callWithAsyncErrorHandling(fn[i], instance, type, args)); - } - return values; - } -} -function handleError(err, instance, type, throwInDev = true) { - const contextVNode = instance ? instance.vnode : null; - const { errorHandler, throwUnhandledErrorInProduction } = instance && instance.appContext.config || EMPTY_OBJ; - if (instance) { - let cur = instance.parent; - const exposedInstance = instance.proxy; - const errorInfo = `https://vuejs.org/error-reference/#runtime-${type}`; - while (cur) { - const errorCapturedHooks = cur.ec; - if (errorCapturedHooks) { - for (let i = 0; i < errorCapturedHooks.length; i++) { - if (errorCapturedHooks[i](err, exposedInstance, errorInfo) === false) { - return; - } - } - } - cur = cur.parent; - } - if (errorHandler) { - pauseTracking(); - callWithErrorHandling(errorHandler, null, 10, [ - err, - exposedInstance, - errorInfo - ]); - resetTracking(); - return; - } - } - logError(err, type, contextVNode, throwInDev, throwUnhandledErrorInProduction); -} -function logError(err, type, contextVNode, throwInDev = true, throwInProd = false) { - if (throwInProd) { - throw err; - } else { - console.error(err); - } -} -const queue = []; -let flushIndex = -1; -const pendingPostFlushCbs = []; -let activePostFlushCbs = null; -let postFlushIndex = 0; -const resolvedPromise = /* @__PURE__ */ Promise.resolve(); -let currentFlushPromise = null; -function nextTick(fn) { - const p2 = currentFlushPromise || resolvedPromise; - return fn ? p2.then(this ? fn.bind(this) : fn) : p2; -} -function findInsertionIndex(id) { - let start = flushIndex + 1; - let end = queue.length; - while (start < end) { - const middle = start + end >>> 1; - const middleJob = queue[middle]; - const middleJobId = getId(middleJob); - if (middleJobId < id || middleJobId === id && middleJob.flags & 2) { - start = middle + 1; - } else { - end = middle; - } - } - return start; -} -function queueJob(job) { - if (!(job.flags & 1)) { - const jobId = getId(job); - const lastJob = queue[queue.length - 1]; - if (!lastJob || // fast path when the job id is larger than the tail - !(job.flags & 2) && jobId >= getId(lastJob)) { - queue.push(job); - } else { - queue.splice(findInsertionIndex(jobId), 0, job); - } - job.flags |= 1; - queueFlush(); - } -} -function queueFlush() { - if (!currentFlushPromise) { - currentFlushPromise = resolvedPromise.then(flushJobs); - } -} -function queuePostFlushCb(cb) { - if (!isArray(cb)) { - if (activePostFlushCbs && cb.id === -1) { - activePostFlushCbs.splice(postFlushIndex + 1, 0, cb); - } else if (!(cb.flags & 1)) { - pendingPostFlushCbs.push(cb); - cb.flags |= 1; - } - } else { - pendingPostFlushCbs.push(...cb); - } - queueFlush(); -} -function flushPreFlushCbs(instance, seen, i = flushIndex + 1) { - for (; i < queue.length; i++) { - const cb = queue[i]; - if (cb && cb.flags & 2) { - if (instance && cb.id !== instance.uid) { - continue; - } - queue.splice(i, 1); - i--; - if (cb.flags & 4) { - cb.flags &= -2; - } - cb(); - if (!(cb.flags & 4)) { - cb.flags &= -2; - } - } - } -} -function flushPostFlushCbs(seen) { - if (pendingPostFlushCbs.length) { - const deduped = [...new Set(pendingPostFlushCbs)].sort( - (a, b) => getId(a) - getId(b) - ); - pendingPostFlushCbs.length = 0; - if (activePostFlushCbs) { - activePostFlushCbs.push(...deduped); - return; - } - activePostFlushCbs = deduped; - for (postFlushIndex = 0; postFlushIndex < activePostFlushCbs.length; postFlushIndex++) { - const cb = activePostFlushCbs[postFlushIndex]; - if (cb.flags & 4) { - cb.flags &= -2; - } - if (!(cb.flags & 8)) cb(); - cb.flags &= -2; - } - activePostFlushCbs = null; - postFlushIndex = 0; - } -} -const getId = (job) => job.id == null ? job.flags & 2 ? -1 : Infinity : job.id; -function flushJobs(seen) { - try { - for (flushIndex = 0; flushIndex < queue.length; flushIndex++) { - const job = queue[flushIndex]; - if (job && !(job.flags & 8)) { - if (false) ; - if (job.flags & 4) { - job.flags &= ~1; - } - callWithErrorHandling( - job, - job.i, - job.i ? 15 : 14 - ); - if (!(job.flags & 4)) { - job.flags &= ~1; - } - } - } - } finally { - for (; flushIndex < queue.length; flushIndex++) { - const job = queue[flushIndex]; - if (job) { - job.flags &= -2; - } - } - flushIndex = -1; - queue.length = 0; - flushPostFlushCbs(); - currentFlushPromise = null; - if (queue.length || pendingPostFlushCbs.length) { - flushJobs(); - } - } -} -let currentRenderingInstance = null; -let currentScopeId = null; -function setCurrentRenderingInstance(instance) { - const prev = currentRenderingInstance; - currentRenderingInstance = instance; - currentScopeId = instance && instance.type.__scopeId || null; - return prev; -} -function withCtx(fn, ctx = currentRenderingInstance, isNonScopedSlot) { - if (!ctx) return fn; - if (fn._n) { - return fn; - } - const renderFnWithContext = (...args) => { - if (renderFnWithContext._d) { - setBlockTracking(-1); - } - const prevInstance = setCurrentRenderingInstance(ctx); - let res; - try { - res = fn(...args); - } finally { - setCurrentRenderingInstance(prevInstance); - if (renderFnWithContext._d) { - setBlockTracking(1); - } - } - return res; - }; - renderFnWithContext._n = true; - renderFnWithContext._c = true; - renderFnWithContext._d = true; - return renderFnWithContext; -} -function withDirectives(vnode, directives) { - if (currentRenderingInstance === null) { - return vnode; - } - const instance = getComponentPublicInstance(currentRenderingInstance); - const bindings = vnode.dirs || (vnode.dirs = []); - for (let i = 0; i < directives.length; i++) { - let [dir, value, arg, modifiers = EMPTY_OBJ] = directives[i]; - if (dir) { - if (isFunction(dir)) { - dir = { - mounted: dir, - updated: dir - }; - } - if (dir.deep) { - traverse(value); - } - bindings.push({ - dir, - instance, - value, - oldValue: void 0, - arg, - modifiers - }); - } - } - return vnode; -} -function invokeDirectiveHook(vnode, prevVNode, instance, name) { - const bindings = vnode.dirs; - const oldBindings = prevVNode && prevVNode.dirs; - for (let i = 0; i < bindings.length; i++) { - const binding = bindings[i]; - if (oldBindings) { - binding.oldValue = oldBindings[i].value; - } - let hook = binding.dir[name]; - if (hook) { - pauseTracking(); - callWithAsyncErrorHandling(hook, instance, 8, [ - vnode.el, - binding, - vnode, - prevVNode - ]); - resetTracking(); - } - } -} -function provide(key, value) { - if (currentInstance) { - let provides = currentInstance.provides; - const parentProvides = currentInstance.parent && currentInstance.parent.provides; - if (parentProvides === provides) { - provides = currentInstance.provides = Object.create(parentProvides); - } - provides[key] = value; - } -} -function inject(key, defaultValue, treatDefaultAsFactory = false) { - const instance = getCurrentInstance(); - if (instance || currentApp) { - let provides = currentApp ? currentApp._context.provides : instance ? instance.parent == null || instance.ce ? instance.vnode.appContext && instance.vnode.appContext.provides : instance.parent.provides : void 0; - if (provides && key in provides) { - return provides[key]; - } else if (arguments.length > 1) { - return treatDefaultAsFactory && isFunction(defaultValue) ? defaultValue.call(instance && instance.proxy) : defaultValue; - } else ; - } -} -const ssrContextKey = /* @__PURE__ */ Symbol.for("v-scx"); -const useSSRContext = () => { - { - const ctx = inject(ssrContextKey); - return ctx; - } -}; -function watch(source, cb, options) { - return doWatch(source, cb, options); -} -function doWatch(source, cb, options = EMPTY_OBJ) { - const { immediate, deep, flush, once } = options; - const baseWatchOptions = extend({}, options); - const runsImmediately = cb && immediate || !cb && flush !== "post"; - let ssrCleanup; - if (isInSSRComponentSetup) { - if (flush === "sync") { - const ctx = useSSRContext(); - ssrCleanup = ctx.__watcherHandles || (ctx.__watcherHandles = []); - } else if (!runsImmediately) { - const watchStopHandle = () => { - }; - watchStopHandle.stop = NOOP; - watchStopHandle.resume = NOOP; - watchStopHandle.pause = NOOP; - return watchStopHandle; - } - } - const instance = currentInstance; - baseWatchOptions.call = (fn, type, args) => callWithAsyncErrorHandling(fn, instance, type, args); - let isPre = false; - if (flush === "post") { - baseWatchOptions.scheduler = (job) => { - queuePostRenderEffect(job, instance && instance.suspense); - }; - } else if (flush !== "sync") { - isPre = true; - baseWatchOptions.scheduler = (job, isFirstRun) => { - if (isFirstRun) { - job(); - } else { - queueJob(job); - } - }; - } - baseWatchOptions.augmentJob = (job) => { - if (cb) { - job.flags |= 4; - } - if (isPre) { - job.flags |= 2; - if (instance) { - job.id = instance.uid; - job.i = instance; - } - } - }; - const watchHandle = watch$1(source, cb, baseWatchOptions); - if (isInSSRComponentSetup) { - if (ssrCleanup) { - ssrCleanup.push(watchHandle); - } else if (runsImmediately) { - watchHandle(); - } - } - return watchHandle; -} -function instanceWatch(source, value, options) { - const publicThis = this.proxy; - const getter = isString(source) ? source.includes(".") ? createPathGetter(publicThis, source) : () => publicThis[source] : source.bind(publicThis, publicThis); - let cb; - if (isFunction(value)) { - cb = value; - } else { - cb = value.handler; - options = value; - } - const reset = setCurrentInstance(this); - const res = doWatch(getter, cb.bind(publicThis), options); - reset(); - return res; -} -function createPathGetter(ctx, path) { - const segments = path.split("."); - return () => { - let cur = ctx; - for (let i = 0; i < segments.length && cur; i++) { - cur = cur[segments[i]]; - } - return cur; - }; -} -const TeleportEndKey = /* @__PURE__ */ Symbol("_vte"); -const isTeleport = (type) => type.__isTeleport; -const leaveCbKey = /* @__PURE__ */ Symbol("_leaveCb"); -function setTransitionHooks(vnode, hooks) { - if (vnode.shapeFlag & 6 && vnode.component) { - vnode.transition = hooks; - setTransitionHooks(vnode.component.subTree, hooks); - } else if (vnode.shapeFlag & 128) { - vnode.ssContent.transition = hooks.clone(vnode.ssContent); - vnode.ssFallback.transition = hooks.clone(vnode.ssFallback); - } else { - vnode.transition = hooks; - } -} -// @__NO_SIDE_EFFECTS__ -function defineComponent(options, extraOptions) { - return isFunction(options) ? ( - // #8236: extend call and options.name access are considered side-effects - // by Rollup, so we have to wrap it in a pure-annotated IIFE. - /* @__PURE__ */ (() => extend({ name: options.name }, extraOptions, { setup: options }))() - ) : options; -} -function markAsyncBoundary(instance) { - instance.ids = [instance.ids[0] + instance.ids[2]++ + "-", 0, 0]; -} -function isTemplateRefKey(refs, key) { - let desc; - return !!((desc = Object.getOwnPropertyDescriptor(refs, key)) && !desc.configurable); -} -const pendingSetRefMap = /* @__PURE__ */ new WeakMap(); -function setRef(rawRef, oldRawRef, parentSuspense, vnode, isUnmount = false) { - if (isArray(rawRef)) { - rawRef.forEach( - (r, i) => setRef( - r, - oldRawRef && (isArray(oldRawRef) ? oldRawRef[i] : oldRawRef), - parentSuspense, - vnode, - isUnmount - ) - ); - return; - } - if (isAsyncWrapper(vnode) && !isUnmount) { - if (vnode.shapeFlag & 512 && vnode.type.__asyncResolved && vnode.component.subTree.component) { - setRef(rawRef, oldRawRef, parentSuspense, vnode.component.subTree); - } - return; - } - const refValue = vnode.shapeFlag & 4 ? getComponentPublicInstance(vnode.component) : vnode.el; - const value = isUnmount ? null : refValue; - const { i: owner, r: ref3 } = rawRef; - const oldRef = oldRawRef && oldRawRef.r; - const refs = owner.refs === EMPTY_OBJ ? owner.refs = {} : owner.refs; - const setupState = owner.setupState; - const rawSetupState = /* @__PURE__ */ toRaw(setupState); - const canSetSetupRef = setupState === EMPTY_OBJ ? NO : (key) => { - if (isTemplateRefKey(refs, key)) { - return false; - } - return hasOwn(rawSetupState, key); - }; - const canSetRef = (ref22, key) => { - if (key && isTemplateRefKey(refs, key)) { - return false; - } - return true; - }; - if (oldRef != null && oldRef !== ref3) { - invalidatePendingSetRef(oldRawRef); - if (isString(oldRef)) { - refs[oldRef] = null; - if (canSetSetupRef(oldRef)) { - setupState[oldRef] = null; - } - } else if (/* @__PURE__ */ isRef(oldRef)) { - const oldRawRefAtom = oldRawRef; - if (canSetRef(oldRef, oldRawRefAtom.k)) { - oldRef.value = null; - } - if (oldRawRefAtom.k) refs[oldRawRefAtom.k] = null; - } - } - if (isFunction(ref3)) { - callWithErrorHandling(ref3, owner, 12, [value, refs]); - } else { - const _isString = isString(ref3); - const _isRef = /* @__PURE__ */ isRef(ref3); - if (_isString || _isRef) { - const doSet = () => { - if (rawRef.f) { - const existing = _isString ? canSetSetupRef(ref3) ? setupState[ref3] : refs[ref3] : canSetRef() || !rawRef.k ? ref3.value : refs[rawRef.k]; - if (isUnmount) { - isArray(existing) && remove(existing, refValue); - } else { - if (!isArray(existing)) { - if (_isString) { - refs[ref3] = [refValue]; - if (canSetSetupRef(ref3)) { - setupState[ref3] = refs[ref3]; - } - } else { - const newVal = [refValue]; - if (canSetRef(ref3, rawRef.k)) { - ref3.value = newVal; - } - if (rawRef.k) refs[rawRef.k] = newVal; - } - } else if (!existing.includes(refValue)) { - existing.push(refValue); - } - } - } else if (_isString) { - refs[ref3] = value; - if (canSetSetupRef(ref3)) { - setupState[ref3] = value; - } - } else if (_isRef) { - if (canSetRef(ref3, rawRef.k)) { - ref3.value = value; - } - if (rawRef.k) refs[rawRef.k] = value; - } else ; - }; - if (value) { - const job = () => { - doSet(); - pendingSetRefMap.delete(rawRef); - }; - job.id = -1; - pendingSetRefMap.set(rawRef, job); - queuePostRenderEffect(job, parentSuspense); - } else { - invalidatePendingSetRef(rawRef); - doSet(); - } - } - } -} -function invalidatePendingSetRef(rawRef) { - const pendingSetRef = pendingSetRefMap.get(rawRef); - if (pendingSetRef) { - pendingSetRef.flags |= 8; - pendingSetRefMap.delete(rawRef); - } -} -getGlobalThis().requestIdleCallback || ((cb) => setTimeout(cb, 1)); -getGlobalThis().cancelIdleCallback || ((id) => clearTimeout(id)); -const isAsyncWrapper = (i) => !!i.type.__asyncLoader; -const isKeepAlive = (vnode) => vnode.type.__isKeepAlive; -function onActivated(hook, target) { - registerKeepAliveHook(hook, "a", target); -} -function onDeactivated(hook, target) { - registerKeepAliveHook(hook, "da", target); -} -function registerKeepAliveHook(hook, type, target = currentInstance) { - const wrappedHook = hook.__wdc || (hook.__wdc = () => { - let current = target; - while (current) { - if (current.isDeactivated) { - return; - } - current = current.parent; - } - return hook(); - }); - injectHook(type, wrappedHook, target); - if (target) { - let current = target.parent; - while (current && current.parent) { - if (isKeepAlive(current.parent.vnode)) { - injectToKeepAliveRoot(wrappedHook, type, target, current); - } - current = current.parent; - } - } -} -function injectToKeepAliveRoot(hook, type, target, keepAliveRoot) { - const injected = injectHook( - type, - hook, - keepAliveRoot, - true - /* prepend */ - ); - onUnmounted(() => { - remove(keepAliveRoot[type], injected); - }, target); -} -function injectHook(type, hook, target = currentInstance, prepend = false) { - if (target) { - const hooks = target[type] || (target[type] = []); - const wrappedHook = hook.__weh || (hook.__weh = (...args) => { - pauseTracking(); - const reset = setCurrentInstance(target); - const res = callWithAsyncErrorHandling(hook, target, type, args); - reset(); - resetTracking(); - return res; - }); - if (prepend) { - hooks.unshift(wrappedHook); - } else { - hooks.push(wrappedHook); - } - return wrappedHook; - } -} -const createHook = (lifecycle) => (hook, target = currentInstance) => { - if (!isInSSRComponentSetup || lifecycle === "sp") { - injectHook(lifecycle, (...args) => hook(...args), target); - } -}; -const onBeforeMount = createHook("bm"); -const onMounted = createHook("m"); -const onBeforeUpdate = createHook( - "bu" -); -const onUpdated = createHook("u"); -const onBeforeUnmount = createHook( - "bum" -); -const onUnmounted = createHook("um"); -const onServerPrefetch = createHook( - "sp" -); -const onRenderTriggered = createHook("rtg"); -const onRenderTracked = createHook("rtc"); -function onErrorCaptured(hook, target = currentInstance) { - injectHook("ec", hook, target); -} -const COMPONENTS = "components"; -const NULL_DYNAMIC_COMPONENT = /* @__PURE__ */ Symbol.for("v-ndc"); -function resolveDynamicComponent(component) { - if (isString(component)) { - return resolveAsset(COMPONENTS, component, false) || component; - } else { - return component || NULL_DYNAMIC_COMPONENT; - } -} -function resolveAsset(type, name, warnMissing = true, maybeSelfReference = false) { - const instance = currentRenderingInstance || currentInstance; - if (instance) { - const Component = instance.type; - { - const selfName = getComponentName( - Component, - false - ); - if (selfName && (selfName === name || selfName === camelize(name) || selfName === capitalize(camelize(name)))) { - return Component; - } - } - const res = ( - // local registration - // check instance[type] first which is resolved for options API - resolve(instance[type] || Component[type], name) || // global registration - resolve(instance.appContext[type], name) - ); - if (!res && maybeSelfReference) { - return Component; - } - return res; - } -} -function resolve(registry, name) { - return registry && (registry[name] || registry[camelize(name)] || registry[capitalize(camelize(name))]); -} -function renderList(source, renderItem, cache, index) { - let ret; - const cached = cache; - const sourceIsArray = isArray(source); - if (sourceIsArray || isString(source)) { - const sourceIsReactiveArray = sourceIsArray && /* @__PURE__ */ isReactive(source); - let needsWrap = false; - let isReadonlySource = false; - if (sourceIsReactiveArray) { - needsWrap = !/* @__PURE__ */ isShallow(source); - isReadonlySource = /* @__PURE__ */ isReadonly(source); - source = shallowReadArray(source); - } - ret = new Array(source.length); - for (let i = 0, l = source.length; i < l; i++) { - ret[i] = renderItem( - needsWrap ? isReadonlySource ? toReadonly(toReactive(source[i])) : toReactive(source[i]) : source[i], - i, - void 0, - cached - ); - } - } else if (typeof source === "number") { - ret = new Array(source); - for (let i = 0; i < source; i++) { - ret[i] = renderItem(i + 1, i, void 0, cached); - } - } else if (isObject(source)) { - if (source[Symbol.iterator]) { - ret = Array.from( - source, - (item, i) => renderItem(item, i, void 0, cached) - ); - } else { - const keys = Object.keys(source); - ret = new Array(keys.length); - for (let i = 0, l = keys.length; i < l; i++) { - const key = keys[i]; - ret[i] = renderItem(source[key], key, i, cached); - } - } - } else { - ret = []; - } - return ret; -} -const getPublicInstance = (i) => { - if (!i) return null; - if (isStatefulComponent(i)) return getComponentPublicInstance(i); - return getPublicInstance(i.parent); -}; -const publicPropertiesMap = ( - // Move PURE marker to new line to workaround compiler discarding it - // due to type annotation - /* @__PURE__ */ extend(/* @__PURE__ */ Object.create(null), { - $: (i) => i, - $el: (i) => i.vnode.el, - $data: (i) => i.data, - $props: (i) => i.props, - $attrs: (i) => i.attrs, - $slots: (i) => i.slots, - $refs: (i) => i.refs, - $parent: (i) => getPublicInstance(i.parent), - $root: (i) => getPublicInstance(i.root), - $host: (i) => i.ce, - $emit: (i) => i.emit, - $options: (i) => resolveMergedOptions(i), - $forceUpdate: (i) => i.f || (i.f = () => { - queueJob(i.update); - }), - $nextTick: (i) => i.n || (i.n = nextTick.bind(i.proxy)), - $watch: (i) => instanceWatch.bind(i) - }) -); -const hasSetupBinding = (state, key) => state !== EMPTY_OBJ && !state.__isScriptSetup && hasOwn(state, key); -const PublicInstanceProxyHandlers = { - get({ _: instance }, key) { - if (key === "__v_skip") { - return true; - } - const { ctx, setupState, data, props, accessCache, type, appContext } = instance; - if (key[0] !== "$") { - const n = accessCache[key]; - if (n !== void 0) { - switch (n) { - case 1: - return setupState[key]; - case 2: - return data[key]; - case 4: - return ctx[key]; - case 3: - return props[key]; - } - } else if (hasSetupBinding(setupState, key)) { - accessCache[key] = 1; - return setupState[key]; - } else if (data !== EMPTY_OBJ && hasOwn(data, key)) { - accessCache[key] = 2; - return data[key]; - } else if (hasOwn(props, key)) { - accessCache[key] = 3; - return props[key]; - } else if (ctx !== EMPTY_OBJ && hasOwn(ctx, key)) { - accessCache[key] = 4; - return ctx[key]; - } else if (shouldCacheAccess) { - accessCache[key] = 0; - } - } - const publicGetter = publicPropertiesMap[key]; - let cssModule, globalProperties; - if (publicGetter) { - if (key === "$attrs") { - track(instance.attrs, "get", ""); - } - return publicGetter(instance); - } else if ( - // css module (injected by vue-loader) - (cssModule = type.__cssModules) && (cssModule = cssModule[key]) - ) { - return cssModule; - } else if (ctx !== EMPTY_OBJ && hasOwn(ctx, key)) { - accessCache[key] = 4; - return ctx[key]; - } else if ( - // global properties - globalProperties = appContext.config.globalProperties, hasOwn(globalProperties, key) - ) { - { - return globalProperties[key]; - } - } else ; - }, - set({ _: instance }, key, value) { - const { data, setupState, ctx } = instance; - if (hasSetupBinding(setupState, key)) { - setupState[key] = value; - return true; - } else if (data !== EMPTY_OBJ && hasOwn(data, key)) { - data[key] = value; - return true; - } else if (hasOwn(instance.props, key)) { - return false; - } - if (key[0] === "$" && key.slice(1) in instance) { - return false; - } else { - { - ctx[key] = value; - } - } - return true; - }, - has({ - _: { data, setupState, accessCache, ctx, appContext, props, type } - }, key) { - let cssModules; - return !!(accessCache[key] || data !== EMPTY_OBJ && key[0] !== "$" && hasOwn(data, key) || hasSetupBinding(setupState, key) || hasOwn(props, key) || hasOwn(ctx, key) || hasOwn(publicPropertiesMap, key) || hasOwn(appContext.config.globalProperties, key) || (cssModules = type.__cssModules) && cssModules[key]); - }, - defineProperty(target, key, descriptor) { - if (descriptor.get != null) { - target._.accessCache[key] = 0; - } else if (hasOwn(descriptor, "value")) { - this.set(target, key, descriptor.value, null); - } - return Reflect.defineProperty(target, key, descriptor); - } -}; -function normalizePropsOrEmits(props) { - return isArray(props) ? props.reduce( - (normalized, p2) => (normalized[p2] = null, normalized), - {} - ) : props; -} -let shouldCacheAccess = true; -function applyOptions(instance) { - const options = resolveMergedOptions(instance); - const publicThis = instance.proxy; - const ctx = instance.ctx; - shouldCacheAccess = false; - if (options.beforeCreate) { - callHook(options.beforeCreate, instance, "bc"); - } - const { - // state - data: dataOptions, - computed: computedOptions, - methods, - watch: watchOptions, - provide: provideOptions, - inject: injectOptions, - // lifecycle - created, - beforeMount, - mounted, - beforeUpdate, - updated, - activated, - deactivated, - beforeDestroy, - beforeUnmount, - destroyed, - unmounted, - render, - renderTracked, - renderTriggered, - errorCaptured, - serverPrefetch, - // public API - expose, - inheritAttrs, - // assets - components, - directives, - filters - } = options; - const checkDuplicateProperties = null; - if (injectOptions) { - resolveInjections(injectOptions, ctx, checkDuplicateProperties); - } - if (methods) { - for (const key in methods) { - const methodHandler = methods[key]; - if (isFunction(methodHandler)) { - { - ctx[key] = methodHandler.bind(publicThis); - } - } - } - } - if (dataOptions) { - const data = dataOptions.call(publicThis, publicThis); - if (!isObject(data)) ; - else { - instance.data = /* @__PURE__ */ reactive(data); - } - } - shouldCacheAccess = true; - if (computedOptions) { - for (const key in computedOptions) { - const opt = computedOptions[key]; - const get = isFunction(opt) ? opt.bind(publicThis, publicThis) : isFunction(opt.get) ? opt.get.bind(publicThis, publicThis) : NOOP; - const set = !isFunction(opt) && isFunction(opt.set) ? opt.set.bind(publicThis) : NOOP; - const c = computed({ - get, - set - }); - Object.defineProperty(ctx, key, { - enumerable: true, - configurable: true, - get: () => c.value, - set: (v) => c.value = v - }); - } - } - if (watchOptions) { - for (const key in watchOptions) { - createWatcher(watchOptions[key], ctx, publicThis, key); - } - } - if (provideOptions) { - const provides = isFunction(provideOptions) ? provideOptions.call(publicThis) : provideOptions; - Reflect.ownKeys(provides).forEach((key) => { - provide(key, provides[key]); - }); - } - if (created) { - callHook(created, instance, "c"); - } - function registerLifecycleHook(register, hook) { - if (isArray(hook)) { - hook.forEach((_hook) => register(_hook.bind(publicThis))); - } else if (hook) { - register(hook.bind(publicThis)); - } - } - registerLifecycleHook(onBeforeMount, beforeMount); - registerLifecycleHook(onMounted, mounted); - registerLifecycleHook(onBeforeUpdate, beforeUpdate); - registerLifecycleHook(onUpdated, updated); - registerLifecycleHook(onActivated, activated); - registerLifecycleHook(onDeactivated, deactivated); - registerLifecycleHook(onErrorCaptured, errorCaptured); - registerLifecycleHook(onRenderTracked, renderTracked); - registerLifecycleHook(onRenderTriggered, renderTriggered); - registerLifecycleHook(onBeforeUnmount, beforeUnmount); - registerLifecycleHook(onUnmounted, unmounted); - registerLifecycleHook(onServerPrefetch, serverPrefetch); - if (isArray(expose)) { - if (expose.length) { - const exposed = instance.exposed || (instance.exposed = {}); - expose.forEach((key) => { - Object.defineProperty(exposed, key, { - get: () => publicThis[key], - set: (val) => publicThis[key] = val, - enumerable: true - }); - }); - } else if (!instance.exposed) { - instance.exposed = {}; - } - } - if (render && instance.render === NOOP) { - instance.render = render; - } - if (inheritAttrs != null) { - instance.inheritAttrs = inheritAttrs; - } - if (components) instance.components = components; - if (directives) instance.directives = directives; - if (serverPrefetch) { - markAsyncBoundary(instance); - } -} -function resolveInjections(injectOptions, ctx, checkDuplicateProperties = NOOP) { - if (isArray(injectOptions)) { - injectOptions = normalizeInject(injectOptions); - } - for (const key in injectOptions) { - const opt = injectOptions[key]; - let injected; - if (isObject(opt)) { - if ("default" in opt) { - injected = inject( - opt.from || key, - opt.default, - true - ); - } else { - injected = inject(opt.from || key); - } - } else { - injected = inject(opt); - } - if (/* @__PURE__ */ isRef(injected)) { - Object.defineProperty(ctx, key, { - enumerable: true, - configurable: true, - get: () => injected.value, - set: (v) => injected.value = v - }); - } else { - ctx[key] = injected; - } - } -} -function callHook(hook, instance, type) { - callWithAsyncErrorHandling( - isArray(hook) ? hook.map((h2) => h2.bind(instance.proxy)) : hook.bind(instance.proxy), - instance, - type - ); -} -function createWatcher(raw, ctx, publicThis, key) { - let getter = key.includes(".") ? createPathGetter(publicThis, key) : () => publicThis[key]; - if (isString(raw)) { - const handler = ctx[raw]; - if (isFunction(handler)) { - { - watch(getter, handler); - } - } - } else if (isFunction(raw)) { - { - watch(getter, raw.bind(publicThis)); - } - } else if (isObject(raw)) { - if (isArray(raw)) { - raw.forEach((r) => createWatcher(r, ctx, publicThis, key)); - } else { - const handler = isFunction(raw.handler) ? raw.handler.bind(publicThis) : ctx[raw.handler]; - if (isFunction(handler)) { - watch(getter, handler, raw); - } - } - } else ; -} -function resolveMergedOptions(instance) { - const base = instance.type; - const { mixins, extends: extendsOptions } = base; - const { - mixins: globalMixins, - optionsCache: cache, - config: { optionMergeStrategies } - } = instance.appContext; - const cached = cache.get(base); - let resolved; - if (cached) { - resolved = cached; - } else if (!globalMixins.length && !mixins && !extendsOptions) { - { - resolved = base; - } - } else { - resolved = {}; - if (globalMixins.length) { - globalMixins.forEach( - (m) => mergeOptions(resolved, m, optionMergeStrategies, true) - ); - } - mergeOptions(resolved, base, optionMergeStrategies); - } - if (isObject(base)) { - cache.set(base, resolved); - } - return resolved; -} -function mergeOptions(to, from, strats, asMixin = false) { - const { mixins, extends: extendsOptions } = from; - if (extendsOptions) { - mergeOptions(to, extendsOptions, strats, true); - } - if (mixins) { - mixins.forEach( - (m) => mergeOptions(to, m, strats, true) - ); - } - for (const key in from) { - if (asMixin && key === "expose") ; - else { - const strat = internalOptionMergeStrats[key] || strats && strats[key]; - to[key] = strat ? strat(to[key], from[key]) : from[key]; - } - } - return to; -} -const internalOptionMergeStrats = { - data: mergeDataFn, - props: mergeEmitsOrPropsOptions, - emits: mergeEmitsOrPropsOptions, - // objects - methods: mergeObjectOptions, - computed: mergeObjectOptions, - // lifecycle - beforeCreate: mergeAsArray, - created: mergeAsArray, - beforeMount: mergeAsArray, - mounted: mergeAsArray, - beforeUpdate: mergeAsArray, - updated: mergeAsArray, - beforeDestroy: mergeAsArray, - beforeUnmount: mergeAsArray, - destroyed: mergeAsArray, - unmounted: mergeAsArray, - activated: mergeAsArray, - deactivated: mergeAsArray, - errorCaptured: mergeAsArray, - serverPrefetch: mergeAsArray, - // assets - components: mergeObjectOptions, - directives: mergeObjectOptions, - // watch - watch: mergeWatchOptions, - // provide / inject - provide: mergeDataFn, - inject: mergeInject -}; -function mergeDataFn(to, from) { - if (!from) { - return to; - } - if (!to) { - return from; - } - return function mergedDataFn() { - return extend( - isFunction(to) ? to.call(this, this) : to, - isFunction(from) ? from.call(this, this) : from - ); - }; -} -function mergeInject(to, from) { - return mergeObjectOptions(normalizeInject(to), normalizeInject(from)); -} -function normalizeInject(raw) { - if (isArray(raw)) { - const res = {}; - for (let i = 0; i < raw.length; i++) { - res[raw[i]] = raw[i]; - } - return res; - } - return raw; -} -function mergeAsArray(to, from) { - return to ? [...new Set([].concat(to, from))] : from; -} -function mergeObjectOptions(to, from) { - return to ? extend(/* @__PURE__ */ Object.create(null), to, from) : from; -} -function mergeEmitsOrPropsOptions(to, from) { - if (to) { - if (isArray(to) && isArray(from)) { - return [.../* @__PURE__ */ new Set([...to, ...from])]; - } - return extend( - /* @__PURE__ */ Object.create(null), - normalizePropsOrEmits(to), - normalizePropsOrEmits(from != null ? from : {}) - ); - } else { - return from; - } -} -function mergeWatchOptions(to, from) { - if (!to) return from; - if (!from) return to; - const merged = extend(/* @__PURE__ */ Object.create(null), to); - for (const key in from) { - merged[key] = mergeAsArray(to[key], from[key]); - } - return merged; -} -function createAppContext() { - return { - app: null, - config: { - isNativeTag: NO, - performance: false, - globalProperties: {}, - optionMergeStrategies: {}, - errorHandler: void 0, - warnHandler: void 0, - compilerOptions: {} - }, - mixins: [], - components: {}, - directives: {}, - provides: /* @__PURE__ */ Object.create(null), - optionsCache: /* @__PURE__ */ new WeakMap(), - propsCache: /* @__PURE__ */ new WeakMap(), - emitsCache: /* @__PURE__ */ new WeakMap() - }; -} -let uid$1 = 0; -function createAppAPI(render, hydrate) { - return function createApp2(rootComponent, rootProps = null) { - if (!isFunction(rootComponent)) { - rootComponent = extend({}, rootComponent); - } - if (rootProps != null && !isObject(rootProps)) { - rootProps = null; - } - const context = createAppContext(); - const installedPlugins = /* @__PURE__ */ new WeakSet(); - const pluginCleanupFns = []; - let isMounted = false; - const app = context.app = { - _uid: uid$1++, - _component: rootComponent, - _props: rootProps, - _container: null, - _context: context, - _instance: null, - version, - get config() { - return context.config; - }, - set config(v) { - }, - use(plugin, ...options) { - if (installedPlugins.has(plugin)) ; - else if (plugin && isFunction(plugin.install)) { - installedPlugins.add(plugin); - plugin.install(app, ...options); - } else if (isFunction(plugin)) { - installedPlugins.add(plugin); - plugin(app, ...options); - } else ; - return app; - }, - mixin(mixin) { - { - if (!context.mixins.includes(mixin)) { - context.mixins.push(mixin); - } - } - return app; - }, - component(name, component) { - if (!component) { - return context.components[name]; - } - context.components[name] = component; - return app; - }, - directive(name, directive) { - if (!directive) { - return context.directives[name]; - } - context.directives[name] = directive; - return app; - }, - mount(rootContainer, isHydrate, namespace) { - if (!isMounted) { - const vnode = app._ceVNode || createVNode(rootComponent, rootProps); - vnode.appContext = context; - if (namespace === true) { - namespace = "svg"; - } else if (namespace === false) { - namespace = void 0; - } - { - render(vnode, rootContainer, namespace); - } - isMounted = true; - app._container = rootContainer; - rootContainer.__vue_app__ = app; - return getComponentPublicInstance(vnode.component); - } - }, - onUnmount(cleanupFn) { - pluginCleanupFns.push(cleanupFn); - }, - unmount() { - if (isMounted) { - callWithAsyncErrorHandling( - pluginCleanupFns, - app._instance, - 16 - ); - render(null, app._container); - delete app._container.__vue_app__; - } - }, - provide(key, value) { - context.provides[key] = value; - return app; - }, - runWithContext(fn) { - const lastApp = currentApp; - currentApp = app; - try { - return fn(); - } finally { - currentApp = lastApp; - } - } - }; - return app; - }; -} -let currentApp = null; -const getModelModifiers = (props, modelName) => { - return modelName === "modelValue" || modelName === "model-value" ? props.modelModifiers : props[`${modelName}Modifiers`] || props[`${camelize(modelName)}Modifiers`] || props[`${hyphenate(modelName)}Modifiers`]; -}; -function emit(instance, event, ...rawArgs) { - if (instance.isUnmounted) return; - const props = instance.vnode.props || EMPTY_OBJ; - let args = rawArgs; - const isModelListener2 = event.startsWith("update:"); - const modifiers = isModelListener2 && getModelModifiers(props, event.slice(7)); - if (modifiers) { - if (modifiers.trim) { - args = rawArgs.map((a) => isString(a) ? a.trim() : a); - } - if (modifiers.number) { - args = rawArgs.map(looseToNumber); - } - } - let handlerName; - let handler = props[handlerName = toHandlerKey(event)] || // also try camelCase event handler (#2249) - props[handlerName = toHandlerKey(camelize(event))]; - if (!handler && isModelListener2) { - handler = props[handlerName = toHandlerKey(hyphenate(event))]; - } - if (handler) { - callWithAsyncErrorHandling( - handler, - instance, - 6, - args - ); - } - const onceHandler = props[handlerName + `Once`]; - if (onceHandler) { - if (!instance.emitted) { - instance.emitted = {}; - } else if (instance.emitted[handlerName]) { - return; - } - instance.emitted[handlerName] = true; - callWithAsyncErrorHandling( - onceHandler, - instance, - 6, - args - ); - } -} -const mixinEmitsCache = /* @__PURE__ */ new WeakMap(); -function normalizeEmitsOptions(comp, appContext, asMixin = false) { - const cache = asMixin ? mixinEmitsCache : appContext.emitsCache; - const cached = cache.get(comp); - if (cached !== void 0) { - return cached; - } - const raw = comp.emits; - let normalized = {}; - let hasExtends = false; - if (!isFunction(comp)) { - const extendEmits = (raw2) => { - const normalizedFromExtend = normalizeEmitsOptions(raw2, appContext, true); - if (normalizedFromExtend) { - hasExtends = true; - extend(normalized, normalizedFromExtend); - } - }; - if (!asMixin && appContext.mixins.length) { - appContext.mixins.forEach(extendEmits); - } - if (comp.extends) { - extendEmits(comp.extends); - } - if (comp.mixins) { - comp.mixins.forEach(extendEmits); - } - } - if (!raw && !hasExtends) { - if (isObject(comp)) { - cache.set(comp, null); - } - return null; - } - if (isArray(raw)) { - raw.forEach((key) => normalized[key] = null); - } else { - extend(normalized, raw); - } - if (isObject(comp)) { - cache.set(comp, normalized); - } - return normalized; -} -function isEmitListener(options, key) { - if (!options || !isOn(key)) { - return false; - } - key = key.slice(2).replace(/Once$/, ""); - return hasOwn(options, key[0].toLowerCase() + key.slice(1)) || hasOwn(options, hyphenate(key)) || hasOwn(options, key); -} -function markAttrsAccessed() { -} -function renderComponentRoot(instance) { - const { - type: Component, - vnode, - proxy, - withProxy, - propsOptions: [propsOptions], - slots, - attrs, - emit: emit2, - render, - renderCache, - props, - data, - setupState, - ctx, - inheritAttrs - } = instance; - const prev = setCurrentRenderingInstance(instance); - let result; - let fallthroughAttrs; - try { - if (vnode.shapeFlag & 4) { - const proxyToUse = withProxy || proxy; - const thisProxy = false ? new Proxy(proxyToUse, { - get(target, key, receiver) { - warn$1( - `Property '${String( - key - )}' was accessed via 'this'. Avoid using 'this' in templates.` - ); - return Reflect.get(target, key, receiver); - } - }) : proxyToUse; - result = normalizeVNode( - render.call( - thisProxy, - proxyToUse, - renderCache, - false ? /* @__PURE__ */ shallowReadonly(props) : props, - setupState, - data, - ctx - ) - ); - fallthroughAttrs = attrs; - } else { - const render2 = Component; - if (false) ; - result = normalizeVNode( - render2.length > 1 ? render2( - false ? /* @__PURE__ */ shallowReadonly(props) : props, - false ? { - get attrs() { - markAttrsAccessed(); - return /* @__PURE__ */ shallowReadonly(attrs); - }, - slots, - emit: emit2 - } : { attrs, slots, emit: emit2 } - ) : render2( - false ? /* @__PURE__ */ shallowReadonly(props) : props, - null - ) - ); - fallthroughAttrs = Component.props ? attrs : getFunctionalFallthrough(attrs); - } - } catch (err) { - blockStack.length = 0; - handleError(err, instance, 1); - result = createVNode(Comment); - } - let root = result; - if (fallthroughAttrs && inheritAttrs !== false) { - const keys = Object.keys(fallthroughAttrs); - const { shapeFlag } = root; - if (keys.length) { - if (shapeFlag & (1 | 6)) { - if (propsOptions && keys.some(isModelListener)) { - fallthroughAttrs = filterModelListeners( - fallthroughAttrs, - propsOptions - ); - } - root = cloneVNode(root, fallthroughAttrs, false, true); - } - } - } - if (vnode.dirs) { - root = cloneVNode(root, null, false, true); - root.dirs = root.dirs ? root.dirs.concat(vnode.dirs) : vnode.dirs; - } - if (vnode.transition) { - setTransitionHooks(root, vnode.transition); - } - { - result = root; - } - setCurrentRenderingInstance(prev); - return result; -} -const getFunctionalFallthrough = (attrs) => { - let res; - for (const key in attrs) { - if (key === "class" || key === "style" || isOn(key)) { - (res || (res = {}))[key] = attrs[key]; - } - } - return res; -}; -const filterModelListeners = (attrs, props) => { - const res = {}; - for (const key in attrs) { - if (!isModelListener(key) || !(key.slice(9) in props)) { - res[key] = attrs[key]; - } - } - return res; -}; -function shouldUpdateComponent(prevVNode, nextVNode, optimized) { - const { props: prevProps, children: prevChildren, component } = prevVNode; - const { props: nextProps, children: nextChildren, patchFlag } = nextVNode; - const emits = component.emitsOptions; - if (nextVNode.dirs || nextVNode.transition) { - return true; - } - if (optimized && patchFlag >= 0) { - if (patchFlag & 1024) { - return true; - } - if (patchFlag & 16) { - if (!prevProps) { - return !!nextProps; - } - return hasPropsChanged(prevProps, nextProps, emits); - } else if (patchFlag & 8) { - const dynamicProps = nextVNode.dynamicProps; - for (let i = 0; i < dynamicProps.length; i++) { - const key = dynamicProps[i]; - if (hasPropValueChanged(nextProps, prevProps, key) && !isEmitListener(emits, key)) { - return true; - } - } - } - } else { - if (prevChildren || nextChildren) { - if (!nextChildren || !nextChildren.$stable) { - return true; - } - } - if (prevProps === nextProps) { - return false; - } - if (!prevProps) { - return !!nextProps; - } - if (!nextProps) { - return true; - } - return hasPropsChanged(prevProps, nextProps, emits); - } - return false; -} -function hasPropsChanged(prevProps, nextProps, emitsOptions) { - const nextKeys = Object.keys(nextProps); - if (nextKeys.length !== Object.keys(prevProps).length) { - return true; - } - for (let i = 0; i < nextKeys.length; i++) { - const key = nextKeys[i]; - if (hasPropValueChanged(nextProps, prevProps, key) && !isEmitListener(emitsOptions, key)) { - return true; - } - } - return false; -} -function hasPropValueChanged(nextProps, prevProps, key) { - const nextProp = nextProps[key]; - const prevProp = prevProps[key]; - if (key === "style" && isObject(nextProp) && isObject(prevProp)) { - return !looseEqual(nextProp, prevProp); - } - return nextProp !== prevProp; -} -function updateHOCHostEl({ vnode, parent }, el) { - while (parent) { - const root = parent.subTree; - if (root.suspense && root.suspense.activeBranch === vnode) { - root.el = vnode.el; - } - if (root === vnode) { - (vnode = parent.vnode).el = el; - parent = parent.parent; - } else { - break; - } - } -} -const internalObjectProto = {}; -const createInternalObject = () => Object.create(internalObjectProto); -const isInternalObject = (obj) => Object.getPrototypeOf(obj) === internalObjectProto; -function initProps(instance, rawProps, isStateful, isSSR = false) { - const props = {}; - const attrs = createInternalObject(); - instance.propsDefaults = /* @__PURE__ */ Object.create(null); - setFullProps(instance, rawProps, props, attrs); - for (const key in instance.propsOptions[0]) { - if (!(key in props)) { - props[key] = void 0; - } - } - if (isStateful) { - instance.props = isSSR ? props : /* @__PURE__ */ shallowReactive(props); - } else { - if (!instance.type.props) { - instance.props = attrs; - } else { - instance.props = props; - } - } - instance.attrs = attrs; -} -function updateProps(instance, rawProps, rawPrevProps, optimized) { - const { - props, - attrs, - vnode: { patchFlag } - } = instance; - const rawCurrentProps = /* @__PURE__ */ toRaw(props); - const [options] = instance.propsOptions; - let hasAttrsChanged = false; - if ( - // always force full diff in dev - // - #1942 if hmr is enabled with sfc component - // - vite#872 non-sfc component used by sfc component - (optimized || patchFlag > 0) && !(patchFlag & 16) - ) { - if (patchFlag & 8) { - const propsToUpdate = instance.vnode.dynamicProps; - for (let i = 0; i < propsToUpdate.length; i++) { - let key = propsToUpdate[i]; - if (isEmitListener(instance.emitsOptions, key)) { - continue; - } - const value = rawProps[key]; - if (options) { - if (hasOwn(attrs, key)) { - if (value !== attrs[key]) { - attrs[key] = value; - hasAttrsChanged = true; - } - } else { - const camelizedKey = camelize(key); - props[camelizedKey] = resolvePropValue( - options, - rawCurrentProps, - camelizedKey, - value, - instance, - false - ); - } - } else { - if (value !== attrs[key]) { - attrs[key] = value; - hasAttrsChanged = true; - } - } - } - } - } else { - if (setFullProps(instance, rawProps, props, attrs)) { - hasAttrsChanged = true; - } - let kebabKey; - for (const key in rawCurrentProps) { - if (!rawProps || // for camelCase - !hasOwn(rawProps, key) && // it's possible the original props was passed in as kebab-case - // and converted to camelCase (#955) - ((kebabKey = hyphenate(key)) === key || !hasOwn(rawProps, kebabKey))) { - if (options) { - if (rawPrevProps && // for camelCase - (rawPrevProps[key] !== void 0 || // for kebab-case - rawPrevProps[kebabKey] !== void 0)) { - props[key] = resolvePropValue( - options, - rawCurrentProps, - key, - void 0, - instance, - true - ); - } - } else { - delete props[key]; - } - } - } - if (attrs !== rawCurrentProps) { - for (const key in attrs) { - if (!rawProps || !hasOwn(rawProps, key) && true) { - delete attrs[key]; - hasAttrsChanged = true; - } - } - } - } - if (hasAttrsChanged) { - trigger(instance.attrs, "set", ""); - } -} -function setFullProps(instance, rawProps, props, attrs) { - const [options, needCastKeys] = instance.propsOptions; - let hasAttrsChanged = false; - let rawCastValues; - if (rawProps) { - for (let key in rawProps) { - if (isReservedProp(key)) { - continue; - } - const value = rawProps[key]; - let camelKey; - if (options && hasOwn(options, camelKey = camelize(key))) { - if (!needCastKeys || !needCastKeys.includes(camelKey)) { - props[camelKey] = value; - } else { - (rawCastValues || (rawCastValues = {}))[camelKey] = value; - } - } else if (!isEmitListener(instance.emitsOptions, key)) { - if (!(key in attrs) || value !== attrs[key]) { - attrs[key] = value; - hasAttrsChanged = true; - } - } - } - } - if (needCastKeys) { - const rawCurrentProps = /* @__PURE__ */ toRaw(props); - const castValues = rawCastValues || EMPTY_OBJ; - for (let i = 0; i < needCastKeys.length; i++) { - const key = needCastKeys[i]; - props[key] = resolvePropValue( - options, - rawCurrentProps, - key, - castValues[key], - instance, - !hasOwn(castValues, key) - ); - } - } - return hasAttrsChanged; -} -function resolvePropValue(options, props, key, value, instance, isAbsent) { - const opt = options[key]; - if (opt != null) { - const hasDefault = hasOwn(opt, "default"); - if (hasDefault && value === void 0) { - const defaultValue = opt.default; - if (opt.type !== Function && !opt.skipFactory && isFunction(defaultValue)) { - const { propsDefaults } = instance; - if (key in propsDefaults) { - value = propsDefaults[key]; - } else { - const reset = setCurrentInstance(instance); - value = propsDefaults[key] = defaultValue.call( - null, - props - ); - reset(); - } - } else { - value = defaultValue; - } - if (instance.ce) { - instance.ce._setProp(key, value); - } - } - if (opt[ - 0 - /* shouldCast */ - ]) { - if (isAbsent && !hasDefault) { - value = false; - } else if (opt[ - 1 - /* shouldCastTrue */ - ] && (value === "" || value === hyphenate(key))) { - value = true; - } - } - } - return value; -} -const mixinPropsCache = /* @__PURE__ */ new WeakMap(); -function normalizePropsOptions(comp, appContext, asMixin = false) { - const cache = asMixin ? mixinPropsCache : appContext.propsCache; - const cached = cache.get(comp); - if (cached) { - return cached; - } - const raw = comp.props; - const normalized = {}; - const needCastKeys = []; - let hasExtends = false; - if (!isFunction(comp)) { - const extendProps = (raw2) => { - hasExtends = true; - const [props, keys] = normalizePropsOptions(raw2, appContext, true); - extend(normalized, props); - if (keys) needCastKeys.push(...keys); - }; - if (!asMixin && appContext.mixins.length) { - appContext.mixins.forEach(extendProps); - } - if (comp.extends) { - extendProps(comp.extends); - } - if (comp.mixins) { - comp.mixins.forEach(extendProps); - } - } - if (!raw && !hasExtends) { - if (isObject(comp)) { - cache.set(comp, EMPTY_ARR); - } - return EMPTY_ARR; - } - if (isArray(raw)) { - for (let i = 0; i < raw.length; i++) { - const normalizedKey = camelize(raw[i]); - if (validatePropName(normalizedKey)) { - normalized[normalizedKey] = EMPTY_OBJ; - } - } - } else if (raw) { - for (const key in raw) { - const normalizedKey = camelize(key); - if (validatePropName(normalizedKey)) { - const opt = raw[key]; - const prop = normalized[normalizedKey] = isArray(opt) || isFunction(opt) ? { type: opt } : extend({}, opt); - const propType = prop.type; - let shouldCast = false; - let shouldCastTrue = true; - if (isArray(propType)) { - for (let index = 0; index < propType.length; ++index) { - const type = propType[index]; - const typeName = isFunction(type) && type.name; - if (typeName === "Boolean") { - shouldCast = true; - break; - } else if (typeName === "String") { - shouldCastTrue = false; - } - } - } else { - shouldCast = isFunction(propType) && propType.name === "Boolean"; - } - prop[ - 0 - /* shouldCast */ - ] = shouldCast; - prop[ - 1 - /* shouldCastTrue */ - ] = shouldCastTrue; - if (shouldCast || hasOwn(prop, "default")) { - needCastKeys.push(normalizedKey); - } - } - } - } - const res = [normalized, needCastKeys]; - if (isObject(comp)) { - cache.set(comp, res); - } - return res; -} -function validatePropName(key) { - if (key[0] !== "$" && !isReservedProp(key)) { - return true; - } - return false; -} -const isInternalKey = (key) => key === "_" || key === "_ctx" || key === "$stable"; -const normalizeSlotValue = (value) => isArray(value) ? value.map(normalizeVNode) : [normalizeVNode(value)]; -const normalizeSlot = (key, rawSlot, ctx) => { - if (rawSlot._n) { - return rawSlot; - } - const normalized = withCtx((...args) => { - if (false) ; - return normalizeSlotValue(rawSlot(...args)); - }, ctx); - normalized._c = false; - return normalized; -}; -const normalizeObjectSlots = (rawSlots, slots, instance) => { - const ctx = rawSlots._ctx; - for (const key in rawSlots) { - if (isInternalKey(key)) continue; - const value = rawSlots[key]; - if (isFunction(value)) { - slots[key] = normalizeSlot(key, value, ctx); - } else if (value != null) { - const normalized = normalizeSlotValue(value); - slots[key] = () => normalized; - } - } -}; -const normalizeVNodeSlots = (instance, children) => { - const normalized = normalizeSlotValue(children); - instance.slots.default = () => normalized; -}; -const assignSlots = (slots, children, optimized) => { - for (const key in children) { - if (optimized || !isInternalKey(key)) { - slots[key] = children[key]; - } - } -}; -const initSlots = (instance, children, optimized) => { - const slots = instance.slots = createInternalObject(); - if (instance.vnode.shapeFlag & 32) { - const type = children._; - if (type) { - assignSlots(slots, children, optimized); - if (optimized) { - def(slots, "_", type, true); - } - } else { - normalizeObjectSlots(children, slots); - } - } else if (children) { - normalizeVNodeSlots(instance, children); - } -}; -const updateSlots = (instance, children, optimized) => { - const { vnode, slots } = instance; - let needDeletionCheck = true; - let deletionComparisonTarget = EMPTY_OBJ; - if (vnode.shapeFlag & 32) { - const type = children._; - if (type) { - if (optimized && type === 1) { - needDeletionCheck = false; - } else { - assignSlots(slots, children, optimized); - } - } else { - needDeletionCheck = !children.$stable; - normalizeObjectSlots(children, slots); - } - deletionComparisonTarget = children; - } else if (children) { - normalizeVNodeSlots(instance, children); - deletionComparisonTarget = { default: 1 }; - } - if (needDeletionCheck) { - for (const key in slots) { - if (!isInternalKey(key) && deletionComparisonTarget[key] == null) { - delete slots[key]; - } - } - } -}; -const queuePostRenderEffect = queueEffectWithSuspense; -function createRenderer(options) { - return baseCreateRenderer(options); -} -function baseCreateRenderer(options, createHydrationFns) { - const target = getGlobalThis(); - target.__VUE__ = true; - const { - insert: hostInsert, - remove: hostRemove, - patchProp: hostPatchProp, - createElement: hostCreateElement, - createText: hostCreateText, - createComment: hostCreateComment, - setText: hostSetText, - setElementText: hostSetElementText, - parentNode: hostParentNode, - nextSibling: hostNextSibling, - setScopeId: hostSetScopeId = NOOP, - insertStaticContent: hostInsertStaticContent - } = options; - const patch = (n1, n2, container, anchor = null, parentComponent = null, parentSuspense = null, namespace = void 0, slotScopeIds = null, optimized = !!n2.dynamicChildren) => { - if (n1 === n2) { - return; - } - if (n1 && !isSameVNodeType(n1, n2)) { - anchor = getNextHostNode(n1); - unmount(n1, parentComponent, parentSuspense, true); - n1 = null; - } - if (n2.patchFlag === -2) { - optimized = false; - n2.dynamicChildren = null; - } - const { type, ref: ref3, shapeFlag } = n2; - switch (type) { - case Text: - processText(n1, n2, container, anchor); - break; - case Comment: - processCommentNode(n1, n2, container, anchor); - break; - case Static: - if (n1 == null) { - mountStaticNode(n2, container, anchor, namespace); - } - break; - case Fragment: - processFragment( - n1, - n2, - container, - anchor, - parentComponent, - parentSuspense, - namespace, - slotScopeIds, - optimized - ); - break; - default: - if (shapeFlag & 1) { - processElement( - n1, - n2, - container, - anchor, - parentComponent, - parentSuspense, - namespace, - slotScopeIds, - optimized - ); - } else if (shapeFlag & 6) { - processComponent( - n1, - n2, - container, - anchor, - parentComponent, - parentSuspense, - namespace, - slotScopeIds, - optimized - ); - } else if (shapeFlag & 64) { - type.process( - n1, - n2, - container, - anchor, - parentComponent, - parentSuspense, - namespace, - slotScopeIds, - optimized, - internals - ); - } else if (shapeFlag & 128) { - type.process( - n1, - n2, - container, - anchor, - parentComponent, - parentSuspense, - namespace, - slotScopeIds, - optimized, - internals - ); - } else ; - } - if (ref3 != null && parentComponent) { - setRef(ref3, n1 && n1.ref, parentSuspense, n2 || n1, !n2); - } else if (ref3 == null && n1 && n1.ref != null) { - setRef(n1.ref, null, parentSuspense, n1, true); - } - }; - const processText = (n1, n2, container, anchor) => { - if (n1 == null) { - hostInsert( - n2.el = hostCreateText(n2.children), - container, - anchor - ); - } else { - const el = n2.el = n1.el; - if (n2.children !== n1.children) { - hostSetText(el, n2.children); - } - } - }; - const processCommentNode = (n1, n2, container, anchor) => { - if (n1 == null) { - hostInsert( - n2.el = hostCreateComment(n2.children || ""), - container, - anchor - ); - } else { - n2.el = n1.el; - } - }; - const mountStaticNode = (n2, container, anchor, namespace) => { - [n2.el, n2.anchor] = hostInsertStaticContent( - n2.children, - container, - anchor, - namespace, - n2.el, - n2.anchor - ); - }; - const moveStaticNode = ({ el, anchor }, container, nextSibling) => { - let next; - while (el && el !== anchor) { - next = hostNextSibling(el); - hostInsert(el, container, nextSibling); - el = next; - } - hostInsert(anchor, container, nextSibling); - }; - const removeStaticNode = ({ el, anchor }) => { - let next; - while (el && el !== anchor) { - next = hostNextSibling(el); - hostRemove(el); - el = next; - } - hostRemove(anchor); - }; - const processElement = (n1, n2, container, anchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized) => { - if (n2.type === "svg") { - namespace = "svg"; - } else if (n2.type === "math") { - namespace = "mathml"; - } - if (n1 == null) { - mountElement( - n2, - container, - anchor, - parentComponent, - parentSuspense, - namespace, - slotScopeIds, - optimized - ); - } else { - const customElement = n1.el && n1.el._isVueCE ? n1.el : null; - try { - if (customElement) { - customElement._beginPatch(); - } - patchElement( - n1, - n2, - parentComponent, - parentSuspense, - namespace, - slotScopeIds, - optimized - ); - } finally { - if (customElement) { - customElement._endPatch(); - } - } - } - }; - const mountElement = (vnode, container, anchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized) => { - let el; - let vnodeHook; - const { props, shapeFlag, transition, dirs } = vnode; - el = vnode.el = hostCreateElement( - vnode.type, - namespace, - props && props.is, - props - ); - if (shapeFlag & 8) { - hostSetElementText(el, vnode.children); - } else if (shapeFlag & 16) { - mountChildren( - vnode.children, - el, - null, - parentComponent, - parentSuspense, - resolveChildrenNamespace(vnode, namespace), - slotScopeIds, - optimized - ); - } - if (dirs) { - invokeDirectiveHook(vnode, null, parentComponent, "created"); - } - setScopeId(el, vnode, vnode.scopeId, slotScopeIds, parentComponent); - if (props) { - for (const key in props) { - if (key !== "value" && !isReservedProp(key)) { - hostPatchProp(el, key, null, props[key], namespace, parentComponent); - } - } - if ("value" in props) { - hostPatchProp(el, "value", null, props.value, namespace); - } - if (vnodeHook = props.onVnodeBeforeMount) { - invokeVNodeHook(vnodeHook, parentComponent, vnode); - } - } - if (dirs) { - invokeDirectiveHook(vnode, null, parentComponent, "beforeMount"); - } - const needCallTransitionHooks = needTransition(parentSuspense, transition); - if (needCallTransitionHooks) { - transition.beforeEnter(el); - } - hostInsert(el, container, anchor); - if ((vnodeHook = props && props.onVnodeMounted) || needCallTransitionHooks || dirs) { - queuePostRenderEffect(() => { - vnodeHook && invokeVNodeHook(vnodeHook, parentComponent, vnode); - needCallTransitionHooks && transition.enter(el); - dirs && invokeDirectiveHook(vnode, null, parentComponent, "mounted"); - }, parentSuspense); - } - }; - const setScopeId = (el, vnode, scopeId, slotScopeIds, parentComponent) => { - if (scopeId) { - hostSetScopeId(el, scopeId); - } - if (slotScopeIds) { - for (let i = 0; i < slotScopeIds.length; i++) { - hostSetScopeId(el, slotScopeIds[i]); - } - } - if (parentComponent) { - let subTree = parentComponent.subTree; - if (vnode === subTree || isSuspense(subTree.type) && (subTree.ssContent === vnode || subTree.ssFallback === vnode)) { - const parentVNode = parentComponent.vnode; - setScopeId( - el, - parentVNode, - parentVNode.scopeId, - parentVNode.slotScopeIds, - parentComponent.parent - ); - } - } - }; - const mountChildren = (children, container, anchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized, start = 0) => { - for (let i = start; i < children.length; i++) { - const child = children[i] = optimized ? cloneIfMounted(children[i]) : normalizeVNode(children[i]); - patch( - null, - child, - container, - anchor, - parentComponent, - parentSuspense, - namespace, - slotScopeIds, - optimized - ); - } - }; - const patchElement = (n1, n2, parentComponent, parentSuspense, namespace, slotScopeIds, optimized) => { - const el = n2.el = n1.el; - let { patchFlag, dynamicChildren, dirs } = n2; - patchFlag |= n1.patchFlag & 16; - const oldProps = n1.props || EMPTY_OBJ; - const newProps = n2.props || EMPTY_OBJ; - let vnodeHook; - parentComponent && toggleRecurse(parentComponent, false); - if (vnodeHook = newProps.onVnodeBeforeUpdate) { - invokeVNodeHook(vnodeHook, parentComponent, n2, n1); - } - if (dirs) { - invokeDirectiveHook(n2, n1, parentComponent, "beforeUpdate"); - } - parentComponent && toggleRecurse(parentComponent, true); - if (oldProps.innerHTML && newProps.innerHTML == null || oldProps.textContent && newProps.textContent == null) { - hostSetElementText(el, ""); - } - if (dynamicChildren) { - patchBlockChildren( - n1.dynamicChildren, - dynamicChildren, - el, - parentComponent, - parentSuspense, - resolveChildrenNamespace(n2, namespace), - slotScopeIds - ); - } else if (!optimized) { - patchChildren( - n1, - n2, - el, - null, - parentComponent, - parentSuspense, - resolveChildrenNamespace(n2, namespace), - slotScopeIds, - false - ); - } - if (patchFlag > 0) { - if (patchFlag & 16) { - patchProps(el, oldProps, newProps, parentComponent, namespace); - } else { - if (patchFlag & 2) { - if (oldProps.class !== newProps.class) { - hostPatchProp(el, "class", null, newProps.class, namespace); - } - } - if (patchFlag & 4) { - hostPatchProp(el, "style", oldProps.style, newProps.style, namespace); - } - if (patchFlag & 8) { - const propsToUpdate = n2.dynamicProps; - for (let i = 0; i < propsToUpdate.length; i++) { - const key = propsToUpdate[i]; - const prev = oldProps[key]; - const next = newProps[key]; - if (next !== prev || key === "value") { - hostPatchProp(el, key, prev, next, namespace, parentComponent); - } - } - } - } - if (patchFlag & 1) { - if (n1.children !== n2.children) { - hostSetElementText(el, n2.children); - } - } - } else if (!optimized && dynamicChildren == null) { - patchProps(el, oldProps, newProps, parentComponent, namespace); - } - if ((vnodeHook = newProps.onVnodeUpdated) || dirs) { - queuePostRenderEffect(() => { - vnodeHook && invokeVNodeHook(vnodeHook, parentComponent, n2, n1); - dirs && invokeDirectiveHook(n2, n1, parentComponent, "updated"); - }, parentSuspense); - } - }; - const patchBlockChildren = (oldChildren, newChildren, fallbackContainer, parentComponent, parentSuspense, namespace, slotScopeIds) => { - for (let i = 0; i < newChildren.length; i++) { - const oldVNode = oldChildren[i]; - const newVNode = newChildren[i]; - const container = ( - // oldVNode may be an errored async setup() component inside Suspense - // which will not have a mounted element - oldVNode.el && // - In the case of a Fragment, we need to provide the actual parent - // of the Fragment itself so it can move its children. - (oldVNode.type === Fragment || // - In the case of different nodes, there is going to be a replacement - // which also requires the correct parent container - !isSameVNodeType(oldVNode, newVNode) || // - In the case of a component, it could contain anything. - oldVNode.shapeFlag & (6 | 64 | 128)) ? hostParentNode(oldVNode.el) : ( - // In other cases, the parent container is not actually used so we - // just pass the block element here to avoid a DOM parentNode call. - fallbackContainer - ) - ); - patch( - oldVNode, - newVNode, - container, - null, - parentComponent, - parentSuspense, - namespace, - slotScopeIds, - true - ); - } - }; - const patchProps = (el, oldProps, newProps, parentComponent, namespace) => { - if (oldProps !== newProps) { - if (oldProps !== EMPTY_OBJ) { - for (const key in oldProps) { - if (!isReservedProp(key) && !(key in newProps)) { - hostPatchProp( - el, - key, - oldProps[key], - null, - namespace, - parentComponent - ); - } - } - } - for (const key in newProps) { - if (isReservedProp(key)) continue; - const next = newProps[key]; - const prev = oldProps[key]; - if (next !== prev && key !== "value") { - hostPatchProp(el, key, prev, next, namespace, parentComponent); - } - } - if ("value" in newProps) { - hostPatchProp(el, "value", oldProps.value, newProps.value, namespace); - } - } - }; - const processFragment = (n1, n2, container, anchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized) => { - const fragmentStartAnchor = n2.el = n1 ? n1.el : hostCreateText(""); - const fragmentEndAnchor = n2.anchor = n1 ? n1.anchor : hostCreateText(""); - let { patchFlag, dynamicChildren, slotScopeIds: fragmentSlotScopeIds } = n2; - if (fragmentSlotScopeIds) { - slotScopeIds = slotScopeIds ? slotScopeIds.concat(fragmentSlotScopeIds) : fragmentSlotScopeIds; - } - if (n1 == null) { - hostInsert(fragmentStartAnchor, container, anchor); - hostInsert(fragmentEndAnchor, container, anchor); - mountChildren( - // #10007 - // such fragment like `<>>` will be compiled into - // a fragment which doesn't have a children. - // In this case fallback to an empty array - n2.children || [], - container, - fragmentEndAnchor, - parentComponent, - parentSuspense, - namespace, - slotScopeIds, - optimized - ); - } else { - if (patchFlag > 0 && patchFlag & 64 && dynamicChildren && // #2715 the previous fragment could've been a BAILed one as a result - // of renderSlot() with no valid children - n1.dynamicChildren && n1.dynamicChildren.length === dynamicChildren.length) { - patchBlockChildren( - n1.dynamicChildren, - dynamicChildren, - container, - parentComponent, - parentSuspense, - namespace, - slotScopeIds - ); - if ( - // #2080 if the stable fragment has a key, it's a that may - // get moved around. Make sure all root level vnodes inherit el. - // #2134 or if it's a component root, it may also get moved around - // as the component is being moved. - n2.key != null || parentComponent && n2 === parentComponent.subTree - ) { - traverseStaticChildren( - n1, - n2, - true - /* shallow */ - ); - } - } else { - patchChildren( - n1, - n2, - container, - fragmentEndAnchor, - parentComponent, - parentSuspense, - namespace, - slotScopeIds, - optimized - ); - } - } - }; - const processComponent = (n1, n2, container, anchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized) => { - n2.slotScopeIds = slotScopeIds; - if (n1 == null) { - if (n2.shapeFlag & 512) { - parentComponent.ctx.activate( - n2, - container, - anchor, - namespace, - optimized - ); - } else { - mountComponent( - n2, - container, - anchor, - parentComponent, - parentSuspense, - namespace, - optimized - ); - } - } else { - updateComponent(n1, n2, optimized); - } - }; - const mountComponent = (initialVNode, container, anchor, parentComponent, parentSuspense, namespace, optimized) => { - const instance = initialVNode.component = createComponentInstance( - initialVNode, - parentComponent, - parentSuspense - ); - if (isKeepAlive(initialVNode)) { - instance.ctx.renderer = internals; - } - { - setupComponent(instance, false, optimized); - } - if (instance.asyncDep) { - parentSuspense && parentSuspense.registerDep(instance, setupRenderEffect, optimized); - if (!initialVNode.el) { - const placeholder = instance.subTree = createVNode(Comment); - processCommentNode(null, placeholder, container, anchor); - initialVNode.placeholder = placeholder.el; - } - } else { - setupRenderEffect( - instance, - initialVNode, - container, - anchor, - parentSuspense, - namespace, - optimized - ); - } - }; - const updateComponent = (n1, n2, optimized) => { - const instance = n2.component = n1.component; - if (shouldUpdateComponent(n1, n2, optimized)) { - if (instance.asyncDep && !instance.asyncResolved) { - updateComponentPreRender(instance, n2, optimized); - return; - } else { - instance.next = n2; - instance.update(); - } - } else { - n2.el = n1.el; - instance.vnode = n2; - } - }; - const setupRenderEffect = (instance, initialVNode, container, anchor, parentSuspense, namespace, optimized) => { - const componentUpdateFn = () => { - if (!instance.isMounted) { - let vnodeHook; - const { el, props } = initialVNode; - const { bm, m, parent, root, type } = instance; - const isAsyncWrapperVNode = isAsyncWrapper(initialVNode); - toggleRecurse(instance, false); - if (bm) { - invokeArrayFns(bm); - } - if (!isAsyncWrapperVNode && (vnodeHook = props && props.onVnodeBeforeMount)) { - invokeVNodeHook(vnodeHook, parent, initialVNode); - } - toggleRecurse(instance, true); - { - if (root.ce && root.ce._hasShadowRoot()) { - root.ce._injectChildStyle(type); - } - const subTree = instance.subTree = renderComponentRoot(instance); - patch( - null, - subTree, - container, - anchor, - instance, - parentSuspense, - namespace - ); - initialVNode.el = subTree.el; - } - if (m) { - queuePostRenderEffect(m, parentSuspense); - } - if (!isAsyncWrapperVNode && (vnodeHook = props && props.onVnodeMounted)) { - const scopedInitialVNode = initialVNode; - queuePostRenderEffect( - () => invokeVNodeHook(vnodeHook, parent, scopedInitialVNode), - parentSuspense - ); - } - if (initialVNode.shapeFlag & 256 || parent && isAsyncWrapper(parent.vnode) && parent.vnode.shapeFlag & 256) { - instance.a && queuePostRenderEffect(instance.a, parentSuspense); - } - instance.isMounted = true; - initialVNode = container = anchor = null; - } else { - let { next, bu, u, parent, vnode } = instance; - { - const nonHydratedAsyncRoot = locateNonHydratedAsyncRoot(instance); - if (nonHydratedAsyncRoot) { - if (next) { - next.el = vnode.el; - updateComponentPreRender(instance, next, optimized); - } - nonHydratedAsyncRoot.asyncDep.then(() => { - queuePostRenderEffect(() => { - if (!instance.isUnmounted) update(); - }, parentSuspense); - }); - return; - } - } - let originNext = next; - let vnodeHook; - toggleRecurse(instance, false); - if (next) { - next.el = vnode.el; - updateComponentPreRender(instance, next, optimized); - } else { - next = vnode; - } - if (bu) { - invokeArrayFns(bu); - } - if (vnodeHook = next.props && next.props.onVnodeBeforeUpdate) { - invokeVNodeHook(vnodeHook, parent, next, vnode); - } - toggleRecurse(instance, true); - const nextTree = renderComponentRoot(instance); - const prevTree = instance.subTree; - instance.subTree = nextTree; - patch( - prevTree, - nextTree, - // parent may have changed if it's in a teleport - hostParentNode(prevTree.el), - // anchor may have changed if it's in a fragment - getNextHostNode(prevTree), - instance, - parentSuspense, - namespace - ); - next.el = nextTree.el; - if (originNext === null) { - updateHOCHostEl(instance, nextTree.el); - } - if (u) { - queuePostRenderEffect(u, parentSuspense); - } - if (vnodeHook = next.props && next.props.onVnodeUpdated) { - queuePostRenderEffect( - () => invokeVNodeHook(vnodeHook, parent, next, vnode), - parentSuspense - ); - } - } - }; - instance.scope.on(); - const effect2 = instance.effect = new ReactiveEffect(componentUpdateFn); - instance.scope.off(); - const update = instance.update = effect2.run.bind(effect2); - const job = instance.job = effect2.runIfDirty.bind(effect2); - job.i = instance; - job.id = instance.uid; - effect2.scheduler = () => queueJob(job); - toggleRecurse(instance, true); - update(); - }; - const updateComponentPreRender = (instance, nextVNode, optimized) => { - nextVNode.component = instance; - const prevProps = instance.vnode.props; - instance.vnode = nextVNode; - instance.next = null; - updateProps(instance, nextVNode.props, prevProps, optimized); - updateSlots(instance, nextVNode.children, optimized); - pauseTracking(); - flushPreFlushCbs(instance); - resetTracking(); - }; - const patchChildren = (n1, n2, container, anchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized = false) => { - const c1 = n1 && n1.children; - const prevShapeFlag = n1 ? n1.shapeFlag : 0; - const c2 = n2.children; - const { patchFlag, shapeFlag } = n2; - if (patchFlag > 0) { - if (patchFlag & 128) { - patchKeyedChildren( - c1, - c2, - container, - anchor, - parentComponent, - parentSuspense, - namespace, - slotScopeIds, - optimized - ); - return; - } else if (patchFlag & 256) { - patchUnkeyedChildren( - c1, - c2, - container, - anchor, - parentComponent, - parentSuspense, - namespace, - slotScopeIds, - optimized - ); - return; - } - } - if (shapeFlag & 8) { - if (prevShapeFlag & 16) { - unmountChildren(c1, parentComponent, parentSuspense); - } - if (c2 !== c1) { - hostSetElementText(container, c2); - } - } else { - if (prevShapeFlag & 16) { - if (shapeFlag & 16) { - patchKeyedChildren( - c1, - c2, - container, - anchor, - parentComponent, - parentSuspense, - namespace, - slotScopeIds, - optimized - ); - } else { - unmountChildren(c1, parentComponent, parentSuspense, true); - } - } else { - if (prevShapeFlag & 8) { - hostSetElementText(container, ""); - } - if (shapeFlag & 16) { - mountChildren( - c2, - container, - anchor, - parentComponent, - parentSuspense, - namespace, - slotScopeIds, - optimized - ); - } - } - } - }; - const patchUnkeyedChildren = (c1, c2, container, anchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized) => { - c1 = c1 || EMPTY_ARR; - c2 = c2 || EMPTY_ARR; - const oldLength = c1.length; - const newLength = c2.length; - const commonLength = Math.min(oldLength, newLength); - let i; - for (i = 0; i < commonLength; i++) { - const nextChild = c2[i] = optimized ? cloneIfMounted(c2[i]) : normalizeVNode(c2[i]); - patch( - c1[i], - nextChild, - container, - null, - parentComponent, - parentSuspense, - namespace, - slotScopeIds, - optimized - ); - } - if (oldLength > newLength) { - unmountChildren( - c1, - parentComponent, - parentSuspense, - true, - false, - commonLength - ); - } else { - mountChildren( - c2, - container, - anchor, - parentComponent, - parentSuspense, - namespace, - slotScopeIds, - optimized, - commonLength - ); - } - }; - const patchKeyedChildren = (c1, c2, container, parentAnchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized) => { - let i = 0; - const l2 = c2.length; - let e1 = c1.length - 1; - let e2 = l2 - 1; - while (i <= e1 && i <= e2) { - const n1 = c1[i]; - const n2 = c2[i] = optimized ? cloneIfMounted(c2[i]) : normalizeVNode(c2[i]); - if (isSameVNodeType(n1, n2)) { - patch( - n1, - n2, - container, - null, - parentComponent, - parentSuspense, - namespace, - slotScopeIds, - optimized - ); - } else { - break; - } - i++; - } - while (i <= e1 && i <= e2) { - const n1 = c1[e1]; - const n2 = c2[e2] = optimized ? cloneIfMounted(c2[e2]) : normalizeVNode(c2[e2]); - if (isSameVNodeType(n1, n2)) { - patch( - n1, - n2, - container, - null, - parentComponent, - parentSuspense, - namespace, - slotScopeIds, - optimized - ); - } else { - break; - } - e1--; - e2--; - } - if (i > e1) { - if (i <= e2) { - const nextPos = e2 + 1; - const anchor = nextPos < l2 ? c2[nextPos].el : parentAnchor; - while (i <= e2) { - patch( - null, - c2[i] = optimized ? cloneIfMounted(c2[i]) : normalizeVNode(c2[i]), - container, - anchor, - parentComponent, - parentSuspense, - namespace, - slotScopeIds, - optimized - ); - i++; - } - } - } else if (i > e2) { - while (i <= e1) { - unmount(c1[i], parentComponent, parentSuspense, true); - i++; - } - } else { - const s1 = i; - const s2 = i; - const keyToNewIndexMap = /* @__PURE__ */ new Map(); - for (i = s2; i <= e2; i++) { - const nextChild = c2[i] = optimized ? cloneIfMounted(c2[i]) : normalizeVNode(c2[i]); - if (nextChild.key != null) { - keyToNewIndexMap.set(nextChild.key, i); - } - } - let j; - let patched = 0; - const toBePatched = e2 - s2 + 1; - let moved = false; - let maxNewIndexSoFar = 0; - const newIndexToOldIndexMap = new Array(toBePatched); - for (i = 0; i < toBePatched; i++) newIndexToOldIndexMap[i] = 0; - for (i = s1; i <= e1; i++) { - const prevChild = c1[i]; - if (patched >= toBePatched) { - unmount(prevChild, parentComponent, parentSuspense, true); - continue; - } - let newIndex; - if (prevChild.key != null) { - newIndex = keyToNewIndexMap.get(prevChild.key); - } else { - for (j = s2; j <= e2; j++) { - if (newIndexToOldIndexMap[j - s2] === 0 && isSameVNodeType(prevChild, c2[j])) { - newIndex = j; - break; - } - } - } - if (newIndex === void 0) { - unmount(prevChild, parentComponent, parentSuspense, true); - } else { - newIndexToOldIndexMap[newIndex - s2] = i + 1; - if (newIndex >= maxNewIndexSoFar) { - maxNewIndexSoFar = newIndex; - } else { - moved = true; - } - patch( - prevChild, - c2[newIndex], - container, - null, - parentComponent, - parentSuspense, - namespace, - slotScopeIds, - optimized - ); - patched++; - } - } - const increasingNewIndexSequence = moved ? getSequence(newIndexToOldIndexMap) : EMPTY_ARR; - j = increasingNewIndexSequence.length - 1; - for (i = toBePatched - 1; i >= 0; i--) { - const nextIndex = s2 + i; - const nextChild = c2[nextIndex]; - const anchorVNode = c2[nextIndex + 1]; - const anchor = nextIndex + 1 < l2 ? ( - // #13559, #14173 fallback to el placeholder for unresolved async component - anchorVNode.el || resolveAsyncComponentPlaceholder(anchorVNode) - ) : parentAnchor; - if (newIndexToOldIndexMap[i] === 0) { - patch( - null, - nextChild, - container, - anchor, - parentComponent, - parentSuspense, - namespace, - slotScopeIds, - optimized - ); - } else if (moved) { - if (j < 0 || i !== increasingNewIndexSequence[j]) { - move(nextChild, container, anchor, 2); - } else { - j--; - } - } - } - } - }; - const move = (vnode, container, anchor, moveType, parentSuspense = null) => { - const { el, type, transition, children, shapeFlag } = vnode; - if (shapeFlag & 6) { - move(vnode.component.subTree, container, anchor, moveType); - return; - } - if (shapeFlag & 128) { - vnode.suspense.move(container, anchor, moveType); - return; - } - if (shapeFlag & 64) { - type.move(vnode, container, anchor, internals); - return; - } - if (type === Fragment) { - hostInsert(el, container, anchor); - for (let i = 0; i < children.length; i++) { - move(children[i], container, anchor, moveType); - } - hostInsert(vnode.anchor, container, anchor); - return; - } - if (type === Static) { - moveStaticNode(vnode, container, anchor); - return; - } - const needTransition2 = moveType !== 2 && shapeFlag & 1 && transition; - if (needTransition2) { - if (moveType === 0) { - transition.beforeEnter(el); - hostInsert(el, container, anchor); - queuePostRenderEffect(() => transition.enter(el), parentSuspense); - } else { - const { leave, delayLeave, afterLeave } = transition; - const remove22 = () => { - if (vnode.ctx.isUnmounted) { - hostRemove(el); - } else { - hostInsert(el, container, anchor); - } - }; - const performLeave = () => { - if (el._isLeaving) { - el[leaveCbKey]( - true - /* cancelled */ - ); - } - leave(el, () => { - remove22(); - afterLeave && afterLeave(); - }); - }; - if (delayLeave) { - delayLeave(el, remove22, performLeave); - } else { - performLeave(); - } - } - } else { - hostInsert(el, container, anchor); - } - }; - const unmount = (vnode, parentComponent, parentSuspense, doRemove = false, optimized = false) => { - const { - type, - props, - ref: ref3, - children, - dynamicChildren, - shapeFlag, - patchFlag, - dirs, - cacheIndex - } = vnode; - if (patchFlag === -2) { - optimized = false; - } - if (ref3 != null) { - pauseTracking(); - setRef(ref3, null, parentSuspense, vnode, true); - resetTracking(); - } - if (cacheIndex != null) { - parentComponent.renderCache[cacheIndex] = void 0; - } - if (shapeFlag & 256) { - parentComponent.ctx.deactivate(vnode); - return; - } - const shouldInvokeDirs = shapeFlag & 1 && dirs; - const shouldInvokeVnodeHook = !isAsyncWrapper(vnode); - let vnodeHook; - if (shouldInvokeVnodeHook && (vnodeHook = props && props.onVnodeBeforeUnmount)) { - invokeVNodeHook(vnodeHook, parentComponent, vnode); - } - if (shapeFlag & 6) { - unmountComponent(vnode.component, parentSuspense, doRemove); - } else { - if (shapeFlag & 128) { - vnode.suspense.unmount(parentSuspense, doRemove); - return; - } - if (shouldInvokeDirs) { - invokeDirectiveHook(vnode, null, parentComponent, "beforeUnmount"); - } - if (shapeFlag & 64) { - vnode.type.remove( - vnode, - parentComponent, - parentSuspense, - internals, - doRemove - ); - } else if (dynamicChildren && // #5154 - // when v-once is used inside a block, setBlockTracking(-1) marks the - // parent block with hasOnce: true - // so that it doesn't take the fast path during unmount - otherwise - // components nested in v-once are never unmounted. - !dynamicChildren.hasOnce && // #1153: fast path should not be taken for non-stable (v-for) fragments - (type !== Fragment || patchFlag > 0 && patchFlag & 64)) { - unmountChildren( - dynamicChildren, - parentComponent, - parentSuspense, - false, - true - ); - } else if (type === Fragment && patchFlag & (128 | 256) || !optimized && shapeFlag & 16) { - unmountChildren(children, parentComponent, parentSuspense); - } - if (doRemove) { - remove2(vnode); - } - } - if (shouldInvokeVnodeHook && (vnodeHook = props && props.onVnodeUnmounted) || shouldInvokeDirs) { - queuePostRenderEffect(() => { - vnodeHook && invokeVNodeHook(vnodeHook, parentComponent, vnode); - shouldInvokeDirs && invokeDirectiveHook(vnode, null, parentComponent, "unmounted"); - }, parentSuspense); - } - }; - const remove2 = (vnode) => { - const { type, el, anchor, transition } = vnode; - if (type === Fragment) { - { - removeFragment(el, anchor); - } - return; - } - if (type === Static) { - removeStaticNode(vnode); - return; - } - const performRemove = () => { - hostRemove(el); - if (transition && !transition.persisted && transition.afterLeave) { - transition.afterLeave(); - } - }; - if (vnode.shapeFlag & 1 && transition && !transition.persisted) { - const { leave, delayLeave } = transition; - const performLeave = () => leave(el, performRemove); - if (delayLeave) { - delayLeave(vnode.el, performRemove, performLeave); - } else { - performLeave(); - } - } else { - performRemove(); - } - }; - const removeFragment = (cur, end) => { - let next; - while (cur !== end) { - next = hostNextSibling(cur); - hostRemove(cur); - cur = next; - } - hostRemove(end); - }; - const unmountComponent = (instance, parentSuspense, doRemove) => { - const { bum, scope, job, subTree, um, m, a } = instance; - invalidateMount(m); - invalidateMount(a); - if (bum) { - invokeArrayFns(bum); - } - scope.stop(); - if (job) { - job.flags |= 8; - unmount(subTree, instance, parentSuspense, doRemove); - } - if (um) { - queuePostRenderEffect(um, parentSuspense); - } - queuePostRenderEffect(() => { - instance.isUnmounted = true; - }, parentSuspense); - }; - const unmountChildren = (children, parentComponent, parentSuspense, doRemove = false, optimized = false, start = 0) => { - for (let i = start; i < children.length; i++) { - unmount(children[i], parentComponent, parentSuspense, doRemove, optimized); - } - }; - const getNextHostNode = (vnode) => { - if (vnode.shapeFlag & 6) { - return getNextHostNode(vnode.component.subTree); - } - if (vnode.shapeFlag & 128) { - return vnode.suspense.next(); - } - const el = hostNextSibling(vnode.anchor || vnode.el); - const teleportEnd = el && el[TeleportEndKey]; - return teleportEnd ? hostNextSibling(teleportEnd) : el; - }; - let isFlushing = false; - const render = (vnode, container, namespace) => { - let instance; - if (vnode == null) { - if (container._vnode) { - unmount(container._vnode, null, null, true); - instance = container._vnode.component; - } - } else { - patch( - container._vnode || null, - vnode, - container, - null, - null, - null, - namespace - ); - } - container._vnode = vnode; - if (!isFlushing) { - isFlushing = true; - flushPreFlushCbs(instance); - flushPostFlushCbs(); - isFlushing = false; - } - }; - const internals = { - p: patch, - um: unmount, - m: move, - r: remove2, - mt: mountComponent, - mc: mountChildren, - pc: patchChildren, - pbc: patchBlockChildren, - n: getNextHostNode, - o: options - }; - let hydrate; - return { - render, - hydrate, - createApp: createAppAPI(render) - }; -} -function resolveChildrenNamespace({ type, props }, currentNamespace) { - return currentNamespace === "svg" && type === "foreignObject" || currentNamespace === "mathml" && type === "annotation-xml" && props && props.encoding && props.encoding.includes("html") ? void 0 : currentNamespace; -} -function toggleRecurse({ effect: effect2, job }, allowed) { - if (allowed) { - effect2.flags |= 32; - job.flags |= 4; - } else { - effect2.flags &= -33; - job.flags &= -5; - } -} -function needTransition(parentSuspense, transition) { - return (!parentSuspense || parentSuspense && !parentSuspense.pendingBranch) && transition && !transition.persisted; -} -function traverseStaticChildren(n1, n2, shallow = false) { - const ch1 = n1.children; - const ch2 = n2.children; - if (isArray(ch1) && isArray(ch2)) { - for (let i = 0; i < ch1.length; i++) { - const c1 = ch1[i]; - let c2 = ch2[i]; - if (c2.shapeFlag & 1 && !c2.dynamicChildren) { - if (c2.patchFlag <= 0 || c2.patchFlag === 32) { - c2 = ch2[i] = cloneIfMounted(ch2[i]); - c2.el = c1.el; - } - if (!shallow && c2.patchFlag !== -2) - traverseStaticChildren(c1, c2); - } - if (c2.type === Text) { - if (c2.patchFlag === -1) { - c2 = ch2[i] = cloneIfMounted(c2); - } - c2.el = c1.el; - } - if (c2.type === Comment && !c2.el) { - c2.el = c1.el; - } - } - } -} -function getSequence(arr) { - const p2 = arr.slice(); - const result = [0]; - let i, j, u, v, c; - const len = arr.length; - for (i = 0; i < len; i++) { - const arrI = arr[i]; - if (arrI !== 0) { - j = result[result.length - 1]; - if (arr[j] < arrI) { - p2[i] = j; - result.push(i); - continue; - } - u = 0; - v = result.length - 1; - while (u < v) { - c = u + v >> 1; - if (arr[result[c]] < arrI) { - u = c + 1; - } else { - v = c; - } - } - if (arrI < arr[result[u]]) { - if (u > 0) { - p2[i] = result[u - 1]; - } - result[u] = i; - } - } - } - u = result.length; - v = result[u - 1]; - while (u-- > 0) { - result[u] = v; - v = p2[v]; - } - return result; -} -function locateNonHydratedAsyncRoot(instance) { - const subComponent = instance.subTree.component; - if (subComponent) { - if (subComponent.asyncDep && !subComponent.asyncResolved) { - return subComponent; - } else { - return locateNonHydratedAsyncRoot(subComponent); - } - } -} -function invalidateMount(hooks) { - if (hooks) { - for (let i = 0; i < hooks.length; i++) - hooks[i].flags |= 8; - } -} -function resolveAsyncComponentPlaceholder(anchorVnode) { - if (anchorVnode.placeholder) { - return anchorVnode.placeholder; - } - const instance = anchorVnode.component; - if (instance) { - return resolveAsyncComponentPlaceholder(instance.subTree); - } - return null; -} -const isSuspense = (type) => type.__isSuspense; -function queueEffectWithSuspense(fn, suspense) { - if (suspense && suspense.pendingBranch) { - if (isArray(fn)) { - suspense.effects.push(...fn); - } else { - suspense.effects.push(fn); - } - } else { - queuePostFlushCb(fn); - } -} -const Fragment = /* @__PURE__ */ Symbol.for("v-fgt"); -const Text = /* @__PURE__ */ Symbol.for("v-txt"); -const Comment = /* @__PURE__ */ Symbol.for("v-cmt"); -const Static = /* @__PURE__ */ Symbol.for("v-stc"); -const blockStack = []; -let currentBlock = null; -function openBlock(disableTracking = false) { - blockStack.push(currentBlock = disableTracking ? null : []); -} -function closeBlock() { - blockStack.pop(); - currentBlock = blockStack[blockStack.length - 1] || null; -} -let isBlockTreeEnabled = 1; -function setBlockTracking(value, inVOnce = false) { - isBlockTreeEnabled += value; - if (value < 0 && currentBlock && inVOnce) { - currentBlock.hasOnce = true; - } -} -function setupBlock(vnode) { - vnode.dynamicChildren = isBlockTreeEnabled > 0 ? currentBlock || EMPTY_ARR : null; - closeBlock(); - if (isBlockTreeEnabled > 0 && currentBlock) { - currentBlock.push(vnode); - } - return vnode; -} -function createElementBlock(type, props, children, patchFlag, dynamicProps, shapeFlag) { - return setupBlock( - createBaseVNode( - type, - props, - children, - patchFlag, - dynamicProps, - shapeFlag, - true - ) - ); -} -function createBlock(type, props, children, patchFlag, dynamicProps) { - return setupBlock( - createVNode( - type, - props, - children, - patchFlag, - dynamicProps, - true - ) - ); -} -function isVNode(value) { - return value ? value.__v_isVNode === true : false; -} -function isSameVNodeType(n1, n2) { - return n1.type === n2.type && n1.key === n2.key; -} -const normalizeKey = ({ key }) => key != null ? key : null; -const normalizeRef = ({ - ref: ref3, - ref_key, - ref_for -}) => { - if (typeof ref3 === "number") { - ref3 = "" + ref3; - } - return ref3 != null ? isString(ref3) || /* @__PURE__ */ isRef(ref3) || isFunction(ref3) ? { i: currentRenderingInstance, r: ref3, k: ref_key, f: !!ref_for } : ref3 : null; -}; -function createBaseVNode(type, props = null, children = null, patchFlag = 0, dynamicProps = null, shapeFlag = type === Fragment ? 0 : 1, isBlockNode = false, needFullChildrenNormalization = false) { - const vnode = { - __v_isVNode: true, - __v_skip: true, - type, - props, - key: props && normalizeKey(props), - ref: props && normalizeRef(props), - scopeId: currentScopeId, - slotScopeIds: null, - children, - component: null, - suspense: null, - ssContent: null, - ssFallback: null, - dirs: null, - transition: null, - el: null, - anchor: null, - target: null, - targetStart: null, - targetAnchor: null, - staticCount: 0, - shapeFlag, - patchFlag, - dynamicProps, - dynamicChildren: null, - appContext: null, - ctx: currentRenderingInstance - }; - if (needFullChildrenNormalization) { - normalizeChildren(vnode, children); - if (shapeFlag & 128) { - type.normalize(vnode); - } - } else if (children) { - vnode.shapeFlag |= isString(children) ? 8 : 16; - } - if (isBlockTreeEnabled > 0 && // avoid a block node from tracking itself - !isBlockNode && // has current parent block - currentBlock && // presence of a patch flag indicates this node needs patching on updates. - // component nodes also should always be patched, because even if the - // component doesn't need to update, it needs to persist the instance on to - // the next vnode so that it can be properly unmounted later. - (vnode.patchFlag > 0 || shapeFlag & 6) && // the EVENTS flag is only for hydration and if it is the only flag, the - // vnode should not be considered dynamic due to handler caching. - vnode.patchFlag !== 32) { - currentBlock.push(vnode); - } - return vnode; -} -const createVNode = _createVNode; -function _createVNode(type, props = null, children = null, patchFlag = 0, dynamicProps = null, isBlockNode = false) { - if (!type || type === NULL_DYNAMIC_COMPONENT) { - type = Comment; - } - if (isVNode(type)) { - const cloned = cloneVNode( - type, - props, - true - /* mergeRef: true */ - ); - if (children) { - normalizeChildren(cloned, children); - } - if (isBlockTreeEnabled > 0 && !isBlockNode && currentBlock) { - if (cloned.shapeFlag & 6) { - currentBlock[currentBlock.indexOf(type)] = cloned; - } else { - currentBlock.push(cloned); - } - } - cloned.patchFlag = -2; - return cloned; - } - if (isClassComponent(type)) { - type = type.__vccOpts; - } - if (props) { - props = guardReactiveProps(props); - let { class: klass, style } = props; - if (klass && !isString(klass)) { - props.class = normalizeClass(klass); - } - if (isObject(style)) { - if (/* @__PURE__ */ isProxy(style) && !isArray(style)) { - style = extend({}, style); - } - props.style = normalizeStyle(style); - } - } - const shapeFlag = isString(type) ? 1 : isSuspense(type) ? 128 : isTeleport(type) ? 64 : isObject(type) ? 4 : isFunction(type) ? 2 : 0; - return createBaseVNode( - type, - props, - children, - patchFlag, - dynamicProps, - shapeFlag, - isBlockNode, - true - ); -} -function guardReactiveProps(props) { - if (!props) return null; - return /* @__PURE__ */ isProxy(props) || isInternalObject(props) ? extend({}, props) : props; -} -function cloneVNode(vnode, extraProps, mergeRef = false, cloneTransition = false) { - const { props, ref: ref3, patchFlag, children, transition } = vnode; - const mergedProps = extraProps ? mergeProps(props || {}, extraProps) : props; - const cloned = { - __v_isVNode: true, - __v_skip: true, - type: vnode.type, - props: mergedProps, - key: mergedProps && normalizeKey(mergedProps), - ref: extraProps && extraProps.ref ? ( - // #2078 in the case of - // if the vnode itself already has a ref, cloneVNode will need to merge - // the refs so the single vnode can be set on multiple refs - mergeRef && ref3 ? isArray(ref3) ? ref3.concat(normalizeRef(extraProps)) : [ref3, normalizeRef(extraProps)] : normalizeRef(extraProps) - ) : ref3, - scopeId: vnode.scopeId, - slotScopeIds: vnode.slotScopeIds, - children, - target: vnode.target, - targetStart: vnode.targetStart, - targetAnchor: vnode.targetAnchor, - staticCount: vnode.staticCount, - shapeFlag: vnode.shapeFlag, - // if the vnode is cloned with extra props, we can no longer assume its - // existing patch flag to be reliable and need to add the FULL_PROPS flag. - // note: preserve flag for fragments since they use the flag for children - // fast paths only. - patchFlag: extraProps && vnode.type !== Fragment ? patchFlag === -1 ? 16 : patchFlag | 16 : patchFlag, - dynamicProps: vnode.dynamicProps, - dynamicChildren: vnode.dynamicChildren, - appContext: vnode.appContext, - dirs: vnode.dirs, - transition, - // These should technically only be non-null on mounted VNodes. However, - // they *should* be copied for kept-alive vnodes. So we just always copy - // them since them being non-null during a mount doesn't affect the logic as - // they will simply be overwritten. - component: vnode.component, - suspense: vnode.suspense, - ssContent: vnode.ssContent && cloneVNode(vnode.ssContent), - ssFallback: vnode.ssFallback && cloneVNode(vnode.ssFallback), - placeholder: vnode.placeholder, - el: vnode.el, - anchor: vnode.anchor, - ctx: vnode.ctx, - ce: vnode.ce - }; - if (transition && cloneTransition) { - setTransitionHooks( - cloned, - transition.clone(cloned) - ); - } - return cloned; -} -function createTextVNode(text = " ", flag = 0) { - return createVNode(Text, null, text, flag); -} -function createCommentVNode(text = "", asBlock = false) { - return asBlock ? (openBlock(), createBlock(Comment, null, text)) : createVNode(Comment, null, text); -} -function normalizeVNode(child) { - if (child == null || typeof child === "boolean") { - return createVNode(Comment); - } else if (isArray(child)) { - return createVNode( - Fragment, - null, - // #3666, avoid reference pollution when reusing vnode - child.slice() - ); - } else if (isVNode(child)) { - return cloneIfMounted(child); - } else { - return createVNode(Text, null, String(child)); - } -} -function cloneIfMounted(child) { - return child.el === null && child.patchFlag !== -1 || child.memo ? child : cloneVNode(child); -} -function normalizeChildren(vnode, children) { - let type = 0; - const { shapeFlag } = vnode; - if (children == null) { - children = null; - } else if (isArray(children)) { - type = 16; - } else if (typeof children === "object") { - if (shapeFlag & (1 | 64)) { - const slot = children.default; - if (slot) { - slot._c && (slot._d = false); - normalizeChildren(vnode, slot()); - slot._c && (slot._d = true); - } - return; - } else { - type = 32; - const slotFlag = children._; - if (!slotFlag && !isInternalObject(children)) { - children._ctx = currentRenderingInstance; - } else if (slotFlag === 3 && currentRenderingInstance) { - if (currentRenderingInstance.slots._ === 1) { - children._ = 1; - } else { - children._ = 2; - vnode.patchFlag |= 1024; - } - } - } - } else if (isFunction(children)) { - children = { default: children, _ctx: currentRenderingInstance }; - type = 32; - } else { - children = String(children); - if (shapeFlag & 64) { - type = 16; - children = [createTextVNode(children)]; - } else { - type = 8; - } - } - vnode.children = children; - vnode.shapeFlag |= type; -} -function mergeProps(...args) { - const ret = {}; - for (let i = 0; i < args.length; i++) { - const toMerge = args[i]; - for (const key in toMerge) { - if (key === "class") { - if (ret.class !== toMerge.class) { - ret.class = normalizeClass([ret.class, toMerge.class]); - } - } else if (key === "style") { - ret.style = normalizeStyle([ret.style, toMerge.style]); - } else if (isOn(key)) { - const existing = ret[key]; - const incoming = toMerge[key]; - if (incoming && existing !== incoming && !(isArray(existing) && existing.includes(incoming))) { - ret[key] = existing ? [].concat(existing, incoming) : incoming; - } - } else if (key !== "") { - ret[key] = toMerge[key]; - } - } - } - return ret; -} -function invokeVNodeHook(hook, instance, vnode, prevVNode = null) { - callWithAsyncErrorHandling(hook, instance, 7, [ - vnode, - prevVNode - ]); -} -const emptyAppContext = createAppContext(); -let uid = 0; -function createComponentInstance(vnode, parent, suspense) { - const type = vnode.type; - const appContext = (parent ? parent.appContext : vnode.appContext) || emptyAppContext; - const instance = { - uid: uid++, - vnode, - type, - parent, - appContext, - root: null, - // to be immediately set - next: null, - subTree: null, - // will be set synchronously right after creation - effect: null, - update: null, - // will be set synchronously right after creation - job: null, - scope: new EffectScope( - true - /* detached */ - ), - render: null, - proxy: null, - exposed: null, - exposeProxy: null, - withProxy: null, - provides: parent ? parent.provides : Object.create(appContext.provides), - ids: parent ? parent.ids : ["", 0, 0], - accessCache: null, - renderCache: [], - // local resolved assets - components: null, - directives: null, - // resolved props and emits options - propsOptions: normalizePropsOptions(type, appContext), - emitsOptions: normalizeEmitsOptions(type, appContext), - // emit - emit: null, - // to be set immediately - emitted: null, - // props default value - propsDefaults: EMPTY_OBJ, - // inheritAttrs - inheritAttrs: type.inheritAttrs, - // state - ctx: EMPTY_OBJ, - data: EMPTY_OBJ, - props: EMPTY_OBJ, - attrs: EMPTY_OBJ, - slots: EMPTY_OBJ, - refs: EMPTY_OBJ, - setupState: EMPTY_OBJ, - setupContext: null, - // suspense related - suspense, - suspenseId: suspense ? suspense.pendingId : 0, - asyncDep: null, - asyncResolved: false, - // lifecycle hooks - // not using enums here because it results in computed properties - isMounted: false, - isUnmounted: false, - isDeactivated: false, - bc: null, - c: null, - bm: null, - m: null, - bu: null, - u: null, - um: null, - bum: null, - da: null, - a: null, - rtg: null, - rtc: null, - ec: null, - sp: null - }; - { - instance.ctx = { _: instance }; - } - instance.root = parent ? parent.root : instance; - instance.emit = emit.bind(null, instance); - if (vnode.ce) { - vnode.ce(instance); - } - return instance; -} -let currentInstance = null; -const getCurrentInstance = () => currentInstance || currentRenderingInstance; -let internalSetCurrentInstance; -let setInSSRSetupState; -{ - const g = getGlobalThis(); - const registerGlobalSetter = (key, setter) => { - let setters; - if (!(setters = g[key])) setters = g[key] = []; - setters.push(setter); - return (v) => { - if (setters.length > 1) setters.forEach((set) => set(v)); - else setters[0](v); - }; - }; - internalSetCurrentInstance = registerGlobalSetter( - `__VUE_INSTANCE_SETTERS__`, - (v) => currentInstance = v - ); - setInSSRSetupState = registerGlobalSetter( - `__VUE_SSR_SETTERS__`, - (v) => isInSSRComponentSetup = v - ); -} -const setCurrentInstance = (instance) => { - const prev = currentInstance; - internalSetCurrentInstance(instance); - instance.scope.on(); - return () => { - instance.scope.off(); - internalSetCurrentInstance(prev); - }; -}; -const unsetCurrentInstance = () => { - currentInstance && currentInstance.scope.off(); - internalSetCurrentInstance(null); -}; -function isStatefulComponent(instance) { - return instance.vnode.shapeFlag & 4; -} -let isInSSRComponentSetup = false; -function setupComponent(instance, isSSR = false, optimized = false) { - isSSR && setInSSRSetupState(isSSR); - const { props, children } = instance.vnode; - const isStateful = isStatefulComponent(instance); - initProps(instance, props, isStateful, isSSR); - initSlots(instance, children, optimized || isSSR); - const setupResult = isStateful ? setupStatefulComponent(instance, isSSR) : void 0; - isSSR && setInSSRSetupState(false); - return setupResult; -} -function setupStatefulComponent(instance, isSSR) { - const Component = instance.type; - instance.accessCache = /* @__PURE__ */ Object.create(null); - instance.proxy = new Proxy(instance.ctx, PublicInstanceProxyHandlers); - const { setup } = Component; - if (setup) { - pauseTracking(); - const setupContext = instance.setupContext = setup.length > 1 ? createSetupContext(instance) : null; - const reset = setCurrentInstance(instance); - const setupResult = callWithErrorHandling( - setup, - instance, - 0, - [ - instance.props, - setupContext - ] - ); - const isAsyncSetup = isPromise(setupResult); - resetTracking(); - reset(); - if ((isAsyncSetup || instance.sp) && !isAsyncWrapper(instance)) { - markAsyncBoundary(instance); - } - if (isAsyncSetup) { - setupResult.then(unsetCurrentInstance, unsetCurrentInstance); - if (isSSR) { - return setupResult.then((resolvedResult) => { - handleSetupResult(instance, resolvedResult); - }).catch((e) => { - handleError(e, instance, 0); - }); - } else { - instance.asyncDep = setupResult; - } - } else { - handleSetupResult(instance, setupResult); - } - } else { - finishComponentSetup(instance); - } -} -function handleSetupResult(instance, setupResult, isSSR) { - if (isFunction(setupResult)) { - if (instance.type.__ssrInlineRender) { - instance.ssrRender = setupResult; - } else { - instance.render = setupResult; - } - } else if (isObject(setupResult)) { - instance.setupState = proxyRefs(setupResult); - } else ; - finishComponentSetup(instance); -} -function finishComponentSetup(instance, isSSR, skipOptions) { - const Component = instance.type; - if (!instance.render) { - instance.render = Component.render || NOOP; - } - { - const reset = setCurrentInstance(instance); - pauseTracking(); - try { - applyOptions(instance); - } finally { - resetTracking(); - reset(); - } - } -} -const attrsProxyHandlers = { - get(target, key) { - track(target, "get", ""); - return target[key]; - } -}; -function createSetupContext(instance) { - const expose = (exposed) => { - instance.exposed = exposed || {}; - }; - { - return { - attrs: new Proxy(instance.attrs, attrsProxyHandlers), - slots: instance.slots, - emit: instance.emit, - expose - }; - } -} -function getComponentPublicInstance(instance) { - if (instance.exposed) { - return instance.exposeProxy || (instance.exposeProxy = new Proxy(proxyRefs(markRaw(instance.exposed)), { - get(target, key) { - if (key in target) { - return target[key]; - } else if (key in publicPropertiesMap) { - return publicPropertiesMap[key](instance); - } - }, - has(target, key) { - return key in target || key in publicPropertiesMap; - } - })); - } else { - return instance.proxy; - } -} -const classifyRE = /(?:^|[-_])\w/g; -const classify = (str) => str.replace(classifyRE, (c) => c.toUpperCase()).replace(/[-_]/g, ""); -function getComponentName(Component, includeInferred = true) { - return isFunction(Component) ? Component.displayName || Component.name : Component.name || includeInferred && Component.__name; -} -function formatComponentName(instance, Component, isRoot = false) { - let name = getComponentName(Component); - if (!name && Component.__file) { - const match = Component.__file.match(/([^/\\]+)\.\w+$/); - if (match) { - name = match[1]; - } - } - if (!name && instance) { - const inferFromRegistry = (registry) => { - for (const key in registry) { - if (registry[key] === Component) { - return key; - } - } - }; - name = inferFromRegistry(instance.components) || instance.parent && inferFromRegistry( - instance.parent.type.components - ) || inferFromRegistry(instance.appContext.components); - } - return name ? classify(name) : isRoot ? `App` : `Anonymous`; -} -function isClassComponent(value) { - return isFunction(value) && "__vccOpts" in value; -} -const computed = (getterOrOptions, debugOptions) => { - const c = /* @__PURE__ */ computed$1(getterOrOptions, debugOptions, isInSSRComponentSetup); - return c; -}; -const version = "3.5.28"; -let policy = void 0; -const tt = typeof window !== "undefined" && window.trustedTypes; -if (tt) { - try { - policy = /* @__PURE__ */ tt.createPolicy("vue", { - createHTML: (val) => val - }); - } catch (e) { - } -} -const unsafeToTrustedHTML = policy ? (val) => policy.createHTML(val) : (val) => val; -const svgNS = "http://www.w3.org/2000/svg"; -const mathmlNS = "http://www.w3.org/1998/Math/MathML"; -const doc = typeof document !== "undefined" ? document : null; -const templateContainer = doc && /* @__PURE__ */ doc.createElement("template"); -const nodeOps = { - insert: (child, parent, anchor) => { - parent.insertBefore(child, anchor || null); - }, - remove: (child) => { - const parent = child.parentNode; - if (parent) { - parent.removeChild(child); - } - }, - createElement: (tag, namespace, is, props) => { - const el = namespace === "svg" ? doc.createElementNS(svgNS, tag) : namespace === "mathml" ? doc.createElementNS(mathmlNS, tag) : is ? doc.createElement(tag, { is }) : doc.createElement(tag); - if (tag === "select" && props && props.multiple != null) { - el.setAttribute("multiple", props.multiple); - } - return el; - }, - createText: (text) => doc.createTextNode(text), - createComment: (text) => doc.createComment(text), - setText: (node, text) => { - node.nodeValue = text; - }, - setElementText: (el, text) => { - el.textContent = text; - }, - parentNode: (node) => node.parentNode, - nextSibling: (node) => node.nextSibling, - querySelector: (selector) => doc.querySelector(selector), - setScopeId(el, id) { - el.setAttribute(id, ""); - }, - // __UNSAFE__ - // Reason: innerHTML. - // Static content here can only come from compiled templates. - // As long as the user only uses trusted templates, this is safe. - insertStaticContent(content, parent, anchor, namespace, start, end) { - const before = anchor ? anchor.previousSibling : parent.lastChild; - if (start && (start === end || start.nextSibling)) { - while (true) { - parent.insertBefore(start.cloneNode(true), anchor); - if (start === end || !(start = start.nextSibling)) break; - } - } else { - templateContainer.innerHTML = unsafeToTrustedHTML( - namespace === "svg" ? `${content}` : namespace === "mathml" ? `${content}` : content - ); - const template = templateContainer.content; - if (namespace === "svg" || namespace === "mathml") { - const wrapper = template.firstChild; - while (wrapper.firstChild) { - template.appendChild(wrapper.firstChild); - } - template.removeChild(wrapper); - } - parent.insertBefore(template, anchor); - } - return [ - // first - before ? before.nextSibling : parent.firstChild, - // last - anchor ? anchor.previousSibling : parent.lastChild - ]; - } -}; -const vtcKey = /* @__PURE__ */ Symbol("_vtc"); -function patchClass(el, value, isSVG) { - const transitionClasses = el[vtcKey]; - if (transitionClasses) { - value = (value ? [value, ...transitionClasses] : [...transitionClasses]).join(" "); - } - if (value == null) { - el.removeAttribute("class"); - } else if (isSVG) { - el.setAttribute("class", value); - } else { - el.className = value; - } -} -const vShowOriginalDisplay = /* @__PURE__ */ Symbol("_vod"); -const vShowHidden = /* @__PURE__ */ Symbol("_vsh"); -const CSS_VAR_TEXT = /* @__PURE__ */ Symbol(""); -const displayRE = /(?:^|;)\s*display\s*:/; -function patchStyle(el, prev, next) { - const style = el.style; - const isCssString = isString(next); - let hasControlledDisplay = false; - if (next && !isCssString) { - if (prev) { - if (!isString(prev)) { - for (const key in prev) { - if (next[key] == null) { - setStyle(style, key, ""); - } - } - } else { - for (const prevStyle of prev.split(";")) { - const key = prevStyle.slice(0, prevStyle.indexOf(":")).trim(); - if (next[key] == null) { - setStyle(style, key, ""); - } - } - } - } - for (const key in next) { - if (key === "display") { - hasControlledDisplay = true; - } - setStyle(style, key, next[key]); - } - } else { - if (isCssString) { - if (prev !== next) { - const cssVarText = style[CSS_VAR_TEXT]; - if (cssVarText) { - next += ";" + cssVarText; - } - style.cssText = next; - hasControlledDisplay = displayRE.test(next); - } - } else if (prev) { - el.removeAttribute("style"); - } - } - if (vShowOriginalDisplay in el) { - el[vShowOriginalDisplay] = hasControlledDisplay ? style.display : ""; - if (el[vShowHidden]) { - style.display = "none"; - } - } -} -const importantRE = /\s*!important$/; -function setStyle(style, name, val) { - if (isArray(val)) { - val.forEach((v) => setStyle(style, name, v)); - } else { - if (val == null) val = ""; - if (name.startsWith("--")) { - style.setProperty(name, val); - } else { - const prefixed = autoPrefix(style, name); - if (importantRE.test(val)) { - style.setProperty( - hyphenate(prefixed), - val.replace(importantRE, ""), - "important" - ); - } else { - style[prefixed] = val; - } - } - } -} -const prefixes = ["Webkit", "Moz", "ms"]; -const prefixCache = {}; -function autoPrefix(style, rawName) { - const cached = prefixCache[rawName]; - if (cached) { - return cached; - } - let name = camelize(rawName); - if (name !== "filter" && name in style) { - return prefixCache[rawName] = name; - } - name = capitalize(name); - for (let i = 0; i < prefixes.length; i++) { - const prefixed = prefixes[i] + name; - if (prefixed in style) { - return prefixCache[rawName] = prefixed; - } - } - return rawName; -} -const xlinkNS = "http://www.w3.org/1999/xlink"; -function patchAttr(el, key, value, isSVG, instance, isBoolean = isSpecialBooleanAttr(key)) { - if (isSVG && key.startsWith("xlink:")) { - if (value == null) { - el.removeAttributeNS(xlinkNS, key.slice(6, key.length)); - } else { - el.setAttributeNS(xlinkNS, key, value); - } - } else { - if (value == null || isBoolean && !includeBooleanAttr(value)) { - el.removeAttribute(key); - } else { - el.setAttribute( - key, - isBoolean ? "" : isSymbol(value) ? String(value) : value - ); - } - } -} -function patchDOMProp(el, key, value, parentComponent, attrName) { - if (key === "innerHTML" || key === "textContent") { - if (value != null) { - el[key] = key === "innerHTML" ? unsafeToTrustedHTML(value) : value; - } - return; - } - const tag = el.tagName; - if (key === "value" && tag !== "PROGRESS" && // custom elements may use _value internally - !tag.includes("-")) { - const oldValue = tag === "OPTION" ? el.getAttribute("value") || "" : el.value; - const newValue = value == null ? ( - // #11647: value should be set as empty string for null and undefined, - // but should be set as 'on'. - el.type === "checkbox" ? "on" : "" - ) : String(value); - if (oldValue !== newValue || !("_value" in el)) { - el.value = newValue; - } - if (value == null) { - el.removeAttribute(key); - } - el._value = value; - return; - } - let needRemove = false; - if (value === "" || value == null) { - const type = typeof el[key]; - if (type === "boolean") { - value = includeBooleanAttr(value); - } else if (value == null && type === "string") { - value = ""; - needRemove = true; - } else if (type === "number") { - value = 0; - needRemove = true; - } - } - try { - el[key] = value; - } catch (e) { - } - needRemove && el.removeAttribute(attrName || key); -} -function addEventListener(el, event, handler, options) { - el.addEventListener(event, handler, options); -} -function removeEventListener(el, event, handler, options) { - el.removeEventListener(event, handler, options); -} -const veiKey = /* @__PURE__ */ Symbol("_vei"); -function patchEvent(el, rawName, prevValue, nextValue, instance = null) { - const invokers = el[veiKey] || (el[veiKey] = {}); - const existingInvoker = invokers[rawName]; - if (nextValue && existingInvoker) { - existingInvoker.value = nextValue; - } else { - const [name, options] = parseName(rawName); - if (nextValue) { - const invoker = invokers[rawName] = createInvoker( - nextValue, - instance - ); - addEventListener(el, name, invoker, options); - } else if (existingInvoker) { - removeEventListener(el, name, existingInvoker, options); - invokers[rawName] = void 0; - } - } -} -const optionsModifierRE = /(?:Once|Passive|Capture)$/; -function parseName(name) { - let options; - if (optionsModifierRE.test(name)) { - options = {}; - let m; - while (m = name.match(optionsModifierRE)) { - name = name.slice(0, name.length - m[0].length); - options[m[0].toLowerCase()] = true; - } - } - const event = name[2] === ":" ? name.slice(3) : hyphenate(name.slice(2)); - return [event, options]; -} -let cachedNow = 0; -const p = /* @__PURE__ */ Promise.resolve(); -const getNow = () => cachedNow || (p.then(() => cachedNow = 0), cachedNow = Date.now()); -function createInvoker(initialValue, instance) { - const invoker = (e) => { - if (!e._vts) { - e._vts = Date.now(); - } else if (e._vts <= invoker.attached) { - return; - } - callWithAsyncErrorHandling( - patchStopImmediatePropagation(e, invoker.value), - instance, - 5, - [e] - ); - }; - invoker.value = initialValue; - invoker.attached = getNow(); - return invoker; -} -function patchStopImmediatePropagation(e, value) { - if (isArray(value)) { - const originalStop = e.stopImmediatePropagation; - e.stopImmediatePropagation = () => { - originalStop.call(e); - e._stopped = true; - }; - return value.map( - (fn) => (e2) => !e2._stopped && fn && fn(e2) - ); - } else { - return value; - } -} -const isNativeOn = (key) => key.charCodeAt(0) === 111 && key.charCodeAt(1) === 110 && // lowercase letter -key.charCodeAt(2) > 96 && key.charCodeAt(2) < 123; -const patchProp = (el, key, prevValue, nextValue, namespace, parentComponent) => { - const isSVG = namespace === "svg"; - if (key === "class") { - patchClass(el, nextValue, isSVG); - } else if (key === "style") { - patchStyle(el, prevValue, nextValue); - } else if (isOn(key)) { - if (!isModelListener(key)) { - patchEvent(el, key, prevValue, nextValue, parentComponent); - } - } else if (key[0] === "." ? (key = key.slice(1), true) : key[0] === "^" ? (key = key.slice(1), false) : shouldSetAsProp(el, key, nextValue, isSVG)) { - patchDOMProp(el, key, nextValue); - if (!el.tagName.includes("-") && (key === "value" || key === "checked" || key === "selected")) { - patchAttr(el, key, nextValue, isSVG, parentComponent, key !== "value"); - } - } else if ( - // #11081 force set props for possible async custom element - el._isVueCE && (/[A-Z]/.test(key) || !isString(nextValue)) - ) { - patchDOMProp(el, camelize(key), nextValue, parentComponent, key); - } else { - if (key === "true-value") { - el._trueValue = nextValue; - } else if (key === "false-value") { - el._falseValue = nextValue; - } - patchAttr(el, key, nextValue, isSVG); - } -}; -function shouldSetAsProp(el, key, value, isSVG) { - if (isSVG) { - if (key === "innerHTML" || key === "textContent") { - return true; - } - if (key in el && isNativeOn(key) && isFunction(value)) { - return true; - } - return false; - } - if (key === "spellcheck" || key === "draggable" || key === "translate" || key === "autocorrect") { - return false; - } - if (key === "sandbox" && el.tagName === "IFRAME") { - return false; - } - if (key === "form") { - return false; - } - if (key === "list" && el.tagName === "INPUT") { - return false; - } - if (key === "type" && el.tagName === "TEXTAREA") { - return false; - } - if (key === "width" || key === "height") { - const tag = el.tagName; - if (tag === "IMG" || tag === "VIDEO" || tag === "CANVAS" || tag === "SOURCE") { - return false; - } - } - if (isNativeOn(key) && isString(value)) { - return false; - } - return key in el; -} -const getModelAssigner = (vnode) => { - const fn = vnode.props["onUpdate:modelValue"] || false; - return isArray(fn) ? (value) => invokeArrayFns(fn, value) : fn; -}; -function onCompositionStart(e) { - e.target.composing = true; -} -function onCompositionEnd(e) { - const target = e.target; - if (target.composing) { - target.composing = false; - target.dispatchEvent(new Event("input")); - } -} -const assignKey = /* @__PURE__ */ Symbol("_assign"); -function castValue(value, trim, number) { - if (trim) value = value.trim(); - if (number) value = looseToNumber(value); - return value; -} -const vModelText = { - created(el, { modifiers: { lazy, trim, number } }, vnode) { - el[assignKey] = getModelAssigner(vnode); - const castToNumber = number || vnode.props && vnode.props.type === "number"; - addEventListener(el, lazy ? "change" : "input", (e) => { - if (e.target.composing) return; - el[assignKey](castValue(el.value, trim, castToNumber)); - }); - if (trim || castToNumber) { - addEventListener(el, "change", () => { - el.value = castValue(el.value, trim, castToNumber); - }); - } - if (!lazy) { - addEventListener(el, "compositionstart", onCompositionStart); - addEventListener(el, "compositionend", onCompositionEnd); - addEventListener(el, "change", onCompositionEnd); - } - }, - // set value on mounted so it's after min/max for type="range" - mounted(el, { value }) { - el.value = value == null ? "" : value; - }, - beforeUpdate(el, { value, oldValue, modifiers: { lazy, trim, number } }, vnode) { - el[assignKey] = getModelAssigner(vnode); - if (el.composing) return; - const elValue = (number || el.type === "number") && !/^0\d/.test(el.value) ? looseToNumber(el.value) : el.value; - const newValue = value == null ? "" : value; - if (elValue === newValue) { - return; - } - if (document.activeElement === el && el.type !== "range") { - if (lazy && value === oldValue) { - return; - } - if (trim && el.value.trim() === newValue) { - return; - } - } - el.value = newValue; - } -}; -const systemModifiers = ["ctrl", "shift", "alt", "meta"]; -const modifierGuards = { - stop: (e) => e.stopPropagation(), - prevent: (e) => e.preventDefault(), - self: (e) => e.target !== e.currentTarget, - ctrl: (e) => !e.ctrlKey, - shift: (e) => !e.shiftKey, - alt: (e) => !e.altKey, - meta: (e) => !e.metaKey, - left: (e) => "button" in e && e.button !== 0, - middle: (e) => "button" in e && e.button !== 1, - right: (e) => "button" in e && e.button !== 2, - exact: (e, modifiers) => systemModifiers.some((m) => e[`${m}Key`] && !modifiers.includes(m)) -}; -const withModifiers = (fn, modifiers) => { - if (!fn) return fn; - const cache = fn._withMods || (fn._withMods = {}); - const cacheKey = modifiers.join("."); - return cache[cacheKey] || (cache[cacheKey] = ((event, ...args) => { - for (let i = 0; i < modifiers.length; i++) { - const guard = modifierGuards[modifiers[i]]; - if (guard && guard(event, modifiers)) return; - } - return fn(event, ...args); - })); -}; -const keyNames = { - esc: "escape", - space: " ", - up: "arrow-up", - left: "arrow-left", - right: "arrow-right", - down: "arrow-down", - delete: "backspace" -}; -const withKeys = (fn, modifiers) => { - const cache = fn._withKeys || (fn._withKeys = {}); - const cacheKey = modifiers.join("."); - return cache[cacheKey] || (cache[cacheKey] = ((event) => { - if (!("key" in event)) { - return; - } - const eventKey = hyphenate(event.key); - if (modifiers.some( - (k) => k === eventKey || keyNames[k] === eventKey - )) { - return fn(event); - } - })); -}; -const rendererOptions = /* @__PURE__ */ extend({ patchProp }, nodeOps); -let renderer; -function ensureRenderer() { - return renderer || (renderer = createRenderer(rendererOptions)); -} -const createApp = ((...args) => { - const app = ensureRenderer().createApp(...args); - const { mount } = app; - app.mount = (containerOrSelector) => { - const container = normalizeContainer(containerOrSelector); - if (!container) return; - const component = app._component; - if (!isFunction(component) && !component.render && !component.template) { - component.template = container.innerHTML; - } - if (container.nodeType === 1) { - container.textContent = ""; - } - const proxy = mount(container, false, resolveRootNamespace(container)); - if (container instanceof Element) { - container.removeAttribute("v-cloak"); - container.setAttribute("data-v-app", ""); - } - return proxy; - }; - return app; -}); -function resolveRootNamespace(container) { - if (container instanceof SVGElement) { - return "svg"; - } - if (typeof MathMLElement === "function" && container instanceof MathMLElement) { - return "mathml"; - } -} -function normalizeContainer(container) { - if (isString(container)) { - const res = document.querySelector(container); - return res; - } - return container; -} -const _hoisted_1 = { class: "screen" }; -const _hoisted_2 = { class: "clock" }; -const _hoisted_3 = ["data-active"]; -const _hoisted_4 = { class: "page page--home" }; -const _hoisted_5 = { class: "home" }; -const _hoisted_6 = { class: "desktopGridShell" }; -const _hoisted_7 = { class: "desktopGrid" }; -const _hoisted_8 = { class: "writingPanelButtons" }; -const _hoisted_9 = ["onPointerup"]; -const _hoisted_10 = { - class: "writingActionIcon", - xmlns: "http://www.w3.org/2000/svg", - width: "18", - height: "18", - viewBox: "0 0 20 20", - "aria-hidden": "true", - focusable: "false" -}; -const _hoisted_11 = ["d"]; -const _hoisted_12 = { class: "writingActionText" }; -const _hoisted_13 = { - key: 1, - class: "deskTileRow" -}; -const _hoisted_14 = { - class: "deskTileIcon", - xmlns: "http://www.w3.org/2000/svg", - width: "28", - height: "28", - viewBox: "0 0 20 20", - "aria-hidden": "true", - focusable: "false" -}; -const _hoisted_15 = ["d"]; -const _hoisted_16 = { class: "deskTileText" }; -const _hoisted_17 = { class: "notesPanel" }; -const _hoisted_18 = { class: "notesHeader" }; -const _hoisted_19 = { class: "notesGrid" }; -const _hoisted_20 = ["onUpdate:modelValue"]; -const _hoisted_21 = { class: "page page--apps" }; -const _hoisted_22 = { class: "appsPage" }; -const _hoisted_23 = { class: "appsTilesArea" }; -const _hoisted_24 = { - key: 0, - class: "appsLoading" -}; -const _hoisted_25 = { - key: 1, - class: "error" -}; -const _hoisted_26 = { class: "errorHeader" }; -const _hoisted_27 = { class: "errorBody" }; -const _hoisted_28 = { class: "groupHeader" }; -const _hoisted_29 = ["onPointerdown", "onKeydown"]; -const _hoisted_30 = ["src"]; -const _hoisted_31 = { class: "name" }; -const _hoisted_32 = { class: "appsBottomBar" }; -const _hoisted_33 = { - key: 0, - class: "settingsPage" -}; -const _hoisted_34 = { class: "settingsContentArea" }; -const _hoisted_35 = { class: "settingsSidebar" }; -const _hoisted_36 = ["data-active"]; -const _hoisted_37 = { class: "settingsDetail" }; -const _hoisted_38 = { class: "settingsDetailHeader" }; -const _hoisted_39 = { class: "settingsDetailHeaderActions" }; -const _hoisted_40 = { class: "settingsDetailBody" }; -const _hoisted_41 = { - key: 0, - class: "settingsSection" -}; -const _hoisted_42 = { class: "settingsPreviewList" }; -const _hoisted_43 = { class: "settingsPreviewMain" }; -const _hoisted_44 = { class: "settingsPreviewTitle" }; -const _hoisted_45 = { class: "settingsPreviewMeta" }; -const _hoisted_46 = { class: "settingsPreviewBehavior" }; -const _hoisted_47 = { class: "settingsPreviewBehaviorLabel" }; -const _hoisted_48 = { class: "settingsPreviewBehaviorValue" }; -const _hoisted_49 = { class: "settingsPreviewBehaviorValue" }; -const _hoisted_50 = { class: "settingsSection" }; -const _hoisted_51 = { class: "homeEditGrid" }; -const _hoisted_52 = ["data-active", "data-selected", "onPointerup"]; -const _hoisted_53 = { - class: "homeWidgetCardIcon", - xmlns: "http://www.w3.org/2000/svg", - width: "22", - height: "22", - viewBox: "0 0 20 20", - "aria-hidden": "true", - focusable: "false" -}; -const _hoisted_54 = ["d"]; -const _hoisted_55 = { class: "homeWidgetCardTitle" }; -const _hoisted_56 = { class: "homeWidgetCardMeta" }; -const _hoisted_57 = { class: "settingsSection" }; -const _hoisted_58 = { class: "homeEditOrderList" }; -const _hoisted_59 = { class: "homeEditOrderTitle" }; -const _hoisted_60 = { class: "homeEditOrderActions" }; -const _hoisted_61 = ["onPointerup"]; -const _hoisted_62 = ["onPointerup"]; -const _hoisted_63 = ["onPointerup"]; -const _hoisted_64 = { class: "settingsSection" }; -const _hoisted_65 = { class: "settingsSectionTitle" }; -const _hoisted_66 = { class: "settingsConfigArea" }; -const _hoisted_67 = { class: "settingsSubActionTitle" }; -const _hoisted_68 = ["value", "onChange"]; -const _hoisted_69 = ["value", "onInput"]; -const _hoisted_70 = ["onPointerup"]; -const _hoisted_71 = { class: "settingsSingleActionRow" }; -const _hoisted_72 = ["value"]; -const _hoisted_73 = ["value"]; -const _hoisted_74 = { class: "settingsActionHint" }; -const _hoisted_75 = { class: "settingsBottomBar" }; -const _sfc_main = /* @__PURE__ */ defineComponent({ - __name: "App", - setup(__props) { - const now = /* @__PURE__ */ ref(/* @__PURE__ */ new Date()); - const mainPage = /* @__PURE__ */ ref("home"); - const isSettingsOpen = /* @__PURE__ */ ref(false); - const apps = /* @__PURE__ */ ref([]); - const query = /* @__PURE__ */ ref(""); - const loadError = /* @__PURE__ */ ref(null); - const isLoadingApps = /* @__PURE__ */ ref(false); - const isAppsScrolling = /* @__PURE__ */ ref(false); - const notes = /* @__PURE__ */ ref([]); - const iconPath = (icon) => { - switch (icon) { - case "pen": - return "M14.1 2.65a2.25 2.25 0 0 1 3.182 3.182l-8.6 8.6a2.25 2.25 0 0 1-1.04.576l-3.1.775a.75.75 0 0 1-.91-.91l.775-3.1a2.25 2.25 0 0 1 .576-1.04zm2.121 1.06a.75.75 0 0 0-1.06 0L6.7 12.174a.75.75 0 0 0-.192.346l-.44 1.76 1.76-.44a.75.75 0 0 0 .346-.192l8.462-8.462a.75.75 0 0 0 0-1.06z"; - case "folder": - return "M3.5 4.5A2.5 2.5 0 0 1 6 2h2.25c.43 0 .84.184 1.126.505L10.2 3.5H14A2.5 2.5 0 0 1 16.5 6v7.5A2.5 2.5 0 0 1 14 16H6A2.5 2.5 0 0 1 3.5 13.5zM6 3.5A1 1 0 0 0 5 4.5V5h10v-1a1 1 0 0 0-1-1h-4.1a.75.75 0 0 1-.562-.253L8.086 3.5zm9 3H5v7a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1z"; - case "camera": - return "M7 4.5h6l.6 1.2c.127.254.387.414.67.414H15A2.5 2.5 0 0 1 17.5 8.6v6.9A2.5 2.5 0 0 1 15 18H5A2.5 2.5 0 0 1 2.5 15.5V8.6A2.5 2.5 0 0 1 5 6.114h.73c.283 0 .543-.16.67-.414zM10 15.5a3 3 0 1 0 0-6 3 3 0 0 0 0 6z"; - case "globe": - return "M10 2a8 8 0 1 1 0 16 8 8 0 0 1 0-16m5.93 7H13.6a12 12 0 0 0-1.03-4.09A6.5 6.5 0 0 1 15.93 9M10 3.5c-.9 0-1.98 1.6-2.45 5.5h4.9c-.47-3.9-1.55-5.5-2.45-5.5m-2.57 1.41A12 12 0 0 0 6.4 9H4.07a6.5 6.5 0 0 1 3.36-4.09M4.07 11H6.4c.17 1.5.56 2.92 1.03 4.09A6.5 6.5 0 0 1 4.07 11m3.48 0c.47 3.9 1.55 5.5 2.45 5.5s1.98-1.6 2.45-5.5zm5.02 4.09c.47-1.17.86-2.59 1.03-4.09h2.33a6.5 6.5 0 0 1-3.36 4.09"; - case "apps": - return "M4.5 3A1.5 1.5 0 0 0 3 4.5v2A1.5 1.5 0 0 0 4.5 8h2A1.5 1.5 0 0 0 8 6.5v-2A1.5 1.5 0 0 0 6.5 3zm9 0A1.5 1.5 0 0 0 12 4.5v2A1.5 1.5 0 0 0 13.5 8h2A1.5 1.5 0 0 0 17 6.5v-2A1.5 1.5 0 0 0 15.5 3zM3 13.5A1.5 1.5 0 0 1 4.5 12h2A1.5 1.5 0 0 1 8 13.5v2A1.5 1.5 0 0 1 6.5 17h-2A1.5 1.5 0 0 1 3 15.5zm10.5-1.5A1.5 1.5 0 0 0 12 13.5v2a1.5 1.5 0 0 0 1.5 1.5h2a1.5 1.5 0 0 0 1.5-1.5v-2a1.5 1.5 0 0 0-1.5-1.5z"; - case "note": - return "M6 2.5A2.5 2.5 0 0 0 3.5 5v10A2.5 2.5 0 0 0 6 17.5h5.5a.75.75 0 0 0 .53-.22l3.25-3.25a.75.75 0 0 0 .22-.53V5A2.5 2.5 0 0 0 13 2.5zm6.5 12.94V14a.5.5 0 0 1 .5-.5h1.44z"; - case "doc": - return "M6 2.5A2.5 2.5 0 0 0 3.5 5v10A2.5 2.5 0 0 0 6 17.5h8A2.5 2.5 0 0 0 16.5 15V7.75a.75.75 0 0 0-.22-.53l-3.5-3.5a.75.75 0 0 0-.53-.22zM12.5 4.56 14.44 6.5H13a.5.5 0 0 1-.5-.5z"; - case "comment": - return "M5.5 3.5A2.5 2.5 0 0 0 3 6v6a2.5 2.5 0 0 0 2.5 2.5H7.3l2.2 1.76a.75.75 0 0 0 .94 0l2.2-1.76H14.5A2.5 2.5 0 0 0 17 12V6a2.5 2.5 0 0 0-2.5-2.5z"; - } - }; - const writingActions = [ - { id: "writing.whiteboard", label: "白板书写", icon: "pen" }, - { id: "writing.annotate", label: "智能批注", icon: "comment" }, - { id: "writing.historyNotes", label: "历史笔记", icon: "note" }, - { id: "writing.classNotes", label: "课堂笔记", icon: "note" }, - { id: "writing.historyDocs", label: "历史文档", icon: "doc" } - ]; - const actionConfigs = /* @__PURE__ */ ref({}); - let actionSaveTimerId; - const settingsTab = /* @__PURE__ */ ref("homeEdit"); - const isHomeEditMode = /* @__PURE__ */ ref(false); - const homeEditSelectedId = /* @__PURE__ */ ref("whiteboard"); - let pageSwipePointerId = null; - let pageSwipeStartX = 0; - let pageSwipeStartY = 0; - let pageSwipeStartTime = 0; - let pageSwipeStartMainPage = "home"; - let suppressTapUntil = 0; - const availableWidgets = [ - { id: "writingPanel", title: "书写", size: "2x4", icon: "pen", clickable: false, variant: "soft" }, - { - id: "whiteboard", - title: "白板书写", - size: "2x2", - icon: "pen", - clickable: true, - onActivate: () => void activateAction("whiteboard"), - variant: "soft" - }, - { - id: "fileManager", - title: "文件管理", - size: "2x2", - icon: "folder", - clickable: true, - onActivate: () => void activateAction("fileManager") - }, - { - id: "visualPresenter", - title: "视频展台", - size: "2x2", - icon: "camera", - clickable: true, - onActivate: () => void activateAction("visualPresenter") - }, - { - id: "browser", - title: "浏览器", - size: "2x2", - icon: "globe", - clickable: true, - onActivate: () => void activateAction("browser") - }, - { - id: "moreApps", - title: "更多应用", - size: "2x2", - icon: "apps", - clickable: true, - onActivate: () => void activateAction("moreApps", () => void openApps()), - variant: "accent" - } - ]; - const widgetsOrder = /* @__PURE__ */ ref(["writingPanel", "whiteboard", "fileManager", "visualPresenter", "browser", "moreApps"]); - const widgetsEnabled = /* @__PURE__ */ ref({ - writingPanel: true, - whiteboard: true, - fileManager: true, - visualPresenter: true, - browser: true, - moreApps: true - }); - let widgetsSaveTimerId; - const widgetsInOrder = computed(() => { - const map = new Map(availableWidgets.map((w) => [w.id, w])); - const seen = /* @__PURE__ */ new Set(); - const ordered = []; - for (const id of widgetsOrder.value) { - const w = map.get(id); - if (!w) continue; - if (seen.has(id)) continue; - seen.add(id); - ordered.push(w); - } - for (const w of availableWidgets) { - if (seen.has(w.id)) continue; - ordered.push(w); - } - return ordered; - }); - const enabledWidgets = computed(() => { - return widgetsInOrder.value.filter((w) => widgetsEnabled.value[w.id] !== false); - }); - const placedDesktopTiles = computed(() => { - const cols = 4; - const rows = 4; - const occupied = Array.from({ length: rows }, () => Array.from({ length: cols }, () => false)); - const tryPlace = (tile) => { - const rowSpan = tile.size === "2x4" ? 4 : 2; - const colSpan = tile.size === "4x2" ? 4 : 2; - for (let r = 1; r <= rows - rowSpan + 1; r += 1) { - for (let c = 1; c <= cols - colSpan + 1; c += 1) { - let ok = true; - for (let rr = r; rr < r + rowSpan; rr += 1) { - for (let cc = c; cc < c + colSpan; cc += 1) { - if (occupied[rr - 1]?.[cc - 1]) { - ok = false; - break; - } - } - if (!ok) break; - } - if (!ok) continue; - for (let rr = r; rr < r + rowSpan; rr += 1) { - for (let cc = c; cc < c + colSpan; cc += 1) { - occupied[rr - 1][cc - 1] = true; - } - } - return { ...tile, row: r, col: c, rowSpan, colSpan }; - } - } - return null; - }; - const out = []; - for (const tile of enabledWidgets.value) { - const placed = tryPlace(tile); - if (placed) out.push(placed); - } - return out; - }); - const placedWidgetIds = computed(() => new Set(placedDesktopTiles.value.map((t) => t.id))); - const settingsWidgets = computed(() => { - return widgetsInOrder.value.map((w) => { - const sizeLabel = w.size === "2x4" ? "2×4" : w.size === "4x2" ? "4×2" : "2×2"; - const enabled = widgetsEnabled.value[w.id] !== false; - const visible = placedWidgetIds.value.has(w.id); - return { id: w.id, title: w.title, sizeLabel, enabled, visible }; - }); - }); - const widgetTitle = (id) => { - if (id === "writingPanel") return "书写"; - const found = availableWidgets.find((w) => w.id === id); - if (found) return found.title; - const foundAction = writingActions.find((a) => a.id === id); - if (foundAction) return foundAction.label; - return id; - }; - const actionSummary = (id) => { - const config = actionConfigs.value[id]; - const target = config?.target?.trim() ?? ""; - if (!config || !target) { - if (id === "moreApps") return "默认:打开应用列表"; - return "未配置"; - } - return config.kind === "app" ? `打开应用:${target}` : `打开URL:${target}`; - }; - const enabledWidgetOrder = computed(() => { - return widgetsOrder.value.filter((id) => widgetsEnabled.value[id] !== false); - }); - const moveEnabledWidget = (id, delta) => { - const enabled = enabledWidgetOrder.value; - const index = enabled.indexOf(id); - if (index < 0) return; - const nextIndex = index + delta; - if (nextIndex < 0 || nextIndex >= enabled.length) return; - const otherId = enabled[nextIndex]; - const full = [...widgetsOrder.value]; - const a = full.indexOf(id); - const b = full.indexOf(otherId); - if (a < 0 || b < 0) return; - full[a] = otherId; - full[b] = id; - widgetsOrder.value = full; - }; - const selectSettingsTab = (tab) => { - settingsTab.value = tab; - isHomeEditMode.value = false; - }; - const enterHomeEdit = () => { - settingsTab.value = "homeEdit"; - isHomeEditMode.value = true; - if (!homeEditSelectedId.value) { - homeEditSelectedId.value = "whiteboard"; - } - }; - const exitHomeEdit = () => { - isHomeEditMode.value = false; - }; - const selectHomeWidget = (id) => { - homeEditSelectedId.value = id; - }; - const toggleHomeWidget = (id) => { - homeEditSelectedId.value = id; - toggleWidgetEnabled(id); - }; - let timerId; - let appsScrollTimerId; - let launchTimerId; - let notesSaveTimerId; - const activeAppPointer = /* @__PURE__ */ ref(null); - onMounted(() => { - timerId = window.setInterval(() => { - now.value = /* @__PURE__ */ new Date(); - }, 1e3); - try { - const savedV2 = window.localStorage.getItem("lanmountain.notes.v2"); - if (typeof savedV2 === "string" && savedV2) { - const parsed = JSON.parse(savedV2); - const rawNotes = Array.isArray(parsed.notes) ? parsed.notes : []; - const loaded = rawNotes.map((n) => { - const id = typeof n.id === "string" ? n.id : ""; - const text = typeof n.text === "string" ? n.text : ""; - if (!id) return null; - return { id, text }; - }).filter(Boolean); - notes.value = loaded; - } else { - const savedV1 = window.localStorage.getItem("lanmountain.notes.v1"); - if (typeof savedV1 === "string" && savedV1.trim()) { - notes.value = [{ id: `${Date.now()}-${Math.random().toString(16).slice(2)}`, text: savedV1 }]; - window.localStorage.removeItem("lanmountain.notes.v1"); - } else { - notes.value = []; - } - } - } catch { - } - try { - const raw = window.localStorage.getItem("lanmountain.desktop.widgets.v1"); - if (typeof raw !== "string" || !raw) return; - const parsed = JSON.parse(raw); - const order = Array.isArray(parsed.order) ? parsed.order.filter((x) => typeof x === "string") : null; - const enabled = parsed.enabled && typeof parsed.enabled === "object" && !Array.isArray(parsed.enabled) ? parsed.enabled : null; - if (order) widgetsOrder.value = order; - if (enabled) { - const next = { ...widgetsEnabled.value }; - for (const [k, v] of Object.entries(enabled)) { - if (typeof v === "boolean") next[k] = v; - } - widgetsEnabled.value = next; - } - } catch { - } - try { - const raw = window.localStorage.getItem("lanmountain.desktop.actions.v1"); - if (typeof raw === "string" && raw) { - const parsed = JSON.parse(raw); - const actions = parsed.actions && typeof parsed.actions === "object" && !Array.isArray(parsed.actions) ? parsed.actions : null; - if (actions) { - const next = {}; - for (const [k, v] of Object.entries(actions)) { - if (!v || typeof v !== "object" || Array.isArray(v)) continue; - const kind = v.kind; - const target = v.target; - if ((kind === "app" || kind === "url") && typeof target === "string") { - next[k] = { kind, target }; - } - } - actionConfigs.value = next; - } - } - } catch { - } - }); - watch( - notes, - (next) => { - if (notesSaveTimerId) window.clearTimeout(notesSaveTimerId); - notesSaveTimerId = window.setTimeout(() => { - try { - window.localStorage.setItem("lanmountain.notes.v2", JSON.stringify({ notes: next })); - } catch { - } - }, 250); - }, - { deep: true } - ); - const addNote = () => { - const id = `${Date.now()}-${Math.random().toString(16).slice(2)}`; - notes.value = [{ id, text: "" }, ...notes.value]; - }; - watch( - [widgetsOrder, widgetsEnabled], - () => { - if (widgetsSaveTimerId) window.clearTimeout(widgetsSaveTimerId); - widgetsSaveTimerId = window.setTimeout(() => { - try { - window.localStorage.setItem( - "lanmountain.desktop.widgets.v1", - JSON.stringify({ order: widgetsOrder.value, enabled: widgetsEnabled.value }) - ); - } catch { - } - }, 250); - }, - { deep: true } - ); - watch( - actionConfigs, - (next) => { - if (actionSaveTimerId) window.clearTimeout(actionSaveTimerId); - actionSaveTimerId = window.setTimeout(() => { - try { - window.localStorage.setItem("lanmountain.desktop.actions.v1", JSON.stringify({ actions: next })); - } catch { - } - }, 250); - }, - { deep: true } - ); - const handleAppsListScroll = () => { - isAppsScrolling.value = true; - if (appsScrollTimerId) window.clearTimeout(appsScrollTimerId); - appsScrollTimerId = window.setTimeout(() => { - isAppsScrolling.value = false; - }, 140); - }; - const loadApps = async () => { - if (isLoadingApps.value) return; - isLoadingApps.value = true; - loadError.value = null; - try { - const result = await window.api.call({ - method: "GET", - path: "/apps/list" - }); - apps.value = result.apps ?? []; - loadError.value = result.error ?? null; - } catch (error) { - const message = error instanceof Error ? error.message : "UnknownError"; - apps.value = []; - loadError.value = message; - } finally { - isLoadingApps.value = false; - } - }; - const openApps = async () => { - mainPage.value = "apps"; - if (apps.value.length === 0 || loadError.value) { - await loadApps(); - } - }; - const closeApps = () => { - mainPage.value = "home"; - query.value = ""; - }; - const openExternal = async (url) => { - await window.api.call({ method: "POST", path: "/open/external", body: { url } }); - }; - const activateAction = async (actionId, fallback) => { - const config = actionConfigs.value[actionId]; - const target = config?.target?.trim() ?? ""; - if (!config || !target) { - fallback?.(); - return; - } - if (config.kind === "app") { - await launch(target); - return; - } - await openExternal(target); - }; - const openSettings = () => { - isSettingsOpen.value = true; - settingsTab.value = "homeEdit"; - isHomeEditMode.value = false; - }; - const closeSettings = () => { - isSettingsOpen.value = false; - isHomeEditMode.value = false; - }; - const handleTilePointerUp = async (tile) => { - if (Date.now() < suppressTapUntil) return; - await tile.onActivate?.(); - }; - const handleWritingActionPointerUp = async (actionId) => { - if (Date.now() < suppressTapUntil) return; - await activateAction(actionId); - }; - const handlePagePointerDown = (event) => { - if (isSettingsOpen.value) return; - if (pageSwipePointerId !== null) return; - const tag = event.target?.tagName?.toLowerCase() ?? ""; - if (tag === "input" || tag === "textarea" || tag === "select") return; - if (mainPage.value === "apps" && event.clientX > 36) { - return; - } - pageSwipePointerId = event.pointerId; - pageSwipeStartX = event.clientX; - pageSwipeStartY = event.clientY; - pageSwipeStartTime = Date.now(); - pageSwipeStartMainPage = mainPage.value; - }; - const handlePagePointerMove = (event) => { - if (pageSwipePointerId === null) return; - if (event.pointerId !== pageSwipePointerId) return; - const dx = event.clientX - pageSwipeStartX; - const dy = event.clientY - pageSwipeStartY; - if (Math.abs(dx) < 12 && Math.abs(dy) < 12) return; - if (Math.abs(dx) > Math.abs(dy) + 24 && Math.abs(dx) > 60) { - suppressTapUntil = Date.now() + 350; - } - }; - const handlePagePointerUp = (event) => { - if (pageSwipePointerId === null) return; - if (event.pointerId !== pageSwipePointerId) return; - const dt = Date.now() - pageSwipeStartTime; - const dx = event.clientX - pageSwipeStartX; - const dy = event.clientY - pageSwipeStartY; - pageSwipePointerId = null; - if (dt > 900) return; - if (Math.abs(dx) < 90) return; - if (Math.abs(dx) <= Math.abs(dy) + 28) return; - suppressTapUntil = Date.now() + 450; - if (pageSwipeStartMainPage === "home" && dx < -90) { - void openApps(); - return; - } - if (pageSwipeStartMainPage === "apps" && dx > 90 && pageSwipeStartX <= 36) { - closeApps(); - } - }; - const handlePagePointerCancel = (event) => { - if (pageSwipePointerId === null) return; - if (event.pointerId !== pageSwipePointerId) return; - pageSwipePointerId = null; - }; - const restoreDefaultWidgets = () => { - widgetsOrder.value = ["writingPanel", "whiteboard", "fileManager", "visualPresenter", "browser", "moreApps"]; - widgetsEnabled.value = { - writingPanel: true, - whiteboard: true, - fileManager: true, - visualPresenter: true, - browser: true, - moreApps: true - }; - }; - const toggleWidgetEnabled = (id) => { - const next = { ...widgetsEnabled.value }; - next[id] = !(next[id] !== false); - widgetsEnabled.value = next; - }; - const setActionKind = (id, kind) => { - const current = actionConfigs.value[id] ?? { kind, target: "" }; - actionConfigs.value = { ...actionConfigs.value, [id]: { ...current, kind } }; - }; - const setActionTarget = (id, target) => { - const current = actionConfigs.value[id] ?? { kind: "url", target: "" }; - actionConfigs.value = { ...actionConfigs.value, [id]: { ...current, target } }; - }; - const clearAction = (id) => { - const next = { ...actionConfigs.value }; - delete next[id]; - actionConfigs.value = next; - }; - onBeforeUnmount(() => { - if (timerId) window.clearInterval(timerId); - if (appsScrollTimerId) window.clearTimeout(appsScrollTimerId); - if (launchTimerId) window.clearTimeout(launchTimerId); - if (notesSaveTimerId) window.clearTimeout(notesSaveTimerId); - if (widgetsSaveTimerId) window.clearTimeout(widgetsSaveTimerId); - if (actionSaveTimerId) window.clearTimeout(actionSaveTimerId); - }); - const timeText = computed(() => { - return new Intl.DateTimeFormat("zh-CN", { - hour: "2-digit", - minute: "2-digit", - second: "2-digit" - }).format(now.value); - }); - const filteredApps = computed(() => { - const q = query.value.trim().toLowerCase(); - if (!q) return apps.value; - return apps.value.filter((a) => a.name.toLowerCase().includes(q)); - }); - const collator = Intl.Collator.supportedLocalesOf(["zh-Hans-CN-u-co-pinyin"]).length > 0 ? new Intl.Collator(["zh-Hans-CN-u-co-pinyin", "en"], { - numeric: true, - sensitivity: "base" - }) : new Intl.Collator(["zh-CN", "en"], { numeric: true, sensitivity: "base" }); - const pinyinInitialBoundaries = [ - { letter: "A", char: "阿" }, - { letter: "B", char: "八" }, - { letter: "C", char: "嚓" }, - { letter: "D", char: "搭" }, - { letter: "E", char: "蛾" }, - { letter: "F", char: "发" }, - { letter: "G", char: "噶" }, - { letter: "H", char: "哈" }, - { letter: "J", char: "击" }, - { letter: "K", char: "喀" }, - { letter: "L", char: "垃" }, - { letter: "M", char: "妈" }, - { letter: "N", char: "拿" }, - { letter: "O", char: "哦" }, - { letter: "P", char: "啪" }, - { letter: "Q", char: "期" }, - { letter: "R", char: "然" }, - { letter: "S", char: "撒" }, - { letter: "T", char: "塌" }, - { letter: "W", char: "挖" }, - { letter: "X", char: "昔" }, - { letter: "Y", char: "压" }, - { letter: "Z", char: "匝" } - ]; - const groupKeyForName = (name) => { - const first = name.trim().charAt(0); - if (!first) return "#"; - const upper = first.toUpperCase(); - if (upper >= "A" && upper <= "Z") return upper; - if (upper >= "0" && upper <= "9") return "#"; - if (/[\u3400-\u9fff]/.test(first)) { - for (let i = 0; i < pinyinInitialBoundaries.length; i += 1) { - const current = pinyinInitialBoundaries[i]; - const next = pinyinInitialBoundaries[i + 1]; - if (!next) return current.letter; - if (collator.compare(first, next.char) < 0) return current.letter; - } - } - return "#"; - }; - const groupedApps = computed(() => { - const sorted = [...filteredApps.value].sort((a, b) => collator.compare(a.name, b.name)); - const groups = []; - for (const app of sorted) { - const key = groupKeyForName(app.name); - const last = groups[groups.length - 1]; - if (!last || last.key !== key) { - groups.push({ key, label: key, items: [app] }); - } else { - last.items.push(app); - } - } - const alpha = groups.filter((g) => g.key !== "#"); - const other = groups.filter((g) => g.key === "#"); - return [...alpha, ...other]; - }); - const launch = async (filePath) => { - await window.api.call({ method: "POST", path: "/apps/launch", body: { filePath } }); - }; - const handleAppPointerDown = (event, filePath) => { - if (launchTimerId) window.clearTimeout(launchTimerId); - launchTimerId = void 0; - const element = event.currentTarget instanceof HTMLElement ? event.currentTarget : null; - activeAppPointer.value = { - pointerId: event.pointerId, - startX: event.clientX, - startY: event.clientY, - startedAt: performance.now(), - moved: false, - filePath, - element - }; - try { - element?.setPointerCapture(event.pointerId); - } catch { - } - }; - const handleAppPointerMove = (event) => { - const state = activeAppPointer.value; - if (!state || state.pointerId !== event.pointerId) return; - if (state.moved) return; - const dx = Math.abs(event.clientX - state.startX); - const dy = Math.abs(event.clientY - state.startY); - if (dx >= 12 || dy >= 12) state.moved = true; - }; - const handleAppPointerCancel = (event) => { - const state = activeAppPointer.value; - if (!state || state.pointerId !== event.pointerId) return; - activeAppPointer.value = null; - }; - const handleAppPointerUp = (event) => { - const state = activeAppPointer.value; - if (!state || state.pointerId !== event.pointerId) return; - activeAppPointer.value = null; - try { - state.element?.releasePointerCapture(event.pointerId); - } catch { - } - const elapsed = performance.now() - state.startedAt; - if (state.moved) return; - if (isAppsScrolling.value) return; - if (elapsed > 900) return; - const launchDelayMs = 180; - launchTimerId = window.setTimeout(async () => { - if (isAppsScrolling.value) return; - await launch(state.filePath); - }, launchDelayMs); - }; - const handleExit = async () => { - await window.api.call({ method: "POST", path: "/app/minimize" }); - }; - const copyLoadError = async () => { - if (!loadError.value) return; - const text = loadError.value; - try { - await navigator.clipboard.writeText(text); - } catch { - const textarea = document.createElement("textarea"); - textarea.value = text; - textarea.style.position = "fixed"; - textarea.style.left = "-1000px"; - textarea.style.top = "-1000px"; - document.body.appendChild(textarea); - textarea.focus(); - textarea.select(); - document.execCommand("copy"); - document.body.removeChild(textarea); - } - }; - return (_ctx, _cache) => { - return openBlock(), createElementBlock("div", _hoisted_1, [ - createBaseVNode("div", _hoisted_2, toDisplayString(timeText.value), 1), - createBaseVNode("div", { - class: "pagesViewport", - onPointerdown: handlePagePointerDown, - onPointermove: handlePagePointerMove, - onPointerup: handlePagePointerUp, - onPointercancel: handlePagePointerCancel - }, [ - createBaseVNode("div", { - class: "pagesTrack", - "data-active": mainPage.value - }, [ - createBaseVNode("div", _hoisted_4, [ - createBaseVNode("div", _hoisted_5, [ - createBaseVNode("div", _hoisted_6, [ - createBaseVNode("div", _hoisted_7, [ - (openBlock(true), createElementBlock(Fragment, null, renderList(placedDesktopTiles.value, (tile) => { - return openBlock(), createBlock(resolveDynamicComponent(tile.clickable ? "button" : "div"), { - key: tile.id, - class: normalizeClass(["deskTile touchButton", [ - tile.variant ? `deskTile--${tile.variant}` : "", - tile.id === "writingPanel" ? "deskTile--panel" : "" - ]]), - style: normalizeStyle({ - gridColumn: `${tile.col} / span ${tile.colSpan}`, - gridRow: `${tile.row} / span ${tile.rowSpan}` - }), - type: tile.clickable ? "button" : void 0, - onPointerup: ($event) => tile.clickable ? handleTilePointerUp(tile) : void 0 - }, { - default: withCtx(() => [ - tile.id === "writingPanel" ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [ - _cache[8] || (_cache[8] = createBaseVNode("div", { class: "writingPanelTitle" }, "书写", -1)), - createBaseVNode("div", _hoisted_8, [ - (openBlock(), createElementBlock(Fragment, null, renderList(writingActions, (a) => { - return createBaseVNode("button", { - key: a.id, - class: "writingActionButton touchButton", - type: "button", - onPointerup: ($event) => handleWritingActionPointerUp(a.id) - }, [ - (openBlock(), createElementBlock("svg", _hoisted_10, [ - createBaseVNode("path", { - fill: "currentColor", - d: iconPath(a.icon) - }, null, 8, _hoisted_11) - ])), - createBaseVNode("div", _hoisted_12, toDisplayString(a.label), 1) - ], 40, _hoisted_9); - }), 64)) - ]) - ], 64)) : (openBlock(), createElementBlock("div", _hoisted_13, [ - (openBlock(), createElementBlock("svg", _hoisted_14, [ - createBaseVNode("path", { - fill: "currentColor", - d: iconPath(tile.icon) - }, null, 8, _hoisted_15) - ])), - createBaseVNode("div", _hoisted_16, toDisplayString(tile.title), 1) - ])) - ]), - _: 2 - }, 1064, ["class", "style", "type", "onPointerup"]); - }), 128)) - ]) - ]), - createBaseVNode("div", _hoisted_17, [ - createBaseVNode("div", _hoisted_18, [ - _cache[9] || (_cache[9] = createBaseVNode("div", { class: "notesHeaderTitle" }, "作业版", -1)), - createBaseVNode("button", { - class: "notesAddButton touchButton", - type: "button", - onPointerup: addNote - }, "新建", 32) - ]), - createBaseVNode("div", _hoisted_19, [ - (openBlock(true), createElementBlock(Fragment, null, renderList(notes.value, (note) => { - return openBlock(), createElementBlock("div", { - key: note.id, - class: "noteCard" - }, [ - withDirectives(createBaseVNode("textarea", { - "onUpdate:modelValue": ($event) => note.text = $event, - class: "noteTextarea", - placeholder: "写点什么..." - }, null, 8, _hoisted_20), [ - [vModelText, note.text] - ]) - ]); - }), 128)) - ]) - ]) - ]) - ]), - createBaseVNode("div", _hoisted_21, [ - createBaseVNode("div", _hoisted_22, [ - createBaseVNode("div", _hoisted_23, [ - isLoadingApps.value ? (openBlock(), createElementBlock("div", _hoisted_24, "加载中...")) : loadError.value ? (openBlock(), createElementBlock("div", _hoisted_25, [ - createBaseVNode("div", _hoisted_26, [ - _cache[10] || (_cache[10] = createBaseVNode("div", { class: "errorTitle" }, "加载失败", -1)), - createBaseVNode("button", { - class: "copyButton touchButton", - type: "button", - onPointerup: copyLoadError - }, "复制错误", 32) - ]), - createBaseVNode("div", _hoisted_27, toDisplayString(loadError.value), 1) - ])) : (openBlock(), createElementBlock("div", { - key: 2, - class: "appsList", - onScroll: handleAppsListScroll - }, [ - (openBlock(true), createElementBlock(Fragment, null, renderList(groupedApps.value, (group) => { - return openBlock(), createElementBlock(Fragment, { - key: group.key - }, [ - createBaseVNode("div", _hoisted_28, toDisplayString(group.label), 1), - (openBlock(true), createElementBlock(Fragment, null, renderList(group.items, (app) => { - return openBlock(), createElementBlock("button", { - key: app.id, - class: "item touchButton", - type: "button", - onPointerdown: ($event) => handleAppPointerDown($event, app.filePath), - onPointermove: _cache[0] || (_cache[0] = ($event) => handleAppPointerMove($event)), - onPointerup: _cache[1] || (_cache[1] = ($event) => handleAppPointerUp($event)), - onPointercancel: _cache[2] || (_cache[2] = ($event) => handleAppPointerCancel($event)), - onKeydown: [ - withKeys(withModifiers(($event) => launch(app.filePath), ["prevent"]), ["enter"]), - withKeys(withModifiers(($event) => launch(app.filePath), ["prevent"]), ["space"]) - ] - }, [ - createBaseVNode("img", { - class: "icon", - src: app.iconDataUrl, - alt: "" - }, null, 8, _hoisted_30), - createBaseVNode("div", _hoisted_31, toDisplayString(app.name), 1) - ], 40, _hoisted_29); - }), 128)) - ], 64); - }), 128)) - ], 32)) - ]), - createBaseVNode("div", _hoisted_32, [ - createBaseVNode("button", { - class: "backButton touchButton", - type: "button", - onPointerup: closeApps - }, "返回", 32), - withDirectives(createBaseVNode("input", { - "onUpdate:modelValue": _cache[3] || (_cache[3] = ($event) => query.value = $event), - class: "appsSearch", - type: "text", - placeholder: "搜索应用..." - }, null, 512), [ - [vModelText, query.value] - ]), - createBaseVNode("button", { - class: "appsExitButton touchButton", - type: "button", - onPointerup: handleExit - }, [..._cache[11] || (_cache[11] = [ - createBaseVNode("svg", { - class: "buttonIcon", - xmlns: "http://www.w3.org/2000/svg", - width: "20", - height: "20", - viewBox: "0 0 20 20", - "aria-hidden": "true", - focusable: "false" - }, [ - createBaseVNode("path", { - fill: "currentColor", - d: "M8.5 9A1.5 1.5 0 0 0 10 7.5v-4A1.5 1.5 0 0 0 8.5 2h-6A1.5 1.5 0 0 0 1 3.5v4a1.5 1.5 0 0 0 1 1.415l.019.006c.15.051.313.079.481.079zm6.75-3H11V5h4.25A2.75 2.75 0 0 1 18 7.75v6.5A2.75 2.75 0 0 1 15.25 17H4.75A2.75 2.75 0 0 1 2 14.25v-4.3q.243.05.5.05H3v4.25c0 .966.784 1.75 1.75 1.75h10.5A1.75 1.75 0 0 0 17 14.25v-6.5A1.75 1.75 0 0 0 15.25 6M14 12.293l-2.646-2.647a.5.5 0 0 0-.708.708L13.293 13H11.5a.5.5 0 0 0 0 1h3a.5.5 0 0 0 .5-.497V10.5a.5.5 0 0 0-1 0z" - }) - ], -1), - createTextVNode(" 回到Window ", -1) - ])], 32) - ]) - ]) - ]) - ], 8, _hoisted_3) - ], 32), - isSettingsOpen.value ? (openBlock(), createElementBlock("div", _hoisted_33, [ - createBaseVNode("div", _hoisted_34, [ - createBaseVNode("div", _hoisted_35, [ - _cache[12] || (_cache[12] = createBaseVNode("div", { class: "settingsSidebarTitle" }, "设置", -1)), - createBaseVNode("button", { - class: "settingsTabButton touchButton", - type: "button", - "data-active": settingsTab.value === "homeEdit", - onPointerup: _cache[4] || (_cache[4] = ($event) => selectSettingsTab("homeEdit")) - }, " 主页编辑 ", 40, _hoisted_36) - ]), - createBaseVNode("div", _hoisted_37, [ - createBaseVNode("div", _hoisted_38, [ - _cache[13] || (_cache[13] = createBaseVNode("div", { class: "settingsDetailTitle" }, "主页编辑", -1)), - createBaseVNode("div", _hoisted_39, [ - !isHomeEditMode.value ? (openBlock(), createElementBlock("button", { - key: 0, - class: "settingsPrimaryButton touchButton", - type: "button", - onPointerup: enterHomeEdit - }, " 进入主页编辑 ", 32)) : (openBlock(), createElementBlock("button", { - key: 1, - class: "settingsPrimaryButton touchButton", - type: "button", - onPointerup: exitHomeEdit - }, " 退出编辑 ", 32)), - createBaseVNode("button", { - class: "settingsResetButton touchButton", - type: "button", - onPointerup: restoreDefaultWidgets - }, " 恢复默认 ", 32) - ]) - ]), - createBaseVNode("div", _hoisted_40, [ - !isHomeEditMode.value ? (openBlock(), createElementBlock("div", _hoisted_41, [ - _cache[16] || (_cache[16] = createBaseVNode("div", { class: "settingsSectionTitle" }, "组件与点击行为", -1)), - createBaseVNode("div", _hoisted_42, [ - (openBlock(true), createElementBlock(Fragment, null, renderList(settingsWidgets.value, (w) => { - return openBlock(), createElementBlock("div", { - key: w.id, - class: "settingsPreviewItem" - }, [ - createBaseVNode("div", _hoisted_43, [ - createBaseVNode("div", _hoisted_44, toDisplayString(w.title), 1), - createBaseVNode("div", _hoisted_45, toDisplayString(w.sizeLabel) + " · " + toDisplayString(w.enabled ? "已添加" : "未添加") + " · " + toDisplayString(w.visible ? "显示中" : "未显示"), 1) - ]), - createBaseVNode("div", _hoisted_46, [ - w.id === "writingPanel" ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [ - _cache[14] || (_cache[14] = createBaseVNode("div", { class: "settingsPreviewBehaviorTitle" }, "内置按钮", -1)), - (openBlock(), createElementBlock(Fragment, null, renderList(writingActions, (a) => { - return createBaseVNode("div", { - key: a.id, - class: "settingsPreviewBehaviorRow" - }, [ - createBaseVNode("div", _hoisted_47, toDisplayString(a.label), 1), - createBaseVNode("div", _hoisted_48, toDisplayString(actionSummary(a.id)), 1) - ]); - }), 64)) - ], 64)) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [ - _cache[15] || (_cache[15] = createBaseVNode("div", { class: "settingsPreviewBehaviorTitle" }, "点击行为", -1)), - createBaseVNode("div", _hoisted_49, toDisplayString(actionSummary(w.id)), 1) - ], 64)) - ]) - ]); - }), 128)) - ]) - ])) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [ - createBaseVNode("div", _hoisted_50, [ - _cache[17] || (_cache[17] = createBaseVNode("div", { class: "settingsSectionTitle" }, "主页组件(点按添加/移除)", -1)), - createBaseVNode("div", _hoisted_51, [ - (openBlock(true), createElementBlock(Fragment, null, renderList(widgetsInOrder.value, (w) => { - return openBlock(), createElementBlock("button", { - key: w.id, - class: "homeWidgetCard touchButton", - type: "button", - "data-active": widgetsEnabled.value[w.id] !== false, - "data-selected": homeEditSelectedId.value === w.id, - onPointerup: ($event) => toggleHomeWidget(w.id) - }, [ - (openBlock(), createElementBlock("svg", _hoisted_53, [ - createBaseVNode("path", { - fill: "currentColor", - d: iconPath(w.icon) - }, null, 8, _hoisted_54) - ])), - createBaseVNode("div", _hoisted_55, toDisplayString(w.title), 1), - createBaseVNode("div", _hoisted_56, toDisplayString(w.size === "2x4" ? "2×4" : w.size === "4x2" ? "4×2" : "2×2"), 1) - ], 40, _hoisted_52); - }), 128)) - ]) - ]), - createBaseVNode("div", _hoisted_57, [ - _cache[18] || (_cache[18] = createBaseVNode("div", { class: "settingsSectionTitle" }, "排序(仅已添加)", -1)), - createBaseVNode("div", _hoisted_58, [ - (openBlock(true), createElementBlock(Fragment, null, renderList(enabledWidgetOrder.value, (id) => { - return openBlock(), createElementBlock("div", { - key: id, - class: "homeEditOrderRow" - }, [ - createBaseVNode("div", _hoisted_59, toDisplayString(widgetTitle(id)), 1), - createBaseVNode("div", _hoisted_60, [ - createBaseVNode("button", { - class: "settingsActionButton touchButton", - type: "button", - onPointerup: ($event) => moveEnabledWidget(id, -1) - }, " 上移 ", 40, _hoisted_61), - createBaseVNode("button", { - class: "settingsActionButton touchButton", - type: "button", - onPointerup: ($event) => moveEnabledWidget(id, 1) - }, " 下移 ", 40, _hoisted_62), - createBaseVNode("button", { - class: "settingsActionButton touchButton", - type: "button", - onPointerup: ($event) => selectHomeWidget(id) - }, " 设置 ", 40, _hoisted_63) - ]) - ]); - }), 128)) - ]) - ]), - createBaseVNode("div", _hoisted_64, [ - createBaseVNode("div", _hoisted_65, "详细设置:" + toDisplayString(widgetTitle(homeEditSelectedId.value)), 1), - createBaseVNode("div", _hoisted_66, [ - homeEditSelectedId.value === "writingPanel" ? (openBlock(), createElementBlock(Fragment, { key: 0 }, renderList(writingActions, (a) => { - return createBaseVNode("div", { - key: a.id, - class: "settingsSubAction" - }, [ - createBaseVNode("div", _hoisted_67, toDisplayString(a.label), 1), - createBaseVNode("select", { - class: "settingsSelect touchButton", - value: actionConfigs.value[a.id]?.kind ?? "url", - onChange: ($event) => setActionKind(a.id, $event.target.value) - }, [..._cache[19] || (_cache[19] = [ - createBaseVNode("option", { value: "app" }, "打开应用", -1), - createBaseVNode("option", { value: "url" }, "打开URL", -1) - ])], 40, _hoisted_68), - createBaseVNode("input", { - class: "settingsInput", - type: "text", - value: actionConfigs.value[a.id]?.target ?? "", - onInput: ($event) => setActionTarget(a.id, $event.target.value), - placeholder: "输入开始菜单路径或URL" - }, null, 40, _hoisted_69), - createBaseVNode("button", { - class: "settingsMiniButton touchButton", - type: "button", - onPointerup: ($event) => clearAction(a.id) - }, " 清空 ", 40, _hoisted_70) - ]); - }), 64)) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [ - createBaseVNode("div", _hoisted_71, [ - createBaseVNode("select", { - class: "settingsSelect touchButton", - value: actionConfigs.value[homeEditSelectedId.value]?.kind ?? "url", - onChange: _cache[5] || (_cache[5] = ($event) => setActionKind(homeEditSelectedId.value, $event.target.value)) - }, [..._cache[20] || (_cache[20] = [ - createBaseVNode("option", { value: "app" }, "打开应用", -1), - createBaseVNode("option", { value: "url" }, "打开URL", -1) - ])], 40, _hoisted_72), - createBaseVNode("input", { - class: "settingsInput", - type: "text", - value: actionConfigs.value[homeEditSelectedId.value]?.target ?? "", - onInput: _cache[6] || (_cache[6] = ($event) => setActionTarget(homeEditSelectedId.value, $event.target.value)), - placeholder: "输入开始菜单路径或URL" - }, null, 40, _hoisted_73), - createBaseVNode("button", { - class: "settingsMiniButton touchButton", - type: "button", - onPointerup: _cache[7] || (_cache[7] = ($event) => clearAction(homeEditSelectedId.value)) - }, " 清空 ", 32) - ]), - createBaseVNode("div", _hoisted_74, "当前:" + toDisplayString(actionSummary(homeEditSelectedId.value)), 1) - ], 64)) - ]) - ]) - ], 64)) - ]) - ]) - ]), - createBaseVNode("div", _hoisted_75, [ - createBaseVNode("button", { - class: "backButton touchButton", - type: "button", - onPointerup: closeSettings - }, "返回", 32), - createBaseVNode("button", { - class: "appsExitButton touchButton", - type: "button", - onPointerup: handleExit - }, [..._cache[21] || (_cache[21] = [ - createBaseVNode("svg", { - class: "buttonIcon", - xmlns: "http://www.w3.org/2000/svg", - width: "20", - height: "20", - viewBox: "0 0 20 20", - "aria-hidden": "true", - focusable: "false" - }, [ - createBaseVNode("path", { - fill: "currentColor", - d: "M8.5 9A1.5 1.5 0 0 0 10 7.5v-4A1.5 1.5 0 0 0 8.5 2h-6A1.5 1.5 0 0 0 1 3.5v4a1.5 1.5 0 0 0 1 1.415l.019.006c.15.051.313.079.481.079zm6.75-3H11V5h4.25A2.75 2.75 0 0 1 18 7.75v6.5A2.75 2.75 0 0 1 15.25 17H4.75A2.75 2.75 0 0 1 2 14.25v-4.3q.243.05.5.05H3v4.25c0 .966.784 1.75 1.75 1.75h10.5A1.75 1.75 0 0 0 17 14.25v-6.5A1.75 1.75 0 0 0 15.25 6M14 12.293l-2.646-2.647a.5.5 0 0 0-.708.708L13.293 13H11.5a.5.5 0 0 0 0 1h3a.5.5 0 0 0 .5-.497V10.5a.5.5 0 0 0-1 0z" - }) - ], -1), - createTextVNode(" 回到Window ", -1) - ])], 32) - ]) - ])) : createCommentVNode("", true), - mainPage.value === "home" && !isSettingsOpen.value ? (openBlock(), createElementBlock("button", { - key: 1, - class: "exitButton touchButton", - type: "button", - onPointerup: handleExit - }, [..._cache[22] || (_cache[22] = [ - createBaseVNode("svg", { - class: "buttonIcon", - xmlns: "http://www.w3.org/2000/svg", - width: "20", - height: "20", - viewBox: "0 0 20 20", - "aria-hidden": "true", - focusable: "false" - }, [ - createBaseVNode("path", { - fill: "currentColor", - d: "M8.5 9A1.5 1.5 0 0 0 10 7.5v-4A1.5 1.5 0 0 0 8.5 2h-6A1.5 1.5 0 0 0 1 3.5v4a1.5 1.5 0 0 0 1 1.415l.019.006c.15.051.313.079.481.079zm6.75-3H11V5h4.25A2.75 2.75 0 0 1 18 7.75v6.5A2.75 2.75 0 0 1 15.25 17H4.75A2.75 2.75 0 0 1 2 14.25v-4.3q.243.05.5.05H3v4.25c0 .966.784 1.75 1.75 1.75h10.5A1.75 1.75 0 0 0 17 14.25v-6.5A1.75 1.75 0 0 0 15.25 6M14 12.293l-2.646-2.647a.5.5 0 0 0-.708.708L13.293 13H11.5a.5.5 0 0 0 0 1h3a.5.5 0 0 0 .5-.497V10.5a.5.5 0 0 0-1 0z" - }) - ], -1), - createTextVNode(" 回到Window ", -1) - ])], 32)) : createCommentVNode("", true), - mainPage.value === "home" && !isSettingsOpen.value ? (openBlock(), createElementBlock("button", { - key: 2, - class: "settingsButton touchButton", - type: "button", - onPointerup: openSettings - }, " 设置 ", 32)) : createCommentVNode("", true) - ]); - }; - } -}); -createApp(_sfc_main).mount("#root"); diff --git a/out/renderer/index.html b/out/renderer/index.html deleted file mode 100644 index 0a3d23f..0000000 --- a/out/renderer/index.html +++ /dev/null @@ -1,18 +0,0 @@ - - - - - Electron - - - - - - - - - - diff --git a/package.json b/package.json deleted file mode 100644 index ccf6fa6..0000000 --- a/package.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "name": "desktop", - "version": "1.0.0", - "description": "An Electron application with Vue 3 and TypeScript", - "main": "./out/main/index.js", - "author": "example.com", - "homepage": "https://electron-vite.org", - "scripts": { - "format": "prettier --write .", - "lint": "eslint --cache .", - "typecheck:node": "tsc --noEmit -p tsconfig.node.json --composite false", - "typecheck:web": "vue-tsc --noEmit -p tsconfig.web.json --composite false", - "typecheck": "pnpm run typecheck:node && pnpm run typecheck:web", - "start": "electron-vite preview", - "dev": "electron-vite dev", - "build": "pnpm run typecheck && electron-vite build", - "postinstall": "electron-builder install-app-deps", - "build:unpack": "pnpm run build && electron-builder --dir", - "build:win": "pnpm run build && electron-builder --win", - "build:mac": "electron-vite build && electron-builder --mac", - "build:linux": "electron-vite build && electron-builder --linux" - }, - "dependencies": { - "@electron-toolkit/preload": "^3.0.2", - "@electron-toolkit/utils": "^4.0.0", - "@elysiajs/node": "^1.4.4", - "better-sqlite3": "^12.6.2", - "electron-updater": "^6.3.9", - "elysia": "^1.4.25" - }, - "devDependencies": { - "@electron-toolkit/eslint-config-prettier": "^3.0.0", - "@electron-toolkit/eslint-config-ts": "^3.1.0", - "@electron-toolkit/tsconfig": "^2.0.0", - "@types/node": "^22.19.1", - "@vitejs/plugin-vue": "^6.0.0", - "electron": "^39.2.6", - "electron-builder": "^26.0.12", - "electron-vite": "^5.0.0", - "eslint": "^9.39.1", - "prettier": "^3.7.4", - "typescript": "^5.9.3", - "vite": "^7.2.6", - "vue": "^3.5.0", - "vue-tsc": "^2.2.0" - }, - "pnpm": { - "onlyBuiltDependencies": [ - "electron", - "better-sqlite3", - "esbuild" - ] - } -} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml deleted file mode 100644 index 0e7225c..0000000 --- a/pnpm-lock.yaml +++ /dev/null @@ -1,5245 +0,0 @@ -lockfileVersion: '9.0' - -settings: - autoInstallPeers: true - excludeLinksFromLockfile: false - -importers: - - .: - dependencies: - '@electron-toolkit/preload': - specifier: ^3.0.2 - version: 3.0.2(electron@39.5.2) - '@electron-toolkit/utils': - specifier: ^4.0.0 - version: 4.0.0(electron@39.5.2) - '@elysiajs/node': - specifier: ^1.4.4 - version: 1.4.4(elysia@1.4.25(@sinclair/typebox@0.34.48)(exact-mirror@0.2.7(@sinclair/typebox@0.34.48))(file-type@21.3.0)(openapi-types@12.1.3)(typescript@5.9.3)) - better-sqlite3: - specifier: ^12.6.2 - version: 12.6.2 - electron-updater: - specifier: ^6.3.9 - version: 6.7.3 - elysia: - specifier: ^1.4.25 - version: 1.4.25(@sinclair/typebox@0.34.48)(exact-mirror@0.2.7(@sinclair/typebox@0.34.48))(file-type@21.3.0)(openapi-types@12.1.3)(typescript@5.9.3) - devDependencies: - '@electron-toolkit/eslint-config-prettier': - specifier: ^3.0.0 - version: 3.0.0(eslint@9.39.2(jiti@2.6.1))(prettier@3.8.1) - '@electron-toolkit/eslint-config-ts': - specifier: ^3.1.0 - version: 3.1.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - '@electron-toolkit/tsconfig': - specifier: ^2.0.0 - version: 2.0.0(@types/node@22.19.11) - '@types/node': - specifier: ^22.19.1 - version: 22.19.11 - '@vitejs/plugin-vue': - specifier: ^6.0.0 - version: 6.0.4(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1))(vue@3.5.28(typescript@5.9.3)) - electron: - specifier: ^39.2.6 - version: 39.5.2 - electron-builder: - specifier: ^26.0.12 - version: 26.7.0(electron-builder-squirrel-windows@26.7.0) - electron-vite: - specifier: ^5.0.0 - version: 5.0.0(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)) - eslint: - specifier: ^9.39.1 - version: 9.39.2(jiti@2.6.1) - prettier: - specifier: ^3.7.4 - version: 3.8.1 - typescript: - specifier: ^5.9.3 - version: 5.9.3 - vite: - specifier: ^7.2.6 - version: 7.3.1(@types/node@22.19.11)(jiti@2.6.1) - vue: - specifier: ^3.5.0 - version: 3.5.28(typescript@5.9.3) - vue-tsc: - specifier: ^2.2.0 - version: 2.2.12(typescript@5.9.3) - -packages: - - 7zip-bin@5.2.0: - resolution: {integrity: sha512-ukTPVhqG4jNzMro2qA9HSCSSVJN3aN7tlb+hfqYCt3ER0yWroeA2VR38MNrOHLQ/cVj+DaIMad0kFCtWWowh/A==} - - '@babel/code-frame@7.29.0': - resolution: {integrity: sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==} - engines: {node: '>=6.9.0'} - - '@babel/compat-data@7.29.0': - resolution: {integrity: sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==} - engines: {node: '>=6.9.0'} - - '@babel/core@7.29.0': - resolution: {integrity: sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==} - engines: {node: '>=6.9.0'} - - '@babel/generator@7.29.1': - resolution: {integrity: sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==} - engines: {node: '>=6.9.0'} - - '@babel/helper-compilation-targets@7.28.6': - resolution: {integrity: sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==} - engines: {node: '>=6.9.0'} - - '@babel/helper-globals@7.28.0': - resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==} - engines: {node: '>=6.9.0'} - - '@babel/helper-module-imports@7.28.6': - resolution: {integrity: sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==} - engines: {node: '>=6.9.0'} - - '@babel/helper-module-transforms@7.28.6': - resolution: {integrity: sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/helper-plugin-utils@7.28.6': - resolution: {integrity: sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==} - engines: {node: '>=6.9.0'} - - '@babel/helper-string-parser@7.27.1': - resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} - engines: {node: '>=6.9.0'} - - '@babel/helper-validator-identifier@7.28.5': - resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} - engines: {node: '>=6.9.0'} - - '@babel/helper-validator-option@7.27.1': - resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} - engines: {node: '>=6.9.0'} - - '@babel/helpers@7.28.6': - resolution: {integrity: sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==} - engines: {node: '>=6.9.0'} - - '@babel/parser@7.29.0': - resolution: {integrity: sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==} - engines: {node: '>=6.0.0'} - hasBin: true - - '@babel/plugin-transform-arrow-functions@7.27.1': - resolution: {integrity: sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/template@7.28.6': - resolution: {integrity: sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==} - engines: {node: '>=6.9.0'} - - '@babel/traverse@7.29.0': - resolution: {integrity: sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==} - engines: {node: '>=6.9.0'} - - '@babel/types@7.29.0': - resolution: {integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==} - engines: {node: '>=6.9.0'} - - '@borewit/text-codec@0.2.1': - resolution: {integrity: sha512-k7vvKPbf7J2fZ5klGRD9AeKfUvojuZIQ3BT5u7Jfv+puwXkUBUT5PVyMDfJZpy30CBDXGMgw7fguK/lpOMBvgw==} - - '@develar/schema-utils@2.6.5': - resolution: {integrity: sha512-0cp4PsWQ/9avqTVMCtZ+GirikIA36ikvjtHweU4/j8yLtgObI0+JUPhYFScgwlteveGB1rt3Cm8UhN04XayDig==} - engines: {node: '>= 8.9.0'} - - '@electron-toolkit/eslint-config-prettier@3.0.0': - resolution: {integrity: sha512-YapmIOVkbYdHLuTa+ad1SAVtcqYL9A/SJsc7cxQokmhcwAwonGevNom37jBf9slXegcZ/Slh01I/JARG1yhNFw==} - peerDependencies: - eslint: '>= 9.0.0' - prettier: '>= 3.0.0' - - '@electron-toolkit/eslint-config-ts@3.1.0': - resolution: {integrity: sha512-MowZQKd3yxXSDLack5QvjQwYHhpOJFoWBGBwJ/k+DCd7NUSendplECbQGFp86tPQYPUrPBPceR/hdsSAnaY5ZQ==} - peerDependencies: - eslint: '>=9.0.0' - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - - '@electron-toolkit/preload@3.0.2': - resolution: {integrity: sha512-TWWPToXd8qPRfSXwzf5KVhpXMfONaUuRAZJHsKthKgZR/+LqX1dZVSSClQ8OTAEduvLGdecljCsoT2jSshfoUg==} - peerDependencies: - electron: '>=13.0.0' - - '@electron-toolkit/tsconfig@2.0.0': - resolution: {integrity: sha512-AdPsP770WhW7b260h13SHMdmjEEHJL6xFtgi3jwgdsSQbJOkJLeNnnpZW9qxTPCvmRI6vmdzWz5K3gibFS6SNg==} - peerDependencies: - '@types/node': '*' - - '@electron-toolkit/utils@4.0.0': - resolution: {integrity: sha512-qXSntwEzluSzKl4z5yFNBknmPGjPa3zFhE4mp9+h0cgokY5ornAeP+CJQDBhKsL1S58aOQfcwkD3NwLZCl+64g==} - peerDependencies: - electron: '>=13.0.0' - - '@electron/asar@3.4.1': - resolution: {integrity: sha512-i4/rNPRS84t0vSRa2HorerGRXWyF4vThfHesw0dmcWHp+cspK743UanA0suA5Q5y8kzY2y6YKrvbIUn69BCAiA==} - engines: {node: '>=10.12.0'} - hasBin: true - - '@electron/fuses@1.8.0': - resolution: {integrity: sha512-zx0EIq78WlY/lBb1uXlziZmDZI4ubcCXIMJ4uGjXzZW0nS19TjSPeXPAjzzTmKQlJUZm0SbmZhPKP7tuQ1SsEw==} - hasBin: true - - '@electron/get@2.0.3': - resolution: {integrity: sha512-Qkzpg2s9GnVV2I2BjRksUi43U5e6+zaQMcjoJy0C+C5oxaKl+fmckGDQFtRpZpZV0NQekuZZ+tGz7EA9TVnQtQ==} - engines: {node: '>=12'} - - '@electron/get@3.1.0': - resolution: {integrity: sha512-F+nKc0xW+kVbBRhFzaMgPy3KwmuNTYX1fx6+FxxoSnNgwYX6LD7AKBTWkU0MQ6IBoe7dz069CNkR673sPAgkCQ==} - engines: {node: '>=14'} - - '@electron/notarize@2.5.0': - resolution: {integrity: sha512-jNT8nwH1f9X5GEITXaQ8IF/KdskvIkOFfB2CvwumsveVidzpSc+mvhhTMdAGSYF3O+Nq49lJ7y+ssODRXu06+A==} - engines: {node: '>= 10.0.0'} - - '@electron/osx-sign@1.3.3': - resolution: {integrity: sha512-KZ8mhXvWv2rIEgMbWZ4y33bDHyUKMXnx4M0sTyPNK/vcB81ImdeY9Ggdqy0SWbMDgmbqyQ+phgejh6V3R2QuSg==} - engines: {node: '>=12.0.0'} - hasBin: true - - '@electron/rebuild@4.0.3': - resolution: {integrity: sha512-u9vpTHRMkOYCs/1FLiSVAFZ7FbjsXK+bQuzviJZa+lG7BHZl1nz52/IcGvwa3sk80/fc3llutBkbCq10Vh8WQA==} - engines: {node: '>=22.12.0'} - hasBin: true - - '@electron/universal@2.0.3': - resolution: {integrity: sha512-Wn9sPYIVFRFl5HmwMJkARCCf7rqK/EurkfQ/rJZ14mHP3iYTjZSIOSVonEAnhWeAXwtw7zOekGRlc6yTtZ0t+g==} - engines: {node: '>=16.4'} - - '@electron/windows-sign@1.2.2': - resolution: {integrity: sha512-dfZeox66AvdPtb2lD8OsIIQh12Tp0GNCRUDfBHIKGpbmopZto2/A8nSpYYLoedPIHpqkeblZ/k8OV0Gy7PYuyQ==} - engines: {node: '>=14.14'} - hasBin: true - - '@elysiajs/node@1.4.4': - resolution: {integrity: sha512-DIvieF/5eR87AMoGq09dI/lrKB0wmP/VjrjZiEsFSSRBX2XXleM5n2M42P5Q97VI47frTWATf34u4HWxzH3zBA==} - peerDependencies: - elysia: '>= 1.4.0' - - '@esbuild/aix-ppc64@0.25.12': - resolution: {integrity: sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [aix] - - '@esbuild/aix-ppc64@0.27.3': - resolution: {integrity: sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [aix] - - '@esbuild/android-arm64@0.25.12': - resolution: {integrity: sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [android] - - '@esbuild/android-arm64@0.27.3': - resolution: {integrity: sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [android] - - '@esbuild/android-arm@0.25.12': - resolution: {integrity: sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==} - engines: {node: '>=18'} - cpu: [arm] - os: [android] - - '@esbuild/android-arm@0.27.3': - resolution: {integrity: sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA==} - engines: {node: '>=18'} - cpu: [arm] - os: [android] - - '@esbuild/android-x64@0.25.12': - resolution: {integrity: sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==} - engines: {node: '>=18'} - cpu: [x64] - os: [android] - - '@esbuild/android-x64@0.27.3': - resolution: {integrity: sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ==} - engines: {node: '>=18'} - cpu: [x64] - os: [android] - - '@esbuild/darwin-arm64@0.25.12': - resolution: {integrity: sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [darwin] - - '@esbuild/darwin-arm64@0.27.3': - resolution: {integrity: sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [darwin] - - '@esbuild/darwin-x64@0.25.12': - resolution: {integrity: sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==} - engines: {node: '>=18'} - cpu: [x64] - os: [darwin] - - '@esbuild/darwin-x64@0.27.3': - resolution: {integrity: sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg==} - engines: {node: '>=18'} - cpu: [x64] - os: [darwin] - - '@esbuild/freebsd-arm64@0.25.12': - resolution: {integrity: sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [freebsd] - - '@esbuild/freebsd-arm64@0.27.3': - resolution: {integrity: sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w==} - engines: {node: '>=18'} - cpu: [arm64] - os: [freebsd] - - '@esbuild/freebsd-x64@0.25.12': - resolution: {integrity: sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==} - engines: {node: '>=18'} - cpu: [x64] - os: [freebsd] - - '@esbuild/freebsd-x64@0.27.3': - resolution: {integrity: sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA==} - engines: {node: '>=18'} - cpu: [x64] - os: [freebsd] - - '@esbuild/linux-arm64@0.25.12': - resolution: {integrity: sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==} - engines: {node: '>=18'} - cpu: [arm64] - os: [linux] - - '@esbuild/linux-arm64@0.27.3': - resolution: {integrity: sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [linux] - - '@esbuild/linux-arm@0.25.12': - resolution: {integrity: sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==} - engines: {node: '>=18'} - cpu: [arm] - os: [linux] - - '@esbuild/linux-arm@0.27.3': - resolution: {integrity: sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw==} - engines: {node: '>=18'} - cpu: [arm] - os: [linux] - - '@esbuild/linux-ia32@0.25.12': - resolution: {integrity: sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==} - engines: {node: '>=18'} - cpu: [ia32] - os: [linux] - - '@esbuild/linux-ia32@0.27.3': - resolution: {integrity: sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg==} - engines: {node: '>=18'} - cpu: [ia32] - os: [linux] - - '@esbuild/linux-loong64@0.25.12': - resolution: {integrity: sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==} - engines: {node: '>=18'} - cpu: [loong64] - os: [linux] - - '@esbuild/linux-loong64@0.27.3': - resolution: {integrity: sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA==} - engines: {node: '>=18'} - cpu: [loong64] - os: [linux] - - '@esbuild/linux-mips64el@0.25.12': - resolution: {integrity: sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==} - engines: {node: '>=18'} - cpu: [mips64el] - os: [linux] - - '@esbuild/linux-mips64el@0.27.3': - resolution: {integrity: sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw==} - engines: {node: '>=18'} - cpu: [mips64el] - os: [linux] - - '@esbuild/linux-ppc64@0.25.12': - resolution: {integrity: sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [linux] - - '@esbuild/linux-ppc64@0.27.3': - resolution: {integrity: sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [linux] - - '@esbuild/linux-riscv64@0.25.12': - resolution: {integrity: sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==} - engines: {node: '>=18'} - cpu: [riscv64] - os: [linux] - - '@esbuild/linux-riscv64@0.27.3': - resolution: {integrity: sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ==} - engines: {node: '>=18'} - cpu: [riscv64] - os: [linux] - - '@esbuild/linux-s390x@0.25.12': - resolution: {integrity: sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==} - engines: {node: '>=18'} - cpu: [s390x] - os: [linux] - - '@esbuild/linux-s390x@0.27.3': - resolution: {integrity: sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw==} - engines: {node: '>=18'} - cpu: [s390x] - os: [linux] - - '@esbuild/linux-x64@0.25.12': - resolution: {integrity: sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==} - engines: {node: '>=18'} - cpu: [x64] - os: [linux] - - '@esbuild/linux-x64@0.27.3': - resolution: {integrity: sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA==} - engines: {node: '>=18'} - cpu: [x64] - os: [linux] - - '@esbuild/netbsd-arm64@0.25.12': - resolution: {integrity: sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [netbsd] - - '@esbuild/netbsd-arm64@0.27.3': - resolution: {integrity: sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA==} - engines: {node: '>=18'} - cpu: [arm64] - os: [netbsd] - - '@esbuild/netbsd-x64@0.25.12': - resolution: {integrity: sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==} - engines: {node: '>=18'} - cpu: [x64] - os: [netbsd] - - '@esbuild/netbsd-x64@0.27.3': - resolution: {integrity: sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA==} - engines: {node: '>=18'} - cpu: [x64] - os: [netbsd] - - '@esbuild/openbsd-arm64@0.25.12': - resolution: {integrity: sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openbsd] - - '@esbuild/openbsd-arm64@0.27.3': - resolution: {integrity: sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openbsd] - - '@esbuild/openbsd-x64@0.25.12': - resolution: {integrity: sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==} - engines: {node: '>=18'} - cpu: [x64] - os: [openbsd] - - '@esbuild/openbsd-x64@0.27.3': - resolution: {integrity: sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ==} - engines: {node: '>=18'} - cpu: [x64] - os: [openbsd] - - '@esbuild/openharmony-arm64@0.25.12': - resolution: {integrity: sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openharmony] - - '@esbuild/openharmony-arm64@0.27.3': - resolution: {integrity: sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openharmony] - - '@esbuild/sunos-x64@0.25.12': - resolution: {integrity: sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==} - engines: {node: '>=18'} - cpu: [x64] - os: [sunos] - - '@esbuild/sunos-x64@0.27.3': - resolution: {integrity: sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA==} - engines: {node: '>=18'} - cpu: [x64] - os: [sunos] - - '@esbuild/win32-arm64@0.25.12': - resolution: {integrity: sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [win32] - - '@esbuild/win32-arm64@0.27.3': - resolution: {integrity: sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA==} - engines: {node: '>=18'} - cpu: [arm64] - os: [win32] - - '@esbuild/win32-ia32@0.25.12': - resolution: {integrity: sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==} - engines: {node: '>=18'} - cpu: [ia32] - os: [win32] - - '@esbuild/win32-ia32@0.27.3': - resolution: {integrity: sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q==} - engines: {node: '>=18'} - cpu: [ia32] - os: [win32] - - '@esbuild/win32-x64@0.25.12': - resolution: {integrity: sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==} - engines: {node: '>=18'} - cpu: [x64] - os: [win32] - - '@esbuild/win32-x64@0.27.3': - resolution: {integrity: sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA==} - engines: {node: '>=18'} - cpu: [x64] - os: [win32] - - '@eslint-community/eslint-utils@4.9.1': - resolution: {integrity: sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - - '@eslint-community/regexpp@4.12.2': - resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==} - engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - - '@eslint/config-array@0.21.1': - resolution: {integrity: sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/config-helpers@0.4.2': - resolution: {integrity: sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/core@0.17.0': - resolution: {integrity: sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/eslintrc@3.3.3': - resolution: {integrity: sha512-Kr+LPIUVKz2qkx1HAMH8q1q6azbqBAsXJUxBl/ODDuVPX45Z9DfwB8tPjTi6nNZ8BuM3nbJxC5zCAg5elnBUTQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/js@9.39.2': - resolution: {integrity: sha512-q1mjIoW1VX4IvSocvM/vbTiveKC4k9eLrajNEuSsmjymSDEbpGddtpfOoN7YGAqBK3NG+uqo8ia4PDTt8buCYA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/object-schema@2.1.7': - resolution: {integrity: sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/plugin-kit@0.4.1': - resolution: {integrity: sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@humanfs/core@0.19.1': - resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} - engines: {node: '>=18.18.0'} - - '@humanfs/node@0.16.7': - resolution: {integrity: sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==} - engines: {node: '>=18.18.0'} - - '@humanwhocodes/module-importer@1.0.1': - resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} - engines: {node: '>=12.22'} - - '@humanwhocodes/retry@0.4.3': - resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} - engines: {node: '>=18.18'} - - '@isaacs/balanced-match@4.0.1': - resolution: {integrity: sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==} - engines: {node: 20 || >=22} - - '@isaacs/brace-expansion@5.0.1': - resolution: {integrity: sha512-WMz71T1JS624nWj2n2fnYAuPovhv7EUhk69R6i9dsVyzxt5eM3bjwvgk9L+APE1TRscGysAVMANkB0jh0LQZrQ==} - engines: {node: 20 || >=22} - - '@isaacs/cliui@8.0.2': - resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} - engines: {node: '>=12'} - - '@isaacs/fs-minipass@4.0.1': - resolution: {integrity: sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==} - engines: {node: '>=18.0.0'} - - '@jridgewell/gen-mapping@0.3.13': - resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} - - '@jridgewell/remapping@2.3.5': - resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==} - - '@jridgewell/resolve-uri@3.1.2': - resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} - engines: {node: '>=6.0.0'} - - '@jridgewell/sourcemap-codec@1.5.5': - resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} - - '@jridgewell/trace-mapping@0.3.31': - resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} - - '@malept/cross-spawn-promise@2.0.0': - resolution: {integrity: sha512-1DpKU0Z5ThltBwjNySMC14g0CkbyhCaz9FkhxqNsZI6uAPJXFS8cMXlBKo26FJ8ZuW6S9GCMcR9IO5k2X5/9Fg==} - engines: {node: '>= 12.13.0'} - - '@malept/flatpak-bundler@0.4.0': - resolution: {integrity: sha512-9QOtNffcOF/c1seMCDnjckb3R9WHcG34tky+FHpNKKCW0wc/scYLwMtO+ptyGUfMW0/b/n4qRiALlaFHc9Oj7Q==} - engines: {node: '>= 10.0.0'} - - '@npmcli/agent@3.0.0': - resolution: {integrity: sha512-S79NdEgDQd/NGCay6TCoVzXSj74skRZIKJcpJjC5lOq34SZzyI6MqtiiWoiVWoVrTcGjNeC4ipbh1VIHlpfF5Q==} - engines: {node: ^18.17.0 || >=20.5.0} - - '@npmcli/fs@4.0.0': - resolution: {integrity: sha512-/xGlezI6xfGO9NwuJlnwz/K14qD1kCSAGtacBHnGzeAIuJGazcp45KP5NuyARXoKb7cwulAGWVsbeSxdG/cb0Q==} - engines: {node: ^18.17.0 || >=20.5.0} - - '@pkgjs/parseargs@0.11.0': - resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} - engines: {node: '>=14'} - - '@pkgr/core@0.2.9': - resolution: {integrity: sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==} - engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} - - '@rolldown/pluginutils@1.0.0-rc.2': - resolution: {integrity: sha512-izyXV/v+cHiRfozX62W9htOAvwMo4/bXKDrQ+vom1L1qRuexPock/7VZDAhnpHCLNejd3NJ6hiab+tO0D44Rgw==} - - '@rollup/rollup-android-arm-eabi@4.57.1': - resolution: {integrity: sha512-A6ehUVSiSaaliTxai040ZpZ2zTevHYbvu/lDoeAteHI8QnaosIzm4qwtezfRg1jOYaUmnzLX1AOD6Z+UJjtifg==} - cpu: [arm] - os: [android] - - '@rollup/rollup-android-arm64@4.57.1': - resolution: {integrity: sha512-dQaAddCY9YgkFHZcFNS/606Exo8vcLHwArFZ7vxXq4rigo2bb494/xKMMwRRQW6ug7Js6yXmBZhSBRuBvCCQ3w==} - cpu: [arm64] - os: [android] - - '@rollup/rollup-darwin-arm64@4.57.1': - resolution: {integrity: sha512-crNPrwJOrRxagUYeMn/DZwqN88SDmwaJ8Cvi/TN1HnWBU7GwknckyosC2gd0IqYRsHDEnXf328o9/HC6OkPgOg==} - cpu: [arm64] - os: [darwin] - - '@rollup/rollup-darwin-x64@4.57.1': - resolution: {integrity: sha512-Ji8g8ChVbKrhFtig5QBV7iMaJrGtpHelkB3lsaKzadFBe58gmjfGXAOfI5FV0lYMH8wiqsxKQ1C9B0YTRXVy4w==} - cpu: [x64] - os: [darwin] - - '@rollup/rollup-freebsd-arm64@4.57.1': - resolution: {integrity: sha512-R+/WwhsjmwodAcz65guCGFRkMb4gKWTcIeLy60JJQbXrJ97BOXHxnkPFrP+YwFlaS0m+uWJTstrUA9o+UchFug==} - cpu: [arm64] - os: [freebsd] - - '@rollup/rollup-freebsd-x64@4.57.1': - resolution: {integrity: sha512-IEQTCHeiTOnAUC3IDQdzRAGj3jOAYNr9kBguI7MQAAZK3caezRrg0GxAb6Hchg4lxdZEI5Oq3iov/w/hnFWY9Q==} - cpu: [x64] - os: [freebsd] - - '@rollup/rollup-linux-arm-gnueabihf@4.57.1': - resolution: {integrity: sha512-F8sWbhZ7tyuEfsmOxwc2giKDQzN3+kuBLPwwZGyVkLlKGdV1nvnNwYD0fKQ8+XS6hp9nY7B+ZeK01EBUE7aHaw==} - cpu: [arm] - os: [linux] - libc: [glibc] - - '@rollup/rollup-linux-arm-musleabihf@4.57.1': - resolution: {integrity: sha512-rGfNUfn0GIeXtBP1wL5MnzSj98+PZe/AXaGBCRmT0ts80lU5CATYGxXukeTX39XBKsxzFpEeK+Mrp9faXOlmrw==} - cpu: [arm] - os: [linux] - libc: [musl] - - '@rollup/rollup-linux-arm64-gnu@4.57.1': - resolution: {integrity: sha512-MMtej3YHWeg/0klK2Qodf3yrNzz6CGjo2UntLvk2RSPlhzgLvYEB3frRvbEF2wRKh1Z2fDIg9KRPe1fawv7C+g==} - cpu: [arm64] - os: [linux] - libc: [glibc] - - '@rollup/rollup-linux-arm64-musl@4.57.1': - resolution: {integrity: sha512-1a/qhaaOXhqXGpMFMET9VqwZakkljWHLmZOX48R0I/YLbhdxr1m4gtG1Hq7++VhVUmf+L3sTAf9op4JlhQ5u1Q==} - cpu: [arm64] - os: [linux] - libc: [musl] - - '@rollup/rollup-linux-loong64-gnu@4.57.1': - resolution: {integrity: sha512-QWO6RQTZ/cqYtJMtxhkRkidoNGXc7ERPbZN7dVW5SdURuLeVU7lwKMpo18XdcmpWYd0qsP1bwKPf7DNSUinhvA==} - cpu: [loong64] - os: [linux] - libc: [glibc] - - '@rollup/rollup-linux-loong64-musl@4.57.1': - resolution: {integrity: sha512-xpObYIf+8gprgWaPP32xiN5RVTi/s5FCR+XMXSKmhfoJjrpRAjCuuqQXyxUa/eJTdAE6eJ+KDKaoEqjZQxh3Gw==} - cpu: [loong64] - os: [linux] - libc: [musl] - - '@rollup/rollup-linux-ppc64-gnu@4.57.1': - resolution: {integrity: sha512-4BrCgrpZo4hvzMDKRqEaW1zeecScDCR+2nZ86ATLhAoJ5FQ+lbHVD3ttKe74/c7tNT9c6F2viwB3ufwp01Oh2w==} - cpu: [ppc64] - os: [linux] - libc: [glibc] - - '@rollup/rollup-linux-ppc64-musl@4.57.1': - resolution: {integrity: sha512-NOlUuzesGauESAyEYFSe3QTUguL+lvrN1HtwEEsU2rOwdUDeTMJdO5dUYl/2hKf9jWydJrO9OL/XSSf65R5+Xw==} - cpu: [ppc64] - os: [linux] - libc: [musl] - - '@rollup/rollup-linux-riscv64-gnu@4.57.1': - resolution: {integrity: sha512-ptA88htVp0AwUUqhVghwDIKlvJMD/fmL/wrQj99PRHFRAG6Z5nbWoWG4o81Nt9FT+IuqUQi+L31ZKAFeJ5Is+A==} - cpu: [riscv64] - os: [linux] - libc: [glibc] - - '@rollup/rollup-linux-riscv64-musl@4.57.1': - resolution: {integrity: sha512-S51t7aMMTNdmAMPpBg7OOsTdn4tySRQvklmL3RpDRyknk87+Sp3xaumlatU+ppQ+5raY7sSTcC2beGgvhENfuw==} - cpu: [riscv64] - os: [linux] - libc: [musl] - - '@rollup/rollup-linux-s390x-gnu@4.57.1': - resolution: {integrity: sha512-Bl00OFnVFkL82FHbEqy3k5CUCKH6OEJL54KCyx2oqsmZnFTR8IoNqBF+mjQVcRCT5sB6yOvK8A37LNm/kPJiZg==} - cpu: [s390x] - os: [linux] - libc: [glibc] - - '@rollup/rollup-linux-x64-gnu@4.57.1': - resolution: {integrity: sha512-ABca4ceT4N+Tv/GtotnWAeXZUZuM/9AQyCyKYyKnpk4yoA7QIAuBt6Hkgpw8kActYlew2mvckXkvx0FfoInnLg==} - cpu: [x64] - os: [linux] - libc: [glibc] - - '@rollup/rollup-linux-x64-musl@4.57.1': - resolution: {integrity: sha512-HFps0JeGtuOR2convgRRkHCekD7j+gdAuXM+/i6kGzQtFhlCtQkpwtNzkNj6QhCDp7DRJ7+qC/1Vg2jt5iSOFw==} - cpu: [x64] - os: [linux] - libc: [musl] - - '@rollup/rollup-openbsd-x64@4.57.1': - resolution: {integrity: sha512-H+hXEv9gdVQuDTgnqD+SQffoWoc0Of59AStSzTEj/feWTBAnSfSD3+Dql1ZruJQxmykT/JVY0dE8Ka7z0DH1hw==} - cpu: [x64] - os: [openbsd] - - '@rollup/rollup-openharmony-arm64@4.57.1': - resolution: {integrity: sha512-4wYoDpNg6o/oPximyc/NG+mYUejZrCU2q+2w6YZqrAs2UcNUChIZXjtafAiiZSUc7On8v5NyNj34Kzj/Ltk6dQ==} - cpu: [arm64] - os: [openharmony] - - '@rollup/rollup-win32-arm64-msvc@4.57.1': - resolution: {integrity: sha512-O54mtsV/6LW3P8qdTcamQmuC990HDfR71lo44oZMZlXU4tzLrbvTii87Ni9opq60ds0YzuAlEr/GNwuNluZyMQ==} - cpu: [arm64] - os: [win32] - - '@rollup/rollup-win32-ia32-msvc@4.57.1': - resolution: {integrity: sha512-P3dLS+IerxCT/7D2q2FYcRdWRl22dNbrbBEtxdWhXrfIMPP9lQhb5h4Du04mdl5Woq05jVCDPCMF7Ub0NAjIew==} - cpu: [ia32] - os: [win32] - - '@rollup/rollup-win32-x64-gnu@4.57.1': - resolution: {integrity: sha512-VMBH2eOOaKGtIJYleXsi2B8CPVADrh+TyNxJ4mWPnKfLB/DBUmzW+5m1xUrcwWoMfSLagIRpjUFeW5CO5hyciQ==} - cpu: [x64] - os: [win32] - - '@rollup/rollup-win32-x64-msvc@4.57.1': - resolution: {integrity: sha512-mxRFDdHIWRxg3UfIIAwCm6NzvxG0jDX/wBN6KsQFTvKFqqg9vTrWUE68qEjHt19A5wwx5X5aUi2zuZT7YR0jrA==} - cpu: [x64] - os: [win32] - - '@sinclair/typebox@0.34.48': - resolution: {integrity: sha512-kKJTNuK3AQOrgjjotVxMrCn1sUJwM76wMszfq1kdU4uYVJjvEWuFQ6HgvLt4Xz3fSmZlTOxJ/Ie13KnIcWQXFA==} - - '@sindresorhus/is@4.6.0': - resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==} - engines: {node: '>=10'} - - '@szmarczak/http-timer@4.0.6': - resolution: {integrity: sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==} - engines: {node: '>=10'} - - '@tokenizer/inflate@0.4.1': - resolution: {integrity: sha512-2mAv+8pkG6GIZiF1kNg1jAjh27IDxEPKwdGul3snfztFerfPGI1LjDezZp3i7BElXompqEtPmoPx6c2wgtWsOA==} - engines: {node: '>=18'} - - '@tokenizer/token@0.3.0': - resolution: {integrity: sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==} - - '@types/cacheable-request@6.0.3': - resolution: {integrity: sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==} - - '@types/debug@4.1.12': - resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} - - '@types/estree@1.0.8': - resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} - - '@types/fs-extra@9.0.13': - resolution: {integrity: sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==} - - '@types/http-cache-semantics@4.2.0': - resolution: {integrity: sha512-L3LgimLHXtGkWikKnsPg0/VFx9OGZaC+eN1u4r+OB1XRqH3meBIAVC2zr1WdMH+RHmnRkqliQAOHNJ/E0j/e0Q==} - - '@types/json-schema@7.0.15': - resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - - '@types/keyv@3.1.4': - resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} - - '@types/ms@2.1.0': - resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} - - '@types/node@22.19.11': - resolution: {integrity: sha512-BH7YwL6rA93ReqeQS1c4bsPpcfOmJasG+Fkr6Y59q83f9M1WcBRHR2vM+P9eOisYRcN3ujQoiZY8uk5W+1WL8w==} - - '@types/plist@3.0.5': - resolution: {integrity: sha512-E6OCaRmAe4WDmWNsL/9RMqdkkzDCY1etutkflWk4c+AcjDU07Pcz1fQwTX0TQz+Pxqn9i4L1TU3UFpjnrcDgxA==} - - '@types/responselike@1.0.3': - resolution: {integrity: sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==} - - '@types/verror@1.10.11': - resolution: {integrity: sha512-RlDm9K7+o5stv0Co8i8ZRGxDbrTxhJtgjqjFyVh/tXQyl/rYtTKlnTvZ88oSTeYREWurwx20Js4kTuKCsFkUtg==} - - '@types/yauzl@2.10.3': - resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} - - '@typescript-eslint/eslint-plugin@8.55.0': - resolution: {integrity: sha512-1y/MVSz0NglV1ijHC8OT49mPJ4qhPYjiK08YUQVbIOyu+5k862LKUHFkpKHWu//zmr7hDR2rhwUm6gnCGNmGBQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - '@typescript-eslint/parser': ^8.55.0 - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' - - '@typescript-eslint/parser@8.55.0': - resolution: {integrity: sha512-4z2nCSBfVIMnbuu8uinj+f0o4qOeggYJLbjpPHka3KH1om7e+H9yLKTYgksTaHcGco+NClhhY2vyO3HsMH1RGw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' - - '@typescript-eslint/project-service@8.55.0': - resolution: {integrity: sha512-zRcVVPFUYWa3kNnjaZGXSu3xkKV1zXy8M4nO/pElzQhFweb7PPtluDLQtKArEOGmjXoRjnUZ29NjOiF0eCDkcQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <6.0.0' - - '@typescript-eslint/scope-manager@8.55.0': - resolution: {integrity: sha512-fVu5Omrd3jeqeQLiB9f1YsuK/iHFOwb04bCtY4BSCLgjNbOD33ZdV6KyEqplHr+IlpgT0QTZ/iJ+wT7hvTx49Q==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@typescript-eslint/tsconfig-utils@8.55.0': - resolution: {integrity: sha512-1R9cXqY7RQd7WuqSN47PK9EDpgFUK3VqdmbYrvWJZYDd0cavROGn+74ktWBlmJ13NXUQKlZ/iAEQHI/V0kKe0Q==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <6.0.0' - - '@typescript-eslint/type-utils@8.55.0': - resolution: {integrity: sha512-x1iH2unH4qAt6I37I2CGlsNs+B9WGxurP2uyZLRz6UJoZWDBx9cJL1xVN/FiOmHEONEg6RIufdvyT0TEYIgC5g==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' - - '@typescript-eslint/types@8.55.0': - resolution: {integrity: sha512-ujT0Je8GI5BJWi+/mMoR0wxwVEQaxM+pi30xuMiJETlX80OPovb2p9E8ss87gnSVtYXtJoU9U1Cowcr6w2FE0w==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@typescript-eslint/typescript-estree@8.55.0': - resolution: {integrity: sha512-EwrH67bSWdx/3aRQhCoxDaHM+CrZjotc2UCCpEDVqfCE+7OjKAGWNY2HsCSTEVvWH2clYQK8pdeLp42EVs+xQw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <6.0.0' - - '@typescript-eslint/utils@8.55.0': - resolution: {integrity: sha512-BqZEsnPGdYpgyEIkDC1BadNY8oMwckftxBT+C8W0g1iKPdeqKZBtTfnvcq0nf60u7MkjFO8RBvpRGZBPw4L2ow==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' - - '@typescript-eslint/visitor-keys@8.55.0': - resolution: {integrity: sha512-AxNRwEie8Nn4eFS1FzDMJWIISMGoXMb037sgCBJ3UR6o0fQTzr2tqN9WT+DkWJPhIdQCfV7T6D387566VtnCJA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@vitejs/plugin-vue@6.0.4': - resolution: {integrity: sha512-uM5iXipgYIn13UUQCZNdWkYk+sysBeA97d5mHsAoAt1u/wpN3+zxOmsVJWosuzX+IMGRzeYUNytztrYznboIkQ==} - 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 - - '@volar/language-core@2.4.15': - resolution: {integrity: sha512-3VHw+QZU0ZG9IuQmzT68IyN4hZNd9GchGPhbD9+pa8CVv7rnoOZwo7T8weIbrRmihqy3ATpdfXFnqRrfPVK6CA==} - - '@volar/source-map@2.4.15': - resolution: {integrity: sha512-CPbMWlUN6hVZJYGcU/GSoHu4EnCHiLaXI9n8c9la6RaI9W5JHX+NqG+GSQcB0JdC2FIBLdZJwGsfKyBB71VlTg==} - - '@volar/typescript@2.4.15': - resolution: {integrity: sha512-2aZ8i0cqPGjXb4BhkMsPYDkkuc2ZQ6yOpqwAuNwUoncELqoy5fRgOQtLR9gB0g902iS0NAkvpIzs27geVyVdPg==} - - '@vue/compiler-core@3.5.28': - resolution: {integrity: sha512-kviccYxTgoE8n6OCw96BNdYlBg2GOWfBuOW4Vqwrt7mSKWKwFVvI8egdTltqRgITGPsTFYtKYfxIG8ptX2PJHQ==} - - '@vue/compiler-dom@3.5.28': - resolution: {integrity: sha512-/1ZepxAb159jKR1btkefDP+J2xuWL5V3WtleRmxaT+K2Aqiek/Ab/+Ebrw2pPj0sdHO8ViAyyJWfhXXOP/+LQA==} - - '@vue/compiler-sfc@3.5.28': - resolution: {integrity: sha512-6TnKMiNkd6u6VeVDhZn/07KhEZuBSn43Wd2No5zaP5s3xm8IqFTHBj84HJah4UepSUJTro5SoqqlOY22FKY96g==} - - '@vue/compiler-ssr@3.5.28': - resolution: {integrity: sha512-JCq//9w1qmC6UGLWJX7RXzrGpKkroubey/ZFqTpvEIDJEKGgntuDMqkuWiZvzTzTA5h2qZvFBFHY7fAAa9475g==} - - '@vue/compiler-vue2@2.7.16': - resolution: {integrity: sha512-qYC3Psj9S/mfu9uVi5WvNZIzq+xnXMhOwbTFKKDD7b1lhpnn71jXSFdTQ+WsIEk0ONCd7VV2IMm7ONl6tbQ86A==} - - '@vue/language-core@2.2.12': - resolution: {integrity: sha512-IsGljWbKGU1MZpBPN+BvPAdr55YPkj2nB/TBNGNC32Vy2qLG25DYu/NBN2vNtZqdRbTRjaoYrahLrToim2NanA==} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - - '@vue/reactivity@3.5.28': - resolution: {integrity: sha512-gr5hEsxvn+RNyu9/9o1WtdYdwDjg5FgjUSBEkZWqgTKlo/fvwZ2+8W6AfKsc9YN2k/+iHYdS9vZYAhpi10kNaw==} - - '@vue/runtime-core@3.5.28': - resolution: {integrity: sha512-POVHTdbgnrBBIpnbYU4y7pOMNlPn2QVxVzkvEA2pEgvzbelQq4ZOUxbp2oiyo+BOtiYlm8Q44wShHJoBvDPAjQ==} - - '@vue/runtime-dom@3.5.28': - resolution: {integrity: sha512-4SXxSF8SXYMuhAIkT+eBRqOkWEfPu6nhccrzrkioA6l0boiq7sp18HCOov9qWJA5HML61kW8p/cB4MmBiG9dSA==} - - '@vue/server-renderer@3.5.28': - resolution: {integrity: sha512-pf+5ECKGj8fX95bNincbzJ6yp6nyzuLDhYZCeFxUNp8EBrQpPpQaLX3nNCp49+UbgbPun3CeVE+5CXVV1Xydfg==} - peerDependencies: - vue: 3.5.28 - - '@vue/shared@3.5.28': - resolution: {integrity: sha512-cfWa1fCGBxrvaHRhvV3Is0MgmrbSCxYTXCSCau2I0a1Xw1N1pHAvkWCiXPRAqjvToILvguNyEwjevUqAuBQWvQ==} - - '@xmldom/xmldom@0.8.11': - resolution: {integrity: sha512-cQzWCtO6C8TQiYl1ruKNn2U6Ao4o4WBBcbL61yJl84x+j5sOWWFU9X7DpND8XZG3daDppSsigMdfAIl2upQBRw==} - engines: {node: '>=10.0.0'} - - abbrev@3.0.1: - resolution: {integrity: sha512-AO2ac6pjRB3SJmGJo+v5/aK6Omggp6fsLrs6wN9bd35ulu4cCwaAU9+7ZhXjeqHVkaHThLuzH0nZr0YpCDhygg==} - engines: {node: ^18.17.0 || >=20.5.0} - - acorn-jsx@5.3.2: - resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} - peerDependencies: - acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - - acorn@8.15.0: - resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} - engines: {node: '>=0.4.0'} - hasBin: true - - agent-base@7.1.4: - resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==} - engines: {node: '>= 14'} - - ajv-keywords@3.5.2: - resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==} - peerDependencies: - ajv: ^6.9.1 - - ajv@6.12.6: - resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} - - alien-signals@1.0.13: - resolution: {integrity: sha512-OGj9yyTnJEttvzhTUWuscOvtqxq5vrhF7vL9oS0xJ2mK0ItPYP1/y+vCFebfxoEyAz0++1AIwJ5CMr+Fk3nDmg==} - - ansi-regex@5.0.1: - resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} - engines: {node: '>=8'} - - ansi-regex@6.2.2: - resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==} - engines: {node: '>=12'} - - ansi-styles@4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} - - ansi-styles@6.2.3: - resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} - engines: {node: '>=12'} - - app-builder-bin@5.0.0-alpha.12: - resolution: {integrity: sha512-j87o0j6LqPL3QRr8yid6c+Tt5gC7xNfYo6uQIQkorAC6MpeayVMZrEDzKmJJ/Hlv7EnOQpaRm53k6ktDYZyB6w==} - - app-builder-lib@26.7.0: - resolution: {integrity: sha512-/UgCD8VrO79Wv8aBNpjMfsS1pIUfIPURoRn0Ik6tMe5avdZF+vQgl/juJgipcMmH3YS0BD573lCdCHyoi84USg==} - engines: {node: '>=14.0.0'} - peerDependencies: - dmg-builder: 26.7.0 - electron-builder-squirrel-windows: 26.7.0 - - argparse@2.0.1: - resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - - assert-plus@1.0.0: - resolution: {integrity: sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==} - engines: {node: '>=0.8'} - - astral-regex@2.0.0: - resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} - engines: {node: '>=8'} - - async-exit-hook@2.0.1: - resolution: {integrity: sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw==} - engines: {node: '>=0.12.0'} - - async@3.2.6: - resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} - - asynckit@0.4.0: - resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} - - at-least-node@1.0.0: - resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} - engines: {node: '>= 4.0.0'} - - balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - - base64-js@1.5.1: - resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - - baseline-browser-mapping@2.9.19: - resolution: {integrity: sha512-ipDqC8FrAl/76p2SSWKSI+H9tFwm7vYqXQrItCuiVPt26Km0jS+NzSsBWAaBusvSbQcfJG+JitdMm+wZAgTYqg==} - hasBin: true - - better-sqlite3@12.6.2: - resolution: {integrity: sha512-8VYKM3MjCa9WcaSAI3hzwhmyHVlH8tiGFwf0RlTsZPWJ1I5MkzjiudCo4KC4DxOaL/53A5B1sI/IbldNFDbsKA==} - engines: {node: 20.x || 22.x || 23.x || 24.x || 25.x} - - bindings@1.5.0: - resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} - - bl@4.1.0: - resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} - - boolean@3.2.0: - resolution: {integrity: sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==} - deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. - - brace-expansion@1.1.12: - resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==} - - brace-expansion@2.0.2: - resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} - - browserslist@4.28.1: - resolution: {integrity: sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true - - buffer-crc32@0.2.13: - resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} - - buffer-from@1.1.2: - resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} - - buffer@5.7.1: - resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} - - builder-util-runtime@9.5.1: - resolution: {integrity: sha512-qt41tMfgHTllhResqM5DcnHyDIWNgzHvuY2jDcYP9iaGpkWxTUzV6GQjDeLnlR1/DtdlcsWQbA7sByMpmJFTLQ==} - engines: {node: '>=12.0.0'} - - builder-util@26.4.1: - resolution: {integrity: sha512-FlgH43XZ50w3UtS1RVGDWOz8v9qMXPC7upMtKMtBEnYdt1OVoS61NYhKm/4x+cIaWqJTXua0+VVPI+fSPGXNIw==} - - cac@6.7.14: - resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} - engines: {node: '>=8'} - - cacache@19.0.1: - resolution: {integrity: sha512-hdsUxulXCi5STId78vRVYEtDAjq99ICAUktLTeTYsLoTE6Z8dS0c8pWNCxwdrk9YfJeobDZc2Y186hD/5ZQgFQ==} - engines: {node: ^18.17.0 || >=20.5.0} - - cacheable-lookup@5.0.4: - resolution: {integrity: sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==} - engines: {node: '>=10.6.0'} - - cacheable-request@7.0.4: - resolution: {integrity: sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==} - engines: {node: '>=8'} - - call-bind-apply-helpers@1.0.2: - resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} - engines: {node: '>= 0.4'} - - callsites@3.1.0: - resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} - engines: {node: '>=6'} - - caniuse-lite@1.0.30001769: - resolution: {integrity: sha512-BCfFL1sHijQlBGWBMuJyhZUhzo7wer5sVj9hqekB/7xn0Ypy+pER/edCYQm4exbXj4WiySGp40P8UuTh6w1srg==} - - chalk@4.1.2: - resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} - engines: {node: '>=10'} - - chownr@1.1.4: - resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} - - chownr@3.0.0: - resolution: {integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==} - engines: {node: '>=18'} - - chromium-pickle-js@0.2.0: - resolution: {integrity: sha512-1R5Fho+jBq0DDydt+/vHWj5KJNJCKdARKOCwZUen84I5BreWoLqRLANH1U87eJy1tiASPtMnGqJJq0ZsLoRPOw==} - - ci-info@4.3.1: - resolution: {integrity: sha512-Wdy2Igu8OcBpI2pZePZ5oWjPC38tmDVx5WKUXKwlLYkA0ozo85sLsLvkBbBn/sZaSCMFOGZJ14fvW9t5/d7kdA==} - engines: {node: '>=8'} - - ci-info@4.4.0: - resolution: {integrity: sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==} - engines: {node: '>=8'} - - cli-cursor@3.1.0: - resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} - engines: {node: '>=8'} - - cli-spinners@2.9.2: - resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} - engines: {node: '>=6'} - - cli-truncate@2.1.0: - resolution: {integrity: sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==} - engines: {node: '>=8'} - - cliui@8.0.1: - resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} - engines: {node: '>=12'} - - clone-response@1.0.3: - resolution: {integrity: sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==} - - clone@1.0.4: - resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} - engines: {node: '>=0.8'} - - color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} - - color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - - combined-stream@1.0.8: - resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} - engines: {node: '>= 0.8'} - - commander@5.1.0: - resolution: {integrity: sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==} - engines: {node: '>= 6'} - - commander@9.5.0: - resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==} - engines: {node: ^12.20.0 || >=14} - - compare-version@0.1.2: - resolution: {integrity: sha512-pJDh5/4wrEnXX/VWRZvruAGHkzKdr46z11OlTPN+VrATlWWhSKewNCJ1futCO5C7eJB3nPMFZA1LeYtcFboZ2A==} - engines: {node: '>=0.10.0'} - - concat-map@0.0.1: - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - - convert-source-map@2.0.0: - resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} - - cookie@1.1.1: - resolution: {integrity: sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==} - engines: {node: '>=18'} - - core-util-is@1.0.2: - resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==} - - crc@3.8.0: - resolution: {integrity: sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==} - - cross-dirname@0.1.0: - resolution: {integrity: sha512-+R08/oI0nl3vfPcqftZRpytksBXDzOUveBq/NBVx0sUp1axwzPQrKinNx5yd5sxPu8j1wIy8AfnVQ+5eFdha6Q==} - - cross-spawn@7.0.6: - resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} - engines: {node: '>= 8'} - - crossws@0.4.4: - resolution: {integrity: sha512-w6c4OdpRNnudVmcgr7brb/+/HmYjMQvYToO/oTrprTwxRUiom3LYWU1PMWuD006okbUWpII1Ea9/+kwpUfmyRg==} - peerDependencies: - srvx: '>=0.7.1' - peerDependenciesMeta: - srvx: - optional: true - - csstype@3.2.3: - resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} - - de-indent@1.0.2: - resolution: {integrity: sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==} - - debug@4.4.3: - resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - - decompress-response@6.0.0: - resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} - engines: {node: '>=10'} - - deep-extend@0.6.0: - resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} - engines: {node: '>=4.0.0'} - - deep-is@0.1.4: - resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} - - defaults@1.0.4: - resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} - - defer-to-connect@2.0.1: - resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==} - engines: {node: '>=10'} - - define-data-property@1.1.4: - resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} - engines: {node: '>= 0.4'} - - define-properties@1.2.1: - resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} - engines: {node: '>= 0.4'} - - delayed-stream@1.0.0: - resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} - engines: {node: '>=0.4.0'} - - detect-libc@2.1.2: - resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} - engines: {node: '>=8'} - - detect-node@2.1.0: - resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==} - - dir-compare@4.2.0: - resolution: {integrity: sha512-2xMCmOoMrdQIPHdsTawECdNPwlVFB9zGcz3kuhmBO6U3oU+UQjsue0i8ayLKpgBcm+hcXPMVSGUN9d+pvJ6+VQ==} - - dmg-builder@26.7.0: - resolution: {integrity: sha512-uOOBA3f+kW3o4KpSoMQ6SNpdXU7WtxlJRb9vCZgOvqhTz4b3GjcoWKstdisizNZLsylhTMv8TLHFPFW0Uxsj/g==} - - dmg-license@1.0.11: - resolution: {integrity: sha512-ZdzmqwKmECOWJpqefloC5OJy1+WZBBse5+MR88z9g9Zn4VY+WYUkAyojmhzJckH5YbbZGcYIuGAkY5/Ys5OM2Q==} - engines: {node: '>=8'} - os: [darwin] - hasBin: true - - dotenv-expand@11.0.7: - resolution: {integrity: sha512-zIHwmZPRshsCdpMDyVsqGmgyP0yT8GAgXUnkdAoJisxvf33k7yO6OuoKmcTGuXPWSsm8Oh88nZicRLA9Y0rUeA==} - engines: {node: '>=12'} - - dotenv@16.6.1: - resolution: {integrity: sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==} - engines: {node: '>=12'} - - dunder-proto@1.0.1: - resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} - engines: {node: '>= 0.4'} - - eastasianwidth@0.2.0: - resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} - - ejs@3.1.10: - resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==} - engines: {node: '>=0.10.0'} - hasBin: true - - electron-builder-squirrel-windows@26.7.0: - resolution: {integrity: sha512-3EqkQK+q0kGshdPSKEPb2p5F75TENMKu6Fe5aTdeaPfdzFK4Yjp5L0d6S7K8iyvqIsGQ/ei4bnpyX9wt+kVCKQ==} - - electron-builder@26.7.0: - resolution: {integrity: sha512-LoXbCvSFxLesPneQ/fM7FB4OheIDA2tjqCdUkKlObV5ZKGhYgi5VHPHO/6UUOUodAlg7SrkPx7BZJPby+Vrtbg==} - engines: {node: '>=14.0.0'} - hasBin: true - - electron-publish@26.6.0: - resolution: {integrity: sha512-LsyHMMqbvJ2vsOvuWJ19OezgF2ANdCiHpIucDHNiLhuI+/F3eW98ouzWSRmXXi82ZOPZXC07jnIravY4YYwCLQ==} - - electron-to-chromium@1.5.286: - resolution: {integrity: sha512-9tfDXhJ4RKFNerfjdCcZfufu49vg620741MNs26a9+bhLThdB+plgMeou98CAaHu/WATj2iHOOHTp1hWtABj2A==} - - electron-updater@6.7.3: - resolution: {integrity: sha512-EgkT8Z9noqXKbwc3u5FkJA+r48jwZ5DTUiOkJMOTEEH//n5Am6wfQGz7nvSFEA2oIAMv9jRzn5JKTyWeSKOPgg==} - - electron-vite@5.0.0: - resolution: {integrity: sha512-OHp/vjdlubNlhNkPkL/+3JD34ii5ov7M0GpuXEVdQeqdQ3ulvVR7Dg/rNBLfS5XPIFwgoBLDf9sjjrL+CuDyRQ==} - engines: {node: ^20.19.0 || >=22.12.0} - hasBin: true - peerDependencies: - '@swc/core': ^1.0.0 - vite: ^5.0.0 || ^6.0.0 || ^7.0.0 - peerDependenciesMeta: - '@swc/core': - optional: true - - electron-winstaller@5.4.0: - resolution: {integrity: sha512-bO3y10YikuUwUuDUQRM4KfwNkKhnpVO7IPdbsrejwN9/AABJzzTQ4GeHwyzNSrVO+tEH3/Np255a3sVZpZDjvg==} - engines: {node: '>=8.0.0'} - - electron@39.5.2: - resolution: {integrity: sha512-EiGFKoTjCuJTsdNxSwOiKJvRbWOFHTmqnnVftpUUZf7rdMkvM6yn9i55uLNDKefvTE69M+vfMgGLa7HuY94WZg==} - engines: {node: '>= 12.20.55'} - hasBin: true - - elysia@1.4.25: - resolution: {integrity: sha512-liKjavH99Gpzrv9cDil6uYWmPuqESfPFV1FIaFSd3iNqo3y7e29sN43VxFIK8tWWnyi6eDAmi2SZk8hNAMQMyg==} - peerDependencies: - '@sinclair/typebox': '>= 0.34.0 < 1' - '@types/bun': '>= 1.2.0' - exact-mirror: '>= 0.0.9' - file-type: '>= 20.0.0' - openapi-types: '>= 12.0.0' - typescript: '>= 5.0.0' - peerDependenciesMeta: - '@types/bun': - optional: true - typescript: - optional: true - - emoji-regex@8.0.0: - resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - - emoji-regex@9.2.2: - resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} - - encoding@0.1.13: - resolution: {integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==} - - end-of-stream@1.4.5: - resolution: {integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==} - - entities@7.0.1: - resolution: {integrity: sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==} - engines: {node: '>=0.12'} - - env-paths@2.2.1: - resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} - engines: {node: '>=6'} - - err-code@2.0.3: - resolution: {integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==} - - es-define-property@1.0.1: - resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} - engines: {node: '>= 0.4'} - - es-errors@1.3.0: - resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} - engines: {node: '>= 0.4'} - - es-object-atoms@1.1.1: - resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} - engines: {node: '>= 0.4'} - - es-set-tostringtag@2.1.0: - resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} - engines: {node: '>= 0.4'} - - es6-error@4.1.1: - resolution: {integrity: sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==} - - esbuild@0.25.12: - resolution: {integrity: sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==} - engines: {node: '>=18'} - hasBin: true - - esbuild@0.27.3: - resolution: {integrity: sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg==} - engines: {node: '>=18'} - hasBin: true - - escalade@3.2.0: - resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} - engines: {node: '>=6'} - - escape-string-regexp@4.0.0: - resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} - engines: {node: '>=10'} - - eslint-config-prettier@10.1.8: - resolution: {integrity: sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==} - hasBin: true - peerDependencies: - eslint: '>=7.0.0' - - eslint-plugin-prettier@5.5.5: - resolution: {integrity: sha512-hscXkbqUZ2sPithAuLm5MXL+Wph+U7wHngPBv9OMWwlP8iaflyxpjTYZkmdgB4/vPIhemRlBEoLrH7UC1n7aUw==} - engines: {node: ^14.18.0 || >=16.0.0} - peerDependencies: - '@types/eslint': '>=8.0.0' - eslint: '>=8.0.0' - eslint-config-prettier: '>= 7.0.0 <10.0.0 || >=10.1.0' - prettier: '>=3.0.0' - peerDependenciesMeta: - '@types/eslint': - optional: true - eslint-config-prettier: - optional: true - - eslint-scope@8.4.0: - resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - eslint-visitor-keys@3.4.3: - resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - eslint-visitor-keys@4.2.1: - resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - eslint@9.39.2: - resolution: {integrity: sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - hasBin: true - peerDependencies: - jiti: '*' - peerDependenciesMeta: - jiti: - optional: true - - espree@10.4.0: - resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - esquery@1.7.0: - resolution: {integrity: sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==} - engines: {node: '>=0.10'} - - esrecurse@4.3.0: - resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} - engines: {node: '>=4.0'} - - estraverse@5.3.0: - resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} - engines: {node: '>=4.0'} - - estree-walker@2.0.2: - resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} - - esutils@2.0.3: - resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} - engines: {node: '>=0.10.0'} - - exact-mirror@0.2.7: - resolution: {integrity: sha512-+MeEmDcLA4o/vjK2zujgk+1VTxPR4hdp23qLqkWfStbECtAq9gmsvQa3LW6z/0GXZyHJobrCnmy1cdeE7BjsYg==} - peerDependencies: - '@sinclair/typebox': ^0.34.15 - peerDependenciesMeta: - '@sinclair/typebox': - optional: true - - expand-template@2.0.3: - resolution: {integrity: sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==} - engines: {node: '>=6'} - - exponential-backoff@3.1.3: - resolution: {integrity: sha512-ZgEeZXj30q+I0EN+CbSSpIyPaJ5HVQD18Z1m+u1FXbAeT94mr1zw50q4q6jiiC447Nl/YTcIYSAftiGqetwXCA==} - - extract-zip@2.0.1: - resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==} - engines: {node: '>= 10.17.0'} - hasBin: true - - extsprintf@1.4.1: - resolution: {integrity: sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA==} - engines: {'0': node >=0.6.0} - - fast-decode-uri-component@1.0.1: - resolution: {integrity: sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg==} - - fast-deep-equal@3.1.3: - resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - - fast-diff@1.3.0: - resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} - - fast-json-stable-stringify@2.1.0: - resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} - - fast-levenshtein@2.0.6: - resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - - fd-slicer@1.1.0: - resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} - - fdir@6.5.0: - resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} - engines: {node: '>=12.0.0'} - peerDependencies: - picomatch: ^3 || ^4 - peerDependenciesMeta: - picomatch: - optional: true - - file-entry-cache@8.0.0: - resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} - engines: {node: '>=16.0.0'} - - file-type@21.3.0: - resolution: {integrity: sha512-8kPJMIGz1Yt/aPEwOsrR97ZyZaD1Iqm8PClb1nYFclUCkBi0Ma5IsYNQzvSFS9ib51lWyIw5mIT9rWzI/xjpzA==} - engines: {node: '>=20'} - - file-uri-to-path@1.0.0: - resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} - - filelist@1.0.4: - resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} - - find-up@5.0.0: - resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} - engines: {node: '>=10'} - - flat-cache@4.0.1: - resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} - engines: {node: '>=16'} - - flatted@3.3.3: - resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} - - foreground-child@3.3.1: - resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} - engines: {node: '>=14'} - - form-data@4.0.5: - resolution: {integrity: sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==} - engines: {node: '>= 6'} - - fs-constants@1.0.0: - resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} - - fs-extra@10.1.0: - resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} - engines: {node: '>=12'} - - fs-extra@11.3.3: - resolution: {integrity: sha512-VWSRii4t0AFm6ixFFmLLx1t7wS1gh+ckoa84aOeapGum0h+EZd1EhEumSB+ZdDLnEPuucsVB9oB7cxJHap6Afg==} - engines: {node: '>=14.14'} - - fs-extra@7.0.1: - resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==} - engines: {node: '>=6 <7 || >=8'} - - fs-extra@8.1.0: - resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} - engines: {node: '>=6 <7 || >=8'} - - fs-extra@9.1.0: - resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} - engines: {node: '>=10'} - - fs-minipass@3.0.3: - resolution: {integrity: sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - - fs.realpath@1.0.0: - resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - - fsevents@2.3.3: - resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - - function-bind@1.1.2: - resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - - gensync@1.0.0-beta.2: - resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} - engines: {node: '>=6.9.0'} - - get-caller-file@2.0.5: - resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} - engines: {node: 6.* || 8.* || >= 10.*} - - get-intrinsic@1.3.0: - resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} - engines: {node: '>= 0.4'} - - get-proto@1.0.1: - resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} - engines: {node: '>= 0.4'} - - get-stream@5.2.0: - resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} - engines: {node: '>=8'} - - github-from-package@0.0.0: - resolution: {integrity: sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==} - - glob-parent@6.0.2: - resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} - engines: {node: '>=10.13.0'} - - glob@10.4.5: - resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} - hasBin: true - - glob@7.2.3: - resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} - deprecated: Glob versions prior to v9 are no longer supported - - global-agent@3.0.0: - resolution: {integrity: sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==} - engines: {node: '>=10.0'} - - globals@14.0.0: - resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} - engines: {node: '>=18'} - - globals@16.5.0: - resolution: {integrity: sha512-c/c15i26VrJ4IRt5Z89DnIzCGDn9EcebibhAOjw5ibqEHsE1wLUgkPn9RDmNcUKyU87GeaL633nyJ+pplFR2ZQ==} - engines: {node: '>=18'} - - globalthis@1.0.4: - resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} - engines: {node: '>= 0.4'} - - gopd@1.2.0: - resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} - engines: {node: '>= 0.4'} - - got@11.8.6: - resolution: {integrity: sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==} - engines: {node: '>=10.19.0'} - - graceful-fs@4.2.11: - resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - - has-flag@4.0.0: - resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} - engines: {node: '>=8'} - - has-property-descriptors@1.0.2: - resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} - - has-symbols@1.1.0: - resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} - engines: {node: '>= 0.4'} - - has-tostringtag@1.0.2: - resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} - engines: {node: '>= 0.4'} - - hasown@2.0.2: - resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} - engines: {node: '>= 0.4'} - - he@1.2.0: - resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} - hasBin: true - - hosted-git-info@4.1.0: - resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==} - engines: {node: '>=10'} - - http-cache-semantics@4.2.0: - resolution: {integrity: sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==} - - http-proxy-agent@7.0.2: - resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} - engines: {node: '>= 14'} - - http2-wrapper@1.0.3: - resolution: {integrity: sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==} - engines: {node: '>=10.19.0'} - - https-proxy-agent@7.0.6: - resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} - engines: {node: '>= 14'} - - iconv-corefoundation@1.1.7: - resolution: {integrity: sha512-T10qvkw0zz4wnm560lOEg0PovVqUXuOFhhHAkixw8/sycy7TJt7v/RrkEKEQnAw2viPSJu6iAkErxnzR0g8PpQ==} - engines: {node: ^8.11.2 || >=10} - os: [darwin] - - iconv-lite@0.6.3: - resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} - engines: {node: '>=0.10.0'} - - ieee754@1.2.1: - resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} - - ignore@5.3.2: - resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} - engines: {node: '>= 4'} - - ignore@7.0.5: - resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==} - engines: {node: '>= 4'} - - import-fresh@3.3.1: - resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} - engines: {node: '>=6'} - - imurmurhash@0.1.4: - resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} - engines: {node: '>=0.8.19'} - - inflight@1.0.6: - resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} - deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. - - inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - - ini@1.3.8: - resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} - - ip-address@10.1.0: - resolution: {integrity: sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==} - engines: {node: '>= 12'} - - is-extglob@2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} - engines: {node: '>=0.10.0'} - - is-fullwidth-code-point@3.0.0: - resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} - engines: {node: '>=8'} - - is-glob@4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} - - is-interactive@1.0.0: - resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} - engines: {node: '>=8'} - - is-unicode-supported@0.1.0: - resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} - engines: {node: '>=10'} - - isbinaryfile@4.0.10: - resolution: {integrity: sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==} - engines: {node: '>= 8.0.0'} - - isbinaryfile@5.0.7: - resolution: {integrity: sha512-gnWD14Jh3FzS3CPhF0AxNOJ8CxqeblPTADzI38r0wt8ZyQl5edpy75myt08EG2oKvpyiqSqsx+Wkz9vtkbTqYQ==} - engines: {node: '>= 18.0.0'} - - isexe@2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - - isexe@3.1.5: - resolution: {integrity: sha512-6B3tLtFqtQS4ekarvLVMZ+X+VlvQekbe4taUkf/rhVO3d/h0M2rfARm/pXLcPEsjjMsFgrFgSrhQIxcSVrBz8w==} - engines: {node: '>=18'} - - jackspeak@3.4.3: - resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} - - jake@10.9.4: - resolution: {integrity: sha512-wpHYzhxiVQL+IV05BLE2Xn34zW1S223hvjtqk0+gsPrwd/8JNLXJgZZM/iPFsYc1xyphF+6M6EvdE5E9MBGkDA==} - engines: {node: '>=10'} - hasBin: true - - jiti@2.6.1: - resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} - hasBin: true - - js-tokens@4.0.0: - resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - - js-yaml@4.1.1: - resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==} - hasBin: true - - jsesc@3.1.0: - resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} - engines: {node: '>=6'} - hasBin: true - - json-buffer@3.0.1: - resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} - - json-schema-traverse@0.4.1: - resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} - - json-stable-stringify-without-jsonify@1.0.1: - resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} - - json-stringify-safe@5.0.1: - resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} - - json5@2.2.3: - resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} - engines: {node: '>=6'} - hasBin: true - - jsonfile@4.0.0: - resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} - - jsonfile@6.2.0: - resolution: {integrity: sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==} - - keyv@4.5.4: - resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} - - lazy-val@1.0.5: - resolution: {integrity: sha512-0/BnGCCfyUMkBpeDgWihanIAF9JmZhHBgUhEqzvf+adhNGLoP6TaiI5oF8oyb3I45P+PcnrqihSf01M0l0G5+Q==} - - levn@0.4.1: - resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} - engines: {node: '>= 0.8.0'} - - locate-path@6.0.0: - resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} - engines: {node: '>=10'} - - lodash.escaperegexp@4.1.2: - resolution: {integrity: sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw==} - - lodash.isequal@4.5.0: - resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==} - deprecated: This package is deprecated. Use require('node:util').isDeepStrictEqual instead. - - lodash.merge@4.6.2: - resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} - - lodash@4.17.23: - resolution: {integrity: sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==} - - log-symbols@4.1.0: - resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} - engines: {node: '>=10'} - - lowercase-keys@2.0.0: - resolution: {integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==} - engines: {node: '>=8'} - - lru-cache@10.4.3: - resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} - - lru-cache@5.1.1: - resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} - - lru-cache@6.0.0: - resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} - engines: {node: '>=10'} - - magic-string@0.30.21: - resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} - - make-fetch-happen@14.0.3: - resolution: {integrity: sha512-QMjGbFTP0blj97EeidG5hk/QhKQ3T4ICckQGLgz38QF7Vgbk6e6FTARN8KhKxyBbWn8R0HU+bnw8aSoFPD4qtQ==} - engines: {node: ^18.17.0 || >=20.5.0} - - matcher@3.0.0: - resolution: {integrity: sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==} - engines: {node: '>=10'} - - math-intrinsics@1.1.0: - resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} - engines: {node: '>= 0.4'} - - memoirist@0.4.0: - resolution: {integrity: sha512-zxTgA0mSYELa66DimuNQDvyLq36AwDlTuVRbnQtB+VuTcKWm5Qc4z3WkSpgsFWHNhexqkIooqpv4hdcqrX5Nmg==} - - mime-db@1.52.0: - resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} - engines: {node: '>= 0.6'} - - mime-types@2.1.35: - resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} - engines: {node: '>= 0.6'} - - mime@2.6.0: - resolution: {integrity: sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==} - engines: {node: '>=4.0.0'} - hasBin: true - - mimic-fn@2.1.0: - resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} - engines: {node: '>=6'} - - mimic-response@1.0.1: - resolution: {integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==} - engines: {node: '>=4'} - - mimic-response@3.1.0: - resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} - engines: {node: '>=10'} - - minimatch@10.1.2: - resolution: {integrity: sha512-fu656aJ0n2kcXwsnwnv9g24tkU5uSmOlTjd6WyyaKm2Z+h1qmY6bAjrcaIxF/BslFqbZ8UBtbJi7KgQOZD2PTw==} - engines: {node: 20 || >=22} - - minimatch@3.1.2: - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} - - minimatch@5.1.6: - resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} - engines: {node: '>=10'} - - minimatch@9.0.5: - resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} - engines: {node: '>=16 || 14 >=14.17'} - - minimist@1.2.8: - resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - - minipass-collect@2.0.1: - resolution: {integrity: sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==} - engines: {node: '>=16 || 14 >=14.17'} - - minipass-fetch@4.0.1: - resolution: {integrity: sha512-j7U11C5HXigVuutxebFadoYBbd7VSdZWggSe64NVdvWNBqGAiXPL2QVCehjmw7lY1oF9gOllYbORh+hiNgfPgQ==} - engines: {node: ^18.17.0 || >=20.5.0} - - minipass-flush@1.0.5: - resolution: {integrity: sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==} - engines: {node: '>= 8'} - - minipass-pipeline@1.2.4: - resolution: {integrity: sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==} - engines: {node: '>=8'} - - minipass-sized@1.0.3: - resolution: {integrity: sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==} - engines: {node: '>=8'} - - minipass@3.3.6: - resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} - engines: {node: '>=8'} - - minipass@7.1.2: - resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} - engines: {node: '>=16 || 14 >=14.17'} - - minizlib@3.1.0: - resolution: {integrity: sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==} - engines: {node: '>= 18'} - - mkdirp-classic@0.5.3: - resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} - - mkdirp@0.5.6: - resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} - hasBin: true - - ms@2.1.3: - resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - - muggle-string@0.4.1: - resolution: {integrity: sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==} - - nanoid@3.3.11: - resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true - - napi-build-utils@2.0.0: - resolution: {integrity: sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==} - - natural-compare@1.4.0: - resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - - negotiator@1.0.0: - resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==} - engines: {node: '>= 0.6'} - - node-abi@3.87.0: - resolution: {integrity: sha512-+CGM1L1CgmtheLcBuleyYOn7NWPVu0s0EJH2C4puxgEZb9h8QpR9G2dBfZJOAUhi7VQxuBPMd0hiISWcTyiYyQ==} - engines: {node: '>=10'} - - node-abi@4.26.0: - resolution: {integrity: sha512-8QwIZqikRvDIkXS2S93LjzhsSPJuIbfaMETWH+Bx8oOT9Sa9UsUtBFQlc3gBNd1+QINjaTloitXr1W3dQLi9Iw==} - engines: {node: '>=22.12.0'} - - node-addon-api@1.7.2: - resolution: {integrity: sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg==} - - node-api-version@0.2.1: - resolution: {integrity: sha512-2xP/IGGMmmSQpI1+O/k72jF/ykvZ89JeuKX3TLJAYPDVLUalrshrLHkeVcCCZqG/eEa635cr8IBYzgnDvM2O8Q==} - - node-gyp@11.5.0: - resolution: {integrity: sha512-ra7Kvlhxn5V9Slyus0ygMa2h+UqExPqUIkfk7Pc8QTLT956JLSy51uWFwHtIYy0vI8cB4BDhc/S03+880My/LQ==} - engines: {node: ^18.17.0 || >=20.5.0} - hasBin: true - - node-releases@2.0.27: - resolution: {integrity: sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==} - - nopt@8.1.0: - resolution: {integrity: sha512-ieGu42u/Qsa4TFktmaKEwM6MQH0pOWnaB3htzh0JRtx84+Mebc0cbZYN5bC+6WTZ4+77xrL9Pn5m7CV6VIkV7A==} - engines: {node: ^18.17.0 || >=20.5.0} - hasBin: true - - normalize-url@6.1.0: - resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==} - engines: {node: '>=10'} - - object-keys@1.1.1: - resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} - engines: {node: '>= 0.4'} - - once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - - onetime@5.1.2: - resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} - engines: {node: '>=6'} - - openapi-types@12.1.3: - resolution: {integrity: sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw==} - - optionator@0.9.4: - resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} - engines: {node: '>= 0.8.0'} - - ora@5.4.1: - resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} - engines: {node: '>=10'} - - p-cancelable@2.1.1: - resolution: {integrity: sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==} - engines: {node: '>=8'} - - p-limit@3.1.0: - resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} - engines: {node: '>=10'} - - p-locate@5.0.0: - resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} - engines: {node: '>=10'} - - p-map@7.0.4: - resolution: {integrity: sha512-tkAQEw8ysMzmkhgw8k+1U/iPhWNhykKnSk4Rd5zLoPJCuJaGRPo6YposrZgaxHKzDHdDWWZvE/Sk7hsL2X/CpQ==} - engines: {node: '>=18'} - - package-json-from-dist@1.0.1: - resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} - - parent-module@1.0.1: - resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} - engines: {node: '>=6'} - - path-browserify@1.0.1: - resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} - - path-exists@4.0.0: - resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} - engines: {node: '>=8'} - - path-is-absolute@1.0.1: - resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} - engines: {node: '>=0.10.0'} - - path-key@3.1.1: - resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} - engines: {node: '>=8'} - - path-scurry@1.11.1: - resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} - engines: {node: '>=16 || 14 >=14.18'} - - pe-library@0.4.1: - resolution: {integrity: sha512-eRWB5LBz7PpDu4PUlwT0PhnQfTQJlDDdPa35urV4Osrm0t0AqQFGn+UIkU3klZvwJ8KPO3VbBFsXquA6p6kqZw==} - engines: {node: '>=12', npm: '>=6'} - - pend@1.2.0: - resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} - - picocolors@1.1.1: - resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} - - picomatch@4.0.3: - resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} - engines: {node: '>=12'} - - plist@3.1.0: - resolution: {integrity: sha512-uysumyrvkUX0rX/dEVqt8gC3sTBzd4zoWfLeS29nb53imdaXVvLINYXTI2GNqzaMuvacNx4uJQ8+b3zXR0pkgQ==} - engines: {node: '>=10.4.0'} - - postcss@8.5.6: - resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} - engines: {node: ^10 || ^12 || >=14} - - postject@1.0.0-alpha.6: - resolution: {integrity: sha512-b9Eb8h2eVqNE8edvKdwqkrY6O7kAwmI8kcnBv1NScolYJbo59XUF0noFq+lxbC1yN20bmC0WBEbDC5H/7ASb0A==} - engines: {node: '>=14.0.0'} - hasBin: true - - prebuild-install@7.1.3: - resolution: {integrity: sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==} - engines: {node: '>=10'} - hasBin: true - - prelude-ls@1.2.1: - resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} - engines: {node: '>= 0.8.0'} - - prettier-linter-helpers@1.0.1: - resolution: {integrity: sha512-SxToR7P8Y2lWmv/kTzVLC1t/GDI2WGjMwNhLLE9qtH8Q13C+aEmuRlzDst4Up4s0Wc8sF2M+J57iB3cMLqftfg==} - engines: {node: '>=6.0.0'} - - prettier@3.8.1: - resolution: {integrity: sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg==} - engines: {node: '>=14'} - hasBin: true - - proc-log@5.0.0: - resolution: {integrity: sha512-Azwzvl90HaF0aCz1JrDdXQykFakSSNPaPoiZ9fm5qJIMHioDZEi7OAdRwSm6rSoPtY3Qutnm3L7ogmg3dc+wbQ==} - engines: {node: ^18.17.0 || >=20.5.0} - - progress@2.0.3: - resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} - engines: {node: '>=0.4.0'} - - promise-retry@2.0.1: - resolution: {integrity: sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==} - engines: {node: '>=10'} - - proper-lockfile@4.1.2: - resolution: {integrity: sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==} - - pump@3.0.3: - resolution: {integrity: sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==} - - punycode@2.3.1: - resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} - engines: {node: '>=6'} - - quick-lru@5.1.1: - resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} - engines: {node: '>=10'} - - rc@1.2.8: - resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} - hasBin: true - - read-binary-file-arch@1.0.6: - resolution: {integrity: sha512-BNg9EN3DD3GsDXX7Aa8O4p92sryjkmzYYgmgTAc6CA4uGLEDzFfxOxugu21akOxpcXHiEgsYkC6nPsQvLLLmEg==} - hasBin: true - - readable-stream@3.6.2: - resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} - engines: {node: '>= 6'} - - require-directory@2.1.1: - resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} - engines: {node: '>=0.10.0'} - - resedit@1.7.2: - resolution: {integrity: sha512-vHjcY2MlAITJhC0eRD/Vv8Vlgmu9Sd3LX9zZvtGzU5ZImdTN3+d6e/4mnTyV8vEbyf1sgNIrWxhWlrys52OkEA==} - engines: {node: '>=12', npm: '>=6'} - - resolve-alpn@1.2.1: - resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==} - - resolve-from@4.0.0: - resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} - engines: {node: '>=4'} - - responselike@2.0.1: - resolution: {integrity: sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==} - - restore-cursor@3.1.0: - resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} - engines: {node: '>=8'} - - retry@0.12.0: - resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} - engines: {node: '>= 4'} - - rimraf@2.6.3: - resolution: {integrity: sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==} - deprecated: Rimraf versions prior to v4 are no longer supported - hasBin: true - - roarr@2.15.4: - resolution: {integrity: sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==} - engines: {node: '>=8.0'} - - rollup@4.57.1: - resolution: {integrity: sha512-oQL6lgK3e2QZeQ7gcgIkS2YZPg5slw37hYufJ3edKlfQSGGm8ICoxswK15ntSzF/a8+h7ekRy7k7oWc3BQ7y8A==} - engines: {node: '>=18.0.0', npm: '>=8.0.0'} - hasBin: true - - safe-buffer@5.2.1: - resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - - safer-buffer@2.1.2: - resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - - sanitize-filename@1.6.3: - resolution: {integrity: sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==} - - sax@1.4.4: - resolution: {integrity: sha512-1n3r/tGXO6b6VXMdFT54SHzT9ytu9yr7TaELowdYpMqY/Ao7EnlQGmAQ1+RatX7Tkkdm6hONI2owqNx2aZj5Sw==} - engines: {node: '>=11.0.0'} - - semver-compare@1.0.0: - resolution: {integrity: sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==} - - semver@5.7.2: - resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} - hasBin: true - - semver@6.3.1: - resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} - hasBin: true - - semver@7.7.4: - resolution: {integrity: sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==} - engines: {node: '>=10'} - hasBin: true - - serialize-error@7.0.1: - resolution: {integrity: sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==} - engines: {node: '>=10'} - - shebang-command@2.0.0: - resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} - engines: {node: '>=8'} - - shebang-regex@3.0.0: - resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} - engines: {node: '>=8'} - - signal-exit@3.0.7: - resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} - - signal-exit@4.1.0: - resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} - engines: {node: '>=14'} - - simple-concat@1.0.1: - resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==} - - simple-get@4.0.1: - resolution: {integrity: sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==} - - simple-update-notifier@2.0.0: - resolution: {integrity: sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==} - engines: {node: '>=10'} - - slice-ansi@3.0.0: - resolution: {integrity: sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==} - engines: {node: '>=8'} - - smart-buffer@4.2.0: - resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} - engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} - - socks-proxy-agent@8.0.5: - resolution: {integrity: sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==} - engines: {node: '>= 14'} - - socks@2.8.7: - resolution: {integrity: sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==} - engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} - - source-map-js@1.2.1: - resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} - engines: {node: '>=0.10.0'} - - source-map-support@0.5.21: - resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} - - source-map@0.6.1: - resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} - engines: {node: '>=0.10.0'} - - sprintf-js@1.1.3: - resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==} - - srvx@0.11.4: - resolution: {integrity: sha512-m/2p87bqWZ94xpRN06qNBwh0xq/D0dXajnvPDSHFqrTogxuTWYNP1UHz6Cf+oY7D+NPLY35TJAp4ESIKn0WArQ==} - engines: {node: '>=20.16.0'} - hasBin: true - - ssri@12.0.0: - resolution: {integrity: sha512-S7iGNosepx9RadX82oimUkvr0Ct7IjJbEbs4mJcTxst8um95J3sDYU1RBEOvdu6oL1Wek2ODI5i4MAw+dZ6cAQ==} - engines: {node: ^18.17.0 || >=20.5.0} - - stat-mode@1.0.0: - resolution: {integrity: sha512-jH9EhtKIjuXZ2cWxmXS8ZP80XyC3iasQxMDV8jzhNJpfDb7VbQLVW4Wvsxz9QZvzV+G4YoSfBUVKDOyxLzi/sg==} - engines: {node: '>= 6'} - - string-width@4.2.3: - resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} - engines: {node: '>=8'} - - string-width@5.1.2: - resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} - engines: {node: '>=12'} - - string_decoder@1.3.0: - resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} - - strip-ansi@6.0.1: - resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} - engines: {node: '>=8'} - - strip-ansi@7.1.2: - resolution: {integrity: sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==} - engines: {node: '>=12'} - - strip-json-comments@2.0.1: - resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} - engines: {node: '>=0.10.0'} - - strip-json-comments@3.1.1: - resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} - engines: {node: '>=8'} - - strtok3@10.3.4: - resolution: {integrity: sha512-KIy5nylvC5le1OdaaoCJ07L+8iQzJHGH6pWDuzS+d07Cu7n1MZ2x26P8ZKIWfbK02+XIL8Mp4RkWeqdUCrDMfg==} - engines: {node: '>=18'} - - sumchecker@3.0.1: - resolution: {integrity: sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==} - engines: {node: '>= 8.0'} - - supports-color@7.2.0: - resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} - engines: {node: '>=8'} - - synckit@0.11.12: - resolution: {integrity: sha512-Bh7QjT8/SuKUIfObSXNHNSK6WHo6J1tHCqJsuaFDP7gP0fkzSfTxI8y85JrppZ0h8l0maIgc2tfuZQ6/t3GtnQ==} - engines: {node: ^14.18.0 || >=16.0.0} - - tar-fs@2.1.4: - resolution: {integrity: sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ==} - - tar-stream@2.2.0: - resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} - engines: {node: '>=6'} - - tar@7.5.7: - resolution: {integrity: sha512-fov56fJiRuThVFXD6o6/Q354S7pnWMJIVlDBYijsTNx6jKSE4pvrDTs6lUnmGvNyfJwFQQwWy3owKz1ucIhveQ==} - engines: {node: '>=18'} - - temp-file@3.4.0: - resolution: {integrity: sha512-C5tjlC/HCtVUOi3KWVokd4vHVViOmGjtLwIh4MuzPo/nMYTV/p1urt3RnMz2IWXDdKEGJH3k5+KPxtqRsUYGtg==} - - temp@0.9.4: - resolution: {integrity: sha512-yYrrsWnrXMcdsnu/7YMYAofM1ktpL5By7vZhf15CrXijWWrEYZks5AXBudalfSWJLlnen/QUJUB5aoB0kqZUGA==} - engines: {node: '>=6.0.0'} - - tiny-async-pool@1.3.0: - resolution: {integrity: sha512-01EAw5EDrcVrdgyCLgoSPvqznC0sVxDSVeiOz09FUpjh71G79VCqneOr+xvt7T1r76CF6ZZfPjHorN2+d+3mqA==} - - tiny-typed-emitter@2.1.0: - resolution: {integrity: sha512-qVtvMxeXbVej0cQWKqVSSAHmKZEHAvxdF8HEUBFWts8h+xEo5m/lEiPakuyZ3BnCBjOD8i24kzNOiOLLgsSxhA==} - - tinyglobby@0.2.15: - resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} - engines: {node: '>=12.0.0'} - - tmp-promise@3.0.3: - resolution: {integrity: sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==} - - tmp@0.2.5: - resolution: {integrity: sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==} - engines: {node: '>=14.14'} - - token-types@6.1.2: - resolution: {integrity: sha512-dRXchy+C0IgK8WPC6xvCHFRIWYUbqqdEIKPaKo/AcTUNzwLTK6AH7RjdLWsEZcAN/TBdtfUw3PYEgPr5VPr6ww==} - engines: {node: '>=14.16'} - - truncate-utf8-bytes@1.0.2: - resolution: {integrity: sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==} - - ts-api-utils@2.4.0: - resolution: {integrity: sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA==} - engines: {node: '>=18.12'} - peerDependencies: - typescript: '>=4.8.4' - - tunnel-agent@0.6.0: - resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} - - type-check@0.4.0: - resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} - engines: {node: '>= 0.8.0'} - - type-fest@0.13.1: - resolution: {integrity: sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==} - engines: {node: '>=10'} - - typescript-eslint@8.55.0: - resolution: {integrity: sha512-HE4wj+r5lmDVS9gdaN0/+iqNvPZwGfnJ5lZuz7s5vLlg9ODw0bIiiETaios9LvFI1U94/VBXGm3CB2Y5cNFMpw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' - - typescript@5.9.3: - resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} - engines: {node: '>=14.17'} - hasBin: true - - uint8array-extras@1.5.0: - resolution: {integrity: sha512-rvKSBiC5zqCCiDZ9kAOszZcDvdAHwwIKJG33Ykj43OKcWsnmcBRL09YTU4nOeHZ8Y2a7l1MgTd08SBe9A8Qj6A==} - engines: {node: '>=18'} - - undici-types@6.21.0: - resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} - - unique-filename@4.0.0: - resolution: {integrity: sha512-XSnEewXmQ+veP7xX2dS5Q4yZAvO40cBN2MWkJ7D/6sW4Dg6wYBNwM1Vrnz1FhH5AdeLIlUXRI9e28z1YZi71NQ==} - engines: {node: ^18.17.0 || >=20.5.0} - - unique-slug@5.0.0: - resolution: {integrity: sha512-9OdaqO5kwqR+1kVgHAhsp5vPNU0hnxRa26rBFNfNgM7M6pNtgzeBn3s/xbyCQL3dcjzOatcef6UUHpB/6MaETg==} - engines: {node: ^18.17.0 || >=20.5.0} - - universalify@0.1.2: - resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} - engines: {node: '>= 4.0.0'} - - universalify@2.0.1: - resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} - engines: {node: '>= 10.0.0'} - - update-browserslist-db@1.2.3: - resolution: {integrity: sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==} - hasBin: true - peerDependencies: - browserslist: '>= 4.21.0' - - uri-js@4.4.1: - resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} - - utf8-byte-length@1.0.5: - resolution: {integrity: sha512-Xn0w3MtiQ6zoz2vFyUVruaCL53O/DwUvkEeOvj+uulMm0BkUGYWmBYVyElqZaSLhY6ZD0ulfU3aBra2aVT4xfA==} - - util-deprecate@1.0.2: - resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - - verror@1.10.1: - resolution: {integrity: sha512-veufcmxri4e3XSrT0xwfUR7kguIkaxBeosDg00yDWhk49wdwkSUrvvsm7nc75e1PUyvIeZj6nS8VQRYz2/S4Xg==} - engines: {node: '>=0.6.0'} - - vite@7.3.1: - resolution: {integrity: sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==} - engines: {node: ^20.19.0 || >=22.12.0} - hasBin: true - peerDependencies: - '@types/node': ^20.19.0 || >=22.12.0 - jiti: '>=1.21.0' - less: ^4.0.0 - lightningcss: ^1.21.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 - jiti: - optional: true - less: - optional: true - lightningcss: - optional: true - sass: - optional: true - sass-embedded: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true - tsx: - optional: true - yaml: - optional: true - - vscode-uri@3.1.0: - resolution: {integrity: sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==} - - vue-tsc@2.2.12: - resolution: {integrity: sha512-P7OP77b2h/Pmk+lZdJ0YWs+5tJ6J2+uOQPo7tlBnY44QqQSPYvS0qVT4wqDJgwrZaLe47etJLLQRFia71GYITw==} - hasBin: true - peerDependencies: - typescript: '>=5.0.0' - - vue@3.5.28: - resolution: {integrity: sha512-BRdrNfeoccSoIZeIhyPBfvWSLFP4q8J3u8Ju8Ug5vu3LdD+yTM13Sg4sKtljxozbnuMu1NB1X5HBHRYUzFocKg==} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - - wcwidth@1.0.1: - resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} - - which@2.0.2: - resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} - engines: {node: '>= 8'} - hasBin: true - - which@5.0.0: - resolution: {integrity: sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==} - engines: {node: ^18.17.0 || >=20.5.0} - hasBin: true - - word-wrap@1.2.5: - resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} - engines: {node: '>=0.10.0'} - - wrap-ansi@7.0.0: - resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} - engines: {node: '>=10'} - - wrap-ansi@8.1.0: - resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} - engines: {node: '>=12'} - - wrappy@1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - - xmlbuilder@15.1.1: - resolution: {integrity: sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==} - engines: {node: '>=8.0'} - - y18n@5.0.8: - resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} - engines: {node: '>=10'} - - yallist@3.1.1: - resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} - - yallist@4.0.0: - resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - - yallist@5.0.0: - resolution: {integrity: sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==} - engines: {node: '>=18'} - - yargs-parser@21.1.1: - resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} - engines: {node: '>=12'} - - yargs@17.7.2: - resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} - engines: {node: '>=12'} - - yauzl@2.10.0: - resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==} - - yocto-queue@0.1.0: - resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} - engines: {node: '>=10'} - -snapshots: - - 7zip-bin@5.2.0: {} - - '@babel/code-frame@7.29.0': - dependencies: - '@babel/helper-validator-identifier': 7.28.5 - js-tokens: 4.0.0 - picocolors: 1.1.1 - - '@babel/compat-data@7.29.0': {} - - '@babel/core@7.29.0': - dependencies: - '@babel/code-frame': 7.29.0 - '@babel/generator': 7.29.1 - '@babel/helper-compilation-targets': 7.28.6 - '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0) - '@babel/helpers': 7.28.6 - '@babel/parser': 7.29.0 - '@babel/template': 7.28.6 - '@babel/traverse': 7.29.0 - '@babel/types': 7.29.0 - '@jridgewell/remapping': 2.3.5 - convert-source-map: 2.0.0 - debug: 4.4.3 - gensync: 1.0.0-beta.2 - json5: 2.2.3 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - - '@babel/generator@7.29.1': - dependencies: - '@babel/parser': 7.29.0 - '@babel/types': 7.29.0 - '@jridgewell/gen-mapping': 0.3.13 - '@jridgewell/trace-mapping': 0.3.31 - jsesc: 3.1.0 - - '@babel/helper-compilation-targets@7.28.6': - dependencies: - '@babel/compat-data': 7.29.0 - '@babel/helper-validator-option': 7.27.1 - browserslist: 4.28.1 - lru-cache: 5.1.1 - semver: 6.3.1 - - '@babel/helper-globals@7.28.0': {} - - '@babel/helper-module-imports@7.28.6': - dependencies: - '@babel/traverse': 7.29.0 - '@babel/types': 7.29.0 - transitivePeerDependencies: - - supports-color - - '@babel/helper-module-transforms@7.28.6(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-module-imports': 7.28.6 - '@babel/helper-validator-identifier': 7.28.5 - '@babel/traverse': 7.29.0 - transitivePeerDependencies: - - supports-color - - '@babel/helper-plugin-utils@7.28.6': {} - - '@babel/helper-string-parser@7.27.1': {} - - '@babel/helper-validator-identifier@7.28.5': {} - - '@babel/helper-validator-option@7.27.1': {} - - '@babel/helpers@7.28.6': - dependencies: - '@babel/template': 7.28.6 - '@babel/types': 7.29.0 - - '@babel/parser@7.29.0': - dependencies: - '@babel/types': 7.29.0 - - '@babel/plugin-transform-arrow-functions@7.27.1(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/template@7.28.6': - dependencies: - '@babel/code-frame': 7.29.0 - '@babel/parser': 7.29.0 - '@babel/types': 7.29.0 - - '@babel/traverse@7.29.0': - dependencies: - '@babel/code-frame': 7.29.0 - '@babel/generator': 7.29.1 - '@babel/helper-globals': 7.28.0 - '@babel/parser': 7.29.0 - '@babel/template': 7.28.6 - '@babel/types': 7.29.0 - debug: 4.4.3 - transitivePeerDependencies: - - supports-color - - '@babel/types@7.29.0': - dependencies: - '@babel/helper-string-parser': 7.27.1 - '@babel/helper-validator-identifier': 7.28.5 - - '@borewit/text-codec@0.2.1': {} - - '@develar/schema-utils@2.6.5': - dependencies: - ajv: 6.12.6 - ajv-keywords: 3.5.2(ajv@6.12.6) - - '@electron-toolkit/eslint-config-prettier@3.0.0(eslint@9.39.2(jiti@2.6.1))(prettier@3.8.1)': - dependencies: - eslint: 9.39.2(jiti@2.6.1) - eslint-config-prettier: 10.1.8(eslint@9.39.2(jiti@2.6.1)) - eslint-plugin-prettier: 5.5.5(eslint-config-prettier@10.1.8(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1))(prettier@3.8.1) - prettier: 3.8.1 - transitivePeerDependencies: - - '@types/eslint' - - '@electron-toolkit/eslint-config-ts@3.1.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': - dependencies: - '@eslint/js': 9.39.2 - eslint: 9.39.2(jiti@2.6.1) - globals: 16.5.0 - typescript-eslint: 8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - optionalDependencies: - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - - '@electron-toolkit/preload@3.0.2(electron@39.5.2)': - dependencies: - electron: 39.5.2 - - '@electron-toolkit/tsconfig@2.0.0(@types/node@22.19.11)': - dependencies: - '@types/node': 22.19.11 - - '@electron-toolkit/utils@4.0.0(electron@39.5.2)': - dependencies: - electron: 39.5.2 - - '@electron/asar@3.4.1': - dependencies: - commander: 5.1.0 - glob: 7.2.3 - minimatch: 3.1.2 - - '@electron/fuses@1.8.0': - dependencies: - chalk: 4.1.2 - fs-extra: 9.1.0 - minimist: 1.2.8 - - '@electron/get@2.0.3': - dependencies: - debug: 4.4.3 - env-paths: 2.2.1 - fs-extra: 8.1.0 - got: 11.8.6 - progress: 2.0.3 - semver: 6.3.1 - sumchecker: 3.0.1 - optionalDependencies: - global-agent: 3.0.0 - transitivePeerDependencies: - - supports-color - - '@electron/get@3.1.0': - dependencies: - debug: 4.4.3 - env-paths: 2.2.1 - fs-extra: 8.1.0 - got: 11.8.6 - progress: 2.0.3 - semver: 6.3.1 - sumchecker: 3.0.1 - optionalDependencies: - global-agent: 3.0.0 - transitivePeerDependencies: - - supports-color - - '@electron/notarize@2.5.0': - dependencies: - debug: 4.4.3 - fs-extra: 9.1.0 - promise-retry: 2.0.1 - transitivePeerDependencies: - - supports-color - - '@electron/osx-sign@1.3.3': - dependencies: - compare-version: 0.1.2 - debug: 4.4.3 - fs-extra: 10.1.0 - isbinaryfile: 4.0.10 - minimist: 1.2.8 - plist: 3.1.0 - transitivePeerDependencies: - - supports-color - - '@electron/rebuild@4.0.3': - dependencies: - '@malept/cross-spawn-promise': 2.0.0 - debug: 4.4.3 - detect-libc: 2.1.2 - got: 11.8.6 - graceful-fs: 4.2.11 - node-abi: 4.26.0 - node-api-version: 0.2.1 - node-gyp: 11.5.0 - ora: 5.4.1 - read-binary-file-arch: 1.0.6 - semver: 7.7.4 - tar: 7.5.7 - yargs: 17.7.2 - transitivePeerDependencies: - - supports-color - - '@electron/universal@2.0.3': - dependencies: - '@electron/asar': 3.4.1 - '@malept/cross-spawn-promise': 2.0.0 - debug: 4.4.3 - dir-compare: 4.2.0 - fs-extra: 11.3.3 - minimatch: 9.0.5 - plist: 3.1.0 - transitivePeerDependencies: - - supports-color - - '@electron/windows-sign@1.2.2': - dependencies: - cross-dirname: 0.1.0 - debug: 4.4.3 - fs-extra: 11.3.3 - minimist: 1.2.8 - postject: 1.0.0-alpha.6 - transitivePeerDependencies: - - supports-color - optional: true - - '@elysiajs/node@1.4.4(elysia@1.4.25(@sinclair/typebox@0.34.48)(exact-mirror@0.2.7(@sinclair/typebox@0.34.48))(file-type@21.3.0)(openapi-types@12.1.3)(typescript@5.9.3))': - dependencies: - crossws: 0.4.4(srvx@0.11.4) - elysia: 1.4.25(@sinclair/typebox@0.34.48)(exact-mirror@0.2.7(@sinclair/typebox@0.34.48))(file-type@21.3.0)(openapi-types@12.1.3)(typescript@5.9.3) - srvx: 0.11.4 - - '@esbuild/aix-ppc64@0.25.12': - optional: true - - '@esbuild/aix-ppc64@0.27.3': - optional: true - - '@esbuild/android-arm64@0.25.12': - optional: true - - '@esbuild/android-arm64@0.27.3': - optional: true - - '@esbuild/android-arm@0.25.12': - optional: true - - '@esbuild/android-arm@0.27.3': - optional: true - - '@esbuild/android-x64@0.25.12': - optional: true - - '@esbuild/android-x64@0.27.3': - optional: true - - '@esbuild/darwin-arm64@0.25.12': - optional: true - - '@esbuild/darwin-arm64@0.27.3': - optional: true - - '@esbuild/darwin-x64@0.25.12': - optional: true - - '@esbuild/darwin-x64@0.27.3': - optional: true - - '@esbuild/freebsd-arm64@0.25.12': - optional: true - - '@esbuild/freebsd-arm64@0.27.3': - optional: true - - '@esbuild/freebsd-x64@0.25.12': - optional: true - - '@esbuild/freebsd-x64@0.27.3': - optional: true - - '@esbuild/linux-arm64@0.25.12': - optional: true - - '@esbuild/linux-arm64@0.27.3': - optional: true - - '@esbuild/linux-arm@0.25.12': - optional: true - - '@esbuild/linux-arm@0.27.3': - optional: true - - '@esbuild/linux-ia32@0.25.12': - optional: true - - '@esbuild/linux-ia32@0.27.3': - optional: true - - '@esbuild/linux-loong64@0.25.12': - optional: true - - '@esbuild/linux-loong64@0.27.3': - optional: true - - '@esbuild/linux-mips64el@0.25.12': - optional: true - - '@esbuild/linux-mips64el@0.27.3': - optional: true - - '@esbuild/linux-ppc64@0.25.12': - optional: true - - '@esbuild/linux-ppc64@0.27.3': - optional: true - - '@esbuild/linux-riscv64@0.25.12': - optional: true - - '@esbuild/linux-riscv64@0.27.3': - optional: true - - '@esbuild/linux-s390x@0.25.12': - optional: true - - '@esbuild/linux-s390x@0.27.3': - optional: true - - '@esbuild/linux-x64@0.25.12': - optional: true - - '@esbuild/linux-x64@0.27.3': - optional: true - - '@esbuild/netbsd-arm64@0.25.12': - optional: true - - '@esbuild/netbsd-arm64@0.27.3': - optional: true - - '@esbuild/netbsd-x64@0.25.12': - optional: true - - '@esbuild/netbsd-x64@0.27.3': - optional: true - - '@esbuild/openbsd-arm64@0.25.12': - optional: true - - '@esbuild/openbsd-arm64@0.27.3': - optional: true - - '@esbuild/openbsd-x64@0.25.12': - optional: true - - '@esbuild/openbsd-x64@0.27.3': - optional: true - - '@esbuild/openharmony-arm64@0.25.12': - optional: true - - '@esbuild/openharmony-arm64@0.27.3': - optional: true - - '@esbuild/sunos-x64@0.25.12': - optional: true - - '@esbuild/sunos-x64@0.27.3': - optional: true - - '@esbuild/win32-arm64@0.25.12': - optional: true - - '@esbuild/win32-arm64@0.27.3': - optional: true - - '@esbuild/win32-ia32@0.25.12': - optional: true - - '@esbuild/win32-ia32@0.27.3': - optional: true - - '@esbuild/win32-x64@0.25.12': - optional: true - - '@esbuild/win32-x64@0.27.3': - optional: true - - '@eslint-community/eslint-utils@4.9.1(eslint@9.39.2(jiti@2.6.1))': - dependencies: - eslint: 9.39.2(jiti@2.6.1) - eslint-visitor-keys: 3.4.3 - - '@eslint-community/regexpp@4.12.2': {} - - '@eslint/config-array@0.21.1': - dependencies: - '@eslint/object-schema': 2.1.7 - debug: 4.4.3 - minimatch: 3.1.2 - transitivePeerDependencies: - - supports-color - - '@eslint/config-helpers@0.4.2': - dependencies: - '@eslint/core': 0.17.0 - - '@eslint/core@0.17.0': - dependencies: - '@types/json-schema': 7.0.15 - - '@eslint/eslintrc@3.3.3': - dependencies: - ajv: 6.12.6 - debug: 4.4.3 - espree: 10.4.0 - globals: 14.0.0 - ignore: 5.3.2 - import-fresh: 3.3.1 - js-yaml: 4.1.1 - minimatch: 3.1.2 - strip-json-comments: 3.1.1 - transitivePeerDependencies: - - supports-color - - '@eslint/js@9.39.2': {} - - '@eslint/object-schema@2.1.7': {} - - '@eslint/plugin-kit@0.4.1': - dependencies: - '@eslint/core': 0.17.0 - levn: 0.4.1 - - '@humanfs/core@0.19.1': {} - - '@humanfs/node@0.16.7': - dependencies: - '@humanfs/core': 0.19.1 - '@humanwhocodes/retry': 0.4.3 - - '@humanwhocodes/module-importer@1.0.1': {} - - '@humanwhocodes/retry@0.4.3': {} - - '@isaacs/balanced-match@4.0.1': {} - - '@isaacs/brace-expansion@5.0.1': - dependencies: - '@isaacs/balanced-match': 4.0.1 - - '@isaacs/cliui@8.0.2': - dependencies: - string-width: 5.1.2 - string-width-cjs: string-width@4.2.3 - strip-ansi: 7.1.2 - strip-ansi-cjs: strip-ansi@6.0.1 - wrap-ansi: 8.1.0 - wrap-ansi-cjs: wrap-ansi@7.0.0 - - '@isaacs/fs-minipass@4.0.1': - dependencies: - minipass: 7.1.2 - - '@jridgewell/gen-mapping@0.3.13': - dependencies: - '@jridgewell/sourcemap-codec': 1.5.5 - '@jridgewell/trace-mapping': 0.3.31 - - '@jridgewell/remapping@2.3.5': - dependencies: - '@jridgewell/gen-mapping': 0.3.13 - '@jridgewell/trace-mapping': 0.3.31 - - '@jridgewell/resolve-uri@3.1.2': {} - - '@jridgewell/sourcemap-codec@1.5.5': {} - - '@jridgewell/trace-mapping@0.3.31': - dependencies: - '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.5 - - '@malept/cross-spawn-promise@2.0.0': - dependencies: - cross-spawn: 7.0.6 - - '@malept/flatpak-bundler@0.4.0': - dependencies: - debug: 4.4.3 - fs-extra: 9.1.0 - lodash: 4.17.23 - tmp-promise: 3.0.3 - transitivePeerDependencies: - - supports-color - - '@npmcli/agent@3.0.0': - dependencies: - agent-base: 7.1.4 - http-proxy-agent: 7.0.2 - https-proxy-agent: 7.0.6 - lru-cache: 10.4.3 - socks-proxy-agent: 8.0.5 - transitivePeerDependencies: - - supports-color - - '@npmcli/fs@4.0.0': - dependencies: - semver: 7.7.4 - - '@pkgjs/parseargs@0.11.0': - optional: true - - '@pkgr/core@0.2.9': {} - - '@rolldown/pluginutils@1.0.0-rc.2': {} - - '@rollup/rollup-android-arm-eabi@4.57.1': - optional: true - - '@rollup/rollup-android-arm64@4.57.1': - optional: true - - '@rollup/rollup-darwin-arm64@4.57.1': - optional: true - - '@rollup/rollup-darwin-x64@4.57.1': - optional: true - - '@rollup/rollup-freebsd-arm64@4.57.1': - optional: true - - '@rollup/rollup-freebsd-x64@4.57.1': - optional: true - - '@rollup/rollup-linux-arm-gnueabihf@4.57.1': - optional: true - - '@rollup/rollup-linux-arm-musleabihf@4.57.1': - optional: true - - '@rollup/rollup-linux-arm64-gnu@4.57.1': - optional: true - - '@rollup/rollup-linux-arm64-musl@4.57.1': - optional: true - - '@rollup/rollup-linux-loong64-gnu@4.57.1': - optional: true - - '@rollup/rollup-linux-loong64-musl@4.57.1': - optional: true - - '@rollup/rollup-linux-ppc64-gnu@4.57.1': - optional: true - - '@rollup/rollup-linux-ppc64-musl@4.57.1': - optional: true - - '@rollup/rollup-linux-riscv64-gnu@4.57.1': - optional: true - - '@rollup/rollup-linux-riscv64-musl@4.57.1': - optional: true - - '@rollup/rollup-linux-s390x-gnu@4.57.1': - optional: true - - '@rollup/rollup-linux-x64-gnu@4.57.1': - optional: true - - '@rollup/rollup-linux-x64-musl@4.57.1': - optional: true - - '@rollup/rollup-openbsd-x64@4.57.1': - optional: true - - '@rollup/rollup-openharmony-arm64@4.57.1': - optional: true - - '@rollup/rollup-win32-arm64-msvc@4.57.1': - optional: true - - '@rollup/rollup-win32-ia32-msvc@4.57.1': - optional: true - - '@rollup/rollup-win32-x64-gnu@4.57.1': - optional: true - - '@rollup/rollup-win32-x64-msvc@4.57.1': - optional: true - - '@sinclair/typebox@0.34.48': {} - - '@sindresorhus/is@4.6.0': {} - - '@szmarczak/http-timer@4.0.6': - dependencies: - defer-to-connect: 2.0.1 - - '@tokenizer/inflate@0.4.1': - dependencies: - debug: 4.4.3 - token-types: 6.1.2 - transitivePeerDependencies: - - supports-color - - '@tokenizer/token@0.3.0': {} - - '@types/cacheable-request@6.0.3': - dependencies: - '@types/http-cache-semantics': 4.2.0 - '@types/keyv': 3.1.4 - '@types/node': 22.19.11 - '@types/responselike': 1.0.3 - - '@types/debug@4.1.12': - dependencies: - '@types/ms': 2.1.0 - - '@types/estree@1.0.8': {} - - '@types/fs-extra@9.0.13': - dependencies: - '@types/node': 22.19.11 - - '@types/http-cache-semantics@4.2.0': {} - - '@types/json-schema@7.0.15': {} - - '@types/keyv@3.1.4': - dependencies: - '@types/node': 22.19.11 - - '@types/ms@2.1.0': {} - - '@types/node@22.19.11': - dependencies: - undici-types: 6.21.0 - - '@types/plist@3.0.5': - dependencies: - '@types/node': 22.19.11 - xmlbuilder: 15.1.1 - optional: true - - '@types/responselike@1.0.3': - dependencies: - '@types/node': 22.19.11 - - '@types/verror@1.10.11': - optional: true - - '@types/yauzl@2.10.3': - dependencies: - '@types/node': 22.19.11 - optional: true - - '@typescript-eslint/eslint-plugin@8.55.0(@typescript-eslint/parser@8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': - dependencies: - '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/scope-manager': 8.55.0 - '@typescript-eslint/type-utils': 8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/utils': 8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.55.0 - eslint: 9.39.2(jiti@2.6.1) - ignore: 7.0.5 - natural-compare: 1.4.0 - ts-api-utils: 2.4.0(typescript@5.9.3) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/parser@8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': - dependencies: - '@typescript-eslint/scope-manager': 8.55.0 - '@typescript-eslint/types': 8.55.0 - '@typescript-eslint/typescript-estree': 8.55.0(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.55.0 - debug: 4.4.3 - eslint: 9.39.2(jiti@2.6.1) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/project-service@8.55.0(typescript@5.9.3)': - dependencies: - '@typescript-eslint/tsconfig-utils': 8.55.0(typescript@5.9.3) - '@typescript-eslint/types': 8.55.0 - debug: 4.4.3 - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/scope-manager@8.55.0': - dependencies: - '@typescript-eslint/types': 8.55.0 - '@typescript-eslint/visitor-keys': 8.55.0 - - '@typescript-eslint/tsconfig-utils@8.55.0(typescript@5.9.3)': - dependencies: - typescript: 5.9.3 - - '@typescript-eslint/type-utils@8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': - dependencies: - '@typescript-eslint/types': 8.55.0 - '@typescript-eslint/typescript-estree': 8.55.0(typescript@5.9.3) - '@typescript-eslint/utils': 8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - debug: 4.4.3 - eslint: 9.39.2(jiti@2.6.1) - ts-api-utils: 2.4.0(typescript@5.9.3) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/types@8.55.0': {} - - '@typescript-eslint/typescript-estree@8.55.0(typescript@5.9.3)': - dependencies: - '@typescript-eslint/project-service': 8.55.0(typescript@5.9.3) - '@typescript-eslint/tsconfig-utils': 8.55.0(typescript@5.9.3) - '@typescript-eslint/types': 8.55.0 - '@typescript-eslint/visitor-keys': 8.55.0 - debug: 4.4.3 - minimatch: 9.0.5 - semver: 7.7.4 - tinyglobby: 0.2.15 - ts-api-utils: 2.4.0(typescript@5.9.3) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/utils@8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': - dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.2(jiti@2.6.1)) - '@typescript-eslint/scope-manager': 8.55.0 - '@typescript-eslint/types': 8.55.0 - '@typescript-eslint/typescript-estree': 8.55.0(typescript@5.9.3) - eslint: 9.39.2(jiti@2.6.1) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/visitor-keys@8.55.0': - dependencies: - '@typescript-eslint/types': 8.55.0 - eslint-visitor-keys: 4.2.1 - - '@vitejs/plugin-vue@6.0.4(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1))(vue@3.5.28(typescript@5.9.3))': - dependencies: - '@rolldown/pluginutils': 1.0.0-rc.2 - vite: 7.3.1(@types/node@22.19.11)(jiti@2.6.1) - vue: 3.5.28(typescript@5.9.3) - - '@volar/language-core@2.4.15': - dependencies: - '@volar/source-map': 2.4.15 - - '@volar/source-map@2.4.15': {} - - '@volar/typescript@2.4.15': - dependencies: - '@volar/language-core': 2.4.15 - path-browserify: 1.0.1 - vscode-uri: 3.1.0 - - '@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 - - '@vue/compiler-dom@3.5.28': - dependencies: - '@vue/compiler-core': 3.5.28 - '@vue/shared': 3.5.28 - - '@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 - - '@vue/compiler-ssr@3.5.28': - dependencies: - '@vue/compiler-dom': 3.5.28 - '@vue/shared': 3.5.28 - - '@vue/compiler-vue2@2.7.16': - dependencies: - de-indent: 1.0.2 - he: 1.2.0 - - '@vue/language-core@2.2.12(typescript@5.9.3)': - dependencies: - '@volar/language-core': 2.4.15 - '@vue/compiler-dom': 3.5.28 - '@vue/compiler-vue2': 2.7.16 - '@vue/shared': 3.5.28 - alien-signals: 1.0.13 - minimatch: 9.0.5 - muggle-string: 0.4.1 - path-browserify: 1.0.1 - optionalDependencies: - typescript: 5.9.3 - - '@vue/reactivity@3.5.28': - dependencies: - '@vue/shared': 3.5.28 - - '@vue/runtime-core@3.5.28': - dependencies: - '@vue/reactivity': 3.5.28 - '@vue/shared': 3.5.28 - - '@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 - - '@vue/server-renderer@3.5.28(vue@3.5.28(typescript@5.9.3))': - dependencies: - '@vue/compiler-ssr': 3.5.28 - '@vue/shared': 3.5.28 - vue: 3.5.28(typescript@5.9.3) - - '@vue/shared@3.5.28': {} - - '@xmldom/xmldom@0.8.11': {} - - abbrev@3.0.1: {} - - acorn-jsx@5.3.2(acorn@8.15.0): - dependencies: - acorn: 8.15.0 - - acorn@8.15.0: {} - - agent-base@7.1.4: {} - - ajv-keywords@3.5.2(ajv@6.12.6): - dependencies: - ajv: 6.12.6 - - ajv@6.12.6: - dependencies: - fast-deep-equal: 3.1.3 - fast-json-stable-stringify: 2.1.0 - json-schema-traverse: 0.4.1 - uri-js: 4.4.1 - - alien-signals@1.0.13: {} - - ansi-regex@5.0.1: {} - - ansi-regex@6.2.2: {} - - ansi-styles@4.3.0: - dependencies: - color-convert: 2.0.1 - - ansi-styles@6.2.3: {} - - app-builder-bin@5.0.0-alpha.12: {} - - app-builder-lib@26.7.0(dmg-builder@26.7.0)(electron-builder-squirrel-windows@26.7.0): - dependencies: - '@develar/schema-utils': 2.6.5 - '@electron/asar': 3.4.1 - '@electron/fuses': 1.8.0 - '@electron/get': 3.1.0 - '@electron/notarize': 2.5.0 - '@electron/osx-sign': 1.3.3 - '@electron/rebuild': 4.0.3 - '@electron/universal': 2.0.3 - '@malept/flatpak-bundler': 0.4.0 - '@types/fs-extra': 9.0.13 - async-exit-hook: 2.0.1 - builder-util: 26.4.1 - builder-util-runtime: 9.5.1 - chromium-pickle-js: 0.2.0 - ci-info: 4.3.1 - debug: 4.4.3 - dmg-builder: 26.7.0(electron-builder-squirrel-windows@26.7.0) - dotenv: 16.6.1 - dotenv-expand: 11.0.7 - ejs: 3.1.10 - electron-builder-squirrel-windows: 26.7.0(dmg-builder@26.7.0) - electron-publish: 26.6.0 - fs-extra: 10.1.0 - hosted-git-info: 4.1.0 - isbinaryfile: 5.0.7 - jiti: 2.6.1 - js-yaml: 4.1.1 - json5: 2.2.3 - lazy-val: 1.0.5 - minimatch: 10.1.2 - plist: 3.1.0 - proper-lockfile: 4.1.2 - resedit: 1.7.2 - semver: 7.7.4 - tar: 7.5.7 - temp-file: 3.4.0 - tiny-async-pool: 1.3.0 - which: 5.0.0 - transitivePeerDependencies: - - supports-color - - argparse@2.0.1: {} - - assert-plus@1.0.0: - optional: true - - astral-regex@2.0.0: - optional: true - - async-exit-hook@2.0.1: {} - - async@3.2.6: {} - - asynckit@0.4.0: {} - - at-least-node@1.0.0: {} - - balanced-match@1.0.2: {} - - base64-js@1.5.1: {} - - baseline-browser-mapping@2.9.19: {} - - better-sqlite3@12.6.2: - dependencies: - bindings: 1.5.0 - prebuild-install: 7.1.3 - - bindings@1.5.0: - dependencies: - file-uri-to-path: 1.0.0 - - bl@4.1.0: - dependencies: - buffer: 5.7.1 - inherits: 2.0.4 - readable-stream: 3.6.2 - - boolean@3.2.0: - optional: true - - brace-expansion@1.1.12: - dependencies: - balanced-match: 1.0.2 - concat-map: 0.0.1 - - brace-expansion@2.0.2: - dependencies: - balanced-match: 1.0.2 - - browserslist@4.28.1: - dependencies: - baseline-browser-mapping: 2.9.19 - caniuse-lite: 1.0.30001769 - electron-to-chromium: 1.5.286 - node-releases: 2.0.27 - update-browserslist-db: 1.2.3(browserslist@4.28.1) - - buffer-crc32@0.2.13: {} - - buffer-from@1.1.2: {} - - buffer@5.7.1: - dependencies: - base64-js: 1.5.1 - ieee754: 1.2.1 - - builder-util-runtime@9.5.1: - dependencies: - debug: 4.4.3 - sax: 1.4.4 - transitivePeerDependencies: - - supports-color - - builder-util@26.4.1: - dependencies: - 7zip-bin: 5.2.0 - '@types/debug': 4.1.12 - app-builder-bin: 5.0.0-alpha.12 - builder-util-runtime: 9.5.1 - chalk: 4.1.2 - cross-spawn: 7.0.6 - debug: 4.4.3 - fs-extra: 10.1.0 - http-proxy-agent: 7.0.2 - https-proxy-agent: 7.0.6 - js-yaml: 4.1.1 - sanitize-filename: 1.6.3 - source-map-support: 0.5.21 - stat-mode: 1.0.0 - temp-file: 3.4.0 - tiny-async-pool: 1.3.0 - transitivePeerDependencies: - - supports-color - - cac@6.7.14: {} - - cacache@19.0.1: - dependencies: - '@npmcli/fs': 4.0.0 - fs-minipass: 3.0.3 - glob: 10.4.5 - lru-cache: 10.4.3 - minipass: 7.1.2 - minipass-collect: 2.0.1 - minipass-flush: 1.0.5 - minipass-pipeline: 1.2.4 - p-map: 7.0.4 - ssri: 12.0.0 - tar: 7.5.7 - unique-filename: 4.0.0 - - cacheable-lookup@5.0.4: {} - - cacheable-request@7.0.4: - dependencies: - clone-response: 1.0.3 - get-stream: 5.2.0 - http-cache-semantics: 4.2.0 - keyv: 4.5.4 - lowercase-keys: 2.0.0 - normalize-url: 6.1.0 - responselike: 2.0.1 - - call-bind-apply-helpers@1.0.2: - dependencies: - es-errors: 1.3.0 - function-bind: 1.1.2 - - callsites@3.1.0: {} - - caniuse-lite@1.0.30001769: {} - - chalk@4.1.2: - dependencies: - ansi-styles: 4.3.0 - supports-color: 7.2.0 - - chownr@1.1.4: {} - - chownr@3.0.0: {} - - chromium-pickle-js@0.2.0: {} - - ci-info@4.3.1: {} - - ci-info@4.4.0: {} - - cli-cursor@3.1.0: - dependencies: - restore-cursor: 3.1.0 - - cli-spinners@2.9.2: {} - - cli-truncate@2.1.0: - dependencies: - slice-ansi: 3.0.0 - string-width: 4.2.3 - optional: true - - cliui@8.0.1: - dependencies: - string-width: 4.2.3 - strip-ansi: 6.0.1 - wrap-ansi: 7.0.0 - - clone-response@1.0.3: - dependencies: - mimic-response: 1.0.1 - - clone@1.0.4: {} - - color-convert@2.0.1: - dependencies: - color-name: 1.1.4 - - color-name@1.1.4: {} - - combined-stream@1.0.8: - dependencies: - delayed-stream: 1.0.0 - - commander@5.1.0: {} - - commander@9.5.0: - optional: true - - compare-version@0.1.2: {} - - concat-map@0.0.1: {} - - convert-source-map@2.0.0: {} - - cookie@1.1.1: {} - - core-util-is@1.0.2: - optional: true - - crc@3.8.0: - dependencies: - buffer: 5.7.1 - optional: true - - cross-dirname@0.1.0: - optional: true - - cross-spawn@7.0.6: - dependencies: - path-key: 3.1.1 - shebang-command: 2.0.0 - which: 2.0.2 - - crossws@0.4.4(srvx@0.11.4): - optionalDependencies: - srvx: 0.11.4 - - csstype@3.2.3: {} - - de-indent@1.0.2: {} - - debug@4.4.3: - dependencies: - ms: 2.1.3 - - decompress-response@6.0.0: - dependencies: - mimic-response: 3.1.0 - - deep-extend@0.6.0: {} - - deep-is@0.1.4: {} - - defaults@1.0.4: - dependencies: - clone: 1.0.4 - - defer-to-connect@2.0.1: {} - - define-data-property@1.1.4: - dependencies: - es-define-property: 1.0.1 - es-errors: 1.3.0 - gopd: 1.2.0 - optional: true - - define-properties@1.2.1: - dependencies: - define-data-property: 1.1.4 - has-property-descriptors: 1.0.2 - object-keys: 1.1.1 - optional: true - - delayed-stream@1.0.0: {} - - detect-libc@2.1.2: {} - - detect-node@2.1.0: - optional: true - - dir-compare@4.2.0: - dependencies: - minimatch: 3.1.2 - p-limit: 3.1.0 - - dmg-builder@26.7.0(electron-builder-squirrel-windows@26.7.0): - dependencies: - app-builder-lib: 26.7.0(dmg-builder@26.7.0)(electron-builder-squirrel-windows@26.7.0) - builder-util: 26.4.1 - fs-extra: 10.1.0 - iconv-lite: 0.6.3 - js-yaml: 4.1.1 - optionalDependencies: - dmg-license: 1.0.11 - transitivePeerDependencies: - - electron-builder-squirrel-windows - - supports-color - - dmg-license@1.0.11: - dependencies: - '@types/plist': 3.0.5 - '@types/verror': 1.10.11 - ajv: 6.12.6 - crc: 3.8.0 - iconv-corefoundation: 1.1.7 - plist: 3.1.0 - smart-buffer: 4.2.0 - verror: 1.10.1 - optional: true - - dotenv-expand@11.0.7: - dependencies: - dotenv: 16.6.1 - - dotenv@16.6.1: {} - - dunder-proto@1.0.1: - dependencies: - call-bind-apply-helpers: 1.0.2 - es-errors: 1.3.0 - gopd: 1.2.0 - - eastasianwidth@0.2.0: {} - - ejs@3.1.10: - dependencies: - jake: 10.9.4 - - electron-builder-squirrel-windows@26.7.0(dmg-builder@26.7.0): - dependencies: - app-builder-lib: 26.7.0(dmg-builder@26.7.0)(electron-builder-squirrel-windows@26.7.0) - builder-util: 26.4.1 - electron-winstaller: 5.4.0 - transitivePeerDependencies: - - dmg-builder - - supports-color - - electron-builder@26.7.0(electron-builder-squirrel-windows@26.7.0): - dependencies: - app-builder-lib: 26.7.0(dmg-builder@26.7.0)(electron-builder-squirrel-windows@26.7.0) - builder-util: 26.4.1 - builder-util-runtime: 9.5.1 - chalk: 4.1.2 - ci-info: 4.4.0 - dmg-builder: 26.7.0(electron-builder-squirrel-windows@26.7.0) - fs-extra: 10.1.0 - lazy-val: 1.0.5 - simple-update-notifier: 2.0.0 - yargs: 17.7.2 - transitivePeerDependencies: - - electron-builder-squirrel-windows - - supports-color - - electron-publish@26.6.0: - dependencies: - '@types/fs-extra': 9.0.13 - builder-util: 26.4.1 - builder-util-runtime: 9.5.1 - chalk: 4.1.2 - form-data: 4.0.5 - fs-extra: 10.1.0 - lazy-val: 1.0.5 - mime: 2.6.0 - transitivePeerDependencies: - - supports-color - - electron-to-chromium@1.5.286: {} - - electron-updater@6.7.3: - dependencies: - builder-util-runtime: 9.5.1 - fs-extra: 10.1.0 - js-yaml: 4.1.1 - lazy-val: 1.0.5 - lodash.escaperegexp: 4.1.2 - lodash.isequal: 4.5.0 - semver: 7.7.4 - tiny-typed-emitter: 2.1.0 - transitivePeerDependencies: - - supports-color - - electron-vite@5.0.0(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)): - dependencies: - '@babel/core': 7.29.0 - '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.29.0) - cac: 6.7.14 - esbuild: 0.25.12 - magic-string: 0.30.21 - picocolors: 1.1.1 - vite: 7.3.1(@types/node@22.19.11)(jiti@2.6.1) - transitivePeerDependencies: - - supports-color - - electron-winstaller@5.4.0: - dependencies: - '@electron/asar': 3.4.1 - debug: 4.4.3 - fs-extra: 7.0.1 - lodash: 4.17.23 - temp: 0.9.4 - optionalDependencies: - '@electron/windows-sign': 1.2.2 - transitivePeerDependencies: - - supports-color - - electron@39.5.2: - dependencies: - '@electron/get': 2.0.3 - '@types/node': 22.19.11 - extract-zip: 2.0.1 - transitivePeerDependencies: - - supports-color - - elysia@1.4.25(@sinclair/typebox@0.34.48)(exact-mirror@0.2.7(@sinclair/typebox@0.34.48))(file-type@21.3.0)(openapi-types@12.1.3)(typescript@5.9.3): - dependencies: - '@sinclair/typebox': 0.34.48 - cookie: 1.1.1 - exact-mirror: 0.2.7(@sinclair/typebox@0.34.48) - fast-decode-uri-component: 1.0.1 - file-type: 21.3.0 - memoirist: 0.4.0 - openapi-types: 12.1.3 - optionalDependencies: - typescript: 5.9.3 - - emoji-regex@8.0.0: {} - - emoji-regex@9.2.2: {} - - encoding@0.1.13: - dependencies: - iconv-lite: 0.6.3 - optional: true - - end-of-stream@1.4.5: - dependencies: - once: 1.4.0 - - entities@7.0.1: {} - - env-paths@2.2.1: {} - - err-code@2.0.3: {} - - es-define-property@1.0.1: {} - - es-errors@1.3.0: {} - - es-object-atoms@1.1.1: - dependencies: - es-errors: 1.3.0 - - es-set-tostringtag@2.1.0: - dependencies: - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - has-tostringtag: 1.0.2 - hasown: 2.0.2 - - es6-error@4.1.1: - optional: true - - esbuild@0.25.12: - optionalDependencies: - '@esbuild/aix-ppc64': 0.25.12 - '@esbuild/android-arm': 0.25.12 - '@esbuild/android-arm64': 0.25.12 - '@esbuild/android-x64': 0.25.12 - '@esbuild/darwin-arm64': 0.25.12 - '@esbuild/darwin-x64': 0.25.12 - '@esbuild/freebsd-arm64': 0.25.12 - '@esbuild/freebsd-x64': 0.25.12 - '@esbuild/linux-arm': 0.25.12 - '@esbuild/linux-arm64': 0.25.12 - '@esbuild/linux-ia32': 0.25.12 - '@esbuild/linux-loong64': 0.25.12 - '@esbuild/linux-mips64el': 0.25.12 - '@esbuild/linux-ppc64': 0.25.12 - '@esbuild/linux-riscv64': 0.25.12 - '@esbuild/linux-s390x': 0.25.12 - '@esbuild/linux-x64': 0.25.12 - '@esbuild/netbsd-arm64': 0.25.12 - '@esbuild/netbsd-x64': 0.25.12 - '@esbuild/openbsd-arm64': 0.25.12 - '@esbuild/openbsd-x64': 0.25.12 - '@esbuild/openharmony-arm64': 0.25.12 - '@esbuild/sunos-x64': 0.25.12 - '@esbuild/win32-arm64': 0.25.12 - '@esbuild/win32-ia32': 0.25.12 - '@esbuild/win32-x64': 0.25.12 - - esbuild@0.27.3: - optionalDependencies: - '@esbuild/aix-ppc64': 0.27.3 - '@esbuild/android-arm': 0.27.3 - '@esbuild/android-arm64': 0.27.3 - '@esbuild/android-x64': 0.27.3 - '@esbuild/darwin-arm64': 0.27.3 - '@esbuild/darwin-x64': 0.27.3 - '@esbuild/freebsd-arm64': 0.27.3 - '@esbuild/freebsd-x64': 0.27.3 - '@esbuild/linux-arm': 0.27.3 - '@esbuild/linux-arm64': 0.27.3 - '@esbuild/linux-ia32': 0.27.3 - '@esbuild/linux-loong64': 0.27.3 - '@esbuild/linux-mips64el': 0.27.3 - '@esbuild/linux-ppc64': 0.27.3 - '@esbuild/linux-riscv64': 0.27.3 - '@esbuild/linux-s390x': 0.27.3 - '@esbuild/linux-x64': 0.27.3 - '@esbuild/netbsd-arm64': 0.27.3 - '@esbuild/netbsd-x64': 0.27.3 - '@esbuild/openbsd-arm64': 0.27.3 - '@esbuild/openbsd-x64': 0.27.3 - '@esbuild/openharmony-arm64': 0.27.3 - '@esbuild/sunos-x64': 0.27.3 - '@esbuild/win32-arm64': 0.27.3 - '@esbuild/win32-ia32': 0.27.3 - '@esbuild/win32-x64': 0.27.3 - - escalade@3.2.0: {} - - escape-string-regexp@4.0.0: {} - - eslint-config-prettier@10.1.8(eslint@9.39.2(jiti@2.6.1)): - dependencies: - eslint: 9.39.2(jiti@2.6.1) - - eslint-plugin-prettier@5.5.5(eslint-config-prettier@10.1.8(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1))(prettier@3.8.1): - dependencies: - eslint: 9.39.2(jiti@2.6.1) - prettier: 3.8.1 - prettier-linter-helpers: 1.0.1 - synckit: 0.11.12 - optionalDependencies: - eslint-config-prettier: 10.1.8(eslint@9.39.2(jiti@2.6.1)) - - eslint-scope@8.4.0: - dependencies: - esrecurse: 4.3.0 - estraverse: 5.3.0 - - eslint-visitor-keys@3.4.3: {} - - eslint-visitor-keys@4.2.1: {} - - eslint@9.39.2(jiti@2.6.1): - dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.2(jiti@2.6.1)) - '@eslint-community/regexpp': 4.12.2 - '@eslint/config-array': 0.21.1 - '@eslint/config-helpers': 0.4.2 - '@eslint/core': 0.17.0 - '@eslint/eslintrc': 3.3.3 - '@eslint/js': 9.39.2 - '@eslint/plugin-kit': 0.4.1 - '@humanfs/node': 0.16.7 - '@humanwhocodes/module-importer': 1.0.1 - '@humanwhocodes/retry': 0.4.3 - '@types/estree': 1.0.8 - ajv: 6.12.6 - chalk: 4.1.2 - cross-spawn: 7.0.6 - debug: 4.4.3 - escape-string-regexp: 4.0.0 - eslint-scope: 8.4.0 - eslint-visitor-keys: 4.2.1 - espree: 10.4.0 - esquery: 1.7.0 - esutils: 2.0.3 - fast-deep-equal: 3.1.3 - file-entry-cache: 8.0.0 - find-up: 5.0.0 - glob-parent: 6.0.2 - ignore: 5.3.2 - imurmurhash: 0.1.4 - is-glob: 4.0.3 - json-stable-stringify-without-jsonify: 1.0.1 - lodash.merge: 4.6.2 - minimatch: 3.1.2 - natural-compare: 1.4.0 - optionator: 0.9.4 - optionalDependencies: - jiti: 2.6.1 - transitivePeerDependencies: - - supports-color - - espree@10.4.0: - dependencies: - acorn: 8.15.0 - acorn-jsx: 5.3.2(acorn@8.15.0) - eslint-visitor-keys: 4.2.1 - - esquery@1.7.0: - dependencies: - estraverse: 5.3.0 - - esrecurse@4.3.0: - dependencies: - estraverse: 5.3.0 - - estraverse@5.3.0: {} - - estree-walker@2.0.2: {} - - esutils@2.0.3: {} - - exact-mirror@0.2.7(@sinclair/typebox@0.34.48): - optionalDependencies: - '@sinclair/typebox': 0.34.48 - - expand-template@2.0.3: {} - - exponential-backoff@3.1.3: {} - - extract-zip@2.0.1: - dependencies: - debug: 4.4.3 - get-stream: 5.2.0 - yauzl: 2.10.0 - optionalDependencies: - '@types/yauzl': 2.10.3 - transitivePeerDependencies: - - supports-color - - extsprintf@1.4.1: - optional: true - - fast-decode-uri-component@1.0.1: {} - - fast-deep-equal@3.1.3: {} - - fast-diff@1.3.0: {} - - fast-json-stable-stringify@2.1.0: {} - - fast-levenshtein@2.0.6: {} - - fd-slicer@1.1.0: - dependencies: - pend: 1.2.0 - - fdir@6.5.0(picomatch@4.0.3): - optionalDependencies: - picomatch: 4.0.3 - - file-entry-cache@8.0.0: - dependencies: - flat-cache: 4.0.1 - - file-type@21.3.0: - dependencies: - '@tokenizer/inflate': 0.4.1 - strtok3: 10.3.4 - token-types: 6.1.2 - uint8array-extras: 1.5.0 - transitivePeerDependencies: - - supports-color - - file-uri-to-path@1.0.0: {} - - filelist@1.0.4: - dependencies: - minimatch: 5.1.6 - - find-up@5.0.0: - dependencies: - locate-path: 6.0.0 - path-exists: 4.0.0 - - flat-cache@4.0.1: - dependencies: - flatted: 3.3.3 - keyv: 4.5.4 - - flatted@3.3.3: {} - - foreground-child@3.3.1: - dependencies: - cross-spawn: 7.0.6 - signal-exit: 4.1.0 - - form-data@4.0.5: - dependencies: - asynckit: 0.4.0 - combined-stream: 1.0.8 - es-set-tostringtag: 2.1.0 - hasown: 2.0.2 - mime-types: 2.1.35 - - fs-constants@1.0.0: {} - - fs-extra@10.1.0: - dependencies: - graceful-fs: 4.2.11 - jsonfile: 6.2.0 - universalify: 2.0.1 - - fs-extra@11.3.3: - dependencies: - graceful-fs: 4.2.11 - jsonfile: 6.2.0 - universalify: 2.0.1 - - fs-extra@7.0.1: - dependencies: - graceful-fs: 4.2.11 - jsonfile: 4.0.0 - universalify: 0.1.2 - - fs-extra@8.1.0: - dependencies: - graceful-fs: 4.2.11 - jsonfile: 4.0.0 - universalify: 0.1.2 - - fs-extra@9.1.0: - dependencies: - at-least-node: 1.0.0 - graceful-fs: 4.2.11 - jsonfile: 6.2.0 - universalify: 2.0.1 - - fs-minipass@3.0.3: - dependencies: - minipass: 7.1.2 - - fs.realpath@1.0.0: {} - - fsevents@2.3.3: - optional: true - - function-bind@1.1.2: {} - - gensync@1.0.0-beta.2: {} - - get-caller-file@2.0.5: {} - - get-intrinsic@1.3.0: - dependencies: - call-bind-apply-helpers: 1.0.2 - es-define-property: 1.0.1 - es-errors: 1.3.0 - es-object-atoms: 1.1.1 - function-bind: 1.1.2 - get-proto: 1.0.1 - gopd: 1.2.0 - has-symbols: 1.1.0 - hasown: 2.0.2 - math-intrinsics: 1.1.0 - - get-proto@1.0.1: - dependencies: - dunder-proto: 1.0.1 - es-object-atoms: 1.1.1 - - get-stream@5.2.0: - dependencies: - pump: 3.0.3 - - github-from-package@0.0.0: {} - - glob-parent@6.0.2: - dependencies: - is-glob: 4.0.3 - - glob@10.4.5: - dependencies: - foreground-child: 3.3.1 - jackspeak: 3.4.3 - minimatch: 9.0.5 - minipass: 7.1.2 - package-json-from-dist: 1.0.1 - path-scurry: 1.11.1 - - glob@7.2.3: - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.1.2 - once: 1.4.0 - path-is-absolute: 1.0.1 - - global-agent@3.0.0: - dependencies: - boolean: 3.2.0 - es6-error: 4.1.1 - matcher: 3.0.0 - roarr: 2.15.4 - semver: 7.7.4 - serialize-error: 7.0.1 - optional: true - - globals@14.0.0: {} - - globals@16.5.0: {} - - globalthis@1.0.4: - dependencies: - define-properties: 1.2.1 - gopd: 1.2.0 - optional: true - - gopd@1.2.0: {} - - got@11.8.6: - dependencies: - '@sindresorhus/is': 4.6.0 - '@szmarczak/http-timer': 4.0.6 - '@types/cacheable-request': 6.0.3 - '@types/responselike': 1.0.3 - cacheable-lookup: 5.0.4 - cacheable-request: 7.0.4 - decompress-response: 6.0.0 - http2-wrapper: 1.0.3 - lowercase-keys: 2.0.0 - p-cancelable: 2.1.1 - responselike: 2.0.1 - - graceful-fs@4.2.11: {} - - has-flag@4.0.0: {} - - has-property-descriptors@1.0.2: - dependencies: - es-define-property: 1.0.1 - optional: true - - has-symbols@1.1.0: {} - - has-tostringtag@1.0.2: - dependencies: - has-symbols: 1.1.0 - - hasown@2.0.2: - dependencies: - function-bind: 1.1.2 - - he@1.2.0: {} - - hosted-git-info@4.1.0: - dependencies: - lru-cache: 6.0.0 - - http-cache-semantics@4.2.0: {} - - http-proxy-agent@7.0.2: - dependencies: - agent-base: 7.1.4 - debug: 4.4.3 - transitivePeerDependencies: - - supports-color - - http2-wrapper@1.0.3: - dependencies: - quick-lru: 5.1.1 - resolve-alpn: 1.2.1 - - https-proxy-agent@7.0.6: - dependencies: - agent-base: 7.1.4 - debug: 4.4.3 - transitivePeerDependencies: - - supports-color - - iconv-corefoundation@1.1.7: - dependencies: - cli-truncate: 2.1.0 - node-addon-api: 1.7.2 - optional: true - - iconv-lite@0.6.3: - dependencies: - safer-buffer: 2.1.2 - - ieee754@1.2.1: {} - - ignore@5.3.2: {} - - ignore@7.0.5: {} - - import-fresh@3.3.1: - dependencies: - parent-module: 1.0.1 - resolve-from: 4.0.0 - - imurmurhash@0.1.4: {} - - inflight@1.0.6: - dependencies: - once: 1.4.0 - wrappy: 1.0.2 - - inherits@2.0.4: {} - - ini@1.3.8: {} - - ip-address@10.1.0: {} - - is-extglob@2.1.1: {} - - is-fullwidth-code-point@3.0.0: {} - - is-glob@4.0.3: - dependencies: - is-extglob: 2.1.1 - - is-interactive@1.0.0: {} - - is-unicode-supported@0.1.0: {} - - isbinaryfile@4.0.10: {} - - isbinaryfile@5.0.7: {} - - isexe@2.0.0: {} - - isexe@3.1.5: {} - - jackspeak@3.4.3: - dependencies: - '@isaacs/cliui': 8.0.2 - optionalDependencies: - '@pkgjs/parseargs': 0.11.0 - - jake@10.9.4: - dependencies: - async: 3.2.6 - filelist: 1.0.4 - picocolors: 1.1.1 - - jiti@2.6.1: {} - - js-tokens@4.0.0: {} - - js-yaml@4.1.1: - dependencies: - argparse: 2.0.1 - - jsesc@3.1.0: {} - - json-buffer@3.0.1: {} - - json-schema-traverse@0.4.1: {} - - json-stable-stringify-without-jsonify@1.0.1: {} - - json-stringify-safe@5.0.1: - optional: true - - json5@2.2.3: {} - - jsonfile@4.0.0: - optionalDependencies: - graceful-fs: 4.2.11 - - jsonfile@6.2.0: - dependencies: - universalify: 2.0.1 - optionalDependencies: - graceful-fs: 4.2.11 - - keyv@4.5.4: - dependencies: - json-buffer: 3.0.1 - - lazy-val@1.0.5: {} - - levn@0.4.1: - dependencies: - prelude-ls: 1.2.1 - type-check: 0.4.0 - - locate-path@6.0.0: - dependencies: - p-locate: 5.0.0 - - lodash.escaperegexp@4.1.2: {} - - lodash.isequal@4.5.0: {} - - lodash.merge@4.6.2: {} - - lodash@4.17.23: {} - - log-symbols@4.1.0: - dependencies: - chalk: 4.1.2 - is-unicode-supported: 0.1.0 - - lowercase-keys@2.0.0: {} - - lru-cache@10.4.3: {} - - lru-cache@5.1.1: - dependencies: - yallist: 3.1.1 - - lru-cache@6.0.0: - dependencies: - yallist: 4.0.0 - - magic-string@0.30.21: - dependencies: - '@jridgewell/sourcemap-codec': 1.5.5 - - make-fetch-happen@14.0.3: - dependencies: - '@npmcli/agent': 3.0.0 - cacache: 19.0.1 - http-cache-semantics: 4.2.0 - minipass: 7.1.2 - minipass-fetch: 4.0.1 - minipass-flush: 1.0.5 - minipass-pipeline: 1.2.4 - negotiator: 1.0.0 - proc-log: 5.0.0 - promise-retry: 2.0.1 - ssri: 12.0.0 - transitivePeerDependencies: - - supports-color - - matcher@3.0.0: - dependencies: - escape-string-regexp: 4.0.0 - optional: true - - math-intrinsics@1.1.0: {} - - memoirist@0.4.0: {} - - mime-db@1.52.0: {} - - mime-types@2.1.35: - dependencies: - mime-db: 1.52.0 - - mime@2.6.0: {} - - mimic-fn@2.1.0: {} - - mimic-response@1.0.1: {} - - mimic-response@3.1.0: {} - - minimatch@10.1.2: - dependencies: - '@isaacs/brace-expansion': 5.0.1 - - minimatch@3.1.2: - dependencies: - brace-expansion: 1.1.12 - - minimatch@5.1.6: - dependencies: - brace-expansion: 2.0.2 - - minimatch@9.0.5: - dependencies: - brace-expansion: 2.0.2 - - minimist@1.2.8: {} - - minipass-collect@2.0.1: - dependencies: - minipass: 7.1.2 - - minipass-fetch@4.0.1: - dependencies: - minipass: 7.1.2 - minipass-sized: 1.0.3 - minizlib: 3.1.0 - optionalDependencies: - encoding: 0.1.13 - - minipass-flush@1.0.5: - dependencies: - minipass: 3.3.6 - - minipass-pipeline@1.2.4: - dependencies: - minipass: 3.3.6 - - minipass-sized@1.0.3: - dependencies: - minipass: 3.3.6 - - minipass@3.3.6: - dependencies: - yallist: 4.0.0 - - minipass@7.1.2: {} - - minizlib@3.1.0: - dependencies: - minipass: 7.1.2 - - mkdirp-classic@0.5.3: {} - - mkdirp@0.5.6: - dependencies: - minimist: 1.2.8 - - ms@2.1.3: {} - - muggle-string@0.4.1: {} - - nanoid@3.3.11: {} - - napi-build-utils@2.0.0: {} - - natural-compare@1.4.0: {} - - negotiator@1.0.0: {} - - node-abi@3.87.0: - dependencies: - semver: 7.7.4 - - node-abi@4.26.0: - dependencies: - semver: 7.7.4 - - node-addon-api@1.7.2: - optional: true - - node-api-version@0.2.1: - dependencies: - semver: 7.7.4 - - node-gyp@11.5.0: - dependencies: - env-paths: 2.2.1 - exponential-backoff: 3.1.3 - graceful-fs: 4.2.11 - make-fetch-happen: 14.0.3 - nopt: 8.1.0 - proc-log: 5.0.0 - semver: 7.7.4 - tar: 7.5.7 - tinyglobby: 0.2.15 - which: 5.0.0 - transitivePeerDependencies: - - supports-color - - node-releases@2.0.27: {} - - nopt@8.1.0: - dependencies: - abbrev: 3.0.1 - - normalize-url@6.1.0: {} - - object-keys@1.1.1: - optional: true - - once@1.4.0: - dependencies: - wrappy: 1.0.2 - - onetime@5.1.2: - dependencies: - mimic-fn: 2.1.0 - - openapi-types@12.1.3: {} - - optionator@0.9.4: - dependencies: - deep-is: 0.1.4 - fast-levenshtein: 2.0.6 - levn: 0.4.1 - prelude-ls: 1.2.1 - type-check: 0.4.0 - word-wrap: 1.2.5 - - ora@5.4.1: - dependencies: - bl: 4.1.0 - chalk: 4.1.2 - cli-cursor: 3.1.0 - cli-spinners: 2.9.2 - is-interactive: 1.0.0 - is-unicode-supported: 0.1.0 - log-symbols: 4.1.0 - strip-ansi: 6.0.1 - wcwidth: 1.0.1 - - p-cancelable@2.1.1: {} - - p-limit@3.1.0: - dependencies: - yocto-queue: 0.1.0 - - p-locate@5.0.0: - dependencies: - p-limit: 3.1.0 - - p-map@7.0.4: {} - - package-json-from-dist@1.0.1: {} - - parent-module@1.0.1: - dependencies: - callsites: 3.1.0 - - path-browserify@1.0.1: {} - - path-exists@4.0.0: {} - - path-is-absolute@1.0.1: {} - - path-key@3.1.1: {} - - path-scurry@1.11.1: - dependencies: - lru-cache: 10.4.3 - minipass: 7.1.2 - - pe-library@0.4.1: {} - - pend@1.2.0: {} - - picocolors@1.1.1: {} - - picomatch@4.0.3: {} - - plist@3.1.0: - dependencies: - '@xmldom/xmldom': 0.8.11 - base64-js: 1.5.1 - xmlbuilder: 15.1.1 - - postcss@8.5.6: - dependencies: - nanoid: 3.3.11 - picocolors: 1.1.1 - source-map-js: 1.2.1 - - postject@1.0.0-alpha.6: - dependencies: - commander: 9.5.0 - optional: true - - prebuild-install@7.1.3: - dependencies: - detect-libc: 2.1.2 - expand-template: 2.0.3 - github-from-package: 0.0.0 - minimist: 1.2.8 - mkdirp-classic: 0.5.3 - napi-build-utils: 2.0.0 - node-abi: 3.87.0 - pump: 3.0.3 - rc: 1.2.8 - simple-get: 4.0.1 - tar-fs: 2.1.4 - tunnel-agent: 0.6.0 - - prelude-ls@1.2.1: {} - - prettier-linter-helpers@1.0.1: - dependencies: - fast-diff: 1.3.0 - - prettier@3.8.1: {} - - proc-log@5.0.0: {} - - progress@2.0.3: {} - - promise-retry@2.0.1: - dependencies: - err-code: 2.0.3 - retry: 0.12.0 - - proper-lockfile@4.1.2: - dependencies: - graceful-fs: 4.2.11 - retry: 0.12.0 - signal-exit: 3.0.7 - - pump@3.0.3: - dependencies: - end-of-stream: 1.4.5 - once: 1.4.0 - - punycode@2.3.1: {} - - quick-lru@5.1.1: {} - - rc@1.2.8: - dependencies: - deep-extend: 0.6.0 - ini: 1.3.8 - minimist: 1.2.8 - strip-json-comments: 2.0.1 - - read-binary-file-arch@1.0.6: - dependencies: - debug: 4.4.3 - transitivePeerDependencies: - - supports-color - - readable-stream@3.6.2: - dependencies: - inherits: 2.0.4 - string_decoder: 1.3.0 - util-deprecate: 1.0.2 - - require-directory@2.1.1: {} - - resedit@1.7.2: - dependencies: - pe-library: 0.4.1 - - resolve-alpn@1.2.1: {} - - resolve-from@4.0.0: {} - - responselike@2.0.1: - dependencies: - lowercase-keys: 2.0.0 - - restore-cursor@3.1.0: - dependencies: - onetime: 5.1.2 - signal-exit: 3.0.7 - - retry@0.12.0: {} - - rimraf@2.6.3: - dependencies: - glob: 7.2.3 - - roarr@2.15.4: - dependencies: - boolean: 3.2.0 - detect-node: 2.1.0 - globalthis: 1.0.4 - json-stringify-safe: 5.0.1 - semver-compare: 1.0.0 - sprintf-js: 1.1.3 - optional: true - - rollup@4.57.1: - dependencies: - '@types/estree': 1.0.8 - optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.57.1 - '@rollup/rollup-android-arm64': 4.57.1 - '@rollup/rollup-darwin-arm64': 4.57.1 - '@rollup/rollup-darwin-x64': 4.57.1 - '@rollup/rollup-freebsd-arm64': 4.57.1 - '@rollup/rollup-freebsd-x64': 4.57.1 - '@rollup/rollup-linux-arm-gnueabihf': 4.57.1 - '@rollup/rollup-linux-arm-musleabihf': 4.57.1 - '@rollup/rollup-linux-arm64-gnu': 4.57.1 - '@rollup/rollup-linux-arm64-musl': 4.57.1 - '@rollup/rollup-linux-loong64-gnu': 4.57.1 - '@rollup/rollup-linux-loong64-musl': 4.57.1 - '@rollup/rollup-linux-ppc64-gnu': 4.57.1 - '@rollup/rollup-linux-ppc64-musl': 4.57.1 - '@rollup/rollup-linux-riscv64-gnu': 4.57.1 - '@rollup/rollup-linux-riscv64-musl': 4.57.1 - '@rollup/rollup-linux-s390x-gnu': 4.57.1 - '@rollup/rollup-linux-x64-gnu': 4.57.1 - '@rollup/rollup-linux-x64-musl': 4.57.1 - '@rollup/rollup-openbsd-x64': 4.57.1 - '@rollup/rollup-openharmony-arm64': 4.57.1 - '@rollup/rollup-win32-arm64-msvc': 4.57.1 - '@rollup/rollup-win32-ia32-msvc': 4.57.1 - '@rollup/rollup-win32-x64-gnu': 4.57.1 - '@rollup/rollup-win32-x64-msvc': 4.57.1 - fsevents: 2.3.3 - - safe-buffer@5.2.1: {} - - safer-buffer@2.1.2: {} - - sanitize-filename@1.6.3: - dependencies: - truncate-utf8-bytes: 1.0.2 - - sax@1.4.4: {} - - semver-compare@1.0.0: - optional: true - - semver@5.7.2: {} - - semver@6.3.1: {} - - semver@7.7.4: {} - - serialize-error@7.0.1: - dependencies: - type-fest: 0.13.1 - optional: true - - shebang-command@2.0.0: - dependencies: - shebang-regex: 3.0.0 - - shebang-regex@3.0.0: {} - - signal-exit@3.0.7: {} - - signal-exit@4.1.0: {} - - simple-concat@1.0.1: {} - - simple-get@4.0.1: - dependencies: - decompress-response: 6.0.0 - once: 1.4.0 - simple-concat: 1.0.1 - - simple-update-notifier@2.0.0: - dependencies: - semver: 7.7.4 - - slice-ansi@3.0.0: - dependencies: - ansi-styles: 4.3.0 - astral-regex: 2.0.0 - is-fullwidth-code-point: 3.0.0 - optional: true - - smart-buffer@4.2.0: {} - - socks-proxy-agent@8.0.5: - dependencies: - agent-base: 7.1.4 - debug: 4.4.3 - socks: 2.8.7 - transitivePeerDependencies: - - supports-color - - socks@2.8.7: - dependencies: - ip-address: 10.1.0 - smart-buffer: 4.2.0 - - source-map-js@1.2.1: {} - - source-map-support@0.5.21: - dependencies: - buffer-from: 1.1.2 - source-map: 0.6.1 - - source-map@0.6.1: {} - - sprintf-js@1.1.3: - optional: true - - srvx@0.11.4: {} - - ssri@12.0.0: - dependencies: - minipass: 7.1.2 - - stat-mode@1.0.0: {} - - string-width@4.2.3: - dependencies: - emoji-regex: 8.0.0 - is-fullwidth-code-point: 3.0.0 - strip-ansi: 6.0.1 - - string-width@5.1.2: - dependencies: - eastasianwidth: 0.2.0 - emoji-regex: 9.2.2 - strip-ansi: 7.1.2 - - string_decoder@1.3.0: - dependencies: - safe-buffer: 5.2.1 - - strip-ansi@6.0.1: - dependencies: - ansi-regex: 5.0.1 - - strip-ansi@7.1.2: - dependencies: - ansi-regex: 6.2.2 - - strip-json-comments@2.0.1: {} - - strip-json-comments@3.1.1: {} - - strtok3@10.3.4: - dependencies: - '@tokenizer/token': 0.3.0 - - sumchecker@3.0.1: - dependencies: - debug: 4.4.3 - transitivePeerDependencies: - - supports-color - - supports-color@7.2.0: - dependencies: - has-flag: 4.0.0 - - synckit@0.11.12: - dependencies: - '@pkgr/core': 0.2.9 - - tar-fs@2.1.4: - dependencies: - chownr: 1.1.4 - mkdirp-classic: 0.5.3 - pump: 3.0.3 - tar-stream: 2.2.0 - - tar-stream@2.2.0: - dependencies: - bl: 4.1.0 - end-of-stream: 1.4.5 - fs-constants: 1.0.0 - inherits: 2.0.4 - readable-stream: 3.6.2 - - tar@7.5.7: - dependencies: - '@isaacs/fs-minipass': 4.0.1 - chownr: 3.0.0 - minipass: 7.1.2 - minizlib: 3.1.0 - yallist: 5.0.0 - - temp-file@3.4.0: - dependencies: - async-exit-hook: 2.0.1 - fs-extra: 10.1.0 - - temp@0.9.4: - dependencies: - mkdirp: 0.5.6 - rimraf: 2.6.3 - - tiny-async-pool@1.3.0: - dependencies: - semver: 5.7.2 - - tiny-typed-emitter@2.1.0: {} - - tinyglobby@0.2.15: - dependencies: - fdir: 6.5.0(picomatch@4.0.3) - picomatch: 4.0.3 - - tmp-promise@3.0.3: - dependencies: - tmp: 0.2.5 - - tmp@0.2.5: {} - - token-types@6.1.2: - dependencies: - '@borewit/text-codec': 0.2.1 - '@tokenizer/token': 0.3.0 - ieee754: 1.2.1 - - truncate-utf8-bytes@1.0.2: - dependencies: - utf8-byte-length: 1.0.5 - - ts-api-utils@2.4.0(typescript@5.9.3): - dependencies: - typescript: 5.9.3 - - tunnel-agent@0.6.0: - dependencies: - safe-buffer: 5.2.1 - - type-check@0.4.0: - dependencies: - prelude-ls: 1.2.1 - - type-fest@0.13.1: - optional: true - - typescript-eslint@8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3): - dependencies: - '@typescript-eslint/eslint-plugin': 8.55.0(@typescript-eslint/parser@8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/parser': 8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/typescript-estree': 8.55.0(typescript@5.9.3) - '@typescript-eslint/utils': 8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - eslint: 9.39.2(jiti@2.6.1) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - - typescript@5.9.3: {} - - uint8array-extras@1.5.0: {} - - undici-types@6.21.0: {} - - unique-filename@4.0.0: - dependencies: - unique-slug: 5.0.0 - - unique-slug@5.0.0: - dependencies: - imurmurhash: 0.1.4 - - universalify@0.1.2: {} - - universalify@2.0.1: {} - - update-browserslist-db@1.2.3(browserslist@4.28.1): - dependencies: - browserslist: 4.28.1 - escalade: 3.2.0 - picocolors: 1.1.1 - - uri-js@4.4.1: - dependencies: - punycode: 2.3.1 - - utf8-byte-length@1.0.5: {} - - util-deprecate@1.0.2: {} - - verror@1.10.1: - dependencies: - assert-plus: 1.0.0 - core-util-is: 1.0.2 - extsprintf: 1.4.1 - optional: true - - vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1): - dependencies: - esbuild: 0.27.3 - fdir: 6.5.0(picomatch@4.0.3) - picomatch: 4.0.3 - postcss: 8.5.6 - rollup: 4.57.1 - tinyglobby: 0.2.15 - optionalDependencies: - '@types/node': 22.19.11 - fsevents: 2.3.3 - jiti: 2.6.1 - - vscode-uri@3.1.0: {} - - vue-tsc@2.2.12(typescript@5.9.3): - dependencies: - '@volar/typescript': 2.4.15 - '@vue/language-core': 2.2.12(typescript@5.9.3) - typescript: 5.9.3 - - vue@3.5.28(typescript@5.9.3): - 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@3.5.28(typescript@5.9.3)) - '@vue/shared': 3.5.28 - optionalDependencies: - typescript: 5.9.3 - - wcwidth@1.0.1: - dependencies: - defaults: 1.0.4 - - which@2.0.2: - dependencies: - isexe: 2.0.0 - - which@5.0.0: - dependencies: - isexe: 3.1.5 - - word-wrap@1.2.5: {} - - wrap-ansi@7.0.0: - dependencies: - ansi-styles: 4.3.0 - string-width: 4.2.3 - strip-ansi: 6.0.1 - - wrap-ansi@8.1.0: - dependencies: - ansi-styles: 6.2.3 - string-width: 5.1.2 - strip-ansi: 7.1.2 - - wrappy@1.0.2: {} - - xmlbuilder@15.1.1: {} - - y18n@5.0.8: {} - - yallist@3.1.1: {} - - yallist@4.0.0: {} - - yallist@5.0.0: {} - - yargs-parser@21.1.1: {} - - yargs@17.7.2: - dependencies: - cliui: 8.0.1 - escalade: 3.2.0 - get-caller-file: 2.0.5 - require-directory: 2.1.1 - string-width: 4.2.3 - y18n: 5.0.8 - yargs-parser: 21.1.1 - - yauzl@2.10.0: - dependencies: - buffer-crc32: 0.2.13 - fd-slicer: 1.1.0 - - yocto-queue@0.1.0: {} diff --git a/resources/icon.png b/resources/icon.png deleted file mode 100644 index cf9e8b2..0000000 Binary files a/resources/icon.png and /dev/null differ diff --git a/src/Immersive-clock-monitor/noise-technical.md b/src/Immersive-clock-monitor/noise-technical.md deleted file mode 100644 index 42c7419..0000000 --- a/src/Immersive-clock-monitor/noise-technical.md +++ /dev/null @@ -1,772 +0,0 @@ -# 沉浸式时钟噪音计算与评分技术文档 - -Immersive Clock 的噪音监测系统不仅仅是一个简单的分贝计,它内置了一个基于心理声学与专注力理论的评分引擎。该引擎旨在客观、多维度地量化环境噪音对学习心流的干扰程度。 - -本文档详细解析了该系统的计算原理、核心指标定义、评分算法及完整的技术架构。 - -## 目录 - -1. [核心理念](#1-核心理念) -2. [系统架构](#2-系统架构) -3. [数据采集层](#3-数据采集层) -4. [数据聚合层](#4-数据聚合层) -5. [评分算法核心](#5-评分算法核心) -6. [数据存储层](#6-数据存储层) -7. [历史报告生成](#7-历史报告生成) -8. [流服务整合](#8-流服务整合) -9. [配置参数体系](#9-配置参数体系) -10. [类型定义](#10-类型定义) - ---- - -## 1. 核心理念 - -### 1.1 设计原则 - -系统认为,并非所有"响声"都是一样的。对于专注力而言: - -- **持续的嗡嗡声**(如嘈杂的人群)比**偶尔的掉笔声**更具破坏性 -- **频繁的打断**(如每分钟都有人说话)比**单次的大声喧哗**更让人烦躁 -- **评分与校准分离**:评分使用原始 DBFS 数据,校准仅影响显示分贝 - -因此,评分系统采用了 **多维度加权扣分制**,满分 100 分,根据环境表现进行扣分。 - -### 1.2 评分与校准分离 - -项目通过"原始数据(用于评分)"与"显示数据(用于展示)"的**严格分层**,杜绝了校准值导致的评分偏差: - -1. **评分只依赖原始 DBFS(设备输出的相对电平)** - - 评分的三项核心指标(`p50Dbfs`、`overRatioDbfs`、`segmentCount`)都来自原始 `dbfs` 统计 - - "超阈时长占比"判定条件固定为:`dbfs > scoreThresholdDbfs`(阈值默认 `-50 dBFS`),与校准无关 - - 这意味着即使用户把"显示分贝基准"调高/调低,评分侧的 `dbfs` 不会变化,因此得分与超阈时长也不会被"调参刷分" - -2. **校准仅影响 Display dB(UI 展示口径),不进入评分链路** - - 校准(`baselineRms` / `baselineDb`)只用于将 `rms` 映射为 `displayDb`,用于实时显示与报告中的"噪音等级分布"等图表展示 - - 这些展示口径变化不会反向影响评分输入,也不会改变切片摘要中的 `raw.*` 字段 - -3. **统计报告中"超阈时长"取自 raw.overRatioDbfs** - - 报告里展示的"超阈时长"是对每个切片 `raw.overRatioDbfs` 按有效采样时长加权汇总得到,仍然完全基于 DBFS - - 相比之下,"噪音等级分布"使用的是 `display.avgDb`(校准后的显示分贝),因此它会随校准变化——这是为了更贴近用户直觉的 dB 区间划分 - ---- - -## 2. 系统架构 - -### 2.1 整体架构图 - -``` -┌─────────────────────────────────────────────────────────────────┐ -│ 用户界面层 │ -│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ -│ │ 实时监控组件 │ │ 噪音报告弹窗 │ │ 噪音历史列表 │ │ -│ └──────────────┘ └──────────────┘ └──────────────┘ │ -└─────────────────────────────────────────────────────────────────┘ - ↑ - │ 订阅/发布 - ↓ -┌─────────────────────────────────────────────────────────────────┐ -│ 流服务层 │ -│ ┌──────────────────────────────────────────────────────────┐ │ -│ │ 噪音流服务 - 订阅管理、生命周期控制、设置热更新 │ │ -│ └──────────────────────────────────────────────────────────┘ │ -└─────────────────────────────────────────────────────────────────┘ - ↑ - │ 帧数据流 - ↓ -┌─────────────────────────────────────────────────────────────────┐ -│ 数据聚合层 │ -│ ┌──────────────────┐ ┌────────────────────────────────────┐ │ -│ │ 噪音帧处理器 │ │ 噪音切片聚合器 │ │ -│ │ - RMS/dBFS 计算 │ │ - 切片聚合、统计指标、评分计算 │ │ -│ │ - 50ms/帧 │ │ - 30秒/切片 │ │ -│ └──────────────────┘ └────────────────────────────────────┘ │ -│ ┌──────────────────────────────────────────────────────────┐ │ -│ │ 实时环形缓冲区 - 保留固定时长的实时数据 │ │ -│ └──────────────────────────────────────────────────────────┘ │ -└─────────────────────────────────────────────────────────────────┘ - ↑ - │ 音频流 - ↓ -┌─────────────────────────────────────────────────────────────────┐ -│ 数据采集层 │ -│ ┌──────────────────────────────────────────────────────────┐ │ -│ │ 麦克风采集 - Web Audio API、滤波器、AnalyserNode │ │ -│ └──────────────────────────────────────────────────────────┘ │ -└─────────────────────────────────────────────────────────────────┘ - ↑ - │ 物理音频 - ↓ -┌─────────────────────────────────────────────────────────────────┐ -│ 数据存储层 │ -│ ┌──────────────────────────────────────────────────────────┐ │ -│ │ 切片存储 - localStorage、时间清理、容量限制 │ │ -│ └──────────────────────────────────────────────────────────┘ │ -└─────────────────────────────────────────────────────────────────┘ - ↑ - │ 历史数据 - ↓ -┌─────────────────────────────────────────────────────────────────┐ -│ 历史报告层 │ -│ ┌──────────────────────────────────────────────────────────┐ │ -│ │ 历史构建 - 课表关联、加权平均评分、覆盖率计算 │ │ -│ └──────────────────────────────────────────────────────────┘ │ -└─────────────────────────────────────────────────────────────────┘ -``` - -### 2.2 模块说明 - -| 模块 | 功能 | -|------|------| -| 类型定义 | 核心类型定义 | -| 常量定义 | 分析参数常量、报告参数常量 | -| 麦克风采集 | 音频采集 | -| 帧处理器 | 帧处理 | -| 切片聚合器 | 切片聚合 | -| 环形缓冲区 | 实时数据 | -| 流服务 | 流管理 | -| 评分引擎 | 评分算法 | -| 切片服务 | 存储服务 | -| 历史构建 | 历史报告 | -| 设置管理 | 设置管理 | - ---- - -## 3. 数据采集层 - -### 3.1 麦克风采集 - -#### 3.1.1 Web Audio API 使用 - -系统使用 Web Audio API 获取麦克风输入,构建完整的音频处理链路: - -``` -麦克风 → MediaStream → MediaStreamAudioSourceNode - → 高通滤波器 (80Hz) → 低通滤波器 (8000Hz) - → AnalyserNode (FFT Size 2048) -``` - -#### 3.1.2 音频滤波器配置 - -| 滤波器类型 | 截止频率 | 作用 | -|-----------|---------|------| -| 高通滤波器 | 80 Hz | 过滤低频噪音(如空调嗡嗡声) | -| 低通滤波器 | 8000 Hz | 过滤高频噪音(如电子设备啸叫) | - -#### 3.1.3 AnalyserNode 配置 - -```typescript -analyser.fftSize = 2048; // FFT 窗口大小 -analyser.smoothingTimeConstant = 0; // 无平滑,实时响应 -``` - -#### 3.1.4 权限处理与错误处理 - -```typescript -// 麦克风权限请求配置 -{ - audio: { - echoCancellation: false, // 禁用回声消除 - noiseSuppression: false, // 禁用降噪 - autoGainControl: false, // 禁用自动增益 - }, - video: false -} -``` - -**浏览器兼容性说明:** -- 部分浏览器/设备可能忽略上述约束设置 -- 建议在 UI 中提示用户实际生效的约束 -- 需要测试矩阵验证:Chrome/Firefox/Safari/Edge/iOS Safari/Android WebView - -**错误处理:** -- `NotAllowedError` / `SecurityError` → 权限拒绝 -- `AudioContext not supported` → 浏览器不支持 - ---- - -### 3.2 帧处理器 - -#### 3.2.1 采样频率 - -- **帧间隔**:50ms(约 20 fps) -- **数据来源**:AnalyserNode.getFloatTimeDomainData() - -#### 3.2.2 RMS(均方根)计算 - -RMS 是衡量音频信号强度的标准方法: - -**公式:** -$$ \text{RMS} = \sqrt{\frac{1}{N} \sum_{i=1}^{N} x_i^2} $$ - -#### 3.2.3 dBFS(分贝满刻度)转换 - -dBFS 是数字音频的标准分贝单位,范围 -100 到 0 dB: - -**公式:** -$$ \text{dBFS} = 20 \times \log_{10}(\text{RMS}) $$ - -**范围限制:** -- 最小值:-100 dBFS(静音) -- 最大值:0 dBFS(满刻度) - -#### 3.2.4 峰值检测 - -峰值用于检测突发噪音,在 RMS 计算过程中同时记录峰值。 - ---- - -## 4. 数据聚合层 - -### 4.1 切片聚合器 - -#### 4.1.1 切片时长 - -- **默认切片时长**:30 秒 -- **可配置范围**:≥ 1 秒 - -#### 4.1.2 统计指标计算 - -切片聚合器为每个切片计算以下统计指标: - -| 指标 | 说明 | 计算方法 | -|------|------|---------| -| avgDbfs | 平均分贝 | 能量平均(线性域 RMS 平均后转回 dBFS) | -| maxDbfs | 最大分贝 | 所有帧 dBFS 的最大值 | -| p50Dbfs | 中位数分贝 | 线性域分位数(RMS 域计算后转回 dBFS) | -| p95Dbfs | 95分位数分贝 | 线性域分位数(RMS 域计算后转回 dBFS) | -| overRatioDbfs | 超阈值比例 | 超阈值时长 / 采样时长 | -| segmentCount | 事件段数量 | 独立噪音事件次数 | -| sampledDurationMs | 采样时长 | 有效采样时间(排除缺口) | -| gapCount | 缺口数量 | 数据缺口次数 | -| maxGapMs | 最大缺口时长 | 最长数据缺口时长 | - -#### 4.1.3 能量平均计算(avgDbfs) - -**公式:** -$$ \text{avgDbfs} = 20 \times \log_{10}\left(\sqrt{\frac{1}{N} \sum_{i=1}^{N} 10^{\text{dBFS}_i / 10}}\right) $$ - -**物理意义:** 在线性域(RMS)上做平均,符合能量守恒定律 - -#### 4.1.4 线性域分位数计算 - -**公式:** -$$ \text{quantileDbfs} = 20 \times \log_{10}(Q_{\text{RMS}}(p)) $$ - -其中 $Q_{\text{RMS}}(p)$ 是 RMS 域的分位数,使用线性插值计算: -$$ Q_{\text{RMS}}(p) = x_{\lfloor i \rfloor} \times (1 - w) + x_{\lceil i \rceil} \times w $$ - -- $i = (n-1) \times p$ -- $w = i - \lfloor i \rfloor$ - -**物理意义:** 在线性域(RMS)上计算分位数,符合能量统计的严谨性 - -#### 4.1.5 超阈值比例计算(时间加权) - -**公式:** -$$ \text{overRatioDbfs} = \frac{\text{超阈值时长}}{\text{采样时长}} $$ - -**物理意义:** 使用实际时长而非帧数计算比例,更精确 - -#### 4.1.6 事件段检测与合并算法 - -事件段检测用于识别独立的噪音事件: - -**合并规则:** -- **合并窗口**:500ms(默认) -- 如果两次超阈值事件间隔 ≤ 500ms,合并为同一事件段 -- 否则计为新的独立事件段 - -**示例:** -``` -时间轴: 0ms 200ms 400ms 600ms 800ms 1000ms -状态: [噪音] [噪音] [安静] [噪音] [噪音] [安静] -合并后: └─────── 事件段1 ───────┘ └── 事件段2 ──┘ -``` - -#### 4.1.7 显示分贝映射(校准机制) - -显示分贝用于用户界面展示,支持校准: - -**公式(有校准):** -$$ \text{displayDb} = \text{baselineDb} + 20 \times \log_{10}\left(\frac{\text{rms}}{\text{baselineRms}}\right) $$ - -**公式(无校准):** -$$ \text{displayDb} = 20 \times \log_{10}\left(\frac{\text{rms}}{10^{-3}}\right) + 60 $$ - -**范围限制:** 20 dB ~ 100 dB - -**校准流程说明:** -1. 使用标准声源(如 60 dB 的白噪音) -2. 测量对应的 RMS 值 -3. 设置为 baselineRms -4. 设置对应的显示分贝为 baselineDb - -#### 4.1.8 缺口检测与采样时长统计 - -**缺口阈值:** `max(1000ms, frameMs × 5)` = **1000ms**(默认) - -当检测到数据缺口时,会触发切片完成并记录缺口信息。 - -#### 4.1.9 无效帧过滤 - -低于 -90 dBFS 的帧被视为静音/无效信号,不参与统计。 - -**常量说明:** -- `INVALID_DBFS_THRESHOLD = -90`:统计意义上的"静音"阈值 -- `DBFS_MIN_POSSIBLE = -100`:物理最小可表示值(用于 clamp) -- `DBFS_MAX_POSSIBLE = 0`:物理最大可表示值(用于 clamp) - ---- - -### 4.2 实时环形缓冲区 - -#### 4.2.1 数据结构设计 - -环形缓冲区使用固定容量数组实现,通过起始索引和当前长度管理数据。 - -#### 4.2.2 时间窗口裁剪策略 - -**裁剪规则:** 移除时间戳早于 `当前时间 - retentionMs` 的数据点 - ---- - -## 5. 评分算法核心 - -### 5.1 三大核心指标 - -评分引擎从以下三个维度对噪音数据进行分析: - -#### A. 持续噪音水平 (Sustained Level) - -- **定义**:剔除突发噪音后的环境"底噪"水平 -- **算法**:使用时段内所有帧的中位数电平 (`p50Dbfs`) -- **意义**:反映环境本身是否安静。如果环境中有持续的风扇声或交谈声,该指标会升高 - -#### B. 超阈值时长占比 (Over Threshold Ratio) - -- **定义**:原始 `DBFS` 超过评分阈值(`scoreThresholdDbfs`)的时间比例 -- **算法**:`超阈值时长 / 采样时长`(超标判定:`dbfs > scoreThresholdDbfs`) -- **意义**:反映环境的"纯净度"。即使是 0.1 秒的尖叫也会被精确计入,无法被平均值掩盖 - -> **提示**:评分阈值(`scoreThresholdDbfs`,单位 dBFS)与"界面报警/提示音"使用的显示分贝阈值(`maxLevelDb`,单位 dB)不是同一个概念;前者只用于评分,后者用于判定 noisy/quiet 与提示音触发。 - -#### C. 打断次数密度 (Interruption Density) - -- **定义**:单位时间内(每分钟)发生的独立噪音事件次数 -- **智能合并算法**: - - 系统设有 **500ms** (默认) 的合并窗口 - - 如果两次响声间隔小于该窗口(如拉椅子的一连串声音),会被合并为 **1 次打断** - - 只有间隔较长的响声才会被计为新的打断 -- **意义**:反映环境的干扰频率。频繁的打断(如断断续续的说话声)比连续的噪音更易打断心流 - -### 5.2 评分引擎 - -#### 5.2.1 三维度评分模型 - -评分系统从三个维度对噪音进行评估: - -| 维度 | 权重 | 指标 | 满扣分条件 | -|------|------|------|-----------| -| **持续噪音** | 40% | p50Dbfs | 中位数超过阈值 6 dBFS | -| **超阈时长** | 30% | overRatioDbfs | 超阈时间占比 30% | -| **打断频次** | 30% | segmentCount | 6 次/分钟 | - -#### 5.2.2 评分公式 - -**总惩罚系数:** -$$ \text{TotalPenalty} = 0.40 \times P_{\text{sustained}} + 0.30 \times P_{\text{time}} + 0.30 \times P_{\text{segment}} $$ - -**最终得分:** -$$ \text{Score} = 100 \times (1 - \text{TotalPenalty}) $$ - -#### 5.2.3 惩罚系数计算 - -##### A. 持续噪音惩罚 - -**公式:** -$$ P_{\text{sustained}} = \text{clamp}_{[0,1]}\left(\frac{\text{p50Dbfs} - \text{threshold}}{6}\right) $$ - -**满扣分条件:** `p50Dbfs - threshold ≥ 6 dBFS` - -##### B. 超阈时长惩罚 - -**公式:** -$$ P_{\text{time}} = \text{clamp}_{[0,1]}\left(\frac{\text{overRatioDbfs}}{0.3}\right) $$ - -**满扣分条件:** `overRatioDbfs ≥ 30%` - -##### C. 打断频次惩罚 - -**公式:** -$$ P_{\text{segment}} = \text{clamp}_{[0,1]}\left(\frac{\text{segmentCount} / \text{minutes}}{\text{maxSegmentsPerMin}}\right) $$ - -**满扣分条件:** `segmentsPerMin ≥ 6 次/分钟` - -#### 5.2.4 权重解读 - -- **持续噪音 (40%)**:持续底噪仍会明显拉低分数 -- **超阈时长 (30%)**:只要大部分时间安静,偶尔的噪音仍可被容忍 -- **打断频次 (30%)**:强调"被频繁打断"对心流的破坏,提升对碎片化干扰的惩罚力度 - -#### 5.2.5 边界条件处理 - -- DBFS 范围限制:-100 到 0 dB -- 惩罚系数范围限制:0 到 1 -- 评分范围限制:0 到 100 分 - -#### 5.2.6 有效时长处理 - -优先使用采样有效时长,不存在时回退到物理时长。 - -#### 5.2.7 评分示例 - -**场景 1:安静环境** -- p50Dbfs = -60 dBFS, threshold = -50 dBFS -- overRatioDbfs = 0.05 (5%) -- segmentCount = 1, duration = 30s - -``` -sustainedPenalty = clamp01((-60 - (-50)) / 6) = clamp01(-10/6) = 0 -timePenalty = clamp01(0.05 / 0.3) = 0.167 -segmentPenalty = clamp01((1/0.5) / 6) = clamp01(2/6) = 0.333 - -TotalPenalty = 0.4×0 + 0.3×0.167 + 0.3×0.333 = 0.15 -Score = 100 × (1 - 0.15) = 85 分 -``` - -**场景 2:嘈杂环境** -- p50Dbfs = -45 dBFS, threshold = -50 dBFS -- overRatioDbfs = 0.40 (40%) -- segmentCount = 8, duration = 30s - -``` -sustainedPenalty = clamp01((-45 - (-50)) / 6) = clamp01(5/6) = 0.833 -timePenalty = clamp01(0.40 / 0.3) = 1.0 -segmentPenalty = clamp01((8/0.5) / 6) = clamp01(16/6) = 1.0 - -TotalPenalty = 0.4×0.833 + 0.3×1.0 + 0.3×1.0 = 0.933 -Score = 100 × (1 - 0.933) = 6.7 分 -``` - ---- - -## 6. 数据存储层 - -### 6.1 切片服务 - -#### 6.1.1 localStorage 存储策略 - -存储键:`noise-slices` - -**隐私说明:** -- 存储内容:时间戳、噪音统计(不包含音频数据) -- 风险:可能泄露位置/日程信息 -- 建议:在 UI 中提供"清除历史"功能 - -#### 6.1.2 时间窗口清理 - -**默认保留时长:** 14 天 -**可配置范围:** 1 ~ 365 天 - -使用新切片的结束时间作为基准计算 cutoff,确保新切片不会被清理。 - -#### 6.1.3 容量限制 - -**容量上限:** 本地存储配额的 90% - -#### 6.1.4 数据规范化与校验 - -**精度控制:** -- dBFS:3 位小数 -- overRatioDbfs:4 位小数 -- 显示分贝:2 位小数 -- 评分:1 位小数 - ---- - -## 7. 历史报告生成 - -### 7.1 历史构建器 - -#### 7.1.1 与课表关联逻辑 - -**关联规则:** -1. 按日期分组切片 -2. 对每个日期的每个课时,查找重叠的切片 -3. 计算该课时的平均评分 - -#### 7.1.2 时段平均评分计算(加权平均) - -**公式:** -$$ \text{avgScore} = \frac{\sum_{i} \text{score}_i \times \text{effectiveMs}_i}{\sum_{i} \text{effectiveMs}_i} $$ - -其中: -$$ \text{effectiveMs}_i = \text{sampledDurationMs}_i \times \frac{\text{overlapMs}_i}{\text{sliceMs}_i} $$ - -#### 7.1.3 覆盖率计算 - -**公式:** -$$ \text{coverageRatio} = \frac{\text{totalMs}}{\text{periodMs}} $$ - -**含义:** 课时内有效采样时长占课时总时长的比例 - -#### 7.1.4 日期时间处理 - -**时区说明:** -- 使用本地时区 -- 内部存储使用 UTC 时间戳 -- 对外展示使用本地时间 - -**日期格式:** `YYYY-MM-DD` -**时间格式:** `HH:MM` - -#### 7.1.5 跨天课时处理 - -如果结束时间 ≤ 开始时间,则课时跨越到次日。 - -#### 7.1.6 报告中的图表 - -在噪音统计报告中,您可以直观地看到这些数据: - -- **评分走势图**:展示了 `Score` 随时间的变化,帮助您回顾专注状态 -- **噪音等级分布**:将每一帧归类为安静/正常/吵闹/极吵,直观展示时间占比 -- **扣分归因**:直接显示上述三个维度的扣分比例,告诉您为什么分低(是因为一直吵,还是因为总被打断) -- **打断次数密度**:展示每分钟被干扰的次数 - ---- - -## 8. 流服务整合 - -### 8.1 噪音流服务 - -#### 8.1.1 订阅/发布模式 - -**模式:** 观察者模式 -- 多个组件可同时订阅 -- 最后一个订阅者取消时自动停止采集 - -#### 8.1.2 生命周期管理 - -流服务支持启动、停止和重启操作,自动管理采集资源的生命周期。 - -#### 8.1.3 预热帧处理 - -**目的:** 丢弃麦克风启动后的不稳定数据(约 500ms) - -#### 8.1.4 设置热更新响应 - -**需要重启的参数:** -- frameMs -- sliceSec -- scoreThresholdDbfs -- segmentMergeGapMs -- maxSegmentsPerMin - -**无需重启的参数:** -- maxLevelDb -- showRealtimeDb -- alertSoundEnabled -- avgWindowSec -- baselineDb - -#### 8.1.5 时间加权平均 - -**公式:** -$$ \text{avg} = \frac{\sum_{i} v_i \times (t_{i+1} - t_i)}{\sum_{i} (t_{i+1} - t_i)} $$ - ---- - -## 9. 配置参数体系 - -### 9.1 常量定义 - -#### 9.1.1 分析参数 - -```typescript -NOISE_ANALYSIS_SLICE_SEC = 30; // 切片时长 30 秒 -NOISE_ANALYSIS_FRAME_MS = 50; // 帧间隔 50ms -NOISE_SCORE_THRESHOLD_DBFS = -50; // 评分阈值 -50dBFS -NOISE_SCORE_SEGMENT_MERGE_GAP_MS = 500; // 事件段合并间隔 500ms -NOISE_SCORE_MAX_SEGMENTS_PER_MIN = 6; // 每分钟最大事件段数 6 -NOISE_REALTIME_CHART_SLICE_COUNT = 1; // 实时图表切片数 1 -``` - -#### 9.1.2 报告参数 - -```typescript -DEFAULT_NOISE_REPORT_RETENTION_DAYS = 14; // 默认保留 14 天 -MIN_NOISE_REPORT_RETENTION_DAYS = 1; // 最小保留 1 天 -MAX_NOISE_REPORT_RETENTION_DAYS_FALLBACK = 365; // 最大保留 365 天 -``` - -### 9.2 设置管理 - -#### 9.2.1 固定参数 - -为保证评分口径稳定,避免用户通过调整参数"刷分",以下参数固定为程序内常量: -- sliceSec -- frameMs -- scoreThresholdDbfs -- segmentMergeGapMs -- maxSegmentsPerMin - -#### 9.2.2 可配置参数 - -| 参数 | 类型 | 默认值 | 说明 | -|------|------|--------|------| -| maxLevelDb | number | 55 | 最大允许噪音级别(显示分贝) | -| baselineDb | number | 40 | 手动基准显示分贝 | -| showRealtimeDb | boolean | true | 是否显示实时分贝 | -| avgWindowSec | number | 1 | 噪音平均时间窗(秒) | -| alertSoundEnabled | boolean | false | 超阈值提示音开关 | - ---- - -## 10. 类型定义 - -### 10.1 核心类型 - -#### 10.1.1 噪音帧采样 - -```typescript -interface NoiseFrameSample { - t: number; // 时间戳 - rms: number; // 均方根值 - dbfs: number; // 分贝值 (dBFS) - peak?: number; // 峰值 -} -``` - -#### 10.1.2 噪音切片原始统计 - -```typescript -interface NoiseSliceRawStats { - avgDbfs: number; // 平均分贝 - maxDbfs: number; // 最大分贝 - p50Dbfs: number; // 中位数分贝 - p95Dbfs: number; // 95分位数分贝 - overRatioDbfs: number; // 超阈值比例 - segmentCount: number; // 事件段数量 - sampledDurationMs?: number; // 采样时长 - gapCount?: number; // 缺口数量 - maxGapMs?: number; // 最大缺口时长 -} -``` - -#### 10.1.3 噪音切片显示统计 - -```typescript -interface NoiseSliceDisplayStats { - avgDb: number; // 平均显示分贝 - p95Db: number; // 95分位数显示分贝 -} -``` - -#### 10.1.4 噪音评分明细 - -```typescript -interface NoiseScoreBreakdown { - sustainedPenalty: number; // 持续噪音惩罚 - timePenalty: number; // 时间惩罚 - segmentPenalty: number; // 事件段惩罚 - thresholdsUsed: { - scoreThresholdDbfs: number; // 使用的评分阈值 - segmentMergeGapMs: number; // 使用的合并间隔 - maxSegmentsPerMin: number; // 使用的最大事件段数 - }; - sustainedLevelDbfs: number; // 持续电平 - overRatioDbfs: number; // 超阈值比例 - segmentCount: number; // 事件段数量 - minutes: number; // 时长(分钟) - durationMs?: number; // 物理时长 - sampledDurationMs?: number; // 采样时长 - coverageRatio?: number; // 覆盖率 -} -``` - -#### 10.1.5 噪音切片摘要 - -```typescript -interface NoiseSliceSummary { - start: number; // 开始时间戳 - end: number; // 结束时间戳 - frames: number; // 帧数 - raw: NoiseSliceRawStats; // 原始统计 - display: NoiseSliceDisplayStats; // 显示统计 - score: number; // 评分 - scoreDetail: NoiseScoreBreakdown; // 评分明细 -} -``` - -#### 10.1.6 实时数据点 - -```typescript -interface NoiseRealtimePoint { - t: number; // 时间戳 - dbfs: number; // 分贝值 (dBFS) - displayDb: number; // 显示分贝 -} -``` - -#### 10.1.7 噪音流快照 - -```typescript -interface NoiseStreamSnapshot { - status: NoiseStreamStatus; // 流状态 - realtimeDisplayDb: number; // 实时显示分贝 - realtimeDbfs: number; // 实时分贝 (dBFS) - maxLevelDb: number; // 最大允许级别 - showRealtimeDb: boolean; // 是否显示实时分贝 - alertSoundEnabled: boolean; // 提示音开关 - ringBuffer: NoiseRealtimePoint[]; // 环形缓冲区快照 - latestSlice: NoiseSliceSummary | null; // 最新切片 -} -``` - -#### 10.1.8 噪音流状态 - -```typescript -type NoiseStreamStatus = - | "initializing" // 初始化中 - | "quiet" // 安静 - | "noisy" // 嘈杂 - | "permission-denied" // 权限拒绝 - | "error"; // 错误 -``` - ---- - -## 附录 - -### A. 术语表 - -| 术语 | 英文 | 说明 | -|------|------|------| -| 均方根 | RMS (Root Mean Square) | 衡量音频信号强度的标准方法 | -| 分贝满刻度 | dBFS (Decibels relative to Full Scale) | 数字音频的标准分贝单位,范围 -100 到 0 dB | -| 显示分贝 | Display dB | 用于用户界面展示的分贝值,范围 20 到 100 dB | -| 切片 | Slice | 固定时间窗口(默认 30 秒)内的噪音数据聚合 | -| 帧 | Frame | 单次音频采样(默认 50ms) | -| 事件段 | Segment | 独立的噪音事件,通过合并窗口(500ms)合并 | - -### B. 参数固定策略 - -为保证统计口径稳定,当前版本将"分析与评分"的高级参数固定为程序内常量: - -| 参数 | 值 | 说明 | -|------|-----|------| -| frameMs | 50ms | 约 20fps | -| sliceSec | 30s | 切片时长 | -| scoreThresholdDbfs | -50 dBFS | 评分阈值 | -| segmentMergeGapMs | 500ms | 事件段合并间隔 | -| maxSegmentsPerMin | 6 | 每分钟最大事件段数 | - -### C. 技术栈 - -- **音频处理**:Web Audio API -- **数据存储**:localStorage -- **前端框架**:React 18 -- **构建工具**:Vite 5 -- **类型系统**:TypeScript 5.4 - - diff --git a/src/SQLitte/index.ts b/src/SQLitte/index.ts deleted file mode 100644 index aaa6213..0000000 --- a/src/SQLitte/index.ts +++ /dev/null @@ -1,42 +0,0 @@ -import { app as electronApp } from 'electron' -import { join } from 'path' -import Database from 'better-sqlite3' - -export type SqliteDb = { - pragma: (sql: string) => unknown - exec: (sql: string) => unknown - close: () => void -} - -export type SqliteHandle = { - db: SqliteDb - filePath: string - close: () => void -} - -export function createSqlite(): SqliteHandle { - const filePath = join(electronApp.getPath('userData'), 'lanmountain.sqlite3') - const db = new Database(filePath) as unknown as SqliteDb - - db.pragma('journal_mode = WAL') - db.pragma('foreign_keys = ON') - db.exec(` - CREATE TABLE IF NOT EXISTS kv ( - key TEXT PRIMARY KEY, - value TEXT NOT NULL, - updatedAt INTEGER NOT NULL - ); - `) - - const close = (): void => { - try { - db.close() - } catch { - return - } - } - - electronApp.once('before-quit', close) - - return { db, filePath, close } -} diff --git a/src/app_list/index.ts b/src/app_list/index.ts deleted file mode 100644 index 5e346da..0000000 --- a/src/app_list/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -export { listWindowsStartMenuApps } from './list' -export { launchStartMenuEntry } from './launch' -export type { WindowsStartMenuAppEntry, WindowsStartMenuEntryType } from './types' diff --git a/src/app_list/launch.ts b/src/app_list/launch.ts deleted file mode 100644 index fac70b6..0000000 --- a/src/app_list/launch.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { shell } from 'electron' -import { execFile } from 'child_process' -import { resolve } from 'path' -import { promisify } from 'util' -import { getStartMenuRoots } from './paths' - -const execFileAsync = promisify(execFile) - -function isUnderRoot(filePath: string, root: string): boolean { - const normalizedFile = resolve(filePath).toLowerCase() - const normalizedRoot = resolve(root).toLowerCase() - return normalizedFile === normalizedRoot || normalizedFile.startsWith(normalizedRoot + '\\') -} - -export async function launchStartMenuEntry(filePath: string): Promise { - if (process.platform !== 'win32') return - - if (filePath.startsWith('shell:AppsFolder\\')) { - await execFileAsync('explorer.exe', [filePath], { windowsHide: true }) - return - } - - const roots = getStartMenuRoots() - const allowed = roots.some((root) => isUnderRoot(filePath, root)) - if (!allowed) { - throw new Error('PathNotAllowed') - } - - const result = await shell.openPath(filePath) - if (result) { - throw new Error(result) - } -} diff --git a/src/app_list/list.ts b/src/app_list/list.ts deleted file mode 100644 index 98d1b77..0000000 --- a/src/app_list/list.ts +++ /dev/null @@ -1,167 +0,0 @@ -import { execFile } from 'child_process' -import { join } from 'path' -import { promisify } from 'util' -import { getStartMenuRoots } from './paths' -import type { WindowsStartMenuAppEntry } from './types' - -const execFileAsync = promisify(execFile) - -function getWindowsPowerShellExe(): string { - const systemRoot = process.env['SystemRoot'] ?? process.env['WINDIR'] ?? 'C:\\Windows' - return join(systemRoot, 'System32', 'WindowsPowerShell', 'v1.0', 'powershell.exe') -} - -function buildPowerShellScript(roots: string[]): string { - const rootsJson = JSON.stringify(roots).replace(/'/g, "''") - - return [ - '[Console]::OutputEncoding = [System.Text.Encoding]::UTF8', - '$ErrorActionPreference = "Stop"', - '$out = $null', - 'try {', - `$roots = '${rootsJson}' | ConvertFrom-Json`, - '$wsh = New-Object -ComObject WScript.Shell', - '$entries = @()', - 'foreach ($root in $roots) {', - ' if (-not (Test-Path -LiteralPath $root)) { continue }', - ' Get-ChildItem -LiteralPath $root -Recurse -File -ErrorAction SilentlyContinue | ForEach-Object {', - ' $ext = $_.Extension.ToLowerInvariant()', - ' if ($ext -ne ".lnk" -and $ext -ne ".url" -and $ext -ne ".appref-ms") { return }', - ' $source = "unknown"', - ' if ($root -like "*\\\\AppData\\\\Roaming*") { $source = "user" }', - ' if ($root -like "*\\\\ProgramData*") { $source = "common" }', - ' $rel = $_.FullName.Substring($root.Length).TrimStart("\\\\")', - ' if ($ext -eq ".lnk") {', - ' $sc = $wsh.CreateShortcut($_.FullName)', - ' $entries += [pscustomobject]@{', - ' id = $_.FullName', - ' name = $_.BaseName', - ' type = "lnk"', - ' filePath = $_.FullName', - ' relativePath = $rel', - ' targetPath = $sc.TargetPath', - ' arguments = $sc.Arguments', - ' workingDirectory = $sc.WorkingDirectory', - ' iconLocation = $sc.IconLocation', - ' description = $sc.Description', - ' source = $source', - ' }', - ' return', - ' }', - ' $t = "appref-ms"', - ' if ($ext -eq ".url") { $t = "url" }', - ' $entries += [pscustomobject]@{', - ' id = $_.FullName', - ' name = $_.BaseName', - ' type = $t', - ' filePath = $_.FullName', - ' relativePath = $rel', - ' source = $source', - ' }', - ' }', - '}', - '$usedStartApps = $false', - 'try {', - ' $startApps = Get-StartApps | Select-Object Name, AppID', - ' if ($startApps -ne $null) {', - ' $usedStartApps = $true', - ' foreach ($a in $startApps) {', - ' if ([string]::IsNullOrWhiteSpace($a.AppID)) { continue }', - ' $entries += [pscustomobject]@{', - ' id = "appsFolder:" + $a.AppID', - ' name = $a.Name', - ' type = "uwp"', - ' filePath = "shell:AppsFolder\\\\" + $a.AppID', - ' relativePath = "AppsFolder\\\\" + $a.Name', - ' appUserModelId = $a.AppID', - ' source = "appsfolder"', - ' }', - ' }', - ' }', - '} catch { }', - 'if (-not $usedStartApps) {', - ' $shell = New-Object -ComObject Shell.Application', - ' $appsFolder = $shell.NameSpace("shell:AppsFolder")', - ' if ($appsFolder -ne $null) {', - ' $appsFolder.Items() | ForEach-Object {', - ' $aumid = $_.Path', - ' if ([string]::IsNullOrWhiteSpace($aumid)) { return }', - ' $name = $_.Name', - ' $entries += [pscustomobject]@{', - ' id = "appsFolder:" + $aumid', - ' name = $name', - ' type = "uwp"', - ' filePath = "shell:AppsFolder\\\\" + $aumid', - ' relativePath = "AppsFolder\\\\" + $name', - ' appUserModelId = $aumid', - ' source = "appsfolder"', - ' }', - ' }', - ' }', - '}', - '$out = [pscustomobject]@{ ok = $true; entries = $entries }', - '} catch {', - ' $out = [pscustomobject]@{ ok = $false; error = ($_ | Out-String); entries = @() }', - '}', - '$out | ConvertTo-Json -Depth 6' - ].join('\n') -} - -export async function listWindowsStartMenuApps(): Promise { - if (process.platform !== 'win32') return [] - - const roots = getStartMenuRoots() - - const script = buildPowerShellScript(roots) - const powershellExe = getWindowsPowerShellExe() - const { stdout } = await execFileAsync( - powershellExe, - ['-NoProfile', '-NonInteractive', '-Sta', '-ExecutionPolicy', 'Bypass', '-Command', script], - { windowsHide: true, maxBuffer: 50 * 1024 * 1024, timeout: 60_000 } - ) - - const trimmed = stdout.trim() - if (!trimmed) return [] - - const parsed: unknown = JSON.parse(trimmed) - - if (typeof parsed === 'object' && parsed !== null && 'ok' in parsed) { - const ok = (parsed as { ok?: unknown }).ok - if (ok === false) { - const error = (parsed as { error?: unknown }).error - throw new Error(typeof error === 'string' ? error : 'PowerShellFailed') - } - } - - const rawEntries: unknown = - typeof parsed === 'object' && parsed !== null && 'entries' in parsed - ? (parsed as { entries?: unknown }).entries - : parsed - - const list: unknown[] = Array.isArray(rawEntries) ? rawEntries : rawEntries ? [rawEntries] : [] - - const isEntry = (value: unknown): value is WindowsStartMenuAppEntry => { - if (typeof value !== 'object' || value === null) return false - const v = value as Record - return ( - typeof v.id === 'string' && - typeof v.name === 'string' && - typeof v.type === 'string' && - typeof v.filePath === 'string' && - typeof v.relativePath === 'string' - ) - } - - const seen = new Set() - const result: WindowsStartMenuAppEntry[] = [] - - for (const item of list) { - if (!isEntry(item)) continue - if (seen.has(item.id)) continue - seen.add(item.id) - result.push(item) - } - - result.sort((a, b) => a.name.localeCompare(b.name, 'zh-CN')) - return result -} diff --git a/src/app_list/paths.ts b/src/app_list/paths.ts deleted file mode 100644 index 9ddde12..0000000 --- a/src/app_list/paths.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { join } from 'path' - -export interface StartMenuPaths { - userProgramsPath: string | null - commonProgramsPath: string | null -} - -export function getStartMenuPaths(): StartMenuPaths { - const appData = process.env['APPDATA'] - const programData = process.env['ProgramData'] ?? process.env['PROGRAMDATA'] - - return { - userProgramsPath: appData - ? join(appData, 'Microsoft', 'Windows', 'Start Menu', 'Programs') - : null, - commonProgramsPath: programData - ? join(programData, 'Microsoft', 'Windows', 'Start Menu', 'Programs') - : null - } -} - -export function getStartMenuRoots(): string[] { - const { userProgramsPath, commonProgramsPath } = getStartMenuPaths() - return [userProgramsPath, commonProgramsPath].filter((p): p is string => Boolean(p)) -} diff --git a/src/app_list/types.ts b/src/app_list/types.ts deleted file mode 100644 index ba9445a..0000000 --- a/src/app_list/types.ts +++ /dev/null @@ -1,16 +0,0 @@ -export type WindowsStartMenuEntryType = 'lnk' | 'url' | 'appref-ms' | 'uwp' | 'other' - -export interface WindowsStartMenuAppEntry { - id: string - name: string - type: WindowsStartMenuEntryType - filePath: string - relativePath: string - appUserModelId?: string | null - targetPath?: string | null - arguments?: string | null - workingDirectory?: string | null - iconLocation?: string | null - description?: string | null - source: 'user' | 'common' | 'appsfolder' | 'unknown' -} diff --git a/src/eiysia/app.ts b/src/eiysia/app.ts deleted file mode 100644 index 03a54b8..0000000 --- a/src/eiysia/app.ts +++ /dev/null @@ -1,267 +0,0 @@ -import { app as electronApp, BrowserWindow, shell } from 'electron' -import { Elysia } from 'elysia' -import { execFile } from 'child_process' -import { promises as fs } from 'fs' -import { join } from 'path' -import { promisify } from 'util' -import { launchStartMenuEntry, listWindowsStartMenuApps } from '../app_list' -import { createSqlite } from '../SQLitte' - -export interface EiysiaDependencies { - getMainWindow: () => BrowserWindow | null - getHttpPort: () => number | null -} - -const execFileAsync = promisify(execFile) - -export function createEiysiaApp(deps: EiysiaDependencies): { - handle: (request: Request) => Response | Promise -} { - type CachedApp = { - id: string - name: string - filePath: string - iconDataUrl: string - } - - const sqliteHandle = createSqlite() - - const iconCache = new Map() - const appsCacheFilePath = join(electronApp.getPath('userData'), 'apps-cache.json') - let cachedApps: CachedApp[] = [] - let cacheLoadPromise: Promise | null = null - let refreshPromise: Promise | null = null - - const ensureAppsCacheLoaded = async (): Promise => { - if (cacheLoadPromise) return cacheLoadPromise - cacheLoadPromise = (async () => { - try { - const raw = await fs.readFile(appsCacheFilePath, 'utf-8') - const parsed = JSON.parse(raw) as { - apps?: Array<{ id?: unknown; name?: unknown; filePath?: unknown; iconDataUrl?: unknown }> - } - - const apps = Array.isArray(parsed.apps) ? parsed.apps : [] - const parsedApps = apps.map((a) => { - const id = typeof a.id === 'string' ? a.id : '' - const name = typeof a.name === 'string' ? a.name : '' - const filePath = typeof a.filePath === 'string' ? a.filePath : '' - const iconDataUrl = typeof a.iconDataUrl === 'string' ? a.iconDataUrl : '' - if (!id || !name || !filePath || !iconDataUrl) return null - return { id, name, filePath, iconDataUrl } - }) - - cachedApps = parsedApps.filter((a): a is CachedApp => Boolean(a)) - } catch { - cachedApps = [] - } - })() - return cacheLoadPromise - } - - const persistAppsCache = async (apps: CachedApp[]): Promise => { - const payload = JSON.stringify( - { - version: 1, - updatedAt: Date.now(), - apps - }, - null, - 2 - ) - await fs.writeFile(appsCacheFilePath, payload, 'utf-8') - } - - const refreshAppsCache = async (): Promise => { - if (refreshPromise) return refreshPromise - refreshPromise = (async () => { - const cachedById = new Map(cachedApps.map((a) => [a.id, a])) - const entries = await listWindowsStartMenuApps() - - let index = 0 - const limit = Math.max(4, Math.min(16, entries.length)) - const nextApps: CachedApp[] = new Array(entries.length) - - const workers = Array.from({ length: limit }, async () => { - while (true) { - const i = index - index += 1 - if (i >= entries.length) return - - const e = entries[i] - const cached = cachedById.get(e.id) - if ( - cached && - cached.name === e.name && - cached.filePath === e.filePath && - cached.iconDataUrl - ) { - nextApps[i] = cached - continue - } - - const iconDataUrl = await getIconDataUrl(e) - nextApps[i] = { id: e.id, name: e.name, filePath: e.filePath, iconDataUrl } - } - }) - - await Promise.all(workers) - cachedApps = nextApps.filter(Boolean) - await persistAppsCache(cachedApps) - })().finally(() => { - refreshPromise = null - }) - - return refreshPromise - } - - const placeholderIconDataUrl = (name: string, id: string): string => { - const letter = (name.trim().charAt(0) || '?').toUpperCase() - - let hash = 0 - for (let i = 0; i < id.length; i += 1) { - hash = (hash * 31 + id.charCodeAt(i)) | 0 - } - const hue = Math.abs(hash) % 360 - - const svg = `${letter.replace( - /[<>&]/g, - '' - )}` - - return `data:image/svg+xml;base64,${Buffer.from(svg, 'utf-8').toString('base64')}` - } - - const getIconDataUrl = async (entry: { - id: string - name: string - type: string - filePath: string - targetPath?: string | null - }): Promise => { - const cached = iconCache.get(entry.id) - if (cached) return cached - - if (entry.type === 'uwp' || entry.filePath.startsWith('shell:')) { - const dataUrl = placeholderIconDataUrl(entry.name, entry.id) - iconCache.set(entry.id, dataUrl) - return dataUrl - } - - if (!electronApp.isReady()) { - const dataUrl = placeholderIconDataUrl(entry.name, entry.id) - iconCache.set(entry.id, dataUrl) - return dataUrl - } - - try { - const tryPath = - typeof entry.targetPath === 'string' && entry.targetPath.trim() - ? entry.targetPath - : entry.filePath - const rawIcon = await electronApp - .getFileIcon(tryPath, { size: 'large' }) - .catch(() => electronApp.getFileIcon(tryPath, { size: 'normal' })) - - let icon = rawIcon - if (!icon.isEmpty()) { - const { width, height } = icon.getSize() - const target = 64 - if (width > 0 && height > 0 && (width < target || height < target)) { - icon = icon.resize({ width: target, height: target, quality: 'best' }) - } - } - - const dataUrl = icon.isEmpty() - ? placeholderIconDataUrl(entry.name, entry.id) - : icon.toDataURL() - iconCache.set(entry.id, dataUrl) - return dataUrl - } catch { - const dataUrl = placeholderIconDataUrl(entry.name, entry.id) - iconCache.set(entry.id, dataUrl) - return dataUrl - } - } - - return new Elysia() - .get('/db/sqlite/health', () => ({ - ok: true, - path: sqliteHandle.filePath - })) - .get('/health', () => ({ - ok: true, - time: Date.now() - })) - .onStart(() => { - void ensureAppsCacheLoaded().then(() => refreshAppsCache()) - }) - .get('/apps/list', async () => { - try { - await ensureAppsCacheLoaded() - if (cachedApps.length === 0) { - await refreshAppsCache() - } else { - void refreshAppsCache() - } - - return { apps: cachedApps, error: null as string | null } - } catch (error) { - const message = error instanceof Error ? error.message : 'UnknownError' - console.error('[apps/list] failed:', message) - return { apps: [], error: message } - } - }) - .post('/apps/launch', async ({ body }) => { - const payload = body as { filePath?: unknown } - if (typeof payload.filePath !== 'string') { - return new Response('BadRequest', { status: 400 }) - } - - try { - await launchStartMenuEntry(payload.filePath) - return { ok: true } - } catch (error) { - const message = error instanceof Error ? error.message : 'UnknownError' - if (message === 'PathNotAllowed') return new Response('Forbidden', { status: 403 }) - return new Response('LaunchFailed', { status: 500 }) - } - }) - .post('/open/external', async ({ body }) => { - const payload = body as { url?: unknown } - if (typeof payload.url !== 'string') { - return new Response('BadRequest', { status: 400 }) - } - - const url = payload.url.trim() - if (!url) return new Response('BadRequest', { status: 400 }) - - const lower = url.toLowerCase() - if ( - lower.startsWith('javascript:') || - lower.startsWith('data:') || - lower.startsWith('file:') - ) { - return new Response('Forbidden', { status: 403 }) - } - - try { - if (process.platform === 'win32' && lower.startsWith('shell:')) { - await execFileAsync('explorer.exe', [url], { windowsHide: true }) - return { ok: true } - } - - await shell.openExternal(url) - return { ok: true } - } catch { - return new Response('OpenFailed', { status: 500 }) - } - }) - .get('/backend/port', () => ({ - port: deps.getHttpPort() - })) - .post('/app/minimize', () => { - deps.getMainWindow()?.minimize() - return { ok: true } - }) -} diff --git a/src/eiysia/index.ts b/src/eiysia/index.ts deleted file mode 100644 index 5b4cd5b..0000000 --- a/src/eiysia/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -export { createEiysiaApp } from './app' -export { registerEiysiaIpc } from './ipc' -export { startEiysiaHttpServer } from './server' diff --git a/src/eiysia/ipc.ts b/src/eiysia/ipc.ts deleted file mode 100644 index 3cc8304..0000000 --- a/src/eiysia/ipc.ts +++ /dev/null @@ -1,59 +0,0 @@ -import { ipcMain } from 'electron' - -export interface EiysiaIpcRequest { - method: string - path: string - headers?: Record - body?: unknown -} - -export interface EiysiaIpcResponse { - status: number - headers: Record - bodyText: string -} - -export function registerEiysiaIpc(app: { - handle: (request: Request) => Response | Promise -}): void { - ipcMain.handle( - 'eiysia:request', - async (_event, payload: EiysiaIpcRequest): Promise => { - const method = payload.method?.toUpperCase?.() ?? 'GET' - const path = payload.path?.startsWith('/') ? payload.path : `/${payload.path ?? ''}` - - const headers = new Headers(payload.headers ?? {}) - let body: BodyInit | undefined - - if (payload.body !== undefined) { - if ( - typeof payload.body === 'string' || - payload.body instanceof ArrayBuffer || - ArrayBuffer.isView(payload.body) - ) { - body = payload.body as BodyInit - } else { - body = JSON.stringify(payload.body) - if (!headers.has('content-type')) { - headers.set('content-type', 'application/json') - } - } - } - - const request = new Request(`http://eiysia.local${path}`, { - method, - headers, - body - }) - - const response = await app.handle(request) - const bodyText = await response.text() - - return { - status: response.status, - headers: Object.fromEntries(response.headers.entries()), - bodyText - } - } - ) -} diff --git a/src/eiysia/server.ts b/src/eiysia/server.ts deleted file mode 100644 index 3a2aafb..0000000 --- a/src/eiysia/server.ts +++ /dev/null @@ -1,39 +0,0 @@ -import { Elysia } from 'elysia' -import { node } from '@elysiajs/node' - -export interface EiysiaServerHandle { - app: unknown - port: number | null - stop: () => void -} - -export function startEiysiaHttpServer(app: unknown): EiysiaServerHandle { - const serverApp = new Elysia({ adapter: node() }) - .use(app as never) - .listen({ hostname: '127.0.0.1', port: 0 }) - - let stopped = false - const stop = (): void => { - if (stopped) return - stopped = true - - try { - if (!serverApp.server) return - - const maybe = serverApp as unknown as { - stop?: () => Promise | void - close?: () => void - } - if (typeof maybe.stop === 'function') maybe.stop() - else if (typeof maybe.close === 'function') maybe.close() - } catch { - return - } - } - - return { - app: serverApp, - port: serverApp.server?.port ?? null, - stop - } -} diff --git a/src/main/index.ts b/src/main/index.ts deleted file mode 100644 index c9390f8..0000000 --- a/src/main/index.ts +++ /dev/null @@ -1,96 +0,0 @@ -import { app, shell, BrowserWindow } from 'electron' -import { join } from 'path' -import { electronApp, optimizer, is } from '@electron-toolkit/utils' -import icon from '../../resources/icon.png?asset' -import { createEiysiaApp, registerEiysiaIpc, startEiysiaHttpServer } from '../eiysia' - -app.commandLine.appendSwitch('touch-events', 'enabled') - -let mainWindow: BrowserWindow | null = null -let eiysiaServerStop: (() => void) | null = null -let eiysiaHttpPort: number | null = null - -function createWindow(): void { - // Create the browser window. - const window = new BrowserWindow({ - show: false, - autoHideMenuBar: true, - fullscreen: true, - ...(process.platform === 'linux' ? { icon } : {}), - webPreferences: { - preload: join(__dirname, '../preload/index.js'), - sandbox: false - } - }) - - mainWindow = window - - window.on('ready-to-show', () => { - window.show() - }) - - window.webContents.setWindowOpenHandler((details) => { - shell.openExternal(details.url) - return { action: 'deny' } - }) - - // HMR for renderer base on electron-vite cli. - // Load the remote URL for development or the local html file for production. - if (is.dev && process.env['ELECTRON_RENDERER_URL']) { - window.loadURL(process.env['ELECTRON_RENDERER_URL']) - } else { - window.loadFile(join(__dirname, '../renderer/index.html')) - } -} - -// This method will be called when Electron has finished -// initialization and is ready to create browser windows. -// Some APIs can only be used after this event occurs. -app.whenReady().then(() => { - // Set app user model id for windows - electronApp.setAppUserModelId('com.electron') - - // Default open or close DevTools by F12 in development - // and ignore CommandOrControl + R in production. - // see https://github.com/alex8088/electron-toolkit/tree/master/packages/utils - app.on('browser-window-created', (_, window) => { - optimizer.watchWindowShortcuts(window) - }) - - const eiysia = createEiysiaApp({ - getMainWindow: () => mainWindow, - getHttpPort: () => eiysiaHttpPort - }) - - registerEiysiaIpc(eiysia) - - const server = startEiysiaHttpServer(eiysia) - eiysiaHttpPort = server.port - eiysiaServerStop = server.stop - - createWindow() - - app.on('activate', function () { - // On macOS it's common to re-create a window in the app when the - // dock icon is clicked and there are no other windows open. - if (BrowserWindow.getAllWindows().length === 0) createWindow() - }) -}) - -// Quit when all windows are closed, except on macOS. There, it's common -// for applications and their menu bar to stay active until the user quits -// explicitly with Cmd + Q. -app.on('window-all-closed', () => { - if (process.platform !== 'darwin') { - app.quit() - } -}) - -app.on('before-quit', () => { - eiysiaServerStop?.() - eiysiaServerStop = null - eiysiaHttpPort = null -}) - -// In this file you can include the rest of your app's specific main process -// code. You can also put them in separate files and require them here. diff --git a/src/preload/index.d.ts b/src/preload/index.d.ts deleted file mode 100644 index d525a18..0000000 --- a/src/preload/index.d.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { ElectronAPI } from '@electron-toolkit/preload' - -export interface AppApi { - request: (payload: { - method: string - path: string - headers?: Record - body?: unknown - }) => Promise<{ status: number; headers: Record; bodyText: string }> - call: (payload: { - method: string - path: string - headers?: Record - body?: unknown - }) => Promise -} - -declare global { - interface Window { - electron: ElectronAPI - api: AppApi - } -} diff --git a/src/preload/index.ts b/src/preload/index.ts deleted file mode 100644 index 754caa4..0000000 --- a/src/preload/index.ts +++ /dev/null @@ -1,46 +0,0 @@ -import { contextBridge, ipcRenderer } from 'electron' -import { electronAPI } from '@electron-toolkit/preload' - -// Custom APIs for renderer -const api = { - request: (payload: { - method: string - path: string - headers?: Record - body?: unknown - }): Promise<{ status: number; headers: Record; bodyText: string }> => - ipcRenderer.invoke('eiysia:request', payload), - call: async (payload: { - method: string - path: string - headers?: Record - body?: unknown - }): Promise => { - const response: { status: number; headers: Record; bodyText: string } = - await ipcRenderer.invoke('eiysia:request', payload) - - const contentType = response.headers['content-type'] ?? response.headers['Content-Type'] - if (contentType?.includes('application/json')) { - return JSON.parse(response.bodyText) as T - } - - return response.bodyText as T - } -} - -// Use `contextBridge` APIs to expose Electron APIs to -// renderer only if context isolation is enabled, otherwise -// just add to the DOM global. -if (process.contextIsolated) { - try { - contextBridge.exposeInMainWorld('electron', electronAPI) - contextBridge.exposeInMainWorld('api', api) - } catch (error) { - console.error(error) - } -} else { - // @ts-ignore (define in dts) - window.electron = electronAPI - // @ts-ignore (define in dts) - window.api = api -} diff --git a/src/renderer/index.html b/src/renderer/index.html deleted file mode 100644 index 0f6af23..0000000 --- a/src/renderer/index.html +++ /dev/null @@ -1,17 +0,0 @@ - - - - - Electron - - - - - - - - - diff --git a/src/renderer/src/App.vue b/src/renderer/src/App.vue deleted file mode 100644 index 5d158ff..0000000 --- a/src/renderer/src/App.vue +++ /dev/null @@ -1,1229 +0,0 @@ - - - {{ timeText }} - - - - - - - - - 书写 - - - - - - {{ a.label }} - - - - - - - 作业版 - - 新建 - - - - - - - - - - - - - - - {{ tile.title }} - - - - - - - - - - - - 加载中... - - - 加载失败 - 复制错误 - - {{ loadError }} - - - - - {{ group.label }} - - - {{ app.name }} - - - - - - - 返回 - - - - - - 回到Window - - - - - - - - - - - 设置 - - 主页编辑 - - - - - - 主页编辑 - - - 进入主页编辑 - - - 退出编辑 - - - 恢复默认 - - - - - - - - 组件与点击行为 - - - - {{ w.title }} - - {{ w.sizeLabel }} · {{ w.enabled ? '已添加' : '未添加' }} · {{ w.visible ? '显示中' : '未显示' }} - - - - - 内置按钮 - - {{ a.label }} - {{ actionSummary(a.id) }} - - - - 点击行为 - {{ actionSummary(w.id) }} - - - - - - - - - - 主页组件(点按添加/移除) - - - - - - {{ w.title }} - {{ w.size }} - - - - - - 排序(仅已添加) - - - {{ widgetTitle(id) }} - - - 上移 - - - 下移 - - - 设置 - - - - - - - - 详细设置:{{ widgetTitle(homeEditSelectedId) }} - - - - {{ a.label }} - - 打开应用 - 打开URL - - - - 清空 - - - - 作业版目前不支持自定义点击行为。 - - - - - - 打开应用 - 打开URL - - - - 清空 - - - 当前:{{ actionSummary(homeEditSelectedId) }} - - - - - - - - - 返回 - - - - - 回到Window - - - - - - - - 回到Window - - - 设置 - - - - - diff --git a/src/renderer/src/assets/base.css b/src/renderer/src/assets/base.css deleted file mode 100644 index 5ed6406..0000000 --- a/src/renderer/src/assets/base.css +++ /dev/null @@ -1,67 +0,0 @@ -:root { - --ev-c-white: #ffffff; - --ev-c-white-soft: #f8f8f8; - --ev-c-white-mute: #f2f2f2; - - --ev-c-black: #1b1b1f; - --ev-c-black-soft: #222222; - --ev-c-black-mute: #282828; - - --ev-c-gray-1: #515c67; - --ev-c-gray-2: #414853; - --ev-c-gray-3: #32363f; - - --ev-c-text-1: rgba(255, 255, 245, 0.86); - --ev-c-text-2: rgba(235, 235, 245, 0.6); - --ev-c-text-3: rgba(235, 235, 245, 0.38); - - --ev-button-alt-border: transparent; - --ev-button-alt-text: var(--ev-c-text-1); - --ev-button-alt-bg: var(--ev-c-gray-3); - --ev-button-alt-hover-border: transparent; - --ev-button-alt-hover-text: var(--ev-c-text-1); - --ev-button-alt-hover-bg: var(--ev-c-gray-2); -} - -:root { - --color-background: var(--ev-c-black); - --color-background-soft: var(--ev-c-black-soft); - --color-background-mute: var(--ev-c-black-mute); - - --color-text: var(--ev-c-text-1); -} - -*, -*::before, -*::after { - box-sizing: border-box; - margin: 0; - font-weight: normal; -} - -ul { - list-style: none; -} - -body { - min-height: 100vh; - color: var(--color-text); - background: var(--color-background); - line-height: 1.6; - font-family: - Inter, - -apple-system, - BlinkMacSystemFont, - 'Segoe UI', - Roboto, - Oxygen, - Ubuntu, - Cantarell, - 'Fira Sans', - 'Droid Sans', - 'Helvetica Neue', - sans-serif; - text-rendering: optimizeLegibility; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} diff --git a/src/renderer/src/assets/electron.svg b/src/renderer/src/assets/electron.svg deleted file mode 100644 index 45ef09c..0000000 --- a/src/renderer/src/assets/electron.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/src/renderer/src/assets/main.css b/src/renderer/src/assets/main.css deleted file mode 100644 index 838bc35..0000000 --- a/src/renderer/src/assets/main.css +++ /dev/null @@ -1,1212 +0,0 @@ -@import './base.css'; - -body { - margin: 0; - width: 100vw; - height: 100vh; - overflow: hidden; - background-image: url('./wavy-lines.svg'); - background-size: cover; - user-select: none; -} - -#root { - width: 100%; - height: 100%; -} - -.screen { - width: 100%; - height: 100%; -} - -.pagesViewport { - width: 100%; - height: 100%; - overflow: hidden; -} - -.pagesTrack { - width: 200%; - height: 100%; - display: flex; - flex-direction: row; - transition: transform 220ms ease; - will-change: transform; -} - -.pagesTrack[data-active='home'] { - transform: translateX(0); -} - -.pagesTrack[data-active='apps'] { - transform: translateX(-50%); -} - -.page { - width: 50%; - height: 100%; - transform: translateZ(0); - position: relative; -} - -.touchButton { - touch-action: manipulation; - -webkit-tap-highlight-color: transparent; -} - -/* 移除旧的 .notesPanel 和 .launcher 相关样式,它们已不再使用 */ - -.home { - position: fixed; - left: 0; - top: 0; - width: 100%; - height: 100%; - display: flex; - align-items: stretch; - justify-content: flex-start; -} - -.desktopGridShell { - position: absolute; - left: 16px; - right: 16px; - top: 88px; - bottom: 96px; - display: block; - box-sizing: border-box; -} - -.desktopGrid { - display: grid; - grid-template-columns: repeat(8, minmax(100px, 1fr)); - grid-template-rows: repeat(5, minmax(100px, 1fr)); - gap: 12px; - height: 100%; - box-sizing: border-box; -} - -.deskTile { - cursor: default; - border-radius: 16px; - border: 1px solid rgba(255, 255, 255, 0.12); - background: rgba(0, 0, 0, 0.25); - color: var(--ev-c-text-1); - padding: 12px; - box-sizing: border-box; - display: flex; - flex-direction: column; - justify-content: center; - align-items: flex-start; - text-align: left; - overflow: hidden; - position: relative; -} - -.deskTile--notes { - padding: 0; -} - -.notesWidget { - width: 100%; - height: 100%; - display: grid; - grid-template-rows: 48px 1fr; - overflow: hidden; -} - -.notesWidget .notesHeader { - display: flex; - align-items: center; - justify-content: space-between; - padding: 0 12px; - background: rgba(255, 255, 255, 0.05); - border-bottom: 1px solid rgba(255, 255, 255, 0.08); -} - -.notesWidget .notesHeaderTitle { - font-size: 16px; - font-weight: 800; -} - -.notesWidget .notesAddButton { - height: 32px; - padding: 0 12px; - font-size: 14px; -} - -.notesWidget .notesGrid { - padding: 10px; - grid-template-columns: repeat(auto-fill, minmax(160px, 1fr)); - grid-auto-rows: 140px; - gap: 10px; -} - -.notesWidget .noteCard { - background: rgba(255, 255, 255, 0.04); -} - -button.deskTile { - cursor: pointer; -} - -.deskTile:hover { - border-color: rgba(255, 255, 255, 0.2); - background: rgba(0, 0, 0, 0.35); -} - -.deskTile:active { - border-color: rgba(255, 255, 255, 0.26); - background: rgba(0, 0, 0, 0.5); -} - -.deskTileTitle { - font-size: 20px; - line-height: 24px; - font-weight: 900; -} - -.deskTileSubtitle { - font-size: 14px; - line-height: 18px; - font-weight: 700; - opacity: 0.85; -} - -.deskTileRow { - width: 100%; - height: 100%; - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - gap: 6px; - padding: 8px; - box-sizing: border-box; -} - -.deskTileIcon { - width: 28px; - height: 28px; - flex: 0 0 auto; - opacity: 0.95; - transition: transform 0.2s ease; -} - -.deskTile:active .deskTileIcon { - transform: scale(0.9); -} - -.deskTileText { - font-size: 13px; - line-height: 1.2; - font-weight: 700; - text-align: center; - word-break: break-all; - display: -webkit-box; - -webkit-line-clamp: 2; - -webkit-box-orient: vertical; - overflow: hidden; - opacity: 0.9; -} - -/* 针对较宽组件的特殊布局 (如 2x1, 4x2) */ -.deskTile[style*="span 2"] .deskTileRow, -.deskTile[style*="span 4"] .deskTileRow, -.deskTile[style*="span 8"] .deskTileRow { - flex-direction: row; - justify-content: flex-start; - padding: 0 16px; - gap: 14px; -} - -.deskTile[style*="span 2"] .deskTileIcon, -.deskTile[style*="span 4"] .deskTileIcon, -.deskTile[style*="span 8"] .deskTileIcon { - width: 32px; - height: 32px; -} - -.deskTile[style*="span 2"] .deskTileText, -.deskTile[style*="span 4"] .deskTileText, -.deskTile[style*="span 8"] .deskTileText { - font-size: 16px; - text-align: left; - -webkit-line-clamp: 1; -} - -/* 针对较高组件的特殊布局 (如 1x2, 2x4) */ -.deskTile[style*="grid-row: span 2"] .deskTileRow, -.deskTile[style*="grid-row: span 4"] .deskTileRow { - justify-content: center; -} - -/* 针对 1x1 极小组件的微调 */ -.deskTile[style*="span 1 / span 1"] .deskTileText { - font-size: 12px; -} - -.deskTile--panel { - justify-content: flex-start; - padding: 12px; -} - -.writingPanelTitle { - font-size: 20px; - line-height: 24px; - font-weight: 900; - margin-bottom: 10px; -} - -.writingPanelButtons { - width: 100%; - display: grid; - grid-template-columns: repeat(auto-fit, minmax(160px, 1fr)); - gap: 10px; - overflow-y: auto; - scrollbar-width: none; -} - -.writingPanelButtons::-webkit-scrollbar { - display: none; -} - -.writingActionButton { - width: 100%; - height: 52px; - cursor: pointer; - display: flex; - align-items: center; - gap: 12px; - border-radius: 14px; - padding: 0 12px; - border: 1px solid rgba(255, 255, 255, 0.12); - background: rgba(0, 0, 0, 0.18); - color: var(--ev-c-text-1); - box-sizing: border-box; -} - -.writingActionButton:hover { - border-color: rgba(255, 255, 255, 0.22); - background: rgba(0, 0, 0, 0.3); -} - -.writingActionButton:active { - border-color: rgba(255, 255, 255, 0.26); - background: rgba(0, 0, 0, 0.45); -} - -.writingActionIcon { - width: 20px; - height: 20px; - flex: 0 0 auto; - opacity: 0.95; -} - -.writingActionText { - font-size: 16px; - line-height: 18px; - font-weight: 900; -} - -.deskTile--accent { - background: rgba(0, 0, 0, 0.45); -} - -.deskTile--soft { - background: rgba(0, 0, 0, 0.18); -} - -/* 移除旧的绝对定位 notesPanel */ -/* .notesPanel {...} 已被集成到 grid 中的 .deskTile--notes */ - -.notesWidget { - width: 100%; - height: 100%; - display: flex; - flex-direction: column; - overflow: hidden; - background: rgba(0, 0, 0, 0.1); - border-radius: 14px; -} - -.notesWidget .notesHeader { - flex: 0 0 48px; - display: flex; - align-items: center; - justify-content: space-between; - padding: 0 12px; - background: rgba(255, 255, 255, 0.05); - border-bottom: 1px solid rgba(255, 255, 255, 0.08); -} - -.notesWidget .notesHeaderTitle { - font-size: 16px; - font-weight: 800; -} - -.notesWidget .notesAddButton { - height: 32px; - padding: 0 12px; - font-size: 14px; - border-radius: 8px; - background: rgba(255, 255, 255, 0.1); - border: 1px solid rgba(255, 255, 255, 0.1); - color: white; - cursor: pointer; -} - -.notesWidget .notesGrid { - flex: 1; - padding: 10px; - display: grid; - grid-template-columns: repeat(auto-fill, minmax(140px, 1fr)); - grid-auto-rows: 120px; - gap: 10px; - overflow-y: auto; - scrollbar-width: none; -} - -.notesWidget .notesGrid::-webkit-scrollbar { - display: none; -} - -.notesWidget .noteCard { - border-radius: 10px; - border: 1px solid rgba(255, 255, 255, 0.1); - background: rgba(255, 255, 255, 0.04); - overflow: hidden; -} - -.notesWidget .noteTextarea { - width: 100%; - height: 100%; - padding: 8px; - font-size: 14px; - background: transparent; - border: none; - color: white; - resize: none; - outline: none; -} - -.openAppsButton { - cursor: pointer; - border-radius: 18px; - padding: 20px 28px; - border: 1px solid rgba(255, 255, 255, 0.16); - color: var(--ev-c-text-1); - background: rgba(0, 0, 0, 0.35); - backdrop-filter: blur(12px); - font-size: 22px; - line-height: 26px; - font-weight: 800; -} - -.openAppsButton:hover { - border-color: rgba(255, 255, 255, 0.26); - background: rgba(0, 0, 0, 0.45); -} - -.appsPage { - position: fixed; - left: 0; - top: 0; - width: 100%; - height: 100%; - padding: 16px; - box-sizing: border-box; -} - -.settingsPage { - position: fixed; - left: 0; - top: 0; - width: 100%; - height: 100%; - padding: 16px; - box-sizing: border-box; -} - -.settingsContentArea { - position: fixed; - left: 16px; - right: 16px; - top: 88px; - bottom: 120px; - padding: 12px; - background: rgba(0, 0, 0, 0.28); - border: 1px solid rgba(255, 255, 255, 0.12); - border-radius: 14px; - backdrop-filter: blur(12px); - box-sizing: border-box; - overflow: hidden; - display: grid; - grid-template-columns: 240px 1fr; - grid-template-rows: 1fr; - gap: 12px; -} - -.settingsSidebar { - height: 100%; - overflow: hidden; - border-radius: 14px; - border: 1px solid rgba(255, 255, 255, 0.12); - background: rgba(0, 0, 0, 0.18); - padding: 12px; - box-sizing: border-box; - display: flex; - flex-direction: column; - gap: 10px; -} - -.settingsSidebarTitle { - font-size: 18px; - line-height: 22px; - font-weight: 900; - opacity: 0.95; - padding: 4px 4px 8px; -} - -.settingsTabButton { - cursor: pointer; - height: 56px; - border-radius: 14px; - padding: 0 14px; - border: 1px solid rgba(255, 255, 255, 0.12); - color: var(--ev-c-text-1); - background: rgba(0, 0, 0, 0.22); - font-size: 16px; - line-height: 18px; - font-weight: 900; - text-align: left; -} - -.settingsTabButton[data-active='true'] { - background: rgba(0, 0, 0, 0.4); - border-color: rgba(255, 255, 255, 0.22); -} - -.settingsTabButton:hover { - border-color: rgba(255, 255, 255, 0.22); - background: rgba(0, 0, 0, 0.32); -} - -.settingsDetail { - height: 100%; - overflow: hidden; - border-radius: 14px; - border: 1px solid rgba(255, 255, 255, 0.12); - background: rgba(0, 0, 0, 0.12); - padding: 12px; - box-sizing: border-box; - display: grid; - grid-template-rows: 64px 1fr; - gap: 10px; -} - -.settingsDetailHeader { - display: flex; - align-items: center; - justify-content: space-between; - gap: 12px; - padding: 0 4px; -} - -.settingsDetailTitle { - font-size: 20px; - line-height: 24px; - font-weight: 900; -} - -.settingsDetailHeaderActions { - display: flex; - align-items: center; - justify-content: flex-end; - gap: 10px; - flex-wrap: wrap; -} - -.settingsDetailBody { - height: 100%; - overflow: auto; - padding: 0 4px 4px; - box-sizing: border-box; - scrollbar-width: none; - -ms-overflow-style: none; -} - -.settingsDetailBody::-webkit-scrollbar { - width: 0; - height: 0; - display: none; -} - -.settingsSection { - padding: 8px 2px; -} - -.settingsSectionTitle { - font-size: 16px; - line-height: 18px; - font-weight: 900; - opacity: 0.9; - margin-bottom: 10px; -} - -.settingsPrimaryButton { - cursor: pointer; - border-radius: 14px; - padding: 0 16px; - border: 1px solid rgba(255, 255, 255, 0.12); - color: var(--ev-c-text-1); - background: rgba(0, 0, 0, 0.35); - font-size: 16px; - line-height: 18px; - font-weight: 900; - height: 46px; -} - -.settingsPrimaryButton:hover { - border-color: rgba(255, 255, 255, 0.22); - background: rgba(0, 0, 0, 0.48); -} - -.settingsResetButton { - cursor: pointer; - border-radius: 14px; - padding: 0 16px; - border: 1px solid rgba(255, 255, 255, 0.12); - color: var(--ev-c-text-1); - background: rgba(0, 0, 0, 0.22); - font-size: 16px; - line-height: 18px; - font-weight: 800; - height: 46px; -} - -.settingsResetButton:hover { - border-color: rgba(255, 255, 255, 0.22); - background: rgba(0, 0, 0, 0.35); -} - -.settingsPreviewList { - display: grid; - grid-template-columns: 1fr; - gap: 12px; -} - -.settingsPreviewItem { - display: flex; - align-items: center; - justify-content: space-between; - gap: 12px; - padding: 12px; - border-radius: 14px; - border: 1px solid rgba(255, 255, 255, 0.12); - background: rgba(0, 0, 0, 0.22); - flex-wrap: wrap; -} - -.settingsPreviewMain { - min-width: 220px; -} - -.settingsPreviewTitle { - font-size: 18px; - line-height: 22px; - font-weight: 900; -} - -.settingsPreviewMeta { - margin-top: 4px; - font-size: 13px; - line-height: 16px; - font-weight: 700; - opacity: 0.85; -} - -.settingsPreviewBehavior { - width: 100%; - border-top: 1px solid rgba(255, 255, 255, 0.08); - padding-top: 10px; - display: grid; - gap: 8px; -} - -.settingsPreviewBehaviorTitle { - font-size: 14px; - line-height: 18px; - font-weight: 900; - opacity: 0.9; -} - -.settingsPreviewBehaviorRow { - display: grid; - grid-template-columns: 160px 1fr; - gap: 10px; -} - -.settingsPreviewBehaviorLabel { - font-size: 14px; - line-height: 18px; - font-weight: 800; - opacity: 0.9; -} - -.settingsPreviewBehaviorValue { - font-size: 14px; - line-height: 18px; - font-weight: 700; - opacity: 0.9; - word-break: break-all; -} - -.homeEditGrid { - display: grid; - grid-template-columns: repeat(auto-fill, minmax(160px, 1fr)); - gap: 12px; -} - -.homeWidgetCard { - cursor: pointer; - border-radius: 14px; - border: 1px solid rgba(255, 255, 255, 0.12); - background: rgba(0, 0, 0, 0.2); - color: var(--ev-c-text-1); - padding: 12px; - box-sizing: border-box; - text-align: left; - display: grid; - grid-template-rows: 24px 1fr 18px; - gap: 8px; - height: 112px; -} - -.homeWidgetCard[data-active='true'] { - border-color: rgba(255, 255, 255, 0.22); - background: rgba(0, 0, 0, 0.35); - box-shadow: - 0 0 0 1px rgba(255, 255, 255, 0.12), - 0 0 0 1px rgba(255, 255, 255, 0.12) inset; -} - -.homeWidgetCard[data-selected='true'] { - outline: 2px solid rgba(255, 255, 255, 0.3); - outline-offset: 2px; -} - -.homeWidgetCardIcon { - width: 22px; - height: 22px; - opacity: 0.95; -} - -.homeWidgetCardTitle { - font-size: 16px; - line-height: 18px; - font-weight: 900; - align-self: end; -} - -.homeWidgetCardMeta { - font-size: 13px; - line-height: 16px; - font-weight: 700; - opacity: 0.75; -} - -.homeEditOrderList { - display: grid; - grid-template-columns: 1fr; - gap: 10px; -} - -.homeEditOrderRow { - display: flex; - align-items: center; - justify-content: space-between; - gap: 12px; - padding: 10px 12px; - border-radius: 14px; - border: 1px solid rgba(255, 255, 255, 0.12); - background: rgba(0, 0, 0, 0.18); - flex-wrap: wrap; -} - -.homeEditOrderTitle { - font-size: 16px; - line-height: 18px; - font-weight: 900; -} - -.homeEditOrderActions { - display: flex; - align-items: center; - justify-content: flex-end; - gap: 10px; - flex-wrap: wrap; -} - -.settingsConfigArea { - width: 100%; - display: grid; - gap: 10px; -} - -.settingsSingleActionRow { - width: 100%; - display: grid; - grid-template-columns: 140px 1fr 92px; - gap: 10px; -} - -.settingsActionHint { - font-size: 13px; - line-height: 16px; - font-weight: 700; - opacity: 0.8; - word-break: break-all; -} - -.settingsSelect { - height: 46px; - border-radius: 14px; - border: 1px solid rgba(255, 255, 255, 0.12); - background: rgba(0, 0, 0, 0.18); - color: var(--ev-c-text-1); - padding: 0 12px; - box-sizing: border-box; - outline: none; - font-size: 16px; - line-height: 18px; - font-weight: 800; -} - -.settingsInput { - height: 46px; - border-radius: 14px; - border: 1px solid rgba(255, 255, 255, 0.12); - background: rgba(0, 0, 0, 0.18); - color: var(--ev-c-text-1); - padding: 0 12px; - box-sizing: border-box; - outline: none; - font-size: 16px; - line-height: 18px; - font-weight: 700; - user-select: text; -} - -.settingsMiniButton { - cursor: pointer; - height: 46px; - border-radius: 14px; - border: 1px solid rgba(255, 255, 255, 0.12); - background: rgba(0, 0, 0, 0.18); - color: var(--ev-c-text-1); - font-size: 16px; - line-height: 18px; - font-weight: 800; -} - -.settingsMiniButton:hover { - border-color: rgba(255, 255, 255, 0.22); - background: rgba(0, 0, 0, 0.32); -} - -.settingsSubAction { - width: 100%; - display: grid; - grid-template-columns: 180px 140px 1fr 92px; - gap: 10px; - align-items: center; -} - -.settingsSubActionTitle { - font-size: 16px; - line-height: 18px; - font-weight: 900; - opacity: 0.9; -} - -.settingsActionButton { - cursor: pointer; - border-radius: 14px; - padding: 0 14px; - border: 1px solid rgba(255, 255, 255, 0.12); - color: var(--ev-c-text-1); - background: rgba(0, 0, 0, 0.18); - font-size: 16px; - line-height: 18px; - font-weight: 800; - height: 46px; - min-width: 92px; -} - -.settingsActionButton[data-active='true'] { - background: rgba(0, 0, 0, 0.4); - border-color: rgba(255, 255, 255, 0.22); -} - -.settingsActionButton:hover { - border-color: rgba(255, 255, 255, 0.22); - background: rgba(0, 0, 0, 0.32); -} - -.settingsBottomBar { - position: fixed; - left: 16px; - right: 16px; - bottom: 16px; - height: 92px; - padding: 10px 12px; - display: grid; - grid-template-columns: 140px 1fr 180px; - gap: 12px; - align-items: center; - background: rgba(0, 0, 0, 0.35); - border: 1px solid rgba(255, 255, 255, 0.12); - border-radius: 16px; - backdrop-filter: blur(12px); - box-sizing: border-box; -} - -.settingsBottomBar .backButton { - height: 72px; -} - -.settingsBottomBar .appsExitButton { - height: 72px; -} - -.backButton { - cursor: pointer; - border-radius: 16px; - padding: 0 18px; - border: 1px solid rgba(255, 255, 255, 0.12); - color: var(--ev-c-text-1); - background: rgba(0, 0, 0, 0.35); - font-size: 18px; - line-height: 22px; - font-weight: 800; - height: 72px; - min-width: 120px; -} - -.backButton:hover { - border-color: rgba(255, 255, 255, 0.22); - background: rgba(0, 0, 0, 0.45); -} - -.appsTilesArea { - position: fixed; - left: 16px; - right: 16px; - top: 88px; - bottom: 120px; - padding: 12px; - background: rgba(0, 0, 0, 0.28); - border: 1px solid rgba(255, 255, 255, 0.12); - border-radius: 14px; - backdrop-filter: blur(12px); - box-sizing: border-box; - overflow: hidden; -} - -.appsList { - height: 100%; - overflow-x: auto; - overflow-y: hidden; - padding: 4px 6px; - box-sizing: border-box; - columns: 6 280px; - column-gap: 14px; - column-fill: auto; - touch-action: pan-x; - -webkit-overflow-scrolling: touch; - overscroll-behavior-x: contain; - scrollbar-width: none; - -ms-overflow-style: none; -} - -.appsList::-webkit-scrollbar { - width: 0; - height: 0; - display: none; -} - -.appsLoading { - height: 100%; - display: flex; - align-items: center; - justify-content: center; - font-size: 16px; - font-weight: 700; - opacity: 0.9; -} - -.appsBottomBar { - position: fixed; - left: 16px; - right: 16px; - bottom: 16px; - height: 92px; - padding: 10px 12px; - display: grid; - grid-template-columns: 140px 1fr 140px; - gap: 12px; - align-items: center; - background: rgba(0, 0, 0, 0.35); - border: 1px solid rgba(255, 255, 255, 0.12); - border-radius: 16px; - backdrop-filter: blur(12px); - box-sizing: border-box; -} - -.appsSearch { - width: 100%; - height: 72px; - border-radius: 14px; - border: 1px solid rgba(255, 255, 255, 0.12); - background: rgba(0, 0, 0, 0.35); - color: var(--ev-c-text-1); - padding: 0 16px; - box-sizing: border-box; - outline: none; - font-size: 20px; - line-height: 24px; - user-select: text; -} - -.appsExitButton { - display: inline-flex; - align-items: center; - justify-content: center; - gap: 10px; - cursor: pointer; - border-radius: 16px; - padding: 0 18px; - border: 1px solid rgba(255, 255, 255, 0.12); - color: var(--ev-c-text-1); - background: rgba(0, 0, 0, 0.35); - font-size: 18px; - line-height: 22px; - font-weight: 800; - height: 72px; - min-width: 120px; -} - -.appsExitButton:hover { - border-color: rgba(255, 255, 255, 0.22); - background: rgba(0, 0, 0, 0.45); -} - -.search { - width: 100%; - height: 38px; - border-radius: 12px; - border: 1px solid rgba(255, 255, 255, 0.12); - background: rgba(0, 0, 0, 0.35); - color: var(--ev-c-text-1); - padding: 0 12px; - box-sizing: border-box; - outline: none; -} - -.error { - margin-top: 10px; - padding: 10px 12px; - border-radius: 12px; - border: 1px solid rgba(255, 120, 120, 0.25); - background: rgba(120, 0, 0, 0.18); - color: var(--ev-c-text-1); - font-size: 12px; - line-height: 16px; - user-select: text; - white-space: pre-wrap; - word-break: break-word; -} - -.errorHeader { - display: flex; - align-items: center; - justify-content: space-between; - gap: 10px; - margin-bottom: 8px; -} - -.errorTitle { - font-weight: 700; - font-size: 12px; - line-height: 16px; -} - -.errorBody { - white-space: pre-wrap; - word-break: break-word; -} - -.copyButton { - cursor: pointer; - border-radius: 10px; - padding: 6px 10px; - border: 1px solid rgba(255, 255, 255, 0.16); - background: rgba(0, 0, 0, 0.25); - color: var(--ev-c-text-1); - font-size: 12px; - line-height: 14px; -} - -.copyButton:hover { - border-color: rgba(255, 255, 255, 0.26); - background: rgba(0, 0, 0, 0.35); -} - -.list { - margin-top: 12px; - height: calc(100% - 50px); - overflow: auto; - display: grid; - gap: 10px; -} - -.groupHeader { - display: inline-block; - width: 100%; - box-sizing: border-box; - margin: 0 0 10px; - padding: 6px 10px; - border-radius: 10px; - border: 1px solid rgba(255, 255, 255, 0.08); - background: rgba(0, 0, 0, 0.2); - font-size: 12px; - font-weight: 700; - letter-spacing: 0.4px; - opacity: 0.9; - break-inside: avoid; - -webkit-column-break-inside: avoid; -} - -.item { - display: inline-flex; - align-items: center; - gap: 10px; - text-align: left; - cursor: pointer; - width: 100%; - box-sizing: border-box; - min-height: 72px; - padding: 12px 14px; - border-radius: 12px; - border: 1px solid rgba(255, 255, 255, 0.12); - background: rgba(0, 0, 0, 0.25); - color: var(--ev-c-text-1); - margin: 0 0 10px; - break-inside: avoid; - -webkit-column-break-inside: avoid; -} - -.item:hover { - border-color: rgba(255, 255, 255, 0.22); - background: rgba(0, 0, 0, 0.35); -} - -.item:active { - border-color: rgba(255, 255, 255, 0.26); - background: rgba(0, 0, 0, 0.5); -} - -.name { - font-weight: 700; - font-size: 18px; - line-height: 22px; -} - -.icon { - width: 48px; - height: 48px; - border-radius: 10px; - flex: 0 0 auto; -} - -.path { - margin-top: 4px; - font-size: 12px; - line-height: 16px; - opacity: 0.75; - word-break: break-all; -} - -.clock { - position: fixed; - left: 16px; - top: 16px; - padding: 10px 12px; - font-size: 28px; - line-height: 28px; - font-weight: 700; - color: var(--ev-c-text-1); - background: rgba(0, 0, 0, 0.35); - border: 1px solid rgba(255, 255, 255, 0.12); - border-radius: 12px; - backdrop-filter: blur(12px); -} - -.exitButton { - position: fixed; - right: 16px; - bottom: 16px; - display: inline-flex; - align-items: center; - justify-content: center; - gap: 10px; - cursor: pointer; - text-align: center; - font-weight: 600; - border-radius: 14px; - padding: 10px 16px; - line-height: 20px; - font-size: 14px; - border: 1px solid rgba(255, 255, 255, 0.12); - color: var(--ev-c-text-1); - background: rgba(0, 0, 0, 0.35); - backdrop-filter: blur(12px); -} - -.settingsButton { - position: fixed; - left: 16px; - bottom: 16px; - display: inline-flex; - align-items: center; - justify-content: center; - cursor: pointer; - text-align: center; - font-weight: 800; - border-radius: 14px; - padding: 10px 18px; - line-height: 20px; - font-size: 14px; - border: 1px solid rgba(255, 255, 255, 0.12); - color: var(--ev-c-text-1); - background: rgba(0, 0, 0, 0.35); - backdrop-filter: blur(12px); -} - -.settingsButton:hover { - border-color: rgba(255, 255, 255, 0.22); - background: rgba(0, 0, 0, 0.45); -} - -.buttonIcon { - width: 20px; - height: 20px; - flex: 0 0 auto; -} - -.exitButton:hover { - border-color: rgba(255, 255, 255, 0.22); - background: rgba(0, 0, 0, 0.45); -} diff --git a/src/renderer/src/assets/wavy-lines.svg b/src/renderer/src/assets/wavy-lines.svg deleted file mode 100644 index d08c611..0000000 --- a/src/renderer/src/assets/wavy-lines.svg +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/renderer/src/env.d.ts b/src/renderer/src/env.d.ts deleted file mode 100644 index 65c7311..0000000 --- a/src/renderer/src/env.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -/// - -declare module '*.vue' { - import type { DefineComponent } from 'vue' - const component: DefineComponent - export default component -} diff --git a/src/renderer/src/main.ts b/src/renderer/src/main.ts deleted file mode 100644 index 75ec884..0000000 --- a/src/renderer/src/main.ts +++ /dev/null @@ -1,6 +0,0 @@ -import './assets/main.css' - -import { createApp } from 'vue' -import App from './App.vue' - -createApp(App).mount('#root') diff --git a/tsconfig.json b/tsconfig.json deleted file mode 100644 index 31bac6e..0000000 --- a/tsconfig.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "files": [], - "references": [{ "path": "./tsconfig.node.json" }, { "path": "./tsconfig.web.json" }] -} diff --git a/tsconfig.node.json b/tsconfig.node.json deleted file mode 100644 index 199acf0..0000000 --- a/tsconfig.node.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "extends": "@electron-toolkit/tsconfig/tsconfig.node.json", - "include": [ - "electron.vite.config.*", - "src/main/**/*", - "src/preload/**/*", - "src/eiysia/**/*", - "src/app_list/**/*", - "src/SQLitte/**/*" - ], - "compilerOptions": { - "composite": true, - "types": ["electron-vite/node"] - } -} diff --git a/tsconfig.web.json b/tsconfig.web.json deleted file mode 100644 index e9d73a9..0000000 --- a/tsconfig.web.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "extends": "@electron-toolkit/tsconfig/tsconfig.web.json", - "include": [ - "src/renderer/src/env.d.ts", - "src/renderer/src/**/*", - "src/renderer/src/**/*.vue", - "src/preload/*.d.ts" - ], - "compilerOptions": { - "composite": true, - "baseUrl": ".", - "paths": { - "@renderer/*": [ - "src/renderer/src/*" - ] - } - } -}