From 20ac4022c19c2a892d65c0581cff948216bdc716 Mon Sep 17 00:00:00 2001 From: whit3rabbit Date: Sun, 5 Apr 2026 14:27:12 -0500 Subject: [PATCH 01/25] feat(admin-ui): scaffold Vite + React + TypeScript frontend Co-Authored-By: Claude Sonnet 4.6 --- .gitignore | 4 + crates/proxy/admin-ui/eslint.config.js | 25 + crates/proxy/admin-ui/index.html | 1892 +------------ crates/proxy/admin-ui/package-lock.json | 3427 +++++++++++++++++++++++ crates/proxy/admin-ui/package.json | 30 + crates/proxy/admin-ui/tsconfig.json | 20 + crates/proxy/admin-ui/vite.config.ts | 34 + 7 files changed, 3549 insertions(+), 1883 deletions(-) create mode 100644 crates/proxy/admin-ui/eslint.config.js create mode 100644 crates/proxy/admin-ui/package-lock.json create mode 100644 crates/proxy/admin-ui/package.json create mode 100644 crates/proxy/admin-ui/tsconfig.json create mode 100644 crates/proxy/admin-ui/vite.config.ts diff --git a/.gitignore b/.gitignore index 746101f..8086652 100644 --- a/.gitignore +++ b/.gitignore @@ -40,3 +40,7 @@ Thumbs.db # Script caches and venv scripts/.cache/ scripts/.venv/ + +# Admin UI build artifacts +crates/proxy/admin-ui/node_modules/ +crates/proxy/admin-ui/dist/ diff --git a/crates/proxy/admin-ui/eslint.config.js b/crates/proxy/admin-ui/eslint.config.js new file mode 100644 index 0000000..05c6758 --- /dev/null +++ b/crates/proxy/admin-ui/eslint.config.js @@ -0,0 +1,25 @@ +import js from '@eslint/js' +import globals from 'globals' +import reactHooks from 'eslint-plugin-react-hooks' +import reactRefresh from 'eslint-plugin-react-refresh' +import tseslint from 'typescript-eslint' + +export default tseslint.config( + { ignores: ['dist'] }, + { + extends: [js.configs.recommended, ...tseslint.configs.recommended], + files: ['**/*.{ts,tsx}'], + languageOptions: { + ecmaVersion: 2020, + globals: globals.browser, + }, + plugins: { + 'react-hooks': reactHooks, + 'react-refresh': reactRefresh, + }, + rules: { + ...reactHooks.configs.recommended.rules, + 'react-refresh/only-export-components': ['warn', { allowConstantExport: true }], + }, + }, +) diff --git a/crates/proxy/admin-ui/index.html b/crates/proxy/admin-ui/index.html index 4d1eb5f..a427ffe 100644 --- a/crates/proxy/admin-ui/index.html +++ b/crates/proxy/admin-ui/index.html @@ -1,1886 +1,12 @@ - - - -Proxy Admin - - - - - - -
-
-
Requests/min
--
-
Error Rate
--
-
P50 Latency
--
-
P95 Latency
--
-
Total Requests
0
-
-
-
Streams Started
0
-
Completed
0
-
Failed
0
-
Client Disconnects
0
-
-
- -
- - -
-
-
-
Input Tokens
0
-
Output Tokens
0
-
Window Failures
0
-
Window Cost
$0.00
-
-
-
-
-
-
Request Volume
-
Rolling request count and errors
-
-
0
-
-
Loading...
-
-
-
-
-
Tokens
-
Input and output usage
-
-
0
-
-
Loading...
-
-
-
-
-
Estimated Cost
-
USD by minute bucket
-
-
$0.00
-
-
Loading...
-
-
-
-
-
Failure Analysis
-
Grouped by backend, model, status, and normalized error text
-
-
-
Loading...
-
-
-
-
-
Request Timeline
-
Recent requests sized by latency, newest first
-
-
-
Loading...
-
-
-
-
- -
- - -
-
-
-
Time
Status
Backend
Model
Latency
In
Out
-
-
- -
-
- -
- - - - - - -
-
-
-
Time
Status
Backend
Key
Model
Latency
In
Out
-
- -
- -
-
- -
-
-
- - - -
- -
-
Loading...
-
-
- -
- -
-
- -
-
- - -
- - - -
-
-
Loading...
-
-
-
- -
-
- - -
- -
-
-
-
Loading...
-
-
-
- -
-
- -
- - - - - -
-
-
-
-
Loading...
-
-
- -
- - - + + + + Proxy Admin + + +
+ + diff --git a/crates/proxy/admin-ui/package-lock.json b/crates/proxy/admin-ui/package-lock.json new file mode 100644 index 0000000..a27b78c --- /dev/null +++ b/crates/proxy/admin-ui/package-lock.json @@ -0,0 +1,3427 @@ +{ + "name": "anyllm-admin-ui", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "anyllm-admin-ui", + "dependencies": { + "@tanstack/react-query": "^5.0.0", + "react": "^19.0.0", + "react-dom": "^19.0.0", + "zustand": "^5.0.0" + }, + "devDependencies": { + "@types/react": "^19.0.0", + "@types/react-dom": "^19.0.0", + "@typescript-eslint/eslint-plugin": "^8.0.0", + "@typescript-eslint/parser": "^8.0.0", + "@vitejs/plugin-react": "^4.0.0", + "eslint": "^9.0.0", + "eslint-plugin-react-hooks": "^5.0.0", + "eslint-plugin-react-refresh": "^0.4.0", + "typescript": "^5.0.0", + "vite": "^6.0.0", + "vite-plugin-singlefile": "^2.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", + "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.28.5", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.0.tgz", + "integrity": "sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz", + "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-module-transforms": "^7.28.6", + "@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.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.29.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz", + "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.0", + "@babel/types": "^7.29.0", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz", + "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.28.6", + "@babel/helper-validator-option": "^7.27.1", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-globals": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz", + "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.28.6", + "@babel/types": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz", + "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.28.6", + "@babel/helper-validator-identifier": "^7.28.5", + "@babel/traverse": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.28.6.tgz", + "integrity": "sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.29.2", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.2.tgz", + "integrity": "sha512-HoGuUs4sCZNezVEKdVcwqmZN8GoHirLUcLaYVNBK2J0DadGtdcqgr3BCbvH8+XUo4NGjNl3VOtSjEKNzqfFgKw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.28.6", + "@babel/types": "^7.29.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.29.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.2.tgz", + "integrity": "sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.27.1.tgz", + "integrity": "sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.27.1.tgz", + "integrity": "sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz", + "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.28.6", + "@babel/parser": "^7.28.6", + "@babel/types": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz", + "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/types": "^7.29.0", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", + "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz", + "integrity": "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.12.tgz", + "integrity": "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz", + "integrity": "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.12.tgz", + "integrity": "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz", + "integrity": "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz", + "integrity": "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz", + "integrity": "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz", + "integrity": "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz", + "integrity": "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz", + "integrity": "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz", + "integrity": "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz", + "integrity": "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz", + "integrity": "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz", + "integrity": "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz", + "integrity": "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz", + "integrity": "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz", + "integrity": "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz", + "integrity": "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz", + "integrity": "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz", + "integrity": "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz", + "integrity": "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz", + "integrity": "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz", + "integrity": "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz", + "integrity": "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz", + "integrity": "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz", + "integrity": "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", + "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", + "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.21.2", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.2.tgz", + "integrity": "sha512-nJl2KGTlrf9GjLimgIru+V/mzgSK0ABCDQRvxw5BjURL7WfH5uoWmizbH7QB6MmnMBd8cIC9uceWnezL1VZWWw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^2.1.7", + "debug": "^4.3.1", + "minimatch": "^3.1.5" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/config-array/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@eslint/config-array/node_modules/brace-expansion": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.13.tgz", + "integrity": "sha512-9ZLprWS6EENmhEOpjCYW2c8VkmOvckIJZfkr7rBW6dObmfgJ/L1GpSYW5Hpo9lDz4D1+n0Ckz8rU7FwHDQiG/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@eslint/config-array/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@eslint/config-helpers": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.4.2.tgz", + "integrity": "sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.17.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/core": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.17.0.tgz", + "integrity": "sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.5.tgz", + "integrity": "sha512-4IlJx0X0qftVsN5E+/vGujTRIFtwuLbNsVUe7TO6zYPDR1O6nFwvwhIKEKSrl6dZchmYBITazxKoUYOjdtjlRg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.14.0", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.1", + "minimatch": "^3.1.5", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.13.tgz", + "integrity": "sha512-9ZLprWS6EENmhEOpjCYW2c8VkmOvckIJZfkr7rBW6dObmfgJ/L1GpSYW5Hpo9lDz4D1+n0Ckz8rU7FwHDQiG/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@eslint/eslintrc/node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/@eslint/eslintrc/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@eslint/js": { + "version": "9.39.4", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.4.tgz", + "integrity": "sha512-nE7DEIchvtiFTwBw4Lfbu59PG+kCofhjsKaCWzxTpt4lfRjRMqG6uMBzKXuEcyXhOHoUp9riAm7/aWYGhXZ9cw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + } + }, + "node_modules/@eslint/object-schema": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.7.tgz", + "integrity": "sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.1.tgz", + "integrity": "sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.17.0", + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.7", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz", + "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.4.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.0-beta.27", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.27.tgz", + "integrity": "sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.60.1.tgz", + "integrity": "sha512-d6FinEBLdIiK+1uACUttJKfgZREXrF0Qc2SmLII7W2AD8FfiZ9Wjd+rD/iRuf5s5dWrr1GgwXCvPqOuDquOowA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.60.1.tgz", + "integrity": "sha512-YjG/EwIDvvYI1YvYbHvDz/BYHtkY4ygUIXHnTdLhG+hKIQFBiosfWiACWortsKPKU/+dUwQQCKQM3qrDe8c9BA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.60.1.tgz", + "integrity": "sha512-mjCpF7GmkRtSJwon+Rq1N8+pI+8l7w5g9Z3vWj4T7abguC4Czwi3Yu/pFaLvA3TTeMVjnu3ctigusqWUfjZzvw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.60.1.tgz", + "integrity": "sha512-haZ7hJ1JT4e9hqkoT9R/19XW2QKqjfJVv+i5AGg57S+nLk9lQnJ1F/eZloRO3o9Scy9CM3wQ9l+dkXtcBgN5Ew==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.60.1.tgz", + "integrity": "sha512-czw90wpQq3ZsAVBlinZjAYTKduOjTywlG7fEeWKUA7oCmpA8xdTkxZZlwNJKWqILlq0wehoZcJYfBvOyhPTQ6w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.60.1.tgz", + "integrity": "sha512-KVB2rqsxTHuBtfOeySEyzEOB7ltlB/ux38iu2rBQzkjbwRVlkhAGIEDiiYnO2kFOkJp+Z7pUXKyrRRFuFUKt+g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.60.1.tgz", + "integrity": "sha512-L+34Qqil+v5uC0zEubW7uByo78WOCIrBvci69E7sFASRl0X7b/MB6Cqd1lky/CtcSVTydWa2WZwFuWexjS5o6g==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.60.1.tgz", + "integrity": "sha512-n83O8rt4v34hgFzlkb1ycniJh7IR5RCIqt6mz1VRJD6pmhRi0CXdmfnLu9dIUS6buzh60IvACM842Ffb3xd6Gg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.60.1.tgz", + "integrity": "sha512-Nql7sTeAzhTAja3QXeAI48+/+GjBJ+QmAH13snn0AJSNL50JsDqotyudHyMbO2RbJkskbMbFJfIJKWA6R1LCJQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.60.1.tgz", + "integrity": "sha512-+pUymDhd0ys9GcKZPPWlFiZ67sTWV5UU6zOJat02M1+PiuSGDziyRuI/pPue3hoUwm2uGfxdL+trT6Z9rxnlMA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.60.1.tgz", + "integrity": "sha512-VSvgvQeIcsEvY4bKDHEDWcpW4Yw7BtlKG1GUT4FzBUlEKQK0rWHYBqQt6Fm2taXS+1bXvJT6kICu5ZwqKCnvlQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.60.1.tgz", + "integrity": "sha512-4LqhUomJqwe641gsPp6xLfhqWMbQV04KtPp7/dIp0nzPxAkNY1AbwL5W0MQpcalLYk07vaW9Kp1PBhdpZYYcEw==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.60.1.tgz", + "integrity": "sha512-tLQQ9aPvkBxOc/EUT6j3pyeMD6Hb8QF2BTBnCQWP/uu1lhc9AIrIjKnLYMEroIz/JvtGYgI9dF3AxHZNaEH0rw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.60.1.tgz", + "integrity": "sha512-RMxFhJwc9fSXP6PqmAz4cbv3kAyvD1etJFjTx4ONqFP9DkTkXsAMU4v3Vyc5BgzC+anz7nS/9tp4obsKfqkDHg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.60.1.tgz", + "integrity": "sha512-QKgFl+Yc1eEk6MmOBfRHYF6lTxiiiV3/z/BRrbSiW2I7AFTXoBFvdMEyglohPj//2mZS4hDOqeB0H1ACh3sBbg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.60.1.tgz", + "integrity": "sha512-RAjXjP/8c6ZtzatZcA1RaQr6O1TRhzC+adn8YZDnChliZHviqIjmvFwHcxi4JKPSDAt6Uhf/7vqcBzQJy0PDJg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.60.1.tgz", + "integrity": "sha512-wcuocpaOlaL1COBYiA89O6yfjlp3RwKDeTIA0hM7OpmhR1Bjo9j31G1uQVpDlTvwxGn2nQs65fBFL5UFd76FcQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.60.1.tgz", + "integrity": "sha512-77PpsFQUCOiZR9+LQEFg9GClyfkNXj1MP6wRnzYs0EeWbPcHs02AXu4xuUbM1zhwn3wqaizle3AEYg5aeoohhg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.60.1.tgz", + "integrity": "sha512-5cIATbk5vynAjqqmyBjlciMJl1+R/CwX9oLk/EyiFXDWd95KpHdrOJT//rnUl4cUcskrd0jCCw3wpZnhIHdD9w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.60.1.tgz", + "integrity": "sha512-cl0w09WsCi17mcmWqqglez9Gk8isgeWvoUZ3WiJFYSR3zjBQc2J5/ihSjpl+VLjPqjQ/1hJRcqBfLjssREQILw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.60.1.tgz", + "integrity": "sha512-4Cv23ZrONRbNtbZa37mLSueXUCtN7MXccChtKpUnQNgF010rjrjfHx3QxkS2PI7LqGT5xXyYs1a7LbzAwT0iCA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.60.1.tgz", + "integrity": "sha512-i1okWYkA4FJICtr7KpYzFpRTHgy5jdDbZiWfvny21iIKky5YExiDXP+zbXzm3dUcFpkEeYNHgQ5fuG236JPq0g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.60.1.tgz", + "integrity": "sha512-u09m3CuwLzShA0EYKMNiFgcjjzwqtUMLmuCJLeZWjjOYA3IT2Di09KaxGBTP9xVztWyIWjVdsB2E9goMjZvTQg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.60.1.tgz", + "integrity": "sha512-k+600V9Zl1CM7eZxJgMyTUzmrmhB/0XZnF4pRypKAlAgxmedUA+1v9R+XOFv56W4SlHEzfeMtzujLJD22Uz5zg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.60.1.tgz", + "integrity": "sha512-lWMnixq/QzxyhTV6NjQJ4SFo1J6PvOX8vUx5Wb4bBPsEb+8xZ89Bz6kOXpfXj9ak9AHTQVQzlgzBEc1SyM27xQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@tanstack/query-core": { + "version": "5.96.2", + "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.96.2.tgz", + "integrity": "sha512-hzI6cTVh4KNRk8UtoIBS7Lv9g6BnJPXvBKsvYH1aGWvv0347jT3BnSvztOE+kD76XGvZnRC/t6qdW1CaIfwCeA==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + } + }, + "node_modules/@tanstack/react-query": { + "version": "5.96.2", + "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.96.2.tgz", + "integrity": "sha512-sYyzzJT4G0g02azzJ8o55VFFV31XvFpdUpG+unxS0vSaYsJnSPKGoI6WdPwUucJL1wpgGfwfmntNX/Ub1uOViA==", + "license": "MIT", + "dependencies": { + "@tanstack/query-core": "5.96.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "react": "^18 || ^19" + } + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", + "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz", + "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.2" + } + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/react": { + "version": "19.2.14", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.14.tgz", + "integrity": "sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "csstype": "^3.2.2" + } + }, + "node_modules/@types/react-dom": { + "version": "19.2.3", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.2.3.tgz", + "integrity": "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@types/react": "^19.2.0" + } + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.58.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.58.0.tgz", + "integrity": "sha512-RLkVSiNuUP1C2ROIWfqX+YcUfLaSnxGE/8M+Y57lopVwg9VTYYfhuz15Yf1IzCKgZj6/rIbYTmJCUSqr76r0Wg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.12.2", + "@typescript-eslint/scope-manager": "8.58.0", + "@typescript-eslint/type-utils": "8.58.0", + "@typescript-eslint/utils": "8.58.0", + "@typescript-eslint/visitor-keys": "8.58.0", + "ignore": "^7.0.5", + "natural-compare": "^1.4.0", + "ts-api-utils": "^2.5.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^8.58.0", + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "8.58.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.58.0.tgz", + "integrity": "sha512-rLoGZIf9afaRBYsPUMtvkDWykwXwUPL60HebR4JgTI8mxfFe2cQTu3AGitANp4b9B2QlVru6WzjgB2IzJKiCSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/scope-manager": "8.58.0", + "@typescript-eslint/types": "8.58.0", + "@typescript-eslint/typescript-estree": "8.58.0", + "@typescript-eslint/visitor-keys": "8.58.0", + "debug": "^4.4.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/project-service": { + "version": "8.58.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.58.0.tgz", + "integrity": "sha512-8Q/wBPWLQP1j16NxoPNIKpDZFMaxl7yWIoqXWYeWO+Bbd2mjgvoF0dxP2jKZg5+x49rgKdf7Ck473M8PC3V9lg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/tsconfig-utils": "^8.58.0", + "@typescript-eslint/types": "^8.58.0", + "debug": "^4.4.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "8.58.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.58.0.tgz", + "integrity": "sha512-W1Lur1oF50FxSnNdGp3Vs6P+yBRSmZiw4IIjEeYxd8UQJwhUF0gDgDD/W/Tgmh73mxgEU3qX0Bzdl/NGuSPEpQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.58.0", + "@typescript-eslint/visitor-keys": "8.58.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/tsconfig-utils": { + "version": "8.58.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.58.0.tgz", + "integrity": "sha512-doNSZEVJsWEu4htiVC+PR6NpM+pa+a4ClH9INRWOWCUzMst/VA9c4gXq92F8GUD1rwhNvRLkgjfYtFXegXQF7A==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "8.58.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.58.0.tgz", + "integrity": "sha512-aGsCQImkDIqMyx1u4PrVlbi/krmDsQUs4zAcCV6M7yPcPev+RqVlndsJy9kJ8TLihW9TZ0kbDAzctpLn5o+lOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.58.0", + "@typescript-eslint/typescript-estree": "8.58.0", + "@typescript-eslint/utils": "8.58.0", + "debug": "^4.4.3", + "ts-api-utils": "^2.5.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "8.58.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.58.0.tgz", + "integrity": "sha512-O9CjxypDT89fbHxRfETNoAnHj/i6IpRK0CvbVN3qibxlLdo5p5hcLmUuCCrHMpxiWSwKyI8mCP7qRNYuOJ0Uww==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "8.58.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.58.0.tgz", + "integrity": "sha512-7vv5UWbHqew/dvs+D3e1RvLv1v2eeZ9txRHPnEEBUgSNLx5ghdzjHa0sgLWYVKssH+lYmV0JaWdoubo0ncGYLA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/project-service": "8.58.0", + "@typescript-eslint/tsconfig-utils": "8.58.0", + "@typescript-eslint/types": "8.58.0", + "@typescript-eslint/visitor-keys": "8.58.0", + "debug": "^4.4.3", + "minimatch": "^10.2.2", + "semver": "^7.7.3", + "tinyglobby": "^0.2.15", + "ts-api-utils": "^2.5.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "8.58.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.58.0.tgz", + "integrity": "sha512-RfeSqcFeHMHlAWzt4TBjWOAtoW9lnsAGiP3GbaX9uVgTYYrMbVnGONEfUCiSss+xMHFl+eHZiipmA8WkQ7FuNA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.9.1", + "@typescript-eslint/scope-manager": "8.58.0", + "@typescript-eslint/types": "8.58.0", + "@typescript-eslint/typescript-estree": "8.58.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "8.58.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.58.0.tgz", + "integrity": "sha512-XJ9UD9+bbDo4a4epraTwG3TsNPeiB9aShrUneAVXy8q4LuwowN+qu89/6ByLMINqvIMeI9H9hOHQtg/ijrYXzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.58.0", + "eslint-visitor-keys": "^5.0.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", + "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@vitejs/plugin-react": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.7.0.tgz", + "integrity": "sha512-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.28.0", + "@babel/plugin-transform-react-jsx-self": "^7.27.1", + "@babel/plugin-transform-react-jsx-source": "^7.27.1", + "@rolldown/pluginutils": "1.0.0-beta.27", + "@types/babel__core": "^7.20.5", + "react-refresh": "^0.17.0" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" + } + }, + "node_modules/acorn": { + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", + "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz", + "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/baseline-browser-mapping": { + "version": "2.10.15", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.15.tgz", + "integrity": "sha512-1nfKCq9wuAZFTkA2ey/3OXXx7GzFjLdkTiFVNwlJ9WqdI706CZRIhEqjuwanjMIja+84jDLa9rcyZDPDiVkASQ==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.cjs" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/brace-expansion": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.5.tgz", + "integrity": "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.28.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.2.tgz", + "integrity": "sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "baseline-browser-mapping": "^2.10.12", + "caniuse-lite": "^1.0.30001782", + "electron-to-chromium": "^1.5.328", + "node-releases": "^2.0.36", + "update-browserslist-db": "^1.2.3" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001785", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001785.tgz", + "integrity": "sha512-blhOL/WNR+Km1RI/LCVAvA73xplXA7ZbjzI4YkMK9pa6T/P3F2GxjNpEkyw5repTw9IvkyrjyHpwjnhZ5FOvYQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/csstype": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/electron-to-chromium": { + "version": "1.5.331", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.331.tgz", + "integrity": "sha512-IbxXrsTlD3hRodkLnbxAPP4OuJYdWCeM3IOdT+CpcMoIwIoDfCmRpEtSPfwBXxVkg9xmBeY7Lz2Eo2TDn/HC3Q==", + "dev": true, + "license": "ISC" + }, + "node_modules/esbuild": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.12.tgz", + "integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "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" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "9.39.4", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.4.tgz", + "integrity": "sha512-XoMjdBOwe/esVgEvLmNsD3IRHkm7fbKIUGvrleloJXUZgDHig2IPWNniv+GwjyJXzuNqVjlr5+4yVUZjycJwfQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.8.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.21.2", + "@eslint/config-helpers": "^0.4.2", + "@eslint/core": "^0.17.0", + "@eslint/eslintrc": "^3.3.5", + "@eslint/js": "9.39.4", + "@eslint/plugin-kit": "^0.4.1", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "ajv": "^6.14.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.6", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^8.4.0", + "eslint-visitor-keys": "^4.2.1", + "espree": "^10.4.0", + "esquery": "^1.5.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.5", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.2.0.tgz", + "integrity": "sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" + } + }, + "node_modules/eslint-plugin-react-refresh": { + "version": "0.4.26", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.26.tgz", + "integrity": "sha512-1RETEylht2O6FM/MvgnyvT+8K21wLqDNg4qD51Zj3guhjt433XbnnkVttHMyaVyAFD03QSV4LPS5iE3VQmO7XQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "eslint": ">=8.40" + } + }, + "node_modules/eslint-scope": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", + "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/eslint/node_modules/brace-expansion": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.13.tgz", + "integrity": "sha512-9ZLprWS6EENmhEOpjCYW2c8VkmOvckIJZfkr7rBW6dObmfgJ/L1GpSYW5Hpo9lDz4D1+n0Ckz8rU7FwHDQiG/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/eslint/node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/eslint/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/espree": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", + "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.15.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree/node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", + "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/flatted": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz", + "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==", + "dev": true, + "license": "ISC" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ignore": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/micromatch/node_modules/picomatch": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/minimatch": { + "version": "10.2.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", + "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "brace-expansion": "^5.0.5" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-releases": { + "version": "2.0.37", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.37.tgz", + "integrity": "sha512-1h5gKZCF+pO/o3Iqt5Jp7wc9rH3eJJ0+nh/CIoiRwjRxde/hAHyLPXYN4V3CqKAbiZPSeJFSWHmJsbkicta0Eg==", + "dev": true, + "license": "MIT" + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", + "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.5.8", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.8.tgz", + "integrity": "sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/react": { + "version": "19.2.4", + "resolved": "https://registry.npmjs.org/react/-/react-19.2.4.tgz", + "integrity": "sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "19.2.4", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.4.tgz", + "integrity": "sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ==", + "license": "MIT", + "dependencies": { + "scheduler": "^0.27.0" + }, + "peerDependencies": { + "react": "^19.2.4" + } + }, + "node_modules/react-refresh": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.17.0.tgz", + "integrity": "sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/rollup": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.60.1.tgz", + "integrity": "sha512-VmtB2rFU/GroZ4oL8+ZqXgSA38O6GR8KSIvWmEFv63pQ0G6KaBH9s07PO8XTXP4vI+3UJUEypOfjkGfmSBBR0w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.60.1", + "@rollup/rollup-android-arm64": "4.60.1", + "@rollup/rollup-darwin-arm64": "4.60.1", + "@rollup/rollup-darwin-x64": "4.60.1", + "@rollup/rollup-freebsd-arm64": "4.60.1", + "@rollup/rollup-freebsd-x64": "4.60.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.60.1", + "@rollup/rollup-linux-arm-musleabihf": "4.60.1", + "@rollup/rollup-linux-arm64-gnu": "4.60.1", + "@rollup/rollup-linux-arm64-musl": "4.60.1", + "@rollup/rollup-linux-loong64-gnu": "4.60.1", + "@rollup/rollup-linux-loong64-musl": "4.60.1", + "@rollup/rollup-linux-ppc64-gnu": "4.60.1", + "@rollup/rollup-linux-ppc64-musl": "4.60.1", + "@rollup/rollup-linux-riscv64-gnu": "4.60.1", + "@rollup/rollup-linux-riscv64-musl": "4.60.1", + "@rollup/rollup-linux-s390x-gnu": "4.60.1", + "@rollup/rollup-linux-x64-gnu": "4.60.1", + "@rollup/rollup-linux-x64-musl": "4.60.1", + "@rollup/rollup-openbsd-x64": "4.60.1", + "@rollup/rollup-openharmony-arm64": "4.60.1", + "@rollup/rollup-win32-arm64-msvc": "4.60.1", + "@rollup/rollup-win32-ia32-msvc": "4.60.1", + "@rollup/rollup-win32-x64-gnu": "4.60.1", + "@rollup/rollup-win32-x64-msvc": "4.60.1", + "fsevents": "~2.3.2" + } + }, + "node_modules/scheduler": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz", + "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==", + "license": "MIT" + }, + "node_modules/semver": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/ts-api-utils": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.5.0.tgz", + "integrity": "sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.12" + }, + "peerDependencies": { + "typescript": ">=4.8.4" + } + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/vite": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.4.1.tgz", + "integrity": "sha512-+Oxm7q9hDoLMyJOYfUYBuHQo+dkAloi33apOPP56pzj+vsdJDzr+j1NISE5pyaAuKL4A3UD34qd0lx5+kfKp2g==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.25.0", + "fdir": "^6.4.4", + "picomatch": "^4.0.2", + "postcss": "^8.5.3", + "rollup": "^4.34.9", + "tinyglobby": "^0.2.13" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "jiti": ">=1.21.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "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 + } + } + }, + "node_modules/vite-plugin-singlefile": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/vite-plugin-singlefile/-/vite-plugin-singlefile-2.3.2.tgz", + "integrity": "sha512-b8SxCi/gG7K298oJDcKOuZeU6gf6wIcCJAaEqUmmZXdjfuONlkyNyWZC3tEbN6QockRCNUd3it9eGTtpHGoYmg==", + "dev": true, + "license": "MIT", + "dependencies": { + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">18.0.0" + }, + "peerDependencies": { + "rollup": "^4.59.0", + "vite": "^5.4.11 || ^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zustand": { + "version": "5.0.12", + "resolved": "https://registry.npmjs.org/zustand/-/zustand-5.0.12.tgz", + "integrity": "sha512-i77ae3aZq4dhMlRhJVCYgMLKuSiZAaUPAct2AksxQ+gOtimhGMdXljRT21P5BNpeT4kXlLIckvkPM029OljD7g==", + "license": "MIT", + "engines": { + "node": ">=12.20.0" + }, + "peerDependencies": { + "@types/react": ">=18.0.0", + "immer": ">=9.0.6", + "react": ">=18.0.0", + "use-sync-external-store": ">=1.2.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "immer": { + "optional": true + }, + "react": { + "optional": true + }, + "use-sync-external-store": { + "optional": true + } + } + } + } +} diff --git a/crates/proxy/admin-ui/package.json b/crates/proxy/admin-ui/package.json new file mode 100644 index 0000000..c2aacce --- /dev/null +++ b/crates/proxy/admin-ui/package.json @@ -0,0 +1,30 @@ +{ + "name": "anyllm-admin-ui", + "private": true, + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build", + "lint": "eslint src", + "preview": "vite preview" + }, + "dependencies": { + "react": "^19.0.0", + "react-dom": "^19.0.0", + "@tanstack/react-query": "^5.0.0", + "zustand": "^5.0.0" + }, + "devDependencies": { + "@types/react": "^19.0.0", + "@types/react-dom": "^19.0.0", + "@vitejs/plugin-react": "^4.0.0", + "@typescript-eslint/eslint-plugin": "^8.0.0", + "@typescript-eslint/parser": "^8.0.0", + "eslint": "^9.0.0", + "eslint-plugin-react-hooks": "^5.0.0", + "eslint-plugin-react-refresh": "^0.4.0", + "typescript": "^5.0.0", + "vite": "^6.0.0", + "vite-plugin-singlefile": "^2.0.0" + } +} diff --git a/crates/proxy/admin-ui/tsconfig.json b/crates/proxy/admin-ui/tsconfig.json new file mode 100644 index 0000000..109f0ac --- /dev/null +++ b/crates/proxy/admin-ui/tsconfig.json @@ -0,0 +1,20 @@ +{ + "compilerOptions": { + "target": "ES2020", + "useDefineForClassFields": true, + "lib": ["ES2020", "DOM", "DOM.Iterable"], + "module": "ESNext", + "skipLibCheck": true, + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "isolatedModules": true, + "moduleDetection": "force", + "noEmit": true, + "jsx": "react-jsx", + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true + }, + "include": ["src"] +} diff --git a/crates/proxy/admin-ui/vite.config.ts b/crates/proxy/admin-ui/vite.config.ts new file mode 100644 index 0000000..1415da9 --- /dev/null +++ b/crates/proxy/admin-ui/vite.config.ts @@ -0,0 +1,34 @@ +import { defineConfig } from 'vite' +import react from '@vitejs/plugin-react' +import { viteSingleFile } from 'vite-plugin-singlefile' +import { readFileSync, writeFileSync } from 'fs' +import { resolve } from 'path' + +function injectCspNonce() { + return { + name: 'inject-csp-nonce', + apply: 'build' as const, + closeBundle() { + const outFile = resolve(__dirname, 'dist/index.html') + let html = readFileSync(outFile, 'utf-8') + // Add nonce to generated + + +
+ + diff --git a/crates/proxy/src/admin/routes/mod.rs b/crates/proxy/src/admin/routes/mod.rs index fa4d699..4f62393 100644 --- a/crates/proxy/src/admin/routes/mod.rs +++ b/crates/proxy/src/admin/routes/mod.rs @@ -6,6 +6,8 @@ pub mod keys; pub mod logs; pub mod mcp; pub mod models; +pub mod traffic; +pub mod uptime; use crate::admin::auth::{ extract_csrf_cookie, generate_csrf_token, validate_admin_token, validate_csrf_tokens, @@ -401,6 +403,8 @@ pub fn admin_router(shared: SharedState, token: Arc>) "/admin/api/mcp-servers/{name}", delete(mcp::remove_mcp_server), ) + .route("/admin/api/traffic", get(traffic::get_traffic)) + .route("/admin/api/uptime", get(uptime::get_uptime)) .with_state(shared.clone()) // Innermost: CSRF check runs after auth succeeds. .layer(middleware::from_fn_with_state( @@ -440,7 +444,7 @@ async fn health() -> Json { } /// Serve the embedded SPA HTML with a per-request CSP nonce. -static SPA_HTML: &str = include_str!("../../../admin-ui/index.html"); +static SPA_HTML: &str = include_str!("../../../admin-ui/dist/index.html"); async fn serve_spa() -> axum::response::Response { // Generate a per-request nonce (128-bit, base64url-encoded). diff --git a/crates/proxy/src/cost/mod.rs b/crates/proxy/src/cost/mod.rs index 0014984..f25f97a 100644 --- a/crates/proxy/src/cost/mod.rs +++ b/crates/proxy/src/cost/mod.rs @@ -441,6 +441,7 @@ mod tests { .time_to_live(std::time::Duration::from_secs(86400)) .build(), ), + started_at: std::time::SystemTime::now(), }; let vk_ctx = VirtualKeyContext { diff --git a/crates/proxy/src/main.rs b/crates/proxy/src/main.rs index e7c3c31..b818631 100644 --- a/crates/proxy/src/main.rs +++ b/crates/proxy/src/main.rs @@ -497,6 +497,7 @@ async fn async_main(args: Vec) { .time_to_live(std::time::Duration::from_secs(86400)) .build(), ), + started_at: std::time::SystemTime::now(), }; // Admin token: use env var or generate 256-bit random hex written to a file. @@ -597,6 +598,16 @@ async fn async_main(args: Vec) { } }); + // Spawn background health checker with a snapshot of backend base URLs. + // base_url lives in BackendConfig (not RuntimeConfig), so we snapshot + // it here once at startup rather than storing it in SharedState. + let backend_urls: Vec<(String, String)> = multi_config + .backends + .iter() + .map(|(name, bc)| (name.clone(), bc.base_url.clone())) + .collect(); + admin::health_check::spawn(shared.clone(), backend_urls); + // Bind admin listener; spawned after the shutdown channel is created below. let admin_app = admin::routes::admin_router(shared.clone(), admin_token); let admin_bind = std::env::var("ADMIN_BIND").unwrap_or_else(|_| "127.0.0.1".into()); From d40f2aa70dbf8418a4b941514c5d4b1186e4ea2d Mon Sep 17 00:00:00 2001 From: whit3rabbit Date: Sun, 5 Apr 2026 15:17:47 -0500 Subject: [PATCH 20/25] fix(proxy): compute proxy uptime pct, add avg_request_bytes, expand probe reachability - uptime.rs: replace hardcoded 100.0 with down_days/total_days computation over proxy_history - traffic.rs: add avg_request_bytes field to RouteMetrics, populated from AVG(latency_ms) in SQL - health_check.rs: treat 403 and 404 as reachable (Anthropic /v1/models returns 404) Co-Authored-By: Claude Sonnet 4.6 --- crates/proxy/src/admin/health_check.rs | 3 ++- crates/proxy/src/admin/routes/traffic.rs | 6 +++++- crates/proxy/src/admin/routes/uptime.rs | 10 +++++++++- 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/crates/proxy/src/admin/health_check.rs b/crates/proxy/src/admin/health_check.rs index ec9a403..b1fe97b 100644 --- a/crates/proxy/src/admin/health_check.rs +++ b/crates/proxy/src/admin/health_check.rs @@ -21,7 +21,8 @@ async fn probe_backend(client: &reqwest::Client, base_url: &str) -> (bool, Optio { Ok(resp) => { let latency = start.elapsed().as_millis() as u64; - let is_up = resp.status().is_success() || resp.status().as_u16() == 401; + let status = resp.status().as_u16(); + let is_up = resp.status().is_success() || matches!(status, 401 | 403 | 404); (is_up, Some(latency)) } Err(_) => (false, None), diff --git a/crates/proxy/src/admin/routes/traffic.rs b/crates/proxy/src/admin/routes/traffic.rs index 421fe27..3bb6210 100644 --- a/crates/proxy/src/admin/routes/traffic.rs +++ b/crates/proxy/src/admin/routes/traffic.rs @@ -23,6 +23,7 @@ pub struct RouteMetrics { path: String, requests_per_min: f64, error_rate: f64, + avg_request_bytes: f64, p95_latency_ms: i64, total_requests: i64, } @@ -70,7 +71,8 @@ fn query_traffic(conn: &rusqlite::Connection, window_hours: u32) -> Option= 400 THEN 1 ELSE 0 END) AS errors, - COUNT(*) * 1.0 / ?1 AS rpm + COUNT(*) * 1.0 / ?1 AS rpm, + AVG(latency_ms) AS avg_latency FROM request_log WHERE timestamp >= ?2 GROUP BY path @@ -83,6 +85,7 @@ fn query_traffic(conn: &rusqlite::Connection, window_hours: u32) -> Option>(4)?.unwrap_or(0.0); Ok(RouteMetrics { path, requests_per_min: rpm, @@ -91,6 +94,7 @@ fn query_traffic(conn: &rusqlite::Connection, window_hours: u32) -> Option) -> Json Date: Sun, 5 Apr 2026 15:20:22 -0500 Subject: [PATCH 21/25] fix(traffic): rename avg_request_bytes to avg_latency_ms (no bytes column in request_log) The field was storing AVG(latency_ms) from the query but named as if it held payload size. Rename across Rust struct, TypeScript type, RouteTable column header/cell, and TrafficView bar chart. Remove now-unused formatBytes helpers from both components. --- crates/proxy/admin-ui/dist/index.html | 16 ++++++++-------- crates/proxy/admin-ui/src/api/types.ts | 2 +- .../admin-ui/src/tabs/traffic/RouteTable.tsx | 9 ++------- .../admin-ui/src/tabs/traffic/TrafficView.tsx | 15 +++++---------- crates/proxy/src/admin/routes/traffic.rs | 4 ++-- 5 files changed, 18 insertions(+), 28 deletions(-) diff --git a/crates/proxy/admin-ui/dist/index.html b/crates/proxy/admin-ui/dist/index.html index 2f6681c..a3b43ed 100644 --- a/crates/proxy/admin-ui/dist/index.html +++ b/crates/proxy/admin-ui/dist/index.html @@ -4,7 +4,7 @@ Proxy Admin - +`+a.stack}}var js=Object.prototype.hasOwnProperty,Es=s.unstable_scheduleCallback,Ts=s.unstable_cancelCallback,pv=s.unstable_shouldYield,Sv=s.unstable_requestPaint,pe=s.unstable_now,bv=s.unstable_getCurrentPriorityLevel,gr=s.unstable_ImmediatePriority,pr=s.unstable_UserBlockingPriority,Fu=s.unstable_NormalPriority,xv=s.unstable_LowPriority,Sr=s.unstable_IdlePriority,jv=s.log,Ev=s.unstable_setDisableYieldValue,Vn=null,Se=null;function Ml(t){if(typeof jv=="function"&&Ev(t),Se&&typeof Se.setStrictMode=="function")try{Se.setStrictMode(Vn,t)}catch{}}var be=Math.clz32?Math.clz32:Ov,Tv=Math.log,_v=Math.LN2;function Ov(t){return t>>>=0,t===0?32:31-(Tv(t)/_v|0)|0}var ku=256,$u=262144,Wu=4194304;function ma(t){var e=t&42;if(e!==0)return e;switch(t&-t){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:return t&261888;case 262144:case 524288:case 1048576:case 2097152:return t&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return t&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return t}}function Iu(t,e,l){var a=t.pendingLanes;if(a===0)return 0;var n=0,u=t.suspendedLanes,c=t.pingedLanes;t=t.warmLanes;var d=a&134217727;return d!==0?(a=d&~u,a!==0?n=ma(a):(c&=d,c!==0?n=ma(c):l||(l=d&~t,l!==0&&(n=ma(l))))):(d=a&~u,d!==0?n=ma(d):c!==0?n=ma(c):l||(l=a&~t,l!==0&&(n=ma(l)))),n===0?0:e!==0&&e!==n&&(e&u)===0&&(u=n&-n,l=e&-e,u>=l||u===32&&(l&4194048)!==0)?e:n}function wn(t,e){return(t.pendingLanes&~(t.suspendedLanes&~t.pingedLanes)&e)===0}function Nv(t,e){switch(t){case 1:case 2:case 4:case 8:case 64:return e+250;case 16:case 32:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return e+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function br(){var t=Wu;return Wu<<=1,(Wu&62914560)===0&&(Wu=4194304),t}function _s(t){for(var e=[],l=0;31>l;l++)e.push(t);return e}function Jn(t,e){t.pendingLanes|=e,e!==268435456&&(t.suspendedLanes=0,t.pingedLanes=0,t.warmLanes=0)}function Av(t,e,l,a,n,u){var c=t.pendingLanes;t.pendingLanes=l,t.suspendedLanes=0,t.pingedLanes=0,t.warmLanes=0,t.expiredLanes&=l,t.entangledLanes&=l,t.errorRecoveryDisabledLanes&=l,t.shellSuspendCounter=0;var d=t.entanglements,h=t.expirationTimes,j=t.hiddenUpdates;for(l=c&~l;0"u")return null;try{return t.activeElement||t.body}catch{return t.body}}var Uv=/[\n"\\]/g;function Ce(t){return t.replace(Uv,function(e){return"\\"+e.charCodeAt(0).toString(16)+" "})}function Ds(t,e,l,a,n,u,c,d){t.name="",c!=null&&typeof c!="function"&&typeof c!="symbol"&&typeof c!="boolean"?t.type=c:t.removeAttribute("type"),e!=null?c==="number"?(e===0&&t.value===""||t.value!=e)&&(t.value=""+De(e)):t.value!==""+De(e)&&(t.value=""+De(e)):c!=="submit"&&c!=="reset"||t.removeAttribute("value"),e!=null?Cs(t,c,De(e)):l!=null?Cs(t,c,De(l)):a!=null&&t.removeAttribute("value"),n==null&&u!=null&&(t.defaultChecked=!!u),n!=null&&(t.checked=n&&typeof n!="function"&&typeof n!="symbol"),d!=null&&typeof d!="function"&&typeof d!="symbol"&&typeof d!="boolean"?t.name=""+De(d):t.removeAttribute("name")}function Rr(t,e,l,a,n,u,c,d){if(u!=null&&typeof u!="function"&&typeof u!="symbol"&&typeof u!="boolean"&&(t.type=u),e!=null||l!=null){if(!(u!=="submit"&&u!=="reset"||e!=null)){Ms(t);return}l=l!=null?""+De(l):"",e=e!=null?""+De(e):l,d||e===t.value||(t.value=e),t.defaultValue=e}a=a??n,a=typeof a!="function"&&typeof a!="symbol"&&!!a,t.checked=d?t.checked:!!a,t.defaultChecked=!!a,c!=null&&typeof c!="function"&&typeof c!="symbol"&&typeof c!="boolean"&&(t.name=c),Ms(t)}function Cs(t,e,l){e==="number"&&ei(t.ownerDocument)===t||t.defaultValue===""+l||(t.defaultValue=""+l)}function Wa(t,e,l,a){if(t=t.options,e){e={};for(var n=0;n"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),Qs=!1;if(sl)try{var Wn={};Object.defineProperty(Wn,"passive",{get:function(){Qs=!0}}),window.addEventListener("test",Wn,Wn),window.removeEventListener("test",Wn,Wn)}catch{Qs=!1}var Cl=null,Bs=null,ai=null;function Lr(){if(ai)return ai;var t,e=Bs,l=e.length,a,n="value"in Cl?Cl.value:Cl.textContent,u=n.length;for(t=0;t=tu),wr=" ",Jr=!1;function Fr(t,e){switch(t){case"keyup":return cy.indexOf(e.keyCode)!==-1;case"keydown":return e.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function kr(t){return t=t.detail,typeof t=="object"&&"data"in t?t.data:null}var en=!1;function ry(t,e){switch(t){case"compositionend":return kr(e);case"keypress":return e.which!==32?null:(Jr=!0,wr);case"textInput":return t=e.data,t===wr&&Jr?null:t;default:return null}}function oy(t,e){if(en)return t==="compositionend"||!Zs&&Fr(t,e)?(t=Lr(),ai=Bs=Cl=null,en=!1,t):null;switch(t){case"paste":return null;case"keypress":if(!(e.ctrlKey||e.altKey||e.metaKey)||e.ctrlKey&&e.altKey){if(e.char&&1=e)return{node:l,offset:e-t};t=a}t:{for(;l;){if(l.nextSibling){l=l.nextSibling;break t}l=l.parentNode}l=void 0}l=ao(l)}}function uo(t,e){return t&&e?t===e?!0:t&&t.nodeType===3?!1:e&&e.nodeType===3?uo(t,e.parentNode):"contains"in t?t.contains(e):t.compareDocumentPosition?!!(t.compareDocumentPosition(e)&16):!1:!1}function io(t){t=t!=null&&t.ownerDocument!=null&&t.ownerDocument.defaultView!=null?t.ownerDocument.defaultView:window;for(var e=ei(t.document);e instanceof t.HTMLIFrameElement;){try{var l=typeof e.contentWindow.location.href=="string"}catch{l=!1}if(l)t=e.contentWindow;else break;e=ei(t.document)}return e}function ws(t){var e=t&&t.nodeName&&t.nodeName.toLowerCase();return e&&(e==="input"&&(t.type==="text"||t.type==="search"||t.type==="tel"||t.type==="url"||t.type==="password")||e==="textarea"||t.contentEditable==="true")}var Sy=sl&&"documentMode"in document&&11>=document.documentMode,ln=null,Js=null,nu=null,Fs=!1;function so(t,e,l){var a=l.window===l?l.document:l.nodeType===9?l:l.ownerDocument;Fs||ln==null||ln!==ei(a)||(a=ln,"selectionStart"in a&&ws(a)?a={start:a.selectionStart,end:a.selectionEnd}:(a=(a.ownerDocument&&a.ownerDocument.defaultView||window).getSelection(),a={anchorNode:a.anchorNode,anchorOffset:a.anchorOffset,focusNode:a.focusNode,focusOffset:a.focusOffset}),nu&&au(nu,a)||(nu=a,a=$i(Js,"onSelect"),0>=c,n-=c,We=1<<32-be(e)+n|l<P?(st=L,L=null):st=L.sibling;var dt=E(S,L,x[P],M);if(dt===null){L===null&&(L=st);break}t&&L&&dt.alternate===null&&e(S,L),y=u(dt,y,P),ot===null?Z=dt:ot.sibling=dt,ot=dt,L=st}if(P===x.length)return l(S,L),ct&&fl(S,P),Z;if(L===null){for(;PP?(st=L,L=null):st=L.sibling;var ta=E(S,L,dt.value,M);if(ta===null){L===null&&(L=st);break}t&&L&&ta.alternate===null&&e(S,L),y=u(ta,y,P),ot===null?Z=ta:ot.sibling=ta,ot=ta,L=st}if(dt.done)return l(S,L),ct&&fl(S,P),Z;if(L===null){for(;!dt.done;P++,dt=x.next())dt=D(S,dt.value,M),dt!==null&&(y=u(dt,y,P),ot===null?Z=dt:ot.sibling=dt,ot=dt);return ct&&fl(S,P),Z}for(L=a(L);!dt.done;P++,dt=x.next())dt=O(L,S,P,dt.value,M),dt!==null&&(t&&dt.alternate!==null&&L.delete(dt.key===null?P:dt.key),y=u(dt,y,P),ot===null?Z=dt:ot.sibling=dt,ot=dt);return t&&L.forEach(function(Y0){return e(S,Y0)}),ct&&fl(S,P),Z}function jt(S,y,x,M){if(typeof x=="object"&&x!==null&&x.type===I&&x.key===null&&(x=x.props.children),typeof x=="object"&&x!==null){switch(x.$$typeof){case F:t:{for(var Z=x.key;y!==null;){if(y.key===Z){if(Z=x.type,Z===I){if(y.tag===7){l(S,y.sibling),M=n(y,x.props.children),M.return=S,S=M;break t}}else if(y.elementType===Z||typeof Z=="object"&&Z!==null&&Z.$$typeof===zt&&_a(Z)===y.type){l(S,y.sibling),M=n(y,x.props),ru(M,x),M.return=S,S=M;break t}l(S,y);break}else e(S,y);y=y.sibling}x.type===I?(M=ba(x.props.children,S.mode,M,x.key),M.return=S,S=M):(M=hi(x.type,x.key,x.props,null,S.mode,M),ru(M,x),M.return=S,S=M)}return c(S);case et:t:{for(Z=x.key;y!==null;){if(y.key===Z)if(y.tag===4&&y.stateNode.containerInfo===x.containerInfo&&y.stateNode.implementation===x.implementation){l(S,y.sibling),M=n(y,x.children||[]),M.return=S,S=M;break t}else{l(S,y);break}else e(S,y);y=y.sibling}M=ec(x,S.mode,M),M.return=S,S=M}return c(S);case zt:return x=_a(x),jt(S,y,x,M)}if(Ke(x))return B(S,y,x,M);if(kt(x)){if(Z=kt(x),typeof Z!="function")throw Error(f(150));return x=Z.call(x),K(S,y,x,M)}if(typeof x.then=="function")return jt(S,y,bi(x),M);if(x.$$typeof===pt)return jt(S,y,yi(S,x),M);xi(S,x)}return typeof x=="string"&&x!==""||typeof x=="number"||typeof x=="bigint"?(x=""+x,y!==null&&y.tag===6?(l(S,y.sibling),M=n(y,x),M.return=S,S=M):(l(S,y),M=tc(x,S.mode,M),M.return=S,S=M),c(S)):l(S,y)}return function(S,y,x,M){try{fu=0;var Z=jt(S,y,x,M);return mn=null,Z}catch(L){if(L===hn||L===pi)throw L;var ot=je(29,L,null,S.mode);return ot.lanes=M,ot.return=S,ot}finally{}}}var Na=Do(!0),Co=Do(!1),Ql=!1;function hc(t){t.updateQueue={baseState:t.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function mc(t,e){t=t.updateQueue,e.updateQueue===t&&(e.updateQueue={baseState:t.baseState,firstBaseUpdate:t.firstBaseUpdate,lastBaseUpdate:t.lastBaseUpdate,shared:t.shared,callbacks:null})}function Bl(t){return{lane:t,tag:0,payload:null,callback:null,next:null}}function Yl(t,e,l){var a=t.updateQueue;if(a===null)return null;if(a=a.shared,(ht&2)!==0){var n=a.pending;return n===null?e.next=e:(e.next=n.next,n.next=e),a.pending=e,e=di(t),vo(t,null,l),e}return oi(t,a,e,l),di(t)}function ou(t,e,l){if(e=e.updateQueue,e!==null&&(e=e.shared,(l&4194048)!==0)){var a=e.lanes;a&=t.pendingLanes,l|=a,e.lanes=l,jr(t,l)}}function vc(t,e){var l=t.updateQueue,a=t.alternate;if(a!==null&&(a=a.updateQueue,l===a)){var n=null,u=null;if(l=l.firstBaseUpdate,l!==null){do{var c={lane:l.lane,tag:l.tag,payload:l.payload,callback:null,next:null};u===null?n=u=c:u=u.next=c,l=l.next}while(l!==null);u===null?n=u=e:u=u.next=e}else n=u=e;l={baseState:a.baseState,firstBaseUpdate:n,lastBaseUpdate:u,shared:a.shared,callbacks:a.callbacks},t.updateQueue=l;return}t=l.lastBaseUpdate,t===null?l.firstBaseUpdate=e:t.next=e,l.lastBaseUpdate=e}var yc=!1;function du(){if(yc){var t=dn;if(t!==null)throw t}}function hu(t,e,l,a){yc=!1;var n=t.updateQueue;Ql=!1;var u=n.firstBaseUpdate,c=n.lastBaseUpdate,d=n.shared.pending;if(d!==null){n.shared.pending=null;var h=d,j=h.next;h.next=null,c===null?u=j:c.next=j,c=h;var A=t.alternate;A!==null&&(A=A.updateQueue,d=A.lastBaseUpdate,d!==c&&(d===null?A.firstBaseUpdate=j:d.next=j,A.lastBaseUpdate=h))}if(u!==null){var D=n.baseState;c=0,A=j=h=null,d=u;do{var E=d.lane&-536870913,O=E!==d.lane;if(O?(it&E)===E:(a&E)===E){E!==0&&E===on&&(yc=!0),A!==null&&(A=A.next={lane:0,tag:d.tag,payload:d.payload,callback:null,next:null});t:{var B=t,K=d;E=e;var jt=l;switch(K.tag){case 1:if(B=K.payload,typeof B=="function"){D=B.call(jt,D,E);break t}D=B;break t;case 3:B.flags=B.flags&-65537|128;case 0:if(B=K.payload,E=typeof B=="function"?B.call(jt,D,E):B,E==null)break t;D=R({},D,E);break t;case 2:Ql=!0}}E=d.callback,E!==null&&(t.flags|=64,O&&(t.flags|=8192),O=n.callbacks,O===null?n.callbacks=[E]:O.push(E))}else O={lane:E,tag:d.tag,payload:d.payload,callback:d.callback,next:null},A===null?(j=A=O,h=D):A=A.next=O,c|=E;if(d=d.next,d===null){if(d=n.shared.pending,d===null)break;O=d,d=O.next,O.next=null,n.lastBaseUpdate=O,n.shared.pending=null}}while(!0);A===null&&(h=D),n.baseState=h,n.firstBaseUpdate=j,n.lastBaseUpdate=A,u===null&&(n.shared.lanes=0),Kl|=c,t.lanes=c,t.memoizedState=D}}function Ro(t,e){if(typeof t!="function")throw Error(f(191,t));t.call(e)}function Uo(t,e){var l=t.callbacks;if(l!==null)for(t.callbacks=null,t=0;tu?u:8;var c=z.T,d={};z.T=d,qc(t,!1,e,l);try{var h=n(),j=z.S;if(j!==null&&j(d,h),h!==null&&typeof h=="object"&&typeof h.then=="function"){var A=Ay(h,a);yu(t,e,A,Ne(t))}else yu(t,e,a,Ne(t))}catch(D){yu(t,e,{then:function(){},status:"rejected",reason:D},Ne())}finally{q.p=u,c!==null&&d.types!==null&&(c.types=d.types),z.T=c}}function Uy(){}function Rc(t,e,l,a){if(t.tag!==5)throw Error(f(476));var n=dd(t).queue;od(t,n,e,J,l===null?Uy:function(){return hd(t),l(a)})}function dd(t){var e=t.memoizedState;if(e!==null)return e;e={memoizedState:J,baseState:J,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:hl,lastRenderedState:J},next:null};var l={};return e.next={memoizedState:l,baseState:l,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:hl,lastRenderedState:l},next:null},t.memoizedState=e,t=t.alternate,t!==null&&(t.memoizedState=e),e}function hd(t){var e=dd(t);e.next===null&&(e=t.alternate.memoizedState),yu(t,e.next.queue,{},Ne())}function Uc(){return It(Ru)}function md(){return Bt().memoizedState}function vd(){return Bt().memoizedState}function qy(t){for(var e=t.return;e!==null;){switch(e.tag){case 24:case 3:var l=Ne();t=Bl(l);var a=Yl(e,t,l);a!==null&&(ve(a,e,l),ou(a,e,l)),e={cache:fc()},t.payload=e;return}e=e.return}}function Hy(t,e,l){var a=Ne();l={lane:a,revertLane:0,gesture:null,action:l,hasEagerState:!1,eagerState:null,next:null},Di(t)?gd(e,l):(l=Is(t,e,l,a),l!==null&&(ve(l,t,a),pd(l,e,a)))}function yd(t,e,l){var a=Ne();yu(t,e,l,a)}function yu(t,e,l,a){var n={lane:a,revertLane:0,gesture:null,action:l,hasEagerState:!1,eagerState:null,next:null};if(Di(t))gd(e,n);else{var u=t.alternate;if(t.lanes===0&&(u===null||u.lanes===0)&&(u=e.lastRenderedReducer,u!==null))try{var c=e.lastRenderedState,d=u(c,l);if(n.hasEagerState=!0,n.eagerState=d,xe(d,c))return oi(t,e,n,0),Tt===null&&ri(),!1}catch{}finally{}if(l=Is(t,e,n,a),l!==null)return ve(l,t,a),pd(l,e,a),!0}return!1}function qc(t,e,l,a){if(a={lane:2,revertLane:mf(),gesture:null,action:a,hasEagerState:!1,eagerState:null,next:null},Di(t)){if(e)throw Error(f(479))}else e=Is(t,l,a,2),e!==null&&ve(e,t,2)}function Di(t){var e=t.alternate;return t===W||e!==null&&e===W}function gd(t,e){yn=Ti=!0;var l=t.pending;l===null?e.next=e:(e.next=l.next,l.next=e),t.pending=e}function pd(t,e,l){if((l&4194048)!==0){var a=e.lanes;a&=t.pendingLanes,l|=a,e.lanes=l,jr(t,l)}}var gu={readContext:It,use:Ni,useCallback:Rt,useContext:Rt,useEffect:Rt,useImperativeHandle:Rt,useLayoutEffect:Rt,useInsertionEffect:Rt,useMemo:Rt,useReducer:Rt,useRef:Rt,useState:Rt,useDebugValue:Rt,useDeferredValue:Rt,useTransition:Rt,useSyncExternalStore:Rt,useId:Rt,useHostTransitionStatus:Rt,useFormState:Rt,useActionState:Rt,useOptimistic:Rt,useMemoCache:Rt,useCacheRefresh:Rt};gu.useEffectEvent=Rt;var Sd={readContext:It,use:Ni,useCallback:function(t,e){return ue().memoizedState=[t,e===void 0?null:e],t},useContext:It,useEffect:ld,useImperativeHandle:function(t,e,l){l=l!=null?l.concat([t]):null,zi(4194308,4,id.bind(null,e,t),l)},useLayoutEffect:function(t,e){return zi(4194308,4,t,e)},useInsertionEffect:function(t,e){zi(4,2,t,e)},useMemo:function(t,e){var l=ue();e=e===void 0?null:e;var a=t();if(Aa){Ml(!0);try{t()}finally{Ml(!1)}}return l.memoizedState=[a,e],a},useReducer:function(t,e,l){var a=ue();if(l!==void 0){var n=l(e);if(Aa){Ml(!0);try{l(e)}finally{Ml(!1)}}}else n=e;return a.memoizedState=a.baseState=n,t={pending:null,lanes:0,dispatch:null,lastRenderedReducer:t,lastRenderedState:n},a.queue=t,t=t.dispatch=Hy.bind(null,W,t),[a.memoizedState,t]},useRef:function(t){var e=ue();return t={current:t},e.memoizedState=t},useState:function(t){t=Ac(t);var e=t.queue,l=yd.bind(null,W,e);return e.dispatch=l,[t.memoizedState,l]},useDebugValue:Dc,useDeferredValue:function(t,e){var l=ue();return Cc(l,t,e)},useTransition:function(){var t=Ac(!1);return t=od.bind(null,W,t.queue,!0,!1),ue().memoizedState=t,[!1,t]},useSyncExternalStore:function(t,e,l){var a=W,n=ue();if(ct){if(l===void 0)throw Error(f(407));l=l()}else{if(l=e(),Tt===null)throw Error(f(349));(it&127)!==0||Lo(a,e,l)}n.memoizedState=l;var u={value:l,getSnapshot:e};return n.queue=u,ld(Xo.bind(null,a,u,t),[t]),a.flags|=2048,pn(9,{destroy:void 0},Go.bind(null,a,u,l,e),null),l},useId:function(){var t=ue(),e=Tt.identifierPrefix;if(ct){var l=Ie,a=We;l=(a&~(1<<32-be(a)-1)).toString(32)+l,e="_"+e+"R_"+l,l=_i++,0<\/script>",u=u.removeChild(u.firstChild);break;case"select":u=typeof a.is=="string"?c.createElement("select",{is:a.is}):c.createElement("select"),a.multiple?u.multiple=!0:a.size&&(u.size=a.size);break;default:u=typeof a.is=="string"?c.createElement(n,{is:a.is}):c.createElement(n)}}u[$t]=e,u[fe]=a;t:for(c=e.child;c!==null;){if(c.tag===5||c.tag===6)u.appendChild(c.stateNode);else if(c.tag!==4&&c.tag!==27&&c.child!==null){c.child.return=c,c=c.child;continue}if(c===e)break t;for(;c.sibling===null;){if(c.return===null||c.return===e)break t;c=c.return}c.sibling.return=c.return,c=c.sibling}e.stateNode=u;t:switch(te(u,n,a),n){case"button":case"input":case"select":case"textarea":a=!!a.autoFocus;break t;case"img":a=!0;break t;default:a=!1}a&&vl(e)}}return Nt(e),kc(e,e.type,t===null?null:t.memoizedProps,e.pendingProps,l),null;case 6:if(t&&e.stateNode!=null)t.memoizedProps!==a&&vl(e);else{if(typeof a!="string"&&e.stateNode===null)throw Error(f(166));if(t=lt.current,fn(e)){if(t=e.stateNode,l=e.memoizedProps,a=null,n=Wt,n!==null)switch(n.tag){case 27:case 5:a=n.memoizedProps}t[$t]=e,t=!!(t.nodeValue===l||a!==null&&a.suppressHydrationWarning===!0||Bh(t.nodeValue,l)),t||ql(e,!0)}else t=Wi(t).createTextNode(a),t[$t]=e,e.stateNode=t}return Nt(e),null;case 31:if(l=e.memoizedState,t===null||t.memoizedState!==null){if(a=fn(e),l!==null){if(t===null){if(!a)throw Error(f(318));if(t=e.memoizedState,t=t!==null?t.dehydrated:null,!t)throw Error(f(557));t[$t]=e}else xa(),(e.flags&128)===0&&(e.memoizedState=null),e.flags|=4;Nt(e),t=!1}else l=uc(),t!==null&&t.memoizedState!==null&&(t.memoizedState.hydrationErrors=l),t=!0;if(!t)return e.flags&256?(Te(e),e):(Te(e),null);if((e.flags&128)!==0)throw Error(f(558))}return Nt(e),null;case 13:if(a=e.memoizedState,t===null||t.memoizedState!==null&&t.memoizedState.dehydrated!==null){if(n=fn(e),a!==null&&a.dehydrated!==null){if(t===null){if(!n)throw Error(f(318));if(n=e.memoizedState,n=n!==null?n.dehydrated:null,!n)throw Error(f(317));n[$t]=e}else xa(),(e.flags&128)===0&&(e.memoizedState=null),e.flags|=4;Nt(e),n=!1}else n=uc(),t!==null&&t.memoizedState!==null&&(t.memoizedState.hydrationErrors=n),n=!0;if(!n)return e.flags&256?(Te(e),e):(Te(e),null)}return Te(e),(e.flags&128)!==0?(e.lanes=l,e):(l=a!==null,t=t!==null&&t.memoizedState!==null,l&&(a=e.child,n=null,a.alternate!==null&&a.alternate.memoizedState!==null&&a.alternate.memoizedState.cachePool!==null&&(n=a.alternate.memoizedState.cachePool.pool),u=null,a.memoizedState!==null&&a.memoizedState.cachePool!==null&&(u=a.memoizedState.cachePool.pool),u!==n&&(a.flags|=2048)),l!==t&&l&&(e.child.flags|=8192),Hi(e,e.updateQueue),Nt(e),null);case 4:return Ht(),t===null&&pf(e.stateNode.containerInfo),Nt(e),null;case 10:return ol(e.type),Nt(e),null;case 19:if(C(Qt),a=e.memoizedState,a===null)return Nt(e),null;if(n=(e.flags&128)!==0,u=a.rendering,u===null)if(n)Su(a,!1);else{if(Ut!==0||t!==null&&(t.flags&128)!==0)for(t=e.child;t!==null;){if(u=Ei(t),u!==null){for(e.flags|=128,Su(a,!1),t=u.updateQueue,e.updateQueue=t,Hi(e,t),e.subtreeFlags=0,t=l,l=e.child;l!==null;)yo(l,t),l=l.sibling;return H(Qt,Qt.current&1|2),ct&&fl(e,a.treeForkCount),e.child}t=t.sibling}a.tail!==null&&pe()>Gi&&(e.flags|=128,n=!0,Su(a,!1),e.lanes=4194304)}else{if(!n)if(t=Ei(u),t!==null){if(e.flags|=128,n=!0,t=t.updateQueue,e.updateQueue=t,Hi(e,t),Su(a,!0),a.tail===null&&a.tailMode==="hidden"&&!u.alternate&&!ct)return Nt(e),null}else 2*pe()-a.renderingStartTime>Gi&&l!==536870912&&(e.flags|=128,n=!0,Su(a,!1),e.lanes=4194304);a.isBackwards?(u.sibling=e.child,e.child=u):(t=a.last,t!==null?t.sibling=u:e.child=u,a.last=u)}return a.tail!==null?(t=a.tail,a.rendering=t,a.tail=t.sibling,a.renderingStartTime=pe(),t.sibling=null,l=Qt.current,H(Qt,n?l&1|2:l&1),ct&&fl(e,a.treeForkCount),t):(Nt(e),null);case 22:case 23:return Te(e),pc(),a=e.memoizedState!==null,t!==null?t.memoizedState!==null!==a&&(e.flags|=8192):a&&(e.flags|=8192),a?(l&536870912)!==0&&(e.flags&128)===0&&(Nt(e),e.subtreeFlags&6&&(e.flags|=8192)):Nt(e),l=e.updateQueue,l!==null&&Hi(e,l.retryQueue),l=null,t!==null&&t.memoizedState!==null&&t.memoizedState.cachePool!==null&&(l=t.memoizedState.cachePool.pool),a=null,e.memoizedState!==null&&e.memoizedState.cachePool!==null&&(a=e.memoizedState.cachePool.pool),a!==l&&(e.flags|=2048),t!==null&&C(Ta),null;case 24:return l=null,t!==null&&(l=t.memoizedState.cache),e.memoizedState.cache!==l&&(e.flags|=2048),ol(Lt),Nt(e),null;case 25:return null;case 30:return null}throw Error(f(156,e.tag))}function Gy(t,e){switch(ac(e),e.tag){case 1:return t=e.flags,t&65536?(e.flags=t&-65537|128,e):null;case 3:return ol(Lt),Ht(),t=e.flags,(t&65536)!==0&&(t&128)===0?(e.flags=t&-65537|128,e):null;case 26:case 27:case 5:return Ju(e),null;case 31:if(e.memoizedState!==null){if(Te(e),e.alternate===null)throw Error(f(340));xa()}return t=e.flags,t&65536?(e.flags=t&-65537|128,e):null;case 13:if(Te(e),t=e.memoizedState,t!==null&&t.dehydrated!==null){if(e.alternate===null)throw Error(f(340));xa()}return t=e.flags,t&65536?(e.flags=t&-65537|128,e):null;case 19:return C(Qt),null;case 4:return Ht(),null;case 10:return ol(e.type),null;case 22:case 23:return Te(e),pc(),t!==null&&C(Ta),t=e.flags,t&65536?(e.flags=t&-65537|128,e):null;case 24:return ol(Lt),null;case 25:return null;default:return null}}function Zd(t,e){switch(ac(e),e.tag){case 3:ol(Lt),Ht();break;case 26:case 27:case 5:Ju(e);break;case 4:Ht();break;case 31:e.memoizedState!==null&&Te(e);break;case 13:Te(e);break;case 19:C(Qt);break;case 10:ol(e.type);break;case 22:case 23:Te(e),pc(),t!==null&&C(Ta);break;case 24:ol(Lt)}}function bu(t,e){try{var l=e.updateQueue,a=l!==null?l.lastEffect:null;if(a!==null){var n=a.next;l=n;do{if((l.tag&t)===t){a=void 0;var u=l.create,c=l.inst;a=u(),c.destroy=a}l=l.next}while(l!==n)}}catch(d){gt(e,e.return,d)}}function Xl(t,e,l){try{var a=e.updateQueue,n=a!==null?a.lastEffect:null;if(n!==null){var u=n.next;a=u;do{if((a.tag&t)===t){var c=a.inst,d=c.destroy;if(d!==void 0){c.destroy=void 0,n=e;var h=l,j=d;try{j()}catch(A){gt(n,h,A)}}}a=a.next}while(a!==u)}}catch(A){gt(e,e.return,A)}}function Kd(t){var e=t.updateQueue;if(e!==null){var l=t.stateNode;try{Uo(e,l)}catch(a){gt(t,t.return,a)}}}function Vd(t,e,l){l.props=za(t.type,t.memoizedProps),l.state=t.memoizedState;try{l.componentWillUnmount()}catch(a){gt(t,e,a)}}function xu(t,e){try{var l=t.ref;if(l!==null){switch(t.tag){case 26:case 27:case 5:var a=t.stateNode;break;case 30:a=t.stateNode;break;default:a=t.stateNode}typeof l=="function"?t.refCleanup=l(a):l.current=a}}catch(n){gt(t,e,n)}}function Pe(t,e){var l=t.ref,a=t.refCleanup;if(l!==null)if(typeof a=="function")try{a()}catch(n){gt(t,e,n)}finally{t.refCleanup=null,t=t.alternate,t!=null&&(t.refCleanup=null)}else if(typeof l=="function")try{l(null)}catch(n){gt(t,e,n)}else l.current=null}function wd(t){var e=t.type,l=t.memoizedProps,a=t.stateNode;try{t:switch(e){case"button":case"input":case"select":case"textarea":l.autoFocus&&a.focus();break t;case"img":l.src?a.src=l.src:l.srcSet&&(a.srcset=l.srcSet)}}catch(n){gt(t,t.return,n)}}function $c(t,e,l){try{var a=t.stateNode;f0(a,t.type,l,e),a[fe]=e}catch(n){gt(t,t.return,n)}}function Jd(t){return t.tag===5||t.tag===3||t.tag===26||t.tag===27&&kl(t.type)||t.tag===4}function Wc(t){t:for(;;){for(;t.sibling===null;){if(t.return===null||Jd(t.return))return null;t=t.return}for(t.sibling.return=t.return,t=t.sibling;t.tag!==5&&t.tag!==6&&t.tag!==18;){if(t.tag===27&&kl(t.type)||t.flags&2||t.child===null||t.tag===4)continue t;t.child.return=t,t=t.child}if(!(t.flags&2))return t.stateNode}}function Ic(t,e,l){var a=t.tag;if(a===5||a===6)t=t.stateNode,e?(l.nodeType===9?l.body:l.nodeName==="HTML"?l.ownerDocument.body:l).insertBefore(t,e):(e=l.nodeType===9?l.body:l.nodeName==="HTML"?l.ownerDocument.body:l,e.appendChild(t),l=l._reactRootContainer,l!=null||e.onclick!==null||(e.onclick=il));else if(a!==4&&(a===27&&kl(t.type)&&(l=t.stateNode,e=null),t=t.child,t!==null))for(Ic(t,e,l),t=t.sibling;t!==null;)Ic(t,e,l),t=t.sibling}function Qi(t,e,l){var a=t.tag;if(a===5||a===6)t=t.stateNode,e?l.insertBefore(t,e):l.appendChild(t);else if(a!==4&&(a===27&&kl(t.type)&&(l=t.stateNode),t=t.child,t!==null))for(Qi(t,e,l),t=t.sibling;t!==null;)Qi(t,e,l),t=t.sibling}function Fd(t){var e=t.stateNode,l=t.memoizedProps;try{for(var a=t.type,n=e.attributes;n.length;)e.removeAttributeNode(n[0]);te(e,a,l),e[$t]=t,e[fe]=l}catch(u){gt(t,t.return,u)}}var yl=!1,Zt=!1,Pc=!1,kd=typeof WeakSet=="function"?WeakSet:Set,Jt=null;function Xy(t,e){if(t=t.containerInfo,xf=ns,t=io(t),ws(t)){if("selectionStart"in t)var l={start:t.selectionStart,end:t.selectionEnd};else t:{l=(l=t.ownerDocument)&&l.defaultView||window;var a=l.getSelection&&l.getSelection();if(a&&a.rangeCount!==0){l=a.anchorNode;var n=a.anchorOffset,u=a.focusNode;a=a.focusOffset;try{l.nodeType,u.nodeType}catch{l=null;break t}var c=0,d=-1,h=-1,j=0,A=0,D=t,E=null;e:for(;;){for(var O;D!==l||n!==0&&D.nodeType!==3||(d=c+n),D!==u||a!==0&&D.nodeType!==3||(h=c+a),D.nodeType===3&&(c+=D.nodeValue.length),(O=D.firstChild)!==null;)E=D,D=O;for(;;){if(D===t)break e;if(E===l&&++j===n&&(d=c),E===u&&++A===a&&(h=c),(O=D.nextSibling)!==null)break;D=E,E=D.parentNode}D=O}l=d===-1||h===-1?null:{start:d,end:h}}else l=null}l=l||{start:0,end:0}}else l=null;for(jf={focusedElem:t,selectionRange:l},ns=!1,Jt=e;Jt!==null;)if(e=Jt,t=e.child,(e.subtreeFlags&1028)!==0&&t!==null)t.return=e,Jt=t;else for(;Jt!==null;){switch(e=Jt,u=e.alternate,t=e.flags,e.tag){case 0:if((t&4)!==0&&(t=e.updateQueue,t=t!==null?t.events:null,t!==null))for(l=0;l title"))),te(u,a,l),u[$t]=t,wt(u),a=u;break t;case"link":var c=em("link","href",n).get(a+(l.href||""));if(c){for(var d=0;djt&&(c=jt,jt=K,K=c);var S=no(d,K),y=no(d,jt);if(S&&y&&(O.rangeCount!==1||O.anchorNode!==S.node||O.anchorOffset!==S.offset||O.focusNode!==y.node||O.focusOffset!==y.offset)){var x=D.createRange();x.setStart(S.node,S.offset),O.removeAllRanges(),K>jt?(O.addRange(x),O.extend(y.node,y.offset)):(x.setEnd(y.node,y.offset),O.addRange(x))}}}}for(D=[],O=d;O=O.parentNode;)O.nodeType===1&&D.push({element:O,left:O.scrollLeft,top:O.scrollTop});for(typeof d.focus=="function"&&d.focus(),d=0;dl?32:l,z.T=null,l=sf,sf=null;var u=wl,c=xl;if(Kt=0,En=wl=null,xl=0,(ht&6)!==0)throw Error(f(331));var d=ht;if(ht|=4,ih(u.current),ah(u,u.current,c,l),ht=d,Nu(0,!1),Se&&typeof Se.onPostCommitFiberRoot=="function")try{Se.onPostCommitFiberRoot(Vn,u)}catch{}return!0}finally{q.p=n,z.T=a,Th(t,e)}}function Oh(t,e,l){e=Ue(l,e),e=Yc(t.stateNode,e,2),t=Yl(t,e,2),t!==null&&(Jn(t,2),tl(t))}function gt(t,e,l){if(t.tag===3)Oh(t,t,l);else for(;e!==null;){if(e.tag===3){Oh(e,t,l);break}else if(e.tag===1){var a=e.stateNode;if(typeof e.type.getDerivedStateFromError=="function"||typeof a.componentDidCatch=="function"&&(Vl===null||!Vl.has(a))){t=Ue(l,t),l=Nd(2),a=Yl(e,l,2),a!==null&&(Ad(l,a,e,t),Jn(a,2),tl(a));break}}e=e.return}}function of(t,e,l){var a=t.pingCache;if(a===null){a=t.pingCache=new Vy;var n=new Set;a.set(e,n)}else n=a.get(e),n===void 0&&(n=new Set,a.set(e,n));n.has(l)||(lf=!0,n.add(l),t=$y.bind(null,t,e,l),e.then(t,t))}function $y(t,e,l){var a=t.pingCache;a!==null&&a.delete(e),t.pingedLanes|=t.suspendedLanes&l,t.warmLanes&=~l,Tt===t&&(it&l)===l&&(Ut===4||Ut===3&&(it&62914560)===it&&300>pe()-Li?(ht&2)===0&&Tn(t,0):af|=l,jn===it&&(jn=0)),tl(t)}function Nh(t,e){e===0&&(e=br()),t=Sa(t,e),t!==null&&(Jn(t,e),tl(t))}function Wy(t){var e=t.memoizedState,l=0;e!==null&&(l=e.retryLane),Nh(t,l)}function Iy(t,e){var l=0;switch(t.tag){case 31:case 13:var a=t.stateNode,n=t.memoizedState;n!==null&&(l=n.retryLane);break;case 19:a=t.stateNode;break;case 22:a=t.stateNode._retryCache;break;default:throw Error(f(314))}a!==null&&a.delete(e),Nh(t,l)}function Py(t,e){return Es(t,e)}var Ji=null,On=null,df=!1,Fi=!1,hf=!1,Fl=0;function tl(t){t!==On&&t.next===null&&(On===null?Ji=On=t:On=On.next=t),Fi=!0,df||(df=!0,e0())}function Nu(t,e){if(!hf&&Fi){hf=!0;do for(var l=!1,a=Ji;a!==null;){if(t!==0){var n=a.pendingLanes;if(n===0)var u=0;else{var c=a.suspendedLanes,d=a.pingedLanes;u=(1<<31-be(42|t)+1)-1,u&=n&~(c&~d),u=u&201326741?u&201326741|1:u?u|2:0}u!==0&&(l=!0,Dh(a,u))}else u=it,u=Iu(a,a===Tt?u:0,a.cancelPendingCommit!==null||a.timeoutHandle!==-1),(u&3)===0||wn(a,u)||(l=!0,Dh(a,u));a=a.next}while(l);hf=!1}}function t0(){Ah()}function Ah(){Fi=df=!1;var t=0;Fl!==0&&o0()&&(t=Fl);for(var e=pe(),l=null,a=Ji;a!==null;){var n=a.next,u=zh(a,e);u===0?(a.next=null,l===null?Ji=n:l.next=n,n===null&&(On=l)):(l=a,(t!==0||(u&3)!==0)&&(Fi=!0)),a=n}Kt!==0&&Kt!==5||Nu(t),Fl!==0&&(Fl=0)}function zh(t,e){for(var l=t.suspendedLanes,a=t.pingedLanes,n=t.expirationTimes,u=t.pendingLanes&-62914561;0d)break;var A=h.transferSize,D=h.initiatorType;A&&Yh(D)&&(h=h.responseEnd,c+=A*(h"u"?null:document;function Wh(t,e,l){var a=Nn;if(a&&typeof e=="string"&&e){var n=Ce(e);n='link[rel="'+t+'"][href="'+n+'"]',typeof l=="string"&&(n+='[crossorigin="'+l+'"]'),$h.has(n)||($h.add(n),t={rel:t,crossOrigin:l,href:e},a.querySelector(n)===null&&(e=a.createElement("link"),te(e,"link",t),wt(e),a.head.appendChild(e)))}}function b0(t){jl.D(t),Wh("dns-prefetch",t,null)}function x0(t,e){jl.C(t,e),Wh("preconnect",t,e)}function j0(t,e,l){jl.L(t,e,l);var a=Nn;if(a&&t&&e){var n='link[rel="preload"][as="'+Ce(e)+'"]';e==="image"&&l&&l.imageSrcSet?(n+='[imagesrcset="'+Ce(l.imageSrcSet)+'"]',typeof l.imageSizes=="string"&&(n+='[imagesizes="'+Ce(l.imageSizes)+'"]')):n+='[href="'+Ce(t)+'"]';var u=n;switch(e){case"style":u=An(t);break;case"script":u=zn(t)}Le.has(u)||(t=R({rel:"preload",href:e==="image"&&l&&l.imageSrcSet?void 0:t,as:e},l),Le.set(u,t),a.querySelector(n)!==null||e==="style"&&a.querySelector(Du(u))||e==="script"&&a.querySelector(Cu(u))||(e=a.createElement("link"),te(e,"link",t),wt(e),a.head.appendChild(e)))}}function E0(t,e){jl.m(t,e);var l=Nn;if(l&&t){var a=e&&typeof e.as=="string"?e.as:"script",n='link[rel="modulepreload"][as="'+Ce(a)+'"][href="'+Ce(t)+'"]',u=n;switch(a){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":u=zn(t)}if(!Le.has(u)&&(t=R({rel:"modulepreload",href:t},e),Le.set(u,t),l.querySelector(n)===null)){switch(a){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":if(l.querySelector(Cu(u)))return}a=l.createElement("link"),te(a,"link",t),wt(a),l.head.appendChild(a)}}}function T0(t,e,l){jl.S(t,e,l);var a=Nn;if(a&&t){var n=ka(a).hoistableStyles,u=An(t);e=e||"default";var c=n.get(u);if(!c){var d={loading:0,preload:null};if(c=a.querySelector(Du(u)))d.loading=5;else{t=R({rel:"stylesheet",href:t,"data-precedence":e},l),(l=Le.get(u))&&zf(t,l);var h=c=a.createElement("link");wt(h),te(h,"link",t),h._p=new Promise(function(j,A){h.onload=j,h.onerror=A}),h.addEventListener("load",function(){d.loading|=1}),h.addEventListener("error",function(){d.loading|=2}),d.loading|=4,Pi(c,e,a)}c={type:"stylesheet",instance:c,count:1,state:d},n.set(u,c)}}}function _0(t,e){jl.X(t,e);var l=Nn;if(l&&t){var a=ka(l).hoistableScripts,n=zn(t),u=a.get(n);u||(u=l.querySelector(Cu(n)),u||(t=R({src:t,async:!0},e),(e=Le.get(n))&&Mf(t,e),u=l.createElement("script"),wt(u),te(u,"link",t),l.head.appendChild(u)),u={type:"script",instance:u,count:1,state:null},a.set(n,u))}}function O0(t,e){jl.M(t,e);var l=Nn;if(l&&t){var a=ka(l).hoistableScripts,n=zn(t),u=a.get(n);u||(u=l.querySelector(Cu(n)),u||(t=R({src:t,async:!0,type:"module"},e),(e=Le.get(n))&&Mf(t,e),u=l.createElement("script"),wt(u),te(u,"link",t),l.head.appendChild(u)),u={type:"script",instance:u,count:1,state:null},a.set(n,u))}}function Ih(t,e,l,a){var n=(n=lt.current)?Ii(n):null;if(!n)throw Error(f(446));switch(t){case"meta":case"title":return null;case"style":return typeof l.precedence=="string"&&typeof l.href=="string"?(e=An(l.href),l=ka(n).hoistableStyles,a=l.get(e),a||(a={type:"style",instance:null,count:0,state:null},l.set(e,a)),a):{type:"void",instance:null,count:0,state:null};case"link":if(l.rel==="stylesheet"&&typeof l.href=="string"&&typeof l.precedence=="string"){t=An(l.href);var u=ka(n).hoistableStyles,c=u.get(t);if(c||(n=n.ownerDocument||n,c={type:"stylesheet",instance:null,count:0,state:{loading:0,preload:null}},u.set(t,c),(u=n.querySelector(Du(t)))&&!u._p&&(c.instance=u,c.state.loading=5),Le.has(t)||(l={rel:"preload",as:"style",href:l.href,crossOrigin:l.crossOrigin,integrity:l.integrity,media:l.media,hrefLang:l.hrefLang,referrerPolicy:l.referrerPolicy},Le.set(t,l),u||N0(n,t,l,c.state))),e&&a===null)throw Error(f(528,""));return c}if(e&&a!==null)throw Error(f(529,""));return null;case"script":return e=l.async,l=l.src,typeof l=="string"&&e&&typeof e!="function"&&typeof e!="symbol"?(e=zn(l),l=ka(n).hoistableScripts,a=l.get(e),a||(a={type:"script",instance:null,count:0,state:null},l.set(e,a)),a):{type:"void",instance:null,count:0,state:null};default:throw Error(f(444,t))}}function An(t){return'href="'+Ce(t)+'"'}function Du(t){return'link[rel="stylesheet"]['+t+"]"}function Ph(t){return R({},t,{"data-precedence":t.precedence,precedence:null})}function N0(t,e,l,a){t.querySelector('link[rel="preload"][as="style"]['+e+"]")?a.loading=1:(e=t.createElement("link"),a.preload=e,e.addEventListener("load",function(){return a.loading|=1}),e.addEventListener("error",function(){return a.loading|=2}),te(e,"link",l),wt(e),t.head.appendChild(e))}function zn(t){return'[src="'+Ce(t)+'"]'}function Cu(t){return"script[async]"+t}function tm(t,e,l){if(e.count++,e.instance===null)switch(e.type){case"style":var a=t.querySelector('style[data-href~="'+Ce(l.href)+'"]');if(a)return e.instance=a,wt(a),a;var n=R({},l,{"data-href":l.href,"data-precedence":l.precedence,href:null,precedence:null});return a=(t.ownerDocument||t).createElement("style"),wt(a),te(a,"style",n),Pi(a,l.precedence,t),e.instance=a;case"stylesheet":n=An(l.href);var u=t.querySelector(Du(n));if(u)return e.state.loading|=4,e.instance=u,wt(u),u;a=Ph(l),(n=Le.get(n))&&zf(a,n),u=(t.ownerDocument||t).createElement("link"),wt(u);var c=u;return c._p=new Promise(function(d,h){c.onload=d,c.onerror=h}),te(u,"link",a),e.state.loading|=4,Pi(u,l.precedence,t),e.instance=u;case"script":return u=zn(l.src),(n=t.querySelector(Cu(u)))?(e.instance=n,wt(n),n):(a=l,(n=Le.get(u))&&(a=R({},l),Mf(a,n)),t=t.ownerDocument||t,n=t.createElement("script"),wt(n),te(n,"link",a),t.head.appendChild(n),e.instance=n);case"void":return null;default:throw Error(f(443,e.type))}else e.type==="stylesheet"&&(e.state.loading&4)===0&&(a=e.instance,e.state.loading|=4,Pi(a,l.precedence,t));return e.instance}function Pi(t,e,l){for(var a=l.querySelectorAll('link[rel="stylesheet"][data-precedence],style[data-precedence]'),n=a.length?a[a.length-1]:null,u=n,c=0;c title"):null)}function A0(t,e,l){if(l===1||e.itemProp!=null)return!1;switch(t){case"meta":case"title":return!0;case"style":if(typeof e.precedence!="string"||typeof e.href!="string"||e.href==="")break;return!0;case"link":if(typeof e.rel!="string"||typeof e.href!="string"||e.href===""||e.onLoad||e.onError)break;switch(e.rel){case"stylesheet":return t=e.disabled,typeof e.precedence=="string"&&t==null;default:return!0}case"script":if(e.async&&typeof e.async!="function"&&typeof e.async!="symbol"&&!e.onLoad&&!e.onError&&e.src&&typeof e.src=="string")return!0}return!1}function am(t){return!(t.type==="stylesheet"&&(t.state.loading&3)===0)}function z0(t,e,l,a){if(l.type==="stylesheet"&&(typeof a.media!="string"||matchMedia(a.media).matches!==!1)&&(l.state.loading&4)===0){if(l.instance===null){var n=An(a.href),u=e.querySelector(Du(n));if(u){e=u._p,e!==null&&typeof e=="object"&&typeof e.then=="function"&&(t.count++,t=es.bind(t),e.then(t,t)),l.state.loading|=4,l.instance=u,wt(u);return}u=e.ownerDocument||e,a=Ph(a),(n=Le.get(n))&&zf(a,n),u=u.createElement("link"),wt(u);var c=u;c._p=new Promise(function(d,h){c.onload=d,c.onerror=h}),te(u,"link",a),l.instance=u}t.stylesheets===null&&(t.stylesheets=new Map),t.stylesheets.set(l,e),(e=l.state.preload)&&(l.state.loading&3)===0&&(t.count++,l=es.bind(t),e.addEventListener("load",l),e.addEventListener("error",l))}}var Df=0;function M0(t,e){return t.stylesheets&&t.count===0&&as(t,t.stylesheets),0Df?50:800)+e);return t.unsuspend=l,function(){t.unsuspend=null,clearTimeout(a),clearTimeout(n)}}:null}function es(){if(this.count--,this.count===0&&(this.imgCount===0||!this.waitingForImages)){if(this.stylesheets)as(this,this.stylesheets);else if(this.unsuspend){var t=this.unsuspend;this.unsuspend=null,t()}}}var ls=null;function as(t,e){t.stylesheets=null,t.unsuspend!==null&&(t.count++,ls=new Map,e.forEach(D0,t),ls=null,es.call(t))}function D0(t,e){if(!(e.state.loading&4)){var l=ls.get(t);if(l)var a=l.get(null);else{l=new Map,ls.set(t,l);for(var n=t.querySelectorAll("link[data-precedence],style[data-precedence]"),u=0;u"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(s)}catch(i){console.error(i)}}return s(),Gf.exports=F0(),Gf.exports}var $0=k0(),Zn=class{constructor(){this.listeners=new Set,this.subscribe=this.subscribe.bind(this)}subscribe(s){return this.listeners.add(s),this.onSubscribe(),()=>{this.listeners.delete(s),this.onUnsubscribe()}}hasListeners(){return this.listeners.size>0}onSubscribe(){}onUnsubscribe(){}},Ra,la,Dn,Zm,W0=(Zm=class extends Zn{constructor(){super();X(this,Ra);X(this,la);X(this,Dn);Q(this,Dn,i=>{if(typeof window<"u"&&window.addEventListener){const r=()=>i();return window.addEventListener("visibilitychange",r,!1),()=>{window.removeEventListener("visibilitychange",r)}}})}onSubscribe(){m(this,la)||this.setEventListener(m(this,Dn))}onUnsubscribe(){var i;this.hasListeners()||((i=m(this,la))==null||i.call(this),Q(this,la,void 0))}setEventListener(i){var r;Q(this,Dn,i),(r=m(this,la))==null||r.call(this),Q(this,la,i(f=>{typeof f=="boolean"?this.setFocused(f):this.onFocus()}))}setFocused(i){m(this,Ra)!==i&&(Q(this,Ra,i),this.onFocus())}onFocus(){const i=this.isFocused();this.listeners.forEach(r=>{r(i)})}isFocused(){return typeof m(this,Ra)=="boolean"?m(this,Ra):globalThis.document?.visibilityState!=="hidden"}},Ra=new WeakMap,la=new WeakMap,Dn=new WeakMap,Zm),rr=new W0,I0={setTimeout:(s,i)=>setTimeout(s,i),clearTimeout:s=>clearTimeout(s),setInterval:(s,i)=>setInterval(s,i),clearInterval:s=>clearInterval(s)},aa,cr,Km,P0=(Km=class{constructor(){X(this,aa,I0);X(this,cr,!1)}setTimeoutProvider(s){Q(this,aa,s)}setTimeout(s,i){return m(this,aa).setTimeout(s,i)}clearTimeout(s){m(this,aa).clearTimeout(s)}setInterval(s,i){return m(this,aa).setInterval(s,i)}clearInterval(s){m(this,aa).clearInterval(s)}},aa=new WeakMap,cr=new WeakMap,Km),Ca=new P0;function tg(s){setTimeout(s,0)}var eg=typeof window>"u"||"Deno"in globalThis;function se(){}function lg(s,i){return typeof s=="function"?s(i):s}function wf(s){return typeof s=="number"&&s>=0&&s!==1/0}function tv(s,i){return Math.max(s+(i||0)-Date.now(),0)}function da(s,i){return typeof s=="function"?s(i):s}function Xe(s,i){return typeof s=="function"?s(i):s}function Am(s,i){const{type:r="all",exact:f,fetchStatus:v,predicate:b,queryKey:T,stale:N}=s;if(T){if(f){if(i.queryHash!==or(T,i.options))return!1}else if(!Lu(i.queryKey,T))return!1}if(r!=="all"){const _=i.isActive();if(r==="active"&&!_||r==="inactive"&&_)return!1}return!(typeof N=="boolean"&&i.isStale()!==N||v&&v!==i.state.fetchStatus||b&&!b(i))}function zm(s,i){const{exact:r,status:f,predicate:v,mutationKey:b}=s;if(b){if(!i.options.mutationKey)return!1;if(r){if(Xa(i.options.mutationKey)!==Xa(b))return!1}else if(!Lu(i.options.mutationKey,b))return!1}return!(f&&i.state.status!==f||v&&!v(i))}function or(s,i){return(i?.queryKeyHashFn||Xa)(s)}function Xa(s){return JSON.stringify(s,(i,r)=>Jf(r)?Object.keys(r).sort().reduce((f,v)=>(f[v]=r[v],f),{}):r)}function Lu(s,i){return s===i?!0:typeof s!=typeof i?!1:s&&i&&typeof s=="object"&&typeof i=="object"?Object.keys(i).every(r=>Lu(s[r],i[r])):!1}var ag=Object.prototype.hasOwnProperty;function ev(s,i,r=0){if(s===i)return s;if(r>500)return i;const f=Mm(s)&&Mm(i);if(!f&&!(Jf(s)&&Jf(i)))return i;const b=(f?s:Object.keys(s)).length,T=f?i:Object.keys(i),N=T.length,_=f?new Array(N):{};let p=0;for(let U=0;U{Ca.setTimeout(i,s)})}function Ff(s,i,r){return typeof r.structuralSharing=="function"?r.structuralSharing(s,i):r.structuralSharing!==!1?ev(s,i):i}function ug(s,i,r=0){const f=[...s,i];return r&&f.length>r?f.slice(1):f}function ig(s,i,r=0){const f=[i,...s];return r&&f.length>r?f.slice(0,-1):f}var dr=Symbol();function lv(s,i){return!s.queryFn&&i?.initialPromise?()=>i.initialPromise:!s.queryFn||s.queryFn===dr?()=>Promise.reject(new Error(`Missing queryFn: '${s.queryHash}'`)):s.queryFn}function hr(s,i){return typeof s=="function"?s(...i):!!s}function sg(s,i,r){let f=!1,v;return Object.defineProperty(s,"signal",{enumerable:!0,get:()=>(v??(v=i()),f||(f=!0,v.aborted?r():v.addEventListener("abort",r,{once:!0})),v)}),s}var Gu=(()=>{let s=()=>eg;return{isServer(){return s()},setIsServer(i){s=i}}})();function kf(){let s,i;const r=new Promise((v,b)=>{s=v,i=b});r.status="pending",r.catch(()=>{});function f(v){Object.assign(r,v),delete r.resolve,delete r.reject}return r.resolve=v=>{f({status:"fulfilled",value:v}),s(v)},r.reject=v=>{f({status:"rejected",reason:v}),i(v)},r}var cg=tg;function fg(){let s=[],i=0,r=N=>{N()},f=N=>{N()},v=cg;const b=N=>{i?s.push(N):v(()=>{r(N)})},T=()=>{const N=s;s=[],N.length&&v(()=>{f(()=>{N.forEach(_=>{r(_)})})})};return{batch:N=>{let _;i++;try{_=N()}finally{i--,i||T()}return _},batchCalls:N=>(..._)=>{b(()=>{N(..._)})},schedule:b,setNotifyFunction:N=>{r=N},setBatchNotifyFunction:N=>{f=N},setScheduler:N=>{v=N}}}var Vt=fg(),Cn,na,Rn,Vm,rg=(Vm=class extends Zn{constructor(){super();X(this,Cn,!0);X(this,na);X(this,Rn);Q(this,Rn,i=>{if(typeof window<"u"&&window.addEventListener){const r=()=>i(!0),f=()=>i(!1);return window.addEventListener("online",r,!1),window.addEventListener("offline",f,!1),()=>{window.removeEventListener("online",r),window.removeEventListener("offline",f)}}})}onSubscribe(){m(this,na)||this.setEventListener(m(this,Rn))}onUnsubscribe(){var i;this.hasListeners()||((i=m(this,na))==null||i.call(this),Q(this,na,void 0))}setEventListener(i){var r;Q(this,Rn,i),(r=m(this,na))==null||r.call(this),Q(this,na,i(this.setOnline.bind(this)))}setOnline(i){m(this,Cn)!==i&&(Q(this,Cn,i),this.listeners.forEach(f=>{f(i)}))}isOnline(){return m(this,Cn)}},Cn=new WeakMap,na=new WeakMap,Rn=new WeakMap,Vm),gs=new rg;function og(s){return Math.min(1e3*2**s,3e4)}function av(s){return(s??"online")==="online"?gs.isOnline():!0}var $f=class extends Error{constructor(s){super("CancelledError"),this.revert=s?.revert,this.silent=s?.silent}};function nv(s){let i=!1,r=0,f;const v=kf(),b=()=>v.status!=="pending",T=I=>{if(!b()){const V=new $f(I);G(V),s.onCancel?.(V)}},N=()=>{i=!0},_=()=>{i=!1},p=()=>rr.isFocused()&&(s.networkMode==="always"||gs.isOnline())&&s.canRun(),U=()=>av(s.networkMode)&&s.canRun(),R=I=>{b()||(f?.(),v.resolve(I))},G=I=>{b()||(f?.(),v.reject(I))},F=()=>new Promise(I=>{f=V=>{(b()||p())&&I(V)},s.onPause?.()}).then(()=>{f=void 0,b()||s.onContinue?.()}),et=()=>{if(b())return;let I;const V=r===0?s.initialPromise:void 0;try{I=V??s.fn()}catch(rt){I=Promise.reject(rt)}Promise.resolve(I).then(R).catch(rt=>{if(b())return;const Dt=s.retry??(Gu.isServer()?0:3),pt=s.retryDelay??og,_t=typeof pt=="function"?pt(r,rt):pt,Ct=Dt===!0||typeof Dt=="number"&&rp()?void 0:F()).then(()=>{i?G(rt):et()})})};return{promise:v,status:()=>v.status,cancel:T,continue:()=>(f?.(),v),cancelRetry:N,continueRetry:_,canStart:U,start:()=>(U()?et():F().then(et),v)}}var Ua,wm,uv=(wm=class{constructor(){X(this,Ua)}destroy(){this.clearGcTimeout()}scheduleGc(){this.clearGcTimeout(),wf(this.gcTime)&&Q(this,Ua,Ca.setTimeout(()=>{this.optionalRemove()},this.gcTime))}updateGcTime(s){this.gcTime=Math.max(this.gcTime||0,s??(Gu.isServer()?1/0:300*1e3))}clearGcTimeout(){m(this,Ua)&&(Ca.clearTimeout(m(this,Ua)),Q(this,Ua,void 0))}},Ua=new WeakMap,wm),qa,Un,Ge,Ha,Ft,Xu,Qa,Ae,iv,El,Jm,dg=(Jm=class extends uv{constructor(i){super();X(this,Ae);X(this,qa);X(this,Un);X(this,Ge);X(this,Ha);X(this,Ft);X(this,Xu);X(this,Qa);Q(this,Qa,!1),Q(this,Xu,i.defaultOptions),this.setOptions(i.options),this.observers=[],Q(this,Ha,i.client),Q(this,Ge,m(this,Ha).getQueryCache()),this.queryKey=i.queryKey,this.queryHash=i.queryHash,Q(this,qa,Rm(this.options)),this.state=i.state??m(this,qa),this.scheduleGc()}get meta(){return this.options.meta}get promise(){return m(this,Ft)?.promise}setOptions(i){if(this.options={...m(this,Xu),...i},this.updateGcTime(this.options.gcTime),this.state&&this.state.data===void 0){const r=Rm(this.options);r.data!==void 0&&(this.setState(Cm(r.data,r.dataUpdatedAt)),Q(this,qa,r))}}optionalRemove(){!this.observers.length&&this.state.fetchStatus==="idle"&&m(this,Ge).remove(this)}setData(i,r){const f=Ff(this.state.data,i,this.options);return tt(this,Ae,El).call(this,{data:f,type:"success",dataUpdatedAt:r?.updatedAt,manual:r?.manual}),f}setState(i,r){tt(this,Ae,El).call(this,{type:"setState",state:i,setStateOptions:r})}cancel(i){const r=m(this,Ft)?.promise;return m(this,Ft)?.cancel(i),r?r.then(se).catch(se):Promise.resolve()}destroy(){super.destroy(),this.cancel({silent:!0})}get resetState(){return m(this,qa)}reset(){this.destroy(),this.setState(this.resetState)}isActive(){return this.observers.some(i=>Xe(i.options.enabled,this)!==!1)}isDisabled(){return this.getObserversCount()>0?!this.isActive():this.options.queryFn===dr||!this.isFetched()}isFetched(){return this.state.dataUpdateCount+this.state.errorUpdateCount>0}isStatic(){return this.getObserversCount()>0?this.observers.some(i=>da(i.options.staleTime,this)==="static"):!1}isStale(){return this.getObserversCount()>0?this.observers.some(i=>i.getCurrentResult().isStale):this.state.data===void 0||this.state.isInvalidated}isStaleByTime(i=0){return this.state.data===void 0?!0:i==="static"?!1:this.state.isInvalidated?!0:!tv(this.state.dataUpdatedAt,i)}onFocus(){this.observers.find(r=>r.shouldFetchOnWindowFocus())?.refetch({cancelRefetch:!1}),m(this,Ft)?.continue()}onOnline(){this.observers.find(r=>r.shouldFetchOnReconnect())?.refetch({cancelRefetch:!1}),m(this,Ft)?.continue()}addObserver(i){this.observers.includes(i)||(this.observers.push(i),this.clearGcTimeout(),m(this,Ge).notify({type:"observerAdded",query:this,observer:i}))}removeObserver(i){this.observers.includes(i)&&(this.observers=this.observers.filter(r=>r!==i),this.observers.length||(m(this,Ft)&&(m(this,Qa)||tt(this,Ae,iv).call(this)?m(this,Ft).cancel({revert:!0}):m(this,Ft).cancelRetry()),this.scheduleGc()),m(this,Ge).notify({type:"observerRemoved",query:this,observer:i}))}getObserversCount(){return this.observers.length}invalidate(){this.state.isInvalidated||tt(this,Ae,El).call(this,{type:"invalidate"})}async fetch(i,r){if(this.state.fetchStatus!=="idle"&&m(this,Ft)?.status()!=="rejected"){if(this.state.data!==void 0&&r?.cancelRefetch)this.cancel({silent:!0});else if(m(this,Ft))return m(this,Ft).continueRetry(),m(this,Ft).promise}if(i&&this.setOptions(i),!this.options.queryFn){const _=this.observers.find(p=>p.options.queryFn);_&&this.setOptions(_.options)}const f=new AbortController,v=_=>{Object.defineProperty(_,"signal",{enumerable:!0,get:()=>(Q(this,Qa,!0),f.signal)})},b=()=>{const _=lv(this.options,r),U=(()=>{const R={client:m(this,Ha),queryKey:this.queryKey,meta:this.meta};return v(R),R})();return Q(this,Qa,!1),this.options.persister?this.options.persister(_,U,this):_(U)},N=(()=>{const _={fetchOptions:r,options:this.options,queryKey:this.queryKey,client:m(this,Ha),state:this.state,fetchFn:b};return v(_),_})();this.options.behavior?.onFetch(N,this),Q(this,Un,this.state),(this.state.fetchStatus==="idle"||this.state.fetchMeta!==N.fetchOptions?.meta)&&tt(this,Ae,El).call(this,{type:"fetch",meta:N.fetchOptions?.meta}),Q(this,Ft,nv({initialPromise:r?.initialPromise,fn:N.fetchFn,onCancel:_=>{_ instanceof $f&&_.revert&&this.setState({...m(this,Un),fetchStatus:"idle"}),f.abort()},onFail:(_,p)=>{tt(this,Ae,El).call(this,{type:"failed",failureCount:_,error:p})},onPause:()=>{tt(this,Ae,El).call(this,{type:"pause"})},onContinue:()=>{tt(this,Ae,El).call(this,{type:"continue"})},retry:N.options.retry,retryDelay:N.options.retryDelay,networkMode:N.options.networkMode,canRun:()=>!0}));try{const _=await m(this,Ft).start();if(_===void 0)throw new Error(`${this.queryHash} data is undefined`);return this.setData(_),m(this,Ge).config.onSuccess?.(_,this),m(this,Ge).config.onSettled?.(_,this.state.error,this),_}catch(_){if(_ instanceof $f){if(_.silent)return m(this,Ft).promise;if(_.revert){if(this.state.data===void 0)throw _;return this.state.data}}throw tt(this,Ae,El).call(this,{type:"error",error:_}),m(this,Ge).config.onError?.(_,this),m(this,Ge).config.onSettled?.(this.state.data,_,this),_}finally{this.scheduleGc()}}},qa=new WeakMap,Un=new WeakMap,Ge=new WeakMap,Ha=new WeakMap,Ft=new WeakMap,Xu=new WeakMap,Qa=new WeakMap,Ae=new WeakSet,iv=function(){return this.state.fetchStatus==="paused"&&this.state.status==="pending"},El=function(i){const r=f=>{switch(i.type){case"failed":return{...f,fetchFailureCount:i.failureCount,fetchFailureReason:i.error};case"pause":return{...f,fetchStatus:"paused"};case"continue":return{...f,fetchStatus:"fetching"};case"fetch":return{...f,...sv(f.data,this.options),fetchMeta:i.meta??null};case"success":const v={...f,...Cm(i.data,i.dataUpdatedAt),dataUpdateCount:f.dataUpdateCount+1,...!i.manual&&{fetchStatus:"idle",fetchFailureCount:0,fetchFailureReason:null}};return Q(this,Un,i.manual?v:void 0),v;case"error":const b=i.error;return{...f,error:b,errorUpdateCount:f.errorUpdateCount+1,errorUpdatedAt:Date.now(),fetchFailureCount:f.fetchFailureCount+1,fetchFailureReason:b,fetchStatus:"idle",status:"error",isInvalidated:!0};case"invalidate":return{...f,isInvalidated:!0};case"setState":return{...f,...i.state}}};this.state=r(this.state),Vt.batch(()=>{this.observers.forEach(f=>{f.onQueryUpdate()}),m(this,Ge).notify({query:this,type:"updated",action:i})})},Jm);function sv(s,i){return{fetchFailureCount:0,fetchFailureReason:null,fetchStatus:av(i.networkMode)?"fetching":"paused",...s===void 0&&{error:null,status:"pending"}}}function Cm(s,i){return{data:s,dataUpdatedAt:i??Date.now(),error:null,isInvalidated:!1,status:"success"}}function Rm(s){const i=typeof s.initialData=="function"?s.initialData():s.initialData,r=i!==void 0,f=r?typeof s.initialDataUpdatedAt=="function"?s.initialDataUpdatedAt():s.initialDataUpdatedAt:0;return{data:i,dataUpdateCount:0,dataUpdatedAt:r?f??Date.now():0,error:null,errorUpdateCount:0,errorUpdatedAt:0,fetchFailureCount:0,fetchFailureReason:null,fetchMeta:null,isInvalidated:!1,status:r?"success":"pending",fetchStatus:"idle"}}var ye,ft,Zu,ie,Ba,qn,Tl,ua,Ku,Hn,Qn,Ya,La,ia,Bn,vt,Yu,Wf,If,Pf,tr,er,lr,ar,cv,Fm,hg=(Fm=class extends Zn{constructor(i,r){super();X(this,vt);X(this,ye);X(this,ft);X(this,Zu);X(this,ie);X(this,Ba);X(this,qn);X(this,Tl);X(this,ua);X(this,Ku);X(this,Hn);X(this,Qn);X(this,Ya);X(this,La);X(this,ia);X(this,Bn,new Set);this.options=r,Q(this,ye,i),Q(this,ua,null),Q(this,Tl,kf()),this.bindMethods(),this.setOptions(r)}bindMethods(){this.refetch=this.refetch.bind(this)}onSubscribe(){this.listeners.size===1&&(m(this,ft).addObserver(this),Um(m(this,ft),this.options)?tt(this,vt,Yu).call(this):this.updateResult(),tt(this,vt,tr).call(this))}onUnsubscribe(){this.hasListeners()||this.destroy()}shouldFetchOnReconnect(){return nr(m(this,ft),this.options,this.options.refetchOnReconnect)}shouldFetchOnWindowFocus(){return nr(m(this,ft),this.options,this.options.refetchOnWindowFocus)}destroy(){this.listeners=new Set,tt(this,vt,er).call(this),tt(this,vt,lr).call(this),m(this,ft).removeObserver(this)}setOptions(i){const r=this.options,f=m(this,ft);if(this.options=m(this,ye).defaultQueryOptions(i),this.options.enabled!==void 0&&typeof this.options.enabled!="boolean"&&typeof this.options.enabled!="function"&&typeof Xe(this.options.enabled,m(this,ft))!="boolean")throw new Error("Expected enabled to be a boolean or a callback that returns a boolean");tt(this,vt,ar).call(this),m(this,ft).setOptions(this.options),r._defaulted&&!ys(this.options,r)&&m(this,ye).getQueryCache().notify({type:"observerOptionsUpdated",query:m(this,ft),observer:this});const v=this.hasListeners();v&&qm(m(this,ft),f,this.options,r)&&tt(this,vt,Yu).call(this),this.updateResult(),v&&(m(this,ft)!==f||Xe(this.options.enabled,m(this,ft))!==Xe(r.enabled,m(this,ft))||da(this.options.staleTime,m(this,ft))!==da(r.staleTime,m(this,ft)))&&tt(this,vt,Wf).call(this);const b=tt(this,vt,If).call(this);v&&(m(this,ft)!==f||Xe(this.options.enabled,m(this,ft))!==Xe(r.enabled,m(this,ft))||b!==m(this,ia))&&tt(this,vt,Pf).call(this,b)}getOptimisticResult(i){const r=m(this,ye).getQueryCache().build(m(this,ye),i),f=this.createResult(r,i);return vg(this,f)&&(Q(this,ie,f),Q(this,qn,this.options),Q(this,Ba,m(this,ft).state)),f}getCurrentResult(){return m(this,ie)}trackResult(i,r){return new Proxy(i,{get:(f,v)=>(this.trackProp(v),r?.(v),v==="promise"&&(this.trackProp("data"),!this.options.experimental_prefetchInRender&&m(this,Tl).status==="pending"&&m(this,Tl).reject(new Error("experimental_prefetchInRender feature flag is not enabled"))),Reflect.get(f,v))})}trackProp(i){m(this,Bn).add(i)}getCurrentQuery(){return m(this,ft)}refetch({...i}={}){return this.fetch({...i})}fetchOptimistic(i){const r=m(this,ye).defaultQueryOptions(i),f=m(this,ye).getQueryCache().build(m(this,ye),r);return f.fetch().then(()=>this.createResult(f,r))}fetch(i){return tt(this,vt,Yu).call(this,{...i,cancelRefetch:i.cancelRefetch??!0}).then(()=>(this.updateResult(),m(this,ie)))}createResult(i,r){const f=m(this,ft),v=this.options,b=m(this,ie),T=m(this,Ba),N=m(this,qn),p=i!==f?i.state:m(this,Zu),{state:U}=i;let R={...U},G=!1,F;if(r._optimisticResults){const Mt=this.hasListeners(),ze=!Mt&&Um(i,r),ae=Mt&&qm(i,f,r,v);(ze||ae)&&(R={...R,...sv(U.data,i.options)}),r._optimisticResults==="isRestoring"&&(R.fetchStatus="idle")}let{error:et,errorUpdatedAt:I,status:V}=R;F=R.data;let rt=!1;if(r.placeholderData!==void 0&&F===void 0&&V==="pending"){let Mt;b?.isPlaceholderData&&r.placeholderData===N?.placeholderData?(Mt=b.data,rt=!0):Mt=typeof r.placeholderData=="function"?r.placeholderData(m(this,Qn)?.state.data,m(this,Qn)):r.placeholderData,Mt!==void 0&&(V="success",F=Ff(b?.data,Mt,r),G=!0)}if(r.select&&F!==void 0&&!rt)if(b&&F===T?.data&&r.select===m(this,Ku))F=m(this,Hn);else try{Q(this,Ku,r.select),F=r.select(F),F=Ff(b?.data,F,r),Q(this,Hn,F),Q(this,ua,null)}catch(Mt){Q(this,ua,Mt)}m(this,ua)&&(et=m(this,ua),F=m(this,Hn),I=Date.now(),V="error");const Dt=R.fetchStatus==="fetching",pt=V==="pending",_t=V==="error",Ct=pt&&Dt,Yt=F!==void 0,zt={status:V,fetchStatus:R.fetchStatus,isPending:pt,isSuccess:V==="success",isError:_t,isInitialLoading:Ct,isLoading:Ct,data:F,dataUpdatedAt:R.dataUpdatedAt,error:et,errorUpdatedAt:I,failureCount:R.fetchFailureCount,failureReason:R.fetchFailureReason,errorUpdateCount:R.errorUpdateCount,isFetched:i.isFetched(),isFetchedAfterMount:R.dataUpdateCount>p.dataUpdateCount||R.errorUpdateCount>p.errorUpdateCount,isFetching:Dt,isRefetching:Dt&&!pt,isLoadingError:_t&&!Yt,isPaused:R.fetchStatus==="paused",isPlaceholderData:G,isRefetchError:_t&&Yt,isStale:mr(i,r),refetch:this.refetch,promise:m(this,Tl),isEnabled:Xe(r.enabled,i)!==!1};if(this.options.experimental_prefetchInRender){const Mt=zt.data!==void 0,ze=zt.status==="error"&&!Mt,ae=ce=>{ze?ce.reject(zt.error):Mt&&ce.resolve(zt.data)},kt=()=>{const ce=Q(this,Tl,zt.promise=kf());ae(ce)},Me=m(this,Tl);switch(Me.status){case"pending":i.queryHash===f.queryHash&&ae(Me);break;case"fulfilled":(ze||zt.data!==Me.value)&&kt();break;case"rejected":(!ze||zt.error!==Me.reason)&&kt();break}}return zt}updateResult(){const i=m(this,ie),r=this.createResult(m(this,ft),this.options);if(Q(this,Ba,m(this,ft).state),Q(this,qn,this.options),m(this,Ba).data!==void 0&&Q(this,Qn,m(this,ft)),ys(r,i))return;Q(this,ie,r);const f=()=>{if(!i)return!0;const{notifyOnChangeProps:v}=this.options,b=typeof v=="function"?v():v;if(b==="all"||!b&&!m(this,Bn).size)return!0;const T=new Set(b??m(this,Bn));return this.options.throwOnError&&T.add("error"),Object.keys(m(this,ie)).some(N=>{const _=N;return m(this,ie)[_]!==i[_]&&T.has(_)})};tt(this,vt,cv).call(this,{listeners:f()})}onQueryUpdate(){this.updateResult(),this.hasListeners()&&tt(this,vt,tr).call(this)}},ye=new WeakMap,ft=new WeakMap,Zu=new WeakMap,ie=new WeakMap,Ba=new WeakMap,qn=new WeakMap,Tl=new WeakMap,ua=new WeakMap,Ku=new WeakMap,Hn=new WeakMap,Qn=new WeakMap,Ya=new WeakMap,La=new WeakMap,ia=new WeakMap,Bn=new WeakMap,vt=new WeakSet,Yu=function(i){tt(this,vt,ar).call(this);let r=m(this,ft).fetch(this.options,i);return i?.throwOnError||(r=r.catch(se)),r},Wf=function(){tt(this,vt,er).call(this);const i=da(this.options.staleTime,m(this,ft));if(Gu.isServer()||m(this,ie).isStale||!wf(i))return;const f=tv(m(this,ie).dataUpdatedAt,i)+1;Q(this,Ya,Ca.setTimeout(()=>{m(this,ie).isStale||this.updateResult()},f))},If=function(){return(typeof this.options.refetchInterval=="function"?this.options.refetchInterval(m(this,ft)):this.options.refetchInterval)??!1},Pf=function(i){tt(this,vt,lr).call(this),Q(this,ia,i),!(Gu.isServer()||Xe(this.options.enabled,m(this,ft))===!1||!wf(m(this,ia))||m(this,ia)===0)&&Q(this,La,Ca.setInterval(()=>{(this.options.refetchIntervalInBackground||rr.isFocused())&&tt(this,vt,Yu).call(this)},m(this,ia)))},tr=function(){tt(this,vt,Wf).call(this),tt(this,vt,Pf).call(this,tt(this,vt,If).call(this))},er=function(){m(this,Ya)&&(Ca.clearTimeout(m(this,Ya)),Q(this,Ya,void 0))},lr=function(){m(this,La)&&(Ca.clearInterval(m(this,La)),Q(this,La,void 0))},ar=function(){const i=m(this,ye).getQueryCache().build(m(this,ye),this.options);if(i===m(this,ft))return;const r=m(this,ft);Q(this,ft,i),Q(this,Zu,i.state),this.hasListeners()&&(r?.removeObserver(this),i.addObserver(this))},cv=function(i){Vt.batch(()=>{i.listeners&&this.listeners.forEach(r=>{r(m(this,ie))}),m(this,ye).getQueryCache().notify({query:m(this,ft),type:"observerResultsUpdated"})})},Fm);function mg(s,i){return Xe(i.enabled,s)!==!1&&s.state.data===void 0&&!(s.state.status==="error"&&i.retryOnMount===!1)}function Um(s,i){return mg(s,i)||s.state.data!==void 0&&nr(s,i,i.refetchOnMount)}function nr(s,i,r){if(Xe(i.enabled,s)!==!1&&da(i.staleTime,s)!=="static"){const f=typeof r=="function"?r(s):r;return f==="always"||f!==!1&&mr(s,i)}return!1}function qm(s,i,r,f){return(s!==i||Xe(f.enabled,s)===!1)&&(!r.suspense||s.state.status!=="error")&&mr(s,r)}function mr(s,i){return Xe(i.enabled,s)!==!1&&s.isStaleByTime(da(i.staleTime,s))}function vg(s,i){return!ys(s.getCurrentResult(),i)}function Hm(s){return{onFetch:(i,r)=>{const f=i.options,v=i.fetchOptions?.meta?.fetchMore?.direction,b=i.state.data?.pages||[],T=i.state.data?.pageParams||[];let N={pages:[],pageParams:[]},_=0;const p=async()=>{let U=!1;const R=et=>{sg(et,()=>i.signal,()=>U=!0)},G=lv(i.options,i.fetchOptions),F=async(et,I,V)=>{if(U)return Promise.reject();if(I==null&&et.pages.length)return Promise.resolve(et);const Dt=(()=>{const Yt={client:i.client,queryKey:i.queryKey,pageParam:I,direction:V?"backward":"forward",meta:i.options.meta};return R(Yt),Yt})(),pt=await G(Dt),{maxPages:_t}=i.options,Ct=V?ig:ug;return{pages:Ct(et.pages,pt,_t),pageParams:Ct(et.pageParams,I,_t)}};if(v&&b.length){const et=v==="backward",I=et?yg:Qm,V={pages:b,pageParams:T},rt=I(f,V);N=await F(V,rt,et)}else{const et=s??b.length;do{const I=_===0?T[0]??f.initialPageParam:Qm(f,N);if(_>0&&I==null)break;N=await F(N,I),_++}while(_i.options.persister?.(p,{client:i.client,queryKey:i.queryKey,meta:i.options.meta,signal:i.signal},r):i.fetchFn=p}}}function Qm(s,{pages:i,pageParams:r}){const f=i.length-1;return i.length>0?s.getNextPageParam(i[f],i,r[f],r):void 0}function yg(s,{pages:i,pageParams:r}){return i.length>0?s.getPreviousPageParam?.(i[0],i,r[0],r):void 0}var Vu,el,le,Ga,ll,ea,km,gg=(km=class extends uv{constructor(i){super();X(this,ll);X(this,Vu);X(this,el);X(this,le);X(this,Ga);Q(this,Vu,i.client),this.mutationId=i.mutationId,Q(this,le,i.mutationCache),Q(this,el,[]),this.state=i.state||fv(),this.setOptions(i.options),this.scheduleGc()}setOptions(i){this.options=i,this.updateGcTime(this.options.gcTime)}get meta(){return this.options.meta}addObserver(i){m(this,el).includes(i)||(m(this,el).push(i),this.clearGcTimeout(),m(this,le).notify({type:"observerAdded",mutation:this,observer:i}))}removeObserver(i){Q(this,el,m(this,el).filter(r=>r!==i)),this.scheduleGc(),m(this,le).notify({type:"observerRemoved",mutation:this,observer:i})}optionalRemove(){m(this,el).length||(this.state.status==="pending"?this.scheduleGc():m(this,le).remove(this))}continue(){return m(this,Ga)?.continue()??this.execute(this.state.variables)}async execute(i){const r=()=>{tt(this,ll,ea).call(this,{type:"continue"})},f={client:m(this,Vu),meta:this.options.meta,mutationKey:this.options.mutationKey};Q(this,Ga,nv({fn:()=>this.options.mutationFn?this.options.mutationFn(i,f):Promise.reject(new Error("No mutationFn found")),onFail:(T,N)=>{tt(this,ll,ea).call(this,{type:"failed",failureCount:T,error:N})},onPause:()=>{tt(this,ll,ea).call(this,{type:"pause"})},onContinue:r,retry:this.options.retry??0,retryDelay:this.options.retryDelay,networkMode:this.options.networkMode,canRun:()=>m(this,le).canRun(this)}));const v=this.state.status==="pending",b=!m(this,Ga).canStart();try{if(v)r();else{tt(this,ll,ea).call(this,{type:"pending",variables:i,isPaused:b}),m(this,le).config.onMutate&&await m(this,le).config.onMutate(i,this,f);const N=await this.options.onMutate?.(i,f);N!==this.state.context&&tt(this,ll,ea).call(this,{type:"pending",context:N,variables:i,isPaused:b})}const T=await m(this,Ga).start();return await m(this,le).config.onSuccess?.(T,i,this.state.context,this,f),await this.options.onSuccess?.(T,i,this.state.context,f),await m(this,le).config.onSettled?.(T,null,this.state.variables,this.state.context,this,f),await this.options.onSettled?.(T,null,i,this.state.context,f),tt(this,ll,ea).call(this,{type:"success",data:T}),T}catch(T){try{await m(this,le).config.onError?.(T,i,this.state.context,this,f)}catch(N){Promise.reject(N)}try{await this.options.onError?.(T,i,this.state.context,f)}catch(N){Promise.reject(N)}try{await m(this,le).config.onSettled?.(void 0,T,this.state.variables,this.state.context,this,f)}catch(N){Promise.reject(N)}try{await this.options.onSettled?.(void 0,T,i,this.state.context,f)}catch(N){Promise.reject(N)}throw tt(this,ll,ea).call(this,{type:"error",error:T}),T}finally{m(this,le).runNext(this)}}},Vu=new WeakMap,el=new WeakMap,le=new WeakMap,Ga=new WeakMap,ll=new WeakSet,ea=function(i){const r=f=>{switch(i.type){case"failed":return{...f,failureCount:i.failureCount,failureReason:i.error};case"pause":return{...f,isPaused:!0};case"continue":return{...f,isPaused:!1};case"pending":return{...f,context:i.context,data:void 0,failureCount:0,failureReason:null,error:null,isPaused:i.isPaused,status:"pending",variables:i.variables,submittedAt:Date.now()};case"success":return{...f,data:i.data,failureCount:0,failureReason:null,error:null,status:"success",isPaused:!1};case"error":return{...f,data:void 0,error:i.error,failureCount:f.failureCount+1,failureReason:i.error,isPaused:!1,status:"error"}}};this.state=r(this.state),Vt.batch(()=>{m(this,el).forEach(f=>{f.onMutationUpdate(i)}),m(this,le).notify({mutation:this,type:"updated",action:i})})},km);function fv(){return{context:void 0,data:void 0,error:null,failureCount:0,failureReason:null,isPaused:!1,status:"idle",variables:void 0,submittedAt:0}}var _l,Fe,wu,$m,pg=($m=class extends Zn{constructor(i={}){super();X(this,_l);X(this,Fe);X(this,wu);this.config=i,Q(this,_l,new Set),Q(this,Fe,new Map),Q(this,wu,0)}build(i,r,f){const v=new gg({client:i,mutationCache:this,mutationId:++os(this,wu)._,options:i.defaultMutationOptions(r),state:f});return this.add(v),v}add(i){m(this,_l).add(i);const r=hs(i);if(typeof r=="string"){const f=m(this,Fe).get(r);f?f.push(i):m(this,Fe).set(r,[i])}this.notify({type:"added",mutation:i})}remove(i){if(m(this,_l).delete(i)){const r=hs(i);if(typeof r=="string"){const f=m(this,Fe).get(r);if(f)if(f.length>1){const v=f.indexOf(i);v!==-1&&f.splice(v,1)}else f[0]===i&&m(this,Fe).delete(r)}}this.notify({type:"removed",mutation:i})}canRun(i){const r=hs(i);if(typeof r=="string"){const v=m(this,Fe).get(r)?.find(b=>b.state.status==="pending");return!v||v===i}else return!0}runNext(i){const r=hs(i);return typeof r=="string"?m(this,Fe).get(r)?.find(v=>v!==i&&v.state.isPaused)?.continue()??Promise.resolve():Promise.resolve()}clear(){Vt.batch(()=>{m(this,_l).forEach(i=>{this.notify({type:"removed",mutation:i})}),m(this,_l).clear(),m(this,Fe).clear()})}getAll(){return Array.from(m(this,_l))}find(i){const r={exact:!0,...i};return this.getAll().find(f=>zm(r,f))}findAll(i={}){return this.getAll().filter(r=>zm(i,r))}notify(i){Vt.batch(()=>{this.listeners.forEach(r=>{r(i)})})}resumePausedMutations(){const i=this.getAll().filter(r=>r.state.isPaused);return Vt.batch(()=>Promise.all(i.map(r=>r.continue().catch(se))))}},_l=new WeakMap,Fe=new WeakMap,wu=new WeakMap,$m);function hs(s){return s.options.scope?.id}var Ol,sa,ge,Nl,Al,ms,ur,Wm,Sg=(Wm=class extends Zn{constructor(r,f){super();X(this,Al);X(this,Ol);X(this,sa);X(this,ge);X(this,Nl);Q(this,Ol,r),this.setOptions(f),this.bindMethods(),tt(this,Al,ms).call(this)}bindMethods(){this.mutate=this.mutate.bind(this),this.reset=this.reset.bind(this)}setOptions(r){const f=this.options;this.options=m(this,Ol).defaultMutationOptions(r),ys(this.options,f)||m(this,Ol).getMutationCache().notify({type:"observerOptionsUpdated",mutation:m(this,ge),observer:this}),f?.mutationKey&&this.options.mutationKey&&Xa(f.mutationKey)!==Xa(this.options.mutationKey)?this.reset():m(this,ge)?.state.status==="pending"&&m(this,ge).setOptions(this.options)}onUnsubscribe(){this.hasListeners()||m(this,ge)?.removeObserver(this)}onMutationUpdate(r){tt(this,Al,ms).call(this),tt(this,Al,ur).call(this,r)}getCurrentResult(){return m(this,sa)}reset(){m(this,ge)?.removeObserver(this),Q(this,ge,void 0),tt(this,Al,ms).call(this),tt(this,Al,ur).call(this)}mutate(r,f){return Q(this,Nl,f),m(this,ge)?.removeObserver(this),Q(this,ge,m(this,Ol).getMutationCache().build(m(this,Ol),this.options)),m(this,ge).addObserver(this),m(this,ge).execute(r)}},Ol=new WeakMap,sa=new WeakMap,ge=new WeakMap,Nl=new WeakMap,Al=new WeakSet,ms=function(){const r=m(this,ge)?.state??fv();Q(this,sa,{...r,isPending:r.status==="pending",isSuccess:r.status==="success",isError:r.status==="error",isIdle:r.status==="idle",mutate:this.mutate,reset:this.reset})},ur=function(r){Vt.batch(()=>{if(m(this,Nl)&&this.hasListeners()){const f=m(this,sa).variables,v=m(this,sa).context,b={client:m(this,Ol),meta:this.options.meta,mutationKey:this.options.mutationKey};if(r?.type==="success"){try{m(this,Nl).onSuccess?.(r.data,f,v,b)}catch(T){Promise.reject(T)}try{m(this,Nl).onSettled?.(r.data,null,f,v,b)}catch(T){Promise.reject(T)}}else if(r?.type==="error"){try{m(this,Nl).onError?.(r.error,f,v,b)}catch(T){Promise.reject(T)}try{m(this,Nl).onSettled?.(void 0,r.error,f,v,b)}catch(T){Promise.reject(T)}}}this.listeners.forEach(f=>{f(m(this,sa))})})},Wm),al,Im,bg=(Im=class extends Zn{constructor(i={}){super();X(this,al);this.config=i,Q(this,al,new Map)}build(i,r,f){const v=r.queryKey,b=r.queryHash??or(v,r);let T=this.get(b);return T||(T=new dg({client:i,queryKey:v,queryHash:b,options:i.defaultQueryOptions(r),state:f,defaultOptions:i.getQueryDefaults(v)}),this.add(T)),T}add(i){m(this,al).has(i.queryHash)||(m(this,al).set(i.queryHash,i),this.notify({type:"added",query:i}))}remove(i){const r=m(this,al).get(i.queryHash);r&&(i.destroy(),r===i&&m(this,al).delete(i.queryHash),this.notify({type:"removed",query:i}))}clear(){Vt.batch(()=>{this.getAll().forEach(i=>{this.remove(i)})})}get(i){return m(this,al).get(i)}getAll(){return[...m(this,al).values()]}find(i){const r={exact:!0,...i};return this.getAll().find(f=>Am(r,f))}findAll(i={}){const r=this.getAll();return Object.keys(i).length>0?r.filter(f=>Am(i,f)):r}notify(i){Vt.batch(()=>{this.listeners.forEach(r=>{r(i)})})}onFocus(){Vt.batch(()=>{this.getAll().forEach(i=>{i.onFocus()})})}onOnline(){Vt.batch(()=>{this.getAll().forEach(i=>{i.onOnline()})})}},al=new WeakMap,Im),qt,ca,fa,Yn,Ln,ra,Gn,Xn,Pm,xg=(Pm=class{constructor(s={}){X(this,qt);X(this,ca);X(this,fa);X(this,Yn);X(this,Ln);X(this,ra);X(this,Gn);X(this,Xn);Q(this,qt,s.queryCache||new bg),Q(this,ca,s.mutationCache||new pg),Q(this,fa,s.defaultOptions||{}),Q(this,Yn,new Map),Q(this,Ln,new Map),Q(this,ra,0)}mount(){os(this,ra)._++,m(this,ra)===1&&(Q(this,Gn,rr.subscribe(async s=>{s&&(await this.resumePausedMutations(),m(this,qt).onFocus())})),Q(this,Xn,gs.subscribe(async s=>{s&&(await this.resumePausedMutations(),m(this,qt).onOnline())})))}unmount(){var s,i;os(this,ra)._--,m(this,ra)===0&&((s=m(this,Gn))==null||s.call(this),Q(this,Gn,void 0),(i=m(this,Xn))==null||i.call(this),Q(this,Xn,void 0))}isFetching(s){return m(this,qt).findAll({...s,fetchStatus:"fetching"}).length}isMutating(s){return m(this,ca).findAll({...s,status:"pending"}).length}getQueryData(s){const i=this.defaultQueryOptions({queryKey:s});return m(this,qt).get(i.queryHash)?.state.data}ensureQueryData(s){const i=this.defaultQueryOptions(s),r=m(this,qt).build(this,i),f=r.state.data;return f===void 0?this.fetchQuery(s):(s.revalidateIfStale&&r.isStaleByTime(da(i.staleTime,r))&&this.prefetchQuery(i),Promise.resolve(f))}getQueriesData(s){return m(this,qt).findAll(s).map(({queryKey:i,state:r})=>{const f=r.data;return[i,f]})}setQueryData(s,i,r){const f=this.defaultQueryOptions({queryKey:s}),b=m(this,qt).get(f.queryHash)?.state.data,T=lg(i,b);if(T!==void 0)return m(this,qt).build(this,f).setData(T,{...r,manual:!0})}setQueriesData(s,i,r){return Vt.batch(()=>m(this,qt).findAll(s).map(({queryKey:f})=>[f,this.setQueryData(f,i,r)]))}getQueryState(s){const i=this.defaultQueryOptions({queryKey:s});return m(this,qt).get(i.queryHash)?.state}removeQueries(s){const i=m(this,qt);Vt.batch(()=>{i.findAll(s).forEach(r=>{i.remove(r)})})}resetQueries(s,i){const r=m(this,qt);return Vt.batch(()=>(r.findAll(s).forEach(f=>{f.reset()}),this.refetchQueries({type:"active",...s},i)))}cancelQueries(s,i={}){const r={revert:!0,...i},f=Vt.batch(()=>m(this,qt).findAll(s).map(v=>v.cancel(r)));return Promise.all(f).then(se).catch(se)}invalidateQueries(s,i={}){return Vt.batch(()=>(m(this,qt).findAll(s).forEach(r=>{r.invalidate()}),s?.refetchType==="none"?Promise.resolve():this.refetchQueries({...s,type:s?.refetchType??s?.type??"active"},i)))}refetchQueries(s,i={}){const r={...i,cancelRefetch:i.cancelRefetch??!0},f=Vt.batch(()=>m(this,qt).findAll(s).filter(v=>!v.isDisabled()&&!v.isStatic()).map(v=>{let b=v.fetch(void 0,r);return r.throwOnError||(b=b.catch(se)),v.state.fetchStatus==="paused"?Promise.resolve():b}));return Promise.all(f).then(se)}fetchQuery(s){const i=this.defaultQueryOptions(s);i.retry===void 0&&(i.retry=!1);const r=m(this,qt).build(this,i);return r.isStaleByTime(da(i.staleTime,r))?r.fetch(i):Promise.resolve(r.state.data)}prefetchQuery(s){return this.fetchQuery(s).then(se).catch(se)}fetchInfiniteQuery(s){return s.behavior=Hm(s.pages),this.fetchQuery(s)}prefetchInfiniteQuery(s){return this.fetchInfiniteQuery(s).then(se).catch(se)}ensureInfiniteQueryData(s){return s.behavior=Hm(s.pages),this.ensureQueryData(s)}resumePausedMutations(){return gs.isOnline()?m(this,ca).resumePausedMutations():Promise.resolve()}getQueryCache(){return m(this,qt)}getMutationCache(){return m(this,ca)}getDefaultOptions(){return m(this,fa)}setDefaultOptions(s){Q(this,fa,s)}setQueryDefaults(s,i){m(this,Yn).set(Xa(s),{queryKey:s,defaultOptions:i})}getQueryDefaults(s){const i=[...m(this,Yn).values()],r={};return i.forEach(f=>{Lu(s,f.queryKey)&&Object.assign(r,f.defaultOptions)}),r}setMutationDefaults(s,i){m(this,Ln).set(Xa(s),{mutationKey:s,defaultOptions:i})}getMutationDefaults(s){const i=[...m(this,Ln).values()],r={};return i.forEach(f=>{Lu(s,f.mutationKey)&&Object.assign(r,f.defaultOptions)}),r}defaultQueryOptions(s){if(s._defaulted)return s;const i={...m(this,fa).queries,...this.getQueryDefaults(s.queryKey),...s,_defaulted:!0};return i.queryHash||(i.queryHash=or(i.queryKey,i)),i.refetchOnReconnect===void 0&&(i.refetchOnReconnect=i.networkMode!=="always"),i.throwOnError===void 0&&(i.throwOnError=!!i.suspense),!i.networkMode&&i.persister&&(i.networkMode="offlineFirst"),i.queryFn===dr&&(i.enabled=!1),i}defaultMutationOptions(s){return s?._defaulted?s:{...m(this,fa).mutations,...s?.mutationKey&&this.getMutationDefaults(s.mutationKey),...s,_defaulted:!0}}clear(){m(this,qt).clear(),m(this,ca).clear()}},qt=new WeakMap,ca=new WeakMap,fa=new WeakMap,Yn=new WeakMap,Ln=new WeakMap,ra=new WeakMap,Gn=new WeakMap,Xn=new WeakMap,Pm),rv=w.createContext(void 0),nl=s=>{const i=w.useContext(rv);if(!i)throw new Error("No QueryClient set, use QueryClientProvider to set one");return i},jg=({client:s,children:i})=>(w.useEffect(()=>(s.mount(),()=>{s.unmount()}),[s]),o.jsx(rv.Provider,{value:s,children:i})),ov=w.createContext(!1),Eg=()=>w.useContext(ov);ov.Provider;function Tg(){let s=!1;return{clearReset:()=>{s=!1},reset:()=>{s=!0},isReset:()=>s}}var _g=w.createContext(Tg()),Og=()=>w.useContext(_g),Ng=(s,i,r)=>{const f=r?.state.error&&typeof s.throwOnError=="function"?hr(s.throwOnError,[r.state.error,r]):s.throwOnError;(s.suspense||s.experimental_prefetchInRender||f)&&(i.isReset()||(s.retryOnMount=!1))},Ag=s=>{w.useEffect(()=>{s.clearReset()},[s])},zg=({result:s,errorResetBoundary:i,throwOnError:r,query:f,suspense:v})=>s.isError&&!i.isReset()&&!s.isFetching&&f&&(v&&s.data===void 0||hr(r,[s.error,f])),Mg=s=>{if(s.suspense){const r=v=>v==="static"?v:Math.max(v??1e3,1e3),f=s.staleTime;s.staleTime=typeof f=="function"?(...v)=>r(f(...v)):r(f),typeof s.gcTime=="number"&&(s.gcTime=Math.max(s.gcTime,1e3))}},Dg=(s,i)=>s.isLoading&&s.isFetching&&!i,Cg=(s,i)=>s?.suspense&&i.isPending,Bm=(s,i,r)=>i.fetchOptimistic(s).catch(()=>{r.clearReset()});function Rg(s,i,r){const f=Eg(),v=Og(),b=nl(),T=b.defaultQueryOptions(s);b.getDefaultOptions().queries?._experimental_beforeQuery?.(T);const N=b.getQueryCache().get(T.queryHash);T._optimisticResults=f?"isRestoring":"optimistic",Mg(T),Ng(T,v,N),Ag(v);const _=!b.getQueryCache().get(T.queryHash),[p]=w.useState(()=>new i(b,T)),U=p.getOptimisticResult(T),R=!f&&s.subscribed!==!1;if(w.useSyncExternalStore(w.useCallback(G=>{const F=R?p.subscribe(Vt.batchCalls(G)):se;return p.updateResult(),F},[p,R]),()=>p.getCurrentResult(),()=>p.getCurrentResult()),w.useEffect(()=>{p.setOptions(T)},[T,p]),Cg(T,U))throw Bm(T,p,v);if(zg({result:U,errorResetBoundary:v,throwOnError:T.throwOnError,query:N,suspense:T.suspense}))throw U.error;return b.getDefaultOptions().queries?._experimental_afterQuery?.(T,U),T.experimental_prefetchInRender&&!Gu.isServer()&&Dg(U,f)&&(_?Bm(T,p,v):N?.promise)?.catch(se).finally(()=>{p.updateResult()}),T.notifyOnChangeProps?U:p.trackResult(U)}function ke(s,i){return Rg(s,hg)}function Za(s,i){const r=nl(),[f]=w.useState(()=>new Sg(r,s));w.useEffect(()=>{f.setOptions(s)},[f,s]);const v=w.useSyncExternalStore(w.useCallback(T=>f.subscribe(Vt.batchCalls(T)),[f]),()=>f.getCurrentResult(),()=>f.getCurrentResult()),b=w.useCallback((T,N)=>{f.mutate(T,N).catch(se)},[f]);if(v.error&&hr(f.options.throwOnError,[v.error]))throw v.error;return{...v,mutate:b,mutateAsync:v.mutate}}const Ym=s=>{let i;const r=new Set,f=(p,U)=>{const R=typeof p=="function"?p(i):p;if(!Object.is(R,i)){const G=i;i=U??(typeof R!="object"||R===null)?R:Object.assign({},i,R),r.forEach(F=>F(i,G))}},v=()=>i,N={setState:f,getState:v,getInitialState:()=>_,subscribe:p=>(r.add(p),()=>r.delete(p))},_=i=s(f,v,N);return N},Ug=(s=>s?Ym(s):Ym),qg=s=>s;function Hg(s,i=qg){const r=ds.useSyncExternalStore(s.subscribe,ds.useCallback(()=>i(s.getState()),[s,i]),ds.useCallback(()=>i(s.getInitialState()),[s,i]));return ds.useDebugValue(r),r}const Lm=s=>{const i=Ug(s),r=f=>Hg(i,f);return Object.assign(r,i),r},dv=(s=>s?Lm(s):Lm),Ka=dv(s=>({token:sessionStorage.getItem("admin_token"),login(i){sessionStorage.setItem("admin_token",i),s({token:i})},logout(){sessionStorage.removeItem("admin_token"),s({token:null})}})),oa=dv(s=>({status:"disconnected",lastEvent:null,setStatus:i=>s({status:i}),pushEvent:i=>s({lastEvent:i})})),Qg=3e4,Bg=1e3;let Ze=null,ir=null,Vf=0,ps=!1;function Yg(){ps=!1,!(Ze&&(Ze.readyState===WebSocket.OPEN||Ze.readyState===WebSocket.CONNECTING))&&hv()}function Lg(){ps=!0,ir&&clearTimeout(ir),Ze?.close(),Ze=null,oa.getState().setStatus("disconnected")}function hv(){if(ps)return;const s=Ka.getState().token;if(!s)return;oa.getState().setStatus("connecting");const i=location.protocol==="https:"?"wss:":"ws:";Ze=new WebSocket(`${i}//${location.host}/admin/ws`),Ze.onopen=()=>{Ze.send(JSON.stringify({token:s}))},Ze.onmessage=r=>{let f;try{f=JSON.parse(r.data)}catch{return}if(f!==null&&typeof f=="object"&&"status"in f&&f.status==="authenticated"){Vf=0,oa.getState().setStatus("connected");return}f!==null&&typeof f=="object"&&"type"in f&&oa.getState().pushEvent(f)},Ze.onclose=()=>{if(ps)return;oa.getState().setStatus("disconnected");const r=Math.min(Bg*2**Vf,Qg);Vf++,ir=setTimeout(hv,r)},Ze.onerror=()=>{Ze?.close()}}function Gg(){const s=Ka(T=>T.login),[i,r]=w.useState(""),[f,v]=w.useState(!1);async function b(T){T.preventDefault();const N=T.currentTarget.elements.namedItem("token").value.trim();if(N){v(!0),r("");try{if(!(await fetch("/admin/api/metrics",{headers:{Authorization:`Bearer ${N}`}})).ok)throw new Error("Invalid token");s(N)}catch{r("Invalid token")}finally{v(!1)}}}return o.jsx("div",{className:"login-overlay",children:o.jsxs("div",{className:"login-card",children:[o.jsxs("div",{className:"login-title",children:[o.jsx("span",{className:"prompt",children:"> "}),"proxy admin"]}),o.jsxs("form",{onSubmit:b,children:[o.jsx("input",{type:"password",name:"token",placeholder:"Admin token",autoComplete:"current-password",autoFocus:!0}),o.jsx("button",{type:"submit",className:"btn btn-primary",disabled:f,children:f?"Signing in…":"Sign in"})]}),o.jsx("div",{className:"login-error",children:i})]})})}const Xg=[{id:"dashboard",label:"Dashboard"},{id:"requests",label:"Request Log"},{id:"settings",label:"Settings"},{id:"backends",label:"Backends"},{id:"keys",label:"Access Control"},{id:"models",label:"Models"},{id:"audit",label:"Audit"},{id:"traffic",label:"Traffic"},{id:"uptime",label:"Uptime"}];function Zg({activeTab:s,onTabChange:i}){const r=Ka(v=>v.logout),f=oa(v=>v.status);return o.jsxs("nav",{className:"nav",children:[o.jsx("div",{className:"nav-brand",children:"anyllm"}),Xg.map(v=>o.jsx("div",{className:`nav-item${s===v.id?" active":""}`,onClick:()=>i(v.id),children:v.label},v.id)),o.jsxs("div",{className:"nav-right",children:[o.jsx("span",{className:`ws-status ${f==="connected"?"connected":"disconnected"}`,children:f==="connected"?"Live":"Offline"}),o.jsx("button",{className:"btn btn-secondary btn-sm",style:{marginLeft:12},onClick:r,children:"Sign out"})]})]})}function sr(){return Ka.getState().token??""}async function $e(s,i){const r=await fetch(s,{...i,headers:{Authorization:`Bearer ${sr()}`}});if(r.status===401)throw Ka.getState().logout(),new Error("Unauthorized");if(!r.ok){const f=await r.text().catch(()=>r.statusText);throw new Error(f||`HTTP ${r.status}`)}return r.json()}async function Va(s,i,r){const f=await fetch("/admin/csrf-token",{headers:{Authorization:`Bearer ${sr()}`}});if(!f.ok)throw new Error("Failed to fetch CSRF token");const{token:v}=await f.json(),b=await fetch(i,{method:s,headers:{Authorization:`Bearer ${sr()}`,"X-CSRF-Token":v,...r!==void 0?{"Content-Type":"application/json"}:{}},body:r!==void 0?JSON.stringify(r):void 0});if(b.status===401)throw Ka.getState().logout(),new Error("Unauthorized");if(!b.ok){const T=await b.text().catch(()=>b.statusText);throw new Error(T||`HTTP ${b.status}`)}if(!(b.status===204||b.headers.get("content-length")==="0"))return b.json()}function Kg(){return ke({queryKey:["metrics"],queryFn:()=>$e("/admin/api/metrics"),refetchInterval:5e3})}function Vg(s,i){return ke({queryKey:["observability",s,i],queryFn:()=>$e(`/admin/api/observability/overview?window=${s}&backend=${encodeURIComponent(i)}`),refetchInterval:3e4})}function wg(s){const i=new URLSearchParams;return i.set("page",String(s.page)),i.set("page_size",String(s.page_size)),s.backend&&i.set("backend",s.backend),s.status&&i.set("status",s.status),s.since&&i.set("since",s.since),s.until&&i.set("until",s.until),s.model&&i.set("model",s.model),ke({queryKey:["requests",s],queryFn:()=>$e(`/admin/api/requests?${i}`),staleTime:1/0})}function Jg(){return ke({queryKey:["keys"],queryFn:()=>$e("/admin/api/keys"),staleTime:1/0})}function Fg(){const s=nl();return Za({mutationFn:i=>Va("POST","/admin/api/keys",i),onSuccess:()=>{s.invalidateQueries({queryKey:["keys"]})}})}function kg(){const s=nl();return Za({mutationFn:({id:i,body:r})=>Va("PUT",`/admin/api/keys/${i}`,r),onSuccess:()=>{s.invalidateQueries({queryKey:["keys"]})}})}function $g(){const s=nl();return Za({mutationFn:i=>Va("DELETE",`/admin/api/keys/${i}`),onSuccess:()=>{s.invalidateQueries({queryKey:["keys"]})}})}function Wg(){return ke({queryKey:["backends"],queryFn:()=>$e("/admin/api/backends"),staleTime:1/0})}function Ig(){return ke({queryKey:["config"],queryFn:()=>$e("/admin/api/config"),staleTime:1/0})}function Pg(){const s=nl();return Za({mutationFn:i=>Va("POST","/admin/api/config",i),onSuccess:()=>{s.invalidateQueries({queryKey:["config"]})}})}function tp(){const s=nl();return Za({mutationFn:i=>Va("DELETE",`/admin/api/config/${encodeURIComponent(i)}`),onSuccess:()=>{s.invalidateQueries({queryKey:["config"]})}})}function ep(){return ke({queryKey:["env"],queryFn:()=>$e("/admin/api/env"),staleTime:1/0})}function lp(){return ke({queryKey:["models"],queryFn:()=>$e("/admin/api/models"),staleTime:1/0})}function ap(){const s=nl();return Za({mutationFn:i=>Va("POST","/admin/api/models",i),onSuccess:()=>{s.invalidateQueries({queryKey:["models"]})}})}function np(){const s=nl();return Za({mutationFn:i=>Va("DELETE",`/admin/api/models/${encodeURIComponent(i)}`),onSuccess:()=>{s.invalidateQueries({queryKey:["models"]})}})}function up(s){return ke({queryKey:["audit",s],queryFn:()=>$e(`/admin/api/audit?page=${s.page}&page_size=${s.page_size}`),staleTime:1/0})}function ip(s){return ke({queryKey:["traffic",s],queryFn:()=>$e(`/admin/api/traffic?window=${s}`),refetchInterval:3e4})}function sp(){return ke({queryKey:["uptime"],queryFn:()=>$e("/admin/api/uptime"),refetchInterval:3e4})}function cp({req:s}){return o.jsxs("div",{className:"feed-detail",children:[o.jsx("span",{className:"label",children:"Request ID"}),o.jsx("span",{className:"val",children:s.request_id}),o.jsx("span",{className:"label",children:"Backend"}),o.jsx("span",{className:"val",children:s.backend}),o.jsx("span",{className:"label",children:"Model (req)"}),o.jsx("span",{className:"val",children:s.model_requested??"—"}),o.jsx("span",{className:"label",children:"Model (mapped)"}),o.jsx("span",{className:"val",children:s.model_mapped??"—"}),o.jsx("span",{className:"label",children:"Latency"}),o.jsxs("span",{className:"val",children:[s.latency_ms," ms"]}),o.jsx("span",{className:"label",children:"Tokens in/out"}),o.jsxs("span",{className:"val",children:[s.input_tokens??"—"," / ",s.output_tokens??"—"]}),o.jsx("span",{className:"label",children:"Cost"}),o.jsx("span",{className:"val",children:s.cost_usd!=null?`$${s.cost_usd.toFixed(6)}`:"—"}),s.error_message&&o.jsx("div",{className:"error-msg",children:s.error_message})]})}function fp(s){return s<300?"status-2xx":s<500?"status-4xx":"status-5xx"}function mv({req:s}){const[i,r]=w.useState(!1);return o.jsxs(o.Fragment,{children:[o.jsxs("div",{className:"feed-row",onClick:()=>r(f=>!f),children:[o.jsx("span",{className:"mono dim",children:s.timestamp.slice(11,19)}),o.jsx("span",{className:`mono ${fp(s.status_code)}`,children:s.status_code}),o.jsxs("span",{className:"mono",children:[s.latency_ms,"ms"]}),o.jsxs("span",{className:"mono",style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:[s.model_requested??s.backend,s.is_streaming&&o.jsx("span",{className:"streaming-badge",children:"stream"})]}),o.jsx("span",{className:"mono dim",children:s.input_tokens??"—"}),o.jsx("span",{className:"mono dim",children:s.output_tokens??"—"}),o.jsx("span",{className:"mono dim",children:s.cost_usd!=null?`$${s.cost_usd.toFixed(5)}`:"—"})]}),i&&o.jsx(cp,{req:s})]})}const rp=200;function op({initial:s}){const[i,r]=w.useState(s??[]),[f,v]=w.useState(!1),b=w.useRef(f);b.current=f;const T=oa(N=>N.lastEvent);return w.useEffect(()=>{!T||T.type!=="request_completed"||b.current||r(N=>[T.data,...N].slice(0,rp))},[T]),o.jsxs("div",{children:[o.jsxs("div",{className:"section-header",children:[o.jsx("span",{className:"section-label",children:"Live Feed"}),o.jsx("button",{className:`btn btn-sm ${f?"btn-primary":"btn-secondary"}`,onClick:()=>v(N=>!N),children:f?"Resume":"Pause"})]}),o.jsxs("div",{className:"feed",children:[o.jsxs("div",{className:"feed-header",children:[o.jsx("span",{children:"Time"}),o.jsx("span",{children:"Status"}),o.jsx("span",{children:"Latency"}),o.jsx("span",{children:"Model"}),o.jsx("span",{children:"In"}),o.jsx("span",{children:"Out"}),o.jsx("span",{children:"Cost"})]}),i.length===0?o.jsx("div",{className:"empty",children:"Waiting for requests…"}):i.map(N=>o.jsx(mv,{req:N},N.request_id))]})]})}function vs({series:s,labels:i,gridColor:r="var(--border-sub)",height:f=130}){const b=f,T={top:8,right:8,bottom:0,left:0},N=600-T.left-T.right,_=b-T.top-T.bottom,p=s.flatMap(V=>V.data),U=Math.max(...p,1),R=Math.max(...s.map(V=>V.data.length),2);function G(V){return T.left+V/(R-1)*N}function F(V){return T.top+_-V/U*_}const et=4,I=Array.from({length:et},(V,rt)=>T.top+rt/(et-1)*_);return o.jsxs("svg",{className:"chart-svg",viewBox:`0 0 600 ${b}`,preserveAspectRatio:"none",style:{height:f},children:[I.map((V,rt)=>o.jsx("line",{className:"chart-grid-line",x1:T.left,y1:V,x2:600-T.right,y2:V,stroke:r},rt)),s.map((V,rt)=>{if(V.data.length<2)return null;const Dt=V.data.map((_t,Ct)=>`${G(Ct)},${F(_t)}`).join(" "),pt=[`${G(0)},${T.top+_}`,...V.data.map((_t,Ct)=>`${G(Ct)},${F(_t)}`),`${G(V.data.length-1)},${T.top+_}`].join(" ");return o.jsxs("g",{children:[o.jsx("polygon",{className:"chart-area",points:pt,fill:V.color}),o.jsx("polyline",{className:`chart-line${V.secondary?" secondary":""}`,points:Dt,stroke:V.color})]},rt)})]})}function zl({loading:s,error:i,empty:r,message:f}){return s?o.jsx("div",{className:"empty",children:"Loading…"}):i?o.jsx("div",{className:"empty error",children:i}):r?o.jsx("div",{className:"empty",children:f??"No data"}):null}function dp(){const[s,i]=w.useState(6),[r,f]=w.useState(""),{data:v,isLoading:b,error:T}=Vg(s,r),N=v?[{label:"Requests",color:"#e8a030",data:v.series.map(U=>U.requests)},{label:"Errors",color:"#e05252",data:v.series.map(U=>U.errors),secondary:!0}]:[],_=v?[{label:"Input",color:"#4caf6e",data:v.series.map(U=>U.input_tokens)},{label:"Output",color:"#6eb5c0",data:v.series.map(U=>U.output_tokens),secondary:!0}]:[],p=v?[{label:"Cost",color:"#c87dd4",data:v.series.map(U=>U.cost_usd)}]:[];return o.jsxs("div",{children:[o.jsxs("div",{className:"operator-controls",children:[o.jsx("span",{className:"section-label",style:{marginBottom:0},children:"Operator View"}),o.jsxs("div",{className:"form-row",style:{flexWrap:"wrap",gap:6,marginTop:0},children:[o.jsxs("select",{value:s,onChange:U=>i(Number(U.target.value)),children:[o.jsx("option",{value:1,children:"Last 1 hour"}),o.jsx("option",{value:6,children:"Last 6 hours"}),o.jsx("option",{value:24,children:"Last 24 hours"})]}),o.jsx("select",{value:r,onChange:U=>f(U.target.value),children:o.jsx("option",{value:"",children:"All backends"})})]})]}),v&&o.jsxs("div",{className:"stats-row",children:[o.jsxs("div",{className:"stat",children:[o.jsx("div",{className:"stat-label",children:"Input Tokens"}),o.jsx("div",{className:"stat-value",children:v.total_input_tokens.toLocaleString()})]}),o.jsxs("div",{className:"stat",children:[o.jsx("div",{className:"stat-label",children:"Output Tokens"}),o.jsx("div",{className:"stat-value",children:v.total_output_tokens.toLocaleString()})]}),o.jsxs("div",{className:"stat",children:[o.jsx("div",{className:"stat-label",children:"Window Failures"}),o.jsx("div",{className:"stat-value",children:v.total_errors})]}),o.jsxs("div",{className:"stat",children:[o.jsx("div",{className:"stat-label",children:"Window Cost"}),o.jsxs("div",{className:"stat-value",children:["$",v.total_cost_usd.toFixed(2)]})]})]}),o.jsx(zl,{loading:b,error:T?.message}),v&&o.jsxs("div",{className:"operator-grid",children:[o.jsxs("div",{className:"chart-card",children:[o.jsxs("div",{className:"chart-header",children:[o.jsxs("div",{children:[o.jsx("div",{className:"chart-title",children:"Request Volume"}),o.jsx("div",{className:"chart-subtitle",children:"Rolling request count and errors"})]}),o.jsx("div",{className:"chart-value",children:v.total_requests})]}),o.jsx(vs,{series:N})]}),o.jsxs("div",{className:"chart-card",children:[o.jsxs("div",{className:"chart-header",children:[o.jsxs("div",{children:[o.jsx("div",{className:"chart-title",children:"Tokens"}),o.jsx("div",{className:"chart-subtitle",children:"Input and output usage"})]}),o.jsx("div",{className:"chart-value",children:(v.total_input_tokens+v.total_output_tokens).toLocaleString()})]}),o.jsx(vs,{series:_})]}),o.jsxs("div",{className:"chart-card",children:[o.jsxs("div",{className:"chart-header",children:[o.jsxs("div",{children:[o.jsx("div",{className:"chart-title",children:"Estimated Cost"}),o.jsx("div",{className:"chart-subtitle",children:"USD by minute bucket"})]}),o.jsxs("div",{className:"chart-value",children:["$",v.total_cost_usd.toFixed(4)]})]}),o.jsx(vs,{series:p})]})]})]})}function hp(){const{data:s}=Kg();return o.jsxs("div",{children:[o.jsxs("div",{className:"stats-row",children:[o.jsxs("div",{className:"stat",children:[o.jsx("div",{className:"stat-label",children:"Requests/min"}),o.jsx("div",{className:"stat-value",children:s?s.requests_per_minute.toFixed(1):"—"})]}),o.jsxs("div",{className:"stat",children:[o.jsx("div",{className:"stat-label",children:"Error Rate"}),o.jsx("div",{className:"stat-value",children:s?`${(s.error_rate*100).toFixed(1)}%`:"—"})]}),o.jsxs("div",{className:"stat",children:[o.jsx("div",{className:"stat-label",children:"P50 Latency"}),o.jsx("div",{className:"stat-value",children:s?`${s.p50_latency_ms}ms`:"—"})]}),o.jsxs("div",{className:"stat",children:[o.jsx("div",{className:"stat-label",children:"P95 Latency"}),o.jsx("div",{className:"stat-value",children:s?`${s.p95_latency_ms}ms`:"—"})]}),o.jsxs("div",{className:"stat",children:[o.jsx("div",{className:"stat-label",children:"Total Requests"}),o.jsx("div",{className:"stat-value",children:s?s.total_requests.toLocaleString():"0"})]})]}),o.jsxs("div",{className:"stats-row",style:{marginBottom:16},children:[o.jsxs("div",{className:"stat",children:[o.jsx("div",{className:"stat-label",children:"Streams Started"}),o.jsx("div",{className:"stat-value",children:s?.streams_started??0})]}),o.jsxs("div",{className:"stat",children:[o.jsx("div",{className:"stat-label",children:"Completed"}),o.jsx("div",{className:"stat-value ok",children:s?.streams_completed??0})]}),o.jsxs("div",{className:"stat",children:[o.jsx("div",{className:"stat-label",children:"Failed"}),o.jsx("div",{className:"stat-value",style:{color:"var(--err)"},children:s?.streams_failed??0})]}),o.jsxs("div",{className:"stat",children:[o.jsx("div",{className:"stat-label",children:"Client Disconnects"}),o.jsx("div",{className:"stat-value",style:{color:"var(--warn)"},children:s?.streams_client_disconnected??0})]})]}),o.jsx(dp,{}),o.jsx("div",{style:{marginTop:16},children:o.jsx(op,{})})]})}function vv({page:s,hasMore:i,onPrev:r,onNext:f}){return o.jsxs("div",{className:"pagination",children:[o.jsx("button",{className:"btn btn-secondary btn-sm",onClick:r,disabled:s<=1,children:"Prev"}),o.jsxs("span",{children:["Page ",s]}),o.jsx("button",{className:"btn btn-secondary btn-sm",onClick:f,disabled:!i,children:"Next"})]})}function mp(){const[s,i]=w.useState(1),[r,f]=w.useState(""),[v,b]=w.useState(""),{data:T,isLoading:N,error:_}=wg({page:s,page_size:50,backend:r,status:v});return o.jsxs("div",{children:[o.jsxs("div",{className:"section-header",children:[o.jsx("span",{className:"section-label",children:"Request Log"}),o.jsxs("div",{className:"form-row",style:{marginTop:0},children:[o.jsx("select",{value:r,onChange:p=>{f(p.target.value),i(1)},children:o.jsx("option",{value:"",children:"All backends"})}),o.jsxs("select",{value:v,onChange:p=>{b(p.target.value),i(1)},children:[o.jsx("option",{value:"",children:"All status"}),o.jsx("option",{value:"ok",children:"2xx"}),o.jsx("option",{value:"error",children:"4xx/5xx"})]})]})]}),o.jsx(zl,{loading:N,error:_?.message}),T&&o.jsxs(o.Fragment,{children:[o.jsxs("div",{className:"feed",children:[o.jsxs("div",{className:"feed-header",children:[o.jsx("span",{children:"Time"}),o.jsx("span",{children:"Status"}),o.jsx("span",{children:"Latency"}),o.jsx("span",{children:"Model"}),o.jsx("span",{children:"In"}),o.jsx("span",{children:"Out"}),o.jsx("span",{children:"Cost"})]}),T.requests.map(p=>o.jsx(mv,{req:p},p.request_id))]}),o.jsx(vv,{page:s,hasMore:T.has_more,onPrev:()=>i(p=>Math.max(1,p-1)),onNext:()=>i(p=>p+1)})]})]})}function vp(){const{data:s,isLoading:i,error:r}=Ig(),{data:f}=ep(),v=Pg(),b=tp(),[T,N]=w.useState({});function _(p,U){v.mutate({[p]:T[p]??U})}return o.jsxs("div",{children:[o.jsx(zl,{loading:i,error:r?.message}),s&&o.jsx("div",{children:s.entries.map(p=>o.jsxs("div",{className:"form-group",children:[o.jsx("div",{className:"form-label",children:p.key}),o.jsxs("div",{className:"form-row",children:[o.jsx("input",{value:T[p.key]??p.value,onChange:U=>N(R=>({...R,[p.key]:U.target.value}))}),o.jsx("button",{className:"btn btn-primary btn-sm",onClick:()=>_(p.key,p.value),children:"Save"}),o.jsx("button",{className:"btn btn-secondary btn-sm",onClick:()=>b.mutate(p.key),children:"Reset"})]})]},p.key))}),f&&o.jsxs("div",{className:"readonly-section",style:{marginTop:16},children:[o.jsx("div",{className:"section-label",children:"Environment"}),o.jsx("div",{style:{display:"grid",gridTemplateColumns:"220px 1fr",gap:"4px 12px",marginTop:8,fontSize:12},children:Object.entries(f).map(([p,U])=>o.jsxs(w.Fragment,{children:[o.jsx("span",{className:"dim",children:p}),o.jsx("span",{className:"mono",children:U})]},p))})]})]})}const yp={ok:"var(--ok)",warn:"var(--warn)",err:"var(--err)",dim:"var(--text-3)"};function yv({status:s,pulse:i}){return o.jsx("span",{style:{display:"inline-block",width:7,height:7,borderRadius:"50%",background:yp[s],animation:i?"pulse 2s ease-in-out infinite":void 0,verticalAlign:"middle",marginRight:6}})}function gp(){const{data:s,isLoading:i,error:r}=Wg();return o.jsxs("div",{children:[o.jsx(zl,{loading:i,error:r?.message,empty:s?.length===0}),o.jsx("div",{className:"backend-cards",children:s?.map(f=>o.jsxs("div",{className:"card",children:[o.jsxs("div",{className:"card-header",children:[o.jsx("span",{className:"card-name",children:f.name}),o.jsx(yv,{status:f.status==="ok"?"ok":"err",pulse:f.status==="ok"})]}),o.jsxs("div",{className:"card-body",children:[o.jsx("div",{className:"mono",children:f.model}),o.jsxs("div",{style:{marginTop:6,display:"grid",gridTemplateColumns:"1fr 1fr",gap:4},children:[o.jsx("span",{className:"dim",children:"Requests"}),o.jsx("span",{className:"mono",children:f.requests_total}),o.jsx("span",{className:"dim",children:"P50"}),o.jsxs("span",{className:"mono",children:[f.p50_ms,"ms"]}),o.jsx("span",{className:"dim",children:"P95"}),o.jsxs("span",{className:"mono",children:[f.p95_ms,"ms"]}),o.jsx("span",{className:"dim",children:"Errors"}),o.jsx("span",{className:"mono",style:{color:f.requests_err>0?"var(--err)":void 0},children:f.requests_err})]})]})]},f.name))})]})}function pp({variant:s}){return o.jsx("span",{className:`badge badge-${s}`,children:s})}function Sp({spent:s,limit:i}){if(!i)return o.jsx("span",{className:"dim",children:"—"});const r=Math.min(s/i*100,100),f=r>=95?"danger":r>=80?"warn":"";return o.jsxs("div",{children:[o.jsx("div",{className:"budget-bar",children:o.jsx("div",{className:`budget-bar-fill${f?` ${f}`:""}`,style:{width:`${r}%`}})}),o.jsxs("span",{className:"dim",style:{fontSize:10},children:["$",s.toFixed(4)," / $",i.toFixed(2)]})]})}function bp({onCreated:s}){const i=Fg(),[r,f]=w.useState(""),[v,b]=w.useState(""),[T,N]=w.useState("");function _(){i.mutate({description:r||null,spend_limit:v?Number(v):null,rpm_limit:T?Number(T):null},{onSuccess:p=>{f(""),b(""),N(""),s(p.key)}})}return o.jsxs("div",{className:"form-group",children:[o.jsx("div",{className:"form-label",children:"Create Key"}),o.jsx("form",{onSubmit:p=>{p.preventDefault(),_()},children:o.jsxs("div",{className:"form-row",style:{flexWrap:"wrap"},children:[o.jsx("input",{placeholder:"Description",value:r,onChange:p=>f(p.target.value)}),o.jsx("input",{placeholder:"Spend limit USD",type:"number",value:v,onChange:p=>b(p.target.value),style:{width:120}}),o.jsx("input",{placeholder:"RPM limit",type:"number",value:T,onChange:p=>N(p.target.value),style:{width:100}}),o.jsx("button",{type:"submit",className:"btn btn-primary",disabled:i.isPending,children:i.isPending?"Creating…":"Create"})]})})]})}function xp({vk:s,onClose:i}){const r=kg(),f=$g(),[v,b]=w.useState(s.description??""),[T,N]=w.useState(s.spend_limit?.toString()??""),[_,p]=w.useState(s.rpm_limit?.toString()??"");function U(){r.mutate({id:s.id,body:{description:v||null,spend_limit:T?Number(T):null,rpm_limit:_?Number(_):null}},{onSuccess:i})}function R(){confirm("Revoke this key?")&&f.mutate(s.id,{onSuccess:i})}return o.jsx("div",{className:"modal-backdrop",onClick:i,children:o.jsxs("div",{className:"modal",onClick:G=>G.stopPropagation(),children:[o.jsxs("div",{className:"modal-title",children:["Edit Key — ",s.key_prefix,"…"]}),o.jsxs("div",{className:"form-group",children:[o.jsx("div",{className:"form-label",children:"Description"}),o.jsx("input",{value:v,onChange:G=>b(G.target.value),style:{width:"100%"}})]}),o.jsxs("div",{className:"form-group",children:[o.jsx("div",{className:"form-label",children:"Spend limit (USD)"}),o.jsx("input",{value:T,onChange:G=>N(G.target.value),type:"number",min:"0",step:"0.01"})]}),o.jsxs("div",{className:"form-group",children:[o.jsx("div",{className:"form-label",children:"RPM limit"}),o.jsx("input",{value:_,onChange:G=>p(G.target.value),type:"number",min:"0"})]}),o.jsxs("div",{className:"form-row",children:[o.jsx("button",{className:"btn btn-primary",onClick:U,children:"Save"}),o.jsx("button",{className:"btn btn-secondary",onClick:i,children:"Cancel"}),o.jsx("button",{className:"btn btn-danger",style:{marginLeft:"auto"},onClick:R,children:"Revoke"})]})]})})}function jp(){const{data:s,isLoading:i,error:r}=Jg(),[f,v]=w.useState(null),[b,T]=w.useState(null);return o.jsxs("div",{children:[o.jsx(bp,{onCreated:v}),f&&o.jsxs("div",{className:"key-result",children:[o.jsx("div",{className:"key-result-label",children:"New key (copy now — not shown again)"}),f]}),o.jsx(zl,{loading:i,error:r?.message,empty:s?.length===0,message:"No keys"}),s&&s.length>0&&o.jsxs("table",{className:"keys-grid",children:[o.jsx("thead",{children:o.jsxs("tr",{children:[o.jsx("th",{children:"Prefix"}),o.jsx("th",{children:"Description"}),o.jsx("th",{children:"Status"}),o.jsx("th",{children:"Spend"}),o.jsx("th",{children:"Requests"}),o.jsx("th",{children:"Created"})]})}),o.jsx("tbody",{children:s.map(N=>o.jsxs("tr",{style:{cursor:"pointer"},onClick:()=>T(N),children:[o.jsxs("td",{className:"mono",children:[N.key_prefix,"…"]}),o.jsx("td",{className:"dim",children:N.description??"—"}),o.jsx("td",{children:o.jsx(pp,{variant:N.status})}),o.jsx("td",{children:o.jsx(Sp,{spent:N.total_spend,limit:N.spend_limit})}),o.jsx("td",{className:"mono",children:N.total_requests.toLocaleString()}),o.jsx("td",{className:"mono dim",children:N.created_at.slice(0,10)})]},N.id))})]}),b&&o.jsx(xp,{vk:b,onClose:()=>T(null)},b.id)]})}function Ep(){const{data:s,isLoading:i,error:r}=lp(),f=ap(),v=np(),[b,T]=w.useState(""),[N,_]=w.useState(""),[p,U]=w.useState("openai");return o.jsxs("div",{children:[o.jsxs("div",{className:"form-group",children:[o.jsx("div",{className:"form-label",children:"Add Model"}),o.jsxs("div",{className:"form-row",style:{flexWrap:"wrap"},children:[o.jsx("input",{placeholder:"Virtual name",value:b,onChange:R=>T(R.target.value)}),o.jsx("input",{placeholder:"Model ID",value:N,onChange:R=>_(R.target.value)}),o.jsxs("select",{value:p,onChange:R=>U(R.target.value),children:[o.jsx("option",{value:"openai",children:"openai"}),o.jsx("option",{value:"anthropic",children:"anthropic"}),o.jsx("option",{value:"gemini",children:"gemini"}),o.jsx("option",{value:"vertex",children:"vertex"}),o.jsx("option",{value:"azure",children:"azure"}),o.jsx("option",{value:"bedrock",children:"bedrock"})]}),o.jsx("button",{className:"btn btn-primary",onClick:()=>f.mutate({name:b,model:N,provider:p}),disabled:!b||!N||f.isPending,children:"Add"})]})]}),o.jsx(zl,{loading:i,error:r?.message}),s&&o.jsxs("table",{className:"route-table",children:[o.jsx("thead",{children:o.jsxs("tr",{children:[o.jsx("th",{children:"Virtual Name"}),o.jsx("th",{children:"Model"}),o.jsx("th",{children:"Provider"}),o.jsx("th",{children:"Strategy"}),o.jsx("th",{})]})}),o.jsx("tbody",{children:s.models.map(R=>o.jsxs("tr",{children:[o.jsx("td",{className:"mono",children:R.name}),o.jsx("td",{className:"mono",children:R.model}),o.jsx("td",{className:"dim",children:R.provider}),o.jsx("td",{className:"dim",children:s.routing_strategy}),o.jsx("td",{children:o.jsx("button",{className:"btn btn-danger btn-sm",onClick:()=>v.mutate(R.name),children:"Remove"})})]},`${R.name}-${R.model}`))})]})]})}function Tp(){const[s,i]=w.useState(1),{data:r,isLoading:f,error:v}=up({page:s,page_size:50});return o.jsxs("div",{children:[o.jsx(zl,{loading:f,error:v?.message}),r&&o.jsxs(o.Fragment,{children:[o.jsxs("table",{className:"route-table",children:[o.jsx("thead",{children:o.jsxs("tr",{children:[o.jsx("th",{children:"Time"}),o.jsx("th",{children:"Action"}),o.jsx("th",{children:"Target"}),o.jsx("th",{children:"Detail"}),o.jsx("th",{children:"IP"})]})}),o.jsx("tbody",{children:r.entries.map(b=>o.jsxs("tr",{children:[o.jsx("td",{className:"mono dim",children:b.timestamp.slice(0,19)}),o.jsx("td",{className:"mono",children:b.action}),o.jsxs("td",{className:"dim",children:[b.target_type,b.target_id?` #${b.target_id}`:""]}),o.jsx("td",{className:"dim",style:{maxWidth:300,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:b.detail??"—"}),o.jsx("td",{className:"mono dim",children:b.source_ip??"—"})]},b.id))})]}),o.jsx(vv,{page:s,hasMore:r.has_more,onPrev:()=>i(b=>Math.max(1,b-1)),onNext:()=>i(b=>b+1)})]})]})}function _p({routes:s}){const i=[...s].sort((r,f)=>f.requests_per_min-r.requests_per_min);return o.jsxs("table",{className:"route-table",children:[o.jsx("thead",{children:o.jsxs("tr",{children:[o.jsx("th",{children:"Route"}),o.jsx("th",{children:"Req/min"}),o.jsx("th",{children:"Error rate"}),o.jsx("th",{children:"Avg latency"}),o.jsx("th",{children:"P95 latency"}),o.jsx("th",{children:"Total"})]})}),o.jsx("tbody",{children:i.map(r=>o.jsxs("tr",{children:[o.jsx("td",{className:"mono",children:r.path}),o.jsx("td",{className:"mono",children:r.requests_per_min.toFixed(2)}),o.jsxs("td",{className:"mono",style:{color:r.error_rate>.05?"var(--err)":r.error_rate>.01?"var(--warn)":void 0},children:[(r.error_rate*100).toFixed(1),"%"]}),o.jsxs("td",{className:"mono",children:[r.avg_latency_ms.toFixed(0),"ms"]}),o.jsxs("td",{className:"mono",children:[r.p95_latency_ms,"ms"]}),o.jsx("td",{className:"mono",children:r.total_requests.toLocaleString()})]},r.path))})]})}const Gm=["#e8a030","#d4922b","#c07820","#a86015","#8c500a"],Xm=["#6eb5c0","#5aa0ab","#468b96","#327681","#1e616c"];function Op(){const[s,i]=w.useState(6),{data:r,isLoading:f,error:v}=ip(s),b=r?.routes??[],T=b.slice(0,5).map((N,_)=>{const p=(r?.series??[]).filter(U=>U.path===N.path).map(U=>U.requests);return{label:N.path,color:Gm[_%Gm.length],data:p}});return o.jsxs("div",{children:[o.jsxs("div",{className:"section-header",children:[o.jsx("span",{className:"section-label",children:"Traffic"}),o.jsxs("select",{value:s,onChange:N=>i(Number(N.target.value)),children:[o.jsx("option",{value:1,children:"Last 1 hour"}),o.jsx("option",{value:6,children:"Last 6 hours"}),o.jsx("option",{value:24,children:"Last 24 hours"})]})]}),o.jsx(zl,{loading:f,error:v?.message}),r&&o.jsxs(o.Fragment,{children:[o.jsx(_p,{routes:r.routes}),o.jsxs("div",{className:"operator-grid",style:{marginTop:16},children:[o.jsxs("div",{className:"chart-card",children:[o.jsx("div",{className:"chart-header",children:o.jsxs("div",{children:[o.jsx("div",{className:"chart-title",children:"Requests / min by route"}),o.jsx("div",{className:"chart-subtitle",children:"Stacked over time window"})]})}),o.jsx(vs,{series:T})]}),o.jsxs("div",{className:"chart-card",children:[o.jsx("div",{className:"chart-header",children:o.jsxs("div",{children:[o.jsx("div",{className:"chart-title",children:"Avg latency per route"}),o.jsx("div",{className:"chart-subtitle",children:"ms"})]})}),b.length===0?o.jsx("div",{className:"empty",children:"No routes"}):o.jsx("div",{style:{display:"flex",flexDirection:"column",gap:8,paddingTop:8},children:b.slice(0,5).map((N,_)=>{const p=Math.max(...b.slice(0,5).map(R=>R.avg_latency_ms),1),U=N.avg_latency_ms/p*100;return o.jsxs("div",{children:[o.jsxs("div",{style:{display:"flex",justifyContent:"space-between",fontSize:11,marginBottom:2},children:[o.jsx("span",{className:"mono dim",style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",maxWidth:"70%"},children:N.path}),o.jsxs("span",{className:"mono",children:[N.avg_latency_ms.toFixed(0),"ms"]})]}),o.jsx("div",{style:{height:6,background:"var(--border)",borderRadius:0},children:o.jsx("div",{style:{height:"100%",width:`${U}%`,background:Xm[_%Xm.length],borderRadius:0}})})]},N.path)})})]})]})]})]})}function Np(s){const i=Math.floor(Date.now()/1e3-s),r=Math.floor(i/86400),f=Math.floor(i%86400/3600),v=Math.floor(i%3600/60);return r>0?`${r}d ${f}h ${v}m`:f>0?`${f}h ${v}m`:`${v}m`}function Ap({proxy:s}){return o.jsxs("div",{className:"uptime-proxy",children:[o.jsxs("div",{className:"uptime-proxy-stats",children:[o.jsxs("div",{children:[o.jsx("div",{className:"section-label",children:"Uptime (30d)"}),o.jsxs("div",{className:"uptime-pct",children:[s.uptime_pct_30d.toFixed(2),"%"]})]}),o.jsxs("div",{children:[o.jsx("div",{className:"section-label",children:"Running"}),o.jsx("div",{className:"stat-value",style:{fontSize:16},children:Np(s.started_at)})]})]}),o.jsx("div",{className:"section-label",style:{marginBottom:4},children:"30-day history"}),o.jsx("div",{className:"history-bar",children:s.history.map(i=>o.jsx("div",{className:`history-day ${i.status}`,title:`${i.date}: ${i.status}`},i.date))})]})}function zp({b:s}){const i=s.status==="up"?"ok":s.status==="down"?"err":"dim",r=s.last_checked_at?new Date(s.last_checked_at*1e3).toLocaleTimeString():"—";return o.jsxs("tr",{children:[o.jsx("td",{className:"mono",children:s.name}),o.jsxs("td",{children:[o.jsx(yv,{status:i,pulse:s.status==="up"}),s.status]}),o.jsxs("td",{className:"mono",children:[s.uptime_pct_30d.toFixed(2),"%"]}),o.jsx("td",{className:"mono dim",children:r}),o.jsx("td",{className:"mono dim",children:s.last_latency_ms!=null?`${s.last_latency_ms}ms`:"—"}),o.jsx("td",{children:o.jsx("div",{className:"history-bar",style:{height:12},children:s.history.map(f=>o.jsx("div",{className:`history-day ${f.status}`,title:`${f.date}: ${f.status}`},f.date))})})]})}function Mp(){const{data:s,isLoading:i,error:r}=sp();return o.jsxs("div",{children:[o.jsx(zl,{loading:i,error:r?.message}),s&&o.jsxs(o.Fragment,{children:[o.jsx(Ap,{proxy:s.proxy}),o.jsx("div",{className:"section-label",style:{marginTop:16,marginBottom:8},children:"Backend Availability"}),o.jsxs("table",{className:"backend-health-table",children:[o.jsx("thead",{children:o.jsxs("tr",{children:[o.jsx("th",{children:"Backend"}),o.jsx("th",{children:"Status"}),o.jsx("th",{children:"Uptime (30d)"}),o.jsx("th",{children:"Last checked"}),o.jsx("th",{children:"Latency"}),o.jsx("th",{children:"History"})]})}),o.jsx("tbody",{children:s.backends.slice().sort((f,v)=>f.name.localeCompare(v.name)).map(f=>o.jsx(zp,{b:f},f.name))})]})]})]})}function Dp(){const s=Ka(b=>b.token),i=oa(b=>b.lastEvent),r=nl(),[f,v]=w.useState("dashboard");return w.useEffect(()=>{s?Yg():Lg()},[s]),w.useEffect(()=>{i&&(i.type==="metrics_snapshot"?r.setQueryData(["metrics"],i.data):i.type==="backend_health_changed"&&r.invalidateQueries({queryKey:["uptime"]}))},[i,r]),s?o.jsxs("div",{children:[o.jsx(Zg,{activeTab:f,onTabChange:v}),o.jsxs("div",{className:"tab-content",children:[f==="dashboard"&&o.jsx(hp,{}),f==="requests"&&o.jsx(mp,{}),f==="settings"&&o.jsx(vp,{}),f==="backends"&&o.jsx(gp,{}),f==="keys"&&o.jsx(jp,{}),f==="models"&&o.jsx(Ep,{}),f==="audit"&&o.jsx(Tp,{}),f==="traffic"&&o.jsx(Op,{}),f==="uptime"&&o.jsx(Mp,{})]})]}):o.jsx(Gg,{})}const Cp=new xg({defaultOptions:{queries:{retry:1,refetchOnWindowFocus:!1}}});$0.createRoot(document.getElementById("root")).render(o.jsx(w.StrictMode,{children:o.jsx(jg,{client:Cp,children:o.jsx(Dp,{})})})); diff --git a/crates/proxy/admin-ui/src/api/types.ts b/crates/proxy/admin-ui/src/api/types.ts index 557138b..a4eb37a 100644 --- a/crates/proxy/admin-ui/src/api/types.ts +++ b/crates/proxy/admin-ui/src/api/types.ts @@ -162,7 +162,7 @@ export interface RouteMetrics { path: string requests_per_min: number error_rate: number - avg_request_bytes: number + avg_latency_ms: number p95_latency_ms: number total_requests: number } diff --git a/crates/proxy/admin-ui/src/tabs/traffic/RouteTable.tsx b/crates/proxy/admin-ui/src/tabs/traffic/RouteTable.tsx index 4d8c5f1..e1ae513 100644 --- a/crates/proxy/admin-ui/src/tabs/traffic/RouteTable.tsx +++ b/crates/proxy/admin-ui/src/tabs/traffic/RouteTable.tsx @@ -9,7 +9,7 @@ export default function RouteTable({ routes }: { routes: RouteMetrics[] }) { Route Req/min Error rate - Avg payload + Avg latency P95 latency Total @@ -22,7 +22,7 @@ export default function RouteTable({ routes }: { routes: RouteMetrics[] }) { 0.05 ? 'var(--err)' : r.error_rate > 0.01 ? 'var(--warn)' : undefined }}> {(r.error_rate * 100).toFixed(1)}% - {formatBytes(r.avg_request_bytes)} + {r.avg_latency_ms.toFixed(0)}ms {r.p95_latency_ms}ms {r.total_requests.toLocaleString()} @@ -32,8 +32,3 @@ export default function RouteTable({ routes }: { routes: RouteMetrics[] }) { ) } -function formatBytes(n: number) { - if (n < 1024) return `${n}B` - if (n < 1024 * 1024) return `${(n / 1024).toFixed(1)}KB` - return `${(n / (1024 * 1024)).toFixed(1)}MB` -} diff --git a/crates/proxy/admin-ui/src/tabs/traffic/TrafficView.tsx b/crates/proxy/admin-ui/src/tabs/traffic/TrafficView.tsx index 5be7448..5c37554 100644 --- a/crates/proxy/admin-ui/src/tabs/traffic/TrafficView.tsx +++ b/crates/proxy/admin-ui/src/tabs/traffic/TrafficView.tsx @@ -9,11 +9,6 @@ const AMBER_COLORS = ['#e8a030', '#d4922b', '#c07820', '#a86015', '#8c500a'] // Teal palette for payload bar chart const TEAL_COLORS = ['#6eb5c0', '#5aa0ab', '#468b96', '#327681', '#1e616c'] -function formatBytes(bytes: number): string { - if (bytes < 1024) return `${bytes} B` - if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB` - return `${(bytes / (1024 * 1024)).toFixed(1)} MB` -} export default function TrafficView() { const [windowHours, setWindowHours] = useState(6) @@ -57,8 +52,8 @@ export default function TrafficView() {
-
Avg payload per route
-
Bytes
+
Avg latency per route
+
ms
{routes.length === 0 ? ( @@ -66,13 +61,13 @@ export default function TrafficView() { ) : (
{routes.slice(0, 5).map((r, i) => { - const maxBytes = Math.max(...routes.slice(0, 5).map((x) => x.avg_request_bytes), 1) - const pct = (r.avg_request_bytes / maxBytes) * 100 + const maxLatency = Math.max(...routes.slice(0, 5).map((x) => x.avg_latency_ms), 1) + const pct = (r.avg_latency_ms / maxLatency) * 100 return (
{r.path} - {formatBytes(r.avg_request_bytes)} + {r.avg_latency_ms.toFixed(0)}ms
diff --git a/crates/proxy/src/admin/routes/traffic.rs b/crates/proxy/src/admin/routes/traffic.rs index 3bb6210..8eb80d1 100644 --- a/crates/proxy/src/admin/routes/traffic.rs +++ b/crates/proxy/src/admin/routes/traffic.rs @@ -23,7 +23,7 @@ pub struct RouteMetrics { path: String, requests_per_min: f64, error_rate: f64, - avg_request_bytes: f64, + avg_latency_ms: f64, p95_latency_ms: i64, total_requests: i64, } @@ -94,7 +94,7 @@ fn query_traffic(conn: &rusqlite::Connection, window_hours: u32) -> Option Date: Sun, 5 Apr 2026 15:21:36 -0500 Subject: [PATCH 22/25] feat(docker): add Node.js frontend build stage (Stage 1) --- Dockerfile | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/Dockerfile b/Dockerfile index 2ef4e29..a86888b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,18 +1,26 @@ # syntax=docker/dockerfile:1 -# ── Stage 1: install cargo-chef ────────────────────────────────────────────── +# ── Stage 1: build frontend ─────────────────────────────────────────────────── +FROM node:20-alpine AS frontend +WORKDIR /app/crates/proxy/admin-ui +COPY crates/proxy/admin-ui/package.json crates/proxy/admin-ui/package-lock.json ./ +RUN npm ci +COPY crates/proxy/admin-ui/ ./ +RUN npm run build + +# ── Stage 2: install cargo-chef ─────────────────────────────────────────────── FROM rust:1.85-alpine AS chef RUN apk add --no-cache musl-dev openssl-dev openssl-libs-static RUN cargo install cargo-chef --locked WORKDIR /app -# ── Stage 2: compute dependency recipe ─────────────────────────────────────── +# ── Stage 3: compute dependency recipe ─────────────────────────────────────── FROM chef AS planner COPY Cargo.toml Cargo.lock ./ COPY crates crates RUN cargo chef prepare --recipe-path recipe.json -# ── Stage 3: build dependencies (cached layer) + compile binary ─────────────── +# ── Stage 4: build dependencies (cached layer) + compile binary ─────────────── FROM chef AS builder # OPENSSL_STATIC must be set before cook so openssl-sys links statically # when building reqwest/native-tls dependencies. @@ -21,9 +29,12 @@ COPY --from=planner /app/recipe.json recipe.json RUN cargo chef cook --release --recipe-path recipe.json -p anyllm_proxy COPY Cargo.toml Cargo.lock ./ COPY crates crates +COPY assets assets +# Inject frontend build output so include_str!() resolves at compile time. +COPY --from=frontend /app/crates/proxy/admin-ui/dist/ crates/proxy/admin-ui/dist/ RUN cargo build --release -p anyllm_proxy -# ── Stage 4: minimal Alpine runtime ────────────────────────────────────────── +# ── Stage 5: minimal Alpine runtime ────────────────────────────────────────── FROM alpine:3.21 AS runtime RUN apk add --no-cache ca-certificates tzdata RUN addgroup -S -g 1001 anyllm && adduser -S -u 1001 -G anyllm anyllm From cc24cc5592067ff34729e629aada3d591da24df4 Mon Sep 17 00:00:00 2001 From: whit3rabbit Date: Sun, 5 Apr 2026 15:21:50 -0500 Subject: [PATCH 23/25] ci: add frontend job (tsc + lint + build) before Rust test job --- .github/workflows/ci.yml | 35 ++++++++++++++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 379c88d..ba37a83 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -11,10 +11,43 @@ env: CARGO_TERM_COLOR: always jobs: - test: + frontend: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: '20' + cache: 'npm' + cache-dependency-path: crates/proxy/admin-ui/package-lock.json + - name: Install dependencies + working-directory: crates/proxy/admin-ui + run: npm ci + - name: TypeScript check + working-directory: crates/proxy/admin-ui + run: npx tsc --noEmit + - name: Lint + working-directory: crates/proxy/admin-ui + run: npm run lint + - name: Build + working-directory: crates/proxy/admin-ui + run: npm run build + - name: Upload dist + uses: actions/upload-artifact@v4 + with: + name: admin-ui-dist + path: crates/proxy/admin-ui/dist/ + + test: + needs: frontend + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Download dist + uses: actions/download-artifact@v4 + with: + name: admin-ui-dist + path: crates/proxy/admin-ui/dist/ - uses: dtolnay/rust-toolchain@stable with: components: clippy, rustfmt From a76f16937622ee1b30c1b8211fa890924a1e6d01 Mon Sep 17 00:00:00 2001 From: whit3rabbit Date: Sun, 5 Apr 2026 15:22:40 -0500 Subject: [PATCH 24/25] feat: complete React admin UI migration with Traffic and Uptime tabs Fix unused _labels lint error in LineChart component. Co-Authored-By: Claude Sonnet 4.6 --- Cargo.lock | 101 ++++++++++++++++++ .../src/components/shared/LineChart.tsx | 1 - 2 files changed, 101 insertions(+), 1 deletion(-) diff --git a/Cargo.lock b/Cargo.lock index b03b815..3c8b601 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -29,6 +29,15 @@ dependencies = [ "memchr", ] +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + [[package]] name = "anyhow" version = "1.0.102" @@ -89,6 +98,7 @@ dependencies = [ "axum 0.8.8", "base64", "bytes", + "chrono", "crc32fast", "dashmap", "futures", @@ -530,6 +540,20 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" +[[package]] +name = "chrono" +version = "0.4.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c673075a2e0e5f4a1dde27ce9dee1ea4558c7ffe648f576438a20ca1d2acc4b0" +dependencies = [ + "iana-time-zone", + "js-sys", + "num-traits", + "serde", + "wasm-bindgen", + "windows-link", +] + [[package]] name = "combine" version = "4.6.7" @@ -1253,6 +1277,30 @@ dependencies = [ "tracing", ] +[[package]] +name = "iana-time-zone" +version = "0.1.65" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e31bc9ad994ba00e440a8aa5c9ef0ec67d5cb5e5cb0cc7f8b744a35b389cc470" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "log", + "wasm-bindgen", + "windows-core", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + [[package]] name = "icu_collections" version = "2.1.1" @@ -3469,12 +3517,65 @@ dependencies = [ "rustls-pki-types", ] +[[package]] +name = "windows-core" +version = "0.62.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb" +dependencies = [ + "windows-implement", + "windows-interface", + "windows-link", + "windows-result", + "windows-strings", +] + +[[package]] +name = "windows-implement" +version = "0.60.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "windows-interface" +version = "0.59.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "windows-link" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" +[[package]] +name = "windows-result" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5" +dependencies = [ + "windows-link", +] + +[[package]] +name = "windows-strings" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091" +dependencies = [ + "windows-link", +] + [[package]] name = "windows-sys" version = "0.52.0" diff --git a/crates/proxy/admin-ui/src/components/shared/LineChart.tsx b/crates/proxy/admin-ui/src/components/shared/LineChart.tsx index 4bab878..b202376 100644 --- a/crates/proxy/admin-ui/src/components/shared/LineChart.tsx +++ b/crates/proxy/admin-ui/src/components/shared/LineChart.tsx @@ -14,7 +14,6 @@ interface LineChartProps { export default function LineChart({ series, - labels: _labels, gridColor = 'var(--border-sub)', height = 130, }: LineChartProps) { From 6b4c4c93f47ef118bfdbcf854be26e52cb9dc5a1 Mon Sep 17 00:00:00 2001 From: whit3rabbit Date: Sun, 5 Apr 2026 15:23:28 -0500 Subject: [PATCH 25/25] ci: download admin-ui-dist artifact in build-release job --- .github/workflows/ci.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ba37a83..9e866d8 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -96,6 +96,11 @@ jobs: runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v4 + - name: Download dist + uses: actions/download-artifact@v4 + with: + name: admin-ui-dist + path: crates/proxy/admin-ui/dist/ - uses: dtolnay/rust-toolchain@stable with: targets: ${{ matrix.target }}