Browse Source

Merge pull request #142 from ding113/dev

feat: Gemini CLI support & User Management
Ding 3 months ago
parent
commit
70240f6d0e
100 changed files with 9559 additions and 12884 deletions
  1. 4 0
      .dockerignore
  2. 1 1
      .github/workflows/claude-assistant.yml
  3. 3 3
      .github/workflows/claude-ci-autofix.yml
  4. 6 6
      .github/workflows/dev.yml
  5. 9 10
      .github/workflows/pr-check.yml
  6. 7 7
      .github/workflows/release.yml
  7. 1 1
      .gitignore
  8. 2 2
      .prettierignore
  9. 8 8
      AGENTS.md
  10. 85 20
      CLAUDE.md
  11. 10 10
      CONTRIBUTING.md
  12. 11 11
      README.en.md
  13. 11 11
      README.md
  14. 1 1
      VERSION
  15. 397 0
      bun.lock
  16. 9 7
      deploy/Dockerfile
  17. 60 0
      deploy/Dockerfile.dev
  18. 17 0
      drizzle/0018_natural_sasquatch.sql
  19. 3 0
      drizzle/0019_far_whirlwind.sql
  20. 4 0
      drizzle/0020_next_juggernaut.sql
  21. 1474 0
      drizzle/meta/0018_snapshot.json
  22. 1495 0
      drizzle/meta/0019_snapshot.json
  23. 1519 0
      drizzle/meta/0020_snapshot.json
  24. 21 0
      drizzle/meta/_journal.json
  25. 1 1
      messages/en/auth.json
  26. 2 1
      messages/en/common.json
  27. 36 0
      messages/en/dashboard.json
  28. 7 0
      messages/en/errors.json
  29. 4 0
      messages/en/index.ts
  30. 5 1
      messages/en/notifications.json
  31. 19 9
      messages/en/provider-chain.json
  32. 30 0
      messages/en/providers.json
  33. 2 0
      messages/en/quota.json
  34. 206 3
      messages/en/settings.json
  35. 11 1
      messages/en/ui.json
  36. 123 0
      messages/en/usage.json
  37. 1 1
      messages/ja/auth.json
  38. 2 1
      messages/ja/common.json
  39. 27 0
      messages/ja/dashboard.json
  40. 4 0
      messages/ja/index.ts
  41. 5 1
      messages/ja/notifications.json
  42. 13 3
      messages/ja/provider-chain.json
  43. 30 0
      messages/ja/providers.json
  44. 2 0
      messages/ja/quota.json
  45. 169 4
      messages/ja/settings.json
  46. 11 1
      messages/ja/ui.json
  47. 123 0
      messages/ja/usage.json
  48. 1 1
      messages/ru/auth.json
  49. 2 1
      messages/ru/common.json
  50. 27 0
      messages/ru/dashboard.json
  51. 4 0
      messages/ru/index.ts
  52. 5 1
      messages/ru/notifications.json
  53. 13 3
      messages/ru/provider-chain.json
  54. 30 0
      messages/ru/providers.json
  55. 169 4
      messages/ru/settings.json
  56. 11 1
      messages/ru/ui.json
  57. 123 0
      messages/ru/usage.json
  58. 1 1
      messages/zh-CN/auth.json
  59. 2 1
      messages/zh-CN/common.json
  60. 112 7
      messages/zh-CN/dashboard.json
  61. 4 0
      messages/zh-CN/index.ts
  62. 5 1
      messages/zh-CN/notifications.json
  63. 19 9
      messages/zh-CN/provider-chain.json
  64. 30 0
      messages/zh-CN/providers.json
  65. 10 4
      messages/zh-CN/quota.json
  66. 209 6
      messages/zh-CN/settings.json
  67. 11 1
      messages/zh-CN/ui.json
  68. 123 0
      messages/zh-CN/usage.json
  69. 1 1
      messages/zh-TW/auth.json
  70. 2 1
      messages/zh-TW/common.json
  71. 27 0
      messages/zh-TW/dashboard.json
  72. 4 0
      messages/zh-TW/index.ts
  73. 5 1
      messages/zh-TW/notifications.json
  74. 13 3
      messages/zh-TW/provider-chain.json
  75. 30 0
      messages/zh-TW/providers.json
  76. 200 4
      messages/zh-TW/settings.json
  77. 11 1
      messages/zh-TW/ui.json
  78. 123 0
      messages/zh-TW/usage.json
  79. 7 0
      next.config.ts
  80. 6 4
      package.json
  81. 0 12580
      pnpm-lock.yaml
  82. 414 22
      public/seed/litellm-prices.json
  83. 1 1
      scripts/extract-translations.ts
  84. 25 0
      scripts/init-error-rules.ts
  85. 6 6
      src/actions/active-sessions.ts
  86. 335 0
      src/actions/error-rules.ts
  87. 92 0
      src/actions/keys.ts
  88. 19 3
      src/actions/model-prices.ts
  89. 3 14
      src/actions/overview.ts
  90. 599 10
      src/actions/providers.ts
  91. 49 0
      src/actions/rate-limit-stats.ts
  92. 1 1
      src/actions/session-response.ts
  93. 64 58
      src/actions/users.ts
  94. 1 5
      src/app/[locale]/dashboard/_components/dashboard-header.tsx
  95. 131 0
      src/app/[locale]/dashboard/_components/rate-limit-events-chart.tsx
  96. 150 0
      src/app/[locale]/dashboard/_components/rate-limit-top-users.tsx
  97. 137 0
      src/app/[locale]/dashboard/_components/rate-limit-type-breakdown.tsx
  98. 1 1
      src/app/[locale]/dashboard/_components/statistics/chart.tsx
  99. 194 0
      src/app/[locale]/dashboard/_components/user-quick-overview.tsx
  100. 6 2
      src/app/[locale]/dashboard/_components/user/add-user-dialog.tsx

+ 4 - 0
.dockerignore

@@ -23,3 +23,7 @@ dist
 npm-debug.log*
 yarn-debug.log*
 yarn-error.log*
+
+# Data directories (PostgreSQL, Redis persistent data)
+data/redis
+data/postgres

+ 1 - 1
.github/workflows/claude-assistant.yml

@@ -187,7 +187,7 @@ jobs:
           # Claude 配置参数
           claude_args: |
             --max-turns 999
-            --allowedTools "Read,Write,Edit,Bash(gh:*),Bash(git:*),Bash(npm:*),Bash(pnpm:*),Bash(yarn:*),mcp__github_inline_comment__create_inline_comment"
+            --allowedTools "Read,Write,Edit,Bash(gh:*),Bash(git:*),Bash(npm:*),Bash(bun:*),Bash(yarn:*),mcp__github_inline_comment__create_inline_comment"
 
           # 其他配置
           use_commit_signing: true

+ 3 - 3
.github/workflows/claude-ci-autofix.yml

@@ -121,7 +121,7 @@ jobs:
             ### 修复策略:
 
             1. **分析错误类型**:
-               - ESLint/Prettier 错误 → 运行 `npm run lint:fix` 或 `pnpm lint:fix`
+               - ESLint/Prettier 错误 → 运行 `npm run lint:fix` 或 `bun run lint:fix`
                - TypeScript 类型错误 → 修复类型定义
                - 测试失败 → 分析并修复测试或代码
                - 构建失败 → 检查依赖和配置
@@ -130,7 +130,7 @@ jobs:
                - 使用 Read 工具查看相关文件
                - 使用 Edit 工具修复问题
                - 如果是格式化问题,运行相应的 lint/format 命令
-               - 使用 Bash(npm:*) 或 Bash(pnpm:*) 运行修复命令
+               - 使用 Bash(npm:*) 或 Bash(bun:*) 运行修复命令
 
             3. **验证修复**:
                - 如果可能,运行相关的测试或 lint 命令验证修复
@@ -180,7 +180,7 @@ jobs:
 
           claude_args: |
             --max-turns 999
-            --allowedTools "Read,Write,Edit,Bash(git:*),Bash(gh:*),Bash(npm:*),Bash(pnpm:*),Bash(yarn:*),Bash(bun:*),Bash(npx:*)"
+            --allowedTools "Read,Write,Edit,Bash(git:*),Bash(gh:*),Bash(npm:*),Bash(bun:*),Bash(yarn:*),Bash(npx:*)"
 
           use_commit_signing: true
           # workflow_run 事件不支持 track_progress,禁用以确保正常执行

+ 6 - 6
.github/workflows/dev.yml

@@ -59,15 +59,15 @@ jobs:
         with:
           node-version: "20"
 
-      - name: Setup pnpm
-        uses: pnpm/action-setup@v4
+      - name: Setup Bun
+        uses: oven-sh/setup-bun@v1
         with:
-          version: 9.15.0
+          bun-version: '1.3.2'
 
       - name: Install dependencies and format code
         run: |
-          pnpm install --frozen-lockfile
-          pnpm format
+          bun install --frozen-lockfile
+          bun run format
 
       - name: Commit formatted code
         run: |
@@ -131,7 +131,7 @@ jobs:
 
       - name: Build summary
         run: |
-          echo "Build completed successfully!"
+          echo "Build completed successfully!"
           echo ""
           echo "📦 Branch: ${{ steps.branch_info.outputs.branch_name }}"
           echo "📦 Docker Images:"

+ 9 - 10
.github/workflows/pr-check.yml

@@ -22,32 +22,31 @@ jobs:
       - name: 📥 Checkout repository
         uses: actions/checkout@v4
 
-      - name: 📦 Setup pnpm
-        uses: pnpm/action-setup@v4
+      - name: 📦 Setup Bun
+        uses: oven-sh/setup-bun@v1
         with:
-          version: 9.15.0
+          bun-version: '1.3.2'
 
       - name: 🟢 Setup Node.js
         uses: actions/setup-node@v4
         with:
           node-version: '20'
-          cache: 'pnpm'
 
       - name: 📦 Install dependencies
-        run: pnpm install --frozen-lockfile
+        run: bun install --frozen-lockfile
 
       - name: 🔍 Type check
-        run: pnpm typecheck
+        run: bun run typecheck
 
       - name: 🎨 Format check
-        run: pnpm format:check
+        run: bun run format:check
 
       - name: 🛡️ Validate migrations
-        run: pnpm validate:migrations
+        run: bun run validate:migrations
 
-      - name: Code quality checks passed
+      - name: Code quality checks passed
         run: |
-          echo "All code quality checks passed!"
+          echo "All code quality checks passed!"
           echo "📝 Type checking: OK"
           echo "🎨 Code formatting: OK"
           echo "🛡️ Migration validation: OK"

+ 7 - 7
.github/workflows/release.yml

@@ -134,17 +134,17 @@ jobs:
         with:
           node-version: "20"
 
-      - name: Setup pnpm
+      - name: Setup Bun
         if: steps.check.outputs.needs_bump == 'true'
-        uses: pnpm/action-setup@v4
+        uses: oven-sh/setup-bun@v1
         with:
-          version: 9.15.0
+          bun-version: '1.3.2'
 
       - name: Install dependencies and format code
         if: steps.check.outputs.needs_bump == 'true'
         run: |
-          pnpm install --frozen-lockfile
-          pnpm format
+          bun install --frozen-lockfile
+          bun run format
 
       - name: Update seed price table
         if: steps.check.outputs.needs_bump == 'true'
@@ -157,11 +157,11 @@ jobs:
 
           # 下载最新价格表
           if curl -sSL -f "https://raw.githubusercontent.com/BerriAI/litellm/main/model_prices_and_context_window.json" -o public/seed/litellm-prices.json; then
-            echo "价格表下载成功"
+            echo "价格表下载成功"
 
             # 验证 JSON 格式
             if node -e "JSON.parse(require('fs').readFileSync('public/seed/litellm-prices.json', 'utf-8'))"; then
-              echo "JSON 格式验证通过"
+              echo "JSON 格式验证通过"
 
               # 显示统计信息
               TOTAL_MODELS=$(node -e "console.log(Object.keys(JSON.parse(require('fs').readFileSync('public/seed/litellm-prices.json', 'utf-8'))).length)")

+ 1 - 1
.gitignore

@@ -29,7 +29,7 @@
 npm-debug.log*
 yarn-debug.log*
 yarn-error.log*
-.pnpm-debug.log*
+.bun-debug.log*
 .workflow/
 
 # env files (can opt-in for committing if needed)

+ 2 - 2
.prettierignore

@@ -16,7 +16,7 @@ logs
 npm-debug.log*
 yarn-debug.log*
 yarn-error.log*
-.pnpm-debug.log*
+.bun-debug.log*
 
 # Environment files
 .env*
@@ -51,7 +51,7 @@ data
 public/seed/litellm-prices.json
 
 # Package manager
-pnpm-lock.yaml
+bun.lock
 package-lock.json
 yarn.lock
 

+ 8 - 8
AGENTS.md

@@ -10,10 +10,10 @@
 
 ## Build, Test, and Development Commands
 
-- `pnpm dev` — starts Next.js (port 13500) with Turbo for local work.
-- `pnpm build` / `pnpm start` — compiles the standalone production bundle and serves it.
-- `pnpm lint`, `pnpm typecheck`, `pnpm format:check` — run ESLint 9, TypeScript `--noEmit`, and Prettier verification; treat failures as blockers.
-- `pnpm db:generate`, `pnpm db:migrate`, `pnpm db:push`, `pnpm db:studio` — Drizzle Kit for schema evolution.
+- `bun run dev` — starts Next.js (port 13500) with Turbo for local work.
+- `bun run build` / `bun run start` — compiles the standalone production bundle and serves it.
+- `bun run lint`, `bun run typecheck`, `bun run format:check` — run ESLint 9, TypeScript `--noEmit`, and Prettier verification; treat failures as blockers.
+- `bun run db:generate`, `bun run db:migrate`, `bun run db:push`, `bun run db:studio` — Drizzle Kit for schema evolution.
 - `docker compose up -d` — spins up the full stack (app, Postgres, Redis) for parity testing.
 
 ## Coding Style & Naming Conventions
@@ -21,11 +21,11 @@
 - 2-space indentation, trailing commas, and single quotes follow Prettier and `eslint.config.mjs`.
 - React components use PascalCase (`UsageChart.tsx`); hooks and utilities stay camelCase; route folders remain kebab-case.
 - Prefer `async/await`, keep server actions inside `src/actions`, and co-locate Tailwind classes with the JSX they style.
-- Run `pnpm format` before submitting wide-ranging edits.
+- Run `bun run format` before submitting wide-ranging edits.
 
 ## Testing Guidelines
 
-- Today we rely on `pnpm lint` and `pnpm typecheck` plus manual checks through `/admin`.
+- Today we rely on `bun run lint` and `bun run typecheck` plus manual checks through `/admin`.
 - Smoke API changes with `curl -H "Authorization: Bearer <ADMIN_TOKEN>" http://localhost:13500/api/providers`.
 - New automated tests should follow `*.spec.ts` naming, live next to the feature, and wire into `package.json` scripts.
 - Note any seed data or feature flags in the PR description so reviewers can reproduce your scenario.
@@ -35,10 +35,10 @@
 - Follow Conventional commits (`fix:`, `chore:`, `feat:`) as seen in `git log`; keep subjects under 72 characters.
 - Body text should note user impact plus migration or environment changes.
 - PRs must include a short summary, screenshots or JSON samples for UI/API updates, links to issues, and migration callouts.
-- Rebase onto `main`, run `pnpm lint && pnpm typecheck`, and flag anything that blocks deploy parity.
+- Rebase onto `main`, run `bun run lint && bun run typecheck`, and flag anything that blocks deploy parity.
 
 ## Security & Configuration Tips
 
 - Start from `.env.example`, rotate `ADMIN_TOKEN` before sharing previews, and scope provider keys to least privilege.
 - Keep Redis, Postgres, and upstream tokens in secrets management—never in Git commits.
-- Prefer `pnpm dev` with mock providers when debugging rather than production credentials.
+- Prefer `bun run dev` with mock providers when debugging rather than production credentials.

+ 85 - 20
CLAUDE.md

@@ -19,22 +19,22 @@ Claude Code Hub 是一个 Claude Code API 代理中转服务平台,用于统
 ### 开发命令
 
 ```bash
-pnpm dev              # 启动开发服务器 (http://localhost:13500, 使用 Turbopack)
-pnpm build            # 构建生产版本 (自动复制 VERSION 文件)
-pnpm start            # 启动生产服务器
-pnpm lint             # 运行 ESLint
-pnpm typecheck        # TypeScript 类型检查
-pnpm format           # 格式化代码
-pnpm format:check     # 检查代码格式
+bun run dev           # 启动开发服务器 (http://localhost:13500, 使用 Turbopack)
+bun run build         # 构建生产版本 (自动复制 VERSION 文件)
+bun run start         # 启动生产服务器
+bun run lint          # 运行 ESLint
+bun run typecheck     # TypeScript 类型检查
+bun run format        # 格式化代码
+bun run format:check  # 检查代码格式
 ```
 
 ### 数据库命令
 
 ```bash
-pnpm db:generate      # 生成 Drizzle 迁移文件
-pnpm db:migrate       # 执行数据库迁移
-pnpm db:push          # 直接推送 schema 到数据库(开发环境)
-pnpm db:studio        # 启动 Drizzle Studio 可视化管理界面
+bun run db:generate   # 生成 Drizzle 迁移文件
+bun run db:migrate    # 执行数据库迁移
+bun run db:push       # 直接推送 schema 到数据库(开发环境)
+bun run db:studio     # 启动 Drizzle Studio 可视化管理界面
 ```
 
 ### Docker 部署
@@ -64,7 +64,7 @@ make dev       # 一键启动完整开发环境
 
 ```bash
 # 环境管理
-make dev          # 启动完整开发环境 (DB + pnpm dev)
+make dev          # 启动完整开发环境 (DB + bun dev)
 make db           # 仅启动数据库和 Redis
 make stop         # 停止所有服务
 make status       # 查看服务状态
@@ -118,7 +118,7 @@ curl http://localhost:13500/api/actions/health
 - **Redis** + **ioredis** - 限流、会话追踪、熔断器
 - **Tailwind CSS v4** + **Shadcn UI** (orange 主题) - UI 框架
 - **Pino** - 结构化日志
-- **包管理器**: pnpm 9.15.0
+- **包管理器**: Bun 1.3+
 
 ## 架构概览
 
@@ -278,6 +278,70 @@ if (proxyConfig) {
 - 企业内网环境,需要通过公司代理访问外网
 - IP 限制场景,通过代理绕过 IP 封锁
 
+### API 连通性测试
+
+供应商管理页面提供 API 连通性测试功能,用于验证供应商 API 的可用性和配置正确性。
+
+**功能位置**:
+
+- 路径:设置 → 供应商管理 → 编辑/创建供应商
+- 权限:仅管理员可执行
+
+**支持的 API 格式**:
+
+1. **Anthropic Messages API** (`/v1/messages`)
+   - 标准 Anthropic 格式
+   - 支持 cache tokens 统计
+
+2. **OpenAI Chat Completions API** (`/v1/chat/completions`)
+   - OpenAI 聊天完成格式
+   - 支持 reasoning tokens 统计
+
+3. **OpenAI Responses API** (`/v1/responses`)
+   - OpenAI Response API 格式(Claude 4 Sonnet 同款)
+   - 支持 input/output tokens 统计
+
+**测试内容**:
+
+- API 连通性(网络连接、认证)
+- 响应时间测量(超时 10 秒)
+- Token 用量统计
+- 模型可用性验证
+- 代理配置测试(如果配置了代理)
+
+**安全限制**:
+
+- 🔒 仅管理员可执行测试(需要登录管理后台)
+- 🔒 阻止访问内部网络地址(防止 SSRF 攻击)
+  - localhost, 127.0.0.1
+  - 内网地址段:10.x.x.x, 172.16-31.x.x, 192.168.x.x
+  - 链路本地地址:169.254.x.x, fe80::/10
+- 🔒 阻止访问危险端口
+  - SSH (22), Telnet (23)
+  - 数据库端口:MySQL (3306), PostgreSQL (5432), MongoDB (27017), Redis (6379)
+  - 内部服务端口
+
+**使用场景**:
+
+1. **新增供应商**:验证 API 配置是否正确
+2. **故障排查**:诊断供应商连接问题
+3. **代理测试**:验证代理配置是否生效
+4. **模型验证**:确认供应商支持的模型
+
+**测试流程**:
+
+1. 填写供应商基本信息(URL、API 密钥、模型)
+2. 选择 API 格式(根据供应商类型自动选择)
+3. 点击"测试连接"按钮
+4. 等待测试结果(最长 10 秒)
+5. 查看详细结果(响应时间、Token 用量、响应内容)
+
+**注意事项**:
+
+- 测试会消耗少量 Token(约 100 tokens)
+- 测试失败不影响供应商保存
+- 建议在保存前先测试,确保配置正确
+
 ### 数据库 Schema
 
 核心表结构 (`src/drizzle/schema.ts`):
@@ -442,8 +506,8 @@ LOG_LEVEL=info                     # 日志级别
 
 **重要**: 所有布尔类型的环境变量(如 `ENABLE_SECURE_COOKIES`, `AUTO_MIGRATE`, `ENABLE_RATE_LIMIT` 等)必须使用以下值:
 
-- **表示 `true`**: `true`, `1`, `yes`, `on` 或任何非 `false`/`0` 的值
-- **表示 `false`**: `false`, `0`
+- **表示 `true`**: `true`, `1`, `yes`, `on` 或任何非 `false`/`0` 的值
+- **表示 `false`**: `false`, `0`
 
 **常见错误**:
 
@@ -451,7 +515,7 @@ LOG_LEVEL=info                     # 日志级别
 # ❌ 错误 - 字符串 "false" 会被解析为 true!
 ENABLE_SECURE_COOKIES="false"  # 错误:引号导致字符串被当作 true
 
-# 正确 - 不带引号
+# 正确 - 不带引号
 ENABLE_SECURE_COOKIES=false    # 正确:直接写 false
 ENABLE_SECURE_COOKIES=0        # 正确:也可以用 0
 ```
@@ -507,8 +571,9 @@ OpenAPI 文档(`/api/actions/scalar` 和 `/api/actions/docs`)中的 server U
 
 ### 3. 数据库迁移
 
-- 使用 `pnpm db:generate` 生成迁移文件
+- 使用 `bun run db:generate` 生成迁移文件
 - 生产环境使用 `AUTO_MIGRATE=true` 自动执行迁移
+- `bun run db:push` (开发) 或 `bun run db:migrate` (生产)
 - 索引优化: 所有查询都有对应的复合索引(参见 schema.ts 中的 index 定义)
 - 时区处理: 所有 timestamp 字段使用 `withTimezone: true`
 
@@ -535,7 +600,7 @@ OpenAPI 文档(`/api/actions/scalar` 和 `/api/actions/docs`)中的 server U
 ### 7. 代码风格
 
 - 使用 ESLint + Prettier
-- 提交前运行 `pnpm typecheck` 确保类型正确
+- 提交前运行 `bun run typecheck` 确保类型正确
 - 遵循现有代码风格(参考 `src/app/v1/_lib/proxy/` 中的代码)
 
 ### 8. 添加新的 API 端点
@@ -616,9 +681,9 @@ SELECT ... LIMIT 50 OFFSET 0;
 ### 修改数据库 Schema
 
 1. 修改 `src/drizzle/schema.ts`
-2. 运行 `pnpm db:generate` 生成迁移文件
+2. 运行 `bun run db:generate` 生成迁移文件
 3. 检查生成的 SQL 文件 (`drizzle/` 目录)
-4. 运行 `pnpm db:push` (开发) 或 `pnpm db:migrate` (生产)
+4. 运行 `bun run db:push` (开发) 或 `bun run db:migrate` (生产)
 
 ## 故障排查
 

+ 10 - 10
CONTRIBUTING.md

@@ -39,7 +39,7 @@ Claude Code Hub 是一个面向团队的 AI API 代理平台,支持统一管
    ```bash
    git clone https://github.com/ding113/claude-code-hub.git
    cd claude-code-hub
-   pnpm install
+   bun install
    ```
 2. 复制并配置环境变量:
    ```bash
@@ -47,7 +47,7 @@ Claude Code Hub 是一个面向团队的 AI API 代理平台,支持统一管
    ```
 3. 本地启动:
    ```bash
-   pnpm dev
+   bun run dev
    ```
 4. 需要容器化体验可参考 `README.md` 与 `.github/CI_CD_SETUP.md` 中的 Docker 流程。
 
@@ -107,9 +107,9 @@ Claude Code Hub 是一个面向团队的 AI API 代理平台,支持统一管
 在每次提交前务必运行:
 
 ```bash
-pnpm lint
-pnpm typecheck
-# 如果更改影响运行逻辑,执行端到端验证或 pnpm test
+bun run lint
+bun run typecheck
+# 如果更改影响运行逻辑,执行端到端验证或 bun run test
 ```
 
 CI 会在 PR 上运行 `Docker Build Test`(见 `.github/CI_CD_SETUP.md`)。如需验证容器构建,可本地执行:
@@ -175,7 +175,7 @@ Claude Code Hub centralizes multiple AI providers with smart routing, tenant con
    ```bash
    git clone https://github.com/ding113/claude-code-hub.git
    cd claude-code-hub
-   pnpm install
+   bun install
    ```
 2. Copy environment variables and configure secrets:
    ```bash
@@ -183,7 +183,7 @@ Claude Code Hub centralizes multiple AI providers with smart routing, tenant con
    ```
 3. Launch the dev server:
    ```bash
-   pnpm dev
+   bun run dev
    ```
 4. For Docker-based flows, review `README.md` and `.github/CI_CD_SETUP.md`.
 
@@ -235,9 +235,9 @@ Example: `fix: handle redis timeout retry`
 Always verify locally before requesting a review:
 
 ```bash
-pnpm lint
-pnpm typecheck
-# Run pnpm test or relevant scripts when logic changes
+bun run lint
+bun run typecheck
+# Run bun run test or relevant scripts when logic changes
 docker compose build   # optional, mirrors CI Docker Build Test
 ```
 

+ 11 - 11
README.en.md

@@ -51,17 +51,17 @@ Cubence offers special discount coupons for users of CCH: when purchasing with t
 ### Requirements
 
 - Docker and Docker Compose (latest version recommended)
-- Optional (for local development): Node.js ≥ 20, pnpm ≥ 9.15
+- Optional (for local development): Node.js ≥ 20, Bun ≥ 1.3
 
 ### 🚀 One-Click Deployment Script (✨ Recommended - Fully Automated)
 
 The one-click deployment script **automatically handles** all of the following:
 
-- Check and install Docker and Docker Compose (Linux/macOS support auto-install)
-- Create deployment directory and configuration files
-- Generate secure admin token and database password
-- Start all services and wait for health checks
-- Display access URLs and admin token
+- Check and install Docker and Docker Compose (Linux/macOS support auto-install)
+- Create deployment directory and configuration files
+- Generate secure admin token and database password
+- Start all services and wait for health checks
+- Display access URLs and admin token
 
 **Linux / macOS:**
 
@@ -216,24 +216,24 @@ Docker Compose is the **preferred deployment method** — it automatically provi
 ### Local development (dev toolchain)
 
 1. Enter the `dev/` folder: `cd dev`.
-2. Run `make dev` to launch PostgreSQL + Redis + `pnpm dev` in one command.
+2. Run `make dev` to launch PostgreSQL + Redis + `bun dev` in one command.
 3. Helpful targets:
    - `make db`: start only database and Redis.
    - `make logs` / `make logs-app`: tail all services or app logs.
    - `make clean` / `make reset`: clean or fully reset the environment.
 4. Use `make migrate` and `make db-shell` for schema operations.
 
-### Manual deployment (pnpm build + start)
+### Manual deployment (bun build + start)
 
 1. Install dependencies and build:
    ```bash
-   pnpm install
-   pnpm build         # Copies the VERSION file automatically
+   bun install
+   bun run build      # Copies the VERSION file automatically
    ```
 2. Export environment variables via your process manager (systemd, PM2, etc.) and ensure PostgreSQL/Redis endpoints are reachable.
 3. Launch production server:
    ```bash
-   pnpm start
+   bun run start
    ```
 4. You may keep `AUTO_MIGRATE=true` for the first run, then disable it and manage migrations explicitly with Drizzle CLI.
 

+ 11 - 11
README.md

@@ -51,17 +51,17 @@ Cubence 为 CCH 的使用用户提供了特别的优惠折扣:在购买时使
 ### 环境要求
 
 - Docker 与 Docker Compose(推荐使用最新版本)
-- 可选(本地开发):Node.js ≥ 20,pnpm ≥ 9.15
+- 可选(本地开发):Node.js ≥ 20,Bun ≥ 1.3
 
 ### 🚀 一键部署脚本(✨ 推荐方式,全自动安装)
 
 一键部署脚本会**自动完成**以下所有步骤:
 
-- 检查并安装 Docker 和 Docker Compose(Linux/macOS 支持自动安装)
-- 创建部署目录并配置文件
-- 生成安全的管理员令牌和数据库密码
-- 启动所有服务并等待健康检查
-- 显示访问地址和管理员令牌
+- 检查并安装 Docker 和 Docker Compose(Linux/macOS 支持自动安装)
+- 创建部署目录并配置文件
+- 生成安全的管理员令牌和数据库密码
+- 启动所有服务并等待健康检查
+- 显示访问地址和管理员令牌
 
 **Linux / macOS:**
 
@@ -216,24 +216,24 @@ Docker Compose 是**首选部署方式**,自动配置数据库、Redis 和应
 ### 本地开发(dev 工具链)
 
 1. 进入 `dev/` 目录:`cd dev`.
-2. `make dev` 一键启动 PostgreSQL + Redis + pnpm dev。
+2. `make dev` 一键启动 PostgreSQL + Redis + bun dev。
 3. 常用命令:
    - `make db`:仅启动数据库与 Redis
    - `make logs` / `make logs-app`:快速查看服务日志
    - `make clean` / `make reset`:清理或重置环境
 4. 推荐使用 `make migrate`、`make db-shell` 处理数据库变更。
 
-### 手动部署(pnpm build + start)
+### 手动部署(bun build + start)
 
 1. 安装依赖并构建:
    ```bash
-   pnpm install
-   pnpm build         # 自动复制 VERSION
+   bun install
+   bun run build      # 自动复制 VERSION
    ```
 2. 设置环境变量(建议通过系统服务或 PM2 注入),确保数据库、Redis 可访问。
 3. 启动生产服务器:
    ```bash
-   pnpm start
+   bun run start
    ```
 4. 注意:首次运行可开启 `AUTO_MIGRATE=true` 自动迁移,生产环境完成后建议改为 `false` 并使用 Drizzle CLI 手动管理。
 

+ 1 - 1
VERSION

@@ -1 +1 @@
-0.2.41
+0.3.0

File diff suppressed because it is too large
+ 397 - 0
bun.lock


+ 9 - 7
deploy/Dockerfile

@@ -1,14 +1,11 @@
 # syntax=docker/dockerfile:1
 
-FROM --platform=$BUILDPLATFORM node:22-slim AS build-base
-ENV PNPM_HOME=/pnpm
-ENV PATH="$PNPM_HOME:$PATH"
-RUN corepack enable
+FROM --platform=$BUILDPLATFORM oven/bun:1.3.2-slim AS build-base
 WORKDIR /app
 
 FROM build-base AS deps
-COPY package.json pnpm-lock.yaml ./
-RUN --mount=type=cache,target=/root/.local/share/pnpm/store pnpm install --frozen-lockfile
+COPY package.json bun.lock ./
+RUN bun install --frozen-lockfile
 
 FROM deps AS build
 COPY . .
@@ -20,7 +17,12 @@ ARG APP_VERSION=dev
 ENV NEXT_TELEMETRY_DISABLED=1
 ENV NEXT_PUBLIC_APP_VERSION=$APP_VERSION
 
-RUN pnpm run build
+# 构建时需要的环境变量 (避免数据库初始化错误)
+# 这些是占位符,实际运行时会被真实值覆盖
+ENV DSN="postgres://placeholder:placeholder@localhost:5432/placeholder"
+ENV REDIS_URL="redis://localhost:6379"
+
+RUN bun run build
 
 FROM node:22-slim AS runner
 ENV NODE_ENV=production

+ 60 - 0
deploy/Dockerfile.dev

@@ -0,0 +1,60 @@
+# syntax=docker/dockerfile:1
+
+FROM --platform=$BUILDPLATFORM oven/bun:1.3.2-slim AS build-base
+WORKDIR /app
+
+FROM build-base AS deps
+COPY package.json bun.lock ./
+# 使用 BuildKit 缓存挂载加速依赖安装
+RUN --mount=type=cache,target=/root/.bun/install/cache \
+    bun install --frozen-lockfile
+
+FROM deps AS build
+COPY . .
+
+# 接收构建参数
+ARG APP_VERSION=dev
+
+# 设置为环境变量供 Next.js 使用
+ENV NEXT_TELEMETRY_DISABLED=1
+ENV NEXT_PUBLIC_APP_VERSION=$APP_VERSION
+
+# 构建时需要的环境变量 (避免数据库初始化错误)
+# 这些是占位符,实际运行时会被真实值覆盖
+ENV DSN="postgres://placeholder:placeholder@localhost:5432/placeholder"
+ENV REDIS_URL="redis://localhost:6379"
+
+# 使用 BuildKit 缓存加速 Next.js 构建
+RUN --mount=type=cache,target=/app/.next/cache \
+    bun run build
+
+FROM node:22-slim AS runner
+ENV NODE_ENV=production
+ENV PORT=3000
+ENV HOST=0.0.0.0
+WORKDIR /app
+
+# 安装 PostgreSQL 18 客户端工具(用于数据库备份/恢复功能)和 curl(用于健康检查)
+# 需要使用官方 PostgreSQL APT 仓库以获取最新版本
+# 使用 BuildKit 缓存挂载加速 APT 安装
+RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
+    --mount=type=cache,target=/var/lib/apt/lists,sharing=locked \
+    apt-get update && \
+    apt-get install -y gnupg curl ca-certificates && \
+    curl -fsSL https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor -o /usr/share/keyrings/postgresql-archive-keyring.gpg && \
+    echo "deb [signed-by=/usr/share/keyrings/postgresql-archive-keyring.gpg] http://apt.postgresql.org/pub/repos/apt bookworm-pgdg main" > /etc/apt/sources.list.d/pgdg.list && \
+    apt-get update && \
+    apt-get install -y postgresql-client-18
+
+COPY --from=build --chown=node:node /app/public ./public
+COPY --from=build --chown=node:node /app/drizzle ./drizzle
+COPY --from=build --chown=node:node /app/messages ./messages
+COPY --from=build --chown=node:node /app/.next/standalone ./
+# Server Actions live inside .next/server; copy it or Next.js cannot resolve action IDs.
+COPY --from=build --chown=node:node /app/.next/server ./.next/server
+COPY --from=build --chown=node:node /app/.next/static ./.next/static
+
+USER node
+EXPOSE 3000
+
+CMD ["node", "server.js"]

+ 17 - 0
drizzle/0018_natural_sasquatch.sql

@@ -0,0 +1,17 @@
+CREATE TABLE IF NOT EXISTS "error_rules" (
+	"id" serial PRIMARY KEY NOT NULL,
+	"pattern" text NOT NULL,
+	"match_type" varchar(20) DEFAULT 'regex' NOT NULL,
+	"category" varchar(50) NOT NULL,
+	"description" text,
+	"is_enabled" boolean DEFAULT true NOT NULL,
+	"is_default" boolean DEFAULT false NOT NULL,
+	"priority" integer DEFAULT 0 NOT NULL,
+	"created_at" timestamp with time zone DEFAULT now(),
+	"updated_at" timestamp with time zone DEFAULT now()
+);
+--> statement-breakpoint
+CREATE INDEX IF NOT EXISTS "idx_error_rules_enabled" ON "error_rules" USING btree ("is_enabled","priority");--> statement-breakpoint
+CREATE UNIQUE INDEX IF NOT EXISTS "unique_pattern" ON "error_rules" USING btree ("pattern");--> statement-breakpoint
+CREATE INDEX IF NOT EXISTS "idx_category" ON "error_rules" USING btree ("category");--> statement-breakpoint
+CREATE INDEX IF NOT EXISTS "idx_match_type" ON "error_rules" USING btree ("match_type");

+ 3 - 0
drizzle/0019_far_whirlwind.sql

@@ -0,0 +1,3 @@
+ALTER TABLE "providers" ADD COLUMN "first_byte_timeout_streaming_ms" integer DEFAULT 30000 NOT NULL;--> statement-breakpoint
+ALTER TABLE "providers" ADD COLUMN "streaming_idle_timeout_ms" integer DEFAULT 10000 NOT NULL;--> statement-breakpoint
+ALTER TABLE "providers" ADD COLUMN "request_timeout_non_streaming_ms" integer DEFAULT 600000 NOT NULL;

+ 4 - 0
drizzle/0020_next_juggernaut.sql

@@ -0,0 +1,4 @@
+ALTER TABLE "users" ADD COLUMN "limit_5h_usd" numeric(10, 2);--> statement-breakpoint
+ALTER TABLE "users" ADD COLUMN "limit_weekly_usd" numeric(10, 2);--> statement-breakpoint
+ALTER TABLE "users" ADD COLUMN "limit_monthly_usd" numeric(10, 2);--> statement-breakpoint
+ALTER TABLE "users" ADD COLUMN "limit_concurrent_sessions" integer;

+ 1474 - 0
drizzle/meta/0018_snapshot.json

@@ -0,0 +1,1474 @@
+{
+  "id": "dcbbb4ef-507a-41b9-81e6-ebd68d37dad8",
+  "prevId": "f68e89cc-aedd-4df1-a470-4081b0a18fb5",
+  "version": "7",
+  "dialect": "postgresql",
+  "tables": {
+    "public.error_rules": {
+      "name": "error_rules",
+      "schema": "",
+      "columns": {
+        "id": {
+          "name": "id",
+          "type": "serial",
+          "primaryKey": true,
+          "notNull": true
+        },
+        "pattern": {
+          "name": "pattern",
+          "type": "text",
+          "primaryKey": false,
+          "notNull": true
+        },
+        "match_type": {
+          "name": "match_type",
+          "type": "varchar(20)",
+          "primaryKey": false,
+          "notNull": true,
+          "default": "'regex'"
+        },
+        "category": {
+          "name": "category",
+          "type": "varchar(50)",
+          "primaryKey": false,
+          "notNull": true
+        },
+        "description": {
+          "name": "description",
+          "type": "text",
+          "primaryKey": false,
+          "notNull": false
+        },
+        "is_enabled": {
+          "name": "is_enabled",
+          "type": "boolean",
+          "primaryKey": false,
+          "notNull": true,
+          "default": true
+        },
+        "is_default": {
+          "name": "is_default",
+          "type": "boolean",
+          "primaryKey": false,
+          "notNull": true,
+          "default": false
+        },
+        "priority": {
+          "name": "priority",
+          "type": "integer",
+          "primaryKey": false,
+          "notNull": true,
+          "default": 0
+        },
+        "created_at": {
+          "name": "created_at",
+          "type": "timestamp with time zone",
+          "primaryKey": false,
+          "notNull": false,
+          "default": "now()"
+        },
+        "updated_at": {
+          "name": "updated_at",
+          "type": "timestamp with time zone",
+          "primaryKey": false,
+          "notNull": false,
+          "default": "now()"
+        }
+      },
+      "indexes": {
+        "idx_error_rules_enabled": {
+          "name": "idx_error_rules_enabled",
+          "columns": [
+            {
+              "expression": "is_enabled",
+              "isExpression": false,
+              "asc": true,
+              "nulls": "last"
+            },
+            {
+              "expression": "priority",
+              "isExpression": false,
+              "asc": true,
+              "nulls": "last"
+            }
+          ],
+          "isUnique": false,
+          "concurrently": false,
+          "method": "btree",
+          "with": {}
+        },
+        "unique_pattern": {
+          "name": "unique_pattern",
+          "columns": [
+            {
+              "expression": "pattern",
+              "isExpression": false,
+              "asc": true,
+              "nulls": "last"
+            }
+          ],
+          "isUnique": true,
+          "concurrently": false,
+          "method": "btree",
+          "with": {}
+        },
+        "idx_category": {
+          "name": "idx_category",
+          "columns": [
+            {
+              "expression": "category",
+              "isExpression": false,
+              "asc": true,
+              "nulls": "last"
+            }
+          ],
+          "isUnique": false,
+          "concurrently": false,
+          "method": "btree",
+          "with": {}
+        },
+        "idx_match_type": {
+          "name": "idx_match_type",
+          "columns": [
+            {
+              "expression": "match_type",
+              "isExpression": false,
+              "asc": true,
+              "nulls": "last"
+            }
+          ],
+          "isUnique": false,
+          "concurrently": false,
+          "method": "btree",
+          "with": {}
+        }
+      },
+      "foreignKeys": {},
+      "compositePrimaryKeys": {},
+      "uniqueConstraints": {},
+      "policies": {},
+      "checkConstraints": {},
+      "isRLSEnabled": false
+    },
+    "public.keys": {
+      "name": "keys",
+      "schema": "",
+      "columns": {
+        "id": {
+          "name": "id",
+          "type": "serial",
+          "primaryKey": true,
+          "notNull": true
+        },
+        "user_id": {
+          "name": "user_id",
+          "type": "integer",
+          "primaryKey": false,
+          "notNull": true
+        },
+        "key": {
+          "name": "key",
+          "type": "varchar",
+          "primaryKey": false,
+          "notNull": true
+        },
+        "name": {
+          "name": "name",
+          "type": "varchar",
+          "primaryKey": false,
+          "notNull": true
+        },
+        "is_enabled": {
+          "name": "is_enabled",
+          "type": "boolean",
+          "primaryKey": false,
+          "notNull": false,
+          "default": true
+        },
+        "expires_at": {
+          "name": "expires_at",
+          "type": "timestamp",
+          "primaryKey": false,
+          "notNull": false
+        },
+        "can_login_web_ui": {
+          "name": "can_login_web_ui",
+          "type": "boolean",
+          "primaryKey": false,
+          "notNull": false,
+          "default": true
+        },
+        "limit_5h_usd": {
+          "name": "limit_5h_usd",
+          "type": "numeric(10, 2)",
+          "primaryKey": false,
+          "notNull": false
+        },
+        "limit_weekly_usd": {
+          "name": "limit_weekly_usd",
+          "type": "numeric(10, 2)",
+          "primaryKey": false,
+          "notNull": false
+        },
+        "limit_monthly_usd": {
+          "name": "limit_monthly_usd",
+          "type": "numeric(10, 2)",
+          "primaryKey": false,
+          "notNull": false
+        },
+        "limit_concurrent_sessions": {
+          "name": "limit_concurrent_sessions",
+          "type": "integer",
+          "primaryKey": false,
+          "notNull": false,
+          "default": 0
+        },
+        "created_at": {
+          "name": "created_at",
+          "type": "timestamp with time zone",
+          "primaryKey": false,
+          "notNull": false,
+          "default": "now()"
+        },
+        "updated_at": {
+          "name": "updated_at",
+          "type": "timestamp with time zone",
+          "primaryKey": false,
+          "notNull": false,
+          "default": "now()"
+        },
+        "deleted_at": {
+          "name": "deleted_at",
+          "type": "timestamp with time zone",
+          "primaryKey": false,
+          "notNull": false
+        }
+      },
+      "indexes": {
+        "idx_keys_user_id": {
+          "name": "idx_keys_user_id",
+          "columns": [
+            {
+              "expression": "user_id",
+              "isExpression": false,
+              "asc": true,
+              "nulls": "last"
+            }
+          ],
+          "isUnique": false,
+          "concurrently": false,
+          "method": "btree",
+          "with": {}
+        },
+        "idx_keys_created_at": {
+          "name": "idx_keys_created_at",
+          "columns": [
+            {
+              "expression": "created_at",
+              "isExpression": false,
+              "asc": true,
+              "nulls": "last"
+            }
+          ],
+          "isUnique": false,
+          "concurrently": false,
+          "method": "btree",
+          "with": {}
+        },
+        "idx_keys_deleted_at": {
+          "name": "idx_keys_deleted_at",
+          "columns": [
+            {
+              "expression": "deleted_at",
+              "isExpression": false,
+              "asc": true,
+              "nulls": "last"
+            }
+          ],
+          "isUnique": false,
+          "concurrently": false,
+          "method": "btree",
+          "with": {}
+        }
+      },
+      "foreignKeys": {},
+      "compositePrimaryKeys": {},
+      "uniqueConstraints": {},
+      "policies": {},
+      "checkConstraints": {},
+      "isRLSEnabled": false
+    },
+    "public.message_request": {
+      "name": "message_request",
+      "schema": "",
+      "columns": {
+        "id": {
+          "name": "id",
+          "type": "serial",
+          "primaryKey": true,
+          "notNull": true
+        },
+        "provider_id": {
+          "name": "provider_id",
+          "type": "integer",
+          "primaryKey": false,
+          "notNull": true
+        },
+        "user_id": {
+          "name": "user_id",
+          "type": "integer",
+          "primaryKey": false,
+          "notNull": true
+        },
+        "key": {
+          "name": "key",
+          "type": "varchar",
+          "primaryKey": false,
+          "notNull": true
+        },
+        "model": {
+          "name": "model",
+          "type": "varchar(128)",
+          "primaryKey": false,
+          "notNull": false
+        },
+        "duration_ms": {
+          "name": "duration_ms",
+          "type": "integer",
+          "primaryKey": false,
+          "notNull": false
+        },
+        "cost_usd": {
+          "name": "cost_usd",
+          "type": "numeric(21, 15)",
+          "primaryKey": false,
+          "notNull": false,
+          "default": "'0'"
+        },
+        "cost_multiplier": {
+          "name": "cost_multiplier",
+          "type": "numeric(10, 4)",
+          "primaryKey": false,
+          "notNull": false
+        },
+        "session_id": {
+          "name": "session_id",
+          "type": "varchar(64)",
+          "primaryKey": false,
+          "notNull": false
+        },
+        "provider_chain": {
+          "name": "provider_chain",
+          "type": "jsonb",
+          "primaryKey": false,
+          "notNull": false
+        },
+        "status_code": {
+          "name": "status_code",
+          "type": "integer",
+          "primaryKey": false,
+          "notNull": false
+        },
+        "api_type": {
+          "name": "api_type",
+          "type": "varchar(20)",
+          "primaryKey": false,
+          "notNull": false
+        },
+        "endpoint": {
+          "name": "endpoint",
+          "type": "varchar(256)",
+          "primaryKey": false,
+          "notNull": false
+        },
+        "original_model": {
+          "name": "original_model",
+          "type": "varchar(128)",
+          "primaryKey": false,
+          "notNull": false
+        },
+        "input_tokens": {
+          "name": "input_tokens",
+          "type": "integer",
+          "primaryKey": false,
+          "notNull": false
+        },
+        "output_tokens": {
+          "name": "output_tokens",
+          "type": "integer",
+          "primaryKey": false,
+          "notNull": false
+        },
+        "cache_creation_input_tokens": {
+          "name": "cache_creation_input_tokens",
+          "type": "integer",
+          "primaryKey": false,
+          "notNull": false
+        },
+        "cache_read_input_tokens": {
+          "name": "cache_read_input_tokens",
+          "type": "integer",
+          "primaryKey": false,
+          "notNull": false
+        },
+        "error_message": {
+          "name": "error_message",
+          "type": "text",
+          "primaryKey": false,
+          "notNull": false
+        },
+        "blocked_by": {
+          "name": "blocked_by",
+          "type": "varchar(50)",
+          "primaryKey": false,
+          "notNull": false
+        },
+        "blocked_reason": {
+          "name": "blocked_reason",
+          "type": "text",
+          "primaryKey": false,
+          "notNull": false
+        },
+        "user_agent": {
+          "name": "user_agent",
+          "type": "varchar(512)",
+          "primaryKey": false,
+          "notNull": false
+        },
+        "messages_count": {
+          "name": "messages_count",
+          "type": "integer",
+          "primaryKey": false,
+          "notNull": false
+        },
+        "created_at": {
+          "name": "created_at",
+          "type": "timestamp with time zone",
+          "primaryKey": false,
+          "notNull": false,
+          "default": "now()"
+        },
+        "updated_at": {
+          "name": "updated_at",
+          "type": "timestamp with time zone",
+          "primaryKey": false,
+          "notNull": false,
+          "default": "now()"
+        },
+        "deleted_at": {
+          "name": "deleted_at",
+          "type": "timestamp with time zone",
+          "primaryKey": false,
+          "notNull": false
+        }
+      },
+      "indexes": {
+        "idx_message_request_user_date_cost": {
+          "name": "idx_message_request_user_date_cost",
+          "columns": [
+            {
+              "expression": "user_id",
+              "isExpression": false,
+              "asc": true,
+              "nulls": "last"
+            },
+            {
+              "expression": "created_at",
+              "isExpression": false,
+              "asc": true,
+              "nulls": "last"
+            },
+            {
+              "expression": "cost_usd",
+              "isExpression": false,
+              "asc": true,
+              "nulls": "last"
+            }
+          ],
+          "isUnique": false,
+          "where": "\"message_request\".\"deleted_at\" IS NULL",
+          "concurrently": false,
+          "method": "btree",
+          "with": {}
+        },
+        "idx_message_request_user_query": {
+          "name": "idx_message_request_user_query",
+          "columns": [
+            {
+              "expression": "user_id",
+              "isExpression": false,
+              "asc": true,
+              "nulls": "last"
+            },
+            {
+              "expression": "created_at",
+              "isExpression": false,
+              "asc": true,
+              "nulls": "last"
+            }
+          ],
+          "isUnique": false,
+          "where": "\"message_request\".\"deleted_at\" IS NULL",
+          "concurrently": false,
+          "method": "btree",
+          "with": {}
+        },
+        "idx_message_request_session_id": {
+          "name": "idx_message_request_session_id",
+          "columns": [
+            {
+              "expression": "session_id",
+              "isExpression": false,
+              "asc": true,
+              "nulls": "last"
+            }
+          ],
+          "isUnique": false,
+          "where": "\"message_request\".\"deleted_at\" IS NULL",
+          "concurrently": false,
+          "method": "btree",
+          "with": {}
+        },
+        "idx_message_request_endpoint": {
+          "name": "idx_message_request_endpoint",
+          "columns": [
+            {
+              "expression": "endpoint",
+              "isExpression": false,
+              "asc": true,
+              "nulls": "last"
+            }
+          ],
+          "isUnique": false,
+          "where": "\"message_request\".\"deleted_at\" IS NULL",
+          "concurrently": false,
+          "method": "btree",
+          "with": {}
+        },
+        "idx_message_request_provider_id": {
+          "name": "idx_message_request_provider_id",
+          "columns": [
+            {
+              "expression": "provider_id",
+              "isExpression": false,
+              "asc": true,
+              "nulls": "last"
+            }
+          ],
+          "isUnique": false,
+          "concurrently": false,
+          "method": "btree",
+          "with": {}
+        },
+        "idx_message_request_user_id": {
+          "name": "idx_message_request_user_id",
+          "columns": [
+            {
+              "expression": "user_id",
+              "isExpression": false,
+              "asc": true,
+              "nulls": "last"
+            }
+          ],
+          "isUnique": false,
+          "concurrently": false,
+          "method": "btree",
+          "with": {}
+        },
+        "idx_message_request_key": {
+          "name": "idx_message_request_key",
+          "columns": [
+            {
+              "expression": "key",
+              "isExpression": false,
+              "asc": true,
+              "nulls": "last"
+            }
+          ],
+          "isUnique": false,
+          "concurrently": false,
+          "method": "btree",
+          "with": {}
+        },
+        "idx_message_request_created_at": {
+          "name": "idx_message_request_created_at",
+          "columns": [
+            {
+              "expression": "created_at",
+              "isExpression": false,
+              "asc": true,
+              "nulls": "last"
+            }
+          ],
+          "isUnique": false,
+          "concurrently": false,
+          "method": "btree",
+          "with": {}
+        },
+        "idx_message_request_deleted_at": {
+          "name": "idx_message_request_deleted_at",
+          "columns": [
+            {
+              "expression": "deleted_at",
+              "isExpression": false,
+              "asc": true,
+              "nulls": "last"
+            }
+          ],
+          "isUnique": false,
+          "concurrently": false,
+          "method": "btree",
+          "with": {}
+        }
+      },
+      "foreignKeys": {},
+      "compositePrimaryKeys": {},
+      "uniqueConstraints": {},
+      "policies": {},
+      "checkConstraints": {},
+      "isRLSEnabled": false
+    },
+    "public.model_prices": {
+      "name": "model_prices",
+      "schema": "",
+      "columns": {
+        "id": {
+          "name": "id",
+          "type": "serial",
+          "primaryKey": true,
+          "notNull": true
+        },
+        "model_name": {
+          "name": "model_name",
+          "type": "varchar",
+          "primaryKey": false,
+          "notNull": true
+        },
+        "price_data": {
+          "name": "price_data",
+          "type": "jsonb",
+          "primaryKey": false,
+          "notNull": true
+        },
+        "created_at": {
+          "name": "created_at",
+          "type": "timestamp with time zone",
+          "primaryKey": false,
+          "notNull": false,
+          "default": "now()"
+        },
+        "updated_at": {
+          "name": "updated_at",
+          "type": "timestamp with time zone",
+          "primaryKey": false,
+          "notNull": false,
+          "default": "now()"
+        }
+      },
+      "indexes": {
+        "idx_model_prices_latest": {
+          "name": "idx_model_prices_latest",
+          "columns": [
+            {
+              "expression": "model_name",
+              "isExpression": false,
+              "asc": true,
+              "nulls": "last"
+            },
+            {
+              "expression": "created_at",
+              "isExpression": false,
+              "asc": false,
+              "nulls": "last"
+            }
+          ],
+          "isUnique": false,
+          "concurrently": false,
+          "method": "btree",
+          "with": {}
+        },
+        "idx_model_prices_model_name": {
+          "name": "idx_model_prices_model_name",
+          "columns": [
+            {
+              "expression": "model_name",
+              "isExpression": false,
+              "asc": true,
+              "nulls": "last"
+            }
+          ],
+          "isUnique": false,
+          "concurrently": false,
+          "method": "btree",
+          "with": {}
+        },
+        "idx_model_prices_created_at": {
+          "name": "idx_model_prices_created_at",
+          "columns": [
+            {
+              "expression": "created_at",
+              "isExpression": false,
+              "asc": false,
+              "nulls": "last"
+            }
+          ],
+          "isUnique": false,
+          "concurrently": false,
+          "method": "btree",
+          "with": {}
+        }
+      },
+      "foreignKeys": {},
+      "compositePrimaryKeys": {},
+      "uniqueConstraints": {},
+      "policies": {},
+      "checkConstraints": {},
+      "isRLSEnabled": false
+    },
+    "public.notification_settings": {
+      "name": "notification_settings",
+      "schema": "",
+      "columns": {
+        "id": {
+          "name": "id",
+          "type": "serial",
+          "primaryKey": true,
+          "notNull": true
+        },
+        "enabled": {
+          "name": "enabled",
+          "type": "boolean",
+          "primaryKey": false,
+          "notNull": true,
+          "default": false
+        },
+        "circuit_breaker_enabled": {
+          "name": "circuit_breaker_enabled",
+          "type": "boolean",
+          "primaryKey": false,
+          "notNull": true,
+          "default": false
+        },
+        "circuit_breaker_webhook": {
+          "name": "circuit_breaker_webhook",
+          "type": "varchar(512)",
+          "primaryKey": false,
+          "notNull": false
+        },
+        "daily_leaderboard_enabled": {
+          "name": "daily_leaderboard_enabled",
+          "type": "boolean",
+          "primaryKey": false,
+          "notNull": true,
+          "default": false
+        },
+        "daily_leaderboard_webhook": {
+          "name": "daily_leaderboard_webhook",
+          "type": "varchar(512)",
+          "primaryKey": false,
+          "notNull": false
+        },
+        "daily_leaderboard_time": {
+          "name": "daily_leaderboard_time",
+          "type": "varchar(10)",
+          "primaryKey": false,
+          "notNull": false,
+          "default": "'09:00'"
+        },
+        "daily_leaderboard_top_n": {
+          "name": "daily_leaderboard_top_n",
+          "type": "integer",
+          "primaryKey": false,
+          "notNull": false,
+          "default": 5
+        },
+        "cost_alert_enabled": {
+          "name": "cost_alert_enabled",
+          "type": "boolean",
+          "primaryKey": false,
+          "notNull": true,
+          "default": false
+        },
+        "cost_alert_webhook": {
+          "name": "cost_alert_webhook",
+          "type": "varchar(512)",
+          "primaryKey": false,
+          "notNull": false
+        },
+        "cost_alert_threshold": {
+          "name": "cost_alert_threshold",
+          "type": "numeric(5, 2)",
+          "primaryKey": false,
+          "notNull": false,
+          "default": "'0.80'"
+        },
+        "cost_alert_check_interval": {
+          "name": "cost_alert_check_interval",
+          "type": "integer",
+          "primaryKey": false,
+          "notNull": false,
+          "default": 60
+        },
+        "created_at": {
+          "name": "created_at",
+          "type": "timestamp with time zone",
+          "primaryKey": false,
+          "notNull": false,
+          "default": "now()"
+        },
+        "updated_at": {
+          "name": "updated_at",
+          "type": "timestamp with time zone",
+          "primaryKey": false,
+          "notNull": false,
+          "default": "now()"
+        }
+      },
+      "indexes": {},
+      "foreignKeys": {},
+      "compositePrimaryKeys": {},
+      "uniqueConstraints": {},
+      "policies": {},
+      "checkConstraints": {},
+      "isRLSEnabled": false
+    },
+    "public.providers": {
+      "name": "providers",
+      "schema": "",
+      "columns": {
+        "id": {
+          "name": "id",
+          "type": "serial",
+          "primaryKey": true,
+          "notNull": true
+        },
+        "name": {
+          "name": "name",
+          "type": "varchar",
+          "primaryKey": false,
+          "notNull": true
+        },
+        "description": {
+          "name": "description",
+          "type": "text",
+          "primaryKey": false,
+          "notNull": false
+        },
+        "url": {
+          "name": "url",
+          "type": "varchar",
+          "primaryKey": false,
+          "notNull": true
+        },
+        "key": {
+          "name": "key",
+          "type": "varchar",
+          "primaryKey": false,
+          "notNull": true
+        },
+        "is_enabled": {
+          "name": "is_enabled",
+          "type": "boolean",
+          "primaryKey": false,
+          "notNull": true,
+          "default": true
+        },
+        "weight": {
+          "name": "weight",
+          "type": "integer",
+          "primaryKey": false,
+          "notNull": true,
+          "default": 1
+        },
+        "priority": {
+          "name": "priority",
+          "type": "integer",
+          "primaryKey": false,
+          "notNull": true,
+          "default": 0
+        },
+        "cost_multiplier": {
+          "name": "cost_multiplier",
+          "type": "numeric(10, 4)",
+          "primaryKey": false,
+          "notNull": false,
+          "default": "'1.0'"
+        },
+        "group_tag": {
+          "name": "group_tag",
+          "type": "varchar(50)",
+          "primaryKey": false,
+          "notNull": false
+        },
+        "provider_type": {
+          "name": "provider_type",
+          "type": "varchar(20)",
+          "primaryKey": false,
+          "notNull": true,
+          "default": "'claude'"
+        },
+        "model_redirects": {
+          "name": "model_redirects",
+          "type": "jsonb",
+          "primaryKey": false,
+          "notNull": false
+        },
+        "allowed_models": {
+          "name": "allowed_models",
+          "type": "jsonb",
+          "primaryKey": false,
+          "notNull": false,
+          "default": "'null'::jsonb"
+        },
+        "join_claude_pool": {
+          "name": "join_claude_pool",
+          "type": "boolean",
+          "primaryKey": false,
+          "notNull": false,
+          "default": false
+        },
+        "codex_instructions_strategy": {
+          "name": "codex_instructions_strategy",
+          "type": "varchar(20)",
+          "primaryKey": false,
+          "notNull": false,
+          "default": "'auto'"
+        },
+        "limit_5h_usd": {
+          "name": "limit_5h_usd",
+          "type": "numeric(10, 2)",
+          "primaryKey": false,
+          "notNull": false
+        },
+        "limit_weekly_usd": {
+          "name": "limit_weekly_usd",
+          "type": "numeric(10, 2)",
+          "primaryKey": false,
+          "notNull": false
+        },
+        "limit_monthly_usd": {
+          "name": "limit_monthly_usd",
+          "type": "numeric(10, 2)",
+          "primaryKey": false,
+          "notNull": false
+        },
+        "limit_concurrent_sessions": {
+          "name": "limit_concurrent_sessions",
+          "type": "integer",
+          "primaryKey": false,
+          "notNull": false,
+          "default": 0
+        },
+        "circuit_breaker_failure_threshold": {
+          "name": "circuit_breaker_failure_threshold",
+          "type": "integer",
+          "primaryKey": false,
+          "notNull": false,
+          "default": 5
+        },
+        "circuit_breaker_open_duration": {
+          "name": "circuit_breaker_open_duration",
+          "type": "integer",
+          "primaryKey": false,
+          "notNull": false,
+          "default": 1800000
+        },
+        "circuit_breaker_half_open_success_threshold": {
+          "name": "circuit_breaker_half_open_success_threshold",
+          "type": "integer",
+          "primaryKey": false,
+          "notNull": false,
+          "default": 2
+        },
+        "proxy_url": {
+          "name": "proxy_url",
+          "type": "varchar(512)",
+          "primaryKey": false,
+          "notNull": false
+        },
+        "proxy_fallback_to_direct": {
+          "name": "proxy_fallback_to_direct",
+          "type": "boolean",
+          "primaryKey": false,
+          "notNull": false,
+          "default": false
+        },
+        "website_url": {
+          "name": "website_url",
+          "type": "text",
+          "primaryKey": false,
+          "notNull": false
+        },
+        "favicon_url": {
+          "name": "favicon_url",
+          "type": "text",
+          "primaryKey": false,
+          "notNull": false
+        },
+        "tpm": {
+          "name": "tpm",
+          "type": "integer",
+          "primaryKey": false,
+          "notNull": false,
+          "default": 0
+        },
+        "rpm": {
+          "name": "rpm",
+          "type": "integer",
+          "primaryKey": false,
+          "notNull": false,
+          "default": 0
+        },
+        "rpd": {
+          "name": "rpd",
+          "type": "integer",
+          "primaryKey": false,
+          "notNull": false,
+          "default": 0
+        },
+        "cc": {
+          "name": "cc",
+          "type": "integer",
+          "primaryKey": false,
+          "notNull": false,
+          "default": 0
+        },
+        "created_at": {
+          "name": "created_at",
+          "type": "timestamp with time zone",
+          "primaryKey": false,
+          "notNull": false,
+          "default": "now()"
+        },
+        "updated_at": {
+          "name": "updated_at",
+          "type": "timestamp with time zone",
+          "primaryKey": false,
+          "notNull": false,
+          "default": "now()"
+        },
+        "deleted_at": {
+          "name": "deleted_at",
+          "type": "timestamp with time zone",
+          "primaryKey": false,
+          "notNull": false
+        }
+      },
+      "indexes": {
+        "idx_providers_enabled_priority": {
+          "name": "idx_providers_enabled_priority",
+          "columns": [
+            {
+              "expression": "is_enabled",
+              "isExpression": false,
+              "asc": true,
+              "nulls": "last"
+            },
+            {
+              "expression": "priority",
+              "isExpression": false,
+              "asc": true,
+              "nulls": "last"
+            },
+            {
+              "expression": "weight",
+              "isExpression": false,
+              "asc": true,
+              "nulls": "last"
+            }
+          ],
+          "isUnique": false,
+          "where": "\"providers\".\"deleted_at\" IS NULL",
+          "concurrently": false,
+          "method": "btree",
+          "with": {}
+        },
+        "idx_providers_group": {
+          "name": "idx_providers_group",
+          "columns": [
+            {
+              "expression": "group_tag",
+              "isExpression": false,
+              "asc": true,
+              "nulls": "last"
+            }
+          ],
+          "isUnique": false,
+          "where": "\"providers\".\"deleted_at\" IS NULL",
+          "concurrently": false,
+          "method": "btree",
+          "with": {}
+        },
+        "idx_providers_created_at": {
+          "name": "idx_providers_created_at",
+          "columns": [
+            {
+              "expression": "created_at",
+              "isExpression": false,
+              "asc": true,
+              "nulls": "last"
+            }
+          ],
+          "isUnique": false,
+          "concurrently": false,
+          "method": "btree",
+          "with": {}
+        },
+        "idx_providers_deleted_at": {
+          "name": "idx_providers_deleted_at",
+          "columns": [
+            {
+              "expression": "deleted_at",
+              "isExpression": false,
+              "asc": true,
+              "nulls": "last"
+            }
+          ],
+          "isUnique": false,
+          "concurrently": false,
+          "method": "btree",
+          "with": {}
+        }
+      },
+      "foreignKeys": {},
+      "compositePrimaryKeys": {},
+      "uniqueConstraints": {},
+      "policies": {},
+      "checkConstraints": {},
+      "isRLSEnabled": false
+    },
+    "public.sensitive_words": {
+      "name": "sensitive_words",
+      "schema": "",
+      "columns": {
+        "id": {
+          "name": "id",
+          "type": "serial",
+          "primaryKey": true,
+          "notNull": true
+        },
+        "word": {
+          "name": "word",
+          "type": "varchar(255)",
+          "primaryKey": false,
+          "notNull": true
+        },
+        "match_type": {
+          "name": "match_type",
+          "type": "varchar(20)",
+          "primaryKey": false,
+          "notNull": true,
+          "default": "'contains'"
+        },
+        "description": {
+          "name": "description",
+          "type": "text",
+          "primaryKey": false,
+          "notNull": false
+        },
+        "is_enabled": {
+          "name": "is_enabled",
+          "type": "boolean",
+          "primaryKey": false,
+          "notNull": true,
+          "default": true
+        },
+        "created_at": {
+          "name": "created_at",
+          "type": "timestamp with time zone",
+          "primaryKey": false,
+          "notNull": false,
+          "default": "now()"
+        },
+        "updated_at": {
+          "name": "updated_at",
+          "type": "timestamp with time zone",
+          "primaryKey": false,
+          "notNull": false,
+          "default": "now()"
+        }
+      },
+      "indexes": {
+        "idx_sensitive_words_enabled": {
+          "name": "idx_sensitive_words_enabled",
+          "columns": [
+            {
+              "expression": "is_enabled",
+              "isExpression": false,
+              "asc": true,
+              "nulls": "last"
+            },
+            {
+              "expression": "match_type",
+              "isExpression": false,
+              "asc": true,
+              "nulls": "last"
+            }
+          ],
+          "isUnique": false,
+          "concurrently": false,
+          "method": "btree",
+          "with": {}
+        },
+        "idx_sensitive_words_created_at": {
+          "name": "idx_sensitive_words_created_at",
+          "columns": [
+            {
+              "expression": "created_at",
+              "isExpression": false,
+              "asc": true,
+              "nulls": "last"
+            }
+          ],
+          "isUnique": false,
+          "concurrently": false,
+          "method": "btree",
+          "with": {}
+        }
+      },
+      "foreignKeys": {},
+      "compositePrimaryKeys": {},
+      "uniqueConstraints": {},
+      "policies": {},
+      "checkConstraints": {},
+      "isRLSEnabled": false
+    },
+    "public.system_settings": {
+      "name": "system_settings",
+      "schema": "",
+      "columns": {
+        "id": {
+          "name": "id",
+          "type": "serial",
+          "primaryKey": true,
+          "notNull": true
+        },
+        "site_title": {
+          "name": "site_title",
+          "type": "varchar(128)",
+          "primaryKey": false,
+          "notNull": true,
+          "default": "'Claude Code Hub'"
+        },
+        "allow_global_usage_view": {
+          "name": "allow_global_usage_view",
+          "type": "boolean",
+          "primaryKey": false,
+          "notNull": true,
+          "default": false
+        },
+        "currency_display": {
+          "name": "currency_display",
+          "type": "varchar(10)",
+          "primaryKey": false,
+          "notNull": true,
+          "default": "'USD'"
+        },
+        "enable_auto_cleanup": {
+          "name": "enable_auto_cleanup",
+          "type": "boolean",
+          "primaryKey": false,
+          "notNull": false,
+          "default": false
+        },
+        "cleanup_retention_days": {
+          "name": "cleanup_retention_days",
+          "type": "integer",
+          "primaryKey": false,
+          "notNull": false,
+          "default": 30
+        },
+        "cleanup_schedule": {
+          "name": "cleanup_schedule",
+          "type": "varchar(50)",
+          "primaryKey": false,
+          "notNull": false,
+          "default": "'0 2 * * *'"
+        },
+        "cleanup_batch_size": {
+          "name": "cleanup_batch_size",
+          "type": "integer",
+          "primaryKey": false,
+          "notNull": false,
+          "default": 10000
+        },
+        "enable_client_version_check": {
+          "name": "enable_client_version_check",
+          "type": "boolean",
+          "primaryKey": false,
+          "notNull": true,
+          "default": false
+        },
+        "created_at": {
+          "name": "created_at",
+          "type": "timestamp with time zone",
+          "primaryKey": false,
+          "notNull": false,
+          "default": "now()"
+        },
+        "updated_at": {
+          "name": "updated_at",
+          "type": "timestamp with time zone",
+          "primaryKey": false,
+          "notNull": false,
+          "default": "now()"
+        }
+      },
+      "indexes": {},
+      "foreignKeys": {},
+      "compositePrimaryKeys": {},
+      "uniqueConstraints": {},
+      "policies": {},
+      "checkConstraints": {},
+      "isRLSEnabled": false
+    },
+    "public.users": {
+      "name": "users",
+      "schema": "",
+      "columns": {
+        "id": {
+          "name": "id",
+          "type": "serial",
+          "primaryKey": true,
+          "notNull": true
+        },
+        "name": {
+          "name": "name",
+          "type": "varchar",
+          "primaryKey": false,
+          "notNull": true
+        },
+        "description": {
+          "name": "description",
+          "type": "text",
+          "primaryKey": false,
+          "notNull": false
+        },
+        "role": {
+          "name": "role",
+          "type": "varchar",
+          "primaryKey": false,
+          "notNull": false,
+          "default": "'user'"
+        },
+        "rpm_limit": {
+          "name": "rpm_limit",
+          "type": "integer",
+          "primaryKey": false,
+          "notNull": false,
+          "default": 60
+        },
+        "daily_limit_usd": {
+          "name": "daily_limit_usd",
+          "type": "numeric(10, 2)",
+          "primaryKey": false,
+          "notNull": false,
+          "default": "'100.00'"
+        },
+        "provider_group": {
+          "name": "provider_group",
+          "type": "varchar(50)",
+          "primaryKey": false,
+          "notNull": false
+        },
+        "created_at": {
+          "name": "created_at",
+          "type": "timestamp with time zone",
+          "primaryKey": false,
+          "notNull": false,
+          "default": "now()"
+        },
+        "updated_at": {
+          "name": "updated_at",
+          "type": "timestamp with time zone",
+          "primaryKey": false,
+          "notNull": false,
+          "default": "now()"
+        },
+        "deleted_at": {
+          "name": "deleted_at",
+          "type": "timestamp with time zone",
+          "primaryKey": false,
+          "notNull": false
+        }
+      },
+      "indexes": {
+        "idx_users_active_role_sort": {
+          "name": "idx_users_active_role_sort",
+          "columns": [
+            {
+              "expression": "deleted_at",
+              "isExpression": false,
+              "asc": true,
+              "nulls": "last"
+            },
+            {
+              "expression": "role",
+              "isExpression": false,
+              "asc": true,
+              "nulls": "last"
+            },
+            {
+              "expression": "id",
+              "isExpression": false,
+              "asc": true,
+              "nulls": "last"
+            }
+          ],
+          "isUnique": false,
+          "where": "\"users\".\"deleted_at\" IS NULL",
+          "concurrently": false,
+          "method": "btree",
+          "with": {}
+        },
+        "idx_users_created_at": {
+          "name": "idx_users_created_at",
+          "columns": [
+            {
+              "expression": "created_at",
+              "isExpression": false,
+              "asc": true,
+              "nulls": "last"
+            }
+          ],
+          "isUnique": false,
+          "concurrently": false,
+          "method": "btree",
+          "with": {}
+        },
+        "idx_users_deleted_at": {
+          "name": "idx_users_deleted_at",
+          "columns": [
+            {
+              "expression": "deleted_at",
+              "isExpression": false,
+              "asc": true,
+              "nulls": "last"
+            }
+          ],
+          "isUnique": false,
+          "concurrently": false,
+          "method": "btree",
+          "with": {}
+        }
+      },
+      "foreignKeys": {},
+      "compositePrimaryKeys": {},
+      "uniqueConstraints": {},
+      "policies": {},
+      "checkConstraints": {},
+      "isRLSEnabled": false
+    }
+  },
+  "enums": {},
+  "schemas": {},
+  "sequences": {},
+  "roles": {},
+  "policies": {},
+  "views": {},
+  "_meta": {
+    "columns": {},
+    "schemas": {},
+    "tables": {}
+  }
+}

+ 1495 - 0
drizzle/meta/0019_snapshot.json

@@ -0,0 +1,1495 @@
+{
+  "id": "4ba39e7a-e353-4ed1-8e18-934a56fb0af6",
+  "prevId": "dcbbb4ef-507a-41b9-81e6-ebd68d37dad8",
+  "version": "7",
+  "dialect": "postgresql",
+  "tables": {
+    "public.error_rules": {
+      "name": "error_rules",
+      "schema": "",
+      "columns": {
+        "id": {
+          "name": "id",
+          "type": "serial",
+          "primaryKey": true,
+          "notNull": true
+        },
+        "pattern": {
+          "name": "pattern",
+          "type": "text",
+          "primaryKey": false,
+          "notNull": true
+        },
+        "match_type": {
+          "name": "match_type",
+          "type": "varchar(20)",
+          "primaryKey": false,
+          "notNull": true,
+          "default": "'regex'"
+        },
+        "category": {
+          "name": "category",
+          "type": "varchar(50)",
+          "primaryKey": false,
+          "notNull": true
+        },
+        "description": {
+          "name": "description",
+          "type": "text",
+          "primaryKey": false,
+          "notNull": false
+        },
+        "is_enabled": {
+          "name": "is_enabled",
+          "type": "boolean",
+          "primaryKey": false,
+          "notNull": true,
+          "default": true
+        },
+        "is_default": {
+          "name": "is_default",
+          "type": "boolean",
+          "primaryKey": false,
+          "notNull": true,
+          "default": false
+        },
+        "priority": {
+          "name": "priority",
+          "type": "integer",
+          "primaryKey": false,
+          "notNull": true,
+          "default": 0
+        },
+        "created_at": {
+          "name": "created_at",
+          "type": "timestamp with time zone",
+          "primaryKey": false,
+          "notNull": false,
+          "default": "now()"
+        },
+        "updated_at": {
+          "name": "updated_at",
+          "type": "timestamp with time zone",
+          "primaryKey": false,
+          "notNull": false,
+          "default": "now()"
+        }
+      },
+      "indexes": {
+        "idx_error_rules_enabled": {
+          "name": "idx_error_rules_enabled",
+          "columns": [
+            {
+              "expression": "is_enabled",
+              "isExpression": false,
+              "asc": true,
+              "nulls": "last"
+            },
+            {
+              "expression": "priority",
+              "isExpression": false,
+              "asc": true,
+              "nulls": "last"
+            }
+          ],
+          "isUnique": false,
+          "concurrently": false,
+          "method": "btree",
+          "with": {}
+        },
+        "unique_pattern": {
+          "name": "unique_pattern",
+          "columns": [
+            {
+              "expression": "pattern",
+              "isExpression": false,
+              "asc": true,
+              "nulls": "last"
+            }
+          ],
+          "isUnique": true,
+          "concurrently": false,
+          "method": "btree",
+          "with": {}
+        },
+        "idx_category": {
+          "name": "idx_category",
+          "columns": [
+            {
+              "expression": "category",
+              "isExpression": false,
+              "asc": true,
+              "nulls": "last"
+            }
+          ],
+          "isUnique": false,
+          "concurrently": false,
+          "method": "btree",
+          "with": {}
+        },
+        "idx_match_type": {
+          "name": "idx_match_type",
+          "columns": [
+            {
+              "expression": "match_type",
+              "isExpression": false,
+              "asc": true,
+              "nulls": "last"
+            }
+          ],
+          "isUnique": false,
+          "concurrently": false,
+          "method": "btree",
+          "with": {}
+        }
+      },
+      "foreignKeys": {},
+      "compositePrimaryKeys": {},
+      "uniqueConstraints": {},
+      "policies": {},
+      "checkConstraints": {},
+      "isRLSEnabled": false
+    },
+    "public.keys": {
+      "name": "keys",
+      "schema": "",
+      "columns": {
+        "id": {
+          "name": "id",
+          "type": "serial",
+          "primaryKey": true,
+          "notNull": true
+        },
+        "user_id": {
+          "name": "user_id",
+          "type": "integer",
+          "primaryKey": false,
+          "notNull": true
+        },
+        "key": {
+          "name": "key",
+          "type": "varchar",
+          "primaryKey": false,
+          "notNull": true
+        },
+        "name": {
+          "name": "name",
+          "type": "varchar",
+          "primaryKey": false,
+          "notNull": true
+        },
+        "is_enabled": {
+          "name": "is_enabled",
+          "type": "boolean",
+          "primaryKey": false,
+          "notNull": false,
+          "default": true
+        },
+        "expires_at": {
+          "name": "expires_at",
+          "type": "timestamp",
+          "primaryKey": false,
+          "notNull": false
+        },
+        "can_login_web_ui": {
+          "name": "can_login_web_ui",
+          "type": "boolean",
+          "primaryKey": false,
+          "notNull": false,
+          "default": true
+        },
+        "limit_5h_usd": {
+          "name": "limit_5h_usd",
+          "type": "numeric(10, 2)",
+          "primaryKey": false,
+          "notNull": false
+        },
+        "limit_weekly_usd": {
+          "name": "limit_weekly_usd",
+          "type": "numeric(10, 2)",
+          "primaryKey": false,
+          "notNull": false
+        },
+        "limit_monthly_usd": {
+          "name": "limit_monthly_usd",
+          "type": "numeric(10, 2)",
+          "primaryKey": false,
+          "notNull": false
+        },
+        "limit_concurrent_sessions": {
+          "name": "limit_concurrent_sessions",
+          "type": "integer",
+          "primaryKey": false,
+          "notNull": false,
+          "default": 0
+        },
+        "created_at": {
+          "name": "created_at",
+          "type": "timestamp with time zone",
+          "primaryKey": false,
+          "notNull": false,
+          "default": "now()"
+        },
+        "updated_at": {
+          "name": "updated_at",
+          "type": "timestamp with time zone",
+          "primaryKey": false,
+          "notNull": false,
+          "default": "now()"
+        },
+        "deleted_at": {
+          "name": "deleted_at",
+          "type": "timestamp with time zone",
+          "primaryKey": false,
+          "notNull": false
+        }
+      },
+      "indexes": {
+        "idx_keys_user_id": {
+          "name": "idx_keys_user_id",
+          "columns": [
+            {
+              "expression": "user_id",
+              "isExpression": false,
+              "asc": true,
+              "nulls": "last"
+            }
+          ],
+          "isUnique": false,
+          "concurrently": false,
+          "method": "btree",
+          "with": {}
+        },
+        "idx_keys_created_at": {
+          "name": "idx_keys_created_at",
+          "columns": [
+            {
+              "expression": "created_at",
+              "isExpression": false,
+              "asc": true,
+              "nulls": "last"
+            }
+          ],
+          "isUnique": false,
+          "concurrently": false,
+          "method": "btree",
+          "with": {}
+        },
+        "idx_keys_deleted_at": {
+          "name": "idx_keys_deleted_at",
+          "columns": [
+            {
+              "expression": "deleted_at",
+              "isExpression": false,
+              "asc": true,
+              "nulls": "last"
+            }
+          ],
+          "isUnique": false,
+          "concurrently": false,
+          "method": "btree",
+          "with": {}
+        }
+      },
+      "foreignKeys": {},
+      "compositePrimaryKeys": {},
+      "uniqueConstraints": {},
+      "policies": {},
+      "checkConstraints": {},
+      "isRLSEnabled": false
+    },
+    "public.message_request": {
+      "name": "message_request",
+      "schema": "",
+      "columns": {
+        "id": {
+          "name": "id",
+          "type": "serial",
+          "primaryKey": true,
+          "notNull": true
+        },
+        "provider_id": {
+          "name": "provider_id",
+          "type": "integer",
+          "primaryKey": false,
+          "notNull": true
+        },
+        "user_id": {
+          "name": "user_id",
+          "type": "integer",
+          "primaryKey": false,
+          "notNull": true
+        },
+        "key": {
+          "name": "key",
+          "type": "varchar",
+          "primaryKey": false,
+          "notNull": true
+        },
+        "model": {
+          "name": "model",
+          "type": "varchar(128)",
+          "primaryKey": false,
+          "notNull": false
+        },
+        "duration_ms": {
+          "name": "duration_ms",
+          "type": "integer",
+          "primaryKey": false,
+          "notNull": false
+        },
+        "cost_usd": {
+          "name": "cost_usd",
+          "type": "numeric(21, 15)",
+          "primaryKey": false,
+          "notNull": false,
+          "default": "'0'"
+        },
+        "cost_multiplier": {
+          "name": "cost_multiplier",
+          "type": "numeric(10, 4)",
+          "primaryKey": false,
+          "notNull": false
+        },
+        "session_id": {
+          "name": "session_id",
+          "type": "varchar(64)",
+          "primaryKey": false,
+          "notNull": false
+        },
+        "provider_chain": {
+          "name": "provider_chain",
+          "type": "jsonb",
+          "primaryKey": false,
+          "notNull": false
+        },
+        "status_code": {
+          "name": "status_code",
+          "type": "integer",
+          "primaryKey": false,
+          "notNull": false
+        },
+        "api_type": {
+          "name": "api_type",
+          "type": "varchar(20)",
+          "primaryKey": false,
+          "notNull": false
+        },
+        "endpoint": {
+          "name": "endpoint",
+          "type": "varchar(256)",
+          "primaryKey": false,
+          "notNull": false
+        },
+        "original_model": {
+          "name": "original_model",
+          "type": "varchar(128)",
+          "primaryKey": false,
+          "notNull": false
+        },
+        "input_tokens": {
+          "name": "input_tokens",
+          "type": "integer",
+          "primaryKey": false,
+          "notNull": false
+        },
+        "output_tokens": {
+          "name": "output_tokens",
+          "type": "integer",
+          "primaryKey": false,
+          "notNull": false
+        },
+        "cache_creation_input_tokens": {
+          "name": "cache_creation_input_tokens",
+          "type": "integer",
+          "primaryKey": false,
+          "notNull": false
+        },
+        "cache_read_input_tokens": {
+          "name": "cache_read_input_tokens",
+          "type": "integer",
+          "primaryKey": false,
+          "notNull": false
+        },
+        "error_message": {
+          "name": "error_message",
+          "type": "text",
+          "primaryKey": false,
+          "notNull": false
+        },
+        "blocked_by": {
+          "name": "blocked_by",
+          "type": "varchar(50)",
+          "primaryKey": false,
+          "notNull": false
+        },
+        "blocked_reason": {
+          "name": "blocked_reason",
+          "type": "text",
+          "primaryKey": false,
+          "notNull": false
+        },
+        "user_agent": {
+          "name": "user_agent",
+          "type": "varchar(512)",
+          "primaryKey": false,
+          "notNull": false
+        },
+        "messages_count": {
+          "name": "messages_count",
+          "type": "integer",
+          "primaryKey": false,
+          "notNull": false
+        },
+        "created_at": {
+          "name": "created_at",
+          "type": "timestamp with time zone",
+          "primaryKey": false,
+          "notNull": false,
+          "default": "now()"
+        },
+        "updated_at": {
+          "name": "updated_at",
+          "type": "timestamp with time zone",
+          "primaryKey": false,
+          "notNull": false,
+          "default": "now()"
+        },
+        "deleted_at": {
+          "name": "deleted_at",
+          "type": "timestamp with time zone",
+          "primaryKey": false,
+          "notNull": false
+        }
+      },
+      "indexes": {
+        "idx_message_request_user_date_cost": {
+          "name": "idx_message_request_user_date_cost",
+          "columns": [
+            {
+              "expression": "user_id",
+              "isExpression": false,
+              "asc": true,
+              "nulls": "last"
+            },
+            {
+              "expression": "created_at",
+              "isExpression": false,
+              "asc": true,
+              "nulls": "last"
+            },
+            {
+              "expression": "cost_usd",
+              "isExpression": false,
+              "asc": true,
+              "nulls": "last"
+            }
+          ],
+          "isUnique": false,
+          "where": "\"message_request\".\"deleted_at\" IS NULL",
+          "concurrently": false,
+          "method": "btree",
+          "with": {}
+        },
+        "idx_message_request_user_query": {
+          "name": "idx_message_request_user_query",
+          "columns": [
+            {
+              "expression": "user_id",
+              "isExpression": false,
+              "asc": true,
+              "nulls": "last"
+            },
+            {
+              "expression": "created_at",
+              "isExpression": false,
+              "asc": true,
+              "nulls": "last"
+            }
+          ],
+          "isUnique": false,
+          "where": "\"message_request\".\"deleted_at\" IS NULL",
+          "concurrently": false,
+          "method": "btree",
+          "with": {}
+        },
+        "idx_message_request_session_id": {
+          "name": "idx_message_request_session_id",
+          "columns": [
+            {
+              "expression": "session_id",
+              "isExpression": false,
+              "asc": true,
+              "nulls": "last"
+            }
+          ],
+          "isUnique": false,
+          "where": "\"message_request\".\"deleted_at\" IS NULL",
+          "concurrently": false,
+          "method": "btree",
+          "with": {}
+        },
+        "idx_message_request_endpoint": {
+          "name": "idx_message_request_endpoint",
+          "columns": [
+            {
+              "expression": "endpoint",
+              "isExpression": false,
+              "asc": true,
+              "nulls": "last"
+            }
+          ],
+          "isUnique": false,
+          "where": "\"message_request\".\"deleted_at\" IS NULL",
+          "concurrently": false,
+          "method": "btree",
+          "with": {}
+        },
+        "idx_message_request_provider_id": {
+          "name": "idx_message_request_provider_id",
+          "columns": [
+            {
+              "expression": "provider_id",
+              "isExpression": false,
+              "asc": true,
+              "nulls": "last"
+            }
+          ],
+          "isUnique": false,
+          "concurrently": false,
+          "method": "btree",
+          "with": {}
+        },
+        "idx_message_request_user_id": {
+          "name": "idx_message_request_user_id",
+          "columns": [
+            {
+              "expression": "user_id",
+              "isExpression": false,
+              "asc": true,
+              "nulls": "last"
+            }
+          ],
+          "isUnique": false,
+          "concurrently": false,
+          "method": "btree",
+          "with": {}
+        },
+        "idx_message_request_key": {
+          "name": "idx_message_request_key",
+          "columns": [
+            {
+              "expression": "key",
+              "isExpression": false,
+              "asc": true,
+              "nulls": "last"
+            }
+          ],
+          "isUnique": false,
+          "concurrently": false,
+          "method": "btree",
+          "with": {}
+        },
+        "idx_message_request_created_at": {
+          "name": "idx_message_request_created_at",
+          "columns": [
+            {
+              "expression": "created_at",
+              "isExpression": false,
+              "asc": true,
+              "nulls": "last"
+            }
+          ],
+          "isUnique": false,
+          "concurrently": false,
+          "method": "btree",
+          "with": {}
+        },
+        "idx_message_request_deleted_at": {
+          "name": "idx_message_request_deleted_at",
+          "columns": [
+            {
+              "expression": "deleted_at",
+              "isExpression": false,
+              "asc": true,
+              "nulls": "last"
+            }
+          ],
+          "isUnique": false,
+          "concurrently": false,
+          "method": "btree",
+          "with": {}
+        }
+      },
+      "foreignKeys": {},
+      "compositePrimaryKeys": {},
+      "uniqueConstraints": {},
+      "policies": {},
+      "checkConstraints": {},
+      "isRLSEnabled": false
+    },
+    "public.model_prices": {
+      "name": "model_prices",
+      "schema": "",
+      "columns": {
+        "id": {
+          "name": "id",
+          "type": "serial",
+          "primaryKey": true,
+          "notNull": true
+        },
+        "model_name": {
+          "name": "model_name",
+          "type": "varchar",
+          "primaryKey": false,
+          "notNull": true
+        },
+        "price_data": {
+          "name": "price_data",
+          "type": "jsonb",
+          "primaryKey": false,
+          "notNull": true
+        },
+        "created_at": {
+          "name": "created_at",
+          "type": "timestamp with time zone",
+          "primaryKey": false,
+          "notNull": false,
+          "default": "now()"
+        },
+        "updated_at": {
+          "name": "updated_at",
+          "type": "timestamp with time zone",
+          "primaryKey": false,
+          "notNull": false,
+          "default": "now()"
+        }
+      },
+      "indexes": {
+        "idx_model_prices_latest": {
+          "name": "idx_model_prices_latest",
+          "columns": [
+            {
+              "expression": "model_name",
+              "isExpression": false,
+              "asc": true,
+              "nulls": "last"
+            },
+            {
+              "expression": "created_at",
+              "isExpression": false,
+              "asc": false,
+              "nulls": "last"
+            }
+          ],
+          "isUnique": false,
+          "concurrently": false,
+          "method": "btree",
+          "with": {}
+        },
+        "idx_model_prices_model_name": {
+          "name": "idx_model_prices_model_name",
+          "columns": [
+            {
+              "expression": "model_name",
+              "isExpression": false,
+              "asc": true,
+              "nulls": "last"
+            }
+          ],
+          "isUnique": false,
+          "concurrently": false,
+          "method": "btree",
+          "with": {}
+        },
+        "idx_model_prices_created_at": {
+          "name": "idx_model_prices_created_at",
+          "columns": [
+            {
+              "expression": "created_at",
+              "isExpression": false,
+              "asc": false,
+              "nulls": "last"
+            }
+          ],
+          "isUnique": false,
+          "concurrently": false,
+          "method": "btree",
+          "with": {}
+        }
+      },
+      "foreignKeys": {},
+      "compositePrimaryKeys": {},
+      "uniqueConstraints": {},
+      "policies": {},
+      "checkConstraints": {},
+      "isRLSEnabled": false
+    },
+    "public.notification_settings": {
+      "name": "notification_settings",
+      "schema": "",
+      "columns": {
+        "id": {
+          "name": "id",
+          "type": "serial",
+          "primaryKey": true,
+          "notNull": true
+        },
+        "enabled": {
+          "name": "enabled",
+          "type": "boolean",
+          "primaryKey": false,
+          "notNull": true,
+          "default": false
+        },
+        "circuit_breaker_enabled": {
+          "name": "circuit_breaker_enabled",
+          "type": "boolean",
+          "primaryKey": false,
+          "notNull": true,
+          "default": false
+        },
+        "circuit_breaker_webhook": {
+          "name": "circuit_breaker_webhook",
+          "type": "varchar(512)",
+          "primaryKey": false,
+          "notNull": false
+        },
+        "daily_leaderboard_enabled": {
+          "name": "daily_leaderboard_enabled",
+          "type": "boolean",
+          "primaryKey": false,
+          "notNull": true,
+          "default": false
+        },
+        "daily_leaderboard_webhook": {
+          "name": "daily_leaderboard_webhook",
+          "type": "varchar(512)",
+          "primaryKey": false,
+          "notNull": false
+        },
+        "daily_leaderboard_time": {
+          "name": "daily_leaderboard_time",
+          "type": "varchar(10)",
+          "primaryKey": false,
+          "notNull": false,
+          "default": "'09:00'"
+        },
+        "daily_leaderboard_top_n": {
+          "name": "daily_leaderboard_top_n",
+          "type": "integer",
+          "primaryKey": false,
+          "notNull": false,
+          "default": 5
+        },
+        "cost_alert_enabled": {
+          "name": "cost_alert_enabled",
+          "type": "boolean",
+          "primaryKey": false,
+          "notNull": true,
+          "default": false
+        },
+        "cost_alert_webhook": {
+          "name": "cost_alert_webhook",
+          "type": "varchar(512)",
+          "primaryKey": false,
+          "notNull": false
+        },
+        "cost_alert_threshold": {
+          "name": "cost_alert_threshold",
+          "type": "numeric(5, 2)",
+          "primaryKey": false,
+          "notNull": false,
+          "default": "'0.80'"
+        },
+        "cost_alert_check_interval": {
+          "name": "cost_alert_check_interval",
+          "type": "integer",
+          "primaryKey": false,
+          "notNull": false,
+          "default": 60
+        },
+        "created_at": {
+          "name": "created_at",
+          "type": "timestamp with time zone",
+          "primaryKey": false,
+          "notNull": false,
+          "default": "now()"
+        },
+        "updated_at": {
+          "name": "updated_at",
+          "type": "timestamp with time zone",
+          "primaryKey": false,
+          "notNull": false,
+          "default": "now()"
+        }
+      },
+      "indexes": {},
+      "foreignKeys": {},
+      "compositePrimaryKeys": {},
+      "uniqueConstraints": {},
+      "policies": {},
+      "checkConstraints": {},
+      "isRLSEnabled": false
+    },
+    "public.providers": {
+      "name": "providers",
+      "schema": "",
+      "columns": {
+        "id": {
+          "name": "id",
+          "type": "serial",
+          "primaryKey": true,
+          "notNull": true
+        },
+        "name": {
+          "name": "name",
+          "type": "varchar",
+          "primaryKey": false,
+          "notNull": true
+        },
+        "description": {
+          "name": "description",
+          "type": "text",
+          "primaryKey": false,
+          "notNull": false
+        },
+        "url": {
+          "name": "url",
+          "type": "varchar",
+          "primaryKey": false,
+          "notNull": true
+        },
+        "key": {
+          "name": "key",
+          "type": "varchar",
+          "primaryKey": false,
+          "notNull": true
+        },
+        "is_enabled": {
+          "name": "is_enabled",
+          "type": "boolean",
+          "primaryKey": false,
+          "notNull": true,
+          "default": true
+        },
+        "weight": {
+          "name": "weight",
+          "type": "integer",
+          "primaryKey": false,
+          "notNull": true,
+          "default": 1
+        },
+        "priority": {
+          "name": "priority",
+          "type": "integer",
+          "primaryKey": false,
+          "notNull": true,
+          "default": 0
+        },
+        "cost_multiplier": {
+          "name": "cost_multiplier",
+          "type": "numeric(10, 4)",
+          "primaryKey": false,
+          "notNull": false,
+          "default": "'1.0'"
+        },
+        "group_tag": {
+          "name": "group_tag",
+          "type": "varchar(50)",
+          "primaryKey": false,
+          "notNull": false
+        },
+        "provider_type": {
+          "name": "provider_type",
+          "type": "varchar(20)",
+          "primaryKey": false,
+          "notNull": true,
+          "default": "'claude'"
+        },
+        "model_redirects": {
+          "name": "model_redirects",
+          "type": "jsonb",
+          "primaryKey": false,
+          "notNull": false
+        },
+        "allowed_models": {
+          "name": "allowed_models",
+          "type": "jsonb",
+          "primaryKey": false,
+          "notNull": false,
+          "default": "'null'::jsonb"
+        },
+        "join_claude_pool": {
+          "name": "join_claude_pool",
+          "type": "boolean",
+          "primaryKey": false,
+          "notNull": false,
+          "default": false
+        },
+        "codex_instructions_strategy": {
+          "name": "codex_instructions_strategy",
+          "type": "varchar(20)",
+          "primaryKey": false,
+          "notNull": false,
+          "default": "'auto'"
+        },
+        "limit_5h_usd": {
+          "name": "limit_5h_usd",
+          "type": "numeric(10, 2)",
+          "primaryKey": false,
+          "notNull": false
+        },
+        "limit_weekly_usd": {
+          "name": "limit_weekly_usd",
+          "type": "numeric(10, 2)",
+          "primaryKey": false,
+          "notNull": false
+        },
+        "limit_monthly_usd": {
+          "name": "limit_monthly_usd",
+          "type": "numeric(10, 2)",
+          "primaryKey": false,
+          "notNull": false
+        },
+        "limit_concurrent_sessions": {
+          "name": "limit_concurrent_sessions",
+          "type": "integer",
+          "primaryKey": false,
+          "notNull": false,
+          "default": 0
+        },
+        "circuit_breaker_failure_threshold": {
+          "name": "circuit_breaker_failure_threshold",
+          "type": "integer",
+          "primaryKey": false,
+          "notNull": false,
+          "default": 5
+        },
+        "circuit_breaker_open_duration": {
+          "name": "circuit_breaker_open_duration",
+          "type": "integer",
+          "primaryKey": false,
+          "notNull": false,
+          "default": 1800000
+        },
+        "circuit_breaker_half_open_success_threshold": {
+          "name": "circuit_breaker_half_open_success_threshold",
+          "type": "integer",
+          "primaryKey": false,
+          "notNull": false,
+          "default": 2
+        },
+        "proxy_url": {
+          "name": "proxy_url",
+          "type": "varchar(512)",
+          "primaryKey": false,
+          "notNull": false
+        },
+        "proxy_fallback_to_direct": {
+          "name": "proxy_fallback_to_direct",
+          "type": "boolean",
+          "primaryKey": false,
+          "notNull": false,
+          "default": false
+        },
+        "first_byte_timeout_streaming_ms": {
+          "name": "first_byte_timeout_streaming_ms",
+          "type": "integer",
+          "primaryKey": false,
+          "notNull": true,
+          "default": 30000
+        },
+        "streaming_idle_timeout_ms": {
+          "name": "streaming_idle_timeout_ms",
+          "type": "integer",
+          "primaryKey": false,
+          "notNull": true,
+          "default": 10000
+        },
+        "request_timeout_non_streaming_ms": {
+          "name": "request_timeout_non_streaming_ms",
+          "type": "integer",
+          "primaryKey": false,
+          "notNull": true,
+          "default": 600000
+        },
+        "website_url": {
+          "name": "website_url",
+          "type": "text",
+          "primaryKey": false,
+          "notNull": false
+        },
+        "favicon_url": {
+          "name": "favicon_url",
+          "type": "text",
+          "primaryKey": false,
+          "notNull": false
+        },
+        "tpm": {
+          "name": "tpm",
+          "type": "integer",
+          "primaryKey": false,
+          "notNull": false,
+          "default": 0
+        },
+        "rpm": {
+          "name": "rpm",
+          "type": "integer",
+          "primaryKey": false,
+          "notNull": false,
+          "default": 0
+        },
+        "rpd": {
+          "name": "rpd",
+          "type": "integer",
+          "primaryKey": false,
+          "notNull": false,
+          "default": 0
+        },
+        "cc": {
+          "name": "cc",
+          "type": "integer",
+          "primaryKey": false,
+          "notNull": false,
+          "default": 0
+        },
+        "created_at": {
+          "name": "created_at",
+          "type": "timestamp with time zone",
+          "primaryKey": false,
+          "notNull": false,
+          "default": "now()"
+        },
+        "updated_at": {
+          "name": "updated_at",
+          "type": "timestamp with time zone",
+          "primaryKey": false,
+          "notNull": false,
+          "default": "now()"
+        },
+        "deleted_at": {
+          "name": "deleted_at",
+          "type": "timestamp with time zone",
+          "primaryKey": false,
+          "notNull": false
+        }
+      },
+      "indexes": {
+        "idx_providers_enabled_priority": {
+          "name": "idx_providers_enabled_priority",
+          "columns": [
+            {
+              "expression": "is_enabled",
+              "isExpression": false,
+              "asc": true,
+              "nulls": "last"
+            },
+            {
+              "expression": "priority",
+              "isExpression": false,
+              "asc": true,
+              "nulls": "last"
+            },
+            {
+              "expression": "weight",
+              "isExpression": false,
+              "asc": true,
+              "nulls": "last"
+            }
+          ],
+          "isUnique": false,
+          "where": "\"providers\".\"deleted_at\" IS NULL",
+          "concurrently": false,
+          "method": "btree",
+          "with": {}
+        },
+        "idx_providers_group": {
+          "name": "idx_providers_group",
+          "columns": [
+            {
+              "expression": "group_tag",
+              "isExpression": false,
+              "asc": true,
+              "nulls": "last"
+            }
+          ],
+          "isUnique": false,
+          "where": "\"providers\".\"deleted_at\" IS NULL",
+          "concurrently": false,
+          "method": "btree",
+          "with": {}
+        },
+        "idx_providers_created_at": {
+          "name": "idx_providers_created_at",
+          "columns": [
+            {
+              "expression": "created_at",
+              "isExpression": false,
+              "asc": true,
+              "nulls": "last"
+            }
+          ],
+          "isUnique": false,
+          "concurrently": false,
+          "method": "btree",
+          "with": {}
+        },
+        "idx_providers_deleted_at": {
+          "name": "idx_providers_deleted_at",
+          "columns": [
+            {
+              "expression": "deleted_at",
+              "isExpression": false,
+              "asc": true,
+              "nulls": "last"
+            }
+          ],
+          "isUnique": false,
+          "concurrently": false,
+          "method": "btree",
+          "with": {}
+        }
+      },
+      "foreignKeys": {},
+      "compositePrimaryKeys": {},
+      "uniqueConstraints": {},
+      "policies": {},
+      "checkConstraints": {},
+      "isRLSEnabled": false
+    },
+    "public.sensitive_words": {
+      "name": "sensitive_words",
+      "schema": "",
+      "columns": {
+        "id": {
+          "name": "id",
+          "type": "serial",
+          "primaryKey": true,
+          "notNull": true
+        },
+        "word": {
+          "name": "word",
+          "type": "varchar(255)",
+          "primaryKey": false,
+          "notNull": true
+        },
+        "match_type": {
+          "name": "match_type",
+          "type": "varchar(20)",
+          "primaryKey": false,
+          "notNull": true,
+          "default": "'contains'"
+        },
+        "description": {
+          "name": "description",
+          "type": "text",
+          "primaryKey": false,
+          "notNull": false
+        },
+        "is_enabled": {
+          "name": "is_enabled",
+          "type": "boolean",
+          "primaryKey": false,
+          "notNull": true,
+          "default": true
+        },
+        "created_at": {
+          "name": "created_at",
+          "type": "timestamp with time zone",
+          "primaryKey": false,
+          "notNull": false,
+          "default": "now()"
+        },
+        "updated_at": {
+          "name": "updated_at",
+          "type": "timestamp with time zone",
+          "primaryKey": false,
+          "notNull": false,
+          "default": "now()"
+        }
+      },
+      "indexes": {
+        "idx_sensitive_words_enabled": {
+          "name": "idx_sensitive_words_enabled",
+          "columns": [
+            {
+              "expression": "is_enabled",
+              "isExpression": false,
+              "asc": true,
+              "nulls": "last"
+            },
+            {
+              "expression": "match_type",
+              "isExpression": false,
+              "asc": true,
+              "nulls": "last"
+            }
+          ],
+          "isUnique": false,
+          "concurrently": false,
+          "method": "btree",
+          "with": {}
+        },
+        "idx_sensitive_words_created_at": {
+          "name": "idx_sensitive_words_created_at",
+          "columns": [
+            {
+              "expression": "created_at",
+              "isExpression": false,
+              "asc": true,
+              "nulls": "last"
+            }
+          ],
+          "isUnique": false,
+          "concurrently": false,
+          "method": "btree",
+          "with": {}
+        }
+      },
+      "foreignKeys": {},
+      "compositePrimaryKeys": {},
+      "uniqueConstraints": {},
+      "policies": {},
+      "checkConstraints": {},
+      "isRLSEnabled": false
+    },
+    "public.system_settings": {
+      "name": "system_settings",
+      "schema": "",
+      "columns": {
+        "id": {
+          "name": "id",
+          "type": "serial",
+          "primaryKey": true,
+          "notNull": true
+        },
+        "site_title": {
+          "name": "site_title",
+          "type": "varchar(128)",
+          "primaryKey": false,
+          "notNull": true,
+          "default": "'Claude Code Hub'"
+        },
+        "allow_global_usage_view": {
+          "name": "allow_global_usage_view",
+          "type": "boolean",
+          "primaryKey": false,
+          "notNull": true,
+          "default": false
+        },
+        "currency_display": {
+          "name": "currency_display",
+          "type": "varchar(10)",
+          "primaryKey": false,
+          "notNull": true,
+          "default": "'USD'"
+        },
+        "enable_auto_cleanup": {
+          "name": "enable_auto_cleanup",
+          "type": "boolean",
+          "primaryKey": false,
+          "notNull": false,
+          "default": false
+        },
+        "cleanup_retention_days": {
+          "name": "cleanup_retention_days",
+          "type": "integer",
+          "primaryKey": false,
+          "notNull": false,
+          "default": 30
+        },
+        "cleanup_schedule": {
+          "name": "cleanup_schedule",
+          "type": "varchar(50)",
+          "primaryKey": false,
+          "notNull": false,
+          "default": "'0 2 * * *'"
+        },
+        "cleanup_batch_size": {
+          "name": "cleanup_batch_size",
+          "type": "integer",
+          "primaryKey": false,
+          "notNull": false,
+          "default": 10000
+        },
+        "enable_client_version_check": {
+          "name": "enable_client_version_check",
+          "type": "boolean",
+          "primaryKey": false,
+          "notNull": true,
+          "default": false
+        },
+        "created_at": {
+          "name": "created_at",
+          "type": "timestamp with time zone",
+          "primaryKey": false,
+          "notNull": false,
+          "default": "now()"
+        },
+        "updated_at": {
+          "name": "updated_at",
+          "type": "timestamp with time zone",
+          "primaryKey": false,
+          "notNull": false,
+          "default": "now()"
+        }
+      },
+      "indexes": {},
+      "foreignKeys": {},
+      "compositePrimaryKeys": {},
+      "uniqueConstraints": {},
+      "policies": {},
+      "checkConstraints": {},
+      "isRLSEnabled": false
+    },
+    "public.users": {
+      "name": "users",
+      "schema": "",
+      "columns": {
+        "id": {
+          "name": "id",
+          "type": "serial",
+          "primaryKey": true,
+          "notNull": true
+        },
+        "name": {
+          "name": "name",
+          "type": "varchar",
+          "primaryKey": false,
+          "notNull": true
+        },
+        "description": {
+          "name": "description",
+          "type": "text",
+          "primaryKey": false,
+          "notNull": false
+        },
+        "role": {
+          "name": "role",
+          "type": "varchar",
+          "primaryKey": false,
+          "notNull": false,
+          "default": "'user'"
+        },
+        "rpm_limit": {
+          "name": "rpm_limit",
+          "type": "integer",
+          "primaryKey": false,
+          "notNull": false,
+          "default": 60
+        },
+        "daily_limit_usd": {
+          "name": "daily_limit_usd",
+          "type": "numeric(10, 2)",
+          "primaryKey": false,
+          "notNull": false,
+          "default": "'100.00'"
+        },
+        "provider_group": {
+          "name": "provider_group",
+          "type": "varchar(50)",
+          "primaryKey": false,
+          "notNull": false
+        },
+        "created_at": {
+          "name": "created_at",
+          "type": "timestamp with time zone",
+          "primaryKey": false,
+          "notNull": false,
+          "default": "now()"
+        },
+        "updated_at": {
+          "name": "updated_at",
+          "type": "timestamp with time zone",
+          "primaryKey": false,
+          "notNull": false,
+          "default": "now()"
+        },
+        "deleted_at": {
+          "name": "deleted_at",
+          "type": "timestamp with time zone",
+          "primaryKey": false,
+          "notNull": false
+        }
+      },
+      "indexes": {
+        "idx_users_active_role_sort": {
+          "name": "idx_users_active_role_sort",
+          "columns": [
+            {
+              "expression": "deleted_at",
+              "isExpression": false,
+              "asc": true,
+              "nulls": "last"
+            },
+            {
+              "expression": "role",
+              "isExpression": false,
+              "asc": true,
+              "nulls": "last"
+            },
+            {
+              "expression": "id",
+              "isExpression": false,
+              "asc": true,
+              "nulls": "last"
+            }
+          ],
+          "isUnique": false,
+          "where": "\"users\".\"deleted_at\" IS NULL",
+          "concurrently": false,
+          "method": "btree",
+          "with": {}
+        },
+        "idx_users_created_at": {
+          "name": "idx_users_created_at",
+          "columns": [
+            {
+              "expression": "created_at",
+              "isExpression": false,
+              "asc": true,
+              "nulls": "last"
+            }
+          ],
+          "isUnique": false,
+          "concurrently": false,
+          "method": "btree",
+          "with": {}
+        },
+        "idx_users_deleted_at": {
+          "name": "idx_users_deleted_at",
+          "columns": [
+            {
+              "expression": "deleted_at",
+              "isExpression": false,
+              "asc": true,
+              "nulls": "last"
+            }
+          ],
+          "isUnique": false,
+          "concurrently": false,
+          "method": "btree",
+          "with": {}
+        }
+      },
+      "foreignKeys": {},
+      "compositePrimaryKeys": {},
+      "uniqueConstraints": {},
+      "policies": {},
+      "checkConstraints": {},
+      "isRLSEnabled": false
+    }
+  },
+  "enums": {},
+  "schemas": {},
+  "sequences": {},
+  "roles": {},
+  "policies": {},
+  "views": {},
+  "_meta": {
+    "columns": {},
+    "schemas": {},
+    "tables": {}
+  }
+}

+ 1519 - 0
drizzle/meta/0020_snapshot.json

@@ -0,0 +1,1519 @@
+{
+  "id": "2cca68f8-d8c7-4298-9f24-c8fd493d700e",
+  "prevId": "4ba39e7a-e353-4ed1-8e18-934a56fb0af6",
+  "version": "7",
+  "dialect": "postgresql",
+  "tables": {
+    "public.error_rules": {
+      "name": "error_rules",
+      "schema": "",
+      "columns": {
+        "id": {
+          "name": "id",
+          "type": "serial",
+          "primaryKey": true,
+          "notNull": true
+        },
+        "pattern": {
+          "name": "pattern",
+          "type": "text",
+          "primaryKey": false,
+          "notNull": true
+        },
+        "match_type": {
+          "name": "match_type",
+          "type": "varchar(20)",
+          "primaryKey": false,
+          "notNull": true,
+          "default": "'regex'"
+        },
+        "category": {
+          "name": "category",
+          "type": "varchar(50)",
+          "primaryKey": false,
+          "notNull": true
+        },
+        "description": {
+          "name": "description",
+          "type": "text",
+          "primaryKey": false,
+          "notNull": false
+        },
+        "is_enabled": {
+          "name": "is_enabled",
+          "type": "boolean",
+          "primaryKey": false,
+          "notNull": true,
+          "default": true
+        },
+        "is_default": {
+          "name": "is_default",
+          "type": "boolean",
+          "primaryKey": false,
+          "notNull": true,
+          "default": false
+        },
+        "priority": {
+          "name": "priority",
+          "type": "integer",
+          "primaryKey": false,
+          "notNull": true,
+          "default": 0
+        },
+        "created_at": {
+          "name": "created_at",
+          "type": "timestamp with time zone",
+          "primaryKey": false,
+          "notNull": false,
+          "default": "now()"
+        },
+        "updated_at": {
+          "name": "updated_at",
+          "type": "timestamp with time zone",
+          "primaryKey": false,
+          "notNull": false,
+          "default": "now()"
+        }
+      },
+      "indexes": {
+        "idx_error_rules_enabled": {
+          "name": "idx_error_rules_enabled",
+          "columns": [
+            {
+              "expression": "is_enabled",
+              "isExpression": false,
+              "asc": true,
+              "nulls": "last"
+            },
+            {
+              "expression": "priority",
+              "isExpression": false,
+              "asc": true,
+              "nulls": "last"
+            }
+          ],
+          "isUnique": false,
+          "concurrently": false,
+          "method": "btree",
+          "with": {}
+        },
+        "unique_pattern": {
+          "name": "unique_pattern",
+          "columns": [
+            {
+              "expression": "pattern",
+              "isExpression": false,
+              "asc": true,
+              "nulls": "last"
+            }
+          ],
+          "isUnique": true,
+          "concurrently": false,
+          "method": "btree",
+          "with": {}
+        },
+        "idx_category": {
+          "name": "idx_category",
+          "columns": [
+            {
+              "expression": "category",
+              "isExpression": false,
+              "asc": true,
+              "nulls": "last"
+            }
+          ],
+          "isUnique": false,
+          "concurrently": false,
+          "method": "btree",
+          "with": {}
+        },
+        "idx_match_type": {
+          "name": "idx_match_type",
+          "columns": [
+            {
+              "expression": "match_type",
+              "isExpression": false,
+              "asc": true,
+              "nulls": "last"
+            }
+          ],
+          "isUnique": false,
+          "concurrently": false,
+          "method": "btree",
+          "with": {}
+        }
+      },
+      "foreignKeys": {},
+      "compositePrimaryKeys": {},
+      "uniqueConstraints": {},
+      "policies": {},
+      "checkConstraints": {},
+      "isRLSEnabled": false
+    },
+    "public.keys": {
+      "name": "keys",
+      "schema": "",
+      "columns": {
+        "id": {
+          "name": "id",
+          "type": "serial",
+          "primaryKey": true,
+          "notNull": true
+        },
+        "user_id": {
+          "name": "user_id",
+          "type": "integer",
+          "primaryKey": false,
+          "notNull": true
+        },
+        "key": {
+          "name": "key",
+          "type": "varchar",
+          "primaryKey": false,
+          "notNull": true
+        },
+        "name": {
+          "name": "name",
+          "type": "varchar",
+          "primaryKey": false,
+          "notNull": true
+        },
+        "is_enabled": {
+          "name": "is_enabled",
+          "type": "boolean",
+          "primaryKey": false,
+          "notNull": false,
+          "default": true
+        },
+        "expires_at": {
+          "name": "expires_at",
+          "type": "timestamp",
+          "primaryKey": false,
+          "notNull": false
+        },
+        "can_login_web_ui": {
+          "name": "can_login_web_ui",
+          "type": "boolean",
+          "primaryKey": false,
+          "notNull": false,
+          "default": true
+        },
+        "limit_5h_usd": {
+          "name": "limit_5h_usd",
+          "type": "numeric(10, 2)",
+          "primaryKey": false,
+          "notNull": false
+        },
+        "limit_weekly_usd": {
+          "name": "limit_weekly_usd",
+          "type": "numeric(10, 2)",
+          "primaryKey": false,
+          "notNull": false
+        },
+        "limit_monthly_usd": {
+          "name": "limit_monthly_usd",
+          "type": "numeric(10, 2)",
+          "primaryKey": false,
+          "notNull": false
+        },
+        "limit_concurrent_sessions": {
+          "name": "limit_concurrent_sessions",
+          "type": "integer",
+          "primaryKey": false,
+          "notNull": false,
+          "default": 0
+        },
+        "created_at": {
+          "name": "created_at",
+          "type": "timestamp with time zone",
+          "primaryKey": false,
+          "notNull": false,
+          "default": "now()"
+        },
+        "updated_at": {
+          "name": "updated_at",
+          "type": "timestamp with time zone",
+          "primaryKey": false,
+          "notNull": false,
+          "default": "now()"
+        },
+        "deleted_at": {
+          "name": "deleted_at",
+          "type": "timestamp with time zone",
+          "primaryKey": false,
+          "notNull": false
+        }
+      },
+      "indexes": {
+        "idx_keys_user_id": {
+          "name": "idx_keys_user_id",
+          "columns": [
+            {
+              "expression": "user_id",
+              "isExpression": false,
+              "asc": true,
+              "nulls": "last"
+            }
+          ],
+          "isUnique": false,
+          "concurrently": false,
+          "method": "btree",
+          "with": {}
+        },
+        "idx_keys_created_at": {
+          "name": "idx_keys_created_at",
+          "columns": [
+            {
+              "expression": "created_at",
+              "isExpression": false,
+              "asc": true,
+              "nulls": "last"
+            }
+          ],
+          "isUnique": false,
+          "concurrently": false,
+          "method": "btree",
+          "with": {}
+        },
+        "idx_keys_deleted_at": {
+          "name": "idx_keys_deleted_at",
+          "columns": [
+            {
+              "expression": "deleted_at",
+              "isExpression": false,
+              "asc": true,
+              "nulls": "last"
+            }
+          ],
+          "isUnique": false,
+          "concurrently": false,
+          "method": "btree",
+          "with": {}
+        }
+      },
+      "foreignKeys": {},
+      "compositePrimaryKeys": {},
+      "uniqueConstraints": {},
+      "policies": {},
+      "checkConstraints": {},
+      "isRLSEnabled": false
+    },
+    "public.message_request": {
+      "name": "message_request",
+      "schema": "",
+      "columns": {
+        "id": {
+          "name": "id",
+          "type": "serial",
+          "primaryKey": true,
+          "notNull": true
+        },
+        "provider_id": {
+          "name": "provider_id",
+          "type": "integer",
+          "primaryKey": false,
+          "notNull": true
+        },
+        "user_id": {
+          "name": "user_id",
+          "type": "integer",
+          "primaryKey": false,
+          "notNull": true
+        },
+        "key": {
+          "name": "key",
+          "type": "varchar",
+          "primaryKey": false,
+          "notNull": true
+        },
+        "model": {
+          "name": "model",
+          "type": "varchar(128)",
+          "primaryKey": false,
+          "notNull": false
+        },
+        "duration_ms": {
+          "name": "duration_ms",
+          "type": "integer",
+          "primaryKey": false,
+          "notNull": false
+        },
+        "cost_usd": {
+          "name": "cost_usd",
+          "type": "numeric(21, 15)",
+          "primaryKey": false,
+          "notNull": false,
+          "default": "'0'"
+        },
+        "cost_multiplier": {
+          "name": "cost_multiplier",
+          "type": "numeric(10, 4)",
+          "primaryKey": false,
+          "notNull": false
+        },
+        "session_id": {
+          "name": "session_id",
+          "type": "varchar(64)",
+          "primaryKey": false,
+          "notNull": false
+        },
+        "provider_chain": {
+          "name": "provider_chain",
+          "type": "jsonb",
+          "primaryKey": false,
+          "notNull": false
+        },
+        "status_code": {
+          "name": "status_code",
+          "type": "integer",
+          "primaryKey": false,
+          "notNull": false
+        },
+        "api_type": {
+          "name": "api_type",
+          "type": "varchar(20)",
+          "primaryKey": false,
+          "notNull": false
+        },
+        "endpoint": {
+          "name": "endpoint",
+          "type": "varchar(256)",
+          "primaryKey": false,
+          "notNull": false
+        },
+        "original_model": {
+          "name": "original_model",
+          "type": "varchar(128)",
+          "primaryKey": false,
+          "notNull": false
+        },
+        "input_tokens": {
+          "name": "input_tokens",
+          "type": "integer",
+          "primaryKey": false,
+          "notNull": false
+        },
+        "output_tokens": {
+          "name": "output_tokens",
+          "type": "integer",
+          "primaryKey": false,
+          "notNull": false
+        },
+        "cache_creation_input_tokens": {
+          "name": "cache_creation_input_tokens",
+          "type": "integer",
+          "primaryKey": false,
+          "notNull": false
+        },
+        "cache_read_input_tokens": {
+          "name": "cache_read_input_tokens",
+          "type": "integer",
+          "primaryKey": false,
+          "notNull": false
+        },
+        "error_message": {
+          "name": "error_message",
+          "type": "text",
+          "primaryKey": false,
+          "notNull": false
+        },
+        "blocked_by": {
+          "name": "blocked_by",
+          "type": "varchar(50)",
+          "primaryKey": false,
+          "notNull": false
+        },
+        "blocked_reason": {
+          "name": "blocked_reason",
+          "type": "text",
+          "primaryKey": false,
+          "notNull": false
+        },
+        "user_agent": {
+          "name": "user_agent",
+          "type": "varchar(512)",
+          "primaryKey": false,
+          "notNull": false
+        },
+        "messages_count": {
+          "name": "messages_count",
+          "type": "integer",
+          "primaryKey": false,
+          "notNull": false
+        },
+        "created_at": {
+          "name": "created_at",
+          "type": "timestamp with time zone",
+          "primaryKey": false,
+          "notNull": false,
+          "default": "now()"
+        },
+        "updated_at": {
+          "name": "updated_at",
+          "type": "timestamp with time zone",
+          "primaryKey": false,
+          "notNull": false,
+          "default": "now()"
+        },
+        "deleted_at": {
+          "name": "deleted_at",
+          "type": "timestamp with time zone",
+          "primaryKey": false,
+          "notNull": false
+        }
+      },
+      "indexes": {
+        "idx_message_request_user_date_cost": {
+          "name": "idx_message_request_user_date_cost",
+          "columns": [
+            {
+              "expression": "user_id",
+              "isExpression": false,
+              "asc": true,
+              "nulls": "last"
+            },
+            {
+              "expression": "created_at",
+              "isExpression": false,
+              "asc": true,
+              "nulls": "last"
+            },
+            {
+              "expression": "cost_usd",
+              "isExpression": false,
+              "asc": true,
+              "nulls": "last"
+            }
+          ],
+          "isUnique": false,
+          "where": "\"message_request\".\"deleted_at\" IS NULL",
+          "concurrently": false,
+          "method": "btree",
+          "with": {}
+        },
+        "idx_message_request_user_query": {
+          "name": "idx_message_request_user_query",
+          "columns": [
+            {
+              "expression": "user_id",
+              "isExpression": false,
+              "asc": true,
+              "nulls": "last"
+            },
+            {
+              "expression": "created_at",
+              "isExpression": false,
+              "asc": true,
+              "nulls": "last"
+            }
+          ],
+          "isUnique": false,
+          "where": "\"message_request\".\"deleted_at\" IS NULL",
+          "concurrently": false,
+          "method": "btree",
+          "with": {}
+        },
+        "idx_message_request_session_id": {
+          "name": "idx_message_request_session_id",
+          "columns": [
+            {
+              "expression": "session_id",
+              "isExpression": false,
+              "asc": true,
+              "nulls": "last"
+            }
+          ],
+          "isUnique": false,
+          "where": "\"message_request\".\"deleted_at\" IS NULL",
+          "concurrently": false,
+          "method": "btree",
+          "with": {}
+        },
+        "idx_message_request_endpoint": {
+          "name": "idx_message_request_endpoint",
+          "columns": [
+            {
+              "expression": "endpoint",
+              "isExpression": false,
+              "asc": true,
+              "nulls": "last"
+            }
+          ],
+          "isUnique": false,
+          "where": "\"message_request\".\"deleted_at\" IS NULL",
+          "concurrently": false,
+          "method": "btree",
+          "with": {}
+        },
+        "idx_message_request_provider_id": {
+          "name": "idx_message_request_provider_id",
+          "columns": [
+            {
+              "expression": "provider_id",
+              "isExpression": false,
+              "asc": true,
+              "nulls": "last"
+            }
+          ],
+          "isUnique": false,
+          "concurrently": false,
+          "method": "btree",
+          "with": {}
+        },
+        "idx_message_request_user_id": {
+          "name": "idx_message_request_user_id",
+          "columns": [
+            {
+              "expression": "user_id",
+              "isExpression": false,
+              "asc": true,
+              "nulls": "last"
+            }
+          ],
+          "isUnique": false,
+          "concurrently": false,
+          "method": "btree",
+          "with": {}
+        },
+        "idx_message_request_key": {
+          "name": "idx_message_request_key",
+          "columns": [
+            {
+              "expression": "key",
+              "isExpression": false,
+              "asc": true,
+              "nulls": "last"
+            }
+          ],
+          "isUnique": false,
+          "concurrently": false,
+          "method": "btree",
+          "with": {}
+        },
+        "idx_message_request_created_at": {
+          "name": "idx_message_request_created_at",
+          "columns": [
+            {
+              "expression": "created_at",
+              "isExpression": false,
+              "asc": true,
+              "nulls": "last"
+            }
+          ],
+          "isUnique": false,
+          "concurrently": false,
+          "method": "btree",
+          "with": {}
+        },
+        "idx_message_request_deleted_at": {
+          "name": "idx_message_request_deleted_at",
+          "columns": [
+            {
+              "expression": "deleted_at",
+              "isExpression": false,
+              "asc": true,
+              "nulls": "last"
+            }
+          ],
+          "isUnique": false,
+          "concurrently": false,
+          "method": "btree",
+          "with": {}
+        }
+      },
+      "foreignKeys": {},
+      "compositePrimaryKeys": {},
+      "uniqueConstraints": {},
+      "policies": {},
+      "checkConstraints": {},
+      "isRLSEnabled": false
+    },
+    "public.model_prices": {
+      "name": "model_prices",
+      "schema": "",
+      "columns": {
+        "id": {
+          "name": "id",
+          "type": "serial",
+          "primaryKey": true,
+          "notNull": true
+        },
+        "model_name": {
+          "name": "model_name",
+          "type": "varchar",
+          "primaryKey": false,
+          "notNull": true
+        },
+        "price_data": {
+          "name": "price_data",
+          "type": "jsonb",
+          "primaryKey": false,
+          "notNull": true
+        },
+        "created_at": {
+          "name": "created_at",
+          "type": "timestamp with time zone",
+          "primaryKey": false,
+          "notNull": false,
+          "default": "now()"
+        },
+        "updated_at": {
+          "name": "updated_at",
+          "type": "timestamp with time zone",
+          "primaryKey": false,
+          "notNull": false,
+          "default": "now()"
+        }
+      },
+      "indexes": {
+        "idx_model_prices_latest": {
+          "name": "idx_model_prices_latest",
+          "columns": [
+            {
+              "expression": "model_name",
+              "isExpression": false,
+              "asc": true,
+              "nulls": "last"
+            },
+            {
+              "expression": "created_at",
+              "isExpression": false,
+              "asc": false,
+              "nulls": "last"
+            }
+          ],
+          "isUnique": false,
+          "concurrently": false,
+          "method": "btree",
+          "with": {}
+        },
+        "idx_model_prices_model_name": {
+          "name": "idx_model_prices_model_name",
+          "columns": [
+            {
+              "expression": "model_name",
+              "isExpression": false,
+              "asc": true,
+              "nulls": "last"
+            }
+          ],
+          "isUnique": false,
+          "concurrently": false,
+          "method": "btree",
+          "with": {}
+        },
+        "idx_model_prices_created_at": {
+          "name": "idx_model_prices_created_at",
+          "columns": [
+            {
+              "expression": "created_at",
+              "isExpression": false,
+              "asc": false,
+              "nulls": "last"
+            }
+          ],
+          "isUnique": false,
+          "concurrently": false,
+          "method": "btree",
+          "with": {}
+        }
+      },
+      "foreignKeys": {},
+      "compositePrimaryKeys": {},
+      "uniqueConstraints": {},
+      "policies": {},
+      "checkConstraints": {},
+      "isRLSEnabled": false
+    },
+    "public.notification_settings": {
+      "name": "notification_settings",
+      "schema": "",
+      "columns": {
+        "id": {
+          "name": "id",
+          "type": "serial",
+          "primaryKey": true,
+          "notNull": true
+        },
+        "enabled": {
+          "name": "enabled",
+          "type": "boolean",
+          "primaryKey": false,
+          "notNull": true,
+          "default": false
+        },
+        "circuit_breaker_enabled": {
+          "name": "circuit_breaker_enabled",
+          "type": "boolean",
+          "primaryKey": false,
+          "notNull": true,
+          "default": false
+        },
+        "circuit_breaker_webhook": {
+          "name": "circuit_breaker_webhook",
+          "type": "varchar(512)",
+          "primaryKey": false,
+          "notNull": false
+        },
+        "daily_leaderboard_enabled": {
+          "name": "daily_leaderboard_enabled",
+          "type": "boolean",
+          "primaryKey": false,
+          "notNull": true,
+          "default": false
+        },
+        "daily_leaderboard_webhook": {
+          "name": "daily_leaderboard_webhook",
+          "type": "varchar(512)",
+          "primaryKey": false,
+          "notNull": false
+        },
+        "daily_leaderboard_time": {
+          "name": "daily_leaderboard_time",
+          "type": "varchar(10)",
+          "primaryKey": false,
+          "notNull": false,
+          "default": "'09:00'"
+        },
+        "daily_leaderboard_top_n": {
+          "name": "daily_leaderboard_top_n",
+          "type": "integer",
+          "primaryKey": false,
+          "notNull": false,
+          "default": 5
+        },
+        "cost_alert_enabled": {
+          "name": "cost_alert_enabled",
+          "type": "boolean",
+          "primaryKey": false,
+          "notNull": true,
+          "default": false
+        },
+        "cost_alert_webhook": {
+          "name": "cost_alert_webhook",
+          "type": "varchar(512)",
+          "primaryKey": false,
+          "notNull": false
+        },
+        "cost_alert_threshold": {
+          "name": "cost_alert_threshold",
+          "type": "numeric(5, 2)",
+          "primaryKey": false,
+          "notNull": false,
+          "default": "'0.80'"
+        },
+        "cost_alert_check_interval": {
+          "name": "cost_alert_check_interval",
+          "type": "integer",
+          "primaryKey": false,
+          "notNull": false,
+          "default": 60
+        },
+        "created_at": {
+          "name": "created_at",
+          "type": "timestamp with time zone",
+          "primaryKey": false,
+          "notNull": false,
+          "default": "now()"
+        },
+        "updated_at": {
+          "name": "updated_at",
+          "type": "timestamp with time zone",
+          "primaryKey": false,
+          "notNull": false,
+          "default": "now()"
+        }
+      },
+      "indexes": {},
+      "foreignKeys": {},
+      "compositePrimaryKeys": {},
+      "uniqueConstraints": {},
+      "policies": {},
+      "checkConstraints": {},
+      "isRLSEnabled": false
+    },
+    "public.providers": {
+      "name": "providers",
+      "schema": "",
+      "columns": {
+        "id": {
+          "name": "id",
+          "type": "serial",
+          "primaryKey": true,
+          "notNull": true
+        },
+        "name": {
+          "name": "name",
+          "type": "varchar",
+          "primaryKey": false,
+          "notNull": true
+        },
+        "description": {
+          "name": "description",
+          "type": "text",
+          "primaryKey": false,
+          "notNull": false
+        },
+        "url": {
+          "name": "url",
+          "type": "varchar",
+          "primaryKey": false,
+          "notNull": true
+        },
+        "key": {
+          "name": "key",
+          "type": "varchar",
+          "primaryKey": false,
+          "notNull": true
+        },
+        "is_enabled": {
+          "name": "is_enabled",
+          "type": "boolean",
+          "primaryKey": false,
+          "notNull": true,
+          "default": true
+        },
+        "weight": {
+          "name": "weight",
+          "type": "integer",
+          "primaryKey": false,
+          "notNull": true,
+          "default": 1
+        },
+        "priority": {
+          "name": "priority",
+          "type": "integer",
+          "primaryKey": false,
+          "notNull": true,
+          "default": 0
+        },
+        "cost_multiplier": {
+          "name": "cost_multiplier",
+          "type": "numeric(10, 4)",
+          "primaryKey": false,
+          "notNull": false,
+          "default": "'1.0'"
+        },
+        "group_tag": {
+          "name": "group_tag",
+          "type": "varchar(50)",
+          "primaryKey": false,
+          "notNull": false
+        },
+        "provider_type": {
+          "name": "provider_type",
+          "type": "varchar(20)",
+          "primaryKey": false,
+          "notNull": true,
+          "default": "'claude'"
+        },
+        "model_redirects": {
+          "name": "model_redirects",
+          "type": "jsonb",
+          "primaryKey": false,
+          "notNull": false
+        },
+        "allowed_models": {
+          "name": "allowed_models",
+          "type": "jsonb",
+          "primaryKey": false,
+          "notNull": false,
+          "default": "'null'::jsonb"
+        },
+        "join_claude_pool": {
+          "name": "join_claude_pool",
+          "type": "boolean",
+          "primaryKey": false,
+          "notNull": false,
+          "default": false
+        },
+        "codex_instructions_strategy": {
+          "name": "codex_instructions_strategy",
+          "type": "varchar(20)",
+          "primaryKey": false,
+          "notNull": false,
+          "default": "'auto'"
+        },
+        "limit_5h_usd": {
+          "name": "limit_5h_usd",
+          "type": "numeric(10, 2)",
+          "primaryKey": false,
+          "notNull": false
+        },
+        "limit_weekly_usd": {
+          "name": "limit_weekly_usd",
+          "type": "numeric(10, 2)",
+          "primaryKey": false,
+          "notNull": false
+        },
+        "limit_monthly_usd": {
+          "name": "limit_monthly_usd",
+          "type": "numeric(10, 2)",
+          "primaryKey": false,
+          "notNull": false
+        },
+        "limit_concurrent_sessions": {
+          "name": "limit_concurrent_sessions",
+          "type": "integer",
+          "primaryKey": false,
+          "notNull": false,
+          "default": 0
+        },
+        "circuit_breaker_failure_threshold": {
+          "name": "circuit_breaker_failure_threshold",
+          "type": "integer",
+          "primaryKey": false,
+          "notNull": false,
+          "default": 5
+        },
+        "circuit_breaker_open_duration": {
+          "name": "circuit_breaker_open_duration",
+          "type": "integer",
+          "primaryKey": false,
+          "notNull": false,
+          "default": 1800000
+        },
+        "circuit_breaker_half_open_success_threshold": {
+          "name": "circuit_breaker_half_open_success_threshold",
+          "type": "integer",
+          "primaryKey": false,
+          "notNull": false,
+          "default": 2
+        },
+        "proxy_url": {
+          "name": "proxy_url",
+          "type": "varchar(512)",
+          "primaryKey": false,
+          "notNull": false
+        },
+        "proxy_fallback_to_direct": {
+          "name": "proxy_fallback_to_direct",
+          "type": "boolean",
+          "primaryKey": false,
+          "notNull": false,
+          "default": false
+        },
+        "first_byte_timeout_streaming_ms": {
+          "name": "first_byte_timeout_streaming_ms",
+          "type": "integer",
+          "primaryKey": false,
+          "notNull": true,
+          "default": 30000
+        },
+        "streaming_idle_timeout_ms": {
+          "name": "streaming_idle_timeout_ms",
+          "type": "integer",
+          "primaryKey": false,
+          "notNull": true,
+          "default": 10000
+        },
+        "request_timeout_non_streaming_ms": {
+          "name": "request_timeout_non_streaming_ms",
+          "type": "integer",
+          "primaryKey": false,
+          "notNull": true,
+          "default": 600000
+        },
+        "website_url": {
+          "name": "website_url",
+          "type": "text",
+          "primaryKey": false,
+          "notNull": false
+        },
+        "favicon_url": {
+          "name": "favicon_url",
+          "type": "text",
+          "primaryKey": false,
+          "notNull": false
+        },
+        "tpm": {
+          "name": "tpm",
+          "type": "integer",
+          "primaryKey": false,
+          "notNull": false,
+          "default": 0
+        },
+        "rpm": {
+          "name": "rpm",
+          "type": "integer",
+          "primaryKey": false,
+          "notNull": false,
+          "default": 0
+        },
+        "rpd": {
+          "name": "rpd",
+          "type": "integer",
+          "primaryKey": false,
+          "notNull": false,
+          "default": 0
+        },
+        "cc": {
+          "name": "cc",
+          "type": "integer",
+          "primaryKey": false,
+          "notNull": false,
+          "default": 0
+        },
+        "created_at": {
+          "name": "created_at",
+          "type": "timestamp with time zone",
+          "primaryKey": false,
+          "notNull": false,
+          "default": "now()"
+        },
+        "updated_at": {
+          "name": "updated_at",
+          "type": "timestamp with time zone",
+          "primaryKey": false,
+          "notNull": false,
+          "default": "now()"
+        },
+        "deleted_at": {
+          "name": "deleted_at",
+          "type": "timestamp with time zone",
+          "primaryKey": false,
+          "notNull": false
+        }
+      },
+      "indexes": {
+        "idx_providers_enabled_priority": {
+          "name": "idx_providers_enabled_priority",
+          "columns": [
+            {
+              "expression": "is_enabled",
+              "isExpression": false,
+              "asc": true,
+              "nulls": "last"
+            },
+            {
+              "expression": "priority",
+              "isExpression": false,
+              "asc": true,
+              "nulls": "last"
+            },
+            {
+              "expression": "weight",
+              "isExpression": false,
+              "asc": true,
+              "nulls": "last"
+            }
+          ],
+          "isUnique": false,
+          "where": "\"providers\".\"deleted_at\" IS NULL",
+          "concurrently": false,
+          "method": "btree",
+          "with": {}
+        },
+        "idx_providers_group": {
+          "name": "idx_providers_group",
+          "columns": [
+            {
+              "expression": "group_tag",
+              "isExpression": false,
+              "asc": true,
+              "nulls": "last"
+            }
+          ],
+          "isUnique": false,
+          "where": "\"providers\".\"deleted_at\" IS NULL",
+          "concurrently": false,
+          "method": "btree",
+          "with": {}
+        },
+        "idx_providers_created_at": {
+          "name": "idx_providers_created_at",
+          "columns": [
+            {
+              "expression": "created_at",
+              "isExpression": false,
+              "asc": true,
+              "nulls": "last"
+            }
+          ],
+          "isUnique": false,
+          "concurrently": false,
+          "method": "btree",
+          "with": {}
+        },
+        "idx_providers_deleted_at": {
+          "name": "idx_providers_deleted_at",
+          "columns": [
+            {
+              "expression": "deleted_at",
+              "isExpression": false,
+              "asc": true,
+              "nulls": "last"
+            }
+          ],
+          "isUnique": false,
+          "concurrently": false,
+          "method": "btree",
+          "with": {}
+        }
+      },
+      "foreignKeys": {},
+      "compositePrimaryKeys": {},
+      "uniqueConstraints": {},
+      "policies": {},
+      "checkConstraints": {},
+      "isRLSEnabled": false
+    },
+    "public.sensitive_words": {
+      "name": "sensitive_words",
+      "schema": "",
+      "columns": {
+        "id": {
+          "name": "id",
+          "type": "serial",
+          "primaryKey": true,
+          "notNull": true
+        },
+        "word": {
+          "name": "word",
+          "type": "varchar(255)",
+          "primaryKey": false,
+          "notNull": true
+        },
+        "match_type": {
+          "name": "match_type",
+          "type": "varchar(20)",
+          "primaryKey": false,
+          "notNull": true,
+          "default": "'contains'"
+        },
+        "description": {
+          "name": "description",
+          "type": "text",
+          "primaryKey": false,
+          "notNull": false
+        },
+        "is_enabled": {
+          "name": "is_enabled",
+          "type": "boolean",
+          "primaryKey": false,
+          "notNull": true,
+          "default": true
+        },
+        "created_at": {
+          "name": "created_at",
+          "type": "timestamp with time zone",
+          "primaryKey": false,
+          "notNull": false,
+          "default": "now()"
+        },
+        "updated_at": {
+          "name": "updated_at",
+          "type": "timestamp with time zone",
+          "primaryKey": false,
+          "notNull": false,
+          "default": "now()"
+        }
+      },
+      "indexes": {
+        "idx_sensitive_words_enabled": {
+          "name": "idx_sensitive_words_enabled",
+          "columns": [
+            {
+              "expression": "is_enabled",
+              "isExpression": false,
+              "asc": true,
+              "nulls": "last"
+            },
+            {
+              "expression": "match_type",
+              "isExpression": false,
+              "asc": true,
+              "nulls": "last"
+            }
+          ],
+          "isUnique": false,
+          "concurrently": false,
+          "method": "btree",
+          "with": {}
+        },
+        "idx_sensitive_words_created_at": {
+          "name": "idx_sensitive_words_created_at",
+          "columns": [
+            {
+              "expression": "created_at",
+              "isExpression": false,
+              "asc": true,
+              "nulls": "last"
+            }
+          ],
+          "isUnique": false,
+          "concurrently": false,
+          "method": "btree",
+          "with": {}
+        }
+      },
+      "foreignKeys": {},
+      "compositePrimaryKeys": {},
+      "uniqueConstraints": {},
+      "policies": {},
+      "checkConstraints": {},
+      "isRLSEnabled": false
+    },
+    "public.system_settings": {
+      "name": "system_settings",
+      "schema": "",
+      "columns": {
+        "id": {
+          "name": "id",
+          "type": "serial",
+          "primaryKey": true,
+          "notNull": true
+        },
+        "site_title": {
+          "name": "site_title",
+          "type": "varchar(128)",
+          "primaryKey": false,
+          "notNull": true,
+          "default": "'Claude Code Hub'"
+        },
+        "allow_global_usage_view": {
+          "name": "allow_global_usage_view",
+          "type": "boolean",
+          "primaryKey": false,
+          "notNull": true,
+          "default": false
+        },
+        "currency_display": {
+          "name": "currency_display",
+          "type": "varchar(10)",
+          "primaryKey": false,
+          "notNull": true,
+          "default": "'USD'"
+        },
+        "enable_auto_cleanup": {
+          "name": "enable_auto_cleanup",
+          "type": "boolean",
+          "primaryKey": false,
+          "notNull": false,
+          "default": false
+        },
+        "cleanup_retention_days": {
+          "name": "cleanup_retention_days",
+          "type": "integer",
+          "primaryKey": false,
+          "notNull": false,
+          "default": 30
+        },
+        "cleanup_schedule": {
+          "name": "cleanup_schedule",
+          "type": "varchar(50)",
+          "primaryKey": false,
+          "notNull": false,
+          "default": "'0 2 * * *'"
+        },
+        "cleanup_batch_size": {
+          "name": "cleanup_batch_size",
+          "type": "integer",
+          "primaryKey": false,
+          "notNull": false,
+          "default": 10000
+        },
+        "enable_client_version_check": {
+          "name": "enable_client_version_check",
+          "type": "boolean",
+          "primaryKey": false,
+          "notNull": true,
+          "default": false
+        },
+        "created_at": {
+          "name": "created_at",
+          "type": "timestamp with time zone",
+          "primaryKey": false,
+          "notNull": false,
+          "default": "now()"
+        },
+        "updated_at": {
+          "name": "updated_at",
+          "type": "timestamp with time zone",
+          "primaryKey": false,
+          "notNull": false,
+          "default": "now()"
+        }
+      },
+      "indexes": {},
+      "foreignKeys": {},
+      "compositePrimaryKeys": {},
+      "uniqueConstraints": {},
+      "policies": {},
+      "checkConstraints": {},
+      "isRLSEnabled": false
+    },
+    "public.users": {
+      "name": "users",
+      "schema": "",
+      "columns": {
+        "id": {
+          "name": "id",
+          "type": "serial",
+          "primaryKey": true,
+          "notNull": true
+        },
+        "name": {
+          "name": "name",
+          "type": "varchar",
+          "primaryKey": false,
+          "notNull": true
+        },
+        "description": {
+          "name": "description",
+          "type": "text",
+          "primaryKey": false,
+          "notNull": false
+        },
+        "role": {
+          "name": "role",
+          "type": "varchar",
+          "primaryKey": false,
+          "notNull": false,
+          "default": "'user'"
+        },
+        "rpm_limit": {
+          "name": "rpm_limit",
+          "type": "integer",
+          "primaryKey": false,
+          "notNull": false,
+          "default": 60
+        },
+        "daily_limit_usd": {
+          "name": "daily_limit_usd",
+          "type": "numeric(10, 2)",
+          "primaryKey": false,
+          "notNull": false,
+          "default": "'100.00'"
+        },
+        "provider_group": {
+          "name": "provider_group",
+          "type": "varchar(50)",
+          "primaryKey": false,
+          "notNull": false
+        },
+        "limit_5h_usd": {
+          "name": "limit_5h_usd",
+          "type": "numeric(10, 2)",
+          "primaryKey": false,
+          "notNull": false
+        },
+        "limit_weekly_usd": {
+          "name": "limit_weekly_usd",
+          "type": "numeric(10, 2)",
+          "primaryKey": false,
+          "notNull": false
+        },
+        "limit_monthly_usd": {
+          "name": "limit_monthly_usd",
+          "type": "numeric(10, 2)",
+          "primaryKey": false,
+          "notNull": false
+        },
+        "limit_concurrent_sessions": {
+          "name": "limit_concurrent_sessions",
+          "type": "integer",
+          "primaryKey": false,
+          "notNull": false
+        },
+        "created_at": {
+          "name": "created_at",
+          "type": "timestamp with time zone",
+          "primaryKey": false,
+          "notNull": false,
+          "default": "now()"
+        },
+        "updated_at": {
+          "name": "updated_at",
+          "type": "timestamp with time zone",
+          "primaryKey": false,
+          "notNull": false,
+          "default": "now()"
+        },
+        "deleted_at": {
+          "name": "deleted_at",
+          "type": "timestamp with time zone",
+          "primaryKey": false,
+          "notNull": false
+        }
+      },
+      "indexes": {
+        "idx_users_active_role_sort": {
+          "name": "idx_users_active_role_sort",
+          "columns": [
+            {
+              "expression": "deleted_at",
+              "isExpression": false,
+              "asc": true,
+              "nulls": "last"
+            },
+            {
+              "expression": "role",
+              "isExpression": false,
+              "asc": true,
+              "nulls": "last"
+            },
+            {
+              "expression": "id",
+              "isExpression": false,
+              "asc": true,
+              "nulls": "last"
+            }
+          ],
+          "isUnique": false,
+          "where": "\"users\".\"deleted_at\" IS NULL",
+          "concurrently": false,
+          "method": "btree",
+          "with": {}
+        },
+        "idx_users_created_at": {
+          "name": "idx_users_created_at",
+          "columns": [
+            {
+              "expression": "created_at",
+              "isExpression": false,
+              "asc": true,
+              "nulls": "last"
+            }
+          ],
+          "isUnique": false,
+          "concurrently": false,
+          "method": "btree",
+          "with": {}
+        },
+        "idx_users_deleted_at": {
+          "name": "idx_users_deleted_at",
+          "columns": [
+            {
+              "expression": "deleted_at",
+              "isExpression": false,
+              "asc": true,
+              "nulls": "last"
+            }
+          ],
+          "isUnique": false,
+          "concurrently": false,
+          "method": "btree",
+          "with": {}
+        }
+      },
+      "foreignKeys": {},
+      "compositePrimaryKeys": {},
+      "uniqueConstraints": {},
+      "policies": {},
+      "checkConstraints": {},
+      "isRLSEnabled": false
+    }
+  },
+  "enums": {},
+  "schemas": {},
+  "sequences": {},
+  "roles": {},
+  "policies": {},
+  "views": {},
+  "_meta": {
+    "columns": {},
+    "schemas": {},
+    "tables": {}
+  }
+}

+ 21 - 0
drizzle/meta/_journal.json

@@ -127,6 +127,27 @@
       "when": 1762772559167,
       "tag": "0017_sudden_bruce_banner",
       "breakpoints": true
+    },
+    {
+      "idx": 18,
+      "version": "7",
+      "when": 1763308745315,
+      "tag": "0018_natural_sasquatch",
+      "breakpoints": true
+    },
+    {
+      "idx": 19,
+      "version": "7",
+      "when": 1763393401417,
+      "tag": "0019_far_whirlwind",
+      "breakpoints": true
+    },
+    {
+      "idx": 20,
+      "version": "7",
+      "when": 1763465177387,
+      "tag": "0020_next_juggernaut",
+      "breakpoints": true
     }
   ]
 }

+ 1 - 1
messages/en/auth.json

@@ -30,7 +30,7 @@
     "solutionTitle": "Solutions:",
     "useHttps": "Use HTTPS to access the system (recommended)",
     "disableSecureCookies": "Set ENABLE_SECURE_COOKIES=false in .env (reduces security)",
-    "privacyNote": "We only use this Key for login verification and never store the original text."
+    "privacyNote": "Please use your API Key to log in to the Claude Code Hub admin panel"
   },
   "errors": {
     "loginFailed": "Login failed",

+ 2 - 1
messages/en/common.json

@@ -39,5 +39,6 @@
   "warning": "Warning",
   "info": "Info",
   "noData": "No data",
-  "emptyState": "No data to display"
+  "emptyState": "No data to display",
+  "core": "Core"
 }

+ 36 - 0
messages/en/dashboard.json

@@ -359,6 +359,7 @@
     "usageLogs": "Usage Logs",
     "leaderboard": "Leaderboard",
     "quotasManagement": "Quota Management",
+    "userManagement": "User Management",
     "documentation": "Documentation",
     "systemSettings": "System Settings",
     "feedback": "Feedback",
@@ -418,6 +419,8 @@
     },
     "limitUsage": "Limit Usage",
     "copyKeyTooltip": "Copy full key",
+    "showKeyTooltip": "Show full key",
+    "hideKeyTooltip": "Hide key",
     "copyFailed": "Copy failed:",
     "timesUnit": "times",
     "provider": "Provider",
@@ -462,6 +465,10 @@
       "description": "Your API key has been created successfully. Please copy and save it securely, as it will only be displayed once.",
       "apiKeyLabel": "API Key",
       "warningText": "Please copy and save before closing. You will not be able to view this key again after closing.",
+      "httpWarningText": "HTTP access detected. Browser restrictions prevent clipboard access. Click the eye icon to reveal the key and copy manually.",
+      "copyTooltip": "Copy to clipboard",
+      "showTooltip": "Show full key",
+      "hideTooltip": "Hide key",
       "closeButton": "Close"
     }
   },
@@ -559,6 +566,26 @@
       "label": "Daily Quota",
       "placeholder": "Daily consumption quota limit",
       "description": "Default: ${default}, Range: $0.01-$1000"
+    },
+    "limit5hUsd": {
+      "label": "5-Hour Quota (USD)",
+      "placeholder": "Leave empty for unlimited",
+      "description": "Maximum spending in 5 hours"
+    },
+    "limitWeeklyUsd": {
+      "label": "Weekly Quota (USD)",
+      "placeholder": "Leave empty for unlimited",
+      "description": "Maximum weekly spending"
+    },
+    "limitMonthlyUsd": {
+      "label": "Monthly Quota (USD)",
+      "placeholder": "Leave empty for unlimited",
+      "description": "Maximum monthly spending"
+    },
+    "limitConcurrentSessions": {
+      "label": "Concurrent Sessions Limit",
+      "placeholder": "0 means unlimited",
+      "description": "Number of simultaneous conversations"
     }
   },
   "deleteKeyConfirm": {
@@ -583,5 +610,14 @@
     "delete": "Delete user",
     "editAriaLabel": "Edit user",
     "deleteAriaLabel": "Delete user"
+  },
+  "users": {
+    "title": "User Management",
+    "description": "Showing {count} users",
+    "toolbar": {
+      "searchPlaceholder": "Search by username...",
+      "groupFilter": "Filter by Group",
+      "allGroups": "All Groups"
+    }
   }
 }

+ 7 - 0
messages/en/errors.json

@@ -49,6 +49,13 @@
   "INVALID_STATE": "Operation not allowed in current state",
   "CONFLICT": "Operation conflict",
 
+  "RATE_LIMIT_RPM_EXCEEDED": "Rate limit exceeded: {current} requests per minute (limit: {limit}). Resets at {resetTime}",
+  "RATE_LIMIT_5H_EXCEEDED": "5-hour cost limit exceeded: ${current} USD (limit: ${limit} USD). Resets at {resetTime}",
+  "RATE_LIMIT_WEEKLY_EXCEEDED": "Weekly cost limit exceeded: ${current} USD (limit: ${limit} USD). Resets at {resetTime}",
+  "RATE_LIMIT_MONTHLY_EXCEEDED": "Monthly cost limit exceeded: ${current} USD (limit: ${limit} USD). Resets at {resetTime}",
+  "RATE_LIMIT_CONCURRENT_SESSIONS_EXCEEDED": "Concurrent sessions limit exceeded: {current} sessions (limit: {limit}). Please wait for active sessions to complete",
+  "RATE_LIMIT_DAILY_QUOTA_EXCEEDED": "Daily quota exceeded: ${current} USD (limit: ${limit} USD). Resets at {resetTime}",
+
   "USER_NOT_FOUND": "User not found",
   "USER_CANNOT_MODIFY_SENSITIVE_FIELDS": "Regular users cannot modify quota limits and provider groups",
   "CREATE_USER_FAILED": "Failed to create user, please try again later",

+ 4 - 0
messages/en/index.ts

@@ -6,10 +6,12 @@ import errors from "./errors.json";
 import forms from "./forms.json";
 import notifications from "./notifications.json";
 import providerChain from "./provider-chain.json";
+import providers from "./providers.json";
 import quota from "./quota.json";
 import settings from "./settings.json";
 import ui from "./ui.json";
 import usage from "./usage.json";
+import users from "./users.json";
 import validation from "./validation.json";
 import internal from "./internal.json";
 
@@ -22,10 +24,12 @@ export default {
   forms,
   notifications,
   "provider-chain": providerChain,
+  providers,
   quota,
   settings,
   ui,
   usage,
+  users,
   validation,
   internal,
 };

+ 5 - 1
messages/en/notifications.json

@@ -12,7 +12,7 @@
   "refresh_success": "Refreshed successfully",
   "test_success": "Test successful",
 
-  "user_created": "User {name} created successfully",
+  "user_created": "User created successfully",
   "user_updated": "User information updated",
   "user_deleted": "User deleted",
   "key_created": "API key created successfully",
@@ -22,6 +22,10 @@
   "provider_updated": "Provider updated",
   "provider_deleted": "Provider deleted",
 
+  "create_failed": "Creation failed",
+  "update_failed": "Update failed",
+  "delete_failed": "Deletion failed",
+
   "operation_success": "Operation successful",
   "operation_failed": "Operation failed",
   "processing": "Processing...",

+ 19 - 9
messages/en/provider-chain.json

@@ -6,10 +6,16 @@
     "unknown": "Unknown"
   },
   "errors": {
-    "ENOTFOUND": "DNS resolution failed",
-    "ECONNREFUSED": "Connection refused",
-    "ETIMEDOUT": "Connection or read timeout",
-    "ECONNRESET": "Connection reset"
+    "ENOTFOUND": "DNS resolution failed (domain name not found)",
+    "ECONNREFUSED": "Connection refused (target server rejected connection)",
+    "ETIMEDOUT": "TCP connection timeout (high network latency or firewall blocking)",
+    "ECONNRESET": "Connection reset (network interruption or server disconnect)",
+    "EHOSTUNREACH": "Host unreachable (network routing issue)",
+    "ENETUNREACH": "Network unreachable (local network configuration issue)",
+    "EPROTO": "Protocol error (SSL/TLS handshake failed)",
+    "CLIENT_ABORT": "Client aborted request",
+    "PROVIDER_TIMEOUT": "Provider response timeout (high first-byte latency)",
+    "STREAMING_IDLE_TIMEOUT": "Streaming idle timeout (provider stopped sending data)"
   },
   "summary": {
     "singleSuccess": "{total} providers, {healthy} healthy → {provider} ✓",
@@ -80,9 +86,9 @@
     "alreadyBroken": "Circuit already broken",
     "circuitTriggered": "⚠️ Circuit breaker triggered",
     "errorDetails": "Error Details",
-    "systemError": "System Error",
-    "systemErrorFailed": "System Error (Attempt {attempt})",
-    "errorType": "Error Type: System Error",
+    "systemError": "Network/System Error",
+    "systemErrorFailed": "Network/System Error (Attempt {attempt})",
+    "errorType": "Error Type: ",
     "errorName": "Error",
     "errorCode": "Error Code: {code}",
     "errorSyscall": "Syscall: {syscall}",
@@ -99,7 +105,7 @@
     "requestOk": "OK",
     "successStatus": "Status: {code} OK",
     "requestCompleted": "Request completed successfully",
-    "completed": "Request completed successfully",
+    "completed": "Request completed successfully",
     "concurrentLimitFailed": "Concurrent Limit",
     "attemptFailed": "Attempt Failed ({attempt})",
     "concurrentLimit": "Concurrent Limit",
@@ -107,6 +113,10 @@
     "sessions": "Sessions",
     "withPriorityWeight": "(priority={priority} weight={weight})",
     "unknown": "Unknown",
-    "noDecisionRecord": "No decision record"
+    "noDecisionRecord": "No decision record",
+    "modelRedirect": "Model Redirect",
+    "modelRedirectFrom": "  Requested Model: {model}",
+    "modelRedirectTo": "  Redirected To: {model}",
+    "modelRedirectBilling": "  Billing Model: {model}"
   }
 }

+ 30 - 0
messages/en/providers.json

@@ -0,0 +1,30 @@
+{
+  "_comment": "Provider types and related translations for English",
+
+  "types": {
+    "claude": {
+      "label": "Claude",
+      "description": "Anthropic Official API"
+    },
+    "claudeAuth": {
+      "label": "Claude Auth",
+      "description": "Claude Relay Service"
+    },
+    "codex": {
+      "label": "Codex",
+      "description": "Codex CLI API"
+    },
+    "geminiCli": {
+      "label": "Gemini CLI",
+      "description": "Gemini CLI API"
+    },
+    "gemini": {
+      "label": "Gemini",
+      "description": "Google Gemini Official API"
+    },
+    "openaiCompatible": {
+      "label": "OpenAI Compatible",
+      "description": "OpenAI Compatible API"
+    }
+  }
+}

+ 2 - 0
messages/en/quota.json

@@ -64,6 +64,8 @@
   "users": {
     "title": "User Quota Statistics",
     "totalCount": "{count} users total",
+    "manageNotice": "To manage users and keys, visit",
+    "manageLink": "User Management",
     "noNote": "No note",
     "rpm": {
       "label": "RPM Quota",

+ 206 - 3
messages/en/settings.json

@@ -268,8 +268,7 @@
         "description": "Export complete database backup file (.dump format) for data migration or recovery."
       },
       "import": {
-        "title": "Data Import",
-        "description": "Restore database from backup file. Supports PostgreSQL custom format (.dump) backup files."
+        "title": "Data Import"
       }
     }
   },
@@ -349,6 +348,8 @@
     "clientVersions": "Client Update Reminder",
     "config": "Configuration",
     "data": "Data Management",
+    "errorRules": "Error Rules",
+    "feedback": "Feedback",
     "logs": "Logs",
     "notifications": "Notifications",
     "prices": "Pricing",
@@ -506,6 +507,10 @@
         "label": "Codex",
         "description": "Codex CLI API"
       },
+      "gemini": {
+        "label": "Gemini",
+        "description": "Google Gemini API"
+      },
       "geminiCli": {
         "label": "Gemini CLI",
         "description": "Gemini CLI API"
@@ -575,6 +580,37 @@
     "editProvider": "Edit Provider",
     "enabledStatus": "enabled",
     "form": {
+      "apiTest": {
+        "fillUrlFirst": "Please fill in provider URL first",
+        "invalidUrl": "Provider URL is invalid (http/https only)",
+        "fillKeyFirst": "Please fill in API key first",
+        "testFailed": "Test failed",
+        "testFailedRetry": "Test failed, please retry",
+        "noResult": "Test succeeded but no result returned",
+        "testSuccess": "Model test succeeded",
+        "testApi": "Provider Model Test",
+        "testing": "Testing...",
+        "apiFormat": "Provider type",
+        "selectApiFormat": "Select provider type to test",
+        "apiFormatDesc": "Defaults to the routing configuration unless manually changed",
+        "formatAnthropicMessages": "Claude (Anthropic Messages API)",
+        "formatOpenAIChat": "OpenAI Compatible",
+        "formatOpenAIResponses": "Codex (Response API)",
+        "testModel": "Test model",
+        "testModelDesc": "Leave empty to use the default model or type one manually",
+        "model": "Model",
+        "responseTime": "Response time",
+        "usage": "Token usage",
+        "response": "Response preview",
+        "error": "Error message",
+        "unknown": "Unknown",
+        "viewDetails": "View Details",
+        "copySuccess": "Copied to clipboard",
+        "copyFailed": "Failed to copy",
+        "copyResult": "Copy Result",
+        "success": "Success",
+        "failed": "Failed"
+      },
       "proxyTest": {
         "fillUrlFirst": "Please fill in provider URL first",
         "testFailed": "Test failed",
@@ -596,6 +632,15 @@
         "proxyError": "Proxy error:",
         "networkError": "Network error:"
       },
+      "urlPreview": {
+        "title": "URL Concatenation Preview",
+        "invalidUrl": "Invalid URL format",
+        "invalidUrlDesc": "Please enter a valid HTTP/HTTPS address",
+        "duplicatePath": "Duplicate path detected",
+        "copy": "Copy",
+        "copySuccess": "Copied {name} to clipboard",
+        "copyFailed": "Copy failed"
+      },
       "modelSelect": {
         "allowAllModels": "Allow all {type} models",
         "selectedCount": "Selected {count} models",
@@ -858,6 +903,9 @@
         "updating": "Updating...",
         "delete": "Delete"
       },
+      "common": {
+        "core": "Core"
+      },
       "sections": {
         "routing": {
           "title": "Routing",
@@ -872,7 +920,7 @@
             "placeholder": "Select provider type"
           },
           "providerTypeDesc": "Choose the API format type of the provider.",
-          "providerTypeDisabledNote": "Note: Gemini CLI and OpenAI Compatible are under development and currently unavailable",
+          "providerTypeDisabledNote": "Note: OpenAI Compatible is under development and currently unavailable",
           "modelRedirects": {
             "label": "Model Redirects",
             "optional": "(optional)"
@@ -984,6 +1032,37 @@
             "desc": "Test accessing provider URL via proxy (HEAD request, no credits consumed)"
           }
         },
+        "timeout": {
+          "title": "Timeout Configuration",
+          "summary": "First byte: {streaming}s | Stream interval: {idle}s | Non-streaming: {nonStreaming}s",
+          "desc": "Configure request timeout duration, 0 means disable timeout",
+          "streamingFirstByte": {
+            "label": "Streaming First Byte Timeout (seconds)",
+            "placeholder": "30",
+            "desc": "Streaming request first byte timeout, range 1-120 seconds, default 30 seconds",
+            "core": "true"
+          },
+          "streamingIdle": {
+            "label": "Streaming Idle Timeout (seconds)",
+            "placeholder": "10",
+            "desc": "Streaming request idle timeout, range 1-120 seconds, default 10 seconds (prevent mid-stream stalling)",
+            "core": "true"
+          },
+          "nonStreamingTotal": {
+            "label": "Non-streaming Total Timeout (seconds)",
+            "placeholder": "600",
+            "desc": "Non-streaming request total timeout, range 60-1200 seconds, default 600 seconds (10 minutes)",
+            "core": "true"
+          },
+          "disableHint": "Set to 0 to disable the timeout (for canary rollback scenarios only, not recommended)"
+        },
+        "apiTest": {
+          "title": "Provider Model Test",
+          "summary": "Verify provider & model connectivity",
+          "desc": "Validate whether the selected provider type and model respond correctly. Defaults to the routing configuration unless overridden.",
+          "testLabel": "Provider Model Test",
+          "notice": "Note: This sends a real non-streaming request and may consume a small quota. Confirm provider URL, API key, and model before running."
+        },
         "codexStrategy": {
           "title": "Codex Instructions Policy",
           "summary": {
@@ -1015,6 +1094,7 @@
         "claude": "Claude (Anthropic Messages API)",
         "claudeAuth": "Claude (Anthropic Auth Token)",
         "codex": "Codex (Response API)",
+        "gemini": "Gemini (Google Gemini API)",
         "geminiCli": "Gemini CLI",
         "geminiCliDisabled": " - in development",
         "openaiCompatible": "OpenAI Compatible",
@@ -1254,5 +1334,128 @@
     "title": "Sensitive Words Management",
     "toggleFailed": "Toggle failed",
     "toggleFailedError": "Toggle failed:"
+  },
+  "errorRules": {
+    "nav": "Error Rules",
+    "title": "Error Rules Management",
+    "description": "Manage client error rules that should not trigger automatic retries. When configured, errors matching these rules will be returned directly to users without retrying or counting toward provider circuit breaker thresholds.",
+    "section": {
+      "title": "Error Rules List"
+    },
+    "add": "Add Error Rule",
+    "addSuccess": "Error rule created successfully",
+    "addFailed": "Failed to create error rule",
+    "edit": "Edit Error Rule",
+    "editSuccess": "Error rule updated successfully",
+    "editFailed": "Failed to update error rule",
+    "delete": "Delete Error Rule",
+    "deleteSuccess": "Error rule deleted successfully",
+    "deleteFailed": "Delete failed",
+    "enable": "Error rule enabled",
+    "disable": "Error rule disabled",
+    "toggleFailed": "Toggle failed",
+    "toggleFailedError": "Toggle failed:",
+    "refreshCache": "Refresh Cache",
+    "refreshCacheSuccess": "Cache refreshed successfully, loaded {count} error rules",
+    "refreshCacheFailed": "Failed to refresh cache",
+    "cacheStats": "Cache stats: Enabled({enabledCount}) Disabled({disabledCount}) Default({defaultCount})",
+    "emptyState": "No error rules yet. Click 'Add Error Rule' in the top right to start configuration.",
+    "confirmDelete": "Are you sure you want to delete error rule \"{pattern}\"?",
+    "dialog": {
+      "addTitle": "Add Error Rule",
+      "addDescription": "Configure error message regex patterns. Matched errors will be identified as non-retryable client errors.",
+      "editTitle": "Edit Error Rule",
+      "editDescription": "Modify error rule configuration. Changes will automatically refresh the cache.",
+      "patternLabel": "Regex Pattern *",
+      "patternPlaceholder": "Enter regular expression...",
+      "patternRequired": "Please enter regex pattern",
+      "patternHint": "Supports JavaScript regex syntax, e.g.: prompt is too long|invalid.*request",
+      "categoryLabel": "Rule Category *",
+      "categoryPlaceholder": "Select rule category",
+      "categoryRequired": "Please select rule category",
+      "categoryHint": "Choose the error category for classification and statistics",
+      "descriptionLabel": "Description",
+      "descriptionPlaceholder": "Optional: Add description...",
+      "invalidRegex": "Invalid regex syntax",
+      "regexTester": "Regex Tester",
+      "testMessageLabel": "Test Message",
+      "testMessagePlaceholder": "Enter error message to test...",
+      "matchSuccess": "Match Successful",
+      "matchFailed": "No Match",
+      "invalidPattern": "Invalid Regex",
+      "matchedText": "Matched Text",
+      "defaultRuleHint": "Default rule pattern cannot be modified",
+      "creating": "Creating...",
+      "saving": "Saving..."
+    },
+    "table": {
+      "pattern": "Regex Pattern",
+      "category": "Rule Category",
+      "description": "Description",
+      "status": "Status",
+      "default": "Default",
+      "isEnabled": "Enabled Status",
+      "isDefault": "Default Rule",
+      "createdAt": "Created At",
+      "actions": "Actions"
+    },
+    "form": {
+      "fields": {
+        "pattern": "Regex Pattern",
+        "category": "Rule Category",
+        "description": "Description"
+      },
+      "placeholders": {
+        "pattern": "e.g. prompt is too long",
+        "category": "Select category",
+        "description": "Optional: Add description..."
+      },
+      "labels": {
+        "pattern": "Regex Pattern *",
+        "category": "Rule Category *",
+        "description": "Description",
+        "isEnabled": "Enabled Status"
+      }
+    },
+    "actions": {
+      "add": "Add",
+      "edit": "Edit",
+      "delete": "Delete",
+      "refresh": "Refresh",
+      "test": "Test",
+      "messages": {
+        "success": "Operation successful",
+        "error": "Operation failed"
+      }
+    },
+    "validation": {
+      "patternRequired": "Please enter regex pattern",
+      "categoryRequired": "Please select rule category",
+      "patternInvalid": "Invalid regex syntax",
+      "redosRisk": "Regex has ReDoS risk, please simplify pattern",
+      "patternTooComplex": "Regex is too complex"
+    },
+    "categories": {
+      "prompt_limit": "Prompt Length Limit",
+      "content_filter": "Content Filter",
+      "pdf_limit": "PDF Page Limit",
+      "thinking_error": "Thinking Format Error",
+      "parameter_error": "Parameter Validation Failed",
+      "invalid_request": "Invalid Request",
+      "cache_limit": "Cache Control Limit"
+    },
+    "regexTester": {
+      "title": "Regex Tester",
+      "testMessage": "Test Message",
+      "testMessagePlaceholder": "Enter error message to test...",
+      "matchResult": "Match Result",
+      "matched": "Matched",
+      "notMatched": "Not Matched",
+      "test": "Test"
+    },
+    "defaultRules": {
+      "cannotDelete": "Default rules cannot be deleted",
+      "cannotDisable": "Recommend keeping default rules enabled"
+    }
   }
 }

+ 11 - 1
messages/en/ui.json

@@ -4,7 +4,8 @@
     "actions": "Actions",
     "loading": "Loading...",
     "empty": "Empty",
-    "error": "Error"
+    "error": "Error",
+    "retry": "Retry"
   },
   "table": {
     "pagination": "Pagination",
@@ -43,5 +44,14 @@
   "loading": {
     "title": "Loading",
     "description": "Please wait..."
+  },
+  "tagInput": {
+    "placeholder": "Type and press Enter or comma to add tags",
+    "emptyTag": "Tag cannot be empty",
+    "duplicateTag": "Tag already exists",
+    "maxTags": "Maximum number of tags reached",
+    "tooLong": "Tag length cannot exceed {max} characters",
+    "invalidFormat": "Tags can only contain letters, numbers, underscores and hyphens",
+    "removeTag": "Remove tag {tag}"
   }
 }

+ 123 - 0
messages/en/usage.json

@@ -341,6 +341,129 @@
     }
   },
 
+  "gemini": {
+    "title": "Gemini CLI Usage Guide",
+    "description": "Gemini CLI is Google's official AI programming assistant command-line tool that supports integration through the cch proxy service. This guide will help you complete installation and configuration on different operating systems.",
+
+    "installation": {
+      "title": "Install gemini",
+      "instruction": "Make sure you have Node.js 18 or higher installed, then globally install Gemini CLI:",
+      "command": "npm install -g @google/gemini-cli",
+      "verification": "Verify installation:",
+      "verificationCommand": "gemini --version",
+      "adminNote": "Run PowerShell as administrator, "
+    },
+
+    "configuration": {
+      "title": "Connect to cch service",
+
+      "configFile": {
+        "title": "Method 1: Configuration File (Recommended)",
+
+        "step1": {
+          "title": "Create configuration directory",
+          "description": "Gemini CLI configuration files are located in the ~/.gemini/ directory.",
+          "macosLinux": "macOS / Linux:",
+          "windows": "Windows (PowerShell):"
+        },
+
+        "step2": {
+          "title": "Create .env configuration file",
+          "description": "Create the .env file in the ~/.gemini/ directory:",
+          "macosLinuxInstruction": "macOS / Linux:",
+          "windowsInstruction": "Windows: Create the .env file in the %USERPROFILE%\\.gemini\\ directory",
+          "content": "Add the following content:"
+        },
+
+        "step3": {
+          "title": "Create settings.json configuration file",
+          "description": "Create the settings.json file in the ~/.gemini/ directory:",
+          "content": "This configuration file enables IDE integration and sets the authentication method to API Key."
+        },
+
+        "parameterNote": "Parameter description",
+        "parameters": [
+          "GOOGLE_GEMINI_BASE_URL: cch API base URL",
+          "GEMINI_API_KEY: Your API key created in the cch console",
+          "GEMINI_MODEL: Model to use (default is gemini-2.5-pro)"
+        ],
+
+        "important": "Important",
+        "importantPoints": [
+          "Replace YOUR_API_KEY_HERE with your actual API key",
+          "How to obtain the key: Log in to the console → API Key Management → Create Key"
+        ]
+      },
+
+      "envVars": {
+        "title": "Method 2: Environment Variable Configuration",
+        "description": "If you only want to use it temporarily, you can configure it via environment variables:",
+
+        "macosLinux": {
+          "title": "macOS / Linux:",
+          "note": "Environment variables are only valid for the current terminal session. For persistent configuration, use the configuration file method."
+        },
+
+        "windows": {
+          "powershell": "Windows (PowerShell):",
+          "cmd": "Windows (CMD):",
+          "note": "Environment variables are only valid for the current terminal session. For persistent configuration, use the configuration file method."
+        }
+      }
+    },
+
+    "startup": {
+      "title": "Startup and Verification",
+
+      "startCli": {
+        "title": "Start Gemini CLI",
+        "description": "Navigate to your project directory and start Gemini CLI:",
+        "note": "On first startup, Gemini CLI will read the settings in the configuration file."
+      },
+
+      "verification": {
+        "title": "Verify Configuration",
+        "description": "Try sending a simple request in Gemini CLI to test the connection:",
+        "testCommand": "Hello, please help me create a Python hello world program",
+        "success": "If Gemini CLI responds normally, the configuration is successful!"
+      },
+
+      "agentMode": {
+        "title": "Using Agent Mode",
+        "description": "Gemini CLI supports Agent Mode, which can automatically plan and execute complex tasks:",
+        "command": "gemini --agent",
+        "features": "In Agent Mode, Gemini will:",
+        "featureList": [
+          "Automatically analyze task requirements",
+          "Develop execution plans",
+          "Execute step by step and verify results",
+          "Adjust strategies based on feedback"
+        ]
+      }
+    },
+
+    "commonIssues": {
+      "title": "Common Issues",
+
+      "commandNotFound": "1. Command not found",
+      "commandNotFoundWindows": [
+        "Make sure the npm global path (usually C:\\Users\\your-username\\AppData\\Roaming\\npm) has been added to the system PATH",
+        "Reopen the PowerShell window"
+      ],
+      "commandNotFoundUnix": "Check the npm global installation path and add it to PATH (if not already there)",
+
+      "connectionFailed": "2. API connection failed",
+      "connectionSteps": [
+        "Check if GEMINI_API_KEY in the environment variables or configuration file is set correctly",
+        "Verify if GOOGLE_GEMINI_BASE_URL is correct",
+        "Test network connection"
+      ],
+
+      "updateCli": "3. Update gemini",
+      "updateCommand": "npm install -g @google/gemini-cli"
+    }
+  },
+
   "droid": {
     "title": "Droid CLI Usage Guide",
     "description": "Droid is an interactive terminal AI programming assistant developed by Factory AI that supports integration through the cch proxy service. You must register and log in to your Droid official account before use.",

+ 1 - 1
messages/ja/auth.json

@@ -30,7 +30,7 @@
     "solutionTitle": "解決策:",
     "useHttps": "HTTPS を使用してアクセスしてください (推奨)",
     "disableSecureCookies": ".env ファイルで ENABLE_SECURE_COOKIES=false を設定 (セキュリティが低下します)",
-    "privacyNote": "このキーはログイン検証にのみ使用され、元のテキストは保存されません。"
+    "privacyNote": "API Keyを使用してClaude Code Hub管理画面にログインしてください"
   },
   "errors": {
     "loginFailed": "ログインに失敗しました",

+ 2 - 1
messages/ja/common.json

@@ -39,5 +39,6 @@
   "warning": "警告",
   "info": "情報",
   "noData": "データがありません",
-  "emptyState": "表示するデータがありません"
+  "emptyState": "表示するデータがありません",
+  "core": "コア"
 }

+ 27 - 0
messages/ja/dashboard.json

@@ -360,6 +360,7 @@
     "usageLogs": "使用ログ",
     "leaderboard": "ランキング",
     "quotasManagement": "クォータ管理",
+    "userManagement": "ユーザー管理",
     "documentation": "ドキュメント",
     "systemSettings": "システム設定",
     "feedback": "フィードバック",
@@ -419,6 +420,8 @@
     },
     "limitUsage": "制限使用状況",
     "copyKeyTooltip": "完全なキーをコピー",
+    "showKeyTooltip": "完全なキーを表示",
+    "hideKeyTooltip": "キーを非表示",
     "copyFailed": "コピーに失敗しました:",
     "timesUnit": "回",
     "provider": "プロバイダー",
@@ -463,6 +466,10 @@
       "description": "APIキーが正常に作成されました。安全にコピーして保存してください。このキーは一度だけ表示されます。",
       "apiKeyLabel": "API キー",
       "warningText": "閉じる前にコピーして保存してください。閉じた後、このキーを再度表示することはできません",
+      "httpWarningText": "HTTPアクセスが検出されました。ブラウザの制限によりコピー機能が使用できません。目のアイコンをクリックしてキーを表示し、手動でコピーしてください。",
+      "copyTooltip": "クリップボードにコピー",
+      "showTooltip": "完全なキーを表示",
+      "hideTooltip": "キーを非表示",
       "closeButton": "閉じる"
     }
   },
@@ -560,6 +567,26 @@
       "label": "1日あたりの割当量",
       "placeholder": "1日あたりの消費割当量制限",
       "description": "デフォルト値: ${default}、範囲: $0.01-$1000"
+    },
+    "limit5hUsd": {
+      "label": "5時間制限 (USD)",
+      "placeholder": "空白の場合は無制限",
+      "description": "5時間以内の最大消費金額"
+    },
+    "limitWeeklyUsd": {
+      "label": "週間制限 (USD)",
+      "placeholder": "空白の場合は無制限",
+      "description": "週間最大消費金額"
+    },
+    "limitMonthlyUsd": {
+      "label": "月間制限 (USD)",
+      "placeholder": "空白の場合は無制限",
+      "description": "月間最大消費金額"
+    },
+    "limitConcurrentSessions": {
+      "label": "同時セッション上限",
+      "placeholder": "0は無制限を意味します",
+      "description": "同時に実行される会話の数"
     }
   },
   "deleteKeyConfirm": {

+ 4 - 0
messages/ja/index.ts

@@ -7,10 +7,12 @@ import forms from "./forms.json";
 import internal from "./internal.json";
 import notifications from "./notifications.json";
 import providerChain from "./provider-chain.json";
+import providers from "./providers.json";
 import quota from "./quota.json";
 import settings from "./settings.json";
 import ui from "./ui.json";
 import usage from "./usage.json";
+import users from "./users.json";
 import validation from "./validation.json";
 
 export default {
@@ -23,9 +25,11 @@ export default {
   internal,
   notifications,
   "provider-chain": providerChain,
+  providers,
   quota,
   settings,
   ui,
   usage,
+  users,
   validation,
 };

+ 5 - 1
messages/ja/notifications.json

@@ -12,7 +12,7 @@
   "refresh_success": "更新しました",
   "test_success": "テスト成功",
 
-  "user_created": "ユーザー {name} を作成しました",
+  "user_created": "ユーザーを作成しました",
   "user_updated": "ユーザー情報を更新しました",
   "user_deleted": "ユーザーを削除しました",
   "key_created": "APIキーを作成しました",
@@ -22,6 +22,10 @@
   "provider_updated": "プロバイダーを更新しました",
   "provider_deleted": "プロバイダーを削除しました",
 
+  "create_failed": "作成に失敗しました",
+  "update_failed": "更新に失敗しました",
+  "delete_failed": "削除に失敗しました",
+
   "operation_success": "操作が成功しました",
   "operation_failed": "操作に失敗しました",
   "processing": "処理中...",

+ 13 - 3
messages/ja/provider-chain.json

@@ -9,7 +9,13 @@
     "ENOTFOUND": "DNS解決失敗",
     "ECONNREFUSED": "接続拒否",
     "ETIMEDOUT": "接続またはタイムアウト",
-    "ECONNRESET": "接続リセット"
+    "ECONNRESET": "接続リセット",
+    "EHOSTUNREACH": "ホスト到達不能(ネットワークルーティング問題)",
+    "ENETUNREACH": "ネットワーク到達不能(ローカルネットワーク設定問題)",
+    "EPROTO": "プロトコルエラー(SSL/TLS ハンドシェイク失敗)",
+    "CLIENT_ABORT": "クライアントがリクエストを中断",
+    "PROVIDER_TIMEOUT": "プロバイダーレスポンスタイムアウト(最初のバイト遅延が高い)",
+    "STREAMING_IDLE_TIMEOUT": "ストリーミングアイドルタイムアウト(プロバイダーがデータ送信を停止)"
   },
   "summary": {
     "singleSuccess": "{total}個のプロバイダー、{healthy}個正常 → {provider} ✓",
@@ -99,7 +105,7 @@
     "requestOk": "OK",
     "successStatus": "ステータス: {code} OK",
     "requestCompleted": "リクエスト正常完了",
-    "completed": "リクエスト正常完了",
+    "completed": "リクエスト正常完了",
     "concurrentLimitFailed": "同時実行制限",
     "attemptFailed": "試行失敗(試行{attempt})",
     "concurrentLimit": "同時実行制限",
@@ -107,6 +113,10 @@
     "sessions": "セッション",
     "withPriorityWeight": "(優先度={priority} 重み={weight})",
     "unknown": "不明",
-    "noDecisionRecord": "決定記録なし"
+    "noDecisionRecord": "決定記録なし",
+    "modelRedirect": "モデルリダイレクト",
+    "modelRedirectFrom": "  リクエストモデル: {model}",
+    "modelRedirectTo": "  リダイレクト先: {model}",
+    "modelRedirectBilling": "  課金モデル: {model}"
   }
 }

+ 30 - 0
messages/ja/providers.json

@@ -0,0 +1,30 @@
+{
+  "_comment": "Provider types and related translations for Japanese",
+
+  "types": {
+    "claude": {
+      "label": "Claude",
+      "description": "Anthropic 公式 API"
+    },
+    "claudeAuth": {
+      "label": "Claude Auth",
+      "description": "Claude リレーサービス"
+    },
+    "codex": {
+      "label": "Codex",
+      "description": "Codex CLI API"
+    },
+    "geminiCli": {
+      "label": "Gemini CLI",
+      "description": "Gemini CLI API"
+    },
+    "gemini": {
+      "label": "Gemini",
+      "description": "Google Gemini 公式 API"
+    },
+    "openaiCompatible": {
+      "label": "OpenAI Compatible",
+      "description": "OpenAI 互換 API"
+    }
+  }
+}

+ 2 - 0
messages/ja/quota.json

@@ -64,6 +64,8 @@
   "users": {
     "title": "ユーザークォータ統計",
     "totalCount": "合計 {count} 名のユーザー",
+    "manageNotice": "ユーザーとキーを管理するには",
+    "manageLink": "ユーザー管理",
     "noNote": "備考なし",
     "rpm": {
       "label": "RPM クォータ",

+ 169 - 4
messages/ja/settings.json

@@ -268,8 +268,7 @@
         "description": "完全なデータベースバックアップファイル(.dump形式)をエクスポートし、データ移行または復旧に使用できます。"
       },
       "import": {
-        "title": "データインポート",
-        "description": "バックアップファイルからデータベースを復元します。PostgreSQL custom format(.dump)形式のバックアップファイルをサポートします。"
+        "title": "データインポート"
       }
     }
   },
@@ -349,6 +348,8 @@
     "clientVersions": "クライアント更新リマインダー",
     "config": "設定",
     "data": "データ管理",
+    "errorRules": "エラールール",
+    "feedback": "フィードバック",
     "logs": "ログ",
     "notifications": "通知",
     "prices": "価格表",
@@ -533,6 +534,15 @@
         "proxyError": "プロキシエラー:",
         "networkError": "ネットワークエラー:"
       },
+      "urlPreview": {
+        "title": "URL結合プレビュー",
+        "invalidUrl": "無効なURL形式",
+        "invalidUrlDesc": "有効なHTTP/HTTPSアドレスを入力してください",
+        "duplicatePath": "重複パス検出",
+        "copy": "コピー",
+        "copySuccess": "{name} をクリップボードにコピーしました",
+        "copyFailed": "コピーに失敗しました"
+      },
       "modelSelect": {
         "allowAllModels": "すべての {type} モデルを許可",
         "selectedCount": "{count} 個のモデルを選択済み",
@@ -795,6 +805,9 @@
         "updating": "更新中...",
         "delete": "削除"
       },
+      "common": {
+        "core": "コア"
+      },
       "sections": {
         "routing": {
           "title": "ルーティング",
@@ -809,7 +822,7 @@
             "placeholder": "プロバイダー種別を選択"
           },
           "providerTypeDesc": "プロバイダーの API 形式を選択します。",
-          "providerTypeDisabledNote": "注: Gemini CLI と OpenAI Compatible は開発中のため、現在は使用できません",
+          "providerTypeDisabledNote": "注: OpenAI Compatible は開発中のため、現在は使用できません",
           "modelRedirects": {
             "label": "モデルリダイレクト設定",
             "optional": "(任意)"
@@ -921,6 +934,30 @@
             "desc": "設定したプロキシ経由でプロバイダー URL への接続をテストします(HEAD リクエスト、課金なし)"
           }
         },
+        "timeout": {
+          "title": "タイムアウト設定",
+          "summary": "初回バイト: {streaming}s | ストリーム間隔: {idle}s | 非ストリーミング: {nonStreaming}s",
+          "desc": "リクエストのタイムアウト時間を設定します。0 は無効を意味します",
+          "streamingFirstByte": {
+            "label": "ストリーミング初バイトタイムアウト(秒)",
+            "placeholder": "30",
+            "desc": "ストリーミングリクエストの初バイトタイムアウト、範囲1~120秒、デフォルト30秒",
+            "core": "true"
+          },
+          "streamingIdle": {
+            "label": "ストリーミングアイドルタイムアウト(秒)",
+            "placeholder": "10",
+            "desc": "ストリーミングリクエストのアイドルタイムアウト、範囲1~120秒、デフォルト10秒(途中停止防止)",
+            "core": "true"
+          },
+          "nonStreamingTotal": {
+            "label": "非ストリーミング総タイムアウト(秒)",
+            "placeholder": "600",
+            "desc": "非ストリーミングリクエストの総タイムアウト、範囲60~1200秒、デフォルト600秒(10分)",
+            "core": "true"
+          },
+          "disableHint": "0に設定するとタイムアウトを無効にします(カナリアロールバックシナリオのみ、非推奨)"
+        },
         "codexStrategy": {
           "title": "Codex Instructions ポリシー",
           "summary": {
@@ -952,8 +989,9 @@
         "claude": "Claude (Anthropic Messages API)",
         "claudeAuth": "Claude (Anthropic Auth Token)",
         "codex": "Codex (Response API)",
+        "gemini": "Gemini (Google Gemini API)",
         "geminiCli": "Gemini CLI",
-        "geminiCliDisabled": " - 開発中",
+        "geminiCliDisabled": "",
         "openaiCompatible": "OpenAI Compatible",
         "openaiCompatibleDisabled": " - 開発中"
       },
@@ -1135,6 +1173,10 @@
         "label": "Codex",
         "description": "Codex CLI API"
       },
+      "gemini": {
+        "label": "Gemini",
+        "description": "Google Gemini API"
+      },
       "geminiCli": {
         "label": "Gemini CLI",
         "description": "Gemini CLI API"
@@ -1254,5 +1296,128 @@
     "title": "センシティブワード管理",
     "toggleFailed": "トグルに失敗しました",
     "toggleFailedError": "トグルに失敗しました:"
+  },
+  "errorRules": {
+    "nav": "エラールール",
+    "title": "エラールール管理",
+    "description": "自動再試行を行わないクライアントエラールールを管理します。設定後、ルールに一致するエラーは再試行せずユーザーに直接返され、プロバイダーのサーキットブレーカーにもカウントされません。",
+    "section": {
+      "title": "エラールールリスト"
+    },
+    "add": "エラールールを追加",
+    "addSuccess": "エラールールが正常に作成されました",
+    "addFailed": "エラールールの作成に失敗しました",
+    "edit": "エラールールを編集",
+    "editSuccess": "エラールールが正常に更新されました",
+    "editFailed": "エラールールの更新に失敗しました",
+    "delete": "エラールールを削除",
+    "deleteSuccess": "エラールールが正常に削除されました",
+    "deleteFailed": "削除に失敗しました",
+    "enable": "エラールールが有効になりました",
+    "disable": "エラールールが無効になりました",
+    "toggleFailed": "切り替えに失敗しました",
+    "toggleFailedError": "切り替えに失敗しました:",
+    "refreshCache": "キャッシュを更新",
+    "refreshCacheSuccess": "キャッシュが正常に更新され、{count} 個のエラールールがロードされました",
+    "refreshCacheFailed": "キャッシュの更新に失敗しました",
+    "cacheStats": "キャッシュ統計: 有効({enabledCount}) 無効({disabledCount}) デフォルト({defaultCount})",
+    "emptyState": "エラールールがまだありません。右上の「エラールールを追加」をクリックして設定を開始してください。",
+    "confirmDelete": "エラールール \"{pattern}\" を削除してもよろしいですか?",
+    "dialog": {
+      "addTitle": "エラールールを追加",
+      "addDescription": "エラーメッセージの正規表現パターンを設定します。マッチしたエラーはリトライ不可能なクライアントエラーとして識別されます。",
+      "editTitle": "エラールールを編集",
+      "editDescription": "エラールール設定を変更します。変更後、キャッシュが自動的に更新されます。",
+      "patternLabel": "正規表現パターン *",
+      "patternPlaceholder": "正規表現を入力...",
+      "patternRequired": "正規表現パターンを入力してください",
+      "patternHint": "JavaScript正規表現構文をサポート、例:prompt is too long|invalid.*request",
+      "categoryLabel": "ルールカテゴリ *",
+      "categoryPlaceholder": "ルールカテゴリを選択",
+      "categoryRequired": "ルールカテゴリを選択してください",
+      "categoryHint": "分類管理と統計のためのエラーカテゴリを選択",
+      "descriptionLabel": "説明",
+      "descriptionPlaceholder": "オプション: 説明を追加...",
+      "invalidRegex": "正規表現の構文エラー",
+      "regexTester": "正規表現テスター",
+      "testMessageLabel": "テストメッセージ",
+      "testMessagePlaceholder": "テストするエラーメッセージを入力...",
+      "matchSuccess": "マッチ成功",
+      "matchFailed": "マッチなし",
+      "invalidPattern": "無効な正規表現",
+      "matchedText": "マッチしたテキスト",
+      "defaultRuleHint": "デフォルトルールのパターンは変更できません",
+      "creating": "作成中...",
+      "saving": "保存中..."
+    },
+    "table": {
+      "pattern": "正規表現パターン",
+      "category": "ルールカテゴリ",
+      "description": "説明",
+      "status": "ステータス",
+      "default": "デフォルト",
+      "isEnabled": "有効状態",
+      "isDefault": "デフォルトルール",
+      "createdAt": "作成日時",
+      "actions": "操作"
+    },
+    "form": {
+      "fields": {
+        "pattern": "正規表現パターン",
+        "category": "ルールカテゴリ",
+        "description": "説明"
+      },
+      "placeholders": {
+        "pattern": "例: prompt is too long",
+        "category": "カテゴリを選択",
+        "description": "オプション: 説明を追加..."
+      },
+      "labels": {
+        "pattern": "正規表現パターン *",
+        "category": "ルールカテゴリ *",
+        "description": "説明",
+        "isEnabled": "有効状態"
+      }
+    },
+    "actions": {
+      "add": "追加",
+      "edit": "編集",
+      "delete": "削除",
+      "refresh": "更新",
+      "test": "テスト",
+      "messages": {
+        "success": "操作が成功しました",
+        "error": "操作が失敗しました"
+      }
+    },
+    "validation": {
+      "patternRequired": "正規表現パターンを入力してください",
+      "categoryRequired": "ルールカテゴリを選択してください",
+      "patternInvalid": "正規表現の構文エラー",
+      "redosRisk": "正規表現に ReDoS リスクがあります。パターンを簡略化してください",
+      "patternTooComplex": "正規表現が複雑すぎます"
+    },
+    "categories": {
+      "prompt_limit": "プロンプト長制限",
+      "content_filter": "コンテンツフィルター",
+      "pdf_limit": "PDF ページ制限",
+      "thinking_error": "Thinking フォーマットエラー",
+      "parameter_error": "パラメータ検証失敗",
+      "invalid_request": "無効なリクエスト",
+      "cache_limit": "キャッシュ制御制限"
+    },
+    "regexTester": {
+      "title": "正規表現テスター",
+      "testMessage": "テストメッセージ",
+      "testMessagePlaceholder": "テストするエラーメッセージを入力...",
+      "matchResult": "マッチ結果",
+      "matched": "マッチしました",
+      "notMatched": "マッチしませんでした",
+      "test": "テスト"
+    },
+    "defaultRules": {
+      "cannotDelete": "デフォルトルールは削除できません",
+      "cannotDisable": "デフォルトルールは有効のままにすることをお勧めします"
+    }
   }
 }

+ 11 - 1
messages/ja/ui.json

@@ -4,7 +4,8 @@
     "actions": "アクション",
     "loading": "読み込み中...",
     "empty": "空",
-    "error": "エラー"
+    "error": "エラー",
+    "retry": "再試行"
   },
   "table": {
     "pagination": "ページネーション",
@@ -43,5 +44,14 @@
   "loading": {
     "title": "読み込み中",
     "description": "しばらくお待ちください..."
+  },
+  "tagInput": {
+    "placeholder": "タグを入力してEnterまたはカンマで追加",
+    "emptyTag": "タグを空にすることはできません",
+    "duplicateTag": "タグは既に存在します",
+    "maxTags": "最大タグ数に達しました",
+    "tooLong": "タグの長さは{max}文字を超えることはできません",
+    "invalidFormat": "タグには英数字、アンダースコア、ハイフンのみ使用できます",
+    "removeTag": "タグ {tag} を削除"
   }
 }

+ 123 - 0
messages/ja/usage.json

@@ -341,6 +341,129 @@
     }
   },
 
+  "gemini": {
+    "title": "Gemini CLI 使用ガイド",
+    "description": "Gemini CLI は Google 公式の AI プログラミングアシスタントコマンドラインツールで、cch プロキシサービスを通じた統合をサポートしています。このガイドは、異なるオペレーティングシステムでのインストールと設定を完了するのに役立ちます。",
+
+    "installation": {
+      "title": "gemini をインストール",
+      "instruction": "Node.js 18 以降がインストールされていることを確認してから、Gemini CLI をグローバルにインストールします:",
+      "command": "npm install -g @google/gemini-cli",
+      "verification": "インストールの確認:",
+      "verificationCommand": "gemini --version",
+      "adminNote": "PowerShell を管理者として実行し、"
+    },
+
+    "configuration": {
+      "title": "cch サービスに接続",
+
+      "configFile": {
+        "title": "方法 1: 設定ファイル(推奨)",
+
+        "step1": {
+          "title": "設定ディレクトリを作成",
+          "description": "Gemini CLI の設定ファイルは ~/.gemini/ ディレクトリにあります。",
+          "macosLinux": "macOS / Linux:",
+          "windows": "Windows (PowerShell):"
+        },
+
+        "step2": {
+          "title": ".env 設定ファイルを作成",
+          "description": "~/.gemini/ ディレクトリに .env ファイルを作成します:",
+          "macosLinuxInstruction": "macOS / Linux:",
+          "windowsInstruction": "Windows:%USERPROFILE%\\.gemini\\ ディレクトリに .env ファイルを作成",
+          "content": "以下の内容を追加します:"
+        },
+
+        "step3": {
+          "title": "settings.json 設定ファイルを作成",
+          "description": "~/.gemini/ ディレクトリに settings.json ファイルを作成します:",
+          "content": "この設定ファイルは IDE 統合を有効にし、認証方法を API Key に設定します。"
+        },
+
+        "parameterNote": "パラメータの説明",
+        "parameters": [
+          "GOOGLE_GEMINI_BASE_URL: cch API ベース URL",
+          "GEMINI_API_KEY: cch コンソールで作成した API キー",
+          "GEMINI_MODEL: 使用するモデル(デフォルトは gemini-2.5-pro)"
+        ],
+
+        "important": "重要",
+        "importantPoints": [
+          "YOUR_API_KEY_HERE を実際の API キーに置き換えてください",
+          "キーの取得方法:コンソールにログイン → API キー管理 → キーを作成"
+        ]
+      },
+
+      "envVars": {
+        "title": "方法 2: 環境変数設定",
+        "description": "一時的に使用したい場合は、環境変数で設定できます:",
+
+        "macosLinux": {
+          "title": "macOS / Linux:",
+          "note": "環境変数は現在のターミナルセッションでのみ有効です。永続的な設定には、設定ファイル方式を使用してください。"
+        },
+
+        "windows": {
+          "powershell": "Windows (PowerShell):",
+          "cmd": "Windows (CMD):",
+          "note": "環境変数は現在のターミナルセッションでのみ有効です。永続的な設定には、設定ファイル方式を使用してください。"
+        }
+      }
+    },
+
+    "startup": {
+      "title": "起動と確認",
+
+      "startCli": {
+        "title": "Gemini CLI を起動",
+        "description": "プロジェクトディレクトリに移動して Gemini CLI を起動します:",
+        "note": "初回起動時、Gemini CLI は設定ファイルの設定を読み取ります。"
+      },
+
+      "verification": {
+        "title": "設定の確認",
+        "description": "Gemini CLI で簡単なリクエストを送信して接続をテストします:",
+        "testCommand": "こんにちは、Python の hello world プログラムを作成してください",
+        "success": "Gemini CLI が正常に応答した場合、設定は成功です!"
+      },
+
+      "agentMode": {
+        "title": "Agent Mode の使用",
+        "description": "Gemini CLI は Agent Mode をサポートしており、複雑なタスクを自動的に計画して実行できます:",
+        "command": "gemini --agent",
+        "features": "Agent Mode では、Gemini は次のことを行います:",
+        "featureList": [
+          "タスク要件を自動的に分析",
+          "実行計画を策定",
+          "段階的に実行して結果を検証",
+          "フィードバックに基づいて戦略を調整"
+        ]
+      }
+    },
+
+    "commonIssues": {
+      "title": "よくある問題",
+
+      "commandNotFound": "1. コマンドが見つかりません",
+      "commandNotFoundWindows": [
+        "npm グローバルパス (通常は C:\\Users\\your-username\\AppData\\Roaming\\npm) がシステム PATH に追加されていることを確認",
+        "PowerShell ウィンドウを再度開く"
+      ],
+      "commandNotFoundUnix": "npm グローバルインストールパスを確認し、PATH に追加 (存在しない場合)",
+
+      "connectionFailed": "2. API 接続失敗",
+      "connectionSteps": [
+        "環境変数または設定ファイルの GEMINI_API_KEY が正しく設定されているか確認",
+        "GOOGLE_GEMINI_BASE_URL が正しいか確認",
+        "ネットワーク接続をテスト"
+      ],
+
+      "updateCli": "3. gemini を更新",
+      "updateCommand": "npm install -g @google/gemini-cli"
+    }
+  },
+
   "droid": {
     "title": "Droid CLI 使用ガイド",
     "description": "Droid は Factory AI が開発したインタラクティブターミナル AI プログラミングアシスタントで、cch プロキシサービスを通じた統合をサポートしています。使用する前に、Droid 公式アカウントに登録してログインする必要があります。",

+ 1 - 1
messages/ru/auth.json

@@ -30,7 +30,7 @@
     "solutionTitle": "Решения:",
     "useHttps": "Используйте HTTPS для доступа к системе (рекомендуется)",
     "disableSecureCookies": "Установите ENABLE_SECURE_COOKIES=false в .env (снижает безопасность)",
-    "privacyNote": "Мы используем этот ключ только для проверки входа и никогда не храним исходный текст."
+    "privacyNote": "Пожалуйста, используйте свой API Key для входа в панель администрирования Claude Code Hub"
   },
   "errors": {
     "loginFailed": "Ошибка входа",

+ 2 - 1
messages/ru/common.json

@@ -39,5 +39,6 @@
   "warning": "Предупреждение",
   "info": "Информация",
   "noData": "Нет данных",
-  "emptyState": "Нечего отображать"
+  "emptyState": "Нечего отображать",
+  "core": "Основной"
 }

+ 27 - 0
messages/ru/dashboard.json

@@ -360,6 +360,7 @@
     "usageLogs": "Журналы использования",
     "leaderboard": "Таблица лидеров",
     "quotasManagement": "Управление квотами",
+    "userManagement": "Управление пользователями",
     "documentation": "Документация",
     "systemSettings": "Настройки системы",
     "feedback": "Обратная связь",
@@ -419,6 +420,8 @@
     },
     "limitUsage": "Использование лимита",
     "copyKeyTooltip": "Скопировать полный ключ",
+    "showKeyTooltip": "Показать полный ключ",
+    "hideKeyTooltip": "Скрыть ключ",
     "copyFailed": "Не удалось скопировать:",
     "timesUnit": "раз",
     "provider": "Провайдер",
@@ -463,6 +466,10 @@
       "description": "Ваш API-ключ был успешно создан. Пожалуйста, скопируйте и сохраните его в безопасном месте, так как он будет показан только один раз.",
       "apiKeyLabel": "API ключ",
       "warningText": "Пожалуйста, скопируйте и сохраните перед закрытием. После закрытия вы не сможете снова просмотреть этот ключ",
+      "httpWarningText": "Обнаружен HTTP-доступ. Ограничения браузера не позволяют использовать функцию копирования. Нажмите на значок глаза, чтобы показать ключ и скопировать его вручную.",
+      "copyTooltip": "Скопировать в буфер обмена",
+      "showTooltip": "Показать полный ключ",
+      "hideTooltip": "Скрыть ключ",
       "closeButton": "Закрыть"
     }
   },
@@ -560,6 +567,26 @@
       "label": "Дневная квота",
       "placeholder": "Лимит дневного расхода",
       "description": "По умолчанию: ${default}, диапазон: $0.01-$1000"
+    },
+    "limit5hUsd": {
+      "label": "Лимит на 5 часов (USD)",
+      "placeholder": "Оставьте пустым для неограниченного",
+      "description": "Максимальный расход за 5 часов"
+    },
+    "limitWeeklyUsd": {
+      "label": "Недельный лимит (USD)",
+      "placeholder": "Оставьте пустым для неограниченного",
+      "description": "Максимальный недельный расход"
+    },
+    "limitMonthlyUsd": {
+      "label": "Месячный лимит (USD)",
+      "placeholder": "Оставьте пустым для неограниченного",
+      "description": "Максимальный месячный расход"
+    },
+    "limitConcurrentSessions": {
+      "label": "Лимит одновременных сессий",
+      "placeholder": "0 означает неограниченно",
+      "description": "Количество одновременных разговоров"
     }
   },
   "deleteKeyConfirm": {

+ 4 - 0
messages/ru/index.ts

@@ -6,10 +6,12 @@ import errors from "./errors.json";
 import forms from "./forms.json";
 import notifications from "./notifications.json";
 import providerChain from "./provider-chain.json";
+import providers from "./providers.json";
 import quota from "./quota.json";
 import settings from "./settings.json";
 import ui from "./ui.json";
 import usage from "./usage.json";
+import users from "./users.json";
 import validation from "./validation.json";
 import internal from "./internal.json";
 
@@ -22,10 +24,12 @@ export default {
   forms,
   notifications,
   "provider-chain": providerChain,
+  providers,
   quota,
   settings,
   ui,
   usage,
+  users,
   validation,
   internal,
 };

+ 5 - 1
messages/ru/notifications.json

@@ -12,7 +12,7 @@
   "refresh_success": "Успешно обновлено",
   "test_success": "Тест успешен",
 
-  "user_created": "Пользователь {name} успешно создан",
+  "user_created": "Пользователь успешно создан",
   "user_updated": "Информация о пользователе обновлена",
   "user_deleted": "Пользователь удален",
   "key_created": "API ключ успешно создан",
@@ -22,6 +22,10 @@
   "provider_updated": "Провайдер обновлен",
   "provider_deleted": "Провайдер удален",
 
+  "create_failed": "Не удалось создать",
+  "update_failed": "Не удалось обновить",
+  "delete_failed": "Не удалось удалить",
+
   "operation_success": "Операция выполнена успешно",
   "operation_failed": "Операция не удалась",
   "processing": "Обработка...",

+ 13 - 3
messages/ru/provider-chain.json

@@ -9,7 +9,13 @@
     "ENOTFOUND": "Не удалось разрешить DNS",
     "ECONNREFUSED": "Соединение отклонено",
     "ETIMEDOUT": "Тайм-аут соединения или чтения",
-    "ECONNRESET": "Соединение сброшено"
+    "ECONNRESET": "Соединение сброшено",
+    "EHOSTUNREACH": "Хост недоступен (проблема маршрутизации сети)",
+    "ENETUNREACH": "Сеть недоступна (проблема локальной сетевой конфигурации)",
+    "EPROTO": "Ошибка протокола (ошибка SSL/TLS рукопожатия)",
+    "CLIENT_ABORT": "Клиент прервал запрос",
+    "PROVIDER_TIMEOUT": "Тайм-аут ответа провайдера (высокая задержка первого байта)",
+    "STREAMING_IDLE_TIMEOUT": "Тайм-аут простоя потоковой передачи (провайдер прекратил отправку данных)"
   },
   "summary": {
     "singleSuccess": "{total} провайдеров, {healthy} работоспособных → {provider} ✓",
@@ -99,7 +105,7 @@
     "requestOk": "OK",
     "successStatus": "Состояние: {code} OK",
     "requestCompleted": "Запрос успешно выполнен",
-    "completed": "Запрос успешно выполнен",
+    "completed": "Запрос успешно выполнен",
     "concurrentLimitFailed": "Лимит параллельных запросов",
     "attemptFailed": "Попытка не удалась (Попытка {attempt})",
     "concurrentLimit": "Лимит параллельных запросов",
@@ -107,6 +113,10 @@
     "sessions": "Сессии",
     "withPriorityWeight": "(приоритет={priority} вес={weight})",
     "unknown": "Неизвестно",
-    "noDecisionRecord": "Нет записей решений"
+    "noDecisionRecord": "Нет записей решений",
+    "modelRedirect": "Перенаправление модели",
+    "modelRedirectFrom": "  Запрошенная модель: {model}",
+    "modelRedirectTo": "  Перенаправлено на: {model}",
+    "modelRedirectBilling": "  Модель для расчета: {model}"
   }
 }

+ 30 - 0
messages/ru/providers.json

@@ -0,0 +1,30 @@
+{
+  "_comment": "Provider types and related translations for Russian",
+
+  "types": {
+    "claude": {
+      "label": "Claude",
+      "description": "Официальный API Anthropic"
+    },
+    "claudeAuth": {
+      "label": "Claude Auth",
+      "description": "Сервис ретрансляции Claude"
+    },
+    "codex": {
+      "label": "Codex",
+      "description": "Codex CLI API"
+    },
+    "geminiCli": {
+      "label": "Gemini CLI",
+      "description": "Gemini CLI API"
+    },
+    "gemini": {
+      "label": "Gemini",
+      "description": "Официальный API Google Gemini"
+    },
+    "openaiCompatible": {
+      "label": "OpenAI Compatible",
+      "description": "API совместимый с OpenAI"
+    }
+  }
+}

+ 169 - 4
messages/ru/settings.json

@@ -268,8 +268,7 @@
         "description": "Экспорт полного файла резервной копии базы данных (формат .dump) для миграции или восстановления данных."
       },
       "import": {
-        "title": "Импорт данных",
-        "description": "Восстановление базы данных из файла резервной копии. Поддерживает файлы резервных копий в формате PostgreSQL custom format (.dump)."
+        "title": "Импорт данных"
       }
     }
   },
@@ -349,6 +348,8 @@
     "clientVersions": "Напоминание об обновлении",
     "config": "Конфигурация",
     "data": "Управление данными",
+    "errorRules": "Правила ошибок",
+    "feedback": "Обратная связь",
     "logs": "Логи",
     "notifications": "Уведомления",
     "prices": "Прайс-лист",
@@ -533,6 +534,15 @@
         "proxyError": "Ошибка прокси:",
         "networkError": "Сетевая ошибка:"
       },
+      "urlPreview": {
+        "title": "Предварительный просмотр URL",
+        "invalidUrl": "Неверный формат URL",
+        "invalidUrlDesc": "Пожалуйста, введите действительный HTTP/HTTPS адрес",
+        "duplicatePath": "Обнаружен дублирующийся путь",
+        "copy": "Копировать",
+        "copySuccess": "Скопировано {name} в буфер обмена",
+        "copyFailed": "Не удалось скопировать"
+      },
       "modelSelect": {
         "allowAllModels": "Разрешить все модели {type}",
         "selectedCount": "Выбрано моделей: {count}",
@@ -795,6 +805,9 @@
         "updating": "Обновление...",
         "delete": "Удалить"
       },
+      "common": {
+        "core": "Основная"
+      },
       "sections": {
         "routing": {
           "title": "Маршрутизация",
@@ -809,7 +822,7 @@
             "placeholder": "Выберите тип провайдера"
           },
           "providerTypeDesc": "Выберите формат API провайдера.",
-          "providerTypeDisabledNote": "Примечание: типы Gemini CLI и OpenAI Compatible находятся в разработке и пока недоступны",
+          "providerTypeDisabledNote": "Примечание: функции типа OpenAI Compatible находятся в разработке и пока недоступны",
           "modelRedirects": {
             "label": "Перенаправление моделей",
             "optional": "(необязательно)"
@@ -921,6 +934,30 @@
             "desc": "Проверка доступа к URL провайдера через прокси (запрос HEAD, без списания средств)"
           }
         },
+        "timeout": {
+          "title": "Конфигурация тайм-аута",
+          "summary": "Первый байт: {streaming}с | Интервал потока: {idle}с | Непотоковая: {nonStreaming}с",
+          "desc": "Установить время ожидания запроса, 0 означает отключение тайм-аута",
+          "streamingFirstByte": {
+            "label": "Тайм-аут первого байта потока (секунды)",
+            "placeholder": "30",
+            "desc": "Тайм-аут первого байта потоковой передачи, диапазон 1-120 секунд, значение по умолчанию 30 секунд",
+            "core": "true"
+          },
+          "streamingIdle": {
+            "label": "Тайм-аут простоя потока (секунды)",
+            "placeholder": "10",
+            "desc": "Тайм-аут простоя потоковой передачи, диапазон 1-120 секунд, значение по умолчанию 10 секунд (предотвращение застревания)",
+            "core": "true"
+          },
+          "nonStreamingTotal": {
+            "label": "Полный тайм-аут непотоковой передачи (секунды)",
+            "placeholder": "600",
+            "desc": "Полный тайм-аут непотоковой передачи, диапазон 60-1200 секунд, значение по умолчанию 600 секунд (10 минут)",
+            "core": "true"
+          },
+          "disableHint": "Установите 0 для отключения тайм-аута (только для сценариев отката канарейки, не рекомендуется)"
+        },
         "codexStrategy": {
           "title": "Политика Codex Instructions",
           "summary": {
@@ -952,8 +989,9 @@
         "claude": "Claude (Anthropic Messages API)",
         "claudeAuth": "Claude (Anthropic Auth Token)",
         "codex": "Codex (Response API)",
+        "gemini": "Gemini (Google Gemini API)",
         "geminiCli": "Gemini CLI",
-        "geminiCliDisabled": " - в разработке",
+        "geminiCliDisabled": "",
         "openaiCompatible": "OpenAI Compatible",
         "openaiCompatibleDisabled": " - в разработке"
       },
@@ -1135,6 +1173,10 @@
         "label": "Codex",
         "description": "Codex CLI API"
       },
+      "gemini": {
+        "label": "Gemini",
+        "description": "Google Gemini API"
+      },
       "geminiCli": {
         "label": "Gemini CLI",
         "description": "Gemini CLI API"
@@ -1254,5 +1296,128 @@
     "title": "Управление чувствительными словами",
     "toggleFailed": "Ошибка переключения",
     "toggleFailedError": "Ошибка переключения:"
+  },
+  "errorRules": {
+    "nav": "Правила ошибок",
+    "title": "Управление правилами ошибок",
+    "description": "Управление правилами клиентских ошибок, которые не требуют автоматических повторов. После настройки ошибки, соответствующие правилам, будут возвращены пользователям напрямую без повторов и не будут учитываться в пороге срабатывания автоматического выключателя провайдера.",
+    "section": {
+      "title": "Список правил ошибок"
+    },
+    "add": "Добавить правило ошибки",
+    "addSuccess": "Правило ошибки успешно создано",
+    "addFailed": "Не удалось создать правило ошибки",
+    "edit": "Редактировать правило ошибки",
+    "editSuccess": "Правило ошибки успешно обновлено",
+    "editFailed": "Не удалось обновить правило ошибки",
+    "delete": "Удалить правило ошибки",
+    "deleteSuccess": "Правило ошибки успешно удалено",
+    "deleteFailed": "Удаление не удалось",
+    "enable": "Правило ошибки включено",
+    "disable": "Правило ошибки отключено",
+    "toggleFailed": "Переключение не удалось",
+    "toggleFailedError": "Переключение не удалось:",
+    "refreshCache": "Обновить кэш",
+    "refreshCacheSuccess": "Кэш успешно обновлен, загружено {count} правил ошибок",
+    "refreshCacheFailed": "Не удалось обновить кэш",
+    "cacheStats": "Статистика кэша: Включено({enabledCount}) Отключено({disabledCount}) По умолчанию({defaultCount})",
+    "emptyState": "Правил ошибок пока нет. Нажмите 'Добавить правило ошибки' в правом верхнем углу, чтобы начать настройку.",
+    "confirmDelete": "Вы уверены, что хотите удалить правило ошибки \"{pattern}\"?",
+    "dialog": {
+      "addTitle": "Добавить правило ошибки",
+      "addDescription": "Настройте шаблоны регулярных выражений для сообщений об ошибках. Совпадающие ошибки будут определены как неповторяемые клиентские ошибки.",
+      "editTitle": "Редактировать правило ошибки",
+      "editDescription": "Измените конфигурацию правила ошибки. Изменения автоматически обновят кэш.",
+      "patternLabel": "Регулярное выражение *",
+      "patternPlaceholder": "Введите регулярное выражение...",
+      "patternRequired": "Пожалуйста, введите регулярное выражение",
+      "patternHint": "Поддерживает синтаксис регулярных выражений JavaScript, например: prompt is too long|invalid.*request",
+      "categoryLabel": "Категория правила *",
+      "categoryPlaceholder": "Выберите категорию правила",
+      "categoryRequired": "Пожалуйста, выберите категорию правила",
+      "categoryHint": "Выберите категорию ошибки для классификации и статистики",
+      "descriptionLabel": "Описание",
+      "descriptionPlaceholder": "Необязательно: Добавить описание...",
+      "invalidRegex": "Неверный синтаксис регулярного выражения",
+      "regexTester": "Тестер регулярных выражений",
+      "testMessageLabel": "Тестовое сообщение",
+      "testMessagePlaceholder": "Введите сообщение об ошибке для тестирования...",
+      "matchSuccess": "Совпадение найдено",
+      "matchFailed": "Совпадение не найдено",
+      "invalidPattern": "Недействительное регулярное выражение",
+      "matchedText": "Совпавший текст",
+      "defaultRuleHint": "Шаблон правила по умолчанию не может быть изменен",
+      "creating": "Создание...",
+      "saving": "Сохранение..."
+    },
+    "table": {
+      "pattern": "Регулярное выражение",
+      "category": "Категория правила",
+      "description": "Описание",
+      "status": "Статус",
+      "default": "По умолчанию",
+      "isEnabled": "Статус включения",
+      "isDefault": "Правило по умолчанию",
+      "createdAt": "Дата создания",
+      "actions": "Действия"
+    },
+    "form": {
+      "fields": {
+        "pattern": "Регулярное выражение",
+        "category": "Категория правила",
+        "description": "Описание"
+      },
+      "placeholders": {
+        "pattern": "например: prompt is too long",
+        "category": "Выбрать категорию",
+        "description": "Необязательно: Добавить описание..."
+      },
+      "labels": {
+        "pattern": "Регулярное выражение *",
+        "category": "Категория правила *",
+        "description": "Описание",
+        "isEnabled": "Статус включения"
+      }
+    },
+    "actions": {
+      "add": "Добавить",
+      "edit": "Редактировать",
+      "delete": "Удалить",
+      "refresh": "Обновить",
+      "test": "Тест",
+      "messages": {
+        "success": "Операция успешна",
+        "error": "Операция не удалась"
+      }
+    },
+    "validation": {
+      "patternRequired": "Пожалуйста, введите регулярное выражение",
+      "categoryRequired": "Пожалуйста, выберите категорию правила",
+      "patternInvalid": "Неверный синтаксис регулярного выражения",
+      "redosRisk": "Регулярное выражение имеет риск ReDoS, упростите шаблон",
+      "patternTooComplex": "Регулярное выражение слишком сложное"
+    },
+    "categories": {
+      "prompt_limit": "Ограничение длины промпта",
+      "content_filter": "Фильтр контента",
+      "pdf_limit": "Ограничение страниц PDF",
+      "thinking_error": "Ошибка формата Thinking",
+      "parameter_error": "Ошибка валидации параметров",
+      "invalid_request": "Недопустимый запрос",
+      "cache_limit": "Ограничение управления кэшем"
+    },
+    "regexTester": {
+      "title": "Тестер регулярных выражений",
+      "testMessage": "Тестовое сообщение",
+      "testMessagePlaceholder": "Введите сообщение об ошибке для тестирования...",
+      "matchResult": "Результат сопоставления",
+      "matched": "Совпало",
+      "notMatched": "Не совпало",
+      "test": "Тест"
+    },
+    "defaultRules": {
+      "cannotDelete": "Правила по умолчанию не могут быть удалены",
+      "cannotDisable": "Рекомендуется сохранить правила по умолчанию включенными"
+    }
   }
 }

+ 11 - 1
messages/ru/ui.json

@@ -4,7 +4,8 @@
     "actions": "Действия",
     "loading": "Загрузка...",
     "empty": "Пусто",
-    "error": "Ошибка"
+    "error": "Ошибка",
+    "retry": "Повторить"
   },
   "table": {
     "pagination": "Пагинация",
@@ -43,5 +44,14 @@
   "loading": {
     "title": "Загрузка",
     "description": "Пожалуйста, подождите..."
+  },
+  "tagInput": {
+    "placeholder": "Введите текст и нажмите Enter или запятую для добавления тега",
+    "emptyTag": "Тег не может быть пустым",
+    "duplicateTag": "Тег уже существует",
+    "maxTags": "Достигнуто максимальное количество тегов",
+    "tooLong": "Длина тега не может превышать {max} символов",
+    "invalidFormat": "Теги могут содержать только буквы, цифры, подчеркивания и дефисы",
+    "removeTag": "Удалить тег {tag}"
   }
 }

+ 123 - 0
messages/ru/usage.json

@@ -341,6 +341,129 @@
     }
   },
 
+  "gemini": {
+    "title": "Руководство по использованию Gemini CLI",
+    "description": "Gemini CLI - это официальный инструмент командной строки для программирования с использованием ИИ от Google, поддерживающий интеграцию через прокси-сервис cch. Это руководство поможет вам завершить установку и настройку на различных операционных системах.",
+
+    "installation": {
+      "title": "Установка gemini",
+      "instruction": "Убедитесь, что у вас установлен Node.js 18 или выше, затем глобально установите Gemini CLI:",
+      "command": "npm install -g @google/gemini-cli",
+      "verification": "Проверка установки:",
+      "verificationCommand": "gemini --version",
+      "adminNote": "Запустите PowerShell от имени администратора, "
+    },
+
+    "configuration": {
+      "title": "Подключение к сервису cch",
+
+      "configFile": {
+        "title": "Метод 1: Конфигурационный файл (рекомендуется)",
+
+        "step1": {
+          "title": "Создание каталога конфигурации",
+          "description": "Конфигурационные файлы Gemini CLI находятся в каталоге ~/.gemini/.",
+          "macosLinux": "macOS / Linux:",
+          "windows": "Windows (PowerShell):"
+        },
+
+        "step2": {
+          "title": "Создание файла конфигурации .env",
+          "description": "Создайте файл .env в каталоге ~/.gemini/:",
+          "macosLinuxInstruction": "macOS / Linux:",
+          "windowsInstruction": "Windows: Создайте файл .env в каталоге %USERPROFILE%\\.gemini\\",
+          "content": "Добавьте следующее содержимое:"
+        },
+
+        "step3": {
+          "title": "Создание файла конфигурации settings.json",
+          "description": "Создайте файл settings.json в каталоге ~/.gemini/:",
+          "content": "Этот конфигурационный файл включает интеграцию с IDE и устанавливает метод аутентификации на API Key."
+        },
+
+        "parameterNote": "Описание параметров",
+        "parameters": [
+          "GOOGLE_GEMINI_BASE_URL: Базовый URL API cch",
+          "GEMINI_API_KEY: Ваш API-ключ, созданный в консоли cch",
+          "GEMINI_MODEL: Используемая модель (по умолчанию gemini-2.5-pro)"
+        ],
+
+        "important": "Важно",
+        "importantPoints": [
+          "Замените YOUR_API_KEY_HERE на ваш фактический API-ключ",
+          "Как получить ключ: Войдите в консоль → Управление API-ключами → Создать ключ"
+        ]
+      },
+
+      "envVars": {
+        "title": "Метод 2: Конфигурация переменных окружения",
+        "description": "Если вы хотите использовать временно, вы можете настроить через переменные окружения:",
+
+        "macosLinux": {
+          "title": "macOS / Linux:",
+          "note": "Переменные окружения действительны только для текущей сессии терминала. Для постоянной конфигурации используйте метод конфигурационного файла."
+        },
+
+        "windows": {
+          "powershell": "Windows (PowerShell):",
+          "cmd": "Windows (CMD):",
+          "note": "Переменные окружения действительны только для текущей сессии терминала. Для постоянной конфигурации используйте метод конфигурационного файла."
+        }
+      }
+    },
+
+    "startup": {
+      "title": "Запуск и проверка",
+
+      "startCli": {
+        "title": "Запуск Gemini CLI",
+        "description": "Перейдите в каталог проекта и запустите Gemini CLI:",
+        "note": "При первом запуске Gemini CLI прочитает настройки из конфигурационного файла."
+      },
+
+      "verification": {
+        "title": "Проверка конфигурации",
+        "description": "Попробуйте отправить простой запрос в Gemini CLI для тестирования подключения:",
+        "testCommand": "Привет, пожалуйста, помогите мне создать программу hello world на Python",
+        "success": "Если Gemini CLI отвечает нормально, конфигурация успешна!"
+      },
+
+      "agentMode": {
+        "title": "Использование режима Agent",
+        "description": "Gemini CLI поддерживает режим Agent, который может автоматически планировать и выполнять сложные задачи:",
+        "command": "gemini --agent",
+        "features": "В режиме Agent Gemini будет:",
+        "featureList": [
+          "Автоматически анализировать требования задачи",
+          "Разрабатывать планы выполнения",
+          "Выполнять пошагово и проверять результаты",
+          "Корректировать стратегии на основе обратной связи"
+        ]
+      }
+    },
+
+    "commonIssues": {
+      "title": "Общие проблемы",
+
+      "commandNotFound": "1. Команда не найдена",
+      "commandNotFoundWindows": [
+        "Убедитесь, что глобальный путь npm (обычно C:\\Users\\your-username\\AppData\\Roaming\\npm) добавлен в PATH системы",
+        "Переоткройте окно PowerShell"
+      ],
+      "commandNotFoundUnix": "Проверьте глобальный путь установки npm и добавьте его в PATH (если его там нет)",
+
+      "connectionFailed": "2. Сбой подключения API",
+      "connectionSteps": [
+        "Проверьте, правильно ли установлен GEMINI_API_KEY в переменных окружения или конфигурационном файле",
+        "Проверьте, правильный ли GOOGLE_GEMINI_BASE_URL",
+        "Тестируйте сетевое подключение"
+      ],
+
+      "updateCli": "3. Обновление gemini",
+      "updateCommand": "npm install -g @google/gemini-cli"
+    }
+  },
+
   "droid": {
     "title": "Руководство по использованию Droid CLI",
     "description": "Droid - это интерактивный помощник программирования на основе ИИ, разработанный Factory AI, поддерживающий интеграцию через прокси-сервис cch. Перед использованием вы должны зарегистрировать и войти в свой официальный аккаунт Droid.",

+ 1 - 1
messages/zh-CN/auth.json

@@ -34,7 +34,7 @@
     "solutionTitle": "解决方案:",
     "useHttps": "使用 HTTPS 访问(推荐)",
     "disableSecureCookies": "在 .env 中设置 ENABLE_SECURE_COOKIES=false(会降低安全性)",
-    "privacyNote": "我们仅使用此 Key 作登录校验,绝不会保留原文。"
+    "privacyNote": "请使用您的 API Key 登录 Claude Code Hub 后台"
   },
   "form": {
     "title": "登录面板",

+ 2 - 1
messages/zh-CN/common.json

@@ -39,5 +39,6 @@
   "warning": "警告",
   "info": "信息",
   "noData": "暂无数据",
-  "emptyState": "没有数据可显示"
+  "emptyState": "没有数据可显示",
+  "core": "核心"
 }

+ 112 - 7
messages/zh-CN/dashboard.json

@@ -357,6 +357,7 @@
   "all": "全部",
   "nav": {
     "dashboard": "仪表盘",
+    "userManagement": "用户管理",
     "usageLogs": "使用记录",
     "leaderboard": "排行榜",
     "quotasManagement": "限额管理",
@@ -419,6 +420,8 @@
     },
     "limitUsage": "限额使用情况",
     "copyKeyTooltip": "复制完整密钥",
+    "showKeyTooltip": "显示完整密钥",
+    "hideKeyTooltip": "隐藏密钥",
     "copyFailed": "复制失败:",
     "timesUnit": "次",
     "provider": "供应商",
@@ -463,6 +466,10 @@
       "description": "你的 API Key 已成功创建。请务必复制并妥善保存,此密钥仅显示一次。",
       "apiKeyLabel": "API Key",
       "warningText": "请在关闭前复制并保存,关闭后将无法再次查看此密钥",
+      "httpWarningText": "检测到 HTTP 访问,浏览器限制无法使用复制功能。请点击眼睛图标显示密钥后手动复制。",
+      "copyTooltip": "复制到剪贴板",
+      "showTooltip": "显示完整密钥",
+      "hideTooltip": "隐藏密钥",
       "closeButton": "关闭"
     }
   },
@@ -497,22 +504,26 @@
     "limit5hUsd": {
       "label": "5小时消费上限 (USD)",
       "placeholder": "留空表示无限制",
-      "description": "5小时内最大消费金额"
+      "description": "5小时内最大消费金额",
+      "descriptionWithUserLimit": "5小时内最大消费金额(用户限额: ${limit})"
     },
     "limitWeeklyUsd": {
       "label": "周消费上限 (USD)",
       "placeholder": "留空表示无限制",
-      "description": "每周最大消费金额"
+      "description": "每周最大消费金额",
+      "descriptionWithUserLimit": "每周最大消费金额(用户限额: ${limit})"
     },
     "limitMonthlyUsd": {
       "label": "月消费上限 (USD)",
       "placeholder": "留空表示无限制",
-      "description": "每月最大消费金额"
+      "description": "每月最大消费金额",
+      "descriptionWithUserLimit": "每月最大消费金额(用户限额: ${limit})"
     },
     "limitConcurrentSessions": {
       "label": "并发 Session 上限",
       "placeholder": "0 表示无限制",
-      "description": "同时运行的对话数量"
+      "description": "同时运行的对话数量",
+      "descriptionWithUserLimit": "同时运行的对话数量(用户限额: {limit})"
     },
     "errors": {
       "userIdMissing": "用户ID不存在",
@@ -548,18 +559,38 @@
     },
     "providerGroup": {
       "label": "供应商分组",
-      "placeholder": "例如: premium 或 premium,economy(可选)",
+      "placeholder": "输入分组标签",
       "description": "指定用户专属的供应商分组(支持多个,逗号分隔)。系统将只从 groupTag 匹配的供应商中选择。留空=使用所有供应商"
     },
     "rpm": {
       "label": "RPM限制",
       "placeholder": "每分钟请求数限制",
-      "description": "默认值: {default},范围: 1-10000"
+      "description": "默认值: {default},范围: 1-1000000"
     },
     "dailyQuota": {
       "label": "每日额度",
       "placeholder": "每日消费额度限制",
-      "description": "默认值: ${default},范围: $0.01-$1000"
+      "description": "默认值: ${default},范围: $0.01-$100000"
+    },
+    "limit5hUsd": {
+      "label": "5小时限额 (USD)",
+      "placeholder": "留空表示无限制",
+      "description": "5小时内最大消费金额"
+    },
+    "limitWeeklyUsd": {
+      "label": "周限额 (USD)",
+      "placeholder": "留空表示无限制",
+      "description": "每周最大消费金额"
+    },
+    "limitMonthlyUsd": {
+      "label": "月限额 (USD)",
+      "placeholder": "留空表示无限制",
+      "description": "每月最大消费金额"
+    },
+    "limitConcurrentSessions": {
+      "label": "并发 Session 上限",
+      "placeholder": "0 表示无限制",
+      "description": "同时运行的对话数量"
     }
   },
   "deleteKeyConfirm": {
@@ -584,5 +615,79 @@
     "delete": "删除用户",
     "editAriaLabel": "编辑用户",
     "deleteAriaLabel": "删除用户"
+  },
+  "rateLimits": {
+    "title": "限流事件统计",
+    "description": "查看和分析限流事件的统计数据",
+    "loading": "加载中...",
+    "error": "加载失败",
+    "totalEvents": "总事件数",
+    "avgUsage": "平均使用率",
+    "affectedUsers": "受影响用户数",
+    "noData": "暂无数据",
+    "noDataHint": "在选定的时间范围内没有限流事件",
+    "filters": {
+      "startTime": "开始时间",
+      "endTime": "结束时间",
+      "user": "用户",
+      "provider": "供应商",
+      "limitType": "限流类型",
+      "allUsers": "全部用户",
+      "allProviders": "全部供应商",
+      "allLimitTypes": "全部类型",
+      "apply": "应用筛选",
+      "reset": "重置",
+      "loading": "加载中...",
+      "limitTypes": {
+        "rpm": "RPM限流",
+        "usd_5h": "5小时消费限流",
+        "usd_weekly": "周消费限流",
+        "usd_monthly": "月消费限流",
+        "concurrent_sessions": "并发Session限流",
+        "daily_quota": "每日额度限流"
+      }
+    },
+    "chart": {
+      "title": "限流事件时间线",
+      "description": "按小时统计的限流事件趋势",
+      "total": "总计",
+      "events": "事件数"
+    },
+    "breakdown": {
+      "title": "限流类型分布",
+      "description": "不同限流类型的事件占比",
+      "total": "总计",
+      "count": "事件数",
+      "percentage": "占比",
+      "noData": "暂无数据",
+      "types": {
+        "rpm": "RPM限流",
+        "usd_5h": "5小时消费",
+        "usd_weekly": "周消费",
+        "usd_monthly": "月消费",
+        "concurrent_sessions": "并发Session",
+        "daily_quota": "每日额度"
+      }
+    },
+    "topUsers": {
+      "title": "受影响用户排行",
+      "description": "触发限流最多的用户列表",
+      "total": "总计",
+      "rank": "排名",
+      "username": "用户名",
+      "eventCount": "事件数",
+      "percentage": "占比",
+      "loading": "加载中...",
+      "noData": "暂无数据"
+    }
+  },
+  "users": {
+    "title": "用户管理",
+    "description": "显示 {count} 个用户",
+    "toolbar": {
+      "searchPlaceholder": "按用户名搜索...",
+      "groupFilter": "按分组筛选",
+      "allGroups": "所有分组"
+    }
   }
 }

+ 4 - 0
messages/zh-CN/index.ts

@@ -7,10 +7,12 @@ import forms from "./forms.json";
 import internal from "./internal.json";
 import notifications from "./notifications.json";
 import providerChain from "./provider-chain.json";
+import providers from "./providers.json";
 import quota from "./quota.json";
 import settings from "./settings.json";
 import ui from "./ui.json";
 import usage from "./usage.json";
+import users from "./users.json";
 import validation from "./validation.json";
 
 export default {
@@ -23,9 +25,11 @@ export default {
   internal,
   notifications,
   "provider-chain": providerChain,
+  providers,
   quota,
   settings,
   ui,
   usage,
+  users,
   validation,
 };

+ 5 - 1
messages/zh-CN/notifications.json

@@ -12,7 +12,7 @@
   "refresh_success": "刷新成功",
   "test_success": "测试成功",
 
-  "user_created": "用户 {name} 创建成功",
+  "user_created": "用户创建成功",
   "user_updated": "用户信息已更新",
   "user_deleted": "用户已删除",
   "key_created": "密钥创建成功",
@@ -22,6 +22,10 @@
   "provider_updated": "供应商已更新",
   "provider_deleted": "供应商已删除",
 
+  "create_failed": "创建失败",
+  "update_failed": "更新失败",
+  "delete_failed": "删除失败",
+
   "operation_success": "操作成功",
   "operation_failed": "操作失败",
   "processing": "处理中...",

+ 19 - 9
messages/zh-CN/provider-chain.json

@@ -6,10 +6,16 @@
     "unknown": "未知"
   },
   "errors": {
-    "ENOTFOUND": "DNS 解析失败",
-    "ECONNREFUSED": "连接被拒绝",
-    "ETIMEDOUT": "连接或读取超时",
-    "ECONNRESET": "连接被重置"
+    "ENOTFOUND": "DNS 解析失败(域名无法解析)",
+    "ECONNREFUSED": "连接被拒绝(目标服务器拒绝连接)",
+    "ETIMEDOUT": "TCP 连接超时(网络延迟过高或防火墙拦截)",
+    "ECONNRESET": "连接被重置(网络中断或服务器主动断开)",
+    "EHOSTUNREACH": "主机不可达(网络路由问题)",
+    "ENETUNREACH": "网络不可达(本地网络配置问题)",
+    "EPROTO": "协议错误(SSL/TLS 握手失败)",
+    "CLIENT_ABORT": "客户端中断请求",
+    "PROVIDER_TIMEOUT": "供应商响应超时(首字节延迟过高)",
+    "STREAMING_IDLE_TIMEOUT": "流式响应静默超时(供应商停止发送数据)"
   },
   "summary": {
     "singleSuccess": "{total} 个供应商,{healthy} 个健康 → {provider} ✓",
@@ -80,9 +86,9 @@
     "alreadyBroken": "已触发熔断",
     "circuitTriggered": "⚠️ 已触发熔断",
     "errorDetails": "错误详情",
-    "systemError": "系统错误",
-    "systemErrorFailed": "系统错误(第 {attempt} 次尝试)",
-    "errorType": "错误类型: 系统错误",
+    "systemError": "网络/系统错误",
+    "systemErrorFailed": "网络/系统错误(第 {attempt} 次尝试)",
+    "errorType": "错误类型: ",
     "errorName": "错误",
     "errorCode": "错误码: {code}",
     "errorSyscall": "系统调用: {syscall}",
@@ -99,7 +105,7 @@
     "requestOk": "OK",
     "successStatus": "状态: {code} OK",
     "requestCompleted": "请求成功完成",
-    "completed": "请求成功完成",
+    "completed": "请求成功完成",
     "concurrentLimitFailed": "并发限制",
     "attemptFailed": "尝试失败(第 {attempt} 次)",
     "concurrentLimit": "并发限制",
@@ -107,6 +113,10 @@
     "sessions": "会话",
     "withPriorityWeight": "(优先级={priority} 权重={weight})",
     "unknown": "未知",
-    "noDecisionRecord": "无决策记录"
+    "noDecisionRecord": "无决策记录",
+    "modelRedirect": "模型重定向",
+    "modelRedirectFrom": "  请求模型: {model}",
+    "modelRedirectTo": "  实际转发: {model}",
+    "modelRedirectBilling": "  计费依据: {model}"
   }
 }

+ 30 - 0
messages/zh-CN/providers.json

@@ -0,0 +1,30 @@
+{
+  "_comment": "Provider types and related translations for Chinese Simplified",
+
+  "types": {
+    "claude": {
+      "label": "Claude",
+      "description": "Anthropic 官方 API"
+    },
+    "claudeAuth": {
+      "label": "Claude Auth",
+      "description": "Claude 中转服务"
+    },
+    "codex": {
+      "label": "Codex",
+      "description": "Codex CLI API"
+    },
+    "geminiCli": {
+      "label": "Gemini CLI",
+      "description": "Gemini CLI API"
+    },
+    "gemini": {
+      "label": "Gemini",
+      "description": "Google Gemini 官方 API"
+    },
+    "openaiCompatible": {
+      "label": "OpenAI Compatible",
+      "description": "OpenAI 兼容 API"
+    }
+  }
+}

+ 10 - 4
messages/zh-CN/quota.json

@@ -64,6 +64,8 @@
   "users": {
     "title": "用户限额统计",
     "totalCount": "共 {count} 个用户",
+    "manageNotice": "管理用户和密钥,请访问",
+    "manageLink": "用户管理",
     "noNote": "无备注",
     "rpm": {
       "label": "RPM 限额",
@@ -221,22 +223,26 @@
       "limit5hUsd": {
         "label": "5小时消费上限 (USD)",
         "placeholder": "留空表示无限制",
-        "description": "5小时内最大消费金额"
+        "description": "5小时内最大消费金额",
+        "descriptionWithUserLimit": "5小时内最大消费金额(用户限额: ${limit})"
       },
       "limitWeeklyUsd": {
         "label": "周消费上限 (USD)",
         "placeholder": "留空表示无限制",
-        "description": "每周最大消费金额"
+        "description": "每周最大消费金额",
+        "descriptionWithUserLimit": "每周最大消费金额(用户限额: ${limit})"
       },
       "limitMonthlyUsd": {
         "label": "月消费上限 (USD)",
         "placeholder": "留空表示无限制",
-        "description": "每月最大消费金额"
+        "description": "每月最大消费金额",
+        "descriptionWithUserLimit": "每月最大消费金额(用户限额: ${limit})"
       },
       "limitConcurrentSessions": {
         "label": "并发 Session 上限",
         "placeholder": "0 表示无限制",
-        "description": "同时运行的对话数量"
+        "description": "同时运行的对话数量",
+        "descriptionWithUserLimit": "同时运行的对话数量(用户限额: {limit})"
       },
       "submitText": "保存修改",
       "loadingText": "保存中...",

+ 209 - 6
messages/zh-CN/settings.json

@@ -8,7 +8,9 @@
     "data": "数据管理",
     "logs": "日志",
     "notifications": "消息推送",
-    "apiDocs": "API 文档"
+    "apiDocs": "API 文档",
+    "errorRules": "错误规则",
+    "feedback": "反馈问题"
   },
   "common": {
     "save": "保存",
@@ -126,6 +128,10 @@
         "label": "Codex",
         "description": "Codex CLI API"
       },
+      "gemini": {
+        "label": "Gemini",
+        "description": "Google Gemini API"
+      },
       "geminiCli": {
         "label": "Gemini CLI",
         "description": "Gemini CLI API"
@@ -208,6 +214,46 @@
         "proxyError": "代理错误:",
         "networkError": "网络错误:"
       },
+      "apiTest": {
+        "fillUrlFirst": "请先填写供应商 URL",
+        "invalidUrl": "供应商 URL 无效,仅支持 http/https",
+        "fillKeyFirst": "请先填写 API 密钥",
+        "testFailed": "测试失败",
+        "testFailedRetry": "测试失败,请重试",
+        "noResult": "测试成功但未返回结果",
+        "testSuccess": "模型测试成功",
+        "testApi": "供应商模型测试",
+        "testing": "测试中...",
+        "apiFormat": "供应商类型",
+        "selectApiFormat": "选择要测试的供应商类型",
+        "apiFormatDesc": "默认同步路由配置中的供应商类型,除非手动修改",
+        "formatAnthropicMessages": "Claude (Anthropic Messages API)",
+        "formatOpenAIChat": "OpenAI Compatible",
+        "formatOpenAIResponses": "Codex (Response API)",
+        "testModel": "测试模型",
+        "testModelDesc": "可手动输入,不填写则使用默认模型",
+        "model": "模型",
+        "responseTime": "响应时间",
+        "usage": "Token 用量",
+        "response": "响应内容",
+        "error": "错误信息",
+        "unknown": "未知",
+        "viewDetails": "查看详情",
+        "copySuccess": "已复制到剪贴板",
+        "copyFailed": "复制失败",
+        "copyResult": "复制结果",
+        "success": "成功",
+        "failed": "失败"
+      },
+      "urlPreview": {
+        "title": "URL 拼接预览",
+        "invalidUrl": "无效的 URL 格式",
+        "invalidUrlDesc": "请输入有效的 HTTP/HTTPS 地址",
+        "duplicatePath": "检测到重复路径",
+        "copy": "复制",
+        "copySuccess": "已复制 {name} 到剪贴板",
+        "copyFailed": "复制失败"
+      },
       "modelSelect": {
         "allowAllModels": "允许所有 {type} 模型",
         "selectedCount": "已选择 {count} 个模型",
@@ -328,7 +374,7 @@
       "routingConfigSummary": "{models} 个模型白名单, {redirects} 个重定向",
       "routingConfigNone": "未配置",
       "providerTypeDesc": "选择供应商的 API 格式类型。",
-      "providerTypeDisabledNote": "注:Gemini CLI 和 OpenAI Compatible 类型功能正在开发中,暂不可用",
+      "providerTypeDisabledNote": "注:OpenAI Compatible 类型功能正在开发中,暂不可用",
       "modelRedirectsLabel": "模型重定向配置",
       "modelRedirectsOptional": "(可选)",
       "modelRedirectsEmpty": "暂无重定向规则。添加规则后,系统将自动重写请求中的模型名称。",
@@ -470,6 +516,9 @@
         "updating": "更新中...",
         "delete": "删除"
       },
+      "common": {
+        "core": "核心"
+      },
       "sections": {
         "routing": {
           "title": "路由配置",
@@ -522,8 +571,8 @@
             },
             "group": {
               "label": "供应商分组",
-              "placeholder": "例如: premium, economy",
-              "desc": "供应商分组标签。只有用户的 providerGroup 与此值匹配时,该用户才能使用此供应商。示例:设置为 \"premium\" 表示只供 providerGroup=\"premium\" 的用户使用"
+              "placeholder": "输入分组标签",
+              "desc": "供应商分组标签(支持多个,逗号分隔)。只有用户的 providerGroup 与此值匹配时,该用户才能使用此供应商。留空=对所有用户开放"
             }
           }
         },
@@ -596,6 +645,37 @@
             "desc": "测试通过配置的代理访问供应商 URL(使用 HEAD 请求,不消耗额度)"
           }
         },
+        "timeout": {
+          "title": "超时配置",
+          "summary": "首字: {streaming}s | 流式间隔: {idle}s | 非流式: {nonStreaming}s",
+          "desc": "配置请求超时时间,0 表示禁用超时",
+          "streamingFirstByte": {
+            "label": "流式首字节超时(秒)",
+            "placeholder": "30",
+            "desc": "流式请求首字节超时,范围 1-120 秒,默认 30 秒",
+            "core": "true"
+          },
+          "streamingIdle": {
+            "label": "流式静默期超时(秒)",
+            "placeholder": "10",
+            "desc": "流式请求静默期超时,范围 1-120 秒,默认 10 秒(防止中途卡住)",
+            "core": "true"
+          },
+          "nonStreamingTotal": {
+            "label": "非流式总超时(秒)",
+            "placeholder": "600",
+            "desc": "非流式请求总超时,范围 60-1200 秒,默认 600 秒(10 分钟)",
+            "core": "true"
+          },
+          "disableHint": "设为 0 表示禁用该超时(仅用于灰度回退场景,不推荐)"
+        },
+        "apiTest": {
+          "title": "供应商模型测试",
+          "summary": "验证供应商与模型连通性",
+          "desc": "测试供应商模型是否可用,默认与路由配置中选择的供应商类型保持一致。",
+          "testLabel": "供应商模型测试",
+          "notice": "注意:测试将向供应商发送真实请求(非流式),可能消耗少量额度。请确认供应商 URL、API 密钥及模型配置正确。"
+        },
         "codexStrategy": {
           "title": "Codex Instructions 策略",
           "summary": {
@@ -627,6 +707,7 @@
         "claude": "Claude (Anthropic Messages API)",
         "claudeAuth": "Claude (Anthropic Auth Token)",
         "codex": "Codex (Response API)",
+        "gemini": "Gemini (Google Gemini API)",
         "geminiCli": "Gemini CLI",
         "geminiCliDisabled": " - 功能开发中",
         "openaiCompatible": "OpenAI Compatible",
@@ -1126,8 +1207,7 @@
         "description": "导出完整的数据库备份文件(.dump 格式),可用于数据迁移或恢复。"
       },
       "import": {
-        "title": "数据导入",
-        "description": "从备份文件恢复数据库。支持 PostgreSQL custom format (.dump) 格式的备份文件。"
+        "title": "数据导入"
       }
     }
   },
@@ -1254,5 +1334,128 @@
     "testFailedRetry": "测试失败,请重试",
     "loadFailed": "加载通知设置失败",
     "unknownError": "操作过程中出现异常"
+  },
+  "errorRules": {
+    "nav": "错误规则",
+    "title": "错误规则管理",
+    "description": "管理不需要自动重试的客户端错误规则。配置后,命中规则的报错将直接返回给用户,不会触发重试,也不会计入供应商熔断。",
+    "section": {
+      "title": "错误规则列表"
+    },
+    "add": "添加错误规则",
+    "addSuccess": "错误规则创建成功",
+    "addFailed": "创建错误规则失败",
+    "edit": "编辑错误规则",
+    "editSuccess": "错误规则更新成功",
+    "editFailed": "更新错误规则失败",
+    "delete": "删除错误规则",
+    "deleteSuccess": "错误规则删除成功",
+    "deleteFailed": "删除失败",
+    "enable": "错误规则已启用",
+    "disable": "错误规则已禁用",
+    "toggleFailed": "状态切换失败",
+    "toggleFailedError": "状态切换失败:",
+    "refreshCache": "刷新缓存",
+    "refreshCacheSuccess": "缓存刷新成功,已加载 {count} 个错误规则",
+    "refreshCacheFailed": "刷新缓存失败",
+    "cacheStats": "缓存统计: 启用({enabledCount}) 禁用({disabledCount}) 默认({defaultCount})",
+    "emptyState": "暂无错误规则,点击右上角\"添加错误规则\"开始配置。",
+    "confirmDelete": "确定要删除错误规则\"{pattern}\"吗?",
+    "dialog": {
+      "addTitle": "添加错误规则",
+      "addDescription": "配置错误消息正则模式,匹配的错误将被识别为不可重试的客户端错误。",
+      "editTitle": "编辑错误规则",
+      "editDescription": "修改错误规则配置,更改后将自动刷新缓存。",
+      "patternLabel": "正则模式 *",
+      "patternPlaceholder": "输入正则表达式...",
+      "patternRequired": "请输入正则模式",
+      "patternHint": "支持 JavaScript 正则表达式语法,例如:prompt is too long|invalid.*request",
+      "categoryLabel": "规则类别 *",
+      "categoryPlaceholder": "选择规则类别",
+      "categoryRequired": "请选择规则类别",
+      "categoryHint": "选择规则所属的错误类别,用于分类管理和统计",
+      "descriptionLabel": "说明",
+      "descriptionPlaceholder": "可选:添加说明...",
+      "invalidRegex": "正则表达式语法错误",
+      "regexTester": "正则测试器",
+      "testMessageLabel": "测试消息",
+      "testMessagePlaceholder": "输入要测试的错误消息...",
+      "matchSuccess": "匹配成功",
+      "matchFailed": "未匹配",
+      "invalidPattern": "正则无效",
+      "matchedText": "匹配内容",
+      "defaultRuleHint": "默认规则的模式不可修改",
+      "creating": "创建中...",
+      "saving": "保存中..."
+    },
+    "table": {
+      "pattern": "正则模式",
+      "category": "规则类别",
+      "description": "说明",
+      "status": "状态",
+      "default": "默认",
+      "isEnabled": "启用状态",
+      "isDefault": "默认规则",
+      "createdAt": "创建时间",
+      "actions": "操作"
+    },
+    "form": {
+      "fields": {
+        "pattern": "正则模式",
+        "category": "规则类别",
+        "description": "说明"
+      },
+      "placeholders": {
+        "pattern": "例如: prompt is too long",
+        "category": "选择类别",
+        "description": "可选:添加说明..."
+      },
+      "labels": {
+        "pattern": "正则模式 *",
+        "category": "规则类别 *",
+        "description": "说明",
+        "isEnabled": "启用状态"
+      }
+    },
+    "actions": {
+      "add": "添加",
+      "edit": "编辑",
+      "delete": "删除",
+      "refresh": "刷新",
+      "test": "测试",
+      "messages": {
+        "success": "操作成功",
+        "error": "操作失败"
+      }
+    },
+    "validation": {
+      "patternRequired": "请输入正则模式",
+      "categoryRequired": "请选择规则类别",
+      "patternInvalid": "正则表达式语法错误",
+      "redosRisk": "正则表达式存在 ReDoS 风险,请简化模式",
+      "patternTooComplex": "正则表达式过于复杂"
+    },
+    "categories": {
+      "prompt_limit": "Prompt 长度限制",
+      "content_filter": "内容过滤",
+      "pdf_limit": "PDF 页数限制",
+      "thinking_error": "Thinking 格式错误",
+      "parameter_error": "参数验证失败",
+      "invalid_request": "非法请求",
+      "cache_limit": "缓存控制限制"
+    },
+    "regexTester": {
+      "title": "正则测试器",
+      "testMessage": "测试消息",
+      "testMessagePlaceholder": "输入要测试的错误消息...",
+      "matchResult": "匹配结果",
+      "matched": "匹配成功",
+      "notMatched": "未匹配",
+      "test": "测试"
+    },
+    "defaultRules": {
+      "cannotDelete": "默认规则无法删除",
+      "cannotDisable": "建议保留默认规则启用状态"
+    }
   }
 }

+ 11 - 1
messages/zh-CN/ui.json

@@ -4,7 +4,8 @@
     "actions": "操作",
     "loading": "加载中...",
     "empty": "为空",
-    "error": "错误"
+    "error": "错误",
+    "retry": "重试"
   },
   "table": {
     "pagination": "分页",
@@ -43,5 +44,14 @@
   "loading": {
     "title": "加载中",
     "description": "请稍候..."
+  },
+  "tagInput": {
+    "placeholder": "输入标签后按回车或逗号添加",
+    "emptyTag": "标签不能为空",
+    "duplicateTag": "标签已存在",
+    "maxTags": "已达到最大标签数量",
+    "tooLong": "标签长度不能超过 {max} 个字符",
+    "invalidFormat": "标签只能包含字母、数字、下划线和连字符",
+    "removeTag": "移除标签 {tag}"
   }
 }

+ 123 - 0
messages/zh-CN/usage.json

@@ -337,6 +337,129 @@
     }
   },
 
+  "gemini": {
+    "title": "Gemini CLI 使用指南",
+    "description": "Gemini CLI 是 Google 官方的 AI 编程助手命令行工具,支持通过 cch 代理服务使用。本指南将帮助您在不同操作系统上完成安装和配置。",
+
+    "installation": {
+      "title": "安装 gemini",
+      "instruction": "确保您已安装 Node.js 18 或更高版本,然后全局安装 Gemini CLI:",
+      "command": "npm install -g @google/gemini-cli",
+      "verification": "验证安装:",
+      "verificationCommand": "gemini --version",
+      "adminNote": "以管理员身份运行 PowerShell,"
+    },
+
+    "configuration": {
+      "title": "连接 cch 服务",
+
+      "configFile": {
+        "title": "方法一:配置文件方式(推荐)",
+
+        "step1": {
+          "title": "创建配置目录",
+          "description": "Gemini CLI 的配置文件位于 ~/.gemini/ 目录。",
+          "macosLinux": "macOS / Linux:",
+          "windows": "Windows (PowerShell):"
+        },
+
+        "step2": {
+          "title": "创建 .env 配置文件",
+          "description": "在 ~/.gemini/ 目录下创建 .env 文件:",
+          "macosLinuxInstruction": "macOS / Linux:",
+          "windowsInstruction": "Windows:在 %USERPROFILE%\\.gemini\\ 目录下创建 .env 文件",
+          "content": "添加以下内容:"
+        },
+
+        "step3": {
+          "title": "创建 settings.json 配置文件",
+          "description": "在 ~/.gemini/ 目录下创建 settings.json 文件:",
+          "content": "这个配置文件启用了 IDE 集成,并设置认证方式为 API Key。"
+        },
+
+        "parameterNote": "参数说明",
+        "parameters": [
+          "GOOGLE_GEMINI_BASE_URL: cch API 基础地址",
+          "GEMINI_API_KEY: 您在 cch 控制台创建的 API 密钥",
+          "GEMINI_MODEL: 使用的模型(默认为 gemini-2.5-pro)"
+        ],
+
+        "important": "重要提示",
+        "importantPoints": [
+          "将 YOUR_API_KEY_HERE 替换为您的实际 API 密钥",
+          "密钥获取方式:登录控制台 → API 密钥管理 → 创建密钥"
+        ]
+      },
+
+      "envVars": {
+        "title": "方法二:环境变量配置",
+        "description": "如果您只想临时使用,可以通过环境变量配置:",
+
+        "macosLinux": {
+          "title": "macOS / Linux:",
+          "note": "环境变量只在当前终端会话中有效。如需持久化配置,请使用配置文件方式。"
+        },
+
+        "windows": {
+          "powershell": "Windows (PowerShell):",
+          "cmd": "Windows (CMD):",
+          "note": "环境变量只在当前终端会话中有效。如需持久化配置,请使用配置文件方式。"
+        }
+      }
+    },
+
+    "startup": {
+      "title": "启动和验证",
+
+      "startCli": {
+        "title": "启动 Gemini CLI",
+        "description": "进入您的项目目录并启动 Gemini CLI:",
+        "note": "首次启动时,Gemini CLI 会读取配置文件中的设置。"
+      },
+
+      "verification": {
+        "title": "验证配置",
+        "description": "在 Gemini CLI 中尝试发送一个简单的请求测试连接:",
+        "testCommand": "你好,请帮我创建一个 Python 的 hello world 程序",
+        "success": "如果 Gemini CLI 正常响应,说明配置成功!"
+      },
+
+      "agentMode": {
+        "title": "使用 Agent Mode",
+        "description": "Gemini CLI 支持 Agent Mode,可以自动规划和执行复杂任务:",
+        "command": "gemini --agent",
+        "features": "在 Agent Mode 下,Gemini 会:",
+        "featureList": [
+          "自动分析任务需求",
+          "制定执行计划",
+          "逐步执行并验证结果",
+          "根据反馈调整策略"
+        ]
+      }
+    },
+
+    "commonIssues": {
+      "title": "常见问题",
+
+      "commandNotFound": "1. 命令未找到",
+      "commandNotFoundWindows": [
+        "确保 npm 全局路径(通常是 C:\\Users\\你的用户名\\AppData\\Roaming\\npm)已添加到系统 PATH",
+        "重新打开 PowerShell 窗口"
+      ],
+      "commandNotFoundUnix": "检查 npm 全局安装路径并添加到 PATH(如果不在)",
+
+      "connectionFailed": "2. API 连接失败",
+      "connectionSteps": [
+        "检查环境变量或配置文件中的 GEMINI_API_KEY 是否设置正确",
+        "验证 GOOGLE_GEMINI_BASE_URL 是否正确",
+        "测试网络连接"
+      ],
+
+      "updateCli": "3. 更新 gemini",
+      "updateCommand": "npm install -g @google/gemini-cli"
+    }
+  },
+
   "droid": {
     "title": "Droid CLI 使用指南",
     "description": "Droid 是 Factory AI 开发的交互式终端 AI 编程助手,支持通过 cch 代理服务使用。使用前必须先注册并登录 Droid 官方账号。",

+ 1 - 1
messages/zh-TW/auth.json

@@ -30,7 +30,7 @@
     "solutionTitle": "解決方案:",
     "useHttps": "使用 HTTPS 存取(推薦)",
     "disableSecureCookies": "在 .env 中設定 ENABLE_SECURE_COOKIES=false(會降低安全性)",
-    "privacyNote": "我們僅使用此 Key 作登錄校驗,絕不會保留原文。"
+    "privacyNote": "請使用您的 API Key 登入 Claude Code Hub 後台"
   },
   "errors": {
     "loginFailed": "登錄失敗",

+ 2 - 1
messages/zh-TW/common.json

@@ -39,5 +39,6 @@
   "warning": "警告",
   "info": "資訊",
   "noData": "暫無資料",
-  "emptyState": "沒有資料可顯示"
+  "emptyState": "沒有資料可顯示",
+  "core": "核心"
 }

+ 27 - 0
messages/zh-TW/dashboard.json

@@ -360,6 +360,7 @@
     "usageLogs": "使用記錄",
     "leaderboard": "排行榜",
     "quotasManagement": "額度管理",
+    "userManagement": "使用者管理",
     "documentation": "文件",
     "systemSettings": "系統設定",
     "feedback": "意見回饋",
@@ -419,6 +420,8 @@
     },
     "limitUsage": "額度使用情況",
     "copyKeyTooltip": "複製完整金鑰",
+    "showKeyTooltip": "顯示完整金鑰",
+    "hideKeyTooltip": "隱藏金鑰",
     "copyFailed": "複製失敗:",
     "timesUnit": "次",
     "provider": "供應商",
@@ -463,6 +466,10 @@
       "description": "您的 API 金鑰已成功建立。請務必複製並妥善保存,此金鑰僅顯示一次。",
       "apiKeyLabel": "API 金鑰",
       "warningText": "請在關閉前複製並儲存,關閉後將無法再次檢視此金鑰",
+      "httpWarningText": "偵測到 HTTP 存取,瀏覽器限制無法使用複製功能。請點擊眼睛圖示顯示金鑰後手動複製。",
+      "copyTooltip": "複製到剪貼簿",
+      "showTooltip": "顯示完整金鑰",
+      "hideTooltip": "隱藏金鑰",
       "closeButton": "關閉"
     }
   },
@@ -560,6 +567,26 @@
       "label": "每日額度",
       "placeholder": "每日消費額度限制",
       "description": "預設值:${default},範圍:$0.01-$1000"
+    },
+    "limit5hUsd": {
+      "label": "5小時消費上限 (USD)",
+      "placeholder": "留空表示無限制",
+      "description": "5小時內最大消費金額"
+    },
+    "limitWeeklyUsd": {
+      "label": "週消費上限 (USD)",
+      "placeholder": "留空表示無限制",
+      "description": "每週最大消費金額"
+    },
+    "limitMonthlyUsd": {
+      "label": "月消費上限 (USD)",
+      "placeholder": "留空表示無限制",
+      "description": "每月最大消費金額"
+    },
+    "limitConcurrentSessions": {
+      "label": "並發 Session 上限",
+      "placeholder": "0 表示無限制",
+      "description": "同時執行的對話數量"
     }
   },
   "deleteKeyConfirm": {

+ 4 - 0
messages/zh-TW/index.ts

@@ -6,10 +6,12 @@ import errors from "./errors.json";
 import forms from "./forms.json";
 import notifications from "./notifications.json";
 import providerChain from "./provider-chain.json";
+import providers from "./providers.json";
 import quota from "./quota.json";
 import settings from "./settings.json";
 import ui from "./ui.json";
 import usage from "./usage.json";
+import users from "./users.json";
 import validation from "./validation.json";
 import internal from "./internal.json";
 
@@ -22,10 +24,12 @@ export default {
   forms,
   notifications,
   "provider-chain": providerChain,
+  providers,
   quota,
   settings,
   ui,
   usage,
+  users,
   validation,
   internal,
 };

+ 5 - 1
messages/zh-TW/notifications.json

@@ -12,7 +12,7 @@
   "refresh_success": "刷新成功",
   "test_success": "測試成功",
 
-  "user_created": "使用者 {name} 創建成功",
+  "user_created": "使用者創建成功",
   "user_updated": "使用者資訊已更新",
   "user_deleted": "使用者已刪除",
   "key_created": "金鑰創建成功",
@@ -22,6 +22,10 @@
   "provider_updated": "供應商已更新",
   "provider_deleted": "供應商已刪除",
 
+  "create_failed": "創建失敗",
+  "update_failed": "更新失敗",
+  "delete_failed": "刪除失敗",
+
   "operation_success": "操作成功",
   "operation_failed": "操作失敗",
   "processing": "處理中...",

+ 13 - 3
messages/zh-TW/provider-chain.json

@@ -9,7 +9,13 @@
     "ENOTFOUND": "DNS 解析失敗",
     "ECONNREFUSED": "連接被拒絕",
     "ETIMEDOUT": "連接或讀取逾時",
-    "ECONNRESET": "連接被重置"
+    "ECONNRESET": "連接被重置",
+    "EHOSTUNREACH": "主機不可達(網路路由問題)",
+    "ENETUNREACH": "網路不可達(本地網路配置問題)",
+    "EPROTO": "協議錯誤(SSL/TLS 握手失敗)",
+    "CLIENT_ABORT": "客戶端中斷請求",
+    "PROVIDER_TIMEOUT": "供應商響應超時(首字節延遲過高)",
+    "STREAMING_IDLE_TIMEOUT": "流式響應靜默超時(供應商停止發送數據)"
   },
   "summary": {
     "singleSuccess": "{total} 個供應商,{healthy} 個健康 → {provider} ✓",
@@ -99,7 +105,7 @@
     "requestOk": "OK",
     "successStatus": "狀態: {code} OK",
     "requestCompleted": "請求成功完成",
-    "completed": "請求成功完成",
+    "completed": "請求成功完成",
     "concurrentLimitFailed": "並發限制",
     "attemptFailed": "嘗試失敗(第 {attempt} 次)",
     "concurrentLimit": "並發限制",
@@ -107,6 +113,10 @@
     "sessions": "會話",
     "withPriorityWeight": "(優先級={priority} 權重={weight})",
     "unknown": "未知",
-    "noDecisionRecord": "無決策記錄"
+    "noDecisionRecord": "無決策記錄",
+    "modelRedirect": "模型重定向",
+    "modelRedirectFrom": "  請求模型: {model}",
+    "modelRedirectTo": "  實際轉發: {model}",
+    "modelRedirectBilling": "  計費依據: {model}"
   }
 }

+ 30 - 0
messages/zh-TW/providers.json

@@ -0,0 +1,30 @@
+{
+  "_comment": "Provider types and related translations for Chinese Traditional",
+
+  "types": {
+    "claude": {
+      "label": "Claude",
+      "description": "Anthropic 官方 API"
+    },
+    "claudeAuth": {
+      "label": "Claude Auth",
+      "description": "Claude 中轉服務"
+    },
+    "codex": {
+      "label": "Codex",
+      "description": "Codex CLI API"
+    },
+    "geminiCli": {
+      "label": "Gemini CLI",
+      "description": "Gemini CLI API"
+    },
+    "gemini": {
+      "label": "Gemini",
+      "description": "Google Gemini 官方 API"
+    },
+    "openaiCompatible": {
+      "label": "OpenAI Compatible",
+      "description": "OpenAI 兼容 API"
+    }
+  }
+}

+ 200 - 4
messages/zh-TW/settings.json

@@ -268,8 +268,7 @@
         "description": "匯出完整的資料庫備份檔案(.dump 格式),可用於資料遷移或還原。"
       },
       "import": {
-        "title": "資料匯入",
-        "description": "從備份檔案還原資料庫。支援 PostgreSQL custom format (.dump) 格式的備份檔案。"
+        "title": "資料匯入"
       }
     }
   },
@@ -349,6 +348,8 @@
     "clientVersions": "用戶端升級提醒",
     "config": "設定",
     "data": "資料管理",
+    "errorRules": "錯誤規則",
+    "feedback": "意見回饋",
     "logs": "日誌",
     "notifications": "訊息推送",
     "prices": "價格表",
@@ -571,6 +572,46 @@
         "proxyError": "代理錯誤:",
         "networkError": "網路錯誤:"
       },
+      "apiTest": {
+        "fillUrlFirst": "請先填寫供應商 URL",
+        "invalidUrl": "供應商 URL 無效,僅支援 http/https",
+        "fillKeyFirst": "請先填寫 API 金鑰",
+        "testFailed": "測試失敗",
+        "testFailedRetry": "測試失敗,請重試",
+        "noResult": "測試成功但未返回結果",
+        "testSuccess": "模型測試成功",
+        "testApi": "供應商模型測試",
+        "testing": "測試中...",
+        "apiFormat": "供應商類型",
+        "selectApiFormat": "選擇要測試的供應商類型",
+        "apiFormatDesc": "預設與路由設定同步,除非手動修改",
+        "formatAnthropicMessages": "Claude (Anthropic Messages API)",
+        "formatOpenAIChat": "OpenAI Compatible",
+        "formatOpenAIResponses": "Codex (Response API)",
+        "testModel": "測試模型",
+        "testModelDesc": "可手動輸入,留空則使用預設模型",
+        "model": "模型",
+        "responseTime": "回應時間",
+        "usage": "Token 用量",
+        "response": "回應內容",
+        "error": "錯誤訊息",
+        "unknown": "未知",
+        "viewDetails": "檢視詳情",
+        "copySuccess": "已複製到剪貼簿",
+        "copyFailed": "複製失敗",
+        "copyResult": "複製結果",
+        "success": "成功",
+        "failed": "失敗"
+      },
+      "urlPreview": {
+        "title": "URL 拼接預覽",
+        "invalidUrl": "無效的 URL 格式",
+        "invalidUrlDesc": "請輸入有效的 HTTP/HTTPS 地址",
+        "duplicatePath": "檢測到重複路徑",
+        "copy": "複製",
+        "copySuccess": "已複製 {name} 到剪貼簿",
+        "copyFailed": "複製失敗"
+      },
       "modelSelect": {
         "allowAllModels": "允許所有 {type} 模型",
         "selectedCount": "已選擇 {count} 個模型",
@@ -795,6 +836,9 @@
         "updating": "更新中...",
         "delete": "刪除"
       },
+      "common": {
+        "core": "核心"
+      },
       "sections": {
         "routing": {
           "title": "路由設定",
@@ -809,7 +853,7 @@
             "placeholder": "選擇供應商類型"
           },
           "providerTypeDesc": "選擇供應商的 API 格式類型。",
-          "providerTypeDisabledNote": "註:Gemini CLI 與 OpenAI Compatible 類型開發中,暫不可用",
+          "providerTypeDisabledNote": "註:OpenAI Compatible 類型開發中,暫不可用",
           "modelRedirects": {
             "label": "模型重定向設定",
             "optional": "(選填)"
@@ -921,6 +965,30 @@
             "desc": "透過代理測試訪問供應商 URL(HEAD 請求,不消耗額度)"
           }
         },
+        "timeout": {
+          "title": "超時配置",
+          "summary": "首字: {streaming}s | 串流間隔: {idle}s | 非串流: {nonStreaming}s",
+          "desc": "設定請求超時時間,0 表示禁用超時",
+          "streamingFirstByte": {
+            "label": "串流首字節超時(秒)",
+            "placeholder": "30",
+            "desc": "串流請求首字節超時,範圍 1-120 秒,預設 30 秒",
+            "core": "true"
+          },
+          "streamingIdle": {
+            "label": "串流靜默期超時(秒)",
+            "placeholder": "10",
+            "desc": "串流請求靜默期超時,範圍 1-120 秒,預設 10 秒(防止中途卡住)",
+            "core": "true"
+          },
+          "nonStreamingTotal": {
+            "label": "非串流總超時(秒)",
+            "placeholder": "600",
+            "desc": "非串流請求總超時,範圍 60-1200 秒,預設 600 秒(10 分鐘)",
+            "core": "true"
+          },
+          "disableHint": "設為 0 表示禁用該超時(僅用於灰度回退場景,不推薦)"
+        },
         "codexStrategy": {
           "title": "Codex Instructions 策略",
           "summary": {
@@ -952,8 +1020,9 @@
         "claude": "Claude (Anthropic Messages API)",
         "claudeAuth": "Claude (Anthropic Auth Token)",
         "codex": "Codex (Response API)",
+        "gemini": "Gemini (Google Gemini API)",
         "geminiCli": "Gemini CLI",
-        "geminiCliDisabled": " - 功能開發中",
+        "geminiCliDisabled": "",
         "openaiCompatible": "OpenAI Compatible",
         "openaiCompatibleDisabled": " - 功能開發中"
       },
@@ -1135,6 +1204,10 @@
         "label": "Codex",
         "description": "Codex CLI API"
       },
+      "gemini": {
+        "label": "Gemini",
+        "description": "Google Gemini API"
+      },
       "geminiCli": {
         "label": "Gemini CLI",
         "description": "Gemini CLI API"
@@ -1254,5 +1327,128 @@
     "title": "敏感詞管理",
     "toggleFailed": "狀態切換失敗",
     "toggleFailedError": "狀態切換失敗:"
+  },
+  "errorRules": {
+    "nav": "錯誤規則",
+    "title": "錯誤規則管理",
+    "description": "管理不需要自動重試的客戶端錯誤規則。配置後,命中規則的報錯將直接返回給用戶,不會觸發重試,也不會計入供應商熔斷。",
+    "section": {
+      "title": "錯誤規則列表"
+    },
+    "add": "新增錯誤規則",
+    "addSuccess": "錯誤規則建立成功",
+    "addFailed": "建立錯誤規則失敗",
+    "edit": "編輯錯誤規則",
+    "editSuccess": "錯誤規則更新成功",
+    "editFailed": "更新錯誤規則失敗",
+    "delete": "刪除錯誤規則",
+    "deleteSuccess": "錯誤規則刪除成功",
+    "deleteFailed": "刪除失敗",
+    "enable": "錯誤規則已啟用",
+    "disable": "錯誤規則已停用",
+    "toggleFailed": "狀態切換失敗",
+    "toggleFailedError": "狀態切換失敗:",
+    "refreshCache": "重新整理快取",
+    "refreshCacheSuccess": "快取重新整理成功,已載入 {count} 個錯誤規則",
+    "refreshCacheFailed": "重新整理快取失敗",
+    "cacheStats": "快取統計: 啟用({enabledCount}) 停用({disabledCount}) 預設({defaultCount})",
+    "emptyState": "目前沒有錯誤規則,點擊右上角「新增錯誤規則」開始設定。",
+    "confirmDelete": "確定要刪除錯誤規則「{pattern}」嗎?",
+    "dialog": {
+      "addTitle": "新增錯誤規則",
+      "addDescription": "設定錯誤訊息正則表達式模式,符合的錯誤將被識別為不可重試的客戶端錯誤。",
+      "editTitle": "編輯錯誤規則",
+      "editDescription": "修改錯誤規則設定,更改後將自動重新整理快取。",
+      "patternLabel": "正則表達式模式 *",
+      "patternPlaceholder": "輸入正則表達式...",
+      "patternRequired": "請輸入正則表達式模式",
+      "patternHint": "支援 JavaScript 正則表達式語法,例如:prompt is too long|invalid.*request",
+      "categoryLabel": "規則類別 *",
+      "categoryPlaceholder": "選擇規則類別",
+      "categoryRequired": "請選擇規則類別",
+      "categoryHint": "選擇規則所屬的錯誤類別,用於分類管理和統計",
+      "descriptionLabel": "說明",
+      "descriptionPlaceholder": "選填:新增說明...",
+      "invalidRegex": "正則表達式語法錯誤",
+      "regexTester": "正則表達式測試器",
+      "testMessageLabel": "測試訊息",
+      "testMessagePlaceholder": "輸入要測試的錯誤訊息...",
+      "matchSuccess": "符合成功",
+      "matchFailed": "未符合",
+      "invalidPattern": "無效的正則表達式",
+      "matchedText": "符合內容",
+      "defaultRuleHint": "預設規則的模式無法修改",
+      "creating": "建立中...",
+      "saving": "儲存中..."
+    },
+    "table": {
+      "pattern": "正則表達式模式",
+      "category": "規則類別",
+      "description": "說明",
+      "status": "狀態",
+      "default": "預設",
+      "isEnabled": "啟用狀態",
+      "isDefault": "預設規則",
+      "createdAt": "建立時間",
+      "actions": "操作"
+    },
+    "form": {
+      "fields": {
+        "pattern": "正則表達式模式",
+        "category": "規則類別",
+        "description": "說明"
+      },
+      "placeholders": {
+        "pattern": "例如: prompt is too long",
+        "category": "選擇類別",
+        "description": "選填:新增說明..."
+      },
+      "labels": {
+        "pattern": "正則表達式模式 *",
+        "category": "規則類別 *",
+        "description": "說明",
+        "isEnabled": "啟用狀態"
+      }
+    },
+    "actions": {
+      "add": "新增",
+      "edit": "編輯",
+      "delete": "刪除",
+      "refresh": "重新整理",
+      "test": "測試",
+      "messages": {
+        "success": "操作成功",
+        "error": "操作失敗"
+      }
+    },
+    "validation": {
+      "patternRequired": "請輸入正則表達式模式",
+      "categoryRequired": "請選擇規則類別",
+      "patternInvalid": "正則表達式語法錯誤",
+      "redosRisk": "正則表達式存在 ReDoS 風險,請簡化模式",
+      "patternTooComplex": "正則表達式過於複雜"
+    },
+    "categories": {
+      "prompt_limit": "Prompt 長度限制",
+      "content_filter": "內容過濾",
+      "pdf_limit": "PDF 頁數限制",
+      "thinking_error": "Thinking 格式錯誤",
+      "parameter_error": "參數驗證失敗",
+      "invalid_request": "非法請求",
+      "cache_limit": "快取控制限制"
+    },
+    "regexTester": {
+      "title": "正則表達式測試器",
+      "testMessage": "測試訊息",
+      "testMessagePlaceholder": "輸入要測試的錯誤訊息...",
+      "matchResult": "匹配結果",
+      "matched": "匹配成功",
+      "notMatched": "未匹配",
+      "test": "測試"
+    },
+    "defaultRules": {
+      "cannotDelete": "預設規則無法刪除",
+      "cannotDisable": "建議保留預設規則啟用狀態"
+    }
   }
 }

+ 11 - 1
messages/zh-TW/ui.json

@@ -4,7 +4,8 @@
     "actions": "操作",
     "loading": "載入中...",
     "empty": "為空",
-    "error": "錯誤"
+    "error": "錯誤",
+    "retry": "重試"
   },
   "table": {
     "pagination": "分頁",
@@ -43,5 +44,14 @@
   "loading": {
     "title": "載入中",
     "description": "請稍候..."
+  },
+  "tagInput": {
+    "placeholder": "輸入標籤後按回車或逗號新增",
+    "emptyTag": "標籤不能為空",
+    "duplicateTag": "標籤已存在",
+    "maxTags": "已達到最大標籤數量",
+    "tooLong": "標籤長度不能超過 {max} 個字元",
+    "invalidFormat": "標籤只能包含字母、數字、底線和連字符",
+    "removeTag": "移除標籤 {tag}"
   }
 }

+ 123 - 0
messages/zh-TW/usage.json

@@ -337,6 +337,129 @@
     }
   },
 
+  "gemini": {
+    "title": "Gemini CLI 使用指南",
+    "description": "Gemini CLI 是 Google 官方的 AI 編程助手命令行工具,支持通過 cch 代理服務使用。本指南將幫助您在不同操作系統上完成安裝和配置。",
+
+    "installation": {
+      "title": "安裝 gemini",
+      "instruction": "確保您已安裝 Node.js 18 或更高版本,然後全局安裝 Gemini CLI:",
+      "command": "npm install -g @google/gemini-cli",
+      "verification": "驗證安裝:",
+      "verificationCommand": "gemini --version",
+      "adminNote": "以管理員身份運行 PowerShell,"
+    },
+
+    "configuration": {
+      "title": "連接 cch 服務",
+
+      "configFile": {
+        "title": "方法一:配置文件方式(推薦)",
+
+        "step1": {
+          "title": "創建配置目錄",
+          "description": "Gemini CLI 的配置文件位於 ~/.gemini/ 目錄。",
+          "macosLinux": "macOS / Linux:",
+          "windows": "Windows (PowerShell):"
+        },
+
+        "step2": {
+          "title": "創建 .env 配置文件",
+          "description": "在 ~/.gemini/ 目錄下創建 .env 文件:",
+          "macosLinuxInstruction": "macOS / Linux:",
+          "windowsInstruction": "Windows:在 %USERPROFILE%\\.gemini\\ 目錄下創建 .env 文件",
+          "content": "添加以下內容:"
+        },
+
+        "step3": {
+          "title": "創建 settings.json 配置文件",
+          "description": "在 ~/.gemini/ 目錄下創建 settings.json 文件:",
+          "content": "這個配置文件啟用了 IDE 集成,並設置認證方式為 API Key。"
+        },
+
+        "parameterNote": "參數說明",
+        "parameters": [
+          "GOOGLE_GEMINI_BASE_URL: cch API 基礎地址",
+          "GEMINI_API_KEY: 您在 cch 控制台創建的 API 密鑰",
+          "GEMINI_MODEL: 使用的模型(默認為 gemini-2.5-pro)"
+        ],
+
+        "important": "重要提示",
+        "importantPoints": [
+          "將 YOUR_API_KEY_HERE 替換為您的實際 API 密鑰",
+          "密鑰獲取方式:登錄控制台 → API 密鑰管理 → 創建密鑰"
+        ]
+      },
+
+      "envVars": {
+        "title": "方法二:環境變量配置",
+        "description": "如果您只想臨時使用,可以通過環境變量配置:",
+
+        "macosLinux": {
+          "title": "macOS / Linux:",
+          "note": "環境變量只在當前終端會話中有效。如需持久化配置,請使用配置文件方式。"
+        },
+
+        "windows": {
+          "powershell": "Windows (PowerShell):",
+          "cmd": "Windows (CMD):",
+          "note": "環境變量只在當前終端會話中有效。如需持久化配置,請使用配置文件方式。"
+        }
+      }
+    },
+
+    "startup": {
+      "title": "啟動和驗證",
+
+      "startCli": {
+        "title": "啟動 Gemini CLI",
+        "description": "進入您的項目目錄並啟動 Gemini CLI:",
+        "note": "首次啟動時,Gemini CLI 會讀取配置文件中的設置。"
+      },
+
+      "verification": {
+        "title": "驗證配置",
+        "description": "在 Gemini CLI 中嘗試發送一個簡單的請求測試連接:",
+        "testCommand": "你好,請幫我創建一個 Python 的 hello world 程序",
+        "success": "如果 Gemini CLI 正常響應,說明配置成功!"
+      },
+
+      "agentMode": {
+        "title": "使用 Agent Mode",
+        "description": "Gemini CLI 支持 Agent Mode,可以自動規劃和執行複雜任務:",
+        "command": "gemini --agent",
+        "features": "在 Agent Mode 下,Gemini 會:",
+        "featureList": [
+          "自動分析任務需求",
+          "制定執行計劃",
+          "逐步執行並驗證結果",
+          "根據反饋調整策略"
+        ]
+      }
+    },
+
+    "commonIssues": {
+      "title": "常見問題",
+
+      "commandNotFound": "1. 命令未找到",
+      "commandNotFoundWindows": [
+        "確保 npm 全局路徑(通常是 C:\\Users\\你的用戶名\\AppData\\Roaming\\npm)已添加到系統 PATH",
+        "重新打開 PowerShell 窗口"
+      ],
+      "commandNotFoundUnix": "檢查 npm 全局安裝路徑並添加到 PATH(如果不在)",
+
+      "connectionFailed": "2. API 連接失敗",
+      "connectionSteps": [
+        "檢查環境變量或配置文件中的 GEMINI_API_KEY 是否設置正確",
+        "驗證 GOOGLE_GEMINI_BASE_URL 是否正確",
+        "測試網絡連接"
+      ],
+
+      "updateCli": "3. 更新 gemini",
+      "updateCommand": "npm install -g @google/gemini-cli"
+    }
+  },
+
   "droid": {
     "title": "Droid CLI 使用指南",
     "description": "Droid 是 Factory AI 開發的交互式終端 AI 編程助手,支持通過 cch 代理服務使用。使用前必須先註冊並登錄 Droid 官方賬號。",

+ 7 - 0
next.config.ts

@@ -14,6 +14,13 @@ const nextConfig: NextConfig = {
   // bull 和相关依赖只在服务端使用,包含 Node.js 原生模块
   serverExternalPackages: ["bull", "bullmq", "@bull-board/api", "@bull-board/express", "ioredis"],
 
+  // 强制包含 undici 到 standalone 输出
+  // Next.js 依赖追踪无法正确追踪动态导入和类型导入的传递依赖
+  // 参考: https://nextjs.org/docs/app/api-reference/config/next-config-js/output
+  outputFileTracingIncludes: {
+    "/**": ["./node_modules/undici/**/*", "./node_modules/socks-proxy-agent/**/*"],
+  },
+
   // 文件上传大小限制(用于数据库备份导入)
   // Next.js 15 通过 serverActions.bodySizeLimit 统一控制
   experimental: {

+ 6 - 4
package.json

@@ -1,6 +1,6 @@
 {
   "name": "claude-code-hub",
-  "version": "0.2.27",
+  "version": "0.3.0",
   "private": true,
   "scripts": {
     "dev": "next dev --port 13500 --turbo",
@@ -66,11 +66,13 @@
     "react-dom": "19.2.0",
     "react-hook-form": "^7.65.0",
     "recharts": "2.15.4",
+    "safe-regex": "^2.1.1",
     "socks-proxy-agent": "^8.0.5",
     "sonner": "^2.0.7",
     "tailwind-merge": "^3.3.1",
     "timeago.js": "^4.0.2",
     "tw-animate-css": "^1.4.0",
+    "undici": "^7.16.0",
     "zod": "^4.1.12"
   },
   "devDependencies": {
@@ -81,14 +83,14 @@
     "@types/pg": "^8.15.5",
     "@types/react": "^19.2.2",
     "@types/react-dom": "^19.2.2",
+    "bun-types": "^1.3.2",
     "drizzle-kit": "^0.31.5",
     "eslint": "^9.38.0",
     "eslint-config-next": "15.5.6",
     "eslint-config-prettier": "^10.1.8",
     "prettier": "^3.6.2",
     "tailwindcss": "^4.1.16",
-    "typescript": "^5.9.3",
-    "undici": "^7.16.0"
+    "typescript": "^5.9.3"
   },
-  "packageManager": "[email protected]"
+  "packageManager": "[email protected]"
 }

+ 0 - 12580
pnpm-lock.yaml

@@ -1,12580 +0,0 @@
-lockfileVersion: '9.0'
-
-settings:
-  autoInstallPeers: true
-  excludeLinksFromLockfile: false
-
-importers:
-
-  .:
-    dependencies:
-      '@bull-board/api':
-        specifier: ^6.14.0
-        version: 6.14.0(@bull-board/[email protected])
-      '@bull-board/express':
-        specifier: ^6.14.0
-        version: 6.14.0
-      '@hono/swagger-ui':
-        specifier: ^0.5.2
-        version: 0.5.2([email protected])
-      '@hono/zod-openapi':
-        specifier: ^1.1.4
-        version: 1.1.4([email protected])([email protected])
-      '@hookform/resolvers':
-        specifier: ^5.2.2
-        version: 5.2.2([email protected]([email protected]))
-      '@lobehub/icons':
-        specifier: ^2.43.1
-        version: 2.43.1(@babel/[email protected])(@types/[email protected])(@types/[email protected])([email protected]([email protected])([email protected])([email protected]([email protected]))([email protected]))([email protected]([email protected]([email protected]))([email protected]))([email protected])([email protected])([email protected]([email protected]))([email protected])
-      '@radix-ui/react-alert-dialog':
-        specifier: ^1.1.15
-        version: 1.1.15(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
-      '@radix-ui/react-avatar':
-        specifier: ^1.1.10
-        version: 1.1.10(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
-      '@radix-ui/react-checkbox':
-        specifier: ^1.3.3
-        version: 1.3.3(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
-      '@radix-ui/react-collapsible':
-        specifier: ^1.1.12
-        version: 1.1.12(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
-      '@radix-ui/react-dialog':
-        specifier: ^1.1.15
-        version: 1.1.15(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
-      '@radix-ui/react-dropdown-menu':
-        specifier: ^2.1.16
-        version: 2.1.16(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
-      '@radix-ui/react-label':
-        specifier: ^2.1.7
-        version: 2.1.7(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
-      '@radix-ui/react-popover':
-        specifier: ^1.1.15
-        version: 1.1.15(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
-      '@radix-ui/react-progress':
-        specifier: ^1.1.7
-        version: 1.1.7(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
-      '@radix-ui/react-select':
-        specifier: ^2.2.6
-        version: 2.2.6(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
-      '@radix-ui/react-slider':
-        specifier: ^1.3.6
-        version: 1.3.6(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
-      '@radix-ui/react-slot':
-        specifier: ^1.2.3
-        version: 1.2.3(@types/[email protected])([email protected])
-      '@radix-ui/react-switch':
-        specifier: ^1.2.6
-        version: 1.2.6(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
-      '@radix-ui/react-tabs':
-        specifier: ^1.1.13
-        version: 1.1.13(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
-      '@radix-ui/react-tooltip':
-        specifier: ^1.2.8
-        version: 1.2.8(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
-      '@scalar/hono-api-reference':
-        specifier: ^0.9.22
-        version: 0.9.22([email protected])
-      '@tanstack/react-query':
-        specifier: ^5.90.5
-        version: 5.90.5([email protected])
-      antd:
-        specifier: ^5.27.6
-        version: 5.27.6([email protected])([email protected])([email protected]([email protected]))([email protected])
-      bull:
-        specifier: ^4.16.5
-        version: 4.16.5
-      class-variance-authority:
-        specifier: ^0.7.1
-        version: 0.7.1
-      clsx:
-        specifier: ^2.1.1
-        version: 2.1.1
-      cmdk:
-        specifier: ^1.1.1
-        version: 1.1.1(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
-      date-fns:
-        specifier: ^4.1.0
-        version: 4.1.0
-      date-fns-tz:
-        specifier: ^3.2.0
-        version: 3.2.0([email protected])
-      decimal.js-light:
-        specifier: ^2.5.1
-        version: 2.5.1
-      dotenv:
-        specifier: ^17.2.3
-        version: 17.2.3
-      drizzle-orm:
-        specifier: ^0.44.7
-        version: 0.44.7(@types/[email protected])([email protected](@types/[email protected]))([email protected])
-      hono:
-        specifier: ^4.10.2
-        version: 4.10.2
-      html2canvas:
-        specifier: ^1.4.1
-        version: 1.4.1
-      ioredis:
-        specifier: ^5.8.2
-        version: 5.8.2
-      jspdf:
-        specifier: ^3.0.3
-        version: 3.0.3
-      lucide-react:
-        specifier: ^0.547.0
-        version: 0.547.0([email protected])
-      next:
-        specifier: 15.5.6
-        version: 15.5.6(@babel/[email protected])([email protected]([email protected]))([email protected])
-      next-intl:
-        specifier: ^3.22.0
-        version: 3.26.5([email protected](@babel/[email protected])([email protected]([email protected]))([email protected]))([email protected])
-      next-themes:
-        specifier: ^0.4.6
-        version: 0.4.6([email protected]([email protected]))([email protected])
-      pino:
-        specifier: ^10.1.0
-        version: 10.1.0
-      pino-pretty:
-        specifier: ^13.1.2
-        version: 13.1.2
-      postgres:
-        specifier: ^3.4.7
-        version: 3.4.7
-      react:
-        specifier: 19.2.0
-        version: 19.2.0
-      react-dom:
-        specifier: 19.2.0
-        version: 19.2.0([email protected])
-      react-hook-form:
-        specifier: ^7.65.0
-        version: 7.65.0([email protected])
-      recharts:
-        specifier: 2.15.4
-        version: 2.15.4([email protected]([email protected]))([email protected])
-      socks-proxy-agent:
-        specifier: ^8.0.5
-        version: 8.0.5
-      sonner:
-        specifier: ^2.0.7
-        version: 2.0.7([email protected]([email protected]))([email protected])
-      tailwind-merge:
-        specifier: ^3.3.1
-        version: 3.3.1
-      timeago.js:
-        specifier: ^4.0.2
-        version: 4.0.2
-      tw-animate-css:
-        specifier: ^1.4.0
-        version: 1.4.0
-      zod:
-        specifier: ^4.1.12
-        version: 4.1.12
-    devDependencies:
-      '@eslint/eslintrc':
-        specifier: ^3.3.1
-        version: 3.3.1
-      '@tailwindcss/postcss':
-        specifier: ^4.1.16
-        version: 4.1.16
-      '@types/ioredis':
-        specifier: ^5.0.0
-        version: 5.0.0
-      '@types/node':
-        specifier: ^20.19.13
-        version: 20.19.17
-      '@types/pg':
-        specifier: ^8.15.5
-        version: 8.15.5
-      '@types/react':
-        specifier: ^19.2.2
-        version: 19.2.2
-      '@types/react-dom':
-        specifier: ^19.2.2
-        version: 19.2.2(@types/[email protected])
-      drizzle-kit:
-        specifier: ^0.31.5
-        version: 0.31.5
-      eslint:
-        specifier: ^9.38.0
-        version: 9.38.0([email protected])
-      eslint-config-next:
-        specifier: 15.5.6
-        version: 15.5.6([email protected]([email protected]))([email protected])
-      eslint-config-prettier:
-        specifier: ^10.1.8
-        version: 10.1.8([email protected]([email protected]))
-      prettier:
-        specifier: ^3.6.2
-        version: 3.6.2
-      tailwindcss:
-        specifier: ^4.1.16
-        version: 4.1.16
-      typescript:
-        specifier: ^5.9.3
-        version: 5.9.3
-      undici:
-        specifier: ^7.16.0
-        version: 7.16.0
-
-packages:
-
-  '@alloc/[email protected]':
-    resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==}
-    engines: {node: '>=10'}
-
-  '@ant-design/[email protected]':
-    resolution: {integrity: sha512-lCHDcEzieu4GA3n8ELeZ5VQ8pKQAWcGGLRTQ50aQM2iqPpq2evTxER84jfdPvsPAtEcZ7m44NI45edFMo8oOYQ==}
-
-  '@ant-design/[email protected]':
-    resolution: {integrity: sha512-nOoQMLW1l+xR1Co8NFVYiP8pZp3VjIIzqV6D6ShYF2ljtdwWJn5WSsH+7kvCktXL/yhEtWURKOfH5Xz/gzlwsg==}
-    peerDependencies:
-      react: '>=16.9.0'
-      react-dom: '>=16.9.0'
-
-  '@ant-design/[email protected]':
-    resolution: {integrity: sha512-K4cYrJBsgvL+IoozUXYjbT6LHHNt+19a9zkvpBPxLjFHas1UpPM2A5MlhROb0BT8N8WoavM5VsP9MeSeNK/3mg==}
-    peerDependencies:
-      react: '>=16.0.0'
-      react-dom: '>=16.0.0'
-
-  '@ant-design/[email protected]':
-    resolution: {integrity: sha512-y2217gk4NqL35giHl72o6Zzqji9O7vHh9YmhUVkPtAOpoTCH4uWxo/pr4VE8t0+ChEPs0qo4eJRC5Q1eXWo3vA==}
-    engines: {node: '>=8.x'}
-
-  '@ant-design/[email protected]':
-    resolution: {integrity: sha512-vHbT+zJEVzllwP+CM+ul7reTEfBR0vgxFe7+lREAsAA7YGsYpboiq2sQNeQeRvh09GfQgs/GyFEvZpJ9cLXpXA==}
-
-  '@ant-design/[email protected]':
-    resolution: {integrity: sha512-0/xS39c91WjPAZOWsvi1//zjx6kAp4kxWwctR6kuU6p133w8RU0D2dSCvZC19uQyharg/sAvYxGYWl01BbZZfg==}
-    engines: {node: '>=8'}
-    peerDependencies:
-      react: '>=16.0.0'
-      react-dom: '>=16.0.0'
-
-  '@ant-design/[email protected]':
-    resolution: {integrity: sha512-EzlvzE6xQUBrZuuhSAFTdsr4P2bBBHGZwKFemEfq8gIGyIQCxalYfZW/T2ORbtQx5rU69o+WycP3exY/7T1hGA==}
-    peerDependencies:
-      react: '>=16.9.0'
-
-  '@antfu/[email protected]':
-    resolution: {integrity: sha512-MGQsmw10ZyI+EJo45CdSER4zEb+p31LpDAFp2Z3gkSd1yqVZGi0Ebx++YTEMonJy4oChEMLsxZ64j8FH6sSqtQ==}
-
-  '@antfu/[email protected]':
-    resolution: {integrity: sha512-9hFT4RauhcUzqOE4f1+frMKLZrgNog5b06I7VmZQV1BkvwvqrbC8EBZf3L1eEL2AKb6rNKjER0sEvJiSP1FXEA==}
-
-  '@asteasolutions/[email protected]':
-    resolution: {integrity: sha512-tQFxVs05J/6QXXqIzj6rTRk3nj1HFs4pe+uThwE95jL5II2JfpVXkK+CqkO7aT0Do5AYqO6LDrKpleLUFXgY+g==}
-    peerDependencies:
-      zod: ^4.0.0
-
-  '@babel/[email protected]':
-    resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==}
-    engines: {node: '>=6.9.0'}
-
-  '@babel/[email protected]':
-    resolution: {integrity: sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA==}
-    engines: {node: '>=6.9.0'}
-
-  '@babel/[email protected]':
-    resolution: {integrity: sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==}
-    engines: {node: '>=6.9.0'}
-
-  '@babel/[email protected]':
-    resolution: {integrity: sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==}
-    engines: {node: '>=6.9.0'}
-
-  '@babel/[email protected]':
-    resolution: {integrity: sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==}
-    engines: {node: '>=6.9.0'}
-
-  '@babel/[email protected]':
-    resolution: {integrity: sha512-uJnGFcPsWQK8fvjgGP5LZUZZsYGIoPeRjSF5PGwrelYgq7Q15/Ft9NGFp1zglwgIv//W0uG4BevRuSJRyylZPg==}
-    peerDependencies:
-      '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0
-
-  '@babel/[email protected]':
-    resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==}
-    engines: {node: '>=6.9.0'}
-
-  '@babel/[email protected]':
-    resolution: {integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==}
-    engines: {node: '>=6.9.0'}
-
-  '@babel/[email protected]':
-    resolution: {integrity: sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0
-
-  '@babel/[email protected]':
-    resolution: {integrity: sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==}
-    engines: {node: '>=6.9.0'}
-
-  '@babel/[email protected]':
-    resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==}
-    engines: {node: '>=6.9.0'}
-
-  '@babel/[email protected]':
-    resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==}
-    engines: {node: '>=6.9.0'}
-
-  '@babel/[email protected]':
-    resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==}
-    engines: {node: '>=6.9.0'}
-
-  '@babel/[email protected]':
-    resolution: {integrity: sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==}
-    engines: {node: '>=6.9.0'}
-
-  '@babel/[email protected]':
-    resolution: {integrity: sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==}
-    engines: {node: '>=6.0.0'}
-    hasBin: true
-
-  '@babel/[email protected]':
-    resolution: {integrity: sha512-20NUVgOrinudkIBzQ2bNxP08YpKprUkRTiRSd2/Z5GOdPImJGkoN4Z7IQe1T5AdyKI1i5L6RBmluqdSzvaq9/w==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/[email protected]':
-    resolution: {integrity: sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==}
-    engines: {node: '>=6.9.0'}
-
-  '@babel/[email protected]':
-    resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==}
-    engines: {node: '>=6.9.0'}
-
-  '@babel/[email protected]':
-    resolution: {integrity: sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==}
-    engines: {node: '>=6.9.0'}
-
-  '@babel/[email protected]':
-    resolution: {integrity: sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==}
-    engines: {node: '>=6.9.0'}
-
-  '@braintree/[email protected]':
-    resolution: {integrity: sha512-i1L7noDNxtFyL5DmZafWy1wRVhGehQmzZaz1HiN5e7iylJMSZR7ekOV7NsIqa5qBldlLrsKv4HbgFUVlQrz8Mw==}
-
-  '@bull-board/[email protected]':
-    resolution: {integrity: sha512-oMDwXwoPn0RsdZ3Y68/bOErZ/qGZE5H97vgE/Pc8Uul/OHajlvajKW4NV+ZGTix82liUfH9CkjYx7PpwvBWhxg==}
-    peerDependencies:
-      '@bull-board/ui': 6.14.0
-
-  '@bull-board/[email protected]':
-    resolution: {integrity: sha512-3H1ame2G1+eVnqqSsw6KfzTGYAWSpVsIx6EPwg9vPSP2eKfNAm12Cm4zvL6ZkwAvTCkAByt5PPDRWbbwWB6HHQ==}
-
-  '@bull-board/[email protected]':
-    resolution: {integrity: sha512-5yqfS9CwWR8DBxpReIbqv/VSPFM/zT4KZ75keyApMiejasRC2joaHqEzYWlMCjkMycbNNCvlQNlTbl+C3dE/dg==}
-
-  '@chevrotain/[email protected]':
-    resolution: {integrity: sha512-BvIKpRLeS/8UbfxXxgC33xOumsacaeCKAjAeLyOn7Pcp95HiRbrpl14S+9vaZLolnbssPIUuiUd8IvgkRyt6NQ==}
-
-  '@chevrotain/[email protected]':
-    resolution: {integrity: sha512-+qNfcoNk70PyS/uxmj3li5NiECO+2YKZZQMbmjTqRI3Qchu8Hig/Q9vgkHpI3alNjr7M+a2St5pw5w5F6NL5/Q==}
-
-  '@chevrotain/[email protected]':
-    resolution: {integrity: sha512-1fMHaBZxLFvWI067AVbGJav1eRY7N8DDvYCTwGBiE/ytKBgP8azTdgyrKyWZ9Mfh09eHWb5PgTSO8wi7U824RA==}
-
-  '@chevrotain/[email protected]':
-    resolution: {integrity: sha512-gsiM3G8b58kZC2HaWR50gu6Y1440cHiJ+i3JUvcp/35JchYejb2+5MVeJK0iKThYpAa/P2PYFV4hoi44HD+aHQ==}
-
-  '@chevrotain/[email protected]':
-    resolution: {integrity: sha512-YslZMgtJUyuMbZ+aKvfF3x1f5liK4mWNxghFRv7jqRR9C3R3fAOGTTKvxXDa2Y1s9zSbcpuO0cAxDYsc9SrXoQ==}
-
-  '@dnd-kit/[email protected]':
-    resolution: {integrity: sha512-2P+YgaXF+gRsIihwwY1gCsQSYnu9Zyj2py8kY5fFvUM1qm2WA2u639R6YNVfU4GWr+ZM5mqEsfHZZLoRONbemw==}
-    peerDependencies:
-      react: '>=16.8.0'
-
-  '@dnd-kit/[email protected]':
-    resolution: {integrity: sha512-xkGBRQQab4RLwgXxoqETICr6S5JlogafbhNsidmrkVv2YRs5MLwpjoF2qpiGjQt8S9AoxtIV603s0GIUpY5eYQ==}
-    peerDependencies:
-      react: '>=16.8.0'
-      react-dom: '>=16.8.0'
-
-  '@dnd-kit/[email protected]':
-    resolution: {integrity: sha512-ybiLc66qRGuZoC20wdSSG6pDXFikui/dCNGthxv4Ndy8ylErY0N3KVxY2bgo7AWwIbxDmXDg3ylAFmnrjcbVvw==}
-    peerDependencies:
-      '@dnd-kit/core': ^6.3.0
-      react: '>=16.8.0'
-
-  '@dnd-kit/[email protected]':
-    resolution: {integrity: sha512-+xqhmIIzvAYMGfBYYnbKuNicfSsk4RksY2XdmJhT+HAC01nix6fHCztU68jooFiMUB01Ky3F0FyOvhG/BZrWkg==}
-    peerDependencies:
-      '@dnd-kit/core': ^6.3.0
-      react: '>=16.8.0'
-
-  '@dnd-kit/[email protected]':
-    resolution: {integrity: sha512-+MKAJEOfaBe5SmV6t34p80MMKhjvUz0vRrvVJbPT0WElzaOJ/1xs+D+KDv+tD/NE5ujfrChEcshd4fLn0wpiqg==}
-    peerDependencies:
-      react: '>=16.8.0'
-
-  '@drizzle-team/[email protected]':
-    resolution: {integrity: sha512-z33Il7l5dKjUgGULTqBsQBQwckHh5AbIuxhdsIxDDiZAzBOrZO6q9ogcWC65kU382AfynTfgNumVcNIjuIua6w==}
-
-  '@emnapi/[email protected]':
-    resolution: {integrity: sha512-XsLw1dEOpkSX/WucdqUhPWP7hDxSvZiY+fsUC14h+FtQ2Ifni4znbBt8punRX+Uj2JG/uDb8nEHVKvrVlvdZ5Q==}
-
-  '@emnapi/[email protected]':
-    resolution: {integrity: sha512-++LApOtY0pEEz1zrd9vy1/zXVaVJJ/EbAF3u0fXIzPJEDtnITsBGbbK0EkM72amhl/R5b+5xx0Y/QhcVOpuulg==}
-
-  '@emnapi/[email protected]':
-    resolution: {integrity: sha512-PJR+bOmMOPH8AtcTGAyYNiuJ3/Fcoj2XN/gBEWzDIKh254XO+mM9XoXHk5GNEhodxeMznbg7BlRojVbKN+gC6g==}
-
-  '@emoji-mart/[email protected]':
-    resolution: {integrity: sha512-no2pQMWiBy6gpBEiqGeU77/bFejDqUTRY7KX+0+iur13op3bqUsXdnwoZs6Xb1zbv0gAj5VvS1PWoUUckSr5Dw==}
-
-  '@emoji-mart/[email protected]':
-    resolution: {integrity: sha512-NMlFNeWgv1//uPsvLxvGQoIerPuVdXwK/EUek8OOkJ6wVOWPUizRBJU0hDqWZCOROVpfBgCemaC3m6jDOXi03g==}
-    peerDependencies:
-      emoji-mart: ^5.2
-      react: ^16.8 || ^17 || ^18
-
-  '@emotion/[email protected]':
-    resolution: {integrity: sha512-pxHCpT2ex+0q+HH91/zsdHkw/lXd468DIN2zvfvLtPKLLMo6gQj7oLObq8PhkrxOZb/gGCq03S3Z7PDhS8pduQ==}
-
-  '@emotion/[email protected]':
-    resolution: {integrity: sha512-L/B1lc/TViYk4DcpGxtAVbx0ZyiKM5ktoIyafGkH6zg/tj+mA+NE//aPYKG0k8kCHSHVJrpLpcAlOBEXQ3SavA==}
-
-  '@emotion/[email protected]':
-    resolution: {integrity: sha512-wQdD0Xhkn3Qy2VNcIzbLP9MR8TafI0MJb7BEAXKp+w4+XqErksWR4OXomuDzPsN4InLdGhVe6EYcn2ZIUCpB8w==}
-
-  '@emotion/[email protected]':
-    resolution: {integrity: sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==}
-
-  '@emotion/[email protected]':
-    resolution: {integrity: sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==}
-
-  '@emotion/[email protected]':
-    resolution: {integrity: sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==}
-
-  '@emotion/[email protected]':
-    resolution: {integrity: sha512-O000MLDBDdk/EohJPFUqvnp4qnHeYkVP5B0xEG0D/L7cOKP9kefu2DXn8dj74cQfsEzUqh+sr1RzFqiL1o+PpA==}
-    peerDependencies:
-      '@types/react': '*'
-      react: '>=16.8.0'
-    peerDependenciesMeta:
-      '@types/react':
-        optional: true
-
-  '@emotion/[email protected]':
-    resolution: {integrity: sha512-EISGqt7sSNWHGI76hC7x1CksiXPahbxEOrC5RjmFRJTqLyEK9/9hZvBbiYn70dw4wuwMKiEMCUlR6ZXTSWQqxA==}
-
-  '@emotion/[email protected]':
-    resolution: {integrity: sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg==}
-
-  '@emotion/[email protected]':
-    resolution: {integrity: sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg==}
-
-  '@emotion/[email protected]':
-    resolution: {integrity: sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==}
-
-  '@emotion/[email protected]':
-    resolution: {integrity: sha512-yJMtVdH59sxi/aVJBpk9FQq+OR8ll5GT8oWd57UpeaKEVGab41JWaCFA7FRLoMLloOZF/c/wsPoe+bfGmRKgDg==}
-    peerDependencies:
-      react: '>=16.8.0'
-
-  '@emotion/[email protected]':
-    resolution: {integrity: sha512-3vLclRofFziIa3J2wDh9jjbkUz9qk5Vi3IZ/FSTKViB0k+ef0fPV7dYrUIugbgupYDx7v9ud/SjrtEP8Y4xLoA==}
-
-  '@emotion/[email protected]':
-    resolution: {integrity: sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==}
-
-  '@esbuild-kit/[email protected]':
-    resolution: {integrity: sha512-sPRAnw9CdSsRmEtnsl2WXWdyquogVpB3yZ3dgwJfe8zrOzTsV7cJvmwrKVa+0ma5BoiGJ+BoqkMvawbayKUsqQ==}
-    deprecated: 'Merged into tsx: https://tsx.is'
-
-  '@esbuild-kit/[email protected]':
-    resolution: {integrity: sha512-FxEMIkJKnodyA1OaCUoEvbYRkoZlLZ4d/eXFu9Fh8CbBBgP5EmZxrfTRyN0qpXZ4vOvqnE5YdRdcrmUUXuU+dA==}
-    deprecated: 'Merged into tsx: https://tsx.is'
-
-  '@esbuild/[email protected]':
-    resolution: {integrity: sha512-0NFWnA+7l41irNuaSVlLfgNT12caWJVLzp5eAVhZ0z1qpxbockccEt3s+149rE64VUI3Ml2zt8Nv5JVc4QXTsw==}
-    engines: {node: '>=18'}
-    cpu: [ppc64]
-    os: [aix]
-
-  '@esbuild/[email protected]':
-    resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==}
-    engines: {node: '>=12'}
-    cpu: [arm64]
-    os: [android]
-
-  '@esbuild/[email protected]':
-    resolution: {integrity: sha512-LSQa7eDahypv/VO6WKohZGPSJDq5OVOo3UoFR1E4t4Gj1W7zEQMUhI+lo81H+DtB+kP+tDgBp+M4oNCwp6kffg==}
-    engines: {node: '>=18'}
-    cpu: [arm64]
-    os: [android]
-
-  '@esbuild/[email protected]':
-    resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==}
-    engines: {node: '>=12'}
-    cpu: [arm]
-    os: [android]
-
-  '@esbuild/[email protected]':
-    resolution: {integrity: sha512-dQAxF1dW1C3zpeCDc5KqIYuZ1tgAdRXNoZP7vkBIRtKZPYe2xVr/d3SkirklCHudW1B45tGiUlz2pUWDfbDD4w==}
-    engines: {node: '>=18'}
-    cpu: [arm]
-    os: [android]
-
-  '@esbuild/[email protected]':
-    resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==}
-    engines: {node: '>=12'}
-    cpu: [x64]
-    os: [android]
-
-  '@esbuild/[email protected]':
-    resolution: {integrity: sha512-MiC9CWdPrfhibcXwr39p9ha1x0lZJ9KaVfvzA0Wxwz9ETX4v5CHfF09bx935nHlhi+MxhA63dKRRQLiVgSUtEg==}
-    engines: {node: '>=18'}
-    cpu: [x64]
-    os: [android]
-
-  '@esbuild/[email protected]':
-    resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==}
-    engines: {node: '>=12'}
-    cpu: [arm64]
-    os: [darwin]
-
-  '@esbuild/[email protected]':
-    resolution: {integrity: sha512-JC74bdXcQEpW9KkV326WpZZjLguSZ3DfS8wrrvPMHgQOIEIG/sPXEN/V8IssoJhbefLRcRqw6RQH2NnpdprtMA==}
-    engines: {node: '>=18'}
-    cpu: [arm64]
-    os: [darwin]
-
-  '@esbuild/[email protected]':
-    resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==}
-    engines: {node: '>=12'}
-    cpu: [x64]
-    os: [darwin]
-
-  '@esbuild/[email protected]':
-    resolution: {integrity: sha512-tguWg1olF6DGqzws97pKZ8G2L7Ig1vjDmGTwcTuYHbuU6TTjJe5FXbgs5C1BBzHbJ2bo1m3WkQDbWO2PvamRcg==}
-    engines: {node: '>=18'}
-    cpu: [x64]
-    os: [darwin]
-
-  '@esbuild/[email protected]':
-    resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==}
-    engines: {node: '>=12'}
-    cpu: [arm64]
-    os: [freebsd]
-
-  '@esbuild/[email protected]':
-    resolution: {integrity: sha512-3ZioSQSg1HT2N05YxeJWYR+Libe3bREVSdWhEEgExWaDtyFbbXWb49QgPvFH8u03vUPX10JhJPcz7s9t9+boWg==}
-    engines: {node: '>=18'}
-    cpu: [arm64]
-    os: [freebsd]
-
-  '@esbuild/[email protected]':
-    resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==}
-    engines: {node: '>=12'}
-    cpu: [x64]
-    os: [freebsd]
-
-  '@esbuild/[email protected]':
-    resolution: {integrity: sha512-LLgJfHJk014Aa4anGDbh8bmI5Lk+QidDmGzuC2D+vP7mv/GeSN+H39zOf7pN5N8p059FcOfs2bVlrRr4SK9WxA==}
-    engines: {node: '>=18'}
-    cpu: [x64]
-    os: [freebsd]
-
-  '@esbuild/[email protected]':
-    resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==}
-    engines: {node: '>=12'}
-    cpu: [arm64]
-    os: [linux]
-
-  '@esbuild/[email protected]':
-    resolution: {integrity: sha512-5luJWN6YKBsawd5f9i4+c+geYiVEw20FVW5x0v1kEMWNq8UctFjDiMATBxLvmmHA4bf7F6hTRaJgtghFr9iziQ==}
-    engines: {node: '>=18'}
-    cpu: [arm64]
-    os: [linux]
-
-  '@esbuild/[email protected]':
-    resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==}
-    engines: {node: '>=12'}
-    cpu: [arm]
-    os: [linux]
-
-  '@esbuild/[email protected]':
-    resolution: {integrity: sha512-oR31GtBTFYCqEBALI9r6WxoU/ZofZl962pouZRTEYECvNF/dtXKku8YXcJkhgK/beU+zedXfIzHijSRapJY3vg==}
-    engines: {node: '>=18'}
-    cpu: [arm]
-    os: [linux]
-
-  '@esbuild/[email protected]':
-    resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==}
-    engines: {node: '>=12'}
-    cpu: [ia32]
-    os: [linux]
-
-  '@esbuild/[email protected]':
-    resolution: {integrity: sha512-NrSCx2Kim3EnnWgS4Txn0QGt0Xipoumb6z6sUtl5bOEZIVKhzfyp/Lyw4C1DIYvzeW/5mWYPBFJU3a/8Yr75DQ==}
-    engines: {node: '>=18'}
-    cpu: [ia32]
-    os: [linux]
-
-  '@esbuild/[email protected]':
-    resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==}
-    engines: {node: '>=12'}
-    cpu: [loong64]
-    os: [linux]
-
-  '@esbuild/[email protected]':
-    resolution: {integrity: sha512-xoSphrd4AZda8+rUDDfD9J6FUMjrkTz8itpTITM4/xgerAZZcFW7Dv+sun7333IfKxGG8gAq+3NbfEMJfiY+Eg==}
-    engines: {node: '>=18'}
-    cpu: [loong64]
-    os: [linux]
-
-  '@esbuild/[email protected]':
-    resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==}
-    engines: {node: '>=12'}
-    cpu: [mips64el]
-    os: [linux]
-
-  '@esbuild/[email protected]':
-    resolution: {integrity: sha512-ab6eiuCwoMmYDyTnyptoKkVS3k8fy/1Uvq7Dj5czXI6DF2GqD2ToInBI0SHOp5/X1BdZ26RKc5+qjQNGRBelRA==}
-    engines: {node: '>=18'}
-    cpu: [mips64el]
-    os: [linux]
-
-  '@esbuild/[email protected]':
-    resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==}
-    engines: {node: '>=12'}
-    cpu: [ppc64]
-    os: [linux]
-
-  '@esbuild/[email protected]':
-    resolution: {integrity: sha512-NLinzzOgZQsGpsTkEbdJTCanwA5/wozN9dSgEl12haXJBzMTpssebuXR42bthOF3z7zXFWH1AmvWunUCkBE4EA==}
-    engines: {node: '>=18'}
-    cpu: [ppc64]
-    os: [linux]
-
-  '@esbuild/[email protected]':
-    resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==}
-    engines: {node: '>=12'}
-    cpu: [riscv64]
-    os: [linux]
-
-  '@esbuild/[email protected]':
-    resolution: {integrity: sha512-FE557XdZDrtX8NMIeA8LBJX3dC2M8VGXwfrQWU7LB5SLOajfJIxmSdyL/gU1m64Zs9CBKvm4UAuBp5aJ8OgnrA==}
-    engines: {node: '>=18'}
-    cpu: [riscv64]
-    os: [linux]
-
-  '@esbuild/[email protected]':
-    resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==}
-    engines: {node: '>=12'}
-    cpu: [s390x]
-    os: [linux]
-
-  '@esbuild/[email protected]':
-    resolution: {integrity: sha512-3BBSbgzuB9ajLoVZk0mGu+EHlBwkusRmeNYdqmznmMc9zGASFjSsxgkNsqmXugpPk00gJ0JNKh/97nxmjctdew==}
-    engines: {node: '>=18'}
-    cpu: [s390x]
-    os: [linux]
-
-  '@esbuild/[email protected]':
-    resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==}
-    engines: {node: '>=12'}
-    cpu: [x64]
-    os: [linux]
-
-  '@esbuild/[email protected]':
-    resolution: {integrity: sha512-QSX81KhFoZGwenVyPoberggdW1nrQZSvfVDAIUXr3WqLRZGZqWk/P4T8p2SP+de2Sr5HPcvjhcJzEiulKgnxtA==}
-    engines: {node: '>=18'}
-    cpu: [x64]
-    os: [linux]
-
-  '@esbuild/[email protected]':
-    resolution: {integrity: sha512-AKQM3gfYfSW8XRk8DdMCzaLUFB15dTrZfnX8WXQoOUpUBQ+NaAFCP1kPS/ykbbGYz7rxn0WS48/81l9hFl3u4A==}
-    engines: {node: '>=18'}
-    cpu: [arm64]
-    os: [netbsd]
-
-  '@esbuild/[email protected]':
-    resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==}
-    engines: {node: '>=12'}
-    cpu: [x64]
-    os: [netbsd]
-
-  '@esbuild/[email protected]':
-    resolution: {integrity: sha512-7RTytDPGU6fek/hWuN9qQpeGPBZFfB4zZgcz2VK2Z5VpdUxEI8JKYsg3JfO0n/Z1E/6l05n0unDCNc4HnhQGig==}
-    engines: {node: '>=18'}
-    cpu: [x64]
-    os: [netbsd]
-
-  '@esbuild/[email protected]':
-    resolution: {integrity: sha512-5Se0VM9Wtq797YFn+dLimf2Zx6McttsH2olUBsDml+lm0GOCRVebRWUvDtkY4BWYv/3NgzS8b/UM3jQNh5hYyw==}
-    engines: {node: '>=18'}
-    cpu: [arm64]
-    os: [openbsd]
-
-  '@esbuild/[email protected]':
-    resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==}
-    engines: {node: '>=12'}
-    cpu: [x64]
-    os: [openbsd]
-
-  '@esbuild/[email protected]':
-    resolution: {integrity: sha512-XkA4frq1TLj4bEMB+2HnI0+4RnjbuGZfet2gs/LNs5Hc7D89ZQBHQ0gL2ND6Lzu1+QVkjp3x1gIcPKzRNP8bXw==}
-    engines: {node: '>=18'}
-    cpu: [x64]
-    os: [openbsd]
-
-  '@esbuild/[email protected]':
-    resolution: {integrity: sha512-AVTSBhTX8Y/Fz6OmIVBip9tJzZEUcY8WLh7I59+upa5/GPhh2/aM6bvOMQySspnCCHvFi79kMtdJS1w0DXAeag==}
-    engines: {node: '>=18'}
-    cpu: [arm64]
-    os: [openharmony]
-
-  '@esbuild/[email protected]':
-    resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==}
-    engines: {node: '>=12'}
-    cpu: [x64]
-    os: [sunos]
-
-  '@esbuild/[email protected]':
-    resolution: {integrity: sha512-fswk3XT0Uf2pGJmOpDB7yknqhVkJQkAQOcW/ccVOtfx05LkbWOaRAtn5SaqXypeKQra1QaEa841PgrSL9ubSPQ==}
-    engines: {node: '>=18'}
-    cpu: [x64]
-    os: [sunos]
-
-  '@esbuild/[email protected]':
-    resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==}
-    engines: {node: '>=12'}
-    cpu: [arm64]
-    os: [win32]
-
-  '@esbuild/[email protected]':
-    resolution: {integrity: sha512-ah+9b59KDTSfpaCg6VdJoOQvKjI33nTaQr4UluQwW7aEwZQsbMCfTmfEO4VyewOxx4RaDT/xCy9ra2GPWmO7Kw==}
-    engines: {node: '>=18'}
-    cpu: [arm64]
-    os: [win32]
-
-  '@esbuild/[email protected]':
-    resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==}
-    engines: {node: '>=12'}
-    cpu: [ia32]
-    os: [win32]
-
-  '@esbuild/[email protected]':
-    resolution: {integrity: sha512-QHPDbKkrGO8/cz9LKVnJU22HOi4pxZnZhhA2HYHez5Pz4JeffhDjf85E57Oyco163GnzNCVkZK0b/n4Y0UHcSw==}
-    engines: {node: '>=18'}
-    cpu: [ia32]
-    os: [win32]
-
-  '@esbuild/[email protected]':
-    resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==}
-    engines: {node: '>=12'}
-    cpu: [x64]
-    os: [win32]
-
-  '@esbuild/[email protected]':
-    resolution: {integrity: sha512-9KpxSVFCu0iK1owoez6aC/s/EdUQLDN3adTxGCqxMVhrPDj6bt5dbrHDXUuq+Bs2vATFBBrQS5vdQ/Ed2P+nbw==}
-    engines: {node: '>=18'}
-    cpu: [x64]
-    os: [win32]
-
-  '@eslint-community/[email protected]':
-    resolution: {integrity: sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==}
-    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
-    peerDependencies:
-      eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
-
-  '@eslint-community/[email protected]':
-    resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==}
-    engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
-
-  '@eslint/[email protected]':
-    resolution: {integrity: sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==}
-    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-
-  '@eslint/[email protected]':
-    resolution: {integrity: sha512-csZAzkNhsgwb0I/UAV6/RGFTbiakPCf0ZrGmrIxQpYvGZ00PhTkSnyKNolphgIvmnJeGw6rcGVEXfTzUnFuEvw==}
-    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-
-  '@eslint/[email protected]':
-    resolution: {integrity: sha512-nmC8/totwobIiFcGkDza3GIKfAw1+hLiYVrh3I1nIomQ8PEr5cxg34jnkmGawul/ep52wGRAcyeDCNtWKSOj4Q==}
-    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-
-  '@eslint/[email protected]':
-    resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==}
-    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-
-  '@eslint/[email protected]':
-    resolution: {integrity: sha512-UZ1VpFvXf9J06YG9xQBdnzU+kthors6KjhMAl6f4gH4usHyh31rUf2DLGInT8RFYIReYXNSydgPY0V2LuWgl7A==}
-    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-
-  '@eslint/[email protected]':
-    resolution: {integrity: sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==}
-    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-
-  '@eslint/[email protected]':
-    resolution: {integrity: sha512-sB5uyeq+dwCWyPi31B2gQlVlo+j5brPlWx4yZBrEaRo/nhdDE8Xke1gsGgtiBdaBTxuTkceLVuVt/pclrasb0A==}
-    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-
-  '@floating-ui/[email protected]':
-    resolution: {integrity: sha512-buc8BXHmG9l82+OQXOFU3Kr2XQx9ys01U/Q9HMIrZ300iLc8HLMgh7dcCqgYzAzf4BkoQvDcXf5Y+CuEZ5JBYg==}
-
-  '@floating-ui/[email protected]':
-    resolution: {integrity: sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==}
-
-  '@floating-ui/[email protected]':
-    resolution: {integrity: sha512-419BMceRLq0RrmTSDxn8hf9R3VCJv2K9PUfugh5JyEFmdjzDo+e8U5EdR8nzKq8Yj1htzLm3b6eQEEam3/rrtg==}
-
-  '@floating-ui/[email protected]':
-    resolution: {integrity: sha512-OOchDgh4F2CchOX94cRVqhvy7b3AFb+/rQXyswmzmGakRfkMgoWVjfnLWkRirfLEfuD4ysVW16eXzwt3jHIzKA==}
-
-  '@floating-ui/[email protected]':
-    resolution: {integrity: sha512-1T0sJcpHgX/u4I1OzIEhlcrvkUN8ln39nz7fMoE/2HDHrPiMFoOGR7++GYyfUmIQHkkrTinaeQsO3XWubjSvGg==}
-    peerDependencies:
-      react: '>=16.8.0'
-      react-dom: '>=16.8.0'
-
-  '@floating-ui/[email protected]':
-    resolution: {integrity: sha512-4JX6rEatQEvlmgU80wZyq9RT96HZJa88q8hp0pBd+LrczeDI4o6uA2M+uvxngVHo4Ihr8uibXxH6+70zhAFrVw==}
-    peerDependencies:
-      react: '>=16.8.0'
-      react-dom: '>=16.8.0'
-
-  '@floating-ui/[email protected]':
-    resolution: {integrity: sha512-9O8N4SeG2z++TSM8QA/KTeKFBVCNEz/AGS7gWPJf6KFRzmRWixFRnCnkPHRDwSVZW6QPDO6uT0P2SpWNKCc9/g==}
-    peerDependencies:
-      react: '>=17.0.0'
-      react-dom: '>=17.0.0'
-
-  '@floating-ui/[email protected]':
-    resolution: {integrity: sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==}
-
-  '@formatjs/[email protected]':
-    resolution: {integrity: sha512-HJnTFeRM2kVFVr5gr5kH1XP6K0JcJtE7Lzvtr3FS/so5f1kpsqqqxy5JF+FRaO6H2qmcMfAUIox7AJteieRtVw==}
-
-  '@formatjs/[email protected]':
-    resolution: {integrity: sha512-Yabmi9nSvyOMrlSeGGWDiH7rf3a7sIwplbvo/dlz9WCIjzIQAfy1RMf4S0X3yG724n5Ghu2GmEl5NJIV6O9sZQ==}
-
-  '@formatjs/[email protected]':
-    resolution: {integrity: sha512-7kR78cRrPNB4fjGFZg3Rmj5aah8rQj9KPzuLsmcSn4ipLXQvC04keycTI1F7kJYDwIXtT2+7IDEto842CfZBtw==}
-
-  '@formatjs/[email protected]':
-    resolution: {integrity: sha512-H13E9Xl+PxBd8D5/6TVUluSpxGNvFSlN/b3coUp0e0JpuWXXnQDiavIpY3NnvSp4xhEMoXyyBvVfdFX8jglOHQ==}
-
-  '@formatjs/[email protected]':
-    resolution: {integrity: sha512-af3qATX+m4Rnd9+wHcjJ4w2ijq+rAVP3CCinJQvFv1kgSu1W6jypUmvleJxcewdxmutM8dmIRZFxO/IQBZmP2Q==}
-
-  '@formatjs/[email protected]':
-    resolution: {integrity: sha512-XOMO2Hupl0wdd172Y06h6kLpBz6Dv+J4okPLl4LPtzbr8f66WbIoy4ev98EBuZ6ZK4h5ydTN6XneT4QVpD7cdA==}
-
-  '@giscus/[email protected]':
-    resolution: {integrity: sha512-0TCO2TvL43+oOdyVVGHDItwxD1UMKP2ZYpT6gXmhFOqfAJtZxTzJ9hkn34iAF/b6YzyJ4Um89QIt9z/ajmAEeg==}
-    peerDependencies:
-      react: ^16 || ^17 || ^18 || ^19
-      react-dom: ^16 || ^17 || ^18 || ^19
-
-  '@hono/[email protected]':
-    resolution: {integrity: sha512-7wxLKdb8h7JTdZ+K8DJNE3KXQMIpJejkBTQjrYlUWF28Z1PGOKw6kUykARe5NTfueIN37jbyG/sBYsbzXzG53A==}
-    peerDependencies:
-      hono: '*'
-
-  '@hono/[email protected]':
-    resolution: {integrity: sha512-4BbOtd6oKg20yo6HLluVbEycBLLIfdKX5o/gUSoKZ2uBmeP4Og/VDfIX3k9pbNEX5W3fRkuPeVjGA+zaQDVY1A==}
-    engines: {node: '>=16.0.0'}
-    peerDependencies:
-      hono: '>=4.3.6'
-      zod: ^4.0.0
-
-  '@hono/[email protected]':
-    resolution: {integrity: sha512-biKGn3BRJVaftZlIPMyK+HCe/UHAjJ6sH0UyXe3+v0OcgVr9xfImDROTJFLtn9e3XEEAHGZIM9U6evu85abm8Q==}
-    peerDependencies:
-      hono: '>=3.9.0'
-      zod: ^3.25.0 || ^4.0.0
-
-  '@hookform/[email protected]':
-    resolution: {integrity: sha512-A/IxlMLShx3KjV/HeTcTfaMxdwy690+L/ZADoeaTltLx+CVuzkeVIPuybK3jrRfw7YZnmdKsVVHAlEPIAEUNlA==}
-    peerDependencies:
-      react-hook-form: ^7.55.0
-
-  '@humanfs/[email protected]':
-    resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==}
-    engines: {node: '>=18.18.0'}
-
-  '@humanfs/[email protected]':
-    resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==}
-    engines: {node: '>=18.18.0'}
-
-  '@humanwhocodes/[email protected]':
-    resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==}
-    engines: {node: '>=12.22'}
-
-  '@humanwhocodes/[email protected]':
-    resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==}
-    engines: {node: '>=18.18'}
-
-  '@humanwhocodes/[email protected]':
-    resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==}
-    engines: {node: '>=18.18'}
-
-  '@iconify/[email protected]':
-    resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==}
-
-  '@iconify/[email protected]':
-    resolution: {integrity: sha512-EfJS0rLfVuRuJRn4psJHtK2A9TqVnkxPpHY6lYHiB9+8eSuudsxbwMiavocG45ujOo6FJ+CIRlRnlOGinzkaGQ==}
-
-  '@img/[email protected]':
-    resolution: {integrity: sha512-ryFMfvxxpQRsgZJqBd4wsttYQbCxsJksrv9Lw/v798JcQ8+w84mBWuXwl+TT0WJ/WrYOLaYpwQXi3sA9nTIaIg==}
-    engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
-    cpu: [arm64]
-    os: [darwin]
-
-  '@img/[email protected]':
-    resolution: {integrity: sha512-yHpJYynROAj12TA6qil58hmPmAwxKKC7reUqtGLzsOHfP7/rniNGTL8tjWX6L3CTV4+5P4ypcS7Pp+7OB+8ihA==}
-    engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
-    cpu: [x64]
-    os: [darwin]
-
-  '@img/[email protected]':
-    resolution: {integrity: sha512-sBZmpwmxqwlqG9ueWFXtockhsxefaV6O84BMOrhtg/YqbTaRdqDE7hxraVE3y6gVM4eExmfzW4a8el9ArLeEiQ==}
-    cpu: [arm64]
-    os: [darwin]
-
-  '@img/[email protected]':
-    resolution: {integrity: sha512-M64XVuL94OgiNHa5/m2YvEQI5q2cl9d/wk0qFTDVXcYzi43lxuiFTftMR1tOnFQovVXNZJ5TURSDK2pNe9Yzqg==}
-    cpu: [x64]
-    os: [darwin]
-
-  '@img/[email protected]':
-    resolution: {integrity: sha512-RXwd0CgG+uPRX5YYrkzKyalt2OJYRiJQ8ED/fi1tq9WQW2jsQIn0tqrlR5l5dr/rjqq6AHAxURhj2DVjyQWSOA==}
-    cpu: [arm64]
-    os: [linux]
-
-  '@img/[email protected]':
-    resolution: {integrity: sha512-mWd2uWvDtL/nvIzThLq3fr2nnGfyr/XMXlq8ZJ9WMR6PXijHlC3ksp0IpuhK6bougvQrchUAfzRLnbsen0Cqvw==}
-    cpu: [arm]
-    os: [linux]
-
-  '@img/[email protected]':
-    resolution: {integrity: sha512-Xod/7KaDDHkYu2phxxfeEPXfVXFKx70EAFZ0qyUdOjCcxbjqyJOEUpDe6RIyaunGxT34Anf9ue/wuWOqBW2WcQ==}
-    cpu: [ppc64]
-    os: [linux]
-
-  '@img/[email protected]':
-    resolution: {integrity: sha512-eMKfzDxLGT8mnmPJTNMcjfO33fLiTDsrMlUVcp6b96ETbnJmd4uvZxVJSKPQfS+odwfVaGifhsB07J1LynFehw==}
-    cpu: [s390x]
-    os: [linux]
-
-  '@img/[email protected]':
-    resolution: {integrity: sha512-ZW3FPWIc7K1sH9E3nxIGB3y3dZkpJlMnkk7z5tu1nSkBoCgw2nSRTFHI5pB/3CQaJM0pdzMF3paf9ckKMSE9Tg==}
-    cpu: [x64]
-    os: [linux]
-
-  '@img/[email protected]':
-    resolution: {integrity: sha512-UG+LqQJbf5VJ8NWJ5Z3tdIe/HXjuIdo4JeVNADXBFuG7z9zjoegpzzGIyV5zQKi4zaJjnAd2+g2nna8TZvuW9Q==}
-    cpu: [arm64]
-    os: [linux]
-
-  '@img/[email protected]':
-    resolution: {integrity: sha512-SRYOLR7CXPgNze8akZwjoGBoN1ThNZoqpOgfnOxmWsklTGVfJiGJoC/Lod7aNMGA1jSsKWM1+HRX43OP6p9+6Q==}
-    cpu: [x64]
-    os: [linux]
-
-  '@img/[email protected]':
-    resolution: {integrity: sha512-QdrKe3EvQrqwkDrtuTIjI0bu6YEJHTgEeqdzI3uWJOH6G1O8Nl1iEeVYRGdj1h5I21CqxSvQp1Yv7xeU3ZewbA==}
-    engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
-    cpu: [arm64]
-    os: [linux]
-
-  '@img/[email protected]':
-    resolution: {integrity: sha512-oBK9l+h6KBN0i3dC8rYntLiVfW8D8wH+NPNT3O/WBHeW0OQWCjfWksLUaPidsrDKpJgXp3G3/hkmhptAW0I3+A==}
-    engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
-    cpu: [arm]
-    os: [linux]
-
-  '@img/[email protected]':
-    resolution: {integrity: sha512-GLtbLQMCNC5nxuImPR2+RgrviwKwVql28FWZIW1zWruy6zLgA5/x2ZXk3mxj58X/tszVF69KK0Is83V8YgWhLA==}
-    engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
-    cpu: [ppc64]
-    os: [linux]
-
-  '@img/[email protected]':
-    resolution: {integrity: sha512-3gahT+A6c4cdc2edhsLHmIOXMb17ltffJlxR0aC2VPZfwKoTGZec6u5GrFgdR7ciJSsHT27BD3TIuGcuRT0KmQ==}
-    engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
-    cpu: [s390x]
-    os: [linux]
-
-  '@img/[email protected]':
-    resolution: {integrity: sha512-8kYso8d806ypnSq3/Ly0QEw90V5ZoHh10yH0HnrzOCr6DKAPI6QVHvwleqMkVQ0m+fc7EH8ah0BB0QPuWY6zJQ==}
-    engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
-    cpu: [x64]
-    os: [linux]
-
-  '@img/[email protected]':
-    resolution: {integrity: sha512-vAjbHDlr4izEiXM1OTggpCcPg9tn4YriK5vAjowJsHwdBIdx0fYRsURkxLG2RLm9gyBq66gwtWI8Gx0/ov+JKQ==}
-    engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
-    cpu: [arm64]
-    os: [linux]
-
-  '@img/[email protected]':
-    resolution: {integrity: sha512-gCWUn9547K5bwvOn9l5XGAEjVTTRji4aPTqLzGXHvIr6bIDZKNTA34seMPgM0WmSf+RYBH411VavCejp3PkOeQ==}
-    engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
-    cpu: [x64]
-    os: [linux]
-
-  '@img/[email protected]':
-    resolution: {integrity: sha512-+CyRcpagHMGteySaWos8IbnXcHgfDn7pO2fiC2slJxvNq9gDipYBN42/RagzctVRKgxATmfqOSulgZv5e1RdMg==}
-    engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
-    cpu: [wasm32]
-
-  '@img/[email protected]':
-    resolution: {integrity: sha512-MjnHPnbqMXNC2UgeLJtX4XqoVHHlZNd+nPt1kRPmj63wURegwBhZlApELdtxM2OIZDRv/DFtLcNhVbd1z8GYXQ==}
-    engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
-    cpu: [arm64]
-    os: [win32]
-
-  '@img/[email protected]':
-    resolution: {integrity: sha512-xuCdhH44WxuXgOM714hn4amodJMZl3OEvf0GVTm0BEyMeA2to+8HEdRPShH0SLYptJY1uBw+SCFP9WVQi1Q/cw==}
-    engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
-    cpu: [ia32]
-    os: [win32]
-
-  '@img/[email protected]':
-    resolution: {integrity: sha512-OWwz05d++TxzLEv4VnsTz5CmZ6mI6S05sfQGEMrNrQcOEERbX46332IvE7pO/EUiw7jUrrS40z/M7kPyjfl04g==}
-    engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
-    cpu: [x64]
-    os: [win32]
-
-  '@ioredis/[email protected]':
-    resolution: {integrity: sha512-aFT2yemJJo+TZCmieA7qnYGQooOS7QfNmYrzGtsYd3g9j5iDP8AimYYAesf79ohjbLG12XxC4nG5DyEnC88AsQ==}
-
-  '@jridgewell/[email protected]':
-    resolution: {integrity: sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==}
-
-  '@jridgewell/[email protected]':
-    resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==}
-
-  '@jridgewell/[email protected]':
-    resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
-    engines: {node: '>=6.0.0'}
-
-  '@jridgewell/[email protected]':
-    resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==}
-
-  '@jridgewell/[email protected]':
-    resolution: {integrity: sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==}
-
-  '@lit-labs/[email protected]':
-    resolution: {integrity: sha512-ficsEARKnmmW5njugNYKipTm4SFnbik7CXtoencDZzmzo/dQ+2Q0bgkzJuoJP20Aj0F+izzJjOqsnkd6F/o1bw==}
-
-  '@lit/[email protected]':
-    resolution: {integrity: sha512-N+dm5PAYdQ8e6UlywyyrgI2t++wFGXfHx+dSJ1oBrg6FAxUj40jId++EaRm80MKX5JnlH1sBsyZ5h0bcZKemCg==}
-
-  '@lobehub/[email protected]':
-    resolution: {integrity: sha512-s9KnjaPjsEefaNv150G3aifvB+J3P4eEKG+epY9zDPS2BeB6+V2jELWqAZll+nkogMaVovjEE813z3V751QwGw==}
-
-  '@lobehub/[email protected]':
-    resolution: {integrity: sha512-bKjU3sf0+7NppvcdqD/raWvKGJIw8HDJVporNQ7oR8pIPoLeb9IUu/vqIYClOlwfu9qntji7FFySfbdNqXSiJw==}
-    peerDependencies:
-      antd: ^5.23.0
-      react: ^19.0.0
-      react-dom: ^19.0.0
-
-  '@lobehub/[email protected]':
-    resolution: {integrity: sha512-kva7fS6JwsOxoEqk4T1XZmRdmm9f+C2Enssin54MpTj7fduwYSG6oGgFgyYZ7RQq3eW5b5mnyO2SPIXU39xVsQ==}
-    peerDependencies:
-      antd: ^5.23.0
-      react: ^19.0.0
-      react-dom: ^19.0.0
-
-  '@lobehub/[email protected]':
-    resolution: {integrity: sha512-XOLSNeoAOkjaC3kQopeSk8mK/abwLcy3c/u3DzAsgJbb2e1wrvMwTlp8uibychDG3M1xRrTxrwQsWRF7VccBKg==}
-    peerDependencies:
-      antd: ^5.25.0
-      framer-motion: ^12.0.0
-      react: ^19.0.0
-      react-dom: ^19.0.0
-
-  '@mdx-js/[email protected]':
-    resolution: {integrity: sha512-f6ZO2ifpwAQIpzGWaBQT2TXxPv6z3RBzQKpVftEWN78Vl/YweF1uwussDx8ECAXVtr3Rs89fKyG9YlzUs9DyGQ==}
-
-  '@mdx-js/[email protected]':
-    resolution: {integrity: sha512-f++rKLQgUVYDAtECQ6fn/is15GkEH9+nZPM3MS0RcxVqoTfawHvDlSCH7JbMhAM6uJ32v3eXLvLmLvjGu7PTQw==}
-    peerDependencies:
-      '@types/react': '>=16'
-      react: '>=16'
-
-  '@mermaid-js/[email protected]':
-    resolution: {integrity: sha512-lnjOhe7zyHjc+If7yT4zoedx2vo4sHaTmtkl1+or8BRTnCtDmcTpAjpzDSfCZrshM5bCoz0GyidzadJAH1xobA==}
-
-  '@msgpackr-extract/[email protected]':
-    resolution: {integrity: sha512-QZHtlVgbAdy2zAqNA9Gu1UpIuI8Xvsd1v8ic6B2pZmeFnFcMWiPLfWXh7TVw4eGEZ/C9TH281KwhVoeQUKbyjw==}
-    cpu: [arm64]
-    os: [darwin]
-
-  '@msgpackr-extract/[email protected]':
-    resolution: {integrity: sha512-mdzd3AVzYKuUmiWOQ8GNhl64/IoFGol569zNRdkLReh6LRLHOXxU4U8eq0JwaD8iFHdVGqSy4IjFL4reoWCDFw==}
-    cpu: [x64]
-    os: [darwin]
-
-  '@msgpackr-extract/[email protected]':
-    resolution: {integrity: sha512-YxQL+ax0XqBJDZiKimS2XQaf+2wDGVa1enVRGzEvLLVFeqa5kx2bWbtcSXgsxjQB7nRqqIGFIcLteF/sHeVtQg==}
-    cpu: [arm64]
-    os: [linux]
-
-  '@msgpackr-extract/[email protected]':
-    resolution: {integrity: sha512-fg0uy/dG/nZEXfYilKoRe7yALaNmHoYeIoJuJ7KJ+YyU2bvY8vPv27f7UKhGRpY6euFYqEVhxCFZgAUNQBM3nw==}
-    cpu: [arm]
-    os: [linux]
-
-  '@msgpackr-extract/[email protected]':
-    resolution: {integrity: sha512-cvwNfbP07pKUfq1uH+S6KJ7dT9K8WOE4ZiAcsrSes+UY55E/0jLYc+vq+DO7jlmqRb5zAggExKm0H7O/CBaesg==}
-    cpu: [x64]
-    os: [linux]
-
-  '@msgpackr-extract/[email protected]':
-    resolution: {integrity: sha512-x0fWaQtYp4E6sktbsdAqnehxDgEc/VwM7uLsRCYWaiGu0ykYdZPiS8zCWdnjHwyiumousxfBm4SO31eXqwEZhQ==}
-    cpu: [x64]
-    os: [win32]
-
-  '@napi-rs/[email protected]':
-    resolution: {integrity: sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==}
-
-  '@next/[email protected]':
-    resolution: {integrity: sha512-3qBGRW+sCGzgbpc5TS1a0p7eNxnOarGVQhZxfvTdnV0gFI61lX7QNtQ4V1TSREctXzYn5NetbUsLvyqwLFJM6Q==}
-
-  '@next/[email protected]':
-    resolution: {integrity: sha512-YxDvsT2fwy1j5gMqk3ppXlsgDopHnkM4BoxSVASbvvgh5zgsK8lvWerDzPip8k3WVzsTZ1O7A7si1KNfN4OZfQ==}
-
-  '@next/[email protected]':
-    resolution: {integrity: sha512-ES3nRz7N+L5Umz4KoGfZ4XX6gwHplwPhioVRc25+QNsDa7RtUF/z8wJcbuQ2Tffm5RZwuN2A063eapoJ1u4nPg==}
-    engines: {node: '>= 10'}
-    cpu: [arm64]
-    os: [darwin]
-
-  '@next/[email protected]':
-    resolution: {integrity: sha512-JIGcytAyk9LQp2/nuVZPAtj8uaJ/zZhsKOASTjxDug0SPU9LAM3wy6nPU735M1OqacR4U20LHVF5v5Wnl9ptTA==}
-    engines: {node: '>= 10'}
-    cpu: [x64]
-    os: [darwin]
-
-  '@next/[email protected]':
-    resolution: {integrity: sha512-qvz4SVKQ0P3/Im9zcS2RmfFL/UCQnsJKJwQSkissbngnB/12c6bZTCB0gHTexz1s6d/mD0+egPKXAIRFVS7hQg==}
-    engines: {node: '>= 10'}
-    cpu: [arm64]
-    os: [linux]
-
-  '@next/[email protected]':
-    resolution: {integrity: sha512-FsbGVw3SJz1hZlvnWD+T6GFgV9/NYDeLTNQB2MXoPN5u9VA9OEDy6fJEfePfsUKAhJufFbZLgp0cPxMuV6SV0w==}
-    engines: {node: '>= 10'}
-    cpu: [arm64]
-    os: [linux]
-
-  '@next/[email protected]':
-    resolution: {integrity: sha512-3QnHGFWlnvAgyxFxt2Ny8PTpXtQD7kVEeaFat5oPAHHI192WKYB+VIKZijtHLGdBBvc16tiAkPTDmQNOQ0dyrA==}
-    engines: {node: '>= 10'}
-    cpu: [x64]
-    os: [linux]
-
-  '@next/[email protected]':
-    resolution: {integrity: sha512-OsGX148sL+TqMK9YFaPFPoIaJKbFJJxFzkXZljIgA9hjMjdruKht6xDCEv1HLtlLNfkx3c5w2GLKhj7veBQizQ==}
-    engines: {node: '>= 10'}
-    cpu: [x64]
-    os: [linux]
-
-  '@next/[email protected]':
-    resolution: {integrity: sha512-ONOMrqWxdzXDJNh2n60H6gGyKed42Ieu6UTVPZteXpuKbLZTH4G4eBMsr5qWgOBA+s7F+uB4OJbZnrkEDnZ5Fg==}
-    engines: {node: '>= 10'}
-    cpu: [arm64]
-    os: [win32]
-
-  '@next/[email protected]':
-    resolution: {integrity: sha512-pxK4VIjFRx1MY92UycLOOw7dTdvccWsNETQ0kDHkBlcFH1GrTLUjSiHU1ohrznnux6TqRHgv5oflhfIWZwVROQ==}
-    engines: {node: '>= 10'}
-    cpu: [x64]
-    os: [win32]
-
-  '@nodelib/[email protected]':
-    resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
-    engines: {node: '>= 8'}
-
-  '@nodelib/[email protected]':
-    resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
-    engines: {node: '>= 8'}
-
-  '@nodelib/[email protected]':
-    resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
-    engines: {node: '>= 8'}
-
-  '@nolyfill/[email protected]':
-    resolution: {integrity: sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==}
-    engines: {node: '>=12.4.0'}
-
-  '@pinojs/[email protected]':
-    resolution: {integrity: sha512-k2ENnmBugE/rzQfEcdWHcCY+/FM3VLzH9cYEsbdsoqrvzAKRhUZeRNhAZvB8OitQJ1TBed3yqWtdjzS6wJKBwg==}
-
-  '@primer/[email protected]':
-    resolution: {integrity: sha512-LBbL8nOl6FWMDy7riKB5ppHLtffY7loRq+CDGj0D5G1Xdo2mKlSOQy3rWy2RVE8SxxPFL+mj46C1nG+smKBEZA==}
-
-  '@radix-ui/[email protected]':
-    resolution: {integrity: sha512-MkKCwxlXTgz6CFoJx3pCwn07GKp36+aZyu/u2Ln2VrA5DcdyCZkASEDBTd8x5whTQQL5CiYf4prXKLcgQdv29g==}
-
-  '@radix-ui/[email protected]':
-    resolution: {integrity: sha512-3e7rn8FDMin4CgeL7Z/49smCA3rFYY3Ha2rUQ7HRWFadS5iCRw08ZgVT1LaNTCNqgvrUiyczLflrVrF0SRQtNA==}
-
-  '@radix-ui/[email protected]':
-    resolution: {integrity: sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg==}
-
-  '@radix-ui/[email protected]':
-    resolution: {integrity: sha512-oTVLkEw5GpdRe29BqJ0LSDFWI3qu0vR1M0mUkOQWDIUnY/QIkLpgDMWuKxP94c2NAC2LGcgVhG1ImF3jkZ5wXw==}
-    peerDependencies:
-      '@types/react': '*'
-      '@types/react-dom': '*'
-      react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
-      react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
-    peerDependenciesMeta:
-      '@types/react':
-        optional: true
-      '@types/react-dom':
-        optional: true
-
-  '@radix-ui/[email protected]':
-    resolution: {integrity: sha512-fqYwhhI9IarZ0ll2cUSfKuXHlJK0qE4AfnRrPBbRwEH/4mGQn04/QFGomLi8TXWIdv9WJk//KgGm+aDxVIr1wA==}
-    peerDependencies:
-      react: ^16.8 || ^17.0 || ^18.0
-      react-dom: ^16.8 || ^17.0 || ^18.0
-
-  '@radix-ui/[email protected]':
-    resolution: {integrity: sha512-F+M1tLhO+mlQaOWspE8Wstg+z6PwxwRd8oQ8IXceWz92kfAmalTRf0EjrouQeo7QssEPfCn05B4Ihs1K9WQ/7w==}
-    peerDependencies:
-      '@types/react': '*'
-      '@types/react-dom': '*'
-      react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
-      react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
-    peerDependenciesMeta:
-      '@types/react':
-        optional: true
-      '@types/react-dom':
-        optional: true
-
-  '@radix-ui/[email protected]':
-    resolution: {integrity: sha512-V8piFfWapM5OmNCXTzVQY+E1rDa53zY+MQ4Y7356v4fFz6vqCyUtIz2rUD44ZEdwg78/jKmMJHj07+C/Z/rcog==}
-    peerDependencies:
-      '@types/react': '*'
-      '@types/react-dom': '*'
-      react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
-      react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
-    peerDependenciesMeta:
-      '@types/react':
-        optional: true
-      '@types/react-dom':
-        optional: true
-
-  '@radix-ui/[email protected]':
-    resolution: {integrity: sha512-wBbpv+NQftHDdG86Qc0pIyXk5IR3tM8Vd0nWLKDcX8nNn4nXFOFwsKuqw2okA/1D/mpaAkmuyndrPJTYDNZtFw==}
-    peerDependencies:
-      '@types/react': '*'
-      '@types/react-dom': '*'
-      react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
-      react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
-    peerDependenciesMeta:
-      '@types/react':
-        optional: true
-      '@types/react-dom':
-        optional: true
-
-  '@radix-ui/[email protected]':
-    resolution: {integrity: sha512-Uu+mSh4agx2ib1uIGPP4/CKNULyajb3p92LsVXmH2EHVMTfZWpll88XJ0j4W0z3f8NK1eYl1+Mf/szHPmcHzyA==}
-    peerDependencies:
-      '@types/react': '*'
-      '@types/react-dom': '*'
-      react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
-      react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
-    peerDependenciesMeta:
-      '@types/react':
-        optional: true
-      '@types/react-dom':
-        optional: true
-
-  '@radix-ui/[email protected]':
-    resolution: {integrity: sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw==}
-    peerDependencies:
-      '@types/react': '*'
-      '@types/react-dom': '*'
-      react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
-      react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
-    peerDependenciesMeta:
-      '@types/react':
-        optional: true
-      '@types/react-dom':
-        optional: true
-
-  '@radix-ui/[email protected]':
-    resolution: {integrity: sha512-0KaSv6sx787/hK3eF53iOkiSLwAGlFMx5lotrqD2pTjB18KbybKoEIgkNZTKC60YECDQTKGTRcDBILwZVqVKvA==}
-    peerDependencies:
-      react: ^16.8 || ^17.0 || ^18.0
-
-  '@radix-ui/[email protected]':
-    resolution: {integrity: sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==}
-    peerDependencies:
-      '@types/react': '*'
-      react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
-    peerDependenciesMeta:
-      '@types/react':
-        optional: true
-
-  '@radix-ui/[email protected]':
-    resolution: {integrity: sha512-1pVM9RfOQ+n/N5PJK33kRSKsr1glNxomxONs5c49MliinBY6Yw2Q995qfBUUo0/Mbg05B/sGA0gkgPI7kmSHBg==}
-    peerDependencies:
-      react: ^16.8 || ^17.0 || ^18.0
-
-  '@radix-ui/[email protected]':
-    resolution: {integrity: sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==}
-    peerDependencies:
-      '@types/react': '*'
-      react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
-    peerDependenciesMeta:
-      '@types/react':
-        optional: true
-
-  '@radix-ui/[email protected]':
-    resolution: {integrity: sha512-TCglVRtzlffRNxRMEyR36DGBLJpeusFcgMVD9PZEzAKnUs1lKCgX5u9BmC2Yg+LL9MgZDugFFs1Vl+Jp4t/PGw==}
-    peerDependencies:
-      '@types/react': '*'
-      '@types/react-dom': '*'
-      react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
-      react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
-    peerDependenciesMeta:
-      '@types/react':
-        optional: true
-      '@types/react-dom':
-        optional: true
-
-  '@radix-ui/[email protected]':
-    resolution: {integrity: sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw==}
-    peerDependencies:
-      '@types/react': '*'
-      react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
-    peerDependenciesMeta:
-      '@types/react':
-        optional: true
-
-  '@radix-ui/[email protected]':
-    resolution: {integrity: sha512-nXZOvFjOuHS1ovumntGV7NNoLaEp9JEvTht3MBjP44NSW5hUKj/8OnfN3+8WmB+CEhN44XaGhpHoSsUIEl5P7Q==}
-    peerDependencies:
-      react: ^16.8 || ^17.0 || ^18.0
-      react-dom: ^16.8 || ^17.0 || ^18.0
-
-  '@radix-ui/[email protected]':
-    resolution: {integrity: sha512-Nqcp+t5cTB8BinFkZgXiMJniQH0PsUt2k51FUhbdfeKvc4ACcG2uQniY/8+h1Yv6Kza4Q7lD7PQV0z0oicE0Mg==}
-    peerDependencies:
-      '@types/react': '*'
-      '@types/react-dom': '*'
-      react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
-      react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
-    peerDependenciesMeta:
-      '@types/react':
-        optional: true
-      '@types/react-dom':
-        optional: true
-
-  '@radix-ui/[email protected]':
-    resolution: {integrity: sha512-1PLGQEynI/3OX/ftV54COn+3Sud/Mn8vALg2rWnBLnRaGtJDduNW/22XjlGgPdpcIbiQxjKtb7BkcjP00nqfJw==}
-    peerDependencies:
-      '@types/react': '*'
-      '@types/react-dom': '*'
-      react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
-      react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
-    peerDependenciesMeta:
-      '@types/react':
-        optional: true
-      '@types/react-dom':
-        optional: true
-
-  '@radix-ui/[email protected]':
-    resolution: {integrity: sha512-0rFg/Rj2Q62NCm62jZw0QX7a3sz6QCQU0LpZdNrJX8byRGaGVTqbrW9jAoIAHyMQqsNpeZ81YgSizOt5WXq0Pw==}
-    peerDependencies:
-      '@types/react': '*'
-      react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
-    peerDependenciesMeta:
-      '@types/react':
-        optional: true
-
-  '@radix-ui/[email protected]':
-    resolution: {integrity: sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw==}
-    peerDependencies:
-      '@types/react': '*'
-      '@types/react-dom': '*'
-      react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
-      react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
-    peerDependenciesMeta:
-      '@types/react':
-        optional: true
-      '@types/react-dom':
-        optional: true
-
-  '@radix-ui/[email protected]':
-    resolution: {integrity: sha512-Q6iAB/U7Tq3NTolBBQbHTgclPmGWE3OlktGGqrClPozSw4vkQ1DfQAOtzgRPecKsMdJINE05iaoDUG8tRzCBjw==}
-    peerDependencies:
-      react: ^16.8 || ^17.0 || ^18.0
-
-  '@radix-ui/[email protected]':
-    resolution: {integrity: sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg==}
-    peerDependencies:
-      '@types/react': '*'
-      react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
-    peerDependenciesMeta:
-      '@types/react':
-        optional: true
-
-  '@radix-ui/[email protected]':
-    resolution: {integrity: sha512-YT1GqPSL8kJn20djelMX7/cTRp/Y9w5IZHvfxQTVHrOqa2yMl7i/UfMqKRU5V7mEyKTrUVgJXhNQPVCG8PBLoQ==}
-    peerDependencies:
-      '@types/react': '*'
-      '@types/react-dom': '*'
-      react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
-      react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
-    peerDependenciesMeta:
-      '@types/react':
-        optional: true
-      '@types/react-dom':
-        optional: true
-
-  '@radix-ui/[email protected]':
-    resolution: {integrity: sha512-72F2T+PLlphrqLcAotYPp0uJMr5SjP5SL01wfEspJbru5Zs5vQaSHb4VB3ZMJPimgHHCHG7gMOeOB9H3Hdmtxg==}
-    peerDependencies:
-      '@types/react': '*'
-      '@types/react-dom': '*'
-      react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
-      react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
-    peerDependenciesMeta:
-      '@types/react':
-        optional: true
-      '@types/react-dom':
-        optional: true
-
-  '@radix-ui/[email protected]':
-    resolution: {integrity: sha512-kr0X2+6Yy/vJzLYJUPCZEc8SfQcf+1COFoAqauJm74umQhta9M7lNJHP7QQS3vkvcGLQUbWpMzwrXYwrYztHKA==}
-    peerDependencies:
-      '@types/react': '*'
-      '@types/react-dom': '*'
-      react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
-      react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
-    peerDependenciesMeta:
-      '@types/react':
-        optional: true
-      '@types/react-dom':
-        optional: true
-
-  '@radix-ui/[email protected]':
-    resolution: {integrity: sha512-keYDcdMPNMjSC8zTsZ8wezUMiWM9Yj14wtF3s0PTIs9srnEPC9Kt2Gny1T3T81mmSeyDjZxsD9N5WCwNNb712w==}
-    peerDependencies:
-      react: ^16.8 || ^17.0 || ^18.0
-      react-dom: ^16.8 || ^17.0 || ^18.0
-
-  '@radix-ui/[email protected]':
-    resolution: {integrity: sha512-0NJQ4LFFUuWkE7Oxf0htBKS6zLkkjBH+hM1uk7Ng705ReR8m/uelduy1DBo0PyBXPKVnBA6YBlU94MBGXrSBCw==}
-    peerDependencies:
-      '@types/react': '*'
-      '@types/react-dom': '*'
-      react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
-      react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
-    peerDependenciesMeta:
-      '@types/react':
-        optional: true
-      '@types/react-dom':
-        optional: true
-
-  '@radix-ui/[email protected]':
-    resolution: {integrity: sha512-swu32idoCW7KA2VEiUZGBSu9nB6qwGdV6k6HYhUoOo3M1FFpD+VgLzUqtt3mwL1ssz7r2x8MggpLSQach2Xy/Q==}
-    peerDependencies:
-      react: ^16.8 || ^17.0 || ^18.0
-      react-dom: ^16.8 || ^17.0 || ^18.0
-
-  '@radix-ui/[email protected]':
-    resolution: {integrity: sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ==}
-    peerDependencies:
-      '@types/react': '*'
-      '@types/react-dom': '*'
-      react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
-      react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
-    peerDependenciesMeta:
-      '@types/react':
-        optional: true
-      '@types/react-dom':
-        optional: true
-
-  '@radix-ui/[email protected]':
-    resolution: {integrity: sha512-A+6XEvN01NfVWiKu38ybawfHsBjWum42MRPnEuqPsBZ4eV7e/7K321B5VgYMPv3Xx5An6o1/l9ZuDBgmcmWK3w==}
-    peerDependencies:
-      react: ^16.8 || ^17.0 || ^18.0
-      react-dom: ^16.8 || ^17.0 || ^18.0
-
-  '@radix-ui/[email protected]':
-    resolution: {integrity: sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ==}
-    peerDependencies:
-      '@types/react': '*'
-      '@types/react-dom': '*'
-      react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
-      react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
-    peerDependenciesMeta:
-      '@types/react':
-        optional: true
-      '@types/react-dom':
-        optional: true
-
-  '@radix-ui/[email protected]':
-    resolution: {integrity: sha512-zY6G5Qq4R8diFPNwtyoLRZBxzu1Z+SXMlfYpChN7Dv8gvmx9X3qhDqiLWvKseKVJMuedFeU/Sa0Sy/Ia+t06Dw==}
-    peerDependencies:
-      react: ^16.8 || ^17.0 || ^18.0
-      react-dom: ^16.8 || ^17.0 || ^18.0
-
-  '@radix-ui/[email protected]':
-    resolution: {integrity: sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==}
-    peerDependencies:
-      '@types/react': '*'
-      '@types/react-dom': '*'
-      react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
-      react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
-    peerDependenciesMeta:
-      '@types/react':
-        optional: true
-      '@types/react-dom':
-        optional: true
-
-  '@radix-ui/[email protected]':
-    resolution: {integrity: sha512-vPdg/tF6YC/ynuBIJlk1mm7Le0VgW6ub6J2UWnTQ7/D23KXcPI1qy+0vBkgKgd38RCMJavBXpB83HPNFMTb0Fg==}
-    peerDependencies:
-      '@types/react': '*'
-      '@types/react-dom': '*'
-      react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
-      react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
-    peerDependenciesMeta:
-      '@types/react':
-        optional: true
-      '@types/react-dom':
-        optional: true
-
-  '@radix-ui/[email protected]':
-    resolution: {integrity: sha512-7A6S9jSgm/S+7MdtNDSb+IU859vQqJ/QAtcYQcfFC6W8RS4IxIZDldLR0xqCFZ6DCyrQLjLPsxtTNch5jVA4lA==}
-    peerDependencies:
-      '@types/react': '*'
-      '@types/react-dom': '*'
-      react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
-      react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
-    peerDependenciesMeta:
-      '@types/react':
-        optional: true
-      '@types/react-dom':
-        optional: true
-
-  '@radix-ui/[email protected]':
-    resolution: {integrity: sha512-I30RydO+bnn2PQztvo25tswPH+wFBjehVGtmagkU78yMdwTwVf12wnAOF+AeP8S2N8xD+5UPbGhkUfPyvT+mwQ==}
-    peerDependencies:
-      '@types/react': '*'
-      '@types/react-dom': '*'
-      react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
-      react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
-    peerDependenciesMeta:
-      '@types/react':
-        optional: true
-      '@types/react-dom':
-        optional: true
-
-  '@radix-ui/[email protected]':
-    resolution: {integrity: sha512-JPYb1GuM1bxfjMRlNLE+BcmBC8onfCi60Blk7OBqi2MLTFdS+8401U4uFjnwkOr49BLmXxLC6JHkvAsx5OJvHw==}
-    peerDependencies:
-      '@types/react': '*'
-      '@types/react-dom': '*'
-      react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
-      react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
-    peerDependenciesMeta:
-      '@types/react':
-        optional: true
-      '@types/react-dom':
-        optional: true
-
-  '@radix-ui/[email protected]':
-    resolution: {integrity: sha512-avutXAFL1ehGvAXtPquu0YK5oz6ctS474iM3vNGQIkswrVhdrS52e3uoMQBzZhNRAIE0jBnUyXWNmSjGHhCFcw==}
-    peerDependencies:
-      react: ^16.8 || ^17.0 || ^18.0
-
-  '@radix-ui/[email protected]':
-    resolution: {integrity: sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==}
-    peerDependencies:
-      '@types/react': '*'
-      react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
-    peerDependenciesMeta:
-      '@types/react':
-        optional: true
-
-  '@radix-ui/[email protected]':
-    resolution: {integrity: sha512-bByzr1+ep1zk4VubeEVViV592vu2lHE2BZY5OnzehZqOOgogN80+mNtCqPkhn2gklJqOpxWgPoYTSnhBCqpOXQ==}
-    peerDependencies:
-      '@types/react': '*'
-      '@types/react-dom': '*'
-      react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
-      react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
-    peerDependenciesMeta:
-      '@types/react':
-        optional: true
-      '@types/react-dom':
-        optional: true
-
-  '@radix-ui/[email protected]':
-    resolution: {integrity: sha512-7xdcatg7/U+7+Udyoj2zodtI9H/IIopqo+YOIcZOq1nJwXWBZ9p8xiu5llXlekDbZkca79a/fozEYQXIA4sW6A==}
-    peerDependencies:
-      '@types/react': '*'
-      '@types/react-dom': '*'
-      react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
-      react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
-    peerDependenciesMeta:
-      '@types/react':
-        optional: true
-      '@types/react-dom':
-        optional: true
-
-  '@radix-ui/[email protected]':
-    resolution: {integrity: sha512-cDKVcfzyO6PpckZekODJZDe5ZxZ2fCZlzKzTmPhe4mX9qTHRfLcKgqb0OKf22xLwDequ2tVleim+ZYx3rabD5w==}
-    peerDependencies:
-      react: ^16.8 || ^17.0 || ^18.0
-      react-dom: ^16.8 || ^17.0 || ^18.0
-
-  '@radix-ui/[email protected]':
-    resolution: {integrity: sha512-tY7sVt1yL9ozIxvmbtN5qtmH2krXcBCfjEiCgKGLqunJHvgvZG2Pcl2oQ3kbcZARb1BGEHdkLzcYGO8ynVlieg==}
-    peerDependencies:
-      '@types/react': '*'
-      '@types/react-dom': '*'
-      react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
-      react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
-    peerDependenciesMeta:
-      '@types/react':
-        optional: true
-      '@types/react-dom':
-        optional: true
-
-  '@radix-ui/[email protected]':
-    resolution: {integrity: sha512-GZtyzoHz95Rhs6S63D2t/eqvdFCm7I+yHMLVQheKM7nBD8mbZIt+ct1jz4536MDnaOGKIxynJ8eHTkVGVVkoTg==}
-    peerDependencies:
-      react: ^16.8 || ^17.0 || ^18.0
-
-  '@radix-ui/[email protected]':
-    resolution: {integrity: sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg==}
-    peerDependencies:
-      '@types/react': '*'
-      react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
-    peerDependenciesMeta:
-      '@types/react':
-        optional: true
-
-  '@radix-ui/[email protected]':
-    resolution: {integrity: sha512-FohDoZvk3mEXh9AWAVyRTYR4Sq7/gavuofglmiXB2g1aKyboUD4YtgWxKj8O5n+Uak52gXQ4wKz5IFST4vtJHg==}
-    peerDependencies:
-      react: ^16.8 || ^17.0 || ^18.0
-
-  '@radix-ui/[email protected]':
-    resolution: {integrity: sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==}
-    peerDependencies:
-      '@types/react': '*'
-      react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
-    peerDependenciesMeta:
-      '@types/react':
-        optional: true
-
-  '@radix-ui/[email protected]':
-    resolution: {integrity: sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==}
-    peerDependencies:
-      '@types/react': '*'
-      react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
-    peerDependenciesMeta:
-      '@types/react':
-        optional: true
-
-  '@radix-ui/[email protected]':
-    resolution: {integrity: sha512-DXGim3x74WgUv+iMNCF+cAo8xUHHeqvjx8zs7trKf+FkQKPQXLk2sX7Gx1ysH7Q76xCpZuxIJE7HLPxRE+Q+GA==}
-    peerDependencies:
-      react: ^16.8 || ^17.0 || ^18.0
-
-  '@radix-ui/[email protected]':
-    resolution: {integrity: sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g==}
-    peerDependencies:
-      '@types/react': '*'
-      react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
-    peerDependenciesMeta:
-      '@types/react':
-        optional: true
-
-  '@radix-ui/[email protected]':
-    resolution: {integrity: sha512-U+UORVEq+cTnRIaostJv9AGdV3G6Y+zbVd+12e18jQ5A3c0xL03IhnHuiU4UV69wolOQp5GfR58NW/EgdQhwOA==}
-    peerDependencies:
-      '@types/react': '*'
-      react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
-    peerDependenciesMeta:
-      '@types/react':
-        optional: true
-
-  '@radix-ui/[email protected]':
-    resolution: {integrity: sha512-6Tpkq+R6LOlmQb1R5NNETLG0B4YP0wc+klfXafpUCj6JGyaUc8il7/kUZ7m59rGbXGczE9Bs+iz2qloqsZBduQ==}
-    peerDependencies:
-      react: ^16.8 || ^17.0 || ^18.0
-
-  '@radix-ui/[email protected]':
-    resolution: {integrity: sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==}
-    peerDependencies:
-      '@types/react': '*'
-      react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
-    peerDependenciesMeta:
-      '@types/react':
-        optional: true
-
-  '@radix-ui/[email protected]':
-    resolution: {integrity: sha512-2dHfToCj/pzca2Ck724OZ5L0EVrr3eHRNsG/b3xQJLA2hZpVCS99bLAX+hm1IHXDEnzU6by5z/5MIY794/a8NQ==}
-    peerDependencies:
-      '@types/react': '*'
-      react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
-    peerDependenciesMeta:
-      '@types/react':
-        optional: true
-
-  '@radix-ui/[email protected]':
-    resolution: {integrity: sha512-TB7pID8NRMEHxb/qQJpvSt3hQU4sqNPM1VCTjTRjEOa7cEop/QMuq8S6fb/5Tsz64kqSvB9WnwsDHtjnrM9qew==}
-    peerDependencies:
-      react: ^16.8 || ^17.0 || ^18.0
-
-  '@radix-ui/[email protected]':
-    resolution: {integrity: sha512-QTYuDesS0VtuHNNvMh+CjlKJ4LJickCMUAqjlE3+j8w+RlRpwyX3apEQKGFzbZGdo7XNG1tXa+bQqIE7HIXT2w==}
-    peerDependencies:
-      '@types/react': '*'
-      react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
-    peerDependenciesMeta:
-      '@types/react':
-        optional: true
-
-  '@radix-ui/[email protected]':
-    resolution: {integrity: sha512-imZ3aYcoYCKhhgNpkNDh/aTiU05qw9hX+HHI1QDBTyIlcFjgeFlKKySNGMwTp7nYFLQg/j0VA2FmCY4WPDDHMg==}
-    peerDependencies:
-      react: ^16.8 || ^17.0 || ^18.0
-
-  '@radix-ui/[email protected]':
-    resolution: {integrity: sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ==}
-    peerDependencies:
-      '@types/react': '*'
-      react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
-    peerDependenciesMeta:
-      '@types/react':
-        optional: true
-
-  '@radix-ui/[email protected]':
-    resolution: {integrity: sha512-qirnJxtYn73HEk1rXL12/mXnu2rwsNHDID10th2JGtdK25T9wX+mxRmGt7iPSahw512GbZOc0syZX1nLQGoEOg==}
-    peerDependencies:
-      react: ^16.8 || ^17.0 || ^18.0
-      react-dom: ^16.8 || ^17.0 || ^18.0
-
-  '@radix-ui/[email protected]':
-    resolution: {integrity: sha512-pzJq12tEaaIhqjbzpCuv/OypJY/BPavOofm+dbab+MHLajy277+1lLm6JFcGgF5eskJ6mquGirhXY2GD/8u8Ug==}
-    peerDependencies:
-      '@types/react': '*'
-      '@types/react-dom': '*'
-      react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
-      react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
-    peerDependenciesMeta:
-      '@types/react':
-        optional: true
-      '@types/react-dom':
-        optional: true
-
-  '@radix-ui/[email protected]':
-    resolution: {integrity: sha512-d0O68AYy/9oeEy1DdC07bz1/ZXX+DqCskRd3i4JzLSTXwefzaepQrKjXC7aNM8lTHjFLDO0pDgaEiQ7jEk+HVg==}
-
-  '@radix-ui/[email protected]':
-    resolution: {integrity: sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==}
-
-  '@rc-component/[email protected]':
-    resolution: {integrity: sha512-qgGdcVIF604M9EqjNF0hbUTz42bz/RDtxWdWuU5EQe3hi7M8ob54B6B35rOsvX5eSvIHIzT9iH1R3n+hk3CGfg==}
-    engines: {node: '>=14.x'}
-
-  '@rc-component/[email protected]':
-    resolution: {integrity: sha512-WcZYwAThV/b2GISQ8F+7650r5ZZJ043E57aVBFkQ+kSY4C6wdofXgB0hBx+GPGpIU0Z81eETNoDUJMr7oy/P8Q==}
-    peerDependencies:
-      react: '>=16.9.0'
-      react-dom: '>=16.9.0'
-
-  '@rc-component/[email protected]':
-    resolution: {integrity: sha512-kFcNxg9oLRMoL3qki0OMxK+7g5mypjgaaJp/pkOis/6rVxma9nJBF/8kCIuTYHUQNr0ii7MxqE33wirPZLJQ2w==}
-    peerDependencies:
-      react: '>=16.9.0'
-      react-dom: '>=16.9.0'
-
-  '@rc-component/[email protected]':
-    resolution: {integrity: sha512-jS4E7T9Li2GuYwI6PyiVXmxTiM6b07rlD9Ge8uGZSCz3WlzcG5ZK7g5bbuKNeZ9pgUuPK/5guV781ujdVpm4HQ==}
-    engines: {node: '>=8.x'}
-
-  '@rc-component/[email protected]':
-    resolution: {integrity: sha512-QjrOsDXQusNwGZPf4/qRQasg7UFEj06XiCJ8iuiq/Io7CrHrgVi6Uuetw60WAMG1799v+aM8kyc+1L/GBbHSlw==}
-    engines: {node: '>=8.x'}
-    peerDependencies:
-      react: '>=16.9.0'
-      react-dom: '>=16.9.0'
-
-  '@rc-component/[email protected]':
-    resolution: {integrity: sha512-6f813C0IsasTZms08kfA8kPAGxbbkYToa8ALaiDIGGECU4i9hj8Plgbx0sNJDrey3EtHO30hmdaxtT0138xZcg==}
-    engines: {node: '>=8.x'}
-    peerDependencies:
-      react: '>=16.9.0'
-      react-dom: '>=16.9.0'
-
-  '@rc-component/[email protected]':
-    resolution: {integrity: sha512-g8eeeaMyFXVlq8cZUeaxCDhfIYjpao0l9cvm5gFwKXy/Vm1yDWV7h2sjH5jHYzdFedlVKBpATFB1VKMrHzwaWQ==}
-    engines: {node: '>=8.x'}
-    peerDependencies:
-      react: '>=16.9.0'
-      react-dom: '>=16.9.0'
-
-  '@rc-component/[email protected]':
-    resolution: {integrity: sha512-Tr2t7J1DKZUpfJuDZWHxyxWpfmj8EZrqSgyMZ+BCdvKZ6r1UDsfU46M/iWAAFBy961Ssfom2kv5f3UcjIL2CmQ==}
-    engines: {node: '>=8.x'}
-    peerDependencies:
-      react: '>=16.9.0'
-      react-dom: '>=16.9.0'
-
-  '@rc-component/[email protected]':
-    resolution: {integrity: sha512-iwaxZyzOuK0D7lS+0AQEtW52zUWxoGqTGkke3dRyb8pYiShmRpCjB/8TzPI4R6YySCH7Vm9BZj/31VPiiQTLBg==}
-    engines: {node: '>=8.x'}
-    peerDependencies:
-      react: '>=16.9.0'
-      react-dom: '>=16.9.0'
-
-  '@rtsao/[email protected]':
-    resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==}
-
-  '@rushstack/[email protected]':
-    resolution: {integrity: sha512-5EwMtOqvJMMa3HbmxLlF74e+3/HhwBTMcvt3nqVJgGCozO6hzIPOBlwm8mGVNR9SN2IJpxSnlxczyDjcn7qIyw==}
-
-  '@scalar/[email protected]':
-    resolution: {integrity: sha512-bIlrePx41pSvjDcaJPa9YVVhbSm0N9SKQm2Fzl489S0bUVToyXIQtMFVR4i+BmXGjOcATm/66ELW4vdXRjHoRA==}
-    engines: {node: '>=20'}
-
-  '@scalar/[email protected]':
-    resolution: {integrity: sha512-utIz4F6YZj3QU/9HK4P1wIcHY8ceMbL7w+VahFbnmZbE3Gy+haaaHfhZOs2nAfdx1cKOhkm11/inZTtw8+I2bw==}
-    engines: {node: '>=20'}
-    peerDependencies:
-      hono: ^4.0.0
-
-  '@scalar/[email protected]':
-    resolution: {integrity: sha512-HJBcLa+/mPP+3TCcQngj/iW5UqynRosOQdEETXjmdy6Ngw8wBjwIcT6C86J5jufJ6sI8++HYnt+e7pAvp5FO6A==}
-    engines: {node: '>=20'}
-
-  '@scalar/[email protected]':
-    resolution: {integrity: sha512-+X10CCvG57nAqYbTGteiSzRFQcMYm7DLfCRMeEfiWQ9Bq2ladat17XsMSvkvwcfpOSlsoepWf3P5dErERUSOQQ==}
-    engines: {node: '>=20'}
-
-  '@shikijs/[email protected]':
-    resolution: {integrity: sha512-qRSeuP5vlYHCNUIrpEBQFO7vSkR7jn7Kv+5X3FO/zBKVDGQbcnlScD3XhkrHi/R8Ltz0kEjvFR9Szp/XMRbFMw==}
-
-  '@shikijs/[email protected]':
-    resolution: {integrity: sha512-3v1kAXI2TsWQuwv86cREH/+FK9Pjw3dorVEykzQDhwrZj0lwsHYlfyARaKmn6vr5Gasf8aeVpb8JkzeWspxOLQ==}
-
-  '@shikijs/[email protected]':
-    resolution: {integrity: sha512-TNcYTYMbJyy+ZjzWtt0bG5y4YyMIWC2nyePz+CFMWqm+HnZZyy9SWMgo8Z6KBJVIZnx8XUXS8U2afO6Y0g1Oug==}
-
-  '@shikijs/[email protected]':
-    resolution: {integrity: sha512-DIB2EQY7yPX1/ZH7lMcwrK5pl+ZkP/xoSpUzg9YC8R+evRCCiSQ7yyrvEyBsMnfZq4eBzLzBlugMyTAf13+pzg==}
-
-  '@shikijs/[email protected]':
-    resolution: {integrity: sha512-fAo/OnfWckNmv4uBoUu6dSlkcBc+SA1xzj5oUSaz5z3KqHtEbUypg/9xxgJARtM6+7RVm0Q6Xnty41xA1ma1IA==}
-
-  '@shikijs/[email protected]':
-    resolution: {integrity: sha512-i67zQnY9wLMMnKasonVW1L9fKneSLZDj1ePsA4o0AZWU4uUobmJY9baRDa36z+a9/g0aG76/2tybQvm4hrwxIQ==}
-
-  '@shikijs/[email protected]':
-    resolution: {integrity: sha512-bQGgC6vrY8U/9ObG1Z/vTro+uclbjjD/uG58RvfxKZVD5p9Yc1ka3tVyEFy7BNJLzxuWyHH5NWynP9zZZS59eQ==}
-
-  '@shikijs/[email protected]':
-    resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==}
-
-  '@splinetool/[email protected]':
-    resolution: {integrity: sha512-qznHbXA5aKwDbCgESAothCNm1IeEZcmNWG145p5aXj4w5uoqR1TZ9qkTHTKLTsUbHeitCwdhzmRqan1kxboLgQ==}
-
-  '@standard-schema/[email protected]':
-    resolution: {integrity: sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g==}
-
-  '@stitches/[email protected]':
-    resolution: {integrity: sha512-9g9dWI4gsSVe8bNLlb+lMkBYsnIKCZTmvqvDG+Avnn69XfmHZKiaMrx7cgTaddq7aTPPmXiTsbFcUy0xgI4+wA==}
-    peerDependencies:
-      react: '>= 16.3.0'
-
-  '@swc/[email protected]':
-    resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==}
-
-  '@tailwindcss/[email protected]':
-    resolution: {integrity: sha512-BX5iaSsloNuvKNHRN3k2RcCuTEgASTo77mofW0vmeHkfrDWaoFAFvNHpEgtu0eqyypcyiBkDWzSMxJhp3AUVcw==}
-
-  '@tailwindcss/[email protected]':
-    resolution: {integrity: sha512-8+ctzkjHgwDJ5caq9IqRSgsP70xhdhJvm+oueS/yhD5ixLhqTw9fSL1OurzMUhBwE5zK26FXLCz2f/RtkISqHA==}
-    engines: {node: '>= 10'}
-    cpu: [arm64]
-    os: [android]
-
-  '@tailwindcss/[email protected]':
-    resolution: {integrity: sha512-C3oZy5042v2FOALBZtY0JTDnGNdS6w7DxL/odvSny17ORUnaRKhyTse8xYi3yKGyfnTUOdavRCdmc8QqJYwFKA==}
-    engines: {node: '>= 10'}
-    cpu: [arm64]
-    os: [darwin]
-
-  '@tailwindcss/[email protected]':
-    resolution: {integrity: sha512-vjrl/1Ub9+JwU6BP0emgipGjowzYZMjbWCDqwA2Z4vCa+HBSpP4v6U2ddejcHsolsYxwL5r4bPNoamlV0xDdLg==}
-    engines: {node: '>= 10'}
-    cpu: [x64]
-    os: [darwin]
-
-  '@tailwindcss/[email protected]':
-    resolution: {integrity: sha512-TSMpPYpQLm+aR1wW5rKuUuEruc/oOX3C7H0BTnPDn7W/eMw8W+MRMpiypKMkXZfwH8wqPIRKppuZoedTtNj2tg==}
-    engines: {node: '>= 10'}
-    cpu: [x64]
-    os: [freebsd]
-
-  '@tailwindcss/[email protected]':
-    resolution: {integrity: sha512-p0GGfRg/w0sdsFKBjMYvvKIiKy/LNWLWgV/plR4lUgrsxFAoQBFrXkZ4C0w8IOXfslB9vHK/JGASWD2IefIpvw==}
-    engines: {node: '>= 10'}
-    cpu: [arm]
-    os: [linux]
-
-  '@tailwindcss/[email protected]':
-    resolution: {integrity: sha512-DoixyMmTNO19rwRPdqviTrG1rYzpxgyYJl8RgQvdAQUzxC1ToLRqtNJpU/ATURSKgIg6uerPw2feW0aS8SNr/w==}
-    engines: {node: '>= 10'}
-    cpu: [arm64]
-    os: [linux]
-
-  '@tailwindcss/[email protected]':
-    resolution: {integrity: sha512-H81UXMa9hJhWhaAUca6bU2wm5RRFpuHImrwXBUvPbYb+3jo32I9VIwpOX6hms0fPmA6f2pGVlybO6qU8pF4fzQ==}
-    engines: {node: '>= 10'}
-    cpu: [arm64]
-    os: [linux]
-
-  '@tailwindcss/[email protected]':
-    resolution: {integrity: sha512-ZGHQxDtFC2/ruo7t99Qo2TTIvOERULPl5l0K1g0oK6b5PGqjYMga+FcY1wIUnrUxY56h28FxybtDEla+ICOyew==}
-    engines: {node: '>= 10'}
-    cpu: [x64]
-    os: [linux]
-
-  '@tailwindcss/[email protected]':
-    resolution: {integrity: sha512-Oi1tAaa0rcKf1Og9MzKeINZzMLPbhxvm7rno5/zuP1WYmpiG0bEHq4AcRUiG2165/WUzvxkW4XDYCscZWbTLZw==}
-    engines: {node: '>= 10'}
-    cpu: [x64]
-    os: [linux]
-
-  '@tailwindcss/[email protected]':
-    resolution: {integrity: sha512-B01u/b8LteGRwucIBmCQ07FVXLzImWESAIMcUU6nvFt/tYsQ6IHz8DmZ5KtvmwxD+iTYBtM1xwoGXswnlu9v0Q==}
-    engines: {node: '>=14.0.0'}
-    cpu: [wasm32]
-    bundledDependencies:
-      - '@napi-rs/wasm-runtime'
-      - '@emnapi/core'
-      - '@emnapi/runtime'
-      - '@tybys/wasm-util'
-      - '@emnapi/wasi-threads'
-      - tslib
-
-  '@tailwindcss/[email protected]':
-    resolution: {integrity: sha512-zX+Q8sSkGj6HKRTMJXuPvOcP8XfYON24zJBRPlszcH1Np7xuHXhWn8qfFjIujVzvH3BHU+16jBXwgpl20i+v9A==}
-    engines: {node: '>= 10'}
-    cpu: [arm64]
-    os: [win32]
-
-  '@tailwindcss/[email protected]':
-    resolution: {integrity: sha512-m5dDFJUEejbFqP+UXVstd4W/wnxA4F61q8SoL+mqTypId2T2ZpuxosNSgowiCnLp2+Z+rivdU0AqpfgiD7yCBg==}
-    engines: {node: '>= 10'}
-    cpu: [x64]
-    os: [win32]
-
-  '@tailwindcss/[email protected]':
-    resolution: {integrity: sha512-2OSv52FRuhdlgyOQqgtQHuCgXnS8nFSYRp2tJ+4WZXKgTxqPy7SMSls8c3mPT5pkZ17SBToGM5LHEJBO7miEdg==}
-    engines: {node: '>= 10'}
-
-  '@tailwindcss/[email protected]':
-    resolution: {integrity: sha512-Qn3SFGPXYQMKR/UtqS+dqvPrzEeBZHrFA92maT4zijCVggdsXnDBMsPFJo1eArX3J+O+Gi+8pV4PkqjLCNBk3A==}
-
-  '@tanstack/[email protected]':
-    resolution: {integrity: sha512-wLamYp7FaDq6ZnNehypKI5fNvxHPfTYylE0m/ZpuuzJfJqhR5Pxg9gvGBHZx4n7J+V5Rg5mZxHHTlv25Zt5u+w==}
-
-  '@tanstack/[email protected]':
-    resolution: {integrity: sha512-pN+8UWpxZkEJ/Rnnj2v2Sxpx1WFlaa9L6a4UO89p6tTQbeo+m0MS8oYDjbggrR8QcTyjKoYWKS3xJQGr3ExT8Q==}
-    peerDependencies:
-      react: ^18 || ^19
-
-  '@tybys/[email protected]':
-    resolution: {integrity: sha512-VyyPYFlOMNylG45GoAe0xDoLwWuowvf92F9kySqzYh8vmYm7D2u4iUJKa1tOUpS70Ku13ASrOkS4ScXFsTaCNQ==}
-
-  '@types/[email protected]':
-    resolution: {integrity: sha512-hOLWVbm7uRza0BYXpIIW5pxfrKe0W+D5lrFiAEYR+pb6w3N2SwSMaJbXdUfSEv+dT4MfHBLtn5js0LAWaO6otw==}
-
-  '@types/[email protected]':
-    resolution: {integrity: sha512-pYeijfZuBd87T0hGn0FO1vQ/cgLk6E1ALJjfkC0oJ8cbwkZl3TpgS8bVBLZN+2jjGgg38epgxb2zmoGtSfvgMw==}
-
-  '@types/[email protected]':
-    resolution: {integrity: sha512-nH60IZNNxEcrh6L1ZSMNA28rj27ut/2ZmI3r96Zd+1jrZD++zD3LsMIjWlvg4AYrHn/Pqz4CF3veCxGjtbqt7A==}
-
-  '@types/[email protected]':
-    resolution: {integrity: sha512-LFYWWd8nwfwEmTZG9PfQxd17HbNPksHBiJHaKuY1XeqscXacsS2tyoo6OdRsjf+NQYeB6XrNL3a25E3gH69lcg==}
-
-  '@types/[email protected]':
-    resolution: {integrity: sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==}
-
-  '@types/[email protected]':
-    resolution: {integrity: sha512-BjzLgXGnCWjUSYGfH1cpdo41/hgdWETu4YxpezoztawmqsvCeep+8QGfiY6YbDvfgHz/DkjeIkkZVJavB4a3rg==}
-
-  '@types/[email protected]':
-    resolution: {integrity: sha512-ZMaSKu4THYCU6sV64Lhg6qjf1orxBthaC161plr5KuPHo3CNm8DTHiLw/5Eq2b6TsNP0W0iJrUOFscY6Q450Hw==}
-
-  '@types/[email protected]':
-    resolution: {integrity: sha512-5o9OIAdKkhN1QItV2oqaE5KMIiXAvDWBDPrD85e58Qlz1c1kI/J0NcqbEG88CoTwJrYe7ntUCVfeUl2UJKbWgA==}
-
-  '@types/[email protected]':
-    resolution: {integrity: sha512-HE3jVKlzU9AaMazNufooRJ5ZpWmLIoc90A37WU2JMmeq28w1FQqCZswHZ3xR+SuxYftzHq6WU6KJHvqxKzTxxQ==}
-
-  '@types/[email protected]':
-    resolution: {integrity: sha512-n6QBF9/+XASqcKK6waudgL0pf/S5XHPPI8APyMLLUHd8NqouBGLsU8MgtO7NINGtPBtk9Kko/W4ea0oAspwh9g==}
-
-  '@types/[email protected]':
-    resolution: {integrity: sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA==}
-
-  '@types/[email protected]':
-    resolution: {integrity: sha512-fTAfNmxSb9SOWNB9IoG5c8Hg6R+AzUHDRlsXsDZsNp6sxAEOP0tkP3gKkNSO/qmHPoBFTxNrjDprVHDQDvo5aA==}
-
-  '@types/[email protected]':
-    resolution: {integrity: sha512-ZYeSaCF3p73RdOKcjj+swRlZfnYpK1EbaDiYICEEp5Q6sUiqFaFQ9qgoshp5CzIyyb/yD09kD9o2zEltCexlgw==}
-
-  '@types/[email protected]':
-    resolution: {integrity: sha512-fALi2aI6shfg7vM5KiR1wNJnZ7r6UuggVqtDA+xiEdPZQwy/trcQaHnwShLuLdta2rTymCNpxYTiMZX/e09F4g==}
-
-  '@types/[email protected]':
-    resolution: {integrity: sha512-856sckF0oP/diXtS4jNsiQw/UuK5fQG8l/a9VVLeSouf1/PPbBE1i1W852zVwKwYCBkFJJB7nCFTbk6UMEXBOQ==}
-
-  '@types/[email protected]':
-    resolution: {integrity: sha512-tJFtNoYBtRtkNysX1Xq4sxtjK8YgoWUNpIiUee0/jHGRwqvzYxkq0hGVbbOGSz+JgFxxRu4K8nb3YpG3CMARtg==}
-
-  '@types/[email protected]':
-    resolution: {integrity: sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==}
-
-  '@types/[email protected]':
-    resolution: {integrity: sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg==}
-
-  '@types/[email protected]':
-    resolution: {integrity: sha512-ZuWOtMaHCkN9xoeEMr1ubW2nGWsp4nIql+OPQRstu4ypeZ+zk3YKqQT0CXVe/PYqrKpZAi+J9mTs05TKwjXSRA==}
-
-  '@types/[email protected]':
-    resolution: {integrity: sha512-oUzyO1/Zm6rsxKRHA1vH0NEDG58HrT5icx/azi9MF1TWdtttWl0UIUsjEQBBh+SIkrpd21ZjEv7ptxWys1ncsg==}
-
-  '@types/[email protected]':
-    resolution: {integrity: sha512-Imagg1vJ3y76Y2ea0871wpabqp613+8/r0mCLEBfdtqC7xMSfj9idOnmBYyMoULfHePJyxMAw3nWhJxzc+LFwQ==}
-
-  '@types/[email protected]':
-    resolution: {integrity: sha512-iWMJgwkK7yTRmWqRB5plb1kadXyQ5Sj8V/zYlFGMUBbIPKQScw+Dku9cAAMgJG+z5GYDoMjWGLVOvjghDEFnKQ==}
-
-  '@types/[email protected]':
-    resolution: {integrity: sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw==}
-
-  '@types/[email protected]':
-    resolution: {integrity: sha512-bhAXu23DJWsrI45xafYpkQ4NtcKMwWnAC/vKrd2l+nxMFuvOT3XMYTIj2opv8vq8AO5Yh7Qac/nSeP/3zjTK0w==}
-
-  '@types/[email protected]':
-    resolution: {integrity: sha512-VLvUQ33C+3J+8p+Daf+nYSOsjB4GXp19/S/aGo60m9h1v6XaxjiT82lKVWJCfzhtuZ3yD7i/TPeC/fuKLLOSmg==}
-
-  '@types/[email protected]':
-    resolution: {integrity: sha512-5xg9rC+wWL8kdDj153qZcsJ0FWiFt0J5RB6LYUNZjwSnesfblqrI/bJ1wBdJ8OQfncgbJG5+2F+qfqnqyzYxyg==}
-
-  '@types/[email protected]':
-    resolution: {integrity: sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g==}
-
-  '@types/[email protected]':
-    resolution: {integrity: sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==}
-
-  '@types/[email protected]':
-    resolution: {integrity: sha512-uZS5shfxzO3rGlu0cC3bjmMFKsXv+SmZZcgp0KD22ts4uGXp5EVYGzu/0YdwZeKmddhcAccYtREJKkPfXkZuCg==}
-
-  '@types/[email protected]':
-    resolution: {integrity: sha512-iqMC4/YlFCSlO8+2Ii1GGGliCAY4XdeG748w5vQUbevlbDu0zSjH/+jojorQVBK/se0j6DUFNPBGSqD3YWYnDw==}
-
-  '@types/[email protected]':
-    resolution: {integrity: sha512-lZXZ9ckh5R8uiFVt8ogUNf+pIrK4EsWrx2Np75WvF/eTpJ0FMHNhjXk8CKEx/+gpHbNQyJWehbFaTvqmHWB3ww==}
-
-  '@types/[email protected]':
-    resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==}
-
-  '@types/[email protected]':
-    resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==}
-
-  '@types/[email protected]':
-    resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==}
-
-  '@types/[email protected]':
-    resolution: {integrity: sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==}
-
-  '@types/[email protected]':
-    resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==}
-
-  '@types/[email protected]':
-    resolution: {integrity: sha512-zJbJ3FVE17CNl5KXzdeSPtdltc4tMT3TzC6fxQS0sQngkbFZ6h+0uTafsRqu+eSLIugf6Yb0Ea0SUuRr42Nk9g==}
-    deprecated: This is a stub types definition. ioredis provides its own type definitions, so you do not need this installed.
-
-  '@types/[email protected]':
-    resolution: {integrity: sha512-wkw9yd1kEXOPnvEeEV1Go1MmxtBJL0RR79aOTAApecWFVu7w0NNXNqhcWgvw2YgZDYadliXkl14pa3WXw5jlCQ==}
-
-  '@types/[email protected]':
-    resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
-
-  '@types/[email protected]':
-    resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
-
-  '@types/[email protected]':
-    resolution: {integrity: sha512-HMwFiRujE5PjrgwHQ25+bsLJgowjGjm5Z8FVSf0N6PwgJrwxH0QxzHYDcKsTfV3wva0vzrpqMTJS2jXPr5BMEQ==}
-
-  '@types/[email protected]':
-    resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==}
-
-  '@types/[email protected]':
-    resolution: {integrity: sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==}
-
-  '@types/[email protected]':
-    resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==}
-
-  '@types/[email protected]':
-    resolution: {integrity: sha512-gfehUI8N1z92kygssiuWvLiwcbOB3IRktR6hTDgJlXMYh5OvkPSRmgfoBUmfZt+vhwJtX7v1Yw4KvvAf7c5QKQ==}
-
-  '@types/[email protected]':
-    resolution: {integrity: sha512-VWDCbrLeVXJM9fihYodcLiIv0ku+AlOa/TQ1SvYOaBuyrSKgEcro95LJyIsJ4vSo6BXIxOKxiJAat04CmST9Fw==}
-
-  '@types/[email protected]':
-    resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==}
-
-  '@types/[email protected]':
-    resolution: {integrity: sha512-LF7lF6zWEKxuT3/OR8wAZGzkg4ENGXFNyiV/JeOt9z5B+0ZVwbql9McqX5c/WStFq1GaGso7H1AzP/qSzmlCKQ==}
-
-  '@types/[email protected]':
-    resolution: {integrity: sha512-c4YAvMedbPZ5tEyxzQdMoOhhJ4RD3rngZIdwC2/qDN3d7JpEhB6fiBRKVY1lg5B7Wk+uPBjn5f39j1/2MY1oOw==}
-
-  '@types/[email protected]':
-    resolution: {integrity: sha512-9KQPoO6mZCi7jcIStSnlOWn2nEF3mNmyr3rIAsGnAbQKYbRLyqmeSc39EVgtxXVia+LMT8j3knZLAZAh+xLmrw==}
-    peerDependencies:
-      '@types/react': ^19.2.0
-
-  '@types/[email protected]':
-    resolution: {integrity: sha512-6mDvHUFSjyT2B2yeNx2nUgMxh9LtOWvkhIU3uePn2I2oyNymUAX1NIsdgviM4CH+JSrp2D2hsMvJOkxY+0wNRA==}
-
-  '@types/[email protected]':
-    resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==}
-
-  '@types/[email protected]':
-    resolution: {integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==}
-
-  '@types/[email protected]':
-    resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==}
-
-  '@typescript-eslint/[email protected]':
-    resolution: {integrity: sha512-bhEz6OZeUR+O/6yx9Jk6ohX6H9JSFTaiY0v9/PuKT3oGK0rn0jNplLmyFUGV+a9gfYnVNwGDwS/UkLIuXNb2Rw==}
-    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-    peerDependencies:
-      '@typescript-eslint/parser': ^8.39.0
-      eslint: ^8.57.0 || ^9.0.0
-      typescript: '>=4.8.4 <6.0.0'
-
-  '@typescript-eslint/[email protected]':
-    resolution: {integrity: sha512-g3WpVQHngx0aLXn6kfIYCZxM6rRJlWzEkVpqEFLT3SgEDsp9cpCbxxgwnE504q4H+ruSDh/VGS6nqZIDynP+vg==}
-    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-    peerDependencies:
-      eslint: ^8.57.0 || ^9.0.0
-      typescript: '>=4.8.4 <6.0.0'
-
-  '@typescript-eslint/[email protected]':
-    resolution: {integrity: sha512-CTzJqaSq30V/Z2Og9jogzZt8lJRR5TKlAdXmWgdu4hgcC9Kww5flQ+xFvMxIBWVNdxJO7OifgdOK4PokMIWPew==}
-    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-    peerDependencies:
-      typescript: '>=4.8.4 <6.0.0'
-
-  '@typescript-eslint/[email protected]':
-    resolution: {integrity: sha512-8QOzff9UKxOh6npZQ/4FQu4mjdOCGSdO3p44ww0hk8Vu+IGbg0tB/H1LcTARRDzGCC8pDGbh2rissBuuoPgH8A==}
-    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-
-  '@typescript-eslint/[email protected]':
-    resolution: {integrity: sha512-Fd3/QjmFV2sKmvv3Mrj8r6N8CryYiCS8Wdb/6/rgOXAWGcFuc+VkQuG28uk/4kVNVZBQuuDHEDUpo/pQ32zsIQ==}
-    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-    peerDependencies:
-      typescript: '>=4.8.4 <6.0.0'
-
-  '@typescript-eslint/[email protected]':
-    resolution: {integrity: sha512-6B3z0c1DXVT2vYA9+z9axjtc09rqKUPRmijD5m9iv8iQpHBRYRMBcgxSiKTZKm6FwWw1/cI4v6em35OsKCiN5Q==}
-    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-    peerDependencies:
-      eslint: ^8.57.0 || ^9.0.0
-      typescript: '>=4.8.4 <6.0.0'
-
-  '@typescript-eslint/[email protected]':
-    resolution: {integrity: sha512-ArDdaOllnCj3yn/lzKn9s0pBQYmmyme/v1HbGIGB0GB/knFI3fWMHloC+oYTJW46tVbYnGKTMDK4ah1sC2v0Kg==}
-    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-
-  '@typescript-eslint/[email protected]':
-    resolution: {integrity: sha512-ndWdiflRMvfIgQRpckQQLiB5qAKQ7w++V4LlCHwp62eym1HLB/kw7D9f2e8ytONls/jt89TEasgvb+VwnRprsw==}
-    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-    peerDependencies:
-      typescript: '>=4.8.4 <6.0.0'
-
-  '@typescript-eslint/[email protected]':
-    resolution: {integrity: sha512-4GVSvNA0Vx1Ktwvf4sFE+exxJ3QGUorQG1/A5mRfRNZtkBT2xrA/BCO2H0eALx/PnvCS6/vmYwRdDA41EoffkQ==}
-    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-    peerDependencies:
-      eslint: ^8.57.0 || ^9.0.0
-      typescript: '>=4.8.4 <6.0.0'
-
-  '@typescript-eslint/[email protected]':
-    resolution: {integrity: sha512-ldgiJ+VAhQCfIjeOgu8Kj5nSxds0ktPOSO9p4+0VDH2R2pLvQraaM5Oen2d7NxzMCm+Sn/vJT+mv2H5u6b/3fA==}
-    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-
-  '@ungap/[email protected]':
-    resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==}
-
-  '@unrs/[email protected]':
-    resolution: {integrity: sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw==}
-    cpu: [arm]
-    os: [android]
-
-  '@unrs/[email protected]':
-    resolution: {integrity: sha512-lCxkVtb4wp1v+EoN+HjIG9cIIzPkX5OtM03pQYkG+U5O/wL53LC4QbIeazgiKqluGeVEeBlZahHalCaBvU1a2g==}
-    cpu: [arm64]
-    os: [android]
-
-  '@unrs/[email protected]':
-    resolution: {integrity: sha512-gPVA1UjRu1Y/IsB/dQEsp2V1pm44Of6+LWvbLc9SDk1c2KhhDRDBUkQCYVWe6f26uJb3fOK8saWMgtX8IrMk3g==}
-    cpu: [arm64]
-    os: [darwin]
-
-  '@unrs/[email protected]':
-    resolution: {integrity: sha512-cFzP7rWKd3lZaCsDze07QX1SC24lO8mPty9vdP+YVa3MGdVgPmFc59317b2ioXtgCMKGiCLxJ4HQs62oz6GfRQ==}
-    cpu: [x64]
-    os: [darwin]
-
-  '@unrs/[email protected]':
-    resolution: {integrity: sha512-fqtGgak3zX4DCB6PFpsH5+Kmt/8CIi4Bry4rb1ho6Av2QHTREM+47y282Uqiu3ZRF5IQioJQ5qWRV6jduA+iGw==}
-    cpu: [x64]
-    os: [freebsd]
-
-  '@unrs/[email protected]':
-    resolution: {integrity: sha512-u92mvlcYtp9MRKmP+ZvMmtPN34+/3lMHlyMj7wXJDeXxuM0Vgzz0+PPJNsro1m3IZPYChIkn944wW8TYgGKFHw==}
-    cpu: [arm]
-    os: [linux]
-
-  '@unrs/[email protected]':
-    resolution: {integrity: sha512-cINaoY2z7LVCrfHkIcmvj7osTOtm6VVT16b5oQdS4beibX2SYBwgYLmqhBjA1t51CarSaBuX5YNsWLjsqfW5Cw==}
-    cpu: [arm]
-    os: [linux]
-
-  '@unrs/[email protected]':
-    resolution: {integrity: sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ==}
-    cpu: [arm64]
-    os: [linux]
-
-  '@unrs/[email protected]':
-    resolution: {integrity: sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w==}
-    cpu: [arm64]
-    os: [linux]
-
-  '@unrs/[email protected]':
-    resolution: {integrity: sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA==}
-    cpu: [ppc64]
-    os: [linux]
-
-  '@unrs/[email protected]':
-    resolution: {integrity: sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ==}
-    cpu: [riscv64]
-    os: [linux]
-
-  '@unrs/[email protected]':
-    resolution: {integrity: sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew==}
-    cpu: [riscv64]
-    os: [linux]
-
-  '@unrs/[email protected]':
-    resolution: {integrity: sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg==}
-    cpu: [s390x]
-    os: [linux]
-
-  '@unrs/[email protected]':
-    resolution: {integrity: sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w==}
-    cpu: [x64]
-    os: [linux]
-
-  '@unrs/[email protected]':
-    resolution: {integrity: sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA==}
-    cpu: [x64]
-    os: [linux]
-
-  '@unrs/[email protected]':
-    resolution: {integrity: sha512-5u4RkfxJm+Ng7IWgkzi3qrFOvLvQYnPBmjmZQ8+szTK/b31fQCnleNl1GgEt7nIsZRIf5PLhPwT0WM+q45x/UQ==}
-    engines: {node: '>=14.0.0'}
-    cpu: [wasm32]
-
-  '@unrs/[email protected]':
-    resolution: {integrity: sha512-nRcz5Il4ln0kMhfL8S3hLkxI85BXs3o8EYoattsJNdsX4YUU89iOkVn7g0VHSRxFuVMdM4Q1jEpIId1Ihim/Uw==}
-    cpu: [arm64]
-    os: [win32]
-
-  '@unrs/[email protected]':
-    resolution: {integrity: sha512-DCEI6t5i1NmAZp6pFonpD5m7i6aFrpofcp4LA2i8IIq60Jyo28hamKBxNrZcyOwVOZkgsRp9O2sXWBWP8MnvIQ==}
-    cpu: [ia32]
-    os: [win32]
-
-  '@unrs/[email protected]':
-    resolution: {integrity: sha512-lrW200hZdbfRtztbygyaq/6jP6AKE8qQN2KvPcJ+x7wiD038YtnYtZ82IMNJ69GJibV7bwL3y9FgK+5w/pYt6g==}
-    cpu: [x64]
-    os: [win32]
-
-  '@use-gesture/[email protected]':
-    resolution: {integrity: sha512-WcINiDt8WjqBdUXye25anHiNxPc0VOrlT8F6LLkU6cycrOGUDyY/yyFmsg3k8i5OLvv25llc0QC45GhR/C8llw==}
-
-  '@use-gesture/[email protected]':
-    resolution: {integrity: sha512-Yy19y6O2GJq8f7CHf7L0nxL8bf4PZCPaVOCgJrusOeFHY1LvHgYXnmnXg6N5iwAnbgbZCDjo60SiM6IPJi9C5g==}
-    peerDependencies:
-      react: '>= 16.8.0'
-
-  [email protected]:
-    resolution: {integrity: sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==}
-    engines: {node: '>= 0.6'}
-
-  [email protected]:
-    resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
-    peerDependencies:
-      acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
-
-  [email protected]:
-    resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==}
-    engines: {node: '>=0.4.0'}
-    hasBin: true
-
-  [email protected]:
-    resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==}
-    engines: {node: '>= 14'}
-
-  [email protected]:
-    resolution: {integrity: sha512-Mr7f05swd5SmKlR9SZo5U6M0LsL4ErweLzpdgXjA1JPmnZ78Vr6wzx0jUtvoxrcqGKYnX0Yjc02iEASVxHFPjQ==}
-    peerDependencies:
-      react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
-      react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
-
-  [email protected]:
-    resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
-
-  [email protected]:
-    resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
-    engines: {node: '>=8'}
-
-  [email protected]:
-    resolution: {integrity: sha512-CQOfddVp4aOvBfCepa+Kj2e7ap+2XBINg1Kn2osdE3oQvrD7KJu/K0sfnLcFLkgCJygbxmuazYdWLKb+drPDYA==}
-    peerDependencies:
-      antd: '>=5.8.1'
-      react: '>=18'
-
-  [email protected]:
-    resolution: {integrity: sha512-70HrjVbzDXvtiUQ5MP1XdNudr/wGAk9Ivaemk6f36yrAeJurJSmZ8KngOIilolLRHdGuNc6/Vk+4T1OZpSjpag==}
-    peerDependencies:
-      react: '>=16.9.0'
-      react-dom: '>=16.9.0'
-
-  [email protected]:
-    resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
-
-  [email protected]:
-    resolution: {integrity: sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==}
-    engines: {node: '>=10'}
-
-  [email protected]:
-    resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==}
-    engines: {node: '>= 0.4'}
-
-  [email protected]:
-    resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==}
-    engines: {node: '>= 0.4'}
-
-  [email protected]:
-    resolution: {integrity: sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==}
-    engines: {node: '>= 0.4'}
-
-  [email protected]:
-    resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==}
-    engines: {node: '>= 0.4'}
-
-  [email protected]:
-    resolution: {integrity: sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==}
-    engines: {node: '>= 0.4'}
-
-  [email protected]:
-    resolution: {integrity: sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==}
-    engines: {node: '>= 0.4'}
-
-  [email protected]:
-    resolution: {integrity: sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==}
-    engines: {node: '>= 0.4'}
-
-  [email protected]:
-    resolution: {integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==}
-    engines: {node: '>= 0.4'}
-
-  [email protected]:
-    resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==}
-    engines: {node: '>= 0.4'}
-
-  [email protected]:
-    resolution: {integrity: sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==}
-    engines: {node: '>=0.10.0'}
-
-  [email protected]:
-    resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==}
-
-  [email protected]:
-    resolution: {integrity: sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==}
-    hasBin: true
-
-  [email protected]:
-    resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==}
-    engines: {node: '>= 0.4'}
-
-  [email protected]:
-    resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==}
-
-  [email protected]:
-    resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==}
-    engines: {node: '>=8.0.0'}
-
-  [email protected]:
-    resolution: {integrity: sha512-0bDNnY/u6pPwHDMoF0FieU354oBi0a8rD9FcsLwzcGWbc8KS8KPIi7y+s13OlVY+gMWc/9xEMUgNE6Qm8ZllYQ==}
-    engines: {node: '>=4'}
-
-  [email protected]:
-    resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==}
-    engines: {node: '>= 0.4'}
-
-  [email protected]:
-    resolution: {integrity: sha512-Xm7bpRXnDSX2YE2YFfBk2FnF0ep6tmG7xPh8iHee8MIcrgq762Nkce856dYtJYLkuIoYZvGfTs/PbZhideTcEg==}
-    engines: {node: '>=4'}
-
-  [email protected]:
-    resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==}
-    engines: {node: '>= 0.4'}
-
-  [email protected]:
-    resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==}
-    engines: {node: '>=10', npm: '>=6'}
-
-  [email protected]:
-    resolution: {integrity: sha512-Co2Y9wX854ts6U8gAAPXfn0GmAyctHuK8n0Yhfjd6t30g7yvKjspvvOo9yG+z52PZRgFErt7Ka2pYnXCjLKEpg==}
-    peerDependencies:
-      '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0
-
-  [email protected]:
-    resolution: {integrity: sha512-U+GNwMdSFgzVmfhNm8GJUX88AadB3uo9KpJqS3FaqNIPKgySuvMb+bHPsOmmuWyIcuqZj/pzt1RUIUZns4y2+A==}
-    peerDependencies:
-      '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0
-
-  [email protected]:
-    resolution: {integrity: sha512-ISqQ2frbiNU9vIJkzg7dlPpznPZ4jOiUQ1uSmB0fEHeowtN3COYRsXr/xexn64NpU13P06jc/L5TgiJXOgrbEg==}
-    peerDependencies:
-      '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0
-
-  [email protected]:
-    resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==}
-
-  [email protected]:
-    resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
-
-  [email protected]:
-    resolution: {integrity: sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ==}
-    engines: {node: '>= 0.6.0'}
-
-  [email protected]:
-    resolution: {integrity: sha512-JU0h5APyQNsHOlAM7HnQnPToSDQoEBZqzu/YBlqDnEeymPnZDREeXJA3KBMQee+dKteAxZ2AtvQEvVYdZf241Q==}
-    hasBin: true
-
-  [email protected]:
-    resolution: {integrity: sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==}
-    engines: {node: '>=18'}
-
-  [email protected]:
-    resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==}
-
-  [email protected]:
-    resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==}
-
-  [email protected]:
-    resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
-    engines: {node: '>=8'}
-
-  [email protected]:
-    resolution: {integrity: sha512-AXVQwdhot1eqLihwasPElhX2tAZiBjWdJ9i/Zcj2S6QYIjkx62OKSfnobkriB81C3l4w0rVy3Nt4jaTBltYEpw==}
-    engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
-    hasBin: true
-
-  [email protected]:
-    resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
-
-  [email protected]:
-    resolution: {integrity: sha512-lDsx2BzkKe7gkCYiT5Acj02DpTwDznl/VNN7Psn7M3USPG7Vs/BaClZJJTAG+ufAR9++N1/NiUTdaFBWDIl5TQ==}
-    engines: {node: '>=12'}
-
-  [email protected]:
-    resolution: {integrity: sha512-hwaAu8tct/Zn6Zft4U9BsZcXkYomzpHJX28ofvx7k0Zz2HNz54n1n+tDgxoWFGB4PcFvJXJQloPhaV2eP3Q6EA==}
-    peerDependencies:
-      '@types/react': ^19
-
-  [email protected]:
-    resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==}
-    engines: {node: '>= 0.8'}
-
-  [email protected]:
-    resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==}
-    engines: {node: '>= 0.4'}
-
-  [email protected]:
-    resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==}
-    engines: {node: '>= 0.4'}
-
-  [email protected]:
-    resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==}
-    engines: {node: '>= 0.4'}
-
-  [email protected]:
-    resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
-    engines: {node: '>=6'}
-
-  [email protected]:
-    resolution: {integrity: sha512-e4QKw/O2Kavj2VQTKZWrwzkt3IxOmIlU6ajRb6LP64LHpBo1J67k2Hi4Vu/TgJWsNtynurfS0uK3MaUTCPfu5Q==}
-
-  [email protected]:
-    resolution: {integrity: sha512-A0QJhug0Ly64Ii3eIqHu5X51ebln3k4yTUkY1j8drqpWHVreg/VLijN48cZ1bYPiqOQuqpkIKnzr/Ul8V+p6Cw==}
-
-  [email protected]:
-    resolution: {integrity: sha512-5ON+q7jCTgMp9cjpu4Jo6XbvfYwSB2Ow3kzHKfIyJfaCAOHLbdKPQqGKgfED/R5B+3TFFfe8pegYA+b423SRyA==}
-    engines: {node: '>=10.0.0'}
-
-  [email protected]:
-    resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==}
-
-  [email protected]:
-    resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
-    engines: {node: '>=10'}
-
-  [email protected]:
-    resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==}
-
-  [email protected]:
-    resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==}
-
-  [email protected]:
-    resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==}
-
-  [email protected]:
-    resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==}
-
-  [email protected]:
-    resolution: {integrity: sha512-b7g+y9A0v4mxCW1qUhf3BSVPg+/NvGErk/dOkrDaHA0nQIQGAtrOjlX//9OQtRlSCy+x9rfB5N8yC71lH1nvMw==}
-    peerDependencies:
-      chevrotain: ^11.0.0
-
-  [email protected]:
-    resolution: {integrity: sha512-ci2iJH6LeIkvP9eJW6gpueU8cnZhv85ELY8w8WiFtNjMHA5ad6pQLaJo9mEly/9qUyCpvqX8/POVUTf18/HFdw==}
-
-  [email protected]:
-    resolution: {integrity: sha512-IJnETTalXbsLx1eKEgx19d5L6SRM7cH4vINw/99p/M11HCuXGRWL+6YmCm7FWFGIo6dtWuQoQi1dc5yQ7ESIHg==}
-
-  [email protected]:
-    resolution: {integrity: sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==}
-
-  [email protected]:
-    resolution: {integrity: sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==}
-
-  [email protected]:
-    resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==}
-
-  [email protected]:
-    resolution: {integrity: sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==}
-    engines: {node: '>=6'}
-
-  [email protected]:
-    resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==}
-    engines: {node: '>=6'}
-
-  [email protected]:
-    resolution: {integrity: sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==}
-    engines: {node: '>=0.10.0'}
-
-  [email protected]:
-    resolution: {integrity: sha512-Vsv7kFaXm+ptHDMZ7izaRsP70GgrW9NBNGswt9OZaVBLlE0SNpDq8eu/VGXyF9r7M0azK3Wy7OlYXsuyYLFzHg==}
-    peerDependencies:
-      react: ^18 || ^19 || ^19.0.0-rc
-      react-dom: ^18 || ^19 || ^19.0.0-rc
-
-  [email protected]:
-    resolution: {integrity: sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==}
-
-  [email protected]:
-    resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
-    engines: {node: '>=7.0.0'}
-
-  [email protected]:
-    resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
-
-  [email protected]:
-    resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==}
-
-  [email protected]:
-    resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==}
-    engines: {node: '>=12.5.0'}
-
-  [email protected]:
-    resolution: {integrity: sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==}
-
-  [email protected]:
-    resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==}
-
-  [email protected]:
-    resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==}
-
-  [email protected]:
-    resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==}
-    engines: {node: '>= 10'}
-
-  [email protected]:
-    resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==}
-    engines: {node: '>= 12'}
-
-  [email protected]:
-    resolution: {integrity: sha512-VRhuHOLoKYOy4UbilLbUzbYg93XLjv2PncJC50EuTWPA3gaja1UjBsUP/D/9/juV3vQFr6XBEzn9KCAHdUvOHw==}
-
-  [email protected]:
-    resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
-
-  [email protected]:
-    resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==}
-
-  [email protected]:
-    resolution: {integrity: sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==}
-
-  [email protected]:
-    resolution: {integrity: sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==}
-    engines: {node: '>= 0.6'}
-
-  [email protected]:
-    resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==}
-    engines: {node: '>= 0.6'}
-
-  [email protected]:
-    resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==}
-
-  [email protected]:
-    resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
-
-  [email protected]:
-    resolution: {integrity: sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==}
-    engines: {node: '>=6.6.0'}
-
-  [email protected]:
-    resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==}
-    engines: {node: '>= 0.6'}
-
-  [email protected]:
-    resolution: {integrity: sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==}
-
-  [email protected]:
-    resolution: {integrity: sha512-p9hObIIEENxSV8xIu+V68JjSeARg6UVMG5mR+JEUguG3sI6MsiS1njz2jHmyJDvA+8jX/sytkBHup6kxhM9law==}
-
-  [email protected]:
-    resolution: {integrity: sha512-vDMm9B0xnqqZ8uSBpZ8sNtRtOdmfShrvT6h2TuQGLs0Is+cR0DYbj/KWP6ALVNbWPpqA/qPLoOuppJN07humpA==}
-
-  [email protected]:
-    resolution: {integrity: sha512-s9whTXInMSgAp/NVXVNuVxVKzGH2qck3aQlVHxDCdAEPgtMKwc4Wq6/QKhgdEdgbLSi9rBTAcPoRa6JpiG4ksg==}
-
-  [email protected]:
-    resolution: {integrity: sha512-AzlgcsCbUMymkADOJtQm3wO9S3ltPfYOFD5033keQn9NJzIbtnZj+UdBJe7DYml/8TdbtHJW3j58SOnKhWY/5g==}
-
-  [email protected]:
-    resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==}
-    engines: {node: '>=10'}
-
-  [email protected]:
-    resolution: {integrity: sha512-p0SaNjrHOnQeR8/VnfGbmg9te2kfyYSQ7Sc/j/6DtPL3JQvKxmjO9TSjNFpujqV3vEYYBvNNvXSxzyksBWAx1Q==}
-    engines: {node: '>=12.0.0'}
-
-  [email protected]:
-    resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==}
-    engines: {node: '>= 8'}
-
-  [email protected]:
-    resolution: {integrity: sha512-FHcKFCZcAha3LwfVBhCQbW2nCNbkZXn7KVUJcsT5/P8YmfsVja0FMPJr0B903j/E69HUphKiV9iQArX8SDYA4w==}
-
-  [email protected]:
-    resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==}
-
-  [email protected]:
-    resolution: {integrity: sha512-wgQlVIUJF13Quxiv5e1gstZ08rnZj2XaLHGoFMYXz7SkNfCDOOteKBE6SYRfA9WxxI/iBc3ajfDoc6hb/MRAHQ==}
-    peerDependencies:
-      cytoscape: ^3.2.0
-
-  [email protected]:
-    resolution: {integrity: sha512-ki1/VuRIHFCzxWNrsshHYPs6L7TvLu3DL+TyIGEsRcvVERmxokbf5Gdk7mFxZnTdiGtnA4cfSmjZJMviqSuZrQ==}
-    peerDependencies:
-      cytoscape: ^3.2.0
-
-  [email protected]:
-    resolution: {integrity: sha512-iJc4TwyANnOGR1OmWhsS9ayRS3s+XQ185FmuHObThD+5AeJCakAAbWv8KimMTt08xCCLNgneQwFp+JRJOr9qGQ==}
-    engines: {node: '>=0.10'}
-
-  [email protected]:
-    resolution: {integrity: sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==}
-
-  [email protected]:
-    resolution: {integrity: sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==}
-    engines: {node: '>=12'}
-
-  [email protected]:
-    resolution: {integrity: sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==}
-    engines: {node: '>=12'}
-
-  [email protected]:
-    resolution: {integrity: sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==}
-    engines: {node: '>=12'}
-
-  [email protected]:
-    resolution: {integrity: sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==}
-    engines: {node: '>=12'}
-
-  [email protected]:
-    resolution: {integrity: sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==}
-    engines: {node: '>=12'}
-
-  [email protected]:
-    resolution: {integrity: sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==}
-    engines: {node: '>=12'}
-
-  [email protected]:
-    resolution: {integrity: sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==}
-    engines: {node: '>=12'}
-
-  [email protected]:
-    resolution: {integrity: sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==}
-    engines: {node: '>=12'}
-
-  [email protected]:
-    resolution: {integrity: sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==}
-    engines: {node: '>=12'}
-
-  [email protected]:
-    resolution: {integrity: sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==}
-    engines: {node: '>=12'}
-    hasBin: true
-
-  [email protected]:
-    resolution: {integrity: sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==}
-    engines: {node: '>=12'}
-
-  [email protected]:
-    resolution: {integrity: sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==}
-    engines: {node: '>=12'}
-
-  [email protected]:
-    resolution: {integrity: sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==}
-    engines: {node: '>=12'}
-
-  [email protected]:
-    resolution: {integrity: sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==}
-    engines: {node: '>=12'}
-
-  [email protected]:
-    resolution: {integrity: sha512-637ln3gXKXOwhalDzinUgY83KzNWZRKbYubaG+fGVuc/dxO64RRljtCTnf5ecMyE1RIdtqpkVcq0IbtU2S8j2Q==}
-    engines: {node: '>=12'}
-
-  [email protected]:
-    resolution: {integrity: sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==}
-    engines: {node: '>=12'}
-
-  [email protected]:
-    resolution: {integrity: sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==}
-    engines: {node: '>=12'}
-
-  [email protected]:
-    resolution: {integrity: sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==}
-
-  [email protected]:
-    resolution: {integrity: sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==}
-    engines: {node: '>=12'}
-
-  [email protected]:
-    resolution: {integrity: sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==}
-    engines: {node: '>=12'}
-
-  [email protected]:
-    resolution: {integrity: sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==}
-    engines: {node: '>=12'}
-
-  [email protected]:
-    resolution: {integrity: sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==}
-    engines: {node: '>=12'}
-
-  [email protected]:
-    resolution: {integrity: sha512-nQhsBRmM19Ax5xEIPLMY9ZmJ/cDvd1BG3UVvt5h3WRxKg5zGRbvnteTyWAbzeSvlh3tW7ZEmq4VwR5mB3tutmQ==}
-
-  [email protected]:
-    resolution: {integrity: sha512-A3s5PWiZ9YCXFye1o246KoscMWqf8BsD9eRiJ3He7C9OBaxKhAd5TFCdEx/7VbKtxxTsu//1mMJFrEt572cEyQ==}
-    engines: {node: '>=12'}
-
-  [email protected]:
-    resolution: {integrity: sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==}
-    engines: {node: '>=12'}
-
-  [email protected]:
-    resolution: {integrity: sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==}
-    engines: {node: '>=12'}
-
-  [email protected]:
-    resolution: {integrity: sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==}
-
-  [email protected]:
-    resolution: {integrity: sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==}
-    engines: {node: '>=12'}
-
-  [email protected]:
-    resolution: {integrity: sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==}
-    engines: {node: '>=12'}
-
-  [email protected]:
-    resolution: {integrity: sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==}
-    engines: {node: '>=12'}
-
-  [email protected]:
-    resolution: {integrity: sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==}
-    engines: {node: '>=12'}
-
-  [email protected]:
-    resolution: {integrity: sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==}
-    engines: {node: '>=12'}
-    peerDependencies:
-      d3-selection: 2 - 3
-
-  [email protected]:
-    resolution: {integrity: sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==}
-    engines: {node: '>=12'}
-
-  [email protected]:
-    resolution: {integrity: sha512-e1U46jVP+w7Iut8Jt8ri1YsPOvFpg46k+K8TpCb0P+zjCkjkPnV7WzfDJzMHy1LnA+wj5pLT1wjO901gLXeEhA==}
-    engines: {node: '>=12'}
-
-  [email protected]:
-    resolution: {integrity: sha512-efEhnxpSuwpYOKRm/L5KbqoZmNNukHa/Flty4Wp62JRvgH2ojwVgPgdYyr4twpieZnyRDdIH7PY2mopX26+j2Q==}
-
-  [email protected]:
-    resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==}
-
-  [email protected]:
-    resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==}
-    engines: {node: '>= 0.4'}
-
-  [email protected]:
-    resolution: {integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==}
-    engines: {node: '>= 0.4'}
-
-  [email protected]:
-    resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==}
-    engines: {node: '>= 0.4'}
-
-  [email protected]:
-    resolution: {integrity: sha512-sg8HqoTEulcbbbVXeg84u5UnlsQa8GS5QXMqjjYIhS4abEVVKIUwe0/l/UhrZdKaL/W5eWZNlbTeEIiOXTcsBQ==}
-    peerDependencies:
-      date-fns: ^3.0.0 || ^4.0.0
-
-  [email protected]:
-    resolution: {integrity: sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==}
-
-  [email protected]:
-    resolution: {integrity: sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==}
-
-  [email protected]:
-    resolution: {integrity: sha512-zFBQ7WFRvVRhKcWoUh+ZA1g2HVgUbsZm9sbddh8EC5iv93sui8DVVz1Npvz+r6meo9VKfa8NyLWBsQK1VvIKPA==}
-
-  [email protected]:
-    resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==}
-    peerDependencies:
-      supports-color: '*'
-    peerDependenciesMeta:
-      supports-color:
-        optional: true
-
-  [email protected]:
-    resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==}
-    engines: {node: '>=6.0'}
-    peerDependencies:
-      supports-color: '*'
-    peerDependenciesMeta:
-      supports-color:
-        optional: true
-
-  [email protected]:
-    resolution: {integrity: sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg==}
-
-  [email protected]:
-    resolution: {integrity: sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==}
-
-  [email protected]:
-    resolution: {integrity: sha512-c6fcElNV6ShtZXmsgNgFFV5tVX2PaV4g+MOAkb8eXHvn6sryJBrZa9r0zV6+dtTyoCKxtDy5tyQ5ZwQuidtd+Q==}
-
-  [email protected]:
-    resolution: {integrity: sha512-+8VxcR21HhTy8nOt6jf20w0c9CADrw1O8d+VZ/YzzCt4bJ3uBjw+D1q2osAB8RnpwwaeYBxy0HyKQxD5JBMuuQ==}
-    engines: {node: '>=14.16'}
-
-  [email protected]:
-    resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
-
-  [email protected]:
-    resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==}
-    engines: {node: '>= 0.4'}
-
-  [email protected]:
-    resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==}
-    engines: {node: '>= 0.4'}
-
-  [email protected]:
-    resolution: {integrity: sha512-8nvh+XBe96aCESrGOqMp/84b13H9cdKbG5P2ejQCh4d4sK9RL4371qou9drQjMhvnPmhWl5hnmqbEE0fXr9Xnw==}
-
-  [email protected]:
-    resolution: {integrity: sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==}
-    engines: {node: '>=0.10'}
-
-  [email protected]:
-    resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==}
-    engines: {node: '>= 0.8'}
-
-  [email protected]:
-    resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==}
-    engines: {node: '>=6'}
-
-  [email protected]:
-    resolution: {integrity: sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==}
-    engines: {node: '>=8'}
-
-  [email protected]:
-    resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==}
-
-  [email protected]:
-    resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==}
-
-  [email protected]:
-    resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==}
-    engines: {node: '>=0.10.0'}
-
-  [email protected]:
-    resolution: {integrity: sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==}
-
-  [email protected]:
-    resolution: {integrity: sha512-r+f6MYR1gGN1eJv0TVQbhA7if/U7P87cdPl3HN5rikqaBSBxLiCb/b9O+2eG0cxz0ghyU+mU1QkbsOwERMYlWQ==}
-
-  [email protected]:
-    resolution: {integrity: sha512-JVUnt+DUIzu87TABbhPmNfVdBDt18BLOWjMUFJMSi/Qqg7NTYtabbvSNJGOJ7afbRuv9D/lngizHtP7QyLQ+9w==}
-    engines: {node: '>=12'}
-
-  [email protected]:
-    resolution: {integrity: sha512-+CHgPFzuoTQTt7cOYCV6MOw2w8vqEn/ap1yv4bpZOWL03u7rlVRQhUY0WYT3rHsgVTXwYQDZaSUJSQrMBUKuWg==}
-    hasBin: true
-
-  [email protected]:
-    resolution: {integrity: sha512-quIpnYznjU9lHshEOAYLoZ9s3jweleHlZIAWR/jX9gAWNg/JhQ1wj0KGRf7/Zm+obRrYd9GjPVJg790QY9N5AQ==}
-    peerDependencies:
-      '@aws-sdk/client-rds-data': '>=3'
-      '@cloudflare/workers-types': '>=4'
-      '@electric-sql/pglite': '>=0.2.0'
-      '@libsql/client': '>=0.10.0'
-      '@libsql/client-wasm': '>=0.10.0'
-      '@neondatabase/serverless': '>=0.10.0'
-      '@op-engineering/op-sqlite': '>=2'
-      '@opentelemetry/api': ^1.4.1
-      '@planetscale/database': '>=1.13'
-      '@prisma/client': '*'
-      '@tidbcloud/serverless': '*'
-      '@types/better-sqlite3': '*'
-      '@types/pg': '*'
-      '@types/sql.js': '*'
-      '@upstash/redis': '>=1.34.7'
-      '@vercel/postgres': '>=0.8.0'
-      '@xata.io/client': '*'
-      better-sqlite3: '>=7'
-      bun-types: '*'
-      expo-sqlite: '>=14.0.0'
-      gel: '>=2'
-      knex: '*'
-      kysely: '*'
-      mysql2: '>=2'
-      pg: '>=8'
-      postgres: '>=3'
-      prisma: '*'
-      sql.js: '>=1'
-      sqlite3: '>=5'
-    peerDependenciesMeta:
-      '@aws-sdk/client-rds-data':
-        optional: true
-      '@cloudflare/workers-types':
-        optional: true
-      '@electric-sql/pglite':
-        optional: true
-      '@libsql/client':
-        optional: true
-      '@libsql/client-wasm':
-        optional: true
-      '@neondatabase/serverless':
-        optional: true
-      '@op-engineering/op-sqlite':
-        optional: true
-      '@opentelemetry/api':
-        optional: true
-      '@planetscale/database':
-        optional: true
-      '@prisma/client':
-        optional: true
-      '@tidbcloud/serverless':
-        optional: true
-      '@types/better-sqlite3':
-        optional: true
-      '@types/pg':
-        optional: true
-      '@types/sql.js':
-        optional: true
-      '@upstash/redis':
-        optional: true
-      '@vercel/postgres':
-        optional: true
-      '@xata.io/client':
-        optional: true
-      better-sqlite3:
-        optional: true
-      bun-types:
-        optional: true
-      expo-sqlite:
-        optional: true
-      gel:
-        optional: true
-      knex:
-        optional: true
-      kysely:
-        optional: true
-      mysql2:
-        optional: true
-      pg:
-        optional: true
-      postgres:
-        optional: true
-      prisma:
-        optional: true
-      sql.js:
-        optional: true
-      sqlite3:
-        optional: true
-
-  [email protected]:
-    resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==}
-    engines: {node: '>= 0.4'}
-
-  [email protected]:
-    resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==}
-
-  [email protected]:
-    resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==}
-    engines: {node: '>=0.10.0'}
-    hasBin: true
-
-  [email protected]:
-    resolution: {integrity: sha512-ZCphxFW3Q1TVhcgS9blfut1PX8lusVi2SvXQgmEEnK4TCmE1JhH2JkjJN+DNt0pJJwfBri5AROBnz2b/C+YU9g==}
-
-  [email protected]:
-    resolution: {integrity: sha512-eJp3QRe79pjwa+duv+n7+5YsNhRcMl812EcFVwrnRvYKoNPoQb5qxU8DG6Bgwji0akHdp6D4Ln6tYLG58MFSow==}
-
-  [email protected]:
-    resolution: {integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==}
-
-  [email protected]:
-    resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
-
-  [email protected]:
-    resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==}
-    engines: {node: '>= 0.8'}
-
-  [email protected]:
-    resolution: {integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==}
-
-  [email protected]:
-    resolution: {integrity: sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==}
-    engines: {node: '>=10.13.0'}
-
-  [email protected]:
-    resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==}
-    engines: {node: '>=0.12'}
-
-  [email protected]:
-    resolution: {integrity: sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==}
-
-  [email protected]:
-    resolution: {integrity: sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==}
-    engines: {node: '>= 0.4'}
-
-  [email protected]:
-    resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==}
-    engines: {node: '>= 0.4'}
-
-  [email protected]:
-    resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==}
-    engines: {node: '>= 0.4'}
-
-  [email protected]:
-    resolution: {integrity: sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==}
-    engines: {node: '>= 0.4'}
-
-  [email protected]:
-    resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==}
-    engines: {node: '>= 0.4'}
-
-  [email protected]:
-    resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==}
-    engines: {node: '>= 0.4'}
-
-  [email protected]:
-    resolution: {integrity: sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==}
-    engines: {node: '>= 0.4'}
-
-  [email protected]:
-    resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==}
-    engines: {node: '>= 0.4'}
-
-  [email protected]:
-    resolution: {integrity: sha512-4CyanoAudUSBAn5K13H4JhsMH6L9ZP7XbLVe/dKybkxMO7eDyLsT8UHl9TRNrU2Gr9nz+FovfSIjuXWJ81uVwQ==}
-
-  [email protected]:
-    resolution: {integrity: sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw==}
-
-  [email protected]:
-    resolution: {integrity: sha512-H2/S7Pm8a9CL1uhp9OvjwrBh5Pvx0H8qVOxNu8Wed9Y7qv56MPtq+GGM8RJpq6glYJn9Wspr8uw7l55uyinNeg==}
-    peerDependencies:
-      esbuild: '>=0.12 <1'
-
-  [email protected]:
-    resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==}
-    engines: {node: '>=12'}
-    hasBin: true
-
-  [email protected]:
-    resolution: {integrity: sha512-9RiGKvCwaqxO2owP61uQ4BgNborAQskMR6QusfWzQqv7AZOg5oGehdY2pRJMTKuwxd1IDBP4rSbI5lHzU7SMsQ==}
-    engines: {node: '>=18'}
-    hasBin: true
-
-  [email protected]:
-    resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
-    engines: {node: '>=6'}
-
-  [email protected]:
-    resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==}
-
-  [email protected]:
-    resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
-    engines: {node: '>=10'}
-
-  [email protected]:
-    resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==}
-    engines: {node: '>=12'}
-
-  [email protected]:
-    resolution: {integrity: sha512-cGr3VQlPsZBEv8rtYp4BpG1KNXDqGvPo9VC1iaCgIA11OfziC/vczng+TnAS3WpRIR3Q5ye/6yl+CRUuZ1fPGg==}
-    peerDependencies:
-      eslint: ^7.23.0 || ^8.0.0 || ^9.0.0
-      typescript: '>=3.3.1'
-    peerDependenciesMeta:
-      typescript:
-        optional: true
-
-  [email protected]:
-    resolution: {integrity: sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==}
-    hasBin: true
-    peerDependencies:
-      eslint: '>=7.0.0'
-
-  [email protected]:
-    resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==}
-
-  [email protected]:
-    resolution: {integrity: sha512-A1rHYb06zjMGAxdLSkN2fXPBwuSaQ0iO5M/hdyS0Ajj1VBaRp0sPD3dn1FhME3c/JluGFbwSxyCfqdSbtQLAHQ==}
-    engines: {node: ^14.18.0 || >=16.0.0}
-    peerDependencies:
-      eslint: '*'
-      eslint-plugin-import: '*'
-      eslint-plugin-import-x: '*'
-    peerDependenciesMeta:
-      eslint-plugin-import:
-        optional: true
-      eslint-plugin-import-x:
-        optional: true
-
-  [email protected]:
-    resolution: {integrity: sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw==}
-    engines: {node: '>=4'}
-    peerDependencies:
-      '@typescript-eslint/parser': '*'
-      eslint: '*'
-      eslint-import-resolver-node: '*'
-      eslint-import-resolver-typescript: '*'
-      eslint-import-resolver-webpack: '*'
-    peerDependenciesMeta:
-      '@typescript-eslint/parser':
-        optional: true
-      eslint:
-        optional: true
-      eslint-import-resolver-node:
-        optional: true
-      eslint-import-resolver-typescript:
-        optional: true
-      eslint-import-resolver-webpack:
-        optional: true
-
-  [email protected]:
-    resolution: {integrity: sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==}
-    engines: {node: '>=4'}
-    peerDependencies:
-      '@typescript-eslint/parser': '*'
-      eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9
-    peerDependenciesMeta:
-      '@typescript-eslint/parser':
-        optional: true
-
-  [email protected]:
-    resolution: {integrity: sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==}
-    engines: {node: '>=4.0'}
-    peerDependencies:
-      eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9
-
-  [email protected]:
-    resolution: {integrity: sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==}
-    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
-
-  [email protected]:
-    resolution: {integrity: sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==}
-    engines: {node: '>=4'}
-    peerDependencies:
-      eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7
-
-  [email protected]:
-    resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==}
-    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-
-  [email protected]:
-    resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==}
-    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
-
-  [email protected]:
-    resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==}
-    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-
-  [email protected]:
-    resolution: {integrity: sha512-t5aPOpmtJcZcz5UJyY2GbvpDlsK5E8JqRqoKtfiKE3cNh437KIqfJr3A3AKf5k64NPx6d0G3dno6XDY05PqPtw==}
-    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-    hasBin: true
-    peerDependencies:
-      jiti: '*'
-    peerDependenciesMeta:
-      jiti:
-        optional: true
-
-  [email protected]:
-    resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==}
-    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-
-  [email protected]:
-    resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==}
-    engines: {node: '>=0.10'}
-
-  [email protected]:
-    resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==}
-    engines: {node: '>=4.0'}
-
-  [email protected]:
-    resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
-    engines: {node: '>=4.0'}
-
-  [email protected]:
-    resolution: {integrity: sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw==}
-
-  [email protected]:
-    resolution: {integrity: sha512-8U5eiL6BTrPxp/CHbs2yMgP8ftMhR5ww1eIKoWRMlqvltHF8fZn5LRDvTKuxD3DUn+shRbLGqXemcP51oFCsGQ==}
-
-  [email protected]:
-    resolution: {integrity: sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==}
-
-  [email protected]:
-    resolution: {integrity: sha512-2CAASclonf+JFWBNJPndcOpA8EMJwa0Q8LUFJEKqXLW6+qBvbFZuF5gItbQOs/umBUkjviCSDCbBwU2cXbmrhQ==}
-
-  [email protected]:
-    resolution: {integrity: sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg==}
-
-  [email protected]:
-    resolution: {integrity: sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==}
-
-  [email protected]:
-    resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==}
-
-  [email protected]:
-    resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
-    engines: {node: '>=0.10.0'}
-
-  [email protected]:
-    resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==}
-    engines: {node: '>= 0.6'}
-
-  [email protected]:
-    resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==}
-
-  [email protected]:
-    resolution: {integrity: sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==}
-    engines: {node: '>= 18'}
-
-  [email protected]:
-    resolution: {integrity: sha512-VO5fQUzZtI6C+vx4w/4BWJpg3s/5l+6pRQEHzFRM8WFi4XffSP1Z+4qi7GbjWbvRQEbdIco5mIMq+zX4rPuLrw==}
-
-  [email protected]:
-    resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==}
-    engines: {node: '>=0.10.0'}
-
-  [email protected]:
-    resolution: {integrity: sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==}
-    engines: {node: '>=0.10.0'}
-
-  [email protected]:
-    resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==}
-
-  [email protected]:
-    resolution: {integrity: sha512-dl0O9Vhju8IrcLndv2eU4ldt1ftXMqqfgN4H1cpmGV7P6jeB9FwpN9a2c8DPGE1Ys88rNUJVYDHq73CGAGOPfQ==}
-
-  [email protected]:
-    resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
-
-  [email protected]:
-    resolution: {integrity: sha512-xwP+dG/in/nJelMOUEQBiIYeOoHKihWPB2sNZ8ZeDbZFoGb1OwTGMggGRgg6CRitNx7kmHgtIz2dOHDQ8Ap7Bw==}
-    engines: {node: '>=6.0.0'}
-
-  [email protected]:
-    resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==}
-    engines: {node: '>=8.6.0'}
-
-  [email protected]:
-    resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==}
-    engines: {node: '>=8.6.0'}
-
-  [email protected]:
-    resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
-
-  [email protected]:
-    resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
-
-  [email protected]:
-    resolution: {integrity: sha512-kAqZq1TlgBjZcLr5mcN6NP5Rv4V2f22z00c3g8vRrwkcqjerx7BEhPbOnWCPqaHUl2XWQBJQvOT/FQhdMT7X/Q==}
-
-  [email protected]:
-    resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==}
-
-  [email protected]:
-    resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==}
-
-  [email protected]:
-    resolution: {integrity: sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==}
-    peerDependencies:
-      picomatch: ^3 || ^4
-    peerDependenciesMeta:
-      picomatch:
-        optional: true
-
-  [email protected]:
-    resolution: {integrity: sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==}
-
-  [email protected]:
-    resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==}
-    engines: {node: '>=16.0.0'}
-
-  [email protected]:
-    resolution: {integrity: sha512-s8KNnmIDTBoD0p9uJ9uD0XY38SCeBOtj0UMXyQSLg1Ypfrfj8+dAvwsLjYQkQ2GjhVtp2HrnF5cJzMhBjfD8HA==}
-    engines: {node: '>= 10'}
-
-  [email protected]:
-    resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==}
-
-  [email protected]:
-    resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
-    engines: {node: '>=8'}
-
-  [email protected]:
-    resolution: {integrity: sha512-qWeTREPoT7I0bifpPUXtxkZJ1XJzxWtfoWWkdVGqa+eCr3SHW/Ocp89o8vLvbUuQnadybJpjOKu4V+RwO6sGng==}
-    engines: {node: '>=14.16'}
-
-  [email protected]:
-    resolution: {integrity: sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==}
-    engines: {node: '>= 0.8'}
-
-  [email protected]:
-    resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==}
-
-  [email protected]:
-    resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
-    engines: {node: '>=10'}
-
-  [email protected]:
-    resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==}
-    engines: {node: '>=16'}
-
-  [email protected]:
-    resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==}
-
-  [email protected]:
-    resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==}
-    engines: {node: '>= 0.4'}
-
-  [email protected]:
-    resolution: {integrity: sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==}
-    engines: {node: '>=0.10.0'}
-
-  [email protected]:
-    resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==}
-    engines: {node: '>= 0.6'}
-
-  [email protected]:
-    resolution: {integrity: sha512-HMi5HRoRCTou+3fb3h9oTLyJGBxHfW+HnNE25tAXOvVx/IvwMHK0cx7IR4a2ZU6sh3IX1Z+4ts32PcYBOqka8w==}
-    peerDependencies:
-      '@emotion/is-prop-valid': '*'
-      react: ^18.0.0 || ^19.0.0
-      react-dom: ^18.0.0 || ^19.0.0
-    peerDependenciesMeta:
-      '@emotion/is-prop-valid':
-        optional: true
-      react:
-        optional: true
-      react-dom:
-        optional: true
-
-  [email protected]:
-    resolution: {integrity: sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==}
-    engines: {node: '>= 0.8'}
-
-  [email protected]:
-    resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
-
-  [email protected]:
-    resolution: {integrity: sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==}
-    engines: {node: '>= 0.4'}
-
-  [email protected]:
-    resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==}
-
-  [email protected]:
-    resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==}
-    engines: {node: '>=6.9.0'}
-
-  [email protected]:
-    resolution: {integrity: sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==}
-    engines: {node: '>=18'}
-
-  [email protected]:
-    resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==}
-    engines: {node: '>= 0.4'}
-
-  [email protected]:
-    resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==}
-    engines: {node: '>=6'}
-
-  [email protected]:
-    resolution: {integrity: sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==}
-    engines: {node: '>=8'}
-
-  [email protected]:
-    resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==}
-    engines: {node: '>= 0.4'}
-
-  [email protected]:
-    resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==}
-    engines: {node: '>= 0.4'}
-
-  [email protected]:
-    resolution: {integrity: sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ==}
-
-  [email protected]:
-    resolution: {integrity: sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==}
-    engines: {node: '>=0.10.0'}
-
-  [email protected]:
-    resolution: {integrity: sha512-Zrsi8r4t1LVW950keaWcsURuZUQwUaMKjvJgTCY125vkW6OiEBkatE7ScJDbpqKHdZwb///7FVC21SE3iFK3PQ==}
-
-  [email protected]:
-    resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
-    engines: {node: '>= 6'}
-
-  [email protected]:
-    resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
-    engines: {node: '>=10.13.0'}
-
-  [email protected]:
-    resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==}
-    engines: {node: '>=18'}
-
-  [email protected]:
-    resolution: {integrity: sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==}
-    engines: {node: '>=18'}
-
-  [email protected]:
-    resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==}
-    engines: {node: '>= 0.4'}
-
-  [email protected]:
-    resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==}
-    engines: {node: '>= 0.4'}
-
-  [email protected]:
-    resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
-
-  [email protected]:
-    resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==}
-
-  [email protected]:
-    resolution: {integrity: sha512-3GKBOn+m2LX9iq+JC1064cSFprJY4jL1jCXTcpnfER5HYE2l/4EfWSGzkPa/ZDBmYI0ZOEj5VHV/eKnPGkHuOg==}
-
-  [email protected]:
-    resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==}
-    engines: {node: '>= 0.4'}
-
-  [email protected]:
-    resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
-    engines: {node: '>=8'}
-
-  [email protected]:
-    resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==}
-
-  [email protected]:
-    resolution: {integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==}
-    engines: {node: '>= 0.4'}
-
-  [email protected]:
-    resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==}
-    engines: {node: '>= 0.4'}
-
-  [email protected]:
-    resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==}
-    engines: {node: '>= 0.4'}
-
-  [email protected]:
-    resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
-    engines: {node: '>= 0.4'}
-
-  [email protected]:
-    resolution: {integrity: sha512-N+LqofjR2zuzTjCPzyDUdSshy4Ma6li7p/c3pA78uTwzFgENbgbUrm2ugwsOdcjI1muO+o6Dgzp9p8WHtn/39Q==}
-
-  [email protected]:
-    resolution: {integrity: sha512-zJfpXq44yff2hmE0XmwEOzdWin5xwH+QIhMLOScpX91e/NSGPsAzNCvLQDIEPyO2TXi+lBmU6hjLIhV8MwP2kw==}
-
-  [email protected]:
-    resolution: {integrity: sha512-CUSRHXyKjzHov8yKsQjGOElXy/3EKpyX56ELnkHH34vDVw1N1XSQ1ZcAvTyAPtGqLTuKP/uxM+aLkSPqF/EtMw==}
-
-  [email protected]:
-    resolution: {integrity: sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg==}
-
-  [email protected]:
-    resolution: {integrity: sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==}
-
-  [email protected]:
-    resolution: {integrity: sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==}
-
-  [email protected]:
-    resolution: {integrity: sha512-Y8/SBAHkZGoNkpzqqfCldijcuUKh7/su31kEBp67cFY09Wy0mTRgtsLYsiIxMJxlu0f6AA5SUTbDR8K0rxnbUw==}
-
-  [email protected]:
-    resolution: {integrity: sha512-48+B/rJWAp0jamNbAAf9M7Uf//UVqAoMmgXhBdxTDJLGKY+LRnZ99qcG+Qjl5HfMpYNzS5v4EAwVEF34LeAj7w==}
-
-  [email protected]:
-    resolution: {integrity: sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==}
-
-  [email protected]:
-    resolution: {integrity: sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg==}
-
-  [email protected]:
-    resolution: {integrity: sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw==}
-
-  [email protected]:
-    resolution: {integrity: sha512-KK6y/BN8lbaq654j7JgBydev7wuNMcID54lkRav1P0CaE1e47P72AWWPiGKXTJU271ooYzcvTAn/Zt0REnvc7A==}
-
-  [email protected]:
-    resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==}
-
-  [email protected]:
-    resolution: {integrity: sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==}
-
-  [email protected]:
-    resolution: {integrity: sha512-7xgomUX6ADmcYzFik0HzAxh/73YlKR9bmFzf51CZwR+b6YtzU2m0u49hQCqV6SvlqIqsaxovfwdvbnsw3b/zpg==}
-
-  [email protected]:
-    resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==}
-
-  [email protected]:
-    resolution: {integrity: sha512-p6fyzl+mQo6uhESLxbF5WlBOAJMDh36PljwlKtP5V1v09NxlqGru3ShK+4wKhSuhuYf8qxMmrivHOa/M7q0sMg==}
-    engines: {node: '>=16.9.0'}
-
-  [email protected]:
-    resolution: {integrity: sha512-ol6UPyBWqsrO6EJySPz2O7ZSr856WDrEzM5zMqp+FJJLGMW35cLYmmZnl0vztAZxRUoNZJFTCohfjuIJ8I4QBQ==}
-
-  [email protected]:
-    resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==}
-
-  [email protected]:
-    resolution: {integrity: sha512-fPU6BHNpsyIhr8yyMpTLLxAbkaK8ArIBcmZIRiBLiDhjeqvXolaEmDGmELFuX9I4xDcaKKcJl+TKZLqruBbmWA==}
-    engines: {node: '>=8.0.0'}
-
-  [email protected]:
-    resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==}
-    engines: {node: '>= 0.8'}
-
-  [email protected]:
-    resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==}
-    engines: {node: '>=0.10.0'}
-
-  [email protected]:
-    resolution: {integrity: sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==}
-    engines: {node: '>=0.10.0'}
-
-  [email protected]:
-    resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==}
-    engines: {node: '>= 4'}
-
-  [email protected]:
-    resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==}
-    engines: {node: '>= 4'}
-
-  [email protected]:
-    resolution: {integrity: sha512-d/+XTN3zfODyjr89gM3mPq1WNX2B8pYsu7eORitdwyA2sBubnTl3laYlBk4sXY5FUa5qTZGBDPJICVbvqzjlbw==}
-
-  [email protected]:
-    resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==}
-    engines: {node: '>=6'}
-
-  [email protected]:
-    resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
-    engines: {node: '>=0.8.19'}
-
-  [email protected]:
-    resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
-
-  [email protected]:
-    resolution: {integrity: sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q==}
-
-  [email protected]:
-    resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==}
-    engines: {node: '>= 0.4'}
-
-  [email protected]:
-    resolution: {integrity: sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==}
-
-  [email protected]:
-    resolution: {integrity: sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==}
-    engines: {node: '>=12'}
-
-  [email protected]:
-    resolution: {integrity: sha512-7m1vEcPCxXYI8HqnL8CKI6siDyD+eIWSwgB3DZA+ZTogxk9I4CDnj4wilt9x/+/QbHI4YG5YZNmC6458/e9Ktg==}
-    deprecated: The Intersection Observer polyfill is no longer needed and can safely be removed. Intersection Observer has been Baseline since 2019.
-
-  [email protected]:
-    resolution: {integrity: sha512-m3Ofv/X/tV8Y3tHXLohcuVuhWKo7BBq62cqY15etqmLxg2DZ34AGGgQDeR+SCta2+zICb1NX83af0GJmbQ1++g==}
-
-  [email protected]:
-    resolution: {integrity: sha512-DRebOWuqDvxunfkNJAlc3IzWIPD5xVxwUNbHr7xKB8E6aLJxIPfNX3CoMJghcFjpv6RWQsrcJbghtEwSPoJqMA==}
-
-  [email protected]:
-    resolution: {integrity: sha512-C6uC+kleiIMmjViJINWk80sOQw5lEzse1ZmvD+S/s8p8CWapftSaC+kocGTx6xrbrJ4WmYQGC08ffHLr6ToR6Q==}
-    engines: {node: '>=12.22.0'}
-
-  [email protected]:
-    resolution: {integrity: sha512-NWv9YLW4PoW2B7xtzaS3NCot75m6nK7Icdv0o3lfMceJVRfSoQwqD4wEH5rLwoKJwUiZ/rfpiVBhnaF0FK4HoA==}
-    engines: {node: '>= 12'}
-
-  [email protected]:
-    resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==}
-    engines: {node: '>= 0.10'}
-
-  [email protected]:
-    resolution: {integrity: sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==}
-
-  [email protected]:
-    resolution: {integrity: sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==}
-
-  [email protected]:
-    resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==}
-    engines: {node: '>= 0.4'}
-
-  [email protected]:
-    resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==}
-
-  [email protected]:
-    resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==}
-
-  [email protected]:
-    resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==}
-    engines: {node: '>= 0.4'}
-
-  [email protected]:
-    resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==}
-    engines: {node: '>= 0.4'}
-
-  [email protected]:
-    resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==}
-    engines: {node: '>= 0.4'}
-
-  [email protected]:
-    resolution: {integrity: sha512-gNCGbnnnnFAUGKeZ9PdbyeGYJqewpmc2aKHUEMO5nQPWU9lOmv7jcmQIv+qHD8fXW6W7qfuCwX4rY9LNRjXrkQ==}
-
-  [email protected]:
-    resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==}
-    engines: {node: '>= 0.4'}
-
-  [email protected]:
-    resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==}
-    engines: {node: '>= 0.4'}
-
-  [email protected]:
-    resolution: {integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==}
-    engines: {node: '>= 0.4'}
-
-  [email protected]:
-    resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==}
-    engines: {node: '>= 0.4'}
-
-  [email protected]:
-    resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==}
-
-  [email protected]:
-    resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==}
-    engines: {node: '>=0.10.0'}
-
-  [email protected]:
-    resolution: {integrity: sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==}
-    engines: {node: '>=0.10.0'}
-
-  [email protected]:
-    resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
-    engines: {node: '>=0.10.0'}
-
-  [email protected]:
-    resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==}
-    engines: {node: '>= 0.4'}
-
-  [email protected]:
-    resolution: {integrity: sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==}
-    engines: {node: '>= 0.4'}
-
-  [email protected]:
-    resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
-    engines: {node: '>=0.10.0'}
-
-  [email protected]:
-    resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==}
-
-  [email protected]:
-    resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==}
-    engines: {node: '>= 0.4'}
-
-  [email protected]:
-    resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==}
-    engines: {node: '>= 0.4'}
-
-  [email protected]:
-    resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==}
-    engines: {node: '>= 0.4'}
-
-  [email protected]:
-    resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
-    engines: {node: '>=0.12.0'}
-
-  [email protected]:
-    resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==}
-    engines: {node: '>=12'}
-
-  [email protected]:
-    resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==}
-    engines: {node: '>=0.10.0'}
-
-  [email protected]:
-    resolution: {integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==}
-
-  [email protected]:
-    resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==}
-    engines: {node: '>= 0.4'}
-
-  [email protected]:
-    resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==}
-    engines: {node: '>= 0.4'}
-
-  [email protected]:
-    resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==}
-    engines: {node: '>= 0.4'}
-
-  [email protected]:
-    resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==}
-    engines: {node: '>= 0.4'}
-
-  [email protected]:
-    resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==}
-    engines: {node: '>= 0.4'}
-
-  [email protected]:
-    resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==}
-    engines: {node: '>= 0.4'}
-
-  [email protected]:
-    resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==}
-    engines: {node: '>= 0.4'}
-
-  [email protected]:
-    resolution: {integrity: sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==}
-    engines: {node: '>= 0.4'}
-
-  [email protected]:
-    resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==}
-    engines: {node: '>= 0.4'}
-
-  [email protected]:
-    resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==}
-
-  [email protected]:
-    resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
-
-  [email protected]:
-    resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==}
-    engines: {node: '>=0.10.0'}
-
-  [email protected]:
-    resolution: {integrity: sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==}
-    engines: {node: '>= 0.4'}
-
-  [email protected]:
-    resolution: {integrity: sha512-wpHYzhxiVQL+IV05BLE2Xn34zW1S223hvjtqk0+gsPrwd/8JNLXJgZZM/iPFsYc1xyphF+6M6EvdE5E9MBGkDA==}
-    engines: {node: '>=10'}
-    hasBin: true
-
-  [email protected]:
-    resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==}
-    hasBin: true
-
-  [email protected]:
-    resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==}
-    engines: {node: '>=10'}
-
-  [email protected]:
-    resolution: {integrity: sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==}
-    engines: {node: '>=14'}
-
-  [email protected]:
-    resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
-
-  [email protected]:
-    resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
-    hasBin: true
-
-  [email protected]:
-    resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==}
-    engines: {node: '>=6'}
-    hasBin: true
-
-  [email protected]:
-    resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==}
-
-  [email protected]:
-    resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==}
-
-  [email protected]:
-    resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
-
-  [email protected]:
-    resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
-
-  [email protected]:
-    resolution: {integrity: sha512-SzoRg7ux5DWTII9J2qkrZrqV1gt+rTaoufMxEzXbS26Uid0NwaJd123HcoB80TgubEppxxIGdNxCx50fEoEWQA==}
-
-  [email protected]:
-    resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==}
-    hasBin: true
-
-  [email protected]:
-    resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==}
-    engines: {node: '>=6'}
-    hasBin: true
-
-  [email protected]:
-    resolution: {integrity: sha512-eURjAyz5iX1H8BOYAfzvdPfIKK53V7mCpBTe7Kb16PaM8JSXEcUQNBQaiWMI8wY5RvNOPj4GccMjTlfwRBd+oQ==}
-
-  [email protected]:
-    resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==}
-    engines: {node: '>=4.0'}
-
-  [email protected]:
-    resolution: {integrity: sha512-woHRUZ/iF23GBP1dkDQMh1QBad9dmr8/PAwNA54VrSOVYgI12MAcE14TqnDdQOdzyEonGzMepYnqBMYdsoAr8Q==}
-    hasBin: true
-
-  [email protected]:
-    resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
-
-  [email protected]:
-    resolution: {integrity: sha512-Ls993zuzfayK269Svk9hzpeGUKob/sIgZzyHYdjQoAdQetRKpOLj+k/QQQ/6Qi0Yz65mlROrfd+Ev+1+7dz9Kw==}
-
-  [email protected]:
-    resolution: {integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==}
-
-  [email protected]:
-    resolution: {integrity: sha512-QJv/h939gDpvT+9SiLVlY7tZC3xB2qK57v0J04Sh9wpMb6MP1q8gB21L3WIo8T5P1MSMg3Ep14L7KkDCFG3y4w==}
-    engines: {node: '>=16.0.0'}
-
-  [email protected]:
-    resolution: {integrity: sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==}
-
-  [email protected]:
-    resolution: {integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==}
-    engines: {node: '>=0.10'}
-
-  [email protected]:
-    resolution: {integrity: sha512-8h2oVEZNktL4BH2JCOI90iD1yXwL6iNW7KcCKT2QZgQJR2vbqDsldCTPRU9NifTCqHZci57XvQQ15YTu+sTYPg==}
-
-  [email protected]:
-    resolution: {integrity: sha512-dp3s92+uNI1hWIpPGH3jK2kxE2lMjdXdr+DH8ynZHpd6PUlH6x6cbuXnoMmiNumznqaNO31xu9e79F0uuZ0JFg==}
-
-  [email protected]:
-    resolution: {integrity: sha512-RiNJWmeqQdKIeHuVXgshmxIHu144a2AMYtLxKf8Nm1j93pisDPexuQDHKNdQlbo37wdyDQibLjY9JKGIiD7gaw==}
-    peerDependencies:
-      react: ^18.0.0 || ^19.0.0
-      react-dom: ^18.0.0 || ^19.0.0
-
-  [email protected]:
-    resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
-    engines: {node: '>= 0.8.0'}
-
-  [email protected]:
-    resolution: {integrity: sha512-BH9sEdOCahSgmkVhBLeU7Hc9DWeZ1Eb6wNS6Da8igvUwAe0sqROHddIlvU06q3WyXVEOYDZ6ykBZQnjTbmo4+A==}
-    engines: {node: '>= 12.0.0'}
-    cpu: [arm64]
-    os: [android]
-
-  [email protected]:
-    resolution: {integrity: sha512-ylTcDJBN3Hp21TdhRT5zBOIi73P6/W0qwvlFEk22fkdXchtNTOU4Qc37SkzV+EKYxLouZ6M4LG9NfZ1qkhhBWA==}
-    engines: {node: '>= 12.0.0'}
-    cpu: [arm64]
-    os: [darwin]
-
-  [email protected]:
-    resolution: {integrity: sha512-oBZgKchomuDYxr7ilwLcyms6BCyLn0z8J0+ZZmfpjwg9fRVZIR5/GMXd7r9RH94iDhld3UmSjBM6nXWM2TfZTQ==}
-    engines: {node: '>= 12.0.0'}
-    cpu: [x64]
-    os: [darwin]
-
-  [email protected]:
-    resolution: {integrity: sha512-c2bH6xTrf4BDpK8MoGG4Bd6zAMZDAXS569UxCAGcA7IKbHNMlhGQ89eRmvpIUGfKWNVdbhSbkQaWhEoMGmGslA==}
-    engines: {node: '>= 12.0.0'}
-    cpu: [x64]
-    os: [freebsd]
-
-  [email protected]:
-    resolution: {integrity: sha512-eVdpxh4wYcm0PofJIZVuYuLiqBIakQ9uFZmipf6LF/HRj5Bgm0eb3qL/mr1smyXIS1twwOxNWndd8z0E374hiA==}
-    engines: {node: '>= 12.0.0'}
-    cpu: [arm]
-    os: [linux]
-
-  [email protected]:
-    resolution: {integrity: sha512-UK65WJAbwIJbiBFXpxrbTNArtfuznvxAJw4Q2ZGlU8kPeDIWEX1dg3rn2veBVUylA2Ezg89ktszWbaQnxD/e3A==}
-    engines: {node: '>= 12.0.0'}
-    cpu: [arm64]
-    os: [linux]
-
-  [email protected]:
-    resolution: {integrity: sha512-5Vh9dGeblpTxWHpOx8iauV02popZDsCYMPIgiuw97OJ5uaDsL86cnqSFs5LZkG3ghHoX5isLgWzMs+eD1YzrnA==}
-    engines: {node: '>= 12.0.0'}
-    cpu: [arm64]
-    os: [linux]
-
-  [email protected]:
-    resolution: {integrity: sha512-Cfd46gdmj1vQ+lR6VRTTadNHu6ALuw2pKR9lYq4FnhvgBc4zWY1EtZcAc6EffShbb1MFrIPfLDXD6Xprbnni4w==}
-    engines: {node: '>= 12.0.0'}
-    cpu: [x64]
-    os: [linux]
-
-  [email protected]:
-    resolution: {integrity: sha512-XJaLUUFXb6/QG2lGIW6aIk6jKdtjtcffUT0NKvIqhSBY3hh9Ch+1LCeH80dR9q9LBjG3ewbDjnumefsLsP6aiA==}
-    engines: {node: '>= 12.0.0'}
-    cpu: [x64]
-    os: [linux]
-
-  [email protected]:
-    resolution: {integrity: sha512-FZn+vaj7zLv//D/192WFFVA0RgHawIcHqLX9xuWiQt7P0PtdFEVaxgF9rjM/IRYHQXNnk61/H/gb2Ei+kUQ4xQ==}
-    engines: {node: '>= 12.0.0'}
-    cpu: [arm64]
-    os: [win32]
-
-  [email protected]:
-    resolution: {integrity: sha512-5g1yc73p+iAkid5phb4oVFMB45417DkRevRbt/El/gKXJk4jid+vPFF/AXbxn05Aky8PapwzZrdJShv5C0avjw==}
-    engines: {node: '>= 12.0.0'}
-    cpu: [x64]
-    os: [win32]
-
-  [email protected]:
-    resolution: {integrity: sha512-utfs7Pr5uJyyvDETitgsaqSyjCb2qNRAtuqUeWIAKztsOYdcACf2KtARYXg2pSvhkt+9NfoaNY7fxjl6nuMjIQ==}
-    engines: {node: '>= 12.0.0'}
-
-  [email protected]:
-    resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
-
-  [email protected]:
-    resolution: {integrity: sha512-WGAWRGzirAgyphK2urmYOV72tlvnxw7YfyLDgQ+OZnM9vQQBQnumQ7jUJe6unEzwGU3ahFOjuz1iz1jjrpCPuw==}
-
-  [email protected]:
-    resolution: {integrity: sha512-S9hbyDu/vs1qNrithiNyeyv64c9yqiW9l+DBgI18fL+MTvOtWoFR0FWiyq1TxaYef5wNlpEmzlXoBlZEO+WjoA==}
-
-  [email protected]:
-    resolution: {integrity: sha512-Ksr/8L3PTapbdXJCk+EJVB78jDodUMaP54gD24W186zGRARvwrsPfS60wae/SSCTCNZVPd1chXqio1qHQmu4NA==}
-
-  [email protected]:
-    resolution: {integrity: sha512-arhlxbFRmoQHl33a0Zkle/YWlmNwoyt6QNZEIJcqNbdrsix5Lvc4HyyI3EnwxTYlZYc32EbYrQ8SzEZ7dqgg9A==}
-    engines: {node: '>=14'}
-
-  [email protected]:
-    resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
-    engines: {node: '>=10'}
-
-  [email protected]:
-    resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==}
-
-  [email protected]:
-    resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==}
-
-  [email protected]:
-    resolution: {integrity: sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==}
-
-  [email protected]:
-    resolution: {integrity: sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==}
-
-  [email protected]:
-    resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
-
-  [email protected]:
-    resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
-
-  [email protected]:
-    resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==}
-
-  [email protected]:
-    resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
-    hasBin: true
-
-  [email protected]:
-    resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
-
-  [email protected]:
-    resolution: {integrity: sha512-28vvUnnKQ/dBwiCQtwJw7QauYnE7yd2Cyp4tTTJpvglX4EMpbflcdBgrgToX2j71B3YvugK/NH3BGUk+E/p/Fw==}
-    peerDependencies:
-      react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0
-
-  [email protected]:
-    resolution: {integrity: sha512-fpVfuOQO0V3HBaOA1stIiP/A2fPCXHIleRZL16Mx3HmjTYwNSbimhnFBygs2CAfU1geexMX5ItUcWBGUaqw5CA==}
-    peerDependencies:
-      react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0
-
-  [email protected]:
-    resolution: {integrity: sha512-YLChGBWKq8ynr1UWP8WWRPhHhyuBAXfSBnHSgfoj51L//9TU3d0zvxpigf5C1IJ4vnEoTzthl5awPK55PiZhdA==}
-    peerDependencies:
-      react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0
-
-  [email protected]:
-    resolution: {integrity: sha512-vtEhXh/gNjI9Yg1u4jX/0YVPMvxzHuGgCm6tC5kZyb08yjGWGnqAjGJvcXbqQR2P3MyMEFnRbpcdFS6PBcLqew==}
-    engines: {node: '>=12'}
-
-  [email protected]:
-    resolution: {integrity: sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw==}
-
-  [email protected]:
-    resolution: {integrity: sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==}
-    engines: {node: '>=16'}
-
-  [email protected]:
-    resolution: {integrity: sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==}
-
-  [email protected]:
-    resolution: {integrity: sha512-ntROs7RaN3EvWfy3EZi14H4YxmT6A5YvywfhO+0pm+cH/dnSQRmdAmoFIc3B9aiwTehyk7pESH4ofyBY+V5hZg==}
-    engines: {node: '>= 20'}
-    hasBin: true
-
-  [email protected]:
-    resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==}
-    engines: {node: '>= 0.4'}
-
-  [email protected]:
-    resolution: {integrity: sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==}
-
-  [email protected]:
-    resolution: {integrity: sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==}
-
-  [email protected]:
-    resolution: {integrity: sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==}
-
-  [email protected]:
-    resolution: {integrity: sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==}
-
-  [email protected]:
-    resolution: {integrity: sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==}
-
-  [email protected]:
-    resolution: {integrity: sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==}
-
-  [email protected]:
-    resolution: {integrity: sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==}
-
-  [email protected]:
-    resolution: {integrity: sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==}
-
-  [email protected]:
-    resolution: {integrity: sha512-Tl9GBNeG/AhJnQM221bJR2HPvLOSnLE/T9cJI9tlc6zwQk2nPk/4f0cHkOdEixQPC/j8UtKDdITswvLAy1OZ1w==}
-
-  [email protected]:
-    resolution: {integrity: sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==}
-
-  [email protected]:
-    resolution: {integrity: sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q==}
-
-  [email protected]:
-    resolution: {integrity: sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w==}
-
-  [email protected]:
-    resolution: {integrity: sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==}
-
-  [email protected]:
-    resolution: {integrity: sha512-MbgeFca0hLYIEx/2zGsszCSEJJ1JSCdiY5xQxRcLDDGa8EPvlLPupJ4DSajbMPAnC0je8jfb9TiUATnxxrHUog==}
-
-  [email protected]:
-    resolution: {integrity: sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==}
-
-  [email protected]:
-    resolution: {integrity: sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==}
-
-  [email protected]:
-    resolution: {integrity: sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==}
-
-  [email protected]:
-    resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==}
-
-  [email protected]:
-    resolution: {integrity: sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==}
-    engines: {node: '>= 0.8'}
-
-  [email protected]:
-    resolution: {integrity: sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==}
-    engines: {node: '>=18'}
-
-  [email protected]:
-    resolution: {integrity: sha512-fJMmvat4NeKz63Uv9iHWcPDjCWcCkoiRoajRTEO8hlhUC6rwaHg0QCF9hBOTjZmm4JuglPckPSTtcuJL5kp0TQ==}
-    engines: {node: '>=0.10.0'}
-
-  [email protected]:
-    resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
-    engines: {node: '>= 8'}
-
-  [email protected]:
-    resolution: {integrity: sha512-UlIZrRariB11TY1RtTgUWp65tphtBv4CSq7vyS2ZZ2TgoMjs2nloq+wFqxiwcxlhHUvs7DPGgMjs2aeQxz5h9g==}
-
-  [email protected]:
-    resolution: {integrity: sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==}
-
-  [email protected]:
-    resolution: {integrity: sha512-egs6+12JU2yutskHY55FyR48ZiEcFOJFyk9rsiyIhcJ6IvWB6ABBqVrBw8IobqJTDZ/wdSr9eoXDPb5S2nW1bg==}
-    engines: {node: '>=16'}
-    peerDependencies:
-      micromark-util-types: '*'
-    peerDependenciesMeta:
-      micromark-util-types:
-        optional: true
-
-  [email protected]:
-    resolution: {integrity: sha512-gRzVLUdjXBLX6zNPSnHGDoo+ZTp5zy+MZm0g3sv+3chPXY7l9gW+DnrcHcZh/jiPR6MjPKO4AEJNp4Aw6V9z5Q==}
-    engines: {node: '>=16'}
-    peerDependencies:
-      micromark: ^4.0.0
-      micromark-util-types: ^2.0.0
-    peerDependenciesMeta:
-      micromark-util-types:
-        optional: true
-
-  [email protected]:
-    resolution: {integrity: sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==}
-
-  [email protected]:
-    resolution: {integrity: sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==}
-
-  [email protected]:
-    resolution: {integrity: sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==}
-
-  [email protected]:
-    resolution: {integrity: sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==}
-
-  [email protected]:
-    resolution: {integrity: sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==}
-
-  [email protected]:
-    resolution: {integrity: sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==}
-
-  [email protected]:
-    resolution: {integrity: sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==}
-
-  [email protected]:
-    resolution: {integrity: sha512-lvEqd+fHjATVs+2v/8kg9i5Q0AP2k85H0WUOwpIVvUML8BapsMvh1XAogmQjOCsLpoKRCVQqEkQBB3NhVBcsOg==}
-
-  [email protected]:
-    resolution: {integrity: sha512-dD/ADLJ1AeMvSAKBwO22zG22N4ybhe7kFIZ3LsDI0GlsNr2A3KYxb0LdC1u5rj4Nw+CHKY0RVdnHX8vj8ejm4Q==}
-
-  [email protected]:
-    resolution: {integrity: sha512-e5+q1DjMh62LZAJOnDraSSbDMvGJ8x3cbjygy2qFEi7HCeUT4BDKCvMozPozcD6WmOt6sVvYDNBKhFSz3kjOVQ==}
-
-  [email protected]:
-    resolution: {integrity: sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ==}
-
-  [email protected]:
-    resolution: {integrity: sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A==}
-
-  [email protected]:
-    resolution: {integrity: sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ==}
-
-  [email protected]:
-    resolution: {integrity: sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==}
-
-  [email protected]:
-    resolution: {integrity: sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==}
-
-  [email protected]:
-    resolution: {integrity: sha512-kQnEtA3vzucU2BkrIa8/VaSAsP+EJ3CKOvhMuJgOEGg9KDC6OAY6nSnNDVRiVNRqj7Y4SlSzcStaH/5jge8JdQ==}
-
-  [email protected]:
-    resolution: {integrity: sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==}
-
-  [email protected]:
-    resolution: {integrity: sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==}
-
-  [email protected]:
-    resolution: {integrity: sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==}
-
-  [email protected]:
-    resolution: {integrity: sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==}
-
-  [email protected]:
-    resolution: {integrity: sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==}
-
-  [email protected]:
-    resolution: {integrity: sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==}
-
-  [email protected]:
-    resolution: {integrity: sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==}
-
-  [email protected]:
-    resolution: {integrity: sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==}
-
-  [email protected]:
-    resolution: {integrity: sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==}
-
-  [email protected]:
-    resolution: {integrity: sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==}
-
-  [email protected]:
-    resolution: {integrity: sha512-jmsiEIiZ1n7X1Rr5k8wVExBQCg5jy4UXVADItHmNk1zkwEVhBuIUKRu3fqv+hs4nxLISi2DQGlqIOGiFxgbfHg==}
-
-  [email protected]:
-    resolution: {integrity: sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==}
-
-  [email protected]:
-    resolution: {integrity: sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==}
-
-  [email protected]:
-    resolution: {integrity: sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==}
-
-  [email protected]:
-    resolution: {integrity: sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==}
-
-  [email protected]:
-    resolution: {integrity: sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==}
-
-  [email protected]:
-    resolution: {integrity: sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==}
-
-  [email protected]:
-    resolution: {integrity: sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==}
-
-  [email protected]:
-    resolution: {integrity: sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==}
-
-  [email protected]:
-    resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==}
-    engines: {node: '>=8.6'}
-
-  [email protected]:
-    resolution: {integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==}
-    engines: {node: '>= 0.6'}
-
-  [email protected]:
-    resolution: {integrity: sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==}
-    engines: {node: '>= 0.6'}
-
-  [email protected]:
-    resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
-
-  [email protected]:
-    resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==}
-    engines: {node: '>=10'}
-
-  [email protected]:
-    resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==}
-    engines: {node: '>=16 || 14 >=14.17'}
-
-  [email protected]:
-    resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
-
-  [email protected]:
-    resolution: {integrity: sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==}
-    engines: {node: '>=0.10.0'}
-
-  [email protected]:
-    resolution: {integrity: sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g==}
-
-  [email protected]:
-    resolution: {integrity: sha512-n5yolOs0TQQBRUFImrRfs/+6X4p3Q4n1dUEqt/H58Vx7OW6RF+foWEgmTVDhIWJIMXOuNNL0apKH2S16en9eiA==}
-
-  [email protected]:
-    resolution: {integrity: sha512-eAWoPgr4eFEOFfg2WjIsMoqJTW6Z8MTUCgn/GZ3VRpClWBdnbjryiA3ZSNLyxCTmCQx4RmYX6jX1iWHbenUPNQ==}
-
-  [email protected]:
-    resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
-
-  [email protected]:
-    resolution: {integrity: sha512-P0efT1C9jIdVRefqjzOQ9Xml57zpOXnIuS+csaB4MdZbTdmGDLo8XhzBG1N7aO11gKDDkJvBLULeFTo46wwreA==}
-    hasBin: true
-
-  [email protected]:
-    resolution: {integrity: sha512-UjkUHN0yqp9RWKy0Lplhh+wlpdt9oQBYgULZOiFhV3VclSF1JnSQWZ5r9gORQlNYaUKQoR8itv7g7z1xDDuACA==}
-
-  [email protected]:
-    resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==}
-    engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
-    hasBin: true
-
-  [email protected]:
-    resolution: {integrity: sha512-Ir/+ZpE9fDsNH0hQ3C68uyThDXzYcim2EqcZ8zn8Chtt1iylPT9xXJB0kPCnqzgcEGikO9RxSrh63MsmVCU7Fw==}
-    engines: {node: ^18 || >=20}
-    hasBin: true
-
-  [email protected]:
-    resolution: {integrity: sha512-tWVJxJHmBWLy69PvO96TZMZDrzmw5KeiZBz3RHmiM2XZ9grBJ2WgMAFVVg25nqp3ZjTFUs2Ftw1JhscL3Teliw==}
-    engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0}
-    hasBin: true
-
-  [email protected]:
-    resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
-
-  [email protected]:
-    resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==}
-    engines: {node: '>= 0.6'}
-
-  [email protected]:
-    resolution: {integrity: sha512-EQlCIfY0jOhRldiFxwSXG+ImwkQtDEfQeSOEQp6ieAGSLWGlgjdb/Ck/O7wMfC430ZHGeUKVKax8KGusTPKCgg==}
-    peerDependencies:
-      next: ^10.0.0 || ^11.0.0 || ^12.0.0 || ^13.0.0 || ^14.0.0 || ^15.0.0
-      react: ^16.8.0 || ^17.0.0 || ^18.0.0 || >=19.0.0-rc <19.0.0 || ^19.0.0
-
-  [email protected]:
-    resolution: {integrity: sha512-pZvgD5L0IEvX5/9GWyHMf3m8BKiVQwsCMHfoFosXtXBMnaS0ZnIJ9ST4b4NqLVKDEm8QBxoNNGNaBv2JNF6XNA==}
-    peerDependencies:
-      react: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc
-      react-dom: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc
-
-  [email protected]:
-    resolution: {integrity: sha512-zTxsnI3LQo3c9HSdSf91O1jMNsEzIXDShXd4wVdg9y5shwLqBXi4ZtUUJyB86KGVSJLZx0PFONvO54aheGX8QQ==}
-    engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0}
-    hasBin: true
-    peerDependencies:
-      '@opentelemetry/api': ^1.1.0
-      '@playwright/test': ^1.51.1
-      babel-plugin-react-compiler: '*'
-      react: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0
-      react-dom: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0
-      sass: ^1.3.0
-    peerDependenciesMeta:
-      '@opentelemetry/api':
-        optional: true
-      '@playwright/test':
-        optional: true
-      babel-plugin-react-compiler:
-        optional: true
-      sass:
-        optional: true
-
-  [email protected]:
-    resolution: {integrity: sha512-s+w+rBWnpTMwSFbaE0UXsRlg7hU4FjekKU4eyAih5T8nJuNZT1nNsskXpxmeqSK9UzkBl6UgRlnKc8hz8IEqOw==}
-    hasBin: true
-
-  [email protected]:
-    resolution: {integrity: sha512-S2M9YimhSjBSvYnlr5/+umAnPHE++ODwt5e2Ij6FoX45HA/s4vHdkDx1eax2pAPeAOqu4s9b7ppahsyEFdVqQA==}
-
-  [email protected]:
-    resolution: {integrity: sha512-qaKRmtYPZ5qdw4jWJD6bxEf1FJEqllJrwxCLIm0sQU/A7v2/czigzOb+C2uSiFsa9lBUzeH7M1oK+Q+OLxL3kA==}
-
-  [email protected]:
-    resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
-    engines: {node: '>=0.10.0'}
-
-  [email protected]:
-    resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==}
-    engines: {node: '>= 0.4'}
-
-  [email protected]:
-    resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==}
-    engines: {node: '>= 0.4'}
-
-  [email protected]:
-    resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==}
-    engines: {node: '>= 0.4'}
-
-  [email protected]:
-    resolution: {integrity: sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==}
-    engines: {node: '>= 0.4'}
-
-  [email protected]:
-    resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==}
-    engines: {node: '>= 0.4'}
-
-  [email protected]:
-    resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==}
-    engines: {node: '>= 0.4'}
-
-  [email protected]:
-    resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==}
-    engines: {node: '>= 0.4'}
-
-  [email protected]:
-    resolution: {integrity: sha512-cMtCyuJmTx/bg2HCpHo3ZLeF7FZnBOapLqZHr2AlLeJ5Ul0Zu2mUJJz051Fdwu/Et2YW04ZD+TtU+gVy0ACNCA==}
-    engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
-
-  [email protected]:
-    resolution: {integrity: sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==}
-    engines: {node: '>=14.0.0'}
-
-  [email protected]:
-    resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==}
-    engines: {node: '>= 0.8'}
-
-  [email protected]:
-    resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
-
-  [email protected]:
-    resolution: {integrity: sha512-8Unqkvk1RYc6yq2WBYRj4hdnsAxVze8i7iPfQr8e4uSP3tRv0rpZcbGUDvxfQQcdwHt/e9PrMvGCsa8OqG9X3w==}
-
-  [email protected]:
-    resolution: {integrity: sha512-rPiZhzC3wXwE59YQMRDodUwwT9FZ9nNBwQQfsd1wfdtlKEyCdRV0avrTcSZ5xlIvGRVPd/cx6ZN45ECmS39xvg==}
-
-  [email protected]:
-    resolution: {integrity: sha512-jaL+HgTq2Gj5jRcfdutgRGLosCy/hT8sQf6VOy+P+g36cZOjI1iukdPnijC+4CmeRzg/jEllJUboEic2FhxhtQ==}
-
-  [email protected]:
-    resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==}
-    engines: {node: '>= 0.8.0'}
-
-  [email protected]:
-    resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==}
-    engines: {node: '>= 0.4'}
-
-  [email protected]:
-    resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
-    engines: {node: '>=10'}
-
-  [email protected]:
-    resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
-    engines: {node: '>=10'}
-
-  [email protected]:
-    resolution: {integrity: sha512-uBj69dVlYe/+wxj8JOpr97XfsxH/eumMt6HqjNTmJDf/6NO9s+0uxeOneIz3AsPt2m6y9PqzDzd3ATcU17MNfw==}
-
-  [email protected]:
-    resolution: {integrity: sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==}
-
-  [email protected]:
-    resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
-    engines: {node: '>=6'}
-
-  [email protected]:
-    resolution: {integrity: sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==}
-
-  [email protected]:
-    resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==}
-    engines: {node: '>=8'}
-
-  [email protected]:
-    resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==}
-
-  [email protected]:
-    resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==}
-    engines: {node: '>= 0.8'}
-
-  [email protected]:
-    resolution: {integrity: sha512-NOnmBpt5Y2RWbuv0LMzsayp3lVylAHLPUTut412ZA3l+C4uw4ZVkQbjShYCQ8TCpUMdPapr4YjUqLYD6v68j+w==}
-
-  [email protected]:
-    resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
-    engines: {node: '>=8'}
-
-  [email protected]:
-    resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
-    engines: {node: '>=8'}
-
-  [email protected]:
-    resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
-
-  [email protected]:
-    resolution: {integrity: sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA==}
-
-  [email protected]:
-    resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
-    engines: {node: '>=8'}
-
-  [email protected]:
-    resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==}
-
-  [email protected]:
-    resolution: {integrity: sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==}
-
-  [email protected]:
-    resolution: {integrity: sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==}
-    engines: {node: '>=4.0.0'}
-
-  [email protected]:
-    resolution: {integrity: sha512-6DIBgBQaTKDJyxnXaLiLR8wBpQQcGWuAESkRBX/t6OwA8YsqP+iVSiond2EDy6Y/dsGk8rh/jtax3js5NeV7JQ==}
-
-  [email protected]:
-    resolution: {integrity: sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==}
-    engines: {node: '>=4'}
-
-  [email protected]:
-    resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
-
-  [email protected]:
-    resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
-    engines: {node: '>=8.6'}
-
-  [email protected]:
-    resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==}
-    engines: {node: '>=12'}
-
-  [email protected]:
-    resolution: {integrity: sha512-F63x5tizV6WCh4R6RHyi2Ml+M70DNRXt/+HANowMflpgGFMAym/VKm6G7ZOQRjqN7XbGxK1Lg9t6ZrtzOaivMw==}
-
-  [email protected]:
-    resolution: {integrity: sha512-3cN0tCakkT4f3zo9RXDIhy6GTvtYD6bK4CRBLN9j3E/ePqN1tugAXD5rGVfoChW6s0hiek+eyYlLNqc/BG7vBQ==}
-    hasBin: true
-
-  [email protected]:
-    resolution: {integrity: sha512-e906FRY0+tV27iq4juKzSYPbUj2do2X2JX4EzSca1631EB2QJQUqGbDuERal7LCtOpxl6x3+nvo9NPZcmjkiFA==}
-
-  [email protected]:
-    resolution: {integrity: sha512-0zZC2ygfdqvqK8zJIr1e+wT1T/L+LF6qvqvbzEQ6tiMAoTqEVK9a1K3YRu8HEUvGEvNqZyPJTtb2sNIoTkB83w==}
-    hasBin: true
-
-  [email protected]:
-    resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==}
-
-  [email protected]:
-    resolution: {integrity: sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==}
-
-  [email protected]:
-    resolution: {integrity: sha512-0mYKnYYe9ZcqMCWhUjItv/oHjvgEsfKvnUTg8sAtnHr3GVy7rGkXCb6d5cSyqrWqL4k81b9CPg3urd+T7aop3A==}
-
-  [email protected]:
-    resolution: {integrity: sha512-25ClnWWuw7JbWZcgqY/gJ4FQWadKxGWk+3kR/7kD0tCaDtPPMj7oHu2ToLaVhfpnHrZzYby2w6tUA0eOIuUg8g==}
-
-  [email protected]:
-    resolution: {integrity: sha512-OBatVyC/N7SCW/FaDHrSd+vn0o5cS855TOmYi4OkdWUMSJCET/xip//ch8xGUvtr3i44X9LVyWwQlRMTN3pwSA==}
-    engines: {node: '>=10'}
-
-  [email protected]:
-    resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==}
-    engines: {node: '>= 0.4'}
-
-  [email protected]:
-    resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==}
-    engines: {node: ^10 || ^12 || >=14}
-
-  [email protected]:
-    resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==}
-    engines: {node: ^10 || ^12 || >=14}
-
-  [email protected]:
-    resolution: {integrity: sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==}
-    engines: {node: '>=4'}
-
-  [email protected]:
-    resolution: {integrity: sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==}
-    engines: {node: '>=0.10.0'}
-
-  [email protected]:
-    resolution: {integrity: sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==}
-    engines: {node: '>=0.10.0'}
-
-  [email protected]:
-    resolution: {integrity: sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==}
-    engines: {node: '>=0.10.0'}
-
-  [email protected]:
-    resolution: {integrity: sha512-Jtc2612XINuBjIl/QTWsV5UvE8UHuNblcO3vVADSrKsrc6RqGX6lOW1cEo3CM2v0XG4Nat8nI+YM7/f26VxXLw==}
-    engines: {node: '>=12'}
-
-  [email protected]:
-    resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
-    engines: {node: '>= 0.8.0'}
-
-  [email protected]:
-    resolution: {integrity: sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==}
-    engines: {node: '>=14'}
-    hasBin: true
-
-  [email protected]:
-    resolution: {integrity: sha512-a39t9ApHNx2L4+HBnQKqxxHNs1r7KF+Intd8Q/g1bUh6q0WIp9voPXJ/x0j+ZL45KF1pJd9+q2jLIRMfvEshkA==}
-
-  [email protected]:
-    resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==}
-
-  [email protected]:
-    resolution: {integrity: sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==}
-
-  [email protected]:
-    resolution: {integrity: sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==}
-
-  [email protected]:
-    resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==}
-    engines: {node: '>= 0.10'}
-
-  [email protected]:
-    resolution: {integrity: sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==}
-
-  [email protected]:
-    resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
-    engines: {node: '>=6'}
-
-  [email protected]:
-    resolution: {integrity: sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==}
-    engines: {node: '>=0.6'}
-
-  [email protected]:
-    resolution: {integrity: sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA==}
-
-  [email protected]:
-    resolution: {integrity: sha512-5fBfMOcDi5SA9qj5jZhWAcTtDfKF5WFdd2uD9nVNlbxVv1baq65aALy6qofpNEGELHvisjjasxQp7BlM9gvMzw==}
-    engines: {node: '>=18'}
-
-  [email protected]:
-    resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
-
-  [email protected]:
-    resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==}
-
-  [email protected]:
-    resolution: {integrity: sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==}
-
-  [email protected]:
-    resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==}
-    engines: {node: '>= 0.6'}
-
-  [email protected]:
-    resolution: {integrity: sha512-9G8cA+tuMS75+6G/TzW8OtLzmBDMo8p1JRxN5AZ+LAp8uxGA8V8GZm4GQ4/N5QNQEnLmg6SS7wyuSmbKepiKqA==}
-    engines: {node: '>= 0.10'}
-
-  [email protected]:
-    resolution: {integrity: sha512-KpXypcvju9ptjW9FaN2NFcA2QH9E9LHKq169Y0eWtH4e/wHQ5Wh5qZakAgvb8EKZ736WZ3B0zLLOBsrsja5Dag==}
-    peerDependencies:
-      react: '>=16.9.0'
-      react-dom: '>=16.9.0'
-
-  [email protected]:
-    resolution: {integrity: sha512-aOAQc3E98HteIIsSqm6Xk2FPKIER6+5vyEFMZfo73TqM+VVAIqOkHoPjgKLqSNtVLWScoaM7vY2ZrGEheI79yg==}
-    peerDependencies:
-      react: '>=16.9.0'
-      react-dom: '>=16.9.0'
-
-  [email protected]:
-    resolution: {integrity: sha512-swDdz4QZ4dFTo4RAUMLL50qP0EY62N2kvmk2We5xYdRwcRn8WcYtuetCJpwpaCbUfUt5+huLpVxhvmnK+PHrkA==}
-    peerDependencies:
-      react: '>=16.9.0'
-      react-dom: '>=16.9.0'
-
-  [email protected]:
-    resolution: {integrity: sha512-SwoOByE39/3oIokDs/BnkqI+ltwirZbP8HZdq1/3SkPSBi7xDdvWHTp7cpNI9ullozkR6mwTWQi6/E/9huQVrA==}
-    peerDependencies:
-      react: '>=16.9.0'
-      react-dom: '>=16.9.0'
-
-  [email protected]:
-    resolution: {integrity: sha512-ApoVi9Z8PaCQg6FsUzS8yvBEQy0ZL2PkuvAgrmohPkN3okps5WZ5WQWPc1RNuiOKaAYv8B97ACdsFU5LizzCqg==}
-    peerDependencies:
-      react: '>=16.9.0'
-      react-dom: '>=16.9.0'
-
-  [email protected]:
-    resolution: {integrity: sha512-DX6CIgiBWNpJIMGFO8BAISFkxiuKitoizooj4BDyee8/SnBn0zwO2FHrNDpqqepj0E/TFTDpmEBCyFuTgC7MOg==}
-    peerDependencies:
-      react: '>=16.9.0'
-      react-dom: '>=16.9.0'
-
-  [email protected]:
-    resolution: {integrity: sha512-YDAlXsPv3I1n42dv1JpdM7wJ+gSUBfeyPK59ZpBD9jQhK9jVuxpjj3NmWQHOBceA1zEPVX84T2wbdb2SD0UjmA==}
-    peerDependencies:
-      react: '>=16.11.0'
-      react-dom: '>=16.11.0'
-
-  [email protected]:
-    resolution: {integrity: sha512-vKeSifSJ6HoLaAB+B8aq/Qgm8a3dyxROzCtKNCsBQgiverpc4kWDQihoUwzUj+zNWJOykwSY4dNX3QrGwtVb9A==}
-    engines: {node: '>=8.x'}
-    peerDependencies:
-      react: '>=16.9.0'
-      react-dom: '>=16.9.0'
-
-  [email protected]:
-    resolution: {integrity: sha512-JBZ+xcb6kkex8XnBd4VHw1ZxjV6kmcwUumSHaIFdka2qzMCo7Klcy4sI6G0XtUpG/vtpislQCc+S9Bc+NLHYMg==}
-    peerDependencies:
-      react: '>=16.0.0'
-      react-dom: '>=16.0.0'
-
-  [email protected]:
-    resolution: {integrity: sha512-cZ3HTyyckPnNnUb9/DRqduqzLfrQRyi+CdHjdqgsyDpI3Ln5UX1kXnAhPBSJj9pVRzwRFgqkN7p9b6HBDjmu/Q==}
-    peerDependencies:
-      react: '>=16.9.0'
-      react-dom: '>=16.9.0'
-
-  [email protected]:
-    resolution: {integrity: sha512-bKaEvB5tHebUURAEXw35LDcnRZLq3x1k7GxfAqBMzmpHkDGzjAtnUL8y4y5N15rIFIg5IJgwr211jInl3cipag==}
-    peerDependencies:
-      react: '>=16.9.0'
-      react-dom: '>=16.9.0'
-
-  [email protected]:
-    resolution: {integrity: sha512-KXvaTbX+7ha8a/k+eg6SYRVERK0NddX8QX7a7AnRvUa/rEH0CNMlpcBzBkhI0wp2C8C4HlMoYl8TImSN+fuHKA==}
-    peerDependencies:
-      react: '>=16.0.0'
-      react-dom: '>=16.0.0'
-
-  [email protected]:
-    resolution: {integrity: sha512-w8HCMZEh3f0nR8ZEd466ATqmXFCMGMN5UFCzEUL0bM/nGw/wOS2GgRzKBcm19K++jDyuWCOJOdgcKGXU3fXfbQ==}
-    peerDependencies:
-      react: '>=16.9.0'
-      react-dom: '>=16.9.0'
-
-  [email protected]:
-    resolution: {integrity: sha512-ghHx6/6Dvp+fw8CJhDUHFHDJ84hJE3BXNCzSgLdmNiFErWSOaZNsihDAsKq9ByTALo/xkNIwtDFGIl6r+RPXBg==}
-    peerDependencies:
-      react: '>=16.9.0'
-      react-dom: '>=16.9.0'
-
-  [email protected]:
-    resolution: {integrity: sha512-w+XTUrfh7ArbYEd2582uDrEhmBHwK1ZENJiSJVb7uRxdE7qJSYjbO2eksRXmndqyKqKoYPc9ClpPh5242mV1vA==}
-    peerDependencies:
-      react: '>=16.9.0'
-      react-dom: '>=16.9.0'
-
-  [email protected]:
-    resolution: {integrity: sha512-KcS4O6B4qzM3KH7lkwOB7ooLPZ4b6J+VMmQgT51VZCeEcmghdeR4IrMcFq0LG+RPdnbe/ArT086tGM8Snimgiw==}
-    engines: {node: '>=8.x'}
-    peerDependencies:
-      react: '>=16.9.0'
-      react-dom: '>=16.9.0'
-
-  [email protected]:
-    resolution: {integrity: sha512-Lm/v9h0LymeUYJf0x39OveU52InkdRXqnn2aYXfWmo8WdOonIKB2kfau+GF0fWq6jPgtdO9yMqveGcK6aIhJmg==}
-    peerDependencies:
-      react: '>=16.9.0'
-      react-dom: '>=16.9.0'
-
-  [email protected]:
-    resolution: {integrity: sha512-8416Yip/+eclTFdHXLKTxZvn70duYVGTvUUWbckCCZoIl3jagqke3GLsFrMs0bsQBikiYpZLD9206Ej4SOdOXQ==}
-    peerDependencies:
-      react: '>=16.9.0'
-      react-dom: '>=16.9.0'
-
-  [email protected]:
-    resolution: {integrity: sha512-MJ5teb7FlNE0NFHTncxXQ62Y5lytq6sh5nUw0iH8OkHL/TjARSEvSHpr940pWgjGANpjCwyMdvsEV55l5tYNSg==}
-    engines: {node: '>=8.x'}
-    peerDependencies:
-      date-fns: '>= 2.x'
-      dayjs: '>= 1.x'
-      luxon: '>= 3.x'
-      moment: '>= 2.x'
-      react: '>=16.9.0'
-      react-dom: '>=16.9.0'
-    peerDependenciesMeta:
-      date-fns:
-        optional: true
-      dayjs:
-        optional: true
-      luxon:
-        optional: true
-      moment:
-        optional: true
-
-  [email protected]:
-    resolution: {integrity: sha512-oofVMMafOCokIUIBnZLNcOZFsABaUw8PPrf1/y0ZBvKZNpOiu5h4AO9vv11Sw0p4Hb3D0yGWuEattcQGtNJ/aw==}
-    peerDependencies:
-      react: '>=16.9.0'
-      react-dom: '>=16.9.0'
-
-  [email protected]:
-    resolution: {integrity: sha512-QUhQ9ivQ8Gy7mtMZPAjLbxBt5y9GRp65VcUyGUMF3N3fhiftivPHdpuDIaWIMOTEprAjZPC08bls1dQB+I1F2Q==}
-    engines: {node: '>=8.x'}
-    peerDependencies:
-      react: '>=16.9.0'
-      react-dom: '>=16.9.0'
-
-  [email protected]:
-    resolution: {integrity: sha512-YZLjUbyIWox8E9i9C3Tm7ia+W7euPItNWSPX5sCcQTYbnwDb5uNpnLHQCG1f22oZWUhLw4Mv2tFmeWe68CDQRQ==}
-    peerDependencies:
-      react: '>=16.9.0'
-      react-dom: '>=16.9.0'
-
-  [email protected]:
-    resolution: {integrity: sha512-liijAjXz+KnTRVnxxXG2sYDGd6iLL7VpGGdR8gwoxAXy2KglviKCxLWZdjKYJzYzGSUwKDSTdYk8brj54Bn5BA==}
-    peerDependencies:
-      react: '>=16.0.0'
-      react-dom: '>=16.0.0'
-
-  [email protected]:
-    resolution: {integrity: sha512-NOV5BZa1wZrsdkKaiK7LHRuo5ZjZYMDxPP6/1+09+FB4KoNi8jcG1ZqLE3AVCxEsYMBe65OBx71wFoHRTP3LRg==}
-    engines: {node: '>=8.x'}
-    peerDependencies:
-      react: '*'
-      react-dom: '*'
-
-  [email protected]:
-    resolution: {integrity: sha512-h8IknhzSh3FEM9u8ivkskh+Ef4Yo4JRIY2nj7MrH6GQmrwV6mcpJf5/4KgH5JaVI1H3E52yCdpOlVyGZIeph5A==}
-    engines: {node: '>=8.x'}
-    peerDependencies:
-      react: '>=16.9.0'
-      react-dom: '>=16.9.0'
-
-  [email protected]:
-    resolution: {integrity: sha512-lKHL+Sny0SeHkQKKDJlAjV5oZ8DwCdS2hFhAkIjuQt1/pB81M0cA0ErVFdHq9+jmPmFw1vJB2F5NBzFXLJxV+g==}
-    engines: {node: '>=8.x'}
-    peerDependencies:
-      react: '>=16.9.0'
-      react-dom: '>=16.9.0'
-
-  [email protected]:
-    resolution: {integrity: sha512-TI8ufP2Az9oEbvyCeVE4+90PDSljGyuwix3fV58p7HV2o4wBnVToEyomJRVyTaZeqNPAp+vqeo4Wnj5u0ZZQBg==}
-    peerDependencies:
-      react: '>=16.9.0'
-      react-dom: '>=16.9.0'
-
-  [email protected]:
-    resolution: {integrity: sha512-/wDTkki6wBTjwylwAGjpLKYklKo9YgjZwAU77+7ME5mBoS32Q4nAwoqhA2lSge6fobLW3Tap6uc5xfwaL2p0Sw==}
-    engines: {node: '>=8.x'}
-    peerDependencies:
-      react: '>=16.9.0'
-      react-dom: '>=16.9.0'
-
-  [email protected]:
-    resolution: {integrity: sha512-ZepiE+6fmozYdWf/9gVp7k56PKHB1YYoDsKeQA1CBlJ/POIhjkcYiv0AGP0w2Jhzftd3AVvZP/K+V+Lpi2ankA==}
-    engines: {node: '>=8.x'}
-    peerDependencies:
-      react: '>=16.9.0'
-      react-dom: '>=16.9.0'
-
-  [email protected]:
-    resolution: {integrity: sha512-HfaeXiaSlpiSp0I/pvWpecFEHpVysZ9tpDLNkxQbMvMz6gsr7aVZ7FpWP9kt4t7DB+jJXesYS0us1uPZnlRnwQ==}
-    peerDependencies:
-      react: '>=16.9.0'
-      react-dom: '>=16.9.0'
-
-  [email protected]:
-    resolution: {integrity: sha512-kqyivim5cp8I5RkHmpsp1Nn/Wk+1oeloMv9c7LXNgDxUpGm+RbXJGL+OPvDlcRnx9DBeOe4wyOIl4OKUERyH1g==}
-    peerDependencies:
-      react: '>=16.9.0'
-      react-dom: '>=16.9.0'
-
-  [email protected]:
-    resolution: {integrity: sha512-2qTBTzwIT7LRI1o7zLyrCzmo5tQanmyGbSaGTIf7sYimCklAToVVfpMC6OAldSKolcnjorBYPNSKQqJmN3TCww==}
-    peerDependencies:
-      react: '*'
-      react-dom: '*'
-
-  [email protected]:
-    resolution: {integrity: sha512-FNhIefhftobCdUJshO7M8uZTA9F4OPGVXqGfZkkD/5soDeOhwO06T/aKTrg0WD8gRg/pyfq+ql3aMymLHCTC4A==}
-    engines: {node: '>=10.x'}
-    peerDependencies:
-      react: '*'
-      react-dom: '*'
-
-  [email protected]:
-    resolution: {integrity: sha512-nHx+9rbd1FKMiMRYsqQ3NkXUv7COHPBo3X1Obwq9SWS6/diF/A0aJ5OHubvwUAIDs+4RMleljV0pcrNUc823GQ==}
-    peerDependencies:
-      react: '>=16.9.0'
-      react-dom: '>=16.9.0'
-
-  [email protected]:
-    resolution: {integrity: sha512-resueRJzmHG9Q6rI/DfK6Kdv9/Lfls05vzMs1Sk3M2P+3cJa+MakaZyWY8IPfehVuhPJFKrIY1IK4GqbiaiY5w==}
-    peerDependencies:
-      react: '>=16.9.0'
-      react-dom: '>=16.9.0'
-
-  [email protected]:
-    resolution: {integrity: sha512-Ys6NcjwGkuwkeaWBDqfI3xWuZ7rDiQXlH1o2zLfFzATfEgXcqpk8CkgMfbJD81McqjcJVez25a3kPxCR807evA==}
-    engines: {node: '>=8.x'}
-    peerDependencies:
-      react: '>=16.9.0'
-      react-dom: '>=16.9.0'
-
-  [email protected]:
-    resolution: {integrity: sha512-2xI2P3OHs5qw7K0Ud1aLILK6MQxW50TcO+DetD9eIV58j84TqYeHoZcL9H4GXFXXIh7afhH8mv5iUCXII7OW7A==}
-    peerDependencies:
-      react: ^16.13.1 || ^17.0.0 || ^18.0.0 || ^19.0.0
-      react-dom: ^16.13.1 || ^17.0.0 || ^18.0.0 || ^19.0.0
-
-  [email protected]:
-    resolution: {integrity: sha512-a4ajbi7lwDh98kgEtSEeKMu0vs0CHTczkq4Xcxr1EiwMFH1GlgHCEtwGU8q/H5W8SeLnH4KPK8LUjEEaZXklxQ==}
-    peerDependencies:
-      react: ^0.14.0 || ^16.0.0 || ^17.0.0 || ^18.0.0
-      react-dom: ^0.14.0 || ^16.0.0 || ^17.0.0 || ^18.0.0
-
-  [email protected]:
-    resolution: {integrity: sha512-1exovf0uGTGyq5mXQT0zgQ80uvj2PCwvF8zY1RN9/vbJVSjSo3fsB/4L3ObbF7u70NduSiK4xu4Y6q1MHoUGEw==}
-    peerDependencies:
-      react: '>=16.8.0'
-      react-dom: '>=16.8.0'
-
-  [email protected]:
-    resolution: {integrity: sha512-UlbRu4cAiGaIewkPyiRGJk0imDN2T3JjieT6spoL2UeSf5od4n5LB/mQ4ejmxhCFT1tYe8IvaFulzynWovsEFQ==}
-    peerDependencies:
-      react: ^19.2.0
-
-  [email protected]:
-    resolution: {integrity: sha512-LtY5Xw1zTPqHkVmtM3X8MUOxNDOUhv/khTgBgrUvwaS064bwVvxT+q5El0uUFNx5IEPKXuRejr7UqLwBIg5pdw==}
-    peerDependencies:
-      react: '>= 16.3.0'
-      react-dom: '>= 16.3.0'
-
-  [email protected]:
-    resolution: {integrity: sha512-iBYHA1rbopIvtzokEX4QubO6qk5IF/x3BtKGu74rF2JkQDXnwC4uO/lHKpaw4PJIV6iIAYOlwLv2FpiGyqHNog==}
-    engines: {node: '>= 10.13'}
-    peerDependencies:
-      react: '>= 16.8'
-
-  [email protected]:
-    resolution: {integrity: sha512-tnjAxG+IkpLephNcePNA7v6F/QpWLH8He65+DmedchDwg162JZqx4NmbXj0mlAYVVEd81OW7aFhmbsScYfiAFQ==}
-    peerDependencies:
-      react: '>=16.13.1'
-
-  [email protected]:
-    resolution: {integrity: sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==}
-
-  [email protected]:
-    resolution: {integrity: sha512-xtOzDz063WcXvGWaHgLNrNzlsdFgtUWcb32E6WFaGTd7kPZG3EeDusjdZfUsPwKCKVXy1ZlntifaHZ4l8pAsmw==}
-    engines: {node: '>=18.0.0'}
-    peerDependencies:
-      react: ^16.8.0 || ^17 || ^18 || ^19
-
-  [email protected]:
-    resolution: {integrity: sha512-xbKh6zJxd/vJHT4Bw4+0pBD662Fk20V+VFhLqciCg+manTVO4qlqRqiwFOYelfHN9dBvWj9vxaPkSS26ZSIJGg==}
-    peerDependencies:
-      react: '>=16.8.0'
-      react-dom: '>=16.8.0'
-
-  [email protected]:
-    resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==}
-
-  [email protected]:
-    resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==}
-
-  [email protected]:
-    resolution: {integrity: sha512-fzmrwMBNGIAiDIrdFMV3NvJhUNl01QC9EMcI8SP7osg51N4j+z6w4tx9i2yWxEEXZ2armLV6EtkFd3KST8PYiA==}
-    peerDependencies:
-      react: '>=18'
-
-  [email protected]:
-    resolution: {integrity: sha512-Uvflhn5YhcfSZfoAuMxEmoTQH9fwex+sx8uilw7W2TwxRx+ihJ+hDHpHGbmRwPEEUdT2NxMDQdWyYFo0roTb6A==}
-    peerDependencies:
-      react: '>=19'
-
-  [email protected]:
-    resolution: {integrity: sha512-qKxVopLT/TyA6BX3Ue5NwabOsAzm0Q7kAPwq6L+wWDwisYs7R8vZ0nRXqq6rkueboxpkjvLGU9fWifiX/ZZFxQ==}
-    peerDependencies:
-      '@types/react': '>=18'
-      react: '>=18'
-
-  [email protected]:
-    resolution: {integrity: sha512-MSZAfwFfdbEvwkKWP5EI5chuLYnNUxNS7vyS0i1Jp+wtd8J4Ga2ddzhaE68aMol2Z4vCnRM/oGOo1a3V75UPlw==}
-    peerDependencies:
-      react: '>=16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0'
-    peerDependenciesMeta:
-      react:
-        optional: true
-
-  [email protected]:
-    resolution: {integrity: sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==}
-    engines: {node: '>=10'}
-    peerDependencies:
-      '@types/react': '*'
-      react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
-    peerDependenciesMeta:
-      '@types/react':
-        optional: true
-
-  [email protected]:
-    resolution: {integrity: sha512-HpMh8+oahmIdOuS5aFKKY6Pyog+FNaZV/XyJOq7b4YFwsFHe5yYfdbIalI4k3vU2nSDql7YskmUseHsRrJqIPA==}
-    engines: {node: '>=10'}
-    peerDependencies:
-      '@types/react': '*'
-      react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc
-    peerDependenciesMeta:
-      '@types/react':
-        optional: true
-
-  [email protected]:
-    resolution: {integrity: sha512-0Tm4x7k7pfHf2snewJA8x7Nwgt3LV+58MVEWOVsFjk51eYruFEa6Wy7BNdxt4/lH0wIRsu7Gm3KjSXY2w7YaNw==}
-    peerDependencies:
-      react: '>=16.3.0'
-      react-dom: '>=16.3.0'
-
-  [email protected]:
-    resolution: {integrity: sha512-gnGKTpYwqL0Iii09gHobNolvX4Kiq4PKx6eWBCYYix+8cdw+cGo3do906l1NBPKkSWx1DghC1dlWG9L2uGd61Q==}
-    peerDependencies:
-      react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
-      react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
-
-  [email protected]:
-    resolution: {integrity: sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==}
-    engines: {node: '>=10'}
-    peerDependencies:
-      '@types/react': '*'
-      react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc
-    peerDependenciesMeta:
-      '@types/react':
-        optional: true
-
-  [email protected]:
-    resolution: {integrity: sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==}
-    peerDependencies:
-      react: '>=16.6.0'
-      react-dom: '>=16.6.0'
-
-  [email protected]:
-    resolution: {integrity: sha512-UmReVZ0TxlKzxSbYiAj+LeGRW8s8LraAFTXRAxzMYnNRgGPsxCudwZKVkjvGmjtx7SW/hZamt69NUmGf4xrkXA==}
-    engines: {node: '>=8', npm: '>=5'}
-    peerDependencies:
-      react: '*'
-      react-dom: '*'
-
-  [email protected]:
-    resolution: {integrity: sha512-tmbWg6W31tQLeB5cdIBOicJDJRR2KzXsV7uSK9iNfLWQ5bIZfxuPEHp7M8wiHyHnn0DD1i7w3Zmin0FtkrwoCQ==}
-    engines: {node: '>=0.10.0'}
-
-  [email protected]:
-    resolution: {integrity: sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==}
-    engines: {node: '>= 12.13.0'}
-
-  [email protected]:
-    resolution: {integrity: sha512-kivNFO+0OcUNu7jQquLXAxz1FIwZj8nrj+YkOKc5694NbjCvcT6aSZiIzNzd2Kul4o4rTto8QVR9lMNtxD4G1w==}
-
-  [email protected]:
-    resolution: {integrity: sha512-UT/q6fwS3c1dHbXv2uFgYJ9BMFHu3fwnd7AYZaEQhXuYQ4hgsxLvsUXzGdKeZrW5xopzDCvuA2N41WJ88I7zIw==}
-    engines: {node: '>=14'}
-    peerDependencies:
-      react: ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
-      react-dom: ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
-
-  [email protected]:
-    resolution: {integrity: sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew==}
-
-  [email protected]:
-    resolution: {integrity: sha512-huSIy7VU2Z5OLv6oFLosQGGDqPqdO1iq6bWNAdhzMxSJP7RAso4fCZ1cKu8j9YHCZf3TPrq4dw3okhrylgcd7w==}
-    peerDependencies:
-      acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
-
-  [email protected]:
-    resolution: {integrity: sha512-OYLsIGBB5Y5wjnSnQW6t3Xg7q3fQ7FWbw/vcXtORTnyaSFscOtABg+7Pnz6YZ6c27fG1/aN8CjfwoUEUIdwqWQ==}
-
-  [email protected]:
-    resolution: {integrity: sha512-cjwII1MdIIVloKvC9ErQ+OgAtwHBmcZ0Bg4ciz78FtbT8In39aAYbaA7zvxQ61xVMSPE8WxhLwLbhif4Js2C+g==}
-
-  [email protected]:
-    resolution: {integrity: sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w==}
-    engines: {node: '>=4'}
-
-  [email protected]:
-    resolution: {integrity: sha512-ER4L9Sh/vm63DkIE0bkSjxluQlioBiBgf5w1UuldaW/3vPcecdljVDisZhmnCMvsxHNiARTTDDHGg9cGwTfrKg==}
-
-  [email protected]:
-    resolution: {integrity: sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A==}
-    engines: {node: '>=4'}
-
-  [email protected]:
-    resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==}
-    engines: {node: '>= 0.4'}
-
-  [email protected]:
-    resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==}
-
-  [email protected]:
-    resolution: {integrity: sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==}
-
-  [email protected]:
-    resolution: {integrity: sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==}
-
-  [email protected]:
-    resolution: {integrity: sha512-uorlqlzAKjKQZ5P+kTJr3eeJGSVroLKoHmquUj4zHWuR+hEyNqlXsSKlYYF5F4NI6nl7tWCs0apKJ0lmfsXAPA==}
-
-  [email protected]:
-    resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==}
-    engines: {node: '>= 0.4'}
-
-  [email protected]:
-    resolution: {integrity: sha512-4i9Oj/LPeU3GaBeqPRqdon4s0+mSHsRnMO7hMZs1YOtHtGG10dSghkvY0EsB8LYbZ9qkLF36J2RNXmcMfAcmqQ==}
-
-  [email protected]:
-    resolution: {integrity: sha512-OiM2wrZ/wuhKkigASodFoo8wimG3H12LWQaH8qSPVJn9apWKFSH3YOCtbKpBorTVw/eI7cuT21XBbvwEswbIOA==}
-
-  [email protected]:
-    resolution: {integrity: sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==}
-
-  [email protected]:
-    resolution: {integrity: sha512-lqA4rGUf1JmacCNWWZx0Wv1dHqMwxzsDWYMTowuplHF3xH0N/MmrZ/G3BDZnzAkRmxDadujCjaKM2hqYdCBOGw==}
-
-  [email protected]:
-    resolution: {integrity: sha512-IjEjJOkH4FuJvHZVIW0QCDWxcG96kCq7An/KVH2NfJe6rKZU2AsHeB3OEjPNRxi4QC34Xdx7I2KGYn6IpT7gxQ==}
-
-  [email protected]:
-    resolution: {integrity: sha512-UvAgxwlNk+l9Oqgl/9MWK2eWRS7zgBW/nXX9AthV7nd/3lNejF138E7Xbmk9Zs4WjTJGs721r7fAEc7tNFoH7g==}
-    engines: {node: '>=16'}
-    peerDependencies:
-      '@types/mdast': ^4.0.0
-      unified: ^11.0.0
-    peerDependenciesMeta:
-      '@types/mdast':
-        optional: true
-
-  [email protected]:
-    resolution: {integrity: sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==}
-
-  [email protected]:
-    resolution: {integrity: sha512-ByefQKFN184LeiGRCabfl7zUJsdlMYWEhiLX1gpmQ11yFg6xSuOTW7LVCv0oc1x+YvUMJW23NU36sJX2RWGgvg==}
-
-  [email protected]:
-    resolution: {integrity: sha512-MMqgnP74Igy+S3WwnhQ7kqGlEerTETXMvJhrUzDikVZ2/uogJCb+WHUg97hK9/jcfc0dkD73s3LN8zU49cTEtA==}
-
-  [email protected]:
-    resolution: {integrity: sha512-Pjj2IYlUY3+D8x00UJsIOg5BEvfMyeI+2uLPn9VO9Wg4MEtN/VTIq2NEJQfde9PnX15KgtHyl9S0BcTnWrIuWg==}
-
-  [email protected]:
-    resolution: {integrity: sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==}
-
-  [email protected]:
-    resolution: {integrity: sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==}
-
-  [email protected]:
-    resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==}
-
-  [email protected]:
-    resolution: {integrity: sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==}
-
-  [email protected]:
-    resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
-    engines: {node: '>=4'}
-
-  [email protected]:
-    resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==}
-
-  [email protected]:
-    resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==}
-    engines: {node: '>= 0.4'}
-    hasBin: true
-
-  [email protected]:
-    resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==}
-    hasBin: true
-
-  [email protected]:
-    resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==}
-    engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
-
-  [email protected]:
-    resolution: {integrity: sha512-9aZLIrhRaD97sgVhtJOW6ckOEh6/GnvQtdVNfdZ6s67+3/XwLS9lBcQYzEEhYVeUowN7pRzMLsyGhK2i/xvWbw==}
-    engines: {node: '>= 0.8.15'}
-
-  [email protected]:
-    resolution: {integrity: sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==}
-
-  [email protected]:
-    resolution: {integrity: sha512-ZUz/69+SYpFN/g/lUlo2FXcIjRkSu3nDarreVdGGndHEBJ6cXPdKguS8JGxwj5HA5xIbVKSmLgr5b3AWxtRfvQ==}
-
-  [email protected]:
-    resolution: {integrity: sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==}
-    engines: {node: '>= 18'}
-
-  [email protected]:
-    resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
-
-  [email protected]:
-    resolution: {integrity: sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==}
-
-  [email protected]:
-    resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==}
-    engines: {node: '>=0.4'}
-
-  [email protected]:
-    resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
-
-  [email protected]:
-    resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==}
-    engines: {node: '>= 0.4'}
-
-  [email protected]:
-    resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==}
-    engines: {node: '>= 0.4'}
-
-  [email protected]:
-    resolution: {integrity: sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==}
-    engines: {node: '>=10'}
-
-  [email protected]:
-    resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
-
-  [email protected]:
-    resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==}
-
-  [email protected]:
-    resolution: {integrity: sha512-9BakfsO2aUQN2K9Fdbj87RJIEZ82Q9IGim7FqM5OsebfoFC6ZHXgDq/KvniuLTPdeM8wY2o6Dj3WQ7KeQCj3cA==}
-    engines: {node: '>=0.10.0'}
-
-  [email protected]:
-    resolution: {integrity: sha512-49oNpRjWRvnU8NyGVmUaYG4jtTkNonFZI86MmGRDqBphEK2EXT9gdEUoQPZhuBM8yWHxCWbobltqYO5M4XrUvQ==}
-
-  [email protected]:
-    resolution: {integrity: sha512-l4KnYfEyqYJxDwlNVyRfO2E4NTHfMKAWdUuA8J0yve2Dz/E/PdBepY03RvyJpssIpRFwJoCD55wA+mEDs6ByWA==}
-
-  [email protected]:
-    resolution: {integrity: sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==}
-
-  [email protected]:
-    resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
-    hasBin: true
-
-  [email protected]:
-    resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==}
-    engines: {node: '>=10'}
-    hasBin: true
-
-  [email protected]:
-    resolution: {integrity: sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==}
-    engines: {node: '>= 18'}
-
-  [email protected]:
-    resolution: {integrity: sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==}
-    engines: {node: '>= 18'}
-
-  [email protected]:
-    resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==}
-    engines: {node: '>= 0.4'}
-
-  [email protected]:
-    resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==}
-    engines: {node: '>= 0.4'}
-
-  [email protected]:
-    resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==}
-    engines: {node: '>= 0.4'}
-
-  [email protected]:
-    resolution: {integrity: sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==}
-    engines: {node: '>=0.10.0'}
-
-  [email protected]:
-    resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==}
-
-  [email protected]:
-    resolution: {integrity: sha512-eX2IQ6nFohW4DbvHIOLRB3MHFpYqaqvXd3Tp5e/T/dSH83fxaNJQRvDMhASmkNTsNTVF2/OOopzRCt7xokgPfg==}
-    engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
-
-  [email protected]:
-    resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
-    engines: {node: '>=8'}
-
-  [email protected]:
-    resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
-    engines: {node: '>=8'}
-
-  [email protected]:
-    resolution: {integrity: sha512-J0yvpLI7LSig3Z3acIuDLouV5UCKQqu8qOArwMx+/yPVC3WRMgrP67beaG8F+j4xfEWE0eVC4GeBCIXeOPra1g==}
-
-  [email protected]:
-    resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==}
-    engines: {node: '>= 0.4'}
-
-  [email protected]:
-    resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==}
-    engines: {node: '>= 0.4'}
-
-  [email protected]:
-    resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==}
-    engines: {node: '>= 0.4'}
-
-  [email protected]:
-    resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==}
-    engines: {node: '>= 0.4'}
-
-  [email protected]:
-    resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==}
-
-  [email protected]:
-    resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==}
-    engines: {node: '>= 6.0.0', npm: '>= 3.0.0'}
-
-  [email protected]:
-    resolution: {integrity: sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==}
-    engines: {node: '>= 14'}
-
-  [email protected]:
-    resolution: {integrity: sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==}
-    engines: {node: '>= 10.0.0', npm: '>= 3.0.0'}
-
-  [email protected]:
-    resolution: {integrity: sha512-INb7TM37/mAcsGmc9hyyI6+QR3rR1zVRu36B0NeGXKnOOLiZOfER5SA+N7X7k3yUYRzLWafduTDvJAfDswwEww==}
-
-  [email protected]:
-    resolution: {integrity: sha512-W6ZN4p58k8aDKA4XPcx2hpIQXBRAgyiWVkYhT7CvK6D3iAu7xjvVyhQHg2/iaKJZ1XVJ4r7XuwGL+WGEK37i9w==}
-    peerDependencies:
-      react: ^18.0.0 || ^19.0.0 || ^19.0.0-rc
-      react-dom: ^18.0.0 || ^19.0.0 || ^19.0.0-rc
-
-  [email protected]:
-    resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
-    engines: {node: '>=0.10.0'}
-
-  [email protected]:
-    resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
-
-  [email protected]:
-    resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==}
-    engines: {node: '>=0.10.0'}
-
-  [email protected]:
-    resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
-    engines: {node: '>=0.10.0'}
-
-  [email protected]:
-    resolution: {integrity: sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==}
-    engines: {node: '>= 12'}
-
-  [email protected]:
-    resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==}
-
-  [email protected]:
-    resolution: {integrity: sha512-qxQJTx2ryR0Dw0ITYyekNQWpz6f8dGd7vffGNflQQ3Iqj9NJ6qiZ7ELpZsJ/QBhIVAiDfXdag3+Gp8RvWa62AA==}
-    engines: {node: '>=12'}
-
-  [email protected]:
-    resolution: {integrity: sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==}
-    engines: {node: '>=0.10.0'}
-
-  [email protected]:
-    resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==}
-    engines: {node: '>= 10.x'}
-
-  [email protected]:
-    resolution: {integrity: sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA==}
-
-  [email protected]:
-    resolution: {integrity: sha512-yf7OENo23AGJhBriGx0QivY5JP6Y1HbrrDI6WLt6C5auYZXlQrheoY8hD4ibekFKz1HOfE48Ww8kMWMnJD/zcQ==}
-    engines: {node: '>=0.1.14'}
-
-  [email protected]:
-    resolution: {integrity: sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A==}
-
-  [email protected]:
-    resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==}
-    engines: {node: '>= 0.8'}
-
-  [email protected]:
-    resolution: {integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==}
-    engines: {node: '>= 0.8'}
-
-  [email protected]:
-    resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==}
-    engines: {node: '>= 0.4'}
-
-  [email protected]:
-    resolution: {integrity: sha512-u/1tdPl4yQnPBjnVrmdLo9gtuLvELKsAoRapekWggdiQNvvvum+jYF329d84NAa660KQw7pB2n36KrIKVoXa3A==}
-
-  [email protected]:
-    resolution: {integrity: sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==}
-    engines: {node: '>= 0.4'}
-
-  [email protected]:
-    resolution: {integrity: sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==}
-    engines: {node: '>= 0.4'}
-
-  [email protected]:
-    resolution: {integrity: sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==}
-
-  [email protected]:
-    resolution: {integrity: sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==}
-    engines: {node: '>= 0.4'}
-
-  [email protected]:
-    resolution: {integrity: sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==}
-    engines: {node: '>= 0.4'}
-
-  [email protected]:
-    resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==}
-    engines: {node: '>= 0.4'}
-
-  [email protected]:
-    resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==}
-
-  [email protected]:
-    resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
-    engines: {node: '>=4'}
-
-  [email protected]:
-    resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
-    engines: {node: '>=8'}
-
-  [email protected]:
-    resolution: {integrity: sha512-1tB5mhVo7U+ETBKNf92xT4hrQa3pm0MZ0PQvuDnWgAAGHDsfp4lPSpiS6psrSiet87wyGPh9ft6wmhOMQ0hDiw==}
-    engines: {node: '>=14.16'}
-
-  [email protected]:
-    resolution: {integrity: sha512-JFPn62D4kJaPTnhFUI244MThx+FEGbi+9dw1b9yBBQ+1CZpV7QAT8kUtJ7b7EUNdHajjF/0x8fT+16oLJoojLg==}
-
-  [email protected]:
-    resolution: {integrity: sha512-5A560JmXr7wDyGLK12Nq/EYS38VkGlglVzkis1JEdbGWSnbQIEhZzTJhzURXN5/8WwwFCs/f/VVcmkTppbXLow==}
-
-  [email protected]:
-    resolution: {integrity: sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==}
-    engines: {node: '>= 12.0.0'}
-    peerDependencies:
-      '@babel/core': '*'
-      babel-plugin-macros: '*'
-      react: '>= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0'
-    peerDependenciesMeta:
-      '@babel/core':
-        optional: true
-      babel-plugin-macros:
-        optional: true
-
-  [email protected]:
-    resolution: {integrity: sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==}
-
-  [email protected]:
-    resolution: {integrity: sha512-yQ3rwFWRfwNUY7H5vpU0wfdkNSnvnJinhF9830Swlaxl03zsOjCfmX0ugac+3LtK0lYSgwL/KXc8oYL3mG4YFQ==}
-
-  [email protected]:
-    resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
-    engines: {node: '>=8'}
-
-  [email protected]:
-    resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
-    engines: {node: '>= 0.4'}
-
-  [email protected]:
-    resolution: {integrity: sha512-qsjeeq5YjBZ5eMdFuUa4ZosMLxgr5RZ+F+Y1OrDhuOCEInRMA3x74XdBtggJcj9kOeInz0WE+LgCPDkZFlBYJw==}
-    engines: {node: '>=12.0.0'}
-
-  [email protected]:
-    resolution: {integrity: sha512-wfHRmHWk/isGNMwlLGlZX5Gzz/uTgo0o2IRuTMcf4CPuPFJZlq0rDaKUx+ozB5nBOReNV1kiOyzMfj+MBMikLw==}
-    peerDependencies:
-      react: ^16.11.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
-
-  [email protected]:
-    resolution: {integrity: sha512-EIHvdY5bPLuWForiR/AN2Bxngzpuwn1is4asboytXtpTgsArc+WmSJKVLlhdh71u7jFcryDqB2A8lQvj78MkyQ==}
-
-  [email protected]:
-    resolution: {integrity: sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng==}
-    engines: {node: '>=20'}
-
-  [email protected]:
-    resolution: {integrity: sha512-gBXpgUm/3rp1lMZZrM/w7D8GKqshif0zAymAhbCyIt8KMe+0v9DQ7cdYLR4FHH/cKpdTXb+A/tKKU3eolfsI+g==}
-
-  [email protected]:
-    resolution: {integrity: sha512-pONL5awpaQX4LN5eiv7moSiSPd/DLDzKVRJz8Q9PgzmAdd1R4307GQS2ZpfiN7ZmekdQrfhZZiSE5jkLR4WNaA==}
-
-  [email protected]:
-    resolution: {integrity: sha512-Re10+NauLTMCudc7T5WLFLAwDhQ0JWdrMK+9B2M8zR5hRExKmsRDCBA7/aV/pNJFltmBFO5BAMlQFi/vq3nKOg==}
-    engines: {node: '>=6'}
-
-  [email protected]:
-    resolution: {integrity: sha512-iOiPUo/BGnZ6+54OsWxZidGCsdU8YbE4PSpdPinp7DeMtUJNJBoJ/ouUSTJjHkh1KntHaltHl/gDs2FC4i5+Nw==}
-
-  [email protected]:
-    resolution: {integrity: sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A==}
-
-  [email protected]:
-    resolution: {integrity: sha512-B71/4oyj61iNH0KeCamLuE2rmKuTO5byTOSVwECM5FA7TiAiAW+UqTKZ9ERueC4qvgSttUhdmq1mXC3kJqGX7A==}
-    engines: {node: '>=12.22'}
-
-  [email protected]:
-    resolution: {integrity: sha512-a7wPxPdVlQL7lqvitHGGRsofhdwtkoSXPGATFuSOA2i1ZNQEPLrGnj68vOp2sOJTCFAQVXPeNMX/GctBaO9L2w==}
-
-  [email protected]:
-    resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==}
-
-  [email protected]:
-    resolution: {integrity: sha512-5uC6DDlmeqiOwCPmK9jMSdOuZTh8bU39Ys6yidB+UTt5hfZUPGAypSgFRiEp+jbi9qH40BLDvy85jIU88wKSqw==}
-
-  [email protected]:
-    resolution: {integrity: sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==}
-    engines: {node: '>=12.0.0'}
-
-  [email protected]:
-    resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
-    engines: {node: '>=8.0'}
-
-  [email protected]:
-    resolution: {integrity: sha512-IcmH1xB5576MJc9qcfEC/m/nQCFt3fzMHz45sSlgJyTWjRbKW1HAkJpuf3DgE57YzIlZcwcBZA5ENQbBo4aLkg==}
-
-  [email protected]:
-    resolution: {integrity: sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==}
-
-  [email protected]:
-    resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==}
-    engines: {node: '>=0.6'}
-
-  [email protected]:
-    resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==}
-
-  [email protected]:
-    resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==}
-
-  [email protected]:
-    resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==}
-    engines: {node: '>=18.12'}
-    peerDependencies:
-      typescript: '>=4.8.4'
-
-  [email protected]:
-    resolution: {integrity: sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==}
-    engines: {node: '>=6.10'}
-
-  [email protected]:
-    resolution: {integrity: sha512-yF35FCoEOFBzOclSkMNEUbFQZuv89KEQ+5Xz03HrMSGUGB1+r+El+JiGOFwsP4p9RFNzwlrydYoTLvPOuICl9w==}
-    engines: {node: '>=18'}
-
-  [email protected]:
-    resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==}
-
-  [email protected]:
-    resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==}
-
-  [email protected]:
-    resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
-
-  [email protected]:
-    resolution: {integrity: sha512-7bziOlRqH0hJx80h/3mbicLW7o8qLsH5+RaLR2t+OHM3D0JlWGODQKQ4cxbK7WlvmUxpcj6Kgu6EKqjrGFe3QQ==}
-
-  [email protected]:
-    resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
-    engines: {node: '>= 0.8.0'}
-
-  [email protected]:
-    resolution: {integrity: sha512-GeJop7+u7BYlQ6yQCAY1nBQiRSHR+6OdCEtd8Bwp9a3NK3+fWAVjOaPKJDteB9f6cIJ0wt4IfnScjLG450EpXA==}
-    engines: {node: '>=20'}
-
-  [email protected]:
-    resolution: {integrity: sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==}
-    engines: {node: '>= 0.6'}
-
-  [email protected]:
-    resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==}
-    engines: {node: '>= 0.4'}
-
-  [email protected]:
-    resolution: {integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==}
-    engines: {node: '>= 0.4'}
-
-  [email protected]:
-    resolution: {integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==}
-    engines: {node: '>= 0.4'}
-
-  [email protected]:
-    resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==}
-    engines: {node: '>= 0.4'}
-
-  [email protected]:
-    resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==}
-    engines: {node: '>=14.17'}
-    hasBin: true
-
-  [email protected]:
-    resolution: {integrity: sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==}
-
-  [email protected]:
-    resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==}
-    engines: {node: '>= 0.4'}
-
-  [email protected]:
-    resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==}
-
-  [email protected]:
-    resolution: {integrity: sha512-QEg3HPMll0o3t2ourKwOeUAZ159Kn9mx5pnzHRQO8+Wixmh88YdZRiIwat0iNzNNXn0yoEtXJqFpyW7eM8BV7g==}
-    engines: {node: '>=20.18.1'}
-
-  [email protected]:
-    resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==}
-
-  [email protected]:
-    resolution: {integrity: sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==}
-
-  [email protected]:
-    resolution: {integrity: sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==}
-
-  [email protected]:
-    resolution: {integrity: sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ==}
-
-  [email protected]:
-    resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==}
-
-  [email protected]:
-    resolution: {integrity: sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==}
-
-  [email protected]:
-    resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==}
-
-  [email protected]:
-    resolution: {integrity: sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==}
-
-  [email protected]:
-    resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==}
-
-  [email protected]:
-    resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==}
-    engines: {node: '>= 0.8'}
-
-  [email protected]:
-    resolution: {integrity: sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg==}
-
-  [email protected]:
-    resolution: {integrity: sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A==}
-    hasBin: true
-    peerDependencies:
-      browserslist: '>= 4.21.0'
-
-  [email protected]:
-    resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
-
-  [email protected]:
-    resolution: {integrity: sha512-n2huDr9h9yzd6exQVnH/jU5mr+Pfx08LRXXZhkLLetAMESRj+anQsTAh940iMrIetKAmry9coFuZQ2jY8/p3WA==}
-    engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
-
-  [email protected]:
-    resolution: {integrity: sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==}
-    engines: {node: '>=10'}
-    peerDependencies:
-      '@types/react': '*'
-      react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc
-    peerDependenciesMeta:
-      '@types/react':
-        optional: true
-
-  [email protected]:
-    resolution: {integrity: sha512-OdsJnC/znPvHCHLQH/duvQNXnP1w0hPfS+tkSi3mAbfjYBGh4JnyfdwkQBfIVf7t8gs9eSX/CntxUMvtKdG2MQ==}
-    peerDependencies:
-      react: ^16.8.0 || ^17.0.0 || ^18.0.0 || >=19.0.0-rc <19.0.0 || ^19.0.0
-
-  [email protected]:
-    resolution: {integrity: sha512-tpZZ+EX0gaghDAiFR37hj5MgY6ZN55kLiPkJsKxBMZ6GZdOSPJXiOzPM984oPYZ5AnehYx5WQp1+ME8I/P/pRA==}
-    peerDependencies:
-      '@types/react': '*'
-      react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
-    peerDependenciesMeta:
-      '@types/react':
-        optional: true
-
-  [email protected]:
-    resolution: {integrity: sha512-DXgG0kkgJN45TcyoXL49vJnn55LehnrmoHc7MbKi+QDBvr8dsesqws8UlyIWGHMR+JXgxc1nvY+jDGMlycsUcw==}
-    peerDependencies:
-      react: '>= 16.x'
-
-  [email protected]:
-    resolution: {integrity: sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==}
-    engines: {node: '>=10'}
-    peerDependencies:
-      '@types/react': '*'
-      react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc
-    peerDependenciesMeta:
-      '@types/react':
-        optional: true
-
-  [email protected]:
-    resolution: {integrity: sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A==}
-    peerDependencies:
-      react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
-
-  [email protected]:
-    resolution: {integrity: sha512-1MLa5ouZiOmQzUbjbu9VmjLzn1QLXBhwpUa7kdLUQK+KQ5KA9I1vk5U4YHe/X2Ch7PYnJfWuWT+VbuxbGwljhw==}
-
-  [email protected]:
-    resolution: {integrity: sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==}
-    hasBin: true
-
-  [email protected]:
-    resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==}
-    hasBin: true
-
-  [email protected]:
-    resolution: {integrity: sha512-LdabyT4OffkyXFCe9UT+uMkxNBs5rcTVuZClvxQr08D5TUgo1OFKkoT65qYRCsiKBl/usHjpXvP4hHMzzDRj3A==}
-
-  [email protected]:
-    resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==}
-    engines: {node: '>= 0.8'}
-
-  [email protected]:
-    resolution: {integrity: sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==}
-
-  [email protected]:
-    resolution: {integrity: sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==}
-
-  [email protected]:
-    resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==}
-
-  [email protected]:
-    resolution: {integrity: sha512-PnpQQMuxlwYdocC8fIJqVXvkeViHYzotI+NJrCuav0ZYFoq912ZHBk3mCeuj+5/VpodOjPe1z0Fk2ihgzlXqjQ==}
-
-  [email protected]:
-    resolution: {integrity: sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA==}
-    engines: {node: '>=14.0.0'}
-
-  [email protected]:
-    resolution: {integrity: sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg==}
-
-  [email protected]:
-    resolution: {integrity: sha512-cxWNPesCnQCcMPeenjKKsOCKQZ/L6Tv19DTRIGuLWe32lyzWhihGVJ/rcckZXJxfdKCFvRLS3fpBIsV/ZGX4zA==}
-
-  [email protected]:
-    resolution: {integrity: sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==}
-
-  [email protected]:
-    resolution: {integrity: sha512-woByF3PDpkHFUreUa7Hos7+pUWdeWMXRd26+ZX2A8cFx6v/JPTtd4/uN0/jB6XQHYaOlHbio03NTHCqrgG5n7g==}
-    hasBin: true
-
-  [email protected]:
-    resolution: {integrity: sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==}
-
-  [email protected]:
-    resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==}
-
-  [email protected]:
-    resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==}
-    engines: {node: '>= 0.4'}
-
-  [email protected]:
-    resolution: {integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==}
-    engines: {node: '>= 0.4'}
-
-  [email protected]:
-    resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==}
-    engines: {node: '>= 0.4'}
-
-  [email protected]:
-    resolution: {integrity: sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==}
-    engines: {node: '>= 0.4'}
-
-  [email protected]:
-    resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
-    engines: {node: '>= 8'}
-    hasBin: true
-
-  [email protected]:
-    resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==}
-    engines: {node: '>=0.10.0'}
-
-  [email protected]:
-    resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
-
-  [email protected]:
-    resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==}
-    engines: {node: '>=0.4'}
-
-  [email protected]:
-    resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
-
-  [email protected]:
-    resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==}
-    engines: {node: '>= 6'}
-
-  [email protected]:
-    resolution: {integrity: sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==}
-    engines: {node: '>= 14.6'}
-    hasBin: true
-
-  [email protected]:
-    resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
-    engines: {node: '>=10'}
-
-  [email protected]:
-    resolution: {integrity: sha512-WPsqwxITS2tzx1bzhIKsEs19ABD5vmCVa4xBo2tq/SrV4RNZtfws1EnCWQXM6yh8bD08a1idvkB5MZSBiZsjwg==}
-
-  [email protected]:
-    resolution: {integrity: sha512-JInaHOamG8pt5+Ey8kGmdcAcg3OL9reK8ltczgHTAwNhMys/6ThXHityHxVV2p3fkw/c+MAvBHFVYHFZDmjMCQ==}
-
-  [email protected]:
-    resolution: {integrity: sha512-PIJDIZKtokhof+9+60cpockVOq05sJzHCriyvaLBmEJixseQ1a5Kdov6fWZfWOu5SK9c+FhH1jU0tntLxRJYMA==}
-    engines: {node: '>=12.7.0'}
-    peerDependencies:
-      react: '>=16.8'
-    peerDependenciesMeta:
-      react:
-        optional: true
-
-  [email protected]:
-    resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==}
-
-snapshots:
-
-  '@alloc/[email protected]': {}
-
-  '@ant-design/[email protected]':
-    dependencies:
-      '@ant-design/fast-color': 2.0.6
-
-  '@ant-design/[email protected]([email protected]([email protected]))([email protected])':
-    dependencies:
-      '@ant-design/cssinjs': 1.24.0([email protected]([email protected]))([email protected])
-      '@babel/runtime': 7.28.4
-      rc-util: 5.44.4([email protected]([email protected]))([email protected])
-      react: 19.2.0
-      react-dom: 19.2.0([email protected])
-
-  '@ant-design/[email protected]([email protected]([email protected]))([email protected])':
-    dependencies:
-      '@babel/runtime': 7.28.4
-      '@emotion/hash': 0.8.0
-      '@emotion/unitless': 0.7.5
-      classnames: 2.5.1
-      csstype: 3.1.3
-      rc-util: 5.44.4([email protected]([email protected]))([email protected])
-      react: 19.2.0
-      react-dom: 19.2.0([email protected])
-      stylis: 4.3.6
-
-  '@ant-design/[email protected]':
-    dependencies:
-      '@babel/runtime': 7.28.4
-
-  '@ant-design/[email protected]': {}
-
-  '@ant-design/[email protected]([email protected]([email protected]))([email protected])':
-    dependencies:
-      '@ant-design/colors': 7.2.1
-      '@ant-design/icons-svg': 4.4.2
-      '@babel/runtime': 7.28.4
-      classnames: 2.5.1
-      rc-util: 5.44.4([email protected]([email protected]))([email protected])
-      react: 19.2.0
-      react-dom: 19.2.0([email protected])
-
-  '@ant-design/[email protected]([email protected])':
-    dependencies:
-      '@babel/runtime': 7.28.4
-      classnames: 2.5.1
-      json2mq: 0.2.0
-      react: 19.2.0
-      resize-observer-polyfill: 1.5.1
-      throttle-debounce: 5.0.2
-
-  '@antfu/[email protected]':
-    dependencies:
-      package-manager-detector: 1.5.0
-      tinyexec: 1.0.1
-
-  '@antfu/[email protected]': {}
-
-  '@asteasolutions/[email protected]([email protected])':
-    dependencies:
-      openapi3-ts: 4.5.0
-      zod: 4.1.12
-
-  '@babel/[email protected]':
-    dependencies:
-      '@babel/helper-validator-identifier': 7.28.5
-      js-tokens: 4.0.0
-      picocolors: 1.1.1
-
-  '@babel/[email protected]': {}
-
-  '@babel/[email protected]':
-    dependencies:
-      '@babel/code-frame': 7.27.1
-      '@babel/generator': 7.28.5
-      '@babel/helper-compilation-targets': 7.27.2
-      '@babel/helper-module-transforms': 7.28.3(@babel/[email protected])
-      '@babel/helpers': 7.28.4
-      '@babel/parser': 7.28.5
-      '@babel/template': 7.27.2
-      '@babel/traverse': 7.28.5
-      '@babel/types': 7.28.5
-      '@jridgewell/remapping': 2.3.5
-      convert-source-map: 2.0.0
-      debug: 4.4.1
-      gensync: 1.0.0-beta.2
-      json5: 2.2.3
-      semver: 6.3.1
-    transitivePeerDependencies:
-      - supports-color
-
-  '@babel/[email protected]':
-    dependencies:
-      '@babel/parser': 7.28.5
-      '@babel/types': 7.28.5
-      '@jridgewell/gen-mapping': 0.3.12
-      '@jridgewell/trace-mapping': 0.3.29
-      jsesc: 3.1.0
-
-  '@babel/[email protected]':
-    dependencies:
-      '@babel/compat-data': 7.28.5
-      '@babel/helper-validator-option': 7.27.1
-      browserslist: 4.27.0
-      lru-cache: 5.1.1
-      semver: 6.3.1
-
-  '@babel/[email protected](@babel/[email protected])':
-    dependencies:
-      '@babel/core': 7.28.5
-      '@babel/helper-compilation-targets': 7.27.2
-      '@babel/helper-plugin-utils': 7.27.1
-      debug: 4.4.1
-      lodash.debounce: 4.0.8
-      resolve: 1.22.10
-    transitivePeerDependencies:
-      - supports-color
-
-  '@babel/[email protected]': {}
-
-  '@babel/[email protected]':
-    dependencies:
-      '@babel/traverse': 7.28.5
-      '@babel/types': 7.28.5
-    transitivePeerDependencies:
-      - supports-color
-
-  '@babel/[email protected](@babel/[email protected])':
-    dependencies:
-      '@babel/core': 7.28.5
-      '@babel/helper-module-imports': 7.27.1
-      '@babel/helper-validator-identifier': 7.28.5
-      '@babel/traverse': 7.28.5
-    transitivePeerDependencies:
-      - supports-color
-
-  '@babel/[email protected]': {}
-
-  '@babel/[email protected]': {}
-
-  '@babel/[email protected]': {}
-
-  '@babel/[email protected]': {}
-
-  '@babel/[email protected]':
-    dependencies:
-      '@babel/template': 7.27.2
-      '@babel/types': 7.28.5
-
-  '@babel/[email protected]':
-    dependencies:
-      '@babel/types': 7.28.5
-
-  '@babel/[email protected](@babel/[email protected])':
-    dependencies:
-      '@babel/core': 7.28.5
-      '@babel/helper-module-imports': 7.27.1
-      '@babel/helper-plugin-utils': 7.27.1
-      babel-plugin-polyfill-corejs2: 0.4.14(@babel/[email protected])
-      babel-plugin-polyfill-corejs3: 0.13.0(@babel/[email protected])
-      babel-plugin-polyfill-regenerator: 0.6.5(@babel/[email protected])
-      semver: 6.3.1
-    transitivePeerDependencies:
-      - supports-color
-
-  '@babel/[email protected]': {}
-
-  '@babel/[email protected]':
-    dependencies:
-      '@babel/code-frame': 7.27.1
-      '@babel/parser': 7.28.5
-      '@babel/types': 7.28.5
-
-  '@babel/[email protected]':
-    dependencies:
-      '@babel/code-frame': 7.27.1
-      '@babel/generator': 7.28.5
-      '@babel/helper-globals': 7.28.0
-      '@babel/parser': 7.28.5
-      '@babel/template': 7.27.2
-      '@babel/types': 7.28.5
-      debug: 4.4.1
-    transitivePeerDependencies:
-      - supports-color
-
-  '@babel/[email protected]':
-    dependencies:
-      '@babel/helper-string-parser': 7.27.1
-      '@babel/helper-validator-identifier': 7.28.5
-
-  '@braintree/[email protected]': {}
-
-  '@bull-board/[email protected](@bull-board/[email protected])':
-    dependencies:
-      '@bull-board/ui': 6.14.0
-      redis-info: 3.1.0
-
-  '@bull-board/[email protected]':
-    dependencies:
-      '@bull-board/api': 6.14.0(@bull-board/[email protected])
-      '@bull-board/ui': 6.14.0
-      ejs: 3.1.10
-      express: 5.1.0
-    transitivePeerDependencies:
-      - supports-color
-
-  '@bull-board/[email protected]':
-    dependencies:
-      '@bull-board/api': 6.14.0(@bull-board/[email protected])
-
-  '@chevrotain/[email protected]':
-    dependencies:
-      '@chevrotain/gast': 11.0.3
-      '@chevrotain/types': 11.0.3
-      lodash-es: 4.17.21
-
-  '@chevrotain/[email protected]':
-    dependencies:
-      '@chevrotain/types': 11.0.3
-      lodash-es: 4.17.21
-
-  '@chevrotain/[email protected]': {}
-
-  '@chevrotain/[email protected]': {}
-
-  '@chevrotain/[email protected]': {}
-
-  '@dnd-kit/[email protected]([email protected])':
-    dependencies:
-      react: 19.2.0
-      tslib: 2.8.1
-
-  '@dnd-kit/[email protected]([email protected]([email protected]))([email protected])':
-    dependencies:
-      '@dnd-kit/accessibility': 3.1.1([email protected])
-      '@dnd-kit/utilities': 3.2.2([email protected])
-      react: 19.2.0
-      react-dom: 19.2.0([email protected])
-      tslib: 2.8.1
-
-  '@dnd-kit/[email protected](@dnd-kit/[email protected]([email protected]([email protected]))([email protected]))([email protected])':
-    dependencies:
-      '@dnd-kit/core': 6.3.1([email protected]([email protected]))([email protected])
-      '@dnd-kit/utilities': 3.2.2([email protected])
-      react: 19.2.0
-      tslib: 2.8.1
-
-  '@dnd-kit/[email protected](@dnd-kit/[email protected]([email protected]([email protected]))([email protected]))([email protected])':
-    dependencies:
-      '@dnd-kit/core': 6.3.1([email protected]([email protected]))([email protected])
-      '@dnd-kit/utilities': 3.2.2([email protected])
-      react: 19.2.0
-      tslib: 2.8.1
-
-  '@dnd-kit/[email protected]([email protected])':
-    dependencies:
-      react: 19.2.0
-      tslib: 2.8.1
-
-  '@drizzle-team/[email protected]': {}
-
-  '@emnapi/[email protected]':
-    dependencies:
-      '@emnapi/wasi-threads': 1.0.4
-      tslib: 2.8.1
-    optional: true
-
-  '@emnapi/[email protected]':
-    dependencies:
-      tslib: 2.8.1
-    optional: true
-
-  '@emnapi/[email protected]':
-    dependencies:
-      tslib: 2.8.1
-    optional: true
-
-  '@emoji-mart/[email protected]': {}
-
-  '@emoji-mart/[email protected]([email protected])([email protected])':
-    dependencies:
-      emoji-mart: 5.6.0
-      react: 19.2.0
-
-  '@emotion/[email protected]':
-    dependencies:
-      '@babel/helper-module-imports': 7.27.1
-      '@babel/runtime': 7.28.4
-      '@emotion/hash': 0.9.2
-      '@emotion/memoize': 0.9.0
-      '@emotion/serialize': 1.3.3
-      babel-plugin-macros: 3.1.0
-      convert-source-map: 1.9.0
-      escape-string-regexp: 4.0.0
-      find-root: 1.1.0
-      source-map: 0.5.7
-      stylis: 4.2.0
-    transitivePeerDependencies:
-      - supports-color
-
-  '@emotion/[email protected]':
-    dependencies:
-      '@emotion/memoize': 0.9.0
-      '@emotion/sheet': 1.4.0
-      '@emotion/utils': 1.4.2
-      '@emotion/weak-memoize': 0.4.0
-      stylis: 4.2.0
-
-  '@emotion/[email protected]':
-    dependencies:
-      '@emotion/babel-plugin': 11.13.5
-      '@emotion/cache': 11.14.0
-      '@emotion/serialize': 1.3.3
-      '@emotion/sheet': 1.4.0
-      '@emotion/utils': 1.4.2
-    transitivePeerDependencies:
-      - supports-color
-
-  '@emotion/[email protected]': {}
-
-  '@emotion/[email protected]': {}
-
-  '@emotion/[email protected]': {}
-
-  '@emotion/[email protected](@types/[email protected])([email protected])':
-    dependencies:
-      '@babel/runtime': 7.28.4
-      '@emotion/babel-plugin': 11.13.5
-      '@emotion/cache': 11.14.0
-      '@emotion/serialize': 1.3.3
-      '@emotion/use-insertion-effect-with-fallbacks': 1.2.0([email protected])
-      '@emotion/utils': 1.4.2
-      '@emotion/weak-memoize': 0.4.0
-      hoist-non-react-statics: 3.3.2
-      react: 19.2.0
-    optionalDependencies:
-      '@types/react': 19.2.2
-    transitivePeerDependencies:
-      - supports-color
-
-  '@emotion/[email protected]':
-    dependencies:
-      '@emotion/hash': 0.9.2
-      '@emotion/memoize': 0.9.0
-      '@emotion/unitless': 0.10.0
-      '@emotion/utils': 1.4.2
-      csstype: 3.1.3
-
-  '@emotion/[email protected]': {}
-
-  '@emotion/[email protected]': {}
-
-  '@emotion/[email protected]': {}
-
-  '@emotion/[email protected]([email protected])':
-    dependencies:
-      react: 19.2.0
-
-  '@emotion/[email protected]': {}
-
-  '@emotion/[email protected]': {}
-
-  '@esbuild-kit/[email protected]':
-    dependencies:
-      esbuild: 0.18.20
-      source-map-support: 0.5.21
-
-  '@esbuild-kit/[email protected]':
-    dependencies:
-      '@esbuild-kit/core-utils': 3.3.2
-      get-tsconfig: 4.10.1
-
-  '@esbuild/[email protected]':
-    optional: true
-
-  '@esbuild/[email protected]':
-    optional: true
-
-  '@esbuild/[email protected]':
-    optional: true
-
-  '@esbuild/[email protected]':
-    optional: true
-
-  '@esbuild/[email protected]':
-    optional: true
-
-  '@esbuild/[email protected]':
-    optional: true
-
-  '@esbuild/[email protected]':
-    optional: true
-
-  '@esbuild/[email protected]':
-    optional: true
-
-  '@esbuild/[email protected]':
-    optional: true
-
-  '@esbuild/[email protected]':
-    optional: true
-
-  '@esbuild/[email protected]':
-    optional: true
-
-  '@esbuild/[email protected]':
-    optional: true
-
-  '@esbuild/[email protected]':
-    optional: true
-
-  '@esbuild/[email protected]':
-    optional: true
-
-  '@esbuild/[email protected]':
-    optional: true
-
-  '@esbuild/[email protected]':
-    optional: true
-
-  '@esbuild/[email protected]':
-    optional: true
-
-  '@esbuild/[email protected]':
-    optional: true
-
-  '@esbuild/[email protected]':
-    optional: true
-
-  '@esbuild/[email protected]':
-    optional: true
-
-  '@esbuild/[email protected]':
-    optional: true
-
-  '@esbuild/[email protected]':
-    optional: true
-
-  '@esbuild/[email protected]':
-    optional: true
-
-  '@esbuild/[email protected]':
-    optional: true
-
-  '@esbuild/[email protected]':
-    optional: true
-
-  '@esbuild/[email protected]':
-    optional: true
-
-  '@esbuild/[email protected]':
-    optional: true
-
-  '@esbuild/[email protected]':
-    optional: true
-
-  '@esbuild/[email protected]':
-    optional: true
-
-  '@esbuild/[email protected]':
-    optional: true
-
-  '@esbuild/[email protected]':
-    optional: true
-
-  '@esbuild/[email protected]':
-    optional: true
-
-  '@esbuild/[email protected]':
-    optional: true
-
-  '@esbuild/[email protected]':
-    optional: true
-
-  '@esbuild/[email protected]':
-    optional: true
-
-  '@esbuild/[email protected]':
-    optional: true
-
-  '@esbuild/[email protected]':
-    optional: true
-
-  '@esbuild/[email protected]':
-    optional: true
-
-  '@esbuild/[email protected]':
-    optional: true
-
-  '@esbuild/[email protected]':
-    optional: true
-
-  '@esbuild/[email protected]':
-    optional: true
-
-  '@esbuild/[email protected]':
-    optional: true
-
-  '@esbuild/[email protected]':
-    optional: true
-
-  '@esbuild/[email protected]':
-    optional: true
-
-  '@esbuild/[email protected]':
-    optional: true
-
-  '@esbuild/[email protected]':
-    optional: true
-
-  '@esbuild/[email protected]':
-    optional: true
-
-  '@esbuild/[email protected]':
-    optional: true
-
-  '@eslint-community/[email protected]([email protected]([email protected]))':
-    dependencies:
-      eslint: 9.38.0([email protected])
-      eslint-visitor-keys: 3.4.3
-
-  '@eslint-community/[email protected]': {}
-
-  '@eslint/[email protected]':
-    dependencies:
-      '@eslint/object-schema': 2.1.7
-      debug: 4.4.1
-      minimatch: 3.1.2
-    transitivePeerDependencies:
-      - supports-color
-
-  '@eslint/[email protected]':
-    dependencies:
-      '@eslint/core': 0.16.0
-
-  '@eslint/[email protected]':
-    dependencies:
-      '@types/json-schema': 7.0.15
-
-  '@eslint/[email protected]':
-    dependencies:
-      ajv: 6.12.6
-      debug: 4.4.1
-      espree: 10.4.0
-      globals: 14.0.0
-      ignore: 5.3.2
-      import-fresh: 3.3.1
-      js-yaml: 4.1.0
-      minimatch: 3.1.2
-      strip-json-comments: 3.1.1
-    transitivePeerDependencies:
-      - supports-color
-
-  '@eslint/[email protected]': {}
-
-  '@eslint/[email protected]': {}
-
-  '@eslint/[email protected]':
-    dependencies:
-      '@eslint/core': 0.16.0
-      levn: 0.4.1
-
-  '@floating-ui/[email protected]': {}
-
-  '@floating-ui/[email protected]':
-    dependencies:
-      '@floating-ui/utils': 0.2.10
-
-  '@floating-ui/[email protected]':
-    dependencies:
-      '@floating-ui/core': 0.7.3
-
-  '@floating-ui/[email protected]':
-    dependencies:
-      '@floating-ui/core': 1.7.3
-      '@floating-ui/utils': 0.2.10
-
-  '@floating-ui/[email protected](@types/[email protected])([email protected]([email protected]))([email protected])':
-    dependencies:
-      '@floating-ui/dom': 0.5.4
-      react: 19.2.0
-      react-dom: 19.2.0([email protected])
-      use-isomorphic-layout-effect: 1.2.1(@types/[email protected])([email protected])
-    transitivePeerDependencies:
-      - '@types/react'
-
-  '@floating-ui/[email protected]([email protected]([email protected]))([email protected])':
-    dependencies:
-      '@floating-ui/dom': 1.7.4
-      react: 19.2.0
-      react-dom: 19.2.0([email protected])
-
-  '@floating-ui/[email protected]([email protected]([email protected]))([email protected])':
-    dependencies:
-      '@floating-ui/react-dom': 2.1.6([email protected]([email protected]))([email protected])
-      '@floating-ui/utils': 0.2.10
-      react: 19.2.0
-      react-dom: 19.2.0([email protected])
-      tabbable: 6.3.0
-
-  '@floating-ui/[email protected]': {}
-
-  '@formatjs/[email protected]':
-    dependencies:
-      '@formatjs/fast-memoize': 2.2.7
-      '@formatjs/intl-localematcher': 0.6.2
-      decimal.js: 10.6.0
-      tslib: 2.8.1
-
-  '@formatjs/[email protected]':
-    dependencies:
-      tslib: 2.8.1
-
-  '@formatjs/[email protected]':
-    dependencies:
-      '@formatjs/ecma402-abstract': 2.3.6
-      '@formatjs/icu-skeleton-parser': 1.8.16
-      tslib: 2.8.1
-
-  '@formatjs/[email protected]':
-    dependencies:
-      '@formatjs/ecma402-abstract': 2.3.6
-      tslib: 2.8.1
-
-  '@formatjs/[email protected]':
-    dependencies:
-      tslib: 2.8.1
-
-  '@formatjs/[email protected]':
-    dependencies:
-      tslib: 2.8.1
-
-  '@giscus/[email protected]([email protected]([email protected]))([email protected])':
-    dependencies:
-      giscus: 1.6.0
-      react: 19.2.0
-      react-dom: 19.2.0([email protected])
-
-  '@hono/[email protected]([email protected])':
-    dependencies:
-      hono: 4.10.2
-
-  '@hono/[email protected]([email protected])([email protected])':
-    dependencies:
-      '@asteasolutions/zod-to-openapi': 8.1.0([email protected])
-      '@hono/zod-validator': 0.7.4([email protected])([email protected])
-      hono: 4.10.2
-      openapi3-ts: 4.5.0
-      zod: 4.1.12
-
-  '@hono/[email protected]([email protected])([email protected])':
-    dependencies:
-      hono: 4.10.2
-      zod: 4.1.12
-
-  '@hookform/[email protected]([email protected]([email protected]))':
-    dependencies:
-      '@standard-schema/utils': 0.3.0
-      react-hook-form: 7.65.0([email protected])
-
-  '@humanfs/[email protected]': {}
-
-  '@humanfs/[email protected]':
-    dependencies:
-      '@humanfs/core': 0.19.1
-      '@humanwhocodes/retry': 0.3.1
-
-  '@humanwhocodes/[email protected]': {}
-
-  '@humanwhocodes/[email protected]': {}
-
-  '@humanwhocodes/[email protected]': {}
-
-  '@iconify/[email protected]': {}
-
-  '@iconify/[email protected]':
-    dependencies:
-      '@antfu/install-pkg': 1.1.0
-      '@antfu/utils': 9.3.0
-      '@iconify/types': 2.0.0
-      debug: 4.4.1
-      globals: 15.15.0
-      kolorist: 1.8.0
-      local-pkg: 1.1.2
-      mlly: 1.8.0
-    transitivePeerDependencies:
-      - supports-color
-
-  '@img/[email protected]':
-    optionalDependencies:
-      '@img/sharp-libvips-darwin-arm64': 1.2.0
-    optional: true
-
-  '@img/[email protected]':
-    optionalDependencies:
-      '@img/sharp-libvips-darwin-x64': 1.2.0
-    optional: true
-
-  '@img/[email protected]':
-    optional: true
-
-  '@img/[email protected]':
-    optional: true
-
-  '@img/[email protected]':
-    optional: true
-
-  '@img/[email protected]':
-    optional: true
-
-  '@img/[email protected]':
-    optional: true
-
-  '@img/[email protected]':
-    optional: true
-
-  '@img/[email protected]':
-    optional: true
-
-  '@img/[email protected]':
-    optional: true
-
-  '@img/[email protected]':
-    optional: true
-
-  '@img/[email protected]':
-    optionalDependencies:
-      '@img/sharp-libvips-linux-arm64': 1.2.0
-    optional: true
-
-  '@img/[email protected]':
-    optionalDependencies:
-      '@img/sharp-libvips-linux-arm': 1.2.0
-    optional: true
-
-  '@img/[email protected]':
-    optionalDependencies:
-      '@img/sharp-libvips-linux-ppc64': 1.2.0
-    optional: true
-
-  '@img/[email protected]':
-    optionalDependencies:
-      '@img/sharp-libvips-linux-s390x': 1.2.0
-    optional: true
-
-  '@img/[email protected]':
-    optionalDependencies:
-      '@img/sharp-libvips-linux-x64': 1.2.0
-    optional: true
-
-  '@img/[email protected]':
-    optionalDependencies:
-      '@img/sharp-libvips-linuxmusl-arm64': 1.2.0
-    optional: true
-
-  '@img/[email protected]':
-    optionalDependencies:
-      '@img/sharp-libvips-linuxmusl-x64': 1.2.0
-    optional: true
-
-  '@img/[email protected]':
-    dependencies:
-      '@emnapi/runtime': 1.4.5
-    optional: true
-
-  '@img/[email protected]':
-    optional: true
-
-  '@img/[email protected]':
-    optional: true
-
-  '@img/[email protected]':
-    optional: true
-
-  '@ioredis/[email protected]': {}
-
-  '@jridgewell/[email protected]':
-    dependencies:
-      '@jridgewell/sourcemap-codec': 1.5.5
-      '@jridgewell/trace-mapping': 0.3.29
-
-  '@jridgewell/[email protected]':
-    dependencies:
-      '@jridgewell/gen-mapping': 0.3.12
-      '@jridgewell/trace-mapping': 0.3.29
-
-  '@jridgewell/[email protected]': {}
-
-  '@jridgewell/[email protected]': {}
-
-  '@jridgewell/[email protected]':
-    dependencies:
-      '@jridgewell/resolve-uri': 3.1.2
-      '@jridgewell/sourcemap-codec': 1.5.5
-
-  '@lit-labs/[email protected]': {}
-
-  '@lit/[email protected]':
-    dependencies:
-      '@lit-labs/ssr-dom-shim': 1.4.0
-
-  '@lobehub/[email protected]': {}
-
-  '@lobehub/[email protected](@babel/[email protected])(@types/[email protected])(@types/[email protected])([email protected]([email protected])([email protected])([email protected]([email protected]))([email protected]))([email protected]([email protected]([email protected]))([email protected]))([email protected])([email protected])([email protected]([email protected]))([email protected])':
-    dependencies:
-      '@lobehub/emojilib': 1.0.0
-      '@lobehub/ui': 2.13.5(@babel/[email protected])(@types/[email protected])(@types/[email protected])([email protected]([email protected])([email protected])([email protected]([email protected]))([email protected]))([email protected]([email protected]([email protected]))([email protected]))([email protected])([email protected])([email protected]([email protected]))([email protected])
-      antd: 5.27.6([email protected])([email protected])([email protected]([email protected]))([email protected])
-      antd-style: 3.7.1(@types/[email protected])([email protected]([email protected])([email protected])([email protected]([email protected]))([email protected]))([email protected]([email protected]))([email protected])
-      emoji-regex: 10.6.0
-      lodash-es: 4.17.21
-      lucide-react: 0.469.0([email protected])
-      react: 19.2.0
-      react-dom: 19.2.0([email protected])
-      react-layout-kit: 1.9.2([email protected])
-      url-join: 5.0.0
-    transitivePeerDependencies:
-      - '@babel/core'
-      - '@types/mdast'
-      - '@types/react'
-      - framer-motion
-      - micromark
-      - micromark-util-types
-      - supports-color
-
-  '@lobehub/[email protected](@babel/[email protected])(@types/[email protected])(@types/[email protected])([email protected]([email protected])([email protected])([email protected]([email protected]))([email protected]))([email protected]([email protected]([email protected]))([email protected]))([email protected])([email protected])([email protected]([email protected]))([email protected])':
-    dependencies:
-      '@lobehub/ui': 2.13.5(@babel/[email protected])(@types/[email protected])(@types/[email protected])([email protected]([email protected])([email protected])([email protected]([email protected]))([email protected]))([email protected]([email protected]([email protected]))([email protected]))([email protected])([email protected])([email protected]([email protected]))([email protected])
-      antd: 5.27.6([email protected])([email protected])([email protected]([email protected]))([email protected])
-      antd-style: 3.7.1(@types/[email protected])([email protected]([email protected])([email protected])([email protected]([email protected]))([email protected]))([email protected]([email protected]))([email protected])
-      lucide-react: 0.469.0([email protected])
-      polished: 4.3.1
-      react: 19.2.0
-      react-dom: 19.2.0([email protected])
-      react-layout-kit: 2.0.0([email protected])
-    transitivePeerDependencies:
-      - '@babel/core'
-      - '@types/mdast'
-      - '@types/react'
-      - framer-motion
-      - micromark
-      - micromark-util-types
-      - supports-color
-
-  '@lobehub/[email protected](@babel/[email protected])(@types/[email protected])(@types/[email protected])([email protected]([email protected])([email protected])([email protected]([email protected]))([email protected]))([email protected]([email protected]([email protected]))([email protected]))([email protected])([email protected])([email protected]([email protected]))([email protected])':
-    dependencies:
-      '@ant-design/cssinjs': 1.24.0([email protected]([email protected]))([email protected])
-      '@dnd-kit/core': 6.3.1([email protected]([email protected]))([email protected])
-      '@dnd-kit/modifiers': 9.0.0(@dnd-kit/[email protected]([email protected]([email protected]))([email protected]))([email protected])
-      '@dnd-kit/sortable': 10.0.0(@dnd-kit/[email protected]([email protected]([email protected]))([email protected]))([email protected])
-      '@dnd-kit/utilities': 3.2.2([email protected])
-      '@emoji-mart/data': 1.2.1
-      '@emoji-mart/react': 1.1.1([email protected])([email protected])
-      '@floating-ui/react': 0.27.16([email protected]([email protected]))([email protected])
-      '@giscus/react': 3.1.0([email protected]([email protected]))([email protected])
-      '@lobehub/fluent-emoji': 2.0.0(@babel/[email protected])(@types/[email protected])(@types/[email protected])([email protected]([email protected])([email protected])([email protected]([email protected]))([email protected]))([email protected]([email protected]([email protected]))([email protected]))([email protected])([email protected])([email protected]([email protected]))([email protected])
-      '@lobehub/icons': 2.43.1(@babel/[email protected])(@types/[email protected])(@types/[email protected])([email protected]([email protected])([email protected])([email protected]([email protected]))([email protected]))([email protected]([email protected]([email protected]))([email protected]))([email protected])([email protected])([email protected]([email protected]))([email protected])
-      '@mdx-js/mdx': 3.1.1
-      '@mdx-js/react': 3.1.1(@types/[email protected])([email protected])
-      '@radix-ui/react-slot': 1.2.3(@types/[email protected])([email protected])
-      '@shikijs/transformers': 3.14.0
-      '@splinetool/runtime': 0.9.526
-      ahooks: 3.9.6([email protected]([email protected]))([email protected])
-      antd: 5.27.6([email protected])([email protected])([email protected]([email protected]))([email protected])
-      antd-style: 3.7.1(@types/[email protected])([email protected]([email protected])([email protected])([email protected]([email protected]))([email protected]))([email protected]([email protected]))([email protected])
-      chroma-js: 3.1.2
-      class-variance-authority: 0.7.1
-      dayjs: 1.11.18
-      emoji-mart: 5.6.0
-      fast-deep-equal: 3.1.3
-      framer-motion: 12.23.24([email protected]([email protected]))([email protected])
-      immer: 10.2.0
-      katex: 0.16.25
-      leva: 0.10.0(@types/[email protected])([email protected]([email protected]))([email protected])
-      lodash-es: 4.17.21
-      lucide-react: 0.543.0([email protected])
-      marked: 16.4.1
-      mermaid: 11.12.1
-      numeral: 2.0.6
-      polished: 4.3.1
-      query-string: 9.3.1
-      rc-collapse: 4.0.0([email protected]([email protected]))([email protected])
-      rc-footer: 0.6.8([email protected]([email protected]))([email protected])
-      rc-image: 7.12.0([email protected]([email protected]))([email protected])
-      rc-menu: 9.16.1([email protected]([email protected]))([email protected])
-      re-resizable: 6.11.2([email protected]([email protected]))([email protected])
-      react: 19.2.0
-      react-avatar-editor: 13.0.2(@babel/[email protected])([email protected]([email protected]))([email protected])
-      react-dom: 19.2.0([email protected])
-      react-error-boundary: 5.0.0([email protected])
-      react-hotkeys-hook: 5.2.1([email protected]([email protected]))([email protected])
-      react-layout-kit: 2.0.0([email protected])
-      react-markdown: 10.1.0(@types/[email protected])([email protected])
-      react-merge-refs: 3.0.2([email protected])
-      react-rnd: 10.5.2([email protected]([email protected]))([email protected])
-      react-zoom-pan-pinch: 3.7.0([email protected]([email protected]))([email protected])
-      rehype-github-alerts: 4.1.1
-      rehype-katex: 7.0.1
-      rehype-raw: 7.0.0
-      remark-breaks: 4.0.0
-      remark-cjk-friendly: 1.2.3(@types/[email protected])([email protected])([email protected])([email protected])
-      remark-gfm: 4.0.1
-      remark-github: 12.0.0
-      remark-math: 6.0.0
-      shiki: 3.14.0
-      swr: 2.3.6([email protected])
-      ts-md5: 2.0.1
-      unified: 11.0.5
-      url-join: 5.0.0
-      use-merge-value: 1.2.0([email protected])
-      uuid: 11.1.0
-    transitivePeerDependencies:
-      - '@babel/core'
-      - '@types/mdast'
-      - '@types/react'
-      - micromark
-      - micromark-util-types
-      - supports-color
-
-  '@mdx-js/[email protected]':
-    dependencies:
-      '@types/estree': 1.0.8
-      '@types/estree-jsx': 1.0.5
-      '@types/hast': 3.0.4
-      '@types/mdx': 2.0.13
-      acorn: 8.15.0
-      collapse-white-space: 2.1.0
-      devlop: 1.1.0
-      estree-util-is-identifier-name: 3.0.0
-      estree-util-scope: 1.0.0
-      estree-walker: 3.0.3
-      hast-util-to-jsx-runtime: 2.3.6
-      markdown-extensions: 2.0.0
-      recma-build-jsx: 1.0.0
-      recma-jsx: 1.0.1([email protected])
-      recma-stringify: 1.0.0
-      rehype-recma: 1.0.0
-      remark-mdx: 3.1.1
-      remark-parse: 11.0.0
-      remark-rehype: 11.1.2
-      source-map: 0.7.6
-      unified: 11.0.5
-      unist-util-position-from-estree: 2.0.0
-      unist-util-stringify-position: 4.0.0
-      unist-util-visit: 5.0.0
-      vfile: 6.0.3
-    transitivePeerDependencies:
-      - supports-color
-
-  '@mdx-js/[email protected](@types/[email protected])([email protected])':
-    dependencies:
-      '@types/mdx': 2.0.13
-      '@types/react': 19.2.2
-      react: 19.2.0
-
-  '@mermaid-js/[email protected]':
-    dependencies:
-      langium: 3.3.1
-
-  '@msgpackr-extract/[email protected]':
-    optional: true
-
-  '@msgpackr-extract/[email protected]':
-    optional: true
-
-  '@msgpackr-extract/[email protected]':
-    optional: true
-
-  '@msgpackr-extract/[email protected]':
-    optional: true
-
-  '@msgpackr-extract/[email protected]':
-    optional: true
-
-  '@msgpackr-extract/[email protected]':
-    optional: true
-
-  '@napi-rs/[email protected]':
-    dependencies:
-      '@emnapi/core': 1.4.5
-      '@emnapi/runtime': 1.4.5
-      '@tybys/wasm-util': 0.10.0
-    optional: true
-
-  '@next/[email protected]': {}
-
-  '@next/[email protected]':
-    dependencies:
-      fast-glob: 3.3.1
-
-  '@next/[email protected]':
-    optional: true
-
-  '@next/[email protected]':
-    optional: true
-
-  '@next/[email protected]':
-    optional: true
-
-  '@next/[email protected]':
-    optional: true
-
-  '@next/[email protected]':
-    optional: true
-
-  '@next/[email protected]':
-    optional: true
-
-  '@next/[email protected]':
-    optional: true
-
-  '@next/[email protected]':
-    optional: true
-
-  '@nodelib/[email protected]':
-    dependencies:
-      '@nodelib/fs.stat': 2.0.5
-      run-parallel: 1.2.0
-
-  '@nodelib/[email protected]': {}
-
-  '@nodelib/[email protected]':
-    dependencies:
-      '@nodelib/fs.scandir': 2.1.5
-      fastq: 1.19.1
-
-  '@nolyfill/[email protected]': {}
-
-  '@pinojs/[email protected]': {}
-
-  '@primer/[email protected]':
-    dependencies:
-      object-assign: 4.1.1
-
-  '@radix-ui/[email protected]': {}
-
-  '@radix-ui/[email protected]':
-    dependencies:
-      '@babel/runtime': 7.28.4
-
-  '@radix-ui/[email protected]': {}
-
-  '@radix-ui/[email protected](@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])':
-    dependencies:
-      '@radix-ui/primitive': 1.1.3
-      '@radix-ui/react-compose-refs': 1.1.2(@types/[email protected])([email protected])
-      '@radix-ui/react-context': 1.1.2(@types/[email protected])([email protected])
-      '@radix-ui/react-dialog': 1.1.15(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
-      '@radix-ui/react-primitive': 2.1.3(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
-      '@radix-ui/react-slot': 1.2.3(@types/[email protected])([email protected])
-      react: 19.2.0
-      react-dom: 19.2.0([email protected])
-    optionalDependencies:
-      '@types/react': 19.2.2
-      '@types/react-dom': 19.2.2(@types/[email protected])
-
-  '@radix-ui/[email protected]([email protected]([email protected]))([email protected])':
-    dependencies:
-      '@babel/runtime': 7.28.4
-      '@radix-ui/react-primitive': 1.0.2([email protected]([email protected]))([email protected])
-      react: 19.2.0
-      react-dom: 19.2.0([email protected])
-
-  '@radix-ui/[email protected](@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])':
-    dependencies:
-      '@radix-ui/react-primitive': 2.1.3(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
-      react: 19.2.0
-      react-dom: 19.2.0([email protected])
-    optionalDependencies:
-      '@types/react': 19.2.2
-      '@types/react-dom': 19.2.2(@types/[email protected])
-
-  '@radix-ui/[email protected](@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])':
-    dependencies:
-      '@radix-ui/react-context': 1.1.2(@types/[email protected])([email protected])
-      '@radix-ui/react-primitive': 2.1.3(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
-      '@radix-ui/react-use-callback-ref': 1.1.1(@types/[email protected])([email protected])
-      '@radix-ui/react-use-is-hydrated': 0.1.0(@types/[email protected])([email protected])
-      '@radix-ui/react-use-layout-effect': 1.1.1(@types/[email protected])([email protected])
-      react: 19.2.0
-      react-dom: 19.2.0([email protected])
-    optionalDependencies:
-      '@types/react': 19.2.2
-      '@types/react-dom': 19.2.2(@types/[email protected])
-
-  '@radix-ui/[email protected](@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])':
-    dependencies:
-      '@radix-ui/primitive': 1.1.3
-      '@radix-ui/react-compose-refs': 1.1.2(@types/[email protected])([email protected])
-      '@radix-ui/react-context': 1.1.2(@types/[email protected])([email protected])
-      '@radix-ui/react-presence': 1.1.5(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
-      '@radix-ui/react-primitive': 2.1.3(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
-      '@radix-ui/react-use-controllable-state': 1.2.2(@types/[email protected])([email protected])
-      '@radix-ui/react-use-previous': 1.1.1(@types/[email protected])([email protected])
-      '@radix-ui/react-use-size': 1.1.1(@types/[email protected])([email protected])
-      react: 19.2.0
-      react-dom: 19.2.0([email protected])
-    optionalDependencies:
-      '@types/react': 19.2.2
-      '@types/react-dom': 19.2.2(@types/[email protected])
-
-  '@radix-ui/[email protected](@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])':
-    dependencies:
-      '@radix-ui/primitive': 1.1.3
-      '@radix-ui/react-compose-refs': 1.1.2(@types/[email protected])([email protected])
-      '@radix-ui/react-context': 1.1.2(@types/[email protected])([email protected])
-      '@radix-ui/react-id': 1.1.1(@types/[email protected])([email protected])
-      '@radix-ui/react-presence': 1.1.5(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
-      '@radix-ui/react-primitive': 2.1.3(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
-      '@radix-ui/react-use-controllable-state': 1.2.2(@types/[email protected])([email protected])
-      '@radix-ui/react-use-layout-effect': 1.1.1(@types/[email protected])([email protected])
-      react: 19.2.0
-      react-dom: 19.2.0([email protected])
-    optionalDependencies:
-      '@types/react': 19.2.2
-      '@types/react-dom': 19.2.2(@types/[email protected])
-
-  '@radix-ui/[email protected](@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])':
-    dependencies:
-      '@radix-ui/react-compose-refs': 1.1.2(@types/[email protected])([email protected])
-      '@radix-ui/react-context': 1.1.2(@types/[email protected])([email protected])
-      '@radix-ui/react-primitive': 2.1.3(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
-      '@radix-ui/react-slot': 1.2.3(@types/[email protected])([email protected])
-      react: 19.2.0
-      react-dom: 19.2.0([email protected])
-    optionalDependencies:
-      '@types/react': 19.2.2
-      '@types/react-dom': 19.2.2(@types/[email protected])
-
-  '@radix-ui/[email protected]([email protected])':
-    dependencies:
-      '@babel/runtime': 7.28.4
-      react: 19.2.0
-
-  '@radix-ui/[email protected](@types/[email protected])([email protected])':
-    dependencies:
-      react: 19.2.0
-    optionalDependencies:
-      '@types/react': 19.2.2
-
-  '@radix-ui/[email protected]([email protected])':
-    dependencies:
-      '@babel/runtime': 7.28.4
-      react: 19.2.0
-
-  '@radix-ui/[email protected](@types/[email protected])([email protected])':
-    dependencies:
-      react: 19.2.0
-    optionalDependencies:
-      '@types/react': 19.2.2
-
-  '@radix-ui/[email protected](@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])':
-    dependencies:
-      '@radix-ui/primitive': 1.1.3
-      '@radix-ui/react-compose-refs': 1.1.2(@types/[email protected])([email protected])
-      '@radix-ui/react-context': 1.1.2(@types/[email protected])([email protected])
-      '@radix-ui/react-dismissable-layer': 1.1.11(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
-      '@radix-ui/react-focus-guards': 1.1.3(@types/[email protected])([email protected])
-      '@radix-ui/react-focus-scope': 1.1.7(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
-      '@radix-ui/react-id': 1.1.1(@types/[email protected])([email protected])
-      '@radix-ui/react-portal': 1.1.9(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
-      '@radix-ui/react-presence': 1.1.5(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
-      '@radix-ui/react-primitive': 2.1.3(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
-      '@radix-ui/react-slot': 1.2.3(@types/[email protected])([email protected])
-      '@radix-ui/react-use-controllable-state': 1.2.2(@types/[email protected])([email protected])
-      aria-hidden: 1.2.6
-      react: 19.2.0
-      react-dom: 19.2.0([email protected])
-      react-remove-scroll: 2.7.1(@types/[email protected])([email protected])
-    optionalDependencies:
-      '@types/react': 19.2.2
-      '@types/react-dom': 19.2.2(@types/[email protected])
-
-  '@radix-ui/[email protected](@types/[email protected])([email protected])':
-    dependencies:
-      react: 19.2.0
-    optionalDependencies:
-      '@types/react': 19.2.2
-
-  '@radix-ui/[email protected]([email protected]([email protected]))([email protected])':
-    dependencies:
-      '@babel/runtime': 7.28.4
-      '@radix-ui/primitive': 1.0.0
-      '@radix-ui/react-compose-refs': 1.0.0([email protected])
-      '@radix-ui/react-primitive': 1.0.2([email protected]([email protected]))([email protected])
-      '@radix-ui/react-use-callback-ref': 1.0.0([email protected])
-      '@radix-ui/react-use-escape-keydown': 1.0.2([email protected])
-      react: 19.2.0
-      react-dom: 19.2.0([email protected])
-
-  '@radix-ui/[email protected](@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])':
-    dependencies:
-      '@radix-ui/primitive': 1.1.3
-      '@radix-ui/react-compose-refs': 1.1.2(@types/[email protected])([email protected])
-      '@radix-ui/react-primitive': 2.1.3(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
-      '@radix-ui/react-use-callback-ref': 1.1.1(@types/[email protected])([email protected])
-      '@radix-ui/react-use-escape-keydown': 1.1.1(@types/[email protected])([email protected])
-      react: 19.2.0
-      react-dom: 19.2.0([email protected])
-    optionalDependencies:
-      '@types/react': 19.2.2
-      '@types/react-dom': 19.2.2(@types/[email protected])
-
-  '@radix-ui/[email protected](@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])':
-    dependencies:
-      '@radix-ui/primitive': 1.1.3
-      '@radix-ui/react-compose-refs': 1.1.2(@types/[email protected])([email protected])
-      '@radix-ui/react-context': 1.1.2(@types/[email protected])([email protected])
-      '@radix-ui/react-id': 1.1.1(@types/[email protected])([email protected])
-      '@radix-ui/react-menu': 2.1.16(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
-      '@radix-ui/react-primitive': 2.1.3(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
-      '@radix-ui/react-use-controllable-state': 1.2.2(@types/[email protected])([email protected])
-      react: 19.2.0
-      react-dom: 19.2.0([email protected])
-    optionalDependencies:
-      '@types/react': 19.2.2
-      '@types/react-dom': 19.2.2(@types/[email protected])
-
-  '@radix-ui/[email protected](@types/[email protected])([email protected])':
-    dependencies:
-      react: 19.2.0
-    optionalDependencies:
-      '@types/react': 19.2.2
-
-  '@radix-ui/[email protected](@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])':
-    dependencies:
-      '@radix-ui/react-compose-refs': 1.1.2(@types/[email protected])([email protected])
-      '@radix-ui/react-primitive': 2.1.3(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
-      '@radix-ui/react-use-callback-ref': 1.1.1(@types/[email protected])([email protected])
-      react: 19.2.0
-      react-dom: 19.2.0([email protected])
-    optionalDependencies:
-      '@types/react': 19.2.2
-      '@types/react-dom': 19.2.2(@types/[email protected])
-
-  '@radix-ui/[email protected]([email protected])':
-    dependencies:
-      '@babel/runtime': 7.28.4
-      '@radix-ui/react-use-layout-effect': 1.0.0([email protected])
-      react: 19.2.0
-
-  '@radix-ui/[email protected](@types/[email protected])([email protected])':
-    dependencies:
-      '@radix-ui/react-use-layout-effect': 1.1.1(@types/[email protected])([email protected])
-      react: 19.2.0
-    optionalDependencies:
-      '@types/react': 19.2.2
-
-  '@radix-ui/[email protected](@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])':
-    dependencies:
-      '@radix-ui/react-primitive': 2.1.3(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
-      react: 19.2.0
-      react-dom: 19.2.0([email protected])
-    optionalDependencies:
-      '@types/react': 19.2.2
-      '@types/react-dom': 19.2.2(@types/[email protected])
-
-  '@radix-ui/[email protected](@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])':
-    dependencies:
-      '@radix-ui/primitive': 1.1.3
-      '@radix-ui/react-collection': 1.1.7(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
-      '@radix-ui/react-compose-refs': 1.1.2(@types/[email protected])([email protected])
-      '@radix-ui/react-context': 1.1.2(@types/[email protected])([email protected])
-      '@radix-ui/react-direction': 1.1.1(@types/[email protected])([email protected])
-      '@radix-ui/react-dismissable-layer': 1.1.11(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
-      '@radix-ui/react-focus-guards': 1.1.3(@types/[email protected])([email protected])
-      '@radix-ui/react-focus-scope': 1.1.7(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
-      '@radix-ui/react-id': 1.1.1(@types/[email protected])([email protected])
-      '@radix-ui/react-popper': 1.2.8(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
-      '@radix-ui/react-portal': 1.1.9(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
-      '@radix-ui/react-presence': 1.1.5(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
-      '@radix-ui/react-primitive': 2.1.3(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
-      '@radix-ui/react-roving-focus': 1.1.11(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
-      '@radix-ui/react-slot': 1.2.3(@types/[email protected])([email protected])
-      '@radix-ui/react-use-callback-ref': 1.1.1(@types/[email protected])([email protected])
-      aria-hidden: 1.2.6
-      react: 19.2.0
-      react-dom: 19.2.0([email protected])
-      react-remove-scroll: 2.7.1(@types/[email protected])([email protected])
-    optionalDependencies:
-      '@types/react': 19.2.2
-      '@types/react-dom': 19.2.2(@types/[email protected])
-
-  '@radix-ui/[email protected](@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])':
-    dependencies:
-      '@radix-ui/primitive': 1.1.3
-      '@radix-ui/react-compose-refs': 1.1.2(@types/[email protected])([email protected])
-      '@radix-ui/react-context': 1.1.2(@types/[email protected])([email protected])
-      '@radix-ui/react-dismissable-layer': 1.1.11(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
-      '@radix-ui/react-focus-guards': 1.1.3(@types/[email protected])([email protected])
-      '@radix-ui/react-focus-scope': 1.1.7(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
-      '@radix-ui/react-id': 1.1.1(@types/[email protected])([email protected])
-      '@radix-ui/react-popper': 1.2.8(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
-      '@radix-ui/react-portal': 1.1.9(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
-      '@radix-ui/react-presence': 1.1.5(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
-      '@radix-ui/react-primitive': 2.1.3(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
-      '@radix-ui/react-slot': 1.2.3(@types/[email protected])([email protected])
-      '@radix-ui/react-use-controllable-state': 1.2.2(@types/[email protected])([email protected])
-      aria-hidden: 1.2.6
-      react: 19.2.0
-      react-dom: 19.2.0([email protected])
-      react-remove-scroll: 2.7.1(@types/[email protected])([email protected])
-    optionalDependencies:
-      '@types/react': 19.2.2
-      '@types/react-dom': 19.2.2(@types/[email protected])
-
-  '@radix-ui/[email protected](@types/[email protected])([email protected]([email protected]))([email protected])':
-    dependencies:
-      '@babel/runtime': 7.28.4
-      '@floating-ui/react-dom': 0.7.2(@types/[email protected])([email protected]([email protected]))([email protected])
-      '@radix-ui/react-arrow': 1.0.2([email protected]([email protected]))([email protected])
-      '@radix-ui/react-compose-refs': 1.0.0([email protected])
-      '@radix-ui/react-context': 1.0.0([email protected])
-      '@radix-ui/react-primitive': 1.0.2([email protected]([email protected]))([email protected])
-      '@radix-ui/react-use-callback-ref': 1.0.0([email protected])
-      '@radix-ui/react-use-layout-effect': 1.0.0([email protected])
-      '@radix-ui/react-use-rect': 1.0.0([email protected])
-      '@radix-ui/react-use-size': 1.0.0([email protected])
-      '@radix-ui/rect': 1.0.0
-      react: 19.2.0
-      react-dom: 19.2.0([email protected])
-    transitivePeerDependencies:
-      - '@types/react'
-
-  '@radix-ui/[email protected](@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])':
-    dependencies:
-      '@floating-ui/react-dom': 2.1.6([email protected]([email protected]))([email protected])
-      '@radix-ui/react-arrow': 1.1.7(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
-      '@radix-ui/react-compose-refs': 1.1.2(@types/[email protected])([email protected])
-      '@radix-ui/react-context': 1.1.2(@types/[email protected])([email protected])
-      '@radix-ui/react-primitive': 2.1.3(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
-      '@radix-ui/react-use-callback-ref': 1.1.1(@types/[email protected])([email protected])
-      '@radix-ui/react-use-layout-effect': 1.1.1(@types/[email protected])([email protected])
-      '@radix-ui/react-use-rect': 1.1.1(@types/[email protected])([email protected])
-      '@radix-ui/react-use-size': 1.1.1(@types/[email protected])([email protected])
-      '@radix-ui/rect': 1.1.1
-      react: 19.2.0
-      react-dom: 19.2.0([email protected])
-    optionalDependencies:
-      '@types/react': 19.2.2
-      '@types/react-dom': 19.2.2(@types/[email protected])
-
-  '@radix-ui/[email protected]([email protected]([email protected]))([email protected])':
-    dependencies:
-      '@babel/runtime': 7.28.4
-      '@radix-ui/react-primitive': 1.0.2([email protected]([email protected]))([email protected])
-      react: 19.2.0
-      react-dom: 19.2.0([email protected])
-
-  '@radix-ui/[email protected](@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])':
-    dependencies:
-      '@radix-ui/react-primitive': 2.1.3(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
-      '@radix-ui/react-use-layout-effect': 1.1.1(@types/[email protected])([email protected])
-      react: 19.2.0
-      react-dom: 19.2.0([email protected])
-    optionalDependencies:
-      '@types/react': 19.2.2
-      '@types/react-dom': 19.2.2(@types/[email protected])
-
-  '@radix-ui/[email protected]([email protected]([email protected]))([email protected])':
-    dependencies:
-      '@babel/runtime': 7.28.4
-      '@radix-ui/react-compose-refs': 1.0.0([email protected])
-      '@radix-ui/react-use-layout-effect': 1.0.0([email protected])
-      react: 19.2.0
-      react-dom: 19.2.0([email protected])
-
-  '@radix-ui/[email protected](@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])':
-    dependencies:
-      '@radix-ui/react-compose-refs': 1.1.2(@types/[email protected])([email protected])
-      '@radix-ui/react-use-layout-effect': 1.1.1(@types/[email protected])([email protected])
-      react: 19.2.0
-      react-dom: 19.2.0([email protected])
-    optionalDependencies:
-      '@types/react': 19.2.2
-      '@types/react-dom': 19.2.2(@types/[email protected])
-
-  '@radix-ui/[email protected]([email protected]([email protected]))([email protected])':
-    dependencies:
-      '@babel/runtime': 7.28.4
-      '@radix-ui/react-slot': 1.0.1([email protected])
-      react: 19.2.0
-      react-dom: 19.2.0([email protected])
-
-  '@radix-ui/[email protected](@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])':
-    dependencies:
-      '@radix-ui/react-slot': 1.2.3(@types/[email protected])([email protected])
-      react: 19.2.0
-      react-dom: 19.2.0([email protected])
-    optionalDependencies:
-      '@types/react': 19.2.2
-      '@types/react-dom': 19.2.2(@types/[email protected])
-
-  '@radix-ui/[email protected](@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])':
-    dependencies:
-      '@radix-ui/react-context': 1.1.2(@types/[email protected])([email protected])
-      '@radix-ui/react-primitive': 2.1.3(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
-      react: 19.2.0
-      react-dom: 19.2.0([email protected])
-    optionalDependencies:
-      '@types/react': 19.2.2
-      '@types/react-dom': 19.2.2(@types/[email protected])
-
-  '@radix-ui/[email protected](@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])':
-    dependencies:
-      '@radix-ui/primitive': 1.1.3
-      '@radix-ui/react-collection': 1.1.7(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
-      '@radix-ui/react-compose-refs': 1.1.2(@types/[email protected])([email protected])
-      '@radix-ui/react-context': 1.1.2(@types/[email protected])([email protected])
-      '@radix-ui/react-direction': 1.1.1(@types/[email protected])([email protected])
-      '@radix-ui/react-id': 1.1.1(@types/[email protected])([email protected])
-      '@radix-ui/react-primitive': 2.1.3(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
-      '@radix-ui/react-use-callback-ref': 1.1.1(@types/[email protected])([email protected])
-      '@radix-ui/react-use-controllable-state': 1.2.2(@types/[email protected])([email protected])
-      react: 19.2.0
-      react-dom: 19.2.0([email protected])
-    optionalDependencies:
-      '@types/react': 19.2.2
-      '@types/react-dom': 19.2.2(@types/[email protected])
-
-  '@radix-ui/[email protected](@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])':
-    dependencies:
-      '@radix-ui/number': 1.1.1
-      '@radix-ui/primitive': 1.1.3
-      '@radix-ui/react-collection': 1.1.7(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
-      '@radix-ui/react-compose-refs': 1.1.2(@types/[email protected])([email protected])
-      '@radix-ui/react-context': 1.1.2(@types/[email protected])([email protected])
-      '@radix-ui/react-direction': 1.1.1(@types/[email protected])([email protected])
-      '@radix-ui/react-dismissable-layer': 1.1.11(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
-      '@radix-ui/react-focus-guards': 1.1.3(@types/[email protected])([email protected])
-      '@radix-ui/react-focus-scope': 1.1.7(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
-      '@radix-ui/react-id': 1.1.1(@types/[email protected])([email protected])
-      '@radix-ui/react-popper': 1.2.8(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
-      '@radix-ui/react-portal': 1.1.9(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
-      '@radix-ui/react-primitive': 2.1.3(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
-      '@radix-ui/react-slot': 1.2.3(@types/[email protected])([email protected])
-      '@radix-ui/react-use-callback-ref': 1.1.1(@types/[email protected])([email protected])
-      '@radix-ui/react-use-controllable-state': 1.2.2(@types/[email protected])([email protected])
-      '@radix-ui/react-use-layout-effect': 1.1.1(@types/[email protected])([email protected])
-      '@radix-ui/react-use-previous': 1.1.1(@types/[email protected])([email protected])
-      '@radix-ui/react-visually-hidden': 1.2.3(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
-      aria-hidden: 1.2.6
-      react: 19.2.0
-      react-dom: 19.2.0([email protected])
-      react-remove-scroll: 2.7.1(@types/[email protected])([email protected])
-    optionalDependencies:
-      '@types/react': 19.2.2
-      '@types/react-dom': 19.2.2(@types/[email protected])
-
-  '@radix-ui/[email protected](@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])':
-    dependencies:
-      '@radix-ui/number': 1.1.1
-      '@radix-ui/primitive': 1.1.3
-      '@radix-ui/react-collection': 1.1.7(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
-      '@radix-ui/react-compose-refs': 1.1.2(@types/[email protected])([email protected])
-      '@radix-ui/react-context': 1.1.2(@types/[email protected])([email protected])
-      '@radix-ui/react-direction': 1.1.1(@types/[email protected])([email protected])
-      '@radix-ui/react-primitive': 2.1.3(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
-      '@radix-ui/react-use-controllable-state': 1.2.2(@types/[email protected])([email protected])
-      '@radix-ui/react-use-layout-effect': 1.1.1(@types/[email protected])([email protected])
-      '@radix-ui/react-use-previous': 1.1.1(@types/[email protected])([email protected])
-      '@radix-ui/react-use-size': 1.1.1(@types/[email protected])([email protected])
-      react: 19.2.0
-      react-dom: 19.2.0([email protected])
-    optionalDependencies:
-      '@types/react': 19.2.2
-      '@types/react-dom': 19.2.2(@types/[email protected])
-
-  '@radix-ui/[email protected]([email protected])':
-    dependencies:
-      '@babel/runtime': 7.28.4
-      '@radix-ui/react-compose-refs': 1.0.0([email protected])
-      react: 19.2.0
-
-  '@radix-ui/[email protected](@types/[email protected])([email protected])':
-    dependencies:
-      '@radix-ui/react-compose-refs': 1.1.2(@types/[email protected])([email protected])
-      react: 19.2.0
-    optionalDependencies:
-      '@types/react': 19.2.2
-
-  '@radix-ui/[email protected](@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])':
-    dependencies:
-      '@radix-ui/primitive': 1.1.3
-      '@radix-ui/react-compose-refs': 1.1.2(@types/[email protected])([email protected])
-      '@radix-ui/react-context': 1.1.2(@types/[email protected])([email protected])
-      '@radix-ui/react-primitive': 2.1.3(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
-      '@radix-ui/react-use-controllable-state': 1.2.2(@types/[email protected])([email protected])
-      '@radix-ui/react-use-previous': 1.1.1(@types/[email protected])([email protected])
-      '@radix-ui/react-use-size': 1.1.1(@types/[email protected])([email protected])
-      react: 19.2.0
-      react-dom: 19.2.0([email protected])
-    optionalDependencies:
-      '@types/react': 19.2.2
-      '@types/react-dom': 19.2.2(@types/[email protected])
-
-  '@radix-ui/[email protected](@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])':
-    dependencies:
-      '@radix-ui/primitive': 1.1.3
-      '@radix-ui/react-context': 1.1.2(@types/[email protected])([email protected])
-      '@radix-ui/react-direction': 1.1.1(@types/[email protected])([email protected])
-      '@radix-ui/react-id': 1.1.1(@types/[email protected])([email protected])
-      '@radix-ui/react-presence': 1.1.5(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
-      '@radix-ui/react-primitive': 2.1.3(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
-      '@radix-ui/react-roving-focus': 1.1.11(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
-      '@radix-ui/react-use-controllable-state': 1.2.2(@types/[email protected])([email protected])
-      react: 19.2.0
-      react-dom: 19.2.0([email protected])
-    optionalDependencies:
-      '@types/react': 19.2.2
-      '@types/react-dom': 19.2.2(@types/[email protected])
-
-  '@radix-ui/[email protected](@types/[email protected])([email protected]([email protected]))([email protected])':
-    dependencies:
-      '@babel/runtime': 7.28.4
-      '@radix-ui/primitive': 1.0.0
-      '@radix-ui/react-compose-refs': 1.0.0([email protected])
-      '@radix-ui/react-context': 1.0.0([email protected])
-      '@radix-ui/react-dismissable-layer': 1.0.3([email protected]([email protected]))([email protected])
-      '@radix-ui/react-id': 1.0.0([email protected])
-      '@radix-ui/react-popper': 1.1.1(@types/[email protected])([email protected]([email protected]))([email protected])
-      '@radix-ui/react-portal': 1.0.2([email protected]([email protected]))([email protected])
-      '@radix-ui/react-presence': 1.0.0([email protected]([email protected]))([email protected])
-      '@radix-ui/react-primitive': 1.0.2([email protected]([email protected]))([email protected])
-      '@radix-ui/react-slot': 1.0.1([email protected])
-      '@radix-ui/react-use-controllable-state': 1.0.0([email protected])
-      '@radix-ui/react-visually-hidden': 1.0.2([email protected]([email protected]))([email protected])
-      react: 19.2.0
-      react-dom: 19.2.0([email protected])
-    transitivePeerDependencies:
-      - '@types/react'
-
-  '@radix-ui/[email protected](@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])':
-    dependencies:
-      '@radix-ui/primitive': 1.1.3
-      '@radix-ui/react-compose-refs': 1.1.2(@types/[email protected])([email protected])
-      '@radix-ui/react-context': 1.1.2(@types/[email protected])([email protected])
-      '@radix-ui/react-dismissable-layer': 1.1.11(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
-      '@radix-ui/react-id': 1.1.1(@types/[email protected])([email protected])
-      '@radix-ui/react-popper': 1.2.8(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
-      '@radix-ui/react-portal': 1.1.9(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
-      '@radix-ui/react-presence': 1.1.5(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
-      '@radix-ui/react-primitive': 2.1.3(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
-      '@radix-ui/react-slot': 1.2.3(@types/[email protected])([email protected])
-      '@radix-ui/react-use-controllable-state': 1.2.2(@types/[email protected])([email protected])
-      '@radix-ui/react-visually-hidden': 1.2.3(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
-      react: 19.2.0
-      react-dom: 19.2.0([email protected])
-    optionalDependencies:
-      '@types/react': 19.2.2
-      '@types/react-dom': 19.2.2(@types/[email protected])
-
-  '@radix-ui/[email protected]([email protected])':
-    dependencies:
-      '@babel/runtime': 7.28.4
-      react: 19.2.0
-
-  '@radix-ui/[email protected](@types/[email protected])([email protected])':
-    dependencies:
-      react: 19.2.0
-    optionalDependencies:
-      '@types/react': 19.2.2
-
-  '@radix-ui/[email protected]([email protected])':
-    dependencies:
-      '@babel/runtime': 7.28.4
-      '@radix-ui/react-use-callback-ref': 1.0.0([email protected])
-      react: 19.2.0
-
-  '@radix-ui/[email protected](@types/[email protected])([email protected])':
-    dependencies:
-      '@radix-ui/react-use-effect-event': 0.0.2(@types/[email protected])([email protected])
-      '@radix-ui/react-use-layout-effect': 1.1.1(@types/[email protected])([email protected])
-      react: 19.2.0
-    optionalDependencies:
-      '@types/react': 19.2.2
-
-  '@radix-ui/[email protected](@types/[email protected])([email protected])':
-    dependencies:
-      '@radix-ui/react-use-layout-effect': 1.1.1(@types/[email protected])([email protected])
-      react: 19.2.0
-    optionalDependencies:
-      '@types/react': 19.2.2
-
-  '@radix-ui/[email protected]([email protected])':
-    dependencies:
-      '@babel/runtime': 7.28.4
-      '@radix-ui/react-use-callback-ref': 1.0.0([email protected])
-      react: 19.2.0
-
-  '@radix-ui/[email protected](@types/[email protected])([email protected])':
-    dependencies:
-      '@radix-ui/react-use-callback-ref': 1.1.1(@types/[email protected])([email protected])
-      react: 19.2.0
-    optionalDependencies:
-      '@types/react': 19.2.2
-
-  '@radix-ui/[email protected](@types/[email protected])([email protected])':
-    dependencies:
-      react: 19.2.0
-      use-sync-external-store: 1.5.0([email protected])
-    optionalDependencies:
-      '@types/react': 19.2.2
-
-  '@radix-ui/[email protected]([email protected])':
-    dependencies:
-      '@babel/runtime': 7.28.4
-      react: 19.2.0
-
-  '@radix-ui/[email protected](@types/[email protected])([email protected])':
-    dependencies:
-      react: 19.2.0
-    optionalDependencies:
-      '@types/react': 19.2.2
-
-  '@radix-ui/[email protected](@types/[email protected])([email protected])':
-    dependencies:
-      react: 19.2.0
-    optionalDependencies:
-      '@types/react': 19.2.2
-
-  '@radix-ui/[email protected]([email protected])':
-    dependencies:
-      '@babel/runtime': 7.28.4
-      '@radix-ui/rect': 1.0.0
-      react: 19.2.0
-
-  '@radix-ui/[email protected](@types/[email protected])([email protected])':
-    dependencies:
-      '@radix-ui/rect': 1.1.1
-      react: 19.2.0
-    optionalDependencies:
-      '@types/react': 19.2.2
-
-  '@radix-ui/[email protected]([email protected])':
-    dependencies:
-      '@babel/runtime': 7.28.4
-      '@radix-ui/react-use-layout-effect': 1.0.0([email protected])
-      react: 19.2.0
-
-  '@radix-ui/[email protected](@types/[email protected])([email protected])':
-    dependencies:
-      '@radix-ui/react-use-layout-effect': 1.1.1(@types/[email protected])([email protected])
-      react: 19.2.0
-    optionalDependencies:
-      '@types/react': 19.2.2
-
-  '@radix-ui/[email protected]([email protected]([email protected]))([email protected])':
-    dependencies:
-      '@babel/runtime': 7.28.4
-      '@radix-ui/react-primitive': 1.0.2([email protected]([email protected]))([email protected])
-      react: 19.2.0
-      react-dom: 19.2.0([email protected])
-
-  '@radix-ui/[email protected](@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])':
-    dependencies:
-      '@radix-ui/react-primitive': 2.1.3(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
-      react: 19.2.0
-      react-dom: 19.2.0([email protected])
-    optionalDependencies:
-      '@types/react': 19.2.2
-      '@types/react-dom': 19.2.2(@types/[email protected])
-
-  '@radix-ui/[email protected]':
-    dependencies:
-      '@babel/runtime': 7.28.4
-
-  '@radix-ui/[email protected]': {}
-
-  '@rc-component/[email protected]':
-    dependencies:
-      '@babel/runtime': 7.28.4
-
-  '@rc-component/[email protected]([email protected]([email protected]))([email protected])':
-    dependencies:
-      '@ant-design/fast-color': 2.0.6
-      '@babel/runtime': 7.28.4
-      classnames: 2.5.1
-      rc-util: 5.44.4([email protected]([email protected]))([email protected])
-      react: 19.2.0
-      react-dom: 19.2.0([email protected])
-
-  '@rc-component/[email protected]([email protected]([email protected]))([email protected])':
-    dependencies:
-      '@babel/runtime': 7.28.4
-      rc-util: 5.44.4([email protected]([email protected]))([email protected])
-      react: 19.2.0
-      react-dom: 19.2.0([email protected])
-
-  '@rc-component/[email protected]':
-    dependencies:
-      '@babel/runtime': 7.28.4
-
-  '@rc-component/[email protected]([email protected]([email protected]))([email protected])':
-    dependencies:
-      '@babel/runtime': 7.28.4
-      classnames: 2.5.1
-      rc-util: 5.44.4([email protected]([email protected]))([email protected])
-      react: 19.2.0
-      react-dom: 19.2.0([email protected])
-
-  '@rc-component/[email protected]([email protected]([email protected]))([email protected])':
-    dependencies:
-      '@babel/runtime': 7.28.4
-      classnames: 2.5.1
-      rc-util: 5.44.4([email protected]([email protected]))([email protected])
-      react: 19.2.0
-      react-dom: 19.2.0([email protected])
-
-  '@rc-component/[email protected]([email protected]([email protected]))([email protected])':
-    dependencies:
-      '@babel/runtime': 7.28.4
-      classnames: 2.5.1
-      react: 19.2.0
-      react-dom: 19.2.0([email protected])
-
-  '@rc-component/[email protected]([email protected]([email protected]))([email protected])':
-    dependencies:
-      '@babel/runtime': 7.28.4
-      '@rc-component/portal': 1.1.2([email protected]([email protected]))([email protected])
-      '@rc-component/trigger': 2.3.0([email protected]([email protected]))([email protected])
-      classnames: 2.5.1
-      rc-util: 5.44.4([email protected]([email protected]))([email protected])
-      react: 19.2.0
-      react-dom: 19.2.0([email protected])
-
-  '@rc-component/[email protected]([email protected]([email protected]))([email protected])':
-    dependencies:
-      '@babel/runtime': 7.28.4
-      '@rc-component/portal': 1.1.2([email protected]([email protected]))([email protected])
-      classnames: 2.5.1
-      rc-motion: 2.9.5([email protected]([email protected]))([email protected])
-      rc-resize-observer: 1.4.3([email protected]([email protected]))([email protected])
-      rc-util: 5.44.4([email protected]([email protected]))([email protected])
-      react: 19.2.0
-      react-dom: 19.2.0([email protected])
-
-  '@rtsao/[email protected]': {}
-
-  '@rushstack/[email protected]': {}
-
-  '@scalar/[email protected]':
-    dependencies:
-      '@scalar/types': 0.3.2
-
-  '@scalar/[email protected]([email protected])':
-    dependencies:
-      '@scalar/core': 0.3.20
-      hono: 4.10.2
-
-  '@scalar/[email protected]':
-    dependencies:
-      zod: 4.1.11
-
-  '@scalar/[email protected]':
-    dependencies:
-      '@scalar/openapi-types': 0.5.0
-      nanoid: 5.1.5
-      type-fest: 5.0.0
-      zod: 4.1.11
-
-  '@shikijs/[email protected]':
-    dependencies:
-      '@shikijs/types': 3.14.0
-      '@shikijs/vscode-textmate': 10.0.2
-      '@types/hast': 3.0.4
-      hast-util-to-html: 9.0.5
-
-  '@shikijs/[email protected]':
-    dependencies:
-      '@shikijs/types': 3.14.0
-      '@shikijs/vscode-textmate': 10.0.2
-      oniguruma-to-es: 4.3.3
-
-  '@shikijs/[email protected]':
-    dependencies:
-      '@shikijs/types': 3.14.0
-      '@shikijs/vscode-textmate': 10.0.2
-
-  '@shikijs/[email protected]':
-    dependencies:
-      '@shikijs/types': 3.14.0
-
-  '@shikijs/[email protected]':
-    dependencies:
-      '@shikijs/types': 3.14.0
-
-  '@shikijs/[email protected]':
-    dependencies:
-      '@shikijs/core': 3.14.0
-      '@shikijs/types': 3.14.0
-
-  '@shikijs/[email protected]':
-    dependencies:
-      '@shikijs/vscode-textmate': 10.0.2
-      '@types/hast': 3.0.4
-
-  '@shikijs/[email protected]': {}
-
-  '@splinetool/[email protected]':
-    dependencies:
-      on-change: 4.0.2
-      semver-compare: 1.0.0
-
-  '@standard-schema/[email protected]': {}
-
-  '@stitches/[email protected]([email protected])':
-    dependencies:
-      react: 19.2.0
-
-  '@swc/[email protected]':
-    dependencies:
-      tslib: 2.8.1
-
-  '@tailwindcss/[email protected]':
-    dependencies:
-      '@jridgewell/remapping': 2.3.5
-      enhanced-resolve: 5.18.3
-      jiti: 2.6.1
-      lightningcss: 1.30.2
-      magic-string: 0.30.19
-      source-map-js: 1.2.1
-      tailwindcss: 4.1.16
-
-  '@tailwindcss/[email protected]':
-    optional: true
-
-  '@tailwindcss/[email protected]':
-    optional: true
-
-  '@tailwindcss/[email protected]':
-    optional: true
-
-  '@tailwindcss/[email protected]':
-    optional: true
-
-  '@tailwindcss/[email protected]':
-    optional: true
-
-  '@tailwindcss/[email protected]':
-    optional: true
-
-  '@tailwindcss/[email protected]':
-    optional: true
-
-  '@tailwindcss/[email protected]':
-    optional: true
-
-  '@tailwindcss/[email protected]':
-    optional: true
-
-  '@tailwindcss/[email protected]':
-    optional: true
-
-  '@tailwindcss/[email protected]':
-    optional: true
-
-  '@tailwindcss/[email protected]':
-    optional: true
-
-  '@tailwindcss/[email protected]':
-    optionalDependencies:
-      '@tailwindcss/oxide-android-arm64': 4.1.16
-      '@tailwindcss/oxide-darwin-arm64': 4.1.16
-      '@tailwindcss/oxide-darwin-x64': 4.1.16
-      '@tailwindcss/oxide-freebsd-x64': 4.1.16
-      '@tailwindcss/oxide-linux-arm-gnueabihf': 4.1.16
-      '@tailwindcss/oxide-linux-arm64-gnu': 4.1.16
-      '@tailwindcss/oxide-linux-arm64-musl': 4.1.16
-      '@tailwindcss/oxide-linux-x64-gnu': 4.1.16
-      '@tailwindcss/oxide-linux-x64-musl': 4.1.16
-      '@tailwindcss/oxide-wasm32-wasi': 4.1.16
-      '@tailwindcss/oxide-win32-arm64-msvc': 4.1.16
-      '@tailwindcss/oxide-win32-x64-msvc': 4.1.16
-
-  '@tailwindcss/[email protected]':
-    dependencies:
-      '@alloc/quick-lru': 5.2.0
-      '@tailwindcss/node': 4.1.16
-      '@tailwindcss/oxide': 4.1.16
-      postcss: 8.5.6
-      tailwindcss: 4.1.16
-
-  '@tanstack/[email protected]': {}
-
-  '@tanstack/[email protected]([email protected])':
-    dependencies:
-      '@tanstack/query-core': 5.90.5
-      react: 19.2.0
-
-  '@tybys/[email protected]':
-    dependencies:
-      tslib: 2.8.1
-    optional: true
-
-  '@types/[email protected]': {}
-
-  '@types/[email protected]':
-    dependencies:
-      '@types/d3-selection': 3.0.11
-
-  '@types/[email protected]':
-    dependencies:
-      '@types/d3-selection': 3.0.11
-
-  '@types/[email protected]': {}
-
-  '@types/[email protected]': {}
-
-  '@types/[email protected]':
-    dependencies:
-      '@types/d3-array': 3.2.2
-      '@types/geojson': 7946.0.16
-
-  '@types/[email protected]': {}
-
-  '@types/[email protected]': {}
-
-  '@types/[email protected]':
-    dependencies:
-      '@types/d3-selection': 3.0.11
-
-  '@types/[email protected]': {}
-
-  '@types/[email protected]': {}
-
-  '@types/[email protected]':
-    dependencies:
-      '@types/d3-dsv': 3.0.7
-
-  '@types/[email protected]': {}
-
-  '@types/[email protected]': {}
-
-  '@types/[email protected]':
-    dependencies:
-      '@types/geojson': 7946.0.16
-
-  '@types/[email protected]': {}
-
-  '@types/[email protected]':
-    dependencies:
-      '@types/d3-color': 3.1.3
-
-  '@types/[email protected]': {}
-
-  '@types/[email protected]': {}
-
-  '@types/[email protected]': {}
-
-  '@types/[email protected]': {}
-
-  '@types/[email protected]': {}
-
-  '@types/[email protected]':
-    dependencies:
-      '@types/d3-time': 3.0.4
-
-  '@types/[email protected]': {}
-
-  '@types/[email protected]':
-    dependencies:
-      '@types/d3-path': 3.1.1
-
-  '@types/[email protected]': {}
-
-  '@types/[email protected]': {}
-
-  '@types/[email protected]': {}
-
-  '@types/[email protected]':
-    dependencies:
-      '@types/d3-selection': 3.0.11
-
-  '@types/[email protected]':
-    dependencies:
-      '@types/d3-interpolate': 3.0.4
-      '@types/d3-selection': 3.0.11
-
-  '@types/[email protected]':
-    dependencies:
-      '@types/d3-array': 3.2.2
-      '@types/d3-axis': 3.0.6
-      '@types/d3-brush': 3.0.6
-      '@types/d3-chord': 3.0.6
-      '@types/d3-color': 3.1.3
-      '@types/d3-contour': 3.0.6
-      '@types/d3-delaunay': 6.0.4
-      '@types/d3-dispatch': 3.0.7
-      '@types/d3-drag': 3.0.7
-      '@types/d3-dsv': 3.0.7
-      '@types/d3-ease': 3.0.2
-      '@types/d3-fetch': 3.0.7
-      '@types/d3-force': 3.0.10
-      '@types/d3-format': 3.0.4
-      '@types/d3-geo': 3.1.0
-      '@types/d3-hierarchy': 3.1.7
-      '@types/d3-interpolate': 3.0.4
-      '@types/d3-path': 3.1.1
-      '@types/d3-polygon': 3.0.2
-      '@types/d3-quadtree': 3.0.6
-      '@types/d3-random': 3.0.3
-      '@types/d3-scale': 4.0.9
-      '@types/d3-scale-chromatic': 3.1.0
-      '@types/d3-selection': 3.0.11
-      '@types/d3-shape': 3.1.7
-      '@types/d3-time': 3.0.4
-      '@types/d3-time-format': 4.0.3
-      '@types/d3-timer': 3.0.2
-      '@types/d3-transition': 3.0.9
-      '@types/d3-zoom': 3.0.8
-
-  '@types/[email protected]':
-    dependencies:
-      '@types/ms': 2.1.0
-
-  '@types/[email protected]':
-    dependencies:
-      '@types/estree': 1.0.8
-
-  '@types/[email protected]': {}
-
-  '@types/[email protected]': {}
-
-  '@types/[email protected]':
-    dependencies:
-      '@types/unist': 3.0.3
-
-  '@types/[email protected]':
-    dependencies:
-      ioredis: 5.8.2
-    transitivePeerDependencies:
-      - supports-color
-
-  '@types/[email protected]': {}
-
-  '@types/[email protected]': {}
-
-  '@types/[email protected]': {}
-
-  '@types/[email protected]': {}
-
-  '@types/[email protected]':
-    dependencies:
-      '@types/unist': 3.0.3
-
-  '@types/[email protected]': {}
-
-  '@types/[email protected]': {}
-
-  '@types/[email protected]':
-    dependencies:
-      undici-types: 6.21.0
-
-  '@types/[email protected]': {}
-
-  '@types/[email protected]': {}
-
-  '@types/[email protected]':
-    dependencies:
-      '@types/node': 20.19.17
-      pg-protocol: 1.10.3
-      pg-types: 2.2.0
-
-  '@types/[email protected]':
-    optional: true
-
-  '@types/[email protected](@types/[email protected])':
-    dependencies:
-      '@types/react': 19.2.2
-
-  '@types/[email protected]':
-    dependencies:
-      csstype: 3.1.3
-
-  '@types/[email protected]': {}
-
-  '@types/[email protected]': {}
-
-  '@types/[email protected]': {}
-
-  '@typescript-eslint/[email protected](@typescript-eslint/[email protected]([email protected]([email protected]))([email protected]))([email protected]([email protected]))([email protected])':
-    dependencies:
-      '@eslint-community/regexpp': 4.12.1
-      '@typescript-eslint/parser': 8.39.0([email protected]([email protected]))([email protected])
-      '@typescript-eslint/scope-manager': 8.39.0
-      '@typescript-eslint/type-utils': 8.39.0([email protected]([email protected]))([email protected])
-      '@typescript-eslint/utils': 8.39.0([email protected]([email protected]))([email protected])
-      '@typescript-eslint/visitor-keys': 8.39.0
-      eslint: 9.38.0([email protected])
-      graphemer: 1.4.0
-      ignore: 7.0.5
-      natural-compare: 1.4.0
-      ts-api-utils: 2.1.0([email protected])
-      typescript: 5.9.3
-    transitivePeerDependencies:
-      - supports-color
-
-  '@typescript-eslint/[email protected]([email protected]([email protected]))([email protected])':
-    dependencies:
-      '@typescript-eslint/scope-manager': 8.39.0
-      '@typescript-eslint/types': 8.39.0
-      '@typescript-eslint/typescript-estree': 8.39.0([email protected])
-      '@typescript-eslint/visitor-keys': 8.39.0
-      debug: 4.4.1
-      eslint: 9.38.0([email protected])
-      typescript: 5.9.3
-    transitivePeerDependencies:
-      - supports-color
-
-  '@typescript-eslint/[email protected]([email protected])':
-    dependencies:
-      '@typescript-eslint/tsconfig-utils': 8.39.0([email protected])
-      '@typescript-eslint/types': 8.39.0
-      debug: 4.4.1
-      typescript: 5.9.3
-    transitivePeerDependencies:
-      - supports-color
-
-  '@typescript-eslint/[email protected]':
-    dependencies:
-      '@typescript-eslint/types': 8.39.0
-      '@typescript-eslint/visitor-keys': 8.39.0
-
-  '@typescript-eslint/[email protected]([email protected])':
-    dependencies:
-      typescript: 5.9.3
-
-  '@typescript-eslint/[email protected]([email protected]([email protected]))([email protected])':
-    dependencies:
-      '@typescript-eslint/types': 8.39.0
-      '@typescript-eslint/typescript-estree': 8.39.0([email protected])
-      '@typescript-eslint/utils': 8.39.0([email protected]([email protected]))([email protected])
-      debug: 4.4.1
-      eslint: 9.38.0([email protected])
-      ts-api-utils: 2.1.0([email protected])
-      typescript: 5.9.3
-    transitivePeerDependencies:
-      - supports-color
-
-  '@typescript-eslint/[email protected]': {}
-
-  '@typescript-eslint/[email protected]([email protected])':
-    dependencies:
-      '@typescript-eslint/project-service': 8.39.0([email protected])
-      '@typescript-eslint/tsconfig-utils': 8.39.0([email protected])
-      '@typescript-eslint/types': 8.39.0
-      '@typescript-eslint/visitor-keys': 8.39.0
-      debug: 4.4.1
-      fast-glob: 3.3.3
-      is-glob: 4.0.3
-      minimatch: 9.0.5
-      semver: 7.7.2
-      ts-api-utils: 2.1.0([email protected])
-      typescript: 5.9.3
-    transitivePeerDependencies:
-      - supports-color
-
-  '@typescript-eslint/[email protected]([email protected]([email protected]))([email protected])':
-    dependencies:
-      '@eslint-community/eslint-utils': 4.9.0([email protected]([email protected]))
-      '@typescript-eslint/scope-manager': 8.39.0
-      '@typescript-eslint/types': 8.39.0
-      '@typescript-eslint/typescript-estree': 8.39.0([email protected])
-      eslint: 9.38.0([email protected])
-      typescript: 5.9.3
-    transitivePeerDependencies:
-      - supports-color
-
-  '@typescript-eslint/[email protected]':
-    dependencies:
-      '@typescript-eslint/types': 8.39.0
-      eslint-visitor-keys: 4.2.1
-
-  '@ungap/[email protected]': {}
-
-  '@unrs/[email protected]':
-    optional: true
-
-  '@unrs/[email protected]':
-    optional: true
-
-  '@unrs/[email protected]':
-    optional: true
-
-  '@unrs/[email protected]':
-    optional: true
-
-  '@unrs/[email protected]':
-    optional: true
-
-  '@unrs/[email protected]':
-    optional: true
-
-  '@unrs/[email protected]':
-    optional: true
-
-  '@unrs/[email protected]':
-    optional: true
-
-  '@unrs/[email protected]':
-    optional: true
-
-  '@unrs/[email protected]':
-    optional: true
-
-  '@unrs/[email protected]':
-    optional: true
-
-  '@unrs/[email protected]':
-    optional: true
-
-  '@unrs/[email protected]':
-    optional: true
-
-  '@unrs/[email protected]':
-    optional: true
-
-  '@unrs/[email protected]':
-    optional: true
-
-  '@unrs/[email protected]':
-    dependencies:
-      '@napi-rs/wasm-runtime': 0.2.12
-    optional: true
-
-  '@unrs/[email protected]':
-    optional: true
-
-  '@unrs/[email protected]':
-    optional: true
-
-  '@unrs/[email protected]':
-    optional: true
-
-  '@use-gesture/[email protected]': {}
-
-  '@use-gesture/[email protected]([email protected])':
-    dependencies:
-      '@use-gesture/core': 10.3.1
-      react: 19.2.0
-
-  [email protected]:
-    dependencies:
-      mime-types: 3.0.1
-      negotiator: 1.0.0
-
-  [email protected]([email protected]):
-    dependencies:
-      acorn: 8.15.0
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]([email protected]([email protected]))([email protected]):
-    dependencies:
-      '@babel/runtime': 7.28.4
-      '@types/js-cookie': 3.0.6
-      dayjs: 1.11.18
-      intersection-observer: 0.12.2
-      js-cookie: 3.0.5
-      lodash: 4.17.21
-      react: 19.2.0
-      react-dom: 19.2.0([email protected])
-      react-fast-compare: 3.2.2
-      resize-observer-polyfill: 1.5.1
-      screenfull: 5.2.0
-      tslib: 2.8.1
-
-  [email protected]:
-    dependencies:
-      fast-deep-equal: 3.1.3
-      fast-json-stable-stringify: 2.1.0
-      json-schema-traverse: 0.4.1
-      uri-js: 4.4.1
-
-  [email protected]:
-    dependencies:
-      color-convert: 2.0.1
-
-  [email protected](@types/[email protected])([email protected]([email protected])([email protected])([email protected]([email protected]))([email protected]))([email protected]([email protected]))([email protected]):
-    dependencies:
-      '@ant-design/cssinjs': 1.24.0([email protected]([email protected]))([email protected])
-      '@babel/runtime': 7.28.4
-      '@emotion/cache': 11.14.0
-      '@emotion/css': 11.13.5
-      '@emotion/react': 11.14.0(@types/[email protected])([email protected])
-      '@emotion/serialize': 1.3.3
-      '@emotion/utils': 1.4.2
-      antd: 5.27.6([email protected])([email protected])([email protected]([email protected]))([email protected])
-      react: 19.2.0
-      use-merge-value: 1.2.0([email protected])
-    transitivePeerDependencies:
-      - '@types/react'
-      - react-dom
-      - supports-color
-
-  [email protected]([email protected])([email protected])([email protected]([email protected]))([email protected]):
-    dependencies:
-      '@ant-design/colors': 7.2.1
-      '@ant-design/cssinjs': 1.24.0([email protected]([email protected]))([email protected])
-      '@ant-design/cssinjs-utils': 1.1.3([email protected]([email protected]))([email protected])
-      '@ant-design/fast-color': 2.0.6
-      '@ant-design/icons': 5.6.1([email protected]([email protected]))([email protected])
-      '@ant-design/react-slick': 1.1.2([email protected])
-      '@babel/runtime': 7.28.4
-      '@rc-component/color-picker': 2.0.1([email protected]([email protected]))([email protected])
-      '@rc-component/mutate-observer': 1.1.0([email protected]([email protected]))([email protected])
-      '@rc-component/qrcode': 1.0.1([email protected]([email protected]))([email protected])
-      '@rc-component/tour': 1.15.1([email protected]([email protected]))([email protected])
-      '@rc-component/trigger': 2.3.0([email protected]([email protected]))([email protected])
-      classnames: 2.5.1
-      copy-to-clipboard: 3.3.3
-      dayjs: 1.11.18
-      rc-cascader: 3.34.0([email protected]([email protected]))([email protected])
-      rc-checkbox: 3.5.0([email protected]([email protected]))([email protected])
-      rc-collapse: 3.9.0([email protected]([email protected]))([email protected])
-      rc-dialog: 9.6.0([email protected]([email protected]))([email protected])
-      rc-drawer: 7.3.0([email protected]([email protected]))([email protected])
-      rc-dropdown: 4.2.1([email protected]([email protected]))([email protected])
-      rc-field-form: 2.7.1([email protected]([email protected]))([email protected])
-      rc-image: 7.12.0([email protected]([email protected]))([email protected])
-      rc-input: 1.8.0([email protected]([email protected]))([email protected])
-      rc-input-number: 9.5.0([email protected]([email protected]))([email protected])
-      rc-mentions: 2.20.0([email protected]([email protected]))([email protected])
-      rc-menu: 9.16.1([email protected]([email protected]))([email protected])
-      rc-motion: 2.9.5([email protected]([email protected]))([email protected])
-      rc-notification: 5.6.4([email protected]([email protected]))([email protected])
-      rc-pagination: 5.1.0([email protected]([email protected]))([email protected])
-      rc-picker: 4.11.3([email protected])([email protected])([email protected])([email protected]([email protected]))([email protected])
-      rc-progress: 4.0.0([email protected]([email protected]))([email protected])
-      rc-rate: 2.13.1([email protected]([email protected]))([email protected])
-      rc-resize-observer: 1.4.3([email protected]([email protected]))([email protected])
-      rc-segmented: 2.7.0([email protected]([email protected]))([email protected])
-      rc-select: 14.16.8([email protected]([email protected]))([email protected])
-      rc-slider: 11.1.9([email protected]([email protected]))([email protected])
-      rc-steps: 6.0.1([email protected]([email protected]))([email protected])
-      rc-switch: 4.1.0([email protected]([email protected]))([email protected])
-      rc-table: 7.54.0([email protected]([email protected]))([email protected])
-      rc-tabs: 15.7.0([email protected]([email protected]))([email protected])
-      rc-textarea: 1.10.2([email protected]([email protected]))([email protected])
-      rc-tooltip: 6.4.0([email protected]([email protected]))([email protected])
-      rc-tree: 5.13.1([email protected]([email protected]))([email protected])
-      rc-tree-select: 5.27.0([email protected]([email protected]))([email protected])
-      rc-upload: 4.9.2([email protected]([email protected]))([email protected])
-      rc-util: 5.44.4([email protected]([email protected]))([email protected])
-      react: 19.2.0
-      react-dom: 19.2.0([email protected])
-      scroll-into-view-if-needed: 3.1.0
-      throttle-debounce: 5.0.2
-    transitivePeerDependencies:
-      - date-fns
-      - luxon
-      - moment
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      tslib: 2.8.1
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      call-bound: 1.0.4
-      is-array-buffer: 3.0.5
-
-  [email protected]:
-    dependencies:
-      call-bind: 1.0.8
-      call-bound: 1.0.4
-      define-properties: 1.2.1
-      es-abstract: 1.24.0
-      es-object-atoms: 1.1.1
-      get-intrinsic: 1.3.0
-      is-string: 1.1.1
-      math-intrinsics: 1.1.0
-
-  [email protected]:
-    dependencies:
-      call-bind: 1.0.8
-      define-properties: 1.2.1
-      es-abstract: 1.24.0
-      es-errors: 1.3.0
-      es-object-atoms: 1.1.1
-      es-shim-unscopables: 1.1.0
-
-  [email protected]:
-    dependencies:
-      call-bind: 1.0.8
-      call-bound: 1.0.4
-      define-properties: 1.2.1
-      es-abstract: 1.24.0
-      es-errors: 1.3.0
-      es-object-atoms: 1.1.1
-      es-shim-unscopables: 1.1.0
-
-  [email protected]:
-    dependencies:
-      call-bind: 1.0.8
-      define-properties: 1.2.1
-      es-abstract: 1.24.0
-      es-shim-unscopables: 1.1.0
-
-  [email protected]:
-    dependencies:
-      call-bind: 1.0.8
-      define-properties: 1.2.1
-      es-abstract: 1.24.0
-      es-shim-unscopables: 1.1.0
-
-  [email protected]:
-    dependencies:
-      call-bind: 1.0.8
-      define-properties: 1.2.1
-      es-abstract: 1.24.0
-      es-errors: 1.3.0
-      es-shim-unscopables: 1.1.0
-
-  [email protected]:
-    dependencies:
-      array-buffer-byte-length: 1.0.2
-      call-bind: 1.0.8
-      define-properties: 1.2.1
-      es-abstract: 1.24.0
-      es-errors: 1.3.0
-      get-intrinsic: 1.3.0
-      is-array-buffer: 3.0.5
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      possible-typed-array-names: 1.1.0
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      '@babel/runtime': 7.28.4
-      cosmiconfig: 7.1.0
-      resolve: 1.22.10
-
-  [email protected](@babel/[email protected]):
-    dependencies:
-      '@babel/compat-data': 7.28.5
-      '@babel/core': 7.28.5
-      '@babel/helper-define-polyfill-provider': 0.6.5(@babel/[email protected])
-      semver: 6.3.1
-    transitivePeerDependencies:
-      - supports-color
-
-  [email protected](@babel/[email protected]):
-    dependencies:
-      '@babel/core': 7.28.5
-      '@babel/helper-define-polyfill-provider': 0.6.5(@babel/[email protected])
-      core-js-compat: 3.46.0
-    transitivePeerDependencies:
-      - supports-color
-
-  [email protected](@babel/[email protected]):
-    dependencies:
-      '@babel/core': 7.28.5
-      '@babel/helper-define-polyfill-provider': 0.6.5(@babel/[email protected])
-    transitivePeerDependencies:
-      - supports-color
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      bytes: 3.1.2
-      content-type: 1.0.5
-      debug: 4.4.1
-      http-errors: 2.0.0
-      iconv-lite: 0.6.3
-      on-finished: 2.4.1
-      qs: 6.14.0
-      raw-body: 3.0.1
-      type-is: 2.0.1
-    transitivePeerDependencies:
-      - supports-color
-
-  [email protected]:
-    dependencies:
-      balanced-match: 1.0.2
-      concat-map: 0.0.1
-
-  [email protected]:
-    dependencies:
-      balanced-match: 1.0.2
-
-  [email protected]:
-    dependencies:
-      fill-range: 7.1.1
-
-  [email protected]:
-    dependencies:
-      baseline-browser-mapping: 2.8.21
-      caniuse-lite: 1.0.30001751
-      electron-to-chromium: 1.5.243
-      node-releases: 2.0.26
-      update-browserslist-db: 1.1.4([email protected])
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      cron-parser: 4.9.0
-      get-port: 5.1.1
-      ioredis: 5.8.2
-      lodash: 4.17.21
-      msgpackr: 1.11.5
-      semver: 7.7.2
-      uuid: 8.3.2
-    transitivePeerDependencies:
-      - supports-color
-
-  [email protected](@types/[email protected]):
-    dependencies:
-      '@types/node': 20.19.17
-      '@types/react': 19.2.2
-    optional: true
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      es-errors: 1.3.0
-      function-bind: 1.1.2
-
-  [email protected]:
-    dependencies:
-      call-bind-apply-helpers: 1.0.2
-      es-define-property: 1.0.1
-      get-intrinsic: 1.3.0
-      set-function-length: 1.2.2
-
-  [email protected]:
-    dependencies:
-      call-bind-apply-helpers: 1.0.2
-      get-intrinsic: 1.3.0
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      '@babel/runtime': 7.28.4
-      '@types/raf': 3.4.3
-      core-js: 3.46.0
-      raf: 3.4.1
-      regenerator-runtime: 0.13.11
-      rgbcolor: 1.0.1
-      stackblur-canvas: 2.7.0
-      svg-pathdata: 6.0.3
-    optional: true
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      ansi-styles: 4.3.0
-      supports-color: 7.2.0
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]([email protected]):
-    dependencies:
-      chevrotain: 11.0.3
-      lodash-es: 4.17.21
-
-  [email protected]:
-    dependencies:
-      '@chevrotain/cst-dts-gen': 11.0.3
-      '@chevrotain/gast': 11.0.3
-      '@chevrotain/regexp-to-ast': 11.0.3
-      '@chevrotain/types': 11.0.3
-      '@chevrotain/utils': 11.0.3
-      lodash-es: 4.17.21
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      clsx: 2.1.1
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected](@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected]):
-    dependencies:
-      '@radix-ui/react-compose-refs': 1.1.2(@types/[email protected])([email protected])
-      '@radix-ui/react-dialog': 1.1.15(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
-      '@radix-ui/react-id': 1.1.1(@types/[email protected])([email protected])
-      '@radix-ui/react-primitive': 2.1.3(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
-      react: 19.2.0
-      react-dom: 19.2.0([email protected])
-    transitivePeerDependencies:
-      - '@types/react'
-      - '@types/react-dom'
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      color-name: 1.1.4
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      color-name: 1.1.4
-      simple-swizzle: 0.2.2
-    optional: true
-
-  [email protected]:
-    dependencies:
-      color-convert: 2.0.1
-      color-string: 1.9.1
-    optional: true
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      safe-buffer: 5.2.1
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      toggle-selection: 1.0.6
-
-  [email protected]:
-    dependencies:
-      browserslist: 4.27.0
-
-  [email protected]:
-    optional: true
-
-  [email protected]:
-    dependencies:
-      layout-base: 1.0.2
-
-  [email protected]:
-    dependencies:
-      layout-base: 2.0.1
-
-  [email protected]:
-    dependencies:
-      '@types/parse-json': 4.0.2
-      import-fresh: 3.3.1
-      parse-json: 5.2.0
-      path-type: 4.0.0
-      yaml: 1.10.2
-
-  [email protected]:
-    dependencies:
-      luxon: 3.7.2
-
-  [email protected]:
-    dependencies:
-      path-key: 3.1.1
-      shebang-command: 2.0.0
-      which: 2.0.2
-
-  [email protected]:
-    dependencies:
-      utrie: 1.0.2
-
-  [email protected]: {}
-
-  [email protected]([email protected]):
-    dependencies:
-      cose-base: 1.0.3
-      cytoscape: 3.33.1
-
-  [email protected]([email protected]):
-    dependencies:
-      cose-base: 2.2.0
-      cytoscape: 3.33.1
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      internmap: 1.0.1
-
-  [email protected]:
-    dependencies:
-      internmap: 2.0.3
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      d3-dispatch: 3.0.1
-      d3-drag: 3.0.0
-      d3-interpolate: 3.0.1
-      d3-selection: 3.0.0
-      d3-transition: 3.0.1([email protected])
-
-  [email protected]:
-    dependencies:
-      d3-path: 3.1.0
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      d3-array: 3.2.4
-
-  [email protected]:
-    dependencies:
-      delaunator: 5.0.1
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      d3-dispatch: 3.0.1
-      d3-selection: 3.0.0
-
-  [email protected]:
-    dependencies:
-      commander: 7.2.0
-      iconv-lite: 0.6.3
-      rw: 1.3.3
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      d3-dsv: 3.0.1
-
-  [email protected]:
-    dependencies:
-      d3-dispatch: 3.0.1
-      d3-quadtree: 3.0.1
-      d3-timer: 3.0.1
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      d3-array: 3.2.4
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      d3-color: 3.1.0
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      d3-array: 2.12.1
-      d3-shape: 1.3.7
-
-  [email protected]:
-    dependencies:
-      d3-color: 3.1.0
-      d3-interpolate: 3.0.1
-
-  [email protected]:
-    dependencies:
-      d3-array: 3.2.4
-      d3-format: 3.1.0
-      d3-interpolate: 3.0.1
-      d3-time: 3.1.0
-      d3-time-format: 4.1.0
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      d3-path: 1.0.9
-
-  [email protected]:
-    dependencies:
-      d3-path: 3.1.0
-
-  [email protected]:
-    dependencies:
-      d3-time: 3.1.0
-
-  [email protected]:
-    dependencies:
-      d3-array: 3.2.4
-
-  [email protected]: {}
-
-  [email protected]([email protected]):
-    dependencies:
-      d3-color: 3.1.0
-      d3-dispatch: 3.0.1
-      d3-ease: 3.0.1
-      d3-interpolate: 3.0.1
-      d3-selection: 3.0.0
-      d3-timer: 3.0.1
-
-  [email protected]:
-    dependencies:
-      d3-dispatch: 3.0.1
-      d3-drag: 3.0.0
-      d3-interpolate: 3.0.1
-      d3-selection: 3.0.0
-      d3-transition: 3.0.1([email protected])
-
-  [email protected]:
-    dependencies:
-      d3-array: 3.2.4
-      d3-axis: 3.0.0
-      d3-brush: 3.0.0
-      d3-chord: 3.0.1
-      d3-color: 3.1.0
-      d3-contour: 4.0.2
-      d3-delaunay: 6.0.4
-      d3-dispatch: 3.0.1
-      d3-drag: 3.0.0
-      d3-dsv: 3.0.1
-      d3-ease: 3.0.1
-      d3-fetch: 3.0.1
-      d3-force: 3.0.0
-      d3-format: 3.1.0
-      d3-geo: 3.1.1
-      d3-hierarchy: 3.1.2
-      d3-interpolate: 3.0.1
-      d3-path: 3.1.0
-      d3-polygon: 3.0.1
-      d3-quadtree: 3.0.1
-      d3-random: 3.0.1
-      d3-scale: 4.0.2
-      d3-scale-chromatic: 3.1.0
-      d3-selection: 3.0.0
-      d3-shape: 3.2.0
-      d3-time: 3.1.0
-      d3-time-format: 4.1.0
-      d3-timer: 3.0.1
-      d3-transition: 3.0.1([email protected])
-      d3-zoom: 3.0.0
-
-  [email protected]:
-    dependencies:
-      d3: 7.9.0
-      lodash-es: 4.17.21
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      call-bound: 1.0.4
-      es-errors: 1.3.0
-      is-data-view: 1.0.2
-
-  [email protected]:
-    dependencies:
-      call-bound: 1.0.4
-      es-errors: 1.3.0
-      is-data-view: 1.0.2
-
-  [email protected]:
-    dependencies:
-      call-bound: 1.0.4
-      es-errors: 1.3.0
-      is-data-view: 1.0.2
-
-  [email protected]([email protected]):
-    dependencies:
-      date-fns: 4.1.0
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      ms: 2.1.3
-
-  [email protected]:
-    dependencies:
-      ms: 2.1.3
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      character-entities: 2.0.2
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      es-define-property: 1.0.1
-      es-errors: 1.3.0
-      gopd: 1.2.0
-
-  [email protected]:
-    dependencies:
-      define-data-property: 1.1.4
-      has-property-descriptors: 1.0.2
-      object-keys: 1.1.1
-
-  [email protected]:
-    dependencies:
-      robust-predicates: 3.0.2
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      dequal: 2.0.3
-
-  [email protected]:
-    dependencies:
-      esutils: 2.0.3
-
-  [email protected]:
-    dependencies:
-      '@babel/runtime': 7.28.4
-      csstype: 3.1.3
-
-  [email protected]:
-    optionalDependencies:
-      '@types/trusted-types': 2.0.7
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      '@drizzle-team/brocli': 0.10.2
-      '@esbuild-kit/esm-loader': 2.6.5
-      esbuild: 0.25.10
-      esbuild-register: 3.6.0([email protected])
-    transitivePeerDependencies:
-      - supports-color
-
-  [email protected](@types/[email protected])([email protected](@types/[email protected]))([email protected]):
-    optionalDependencies:
-      '@types/pg': 8.15.5
-      bun-types: 1.2.22(@types/[email protected])
-      postgres: 3.4.7
-
-  [email protected]:
-    dependencies:
-      call-bind-apply-helpers: 1.0.2
-      es-errors: 1.3.0
-      gopd: 1.2.0
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      jake: 10.9.4
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      once: 1.4.0
-
-  [email protected]:
-    dependencies:
-      graceful-fs: 4.2.11
-      tapable: 2.2.2
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      is-arrayish: 0.2.1
-
-  [email protected]:
-    dependencies:
-      array-buffer-byte-length: 1.0.2
-      arraybuffer.prototype.slice: 1.0.4
-      available-typed-arrays: 1.0.7
-      call-bind: 1.0.8
-      call-bound: 1.0.4
-      data-view-buffer: 1.0.2
-      data-view-byte-length: 1.0.2
-      data-view-byte-offset: 1.0.1
-      es-define-property: 1.0.1
-      es-errors: 1.3.0
-      es-object-atoms: 1.1.1
-      es-set-tostringtag: 2.1.0
-      es-to-primitive: 1.3.0
-      function.prototype.name: 1.1.8
-      get-intrinsic: 1.3.0
-      get-proto: 1.0.1
-      get-symbol-description: 1.1.0
-      globalthis: 1.0.4
-      gopd: 1.2.0
-      has-property-descriptors: 1.0.2
-      has-proto: 1.2.0
-      has-symbols: 1.1.0
-      hasown: 2.0.2
-      internal-slot: 1.1.0
-      is-array-buffer: 3.0.5
-      is-callable: 1.2.7
-      is-data-view: 1.0.2
-      is-negative-zero: 2.0.3
-      is-regex: 1.2.1
-      is-set: 2.0.3
-      is-shared-array-buffer: 1.0.4
-      is-string: 1.1.1
-      is-typed-array: 1.1.15
-      is-weakref: 1.1.1
-      math-intrinsics: 1.1.0
-      object-inspect: 1.13.4
-      object-keys: 1.1.1
-      object.assign: 4.1.7
-      own-keys: 1.0.1
-      regexp.prototype.flags: 1.5.4
-      safe-array-concat: 1.1.3
-      safe-push-apply: 1.0.0
-      safe-regex-test: 1.1.0
-      set-proto: 1.0.0
-      stop-iteration-iterator: 1.1.0
-      string.prototype.trim: 1.2.10
-      string.prototype.trimend: 1.0.9
-      string.prototype.trimstart: 1.0.8
-      typed-array-buffer: 1.0.3
-      typed-array-byte-length: 1.0.3
-      typed-array-byte-offset: 1.0.4
-      typed-array-length: 1.0.7
-      unbox-primitive: 1.1.0
-      which-typed-array: 1.1.19
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      call-bind: 1.0.8
-      call-bound: 1.0.4
-      define-properties: 1.2.1
-      es-abstract: 1.24.0
-      es-errors: 1.3.0
-      es-set-tostringtag: 2.1.0
-      function-bind: 1.1.2
-      get-intrinsic: 1.3.0
-      globalthis: 1.0.4
-      gopd: 1.2.0
-      has-property-descriptors: 1.0.2
-      has-proto: 1.2.0
-      has-symbols: 1.1.0
-      internal-slot: 1.1.0
-      iterator.prototype: 1.1.5
-      safe-array-concat: 1.1.3
-
-  [email protected]:
-    dependencies:
-      es-errors: 1.3.0
-
-  [email protected]:
-    dependencies:
-      es-errors: 1.3.0
-      get-intrinsic: 1.3.0
-      has-tostringtag: 1.0.2
-      hasown: 2.0.2
-
-  [email protected]:
-    dependencies:
-      hasown: 2.0.2
-
-  [email protected]:
-    dependencies:
-      is-callable: 1.2.7
-      is-date-object: 1.1.0
-      is-symbol: 1.1.1
-
-  [email protected]:
-    dependencies:
-      '@types/estree-jsx': 1.0.5
-      devlop: 1.1.0
-      estree-util-visit: 2.0.0
-      unist-util-position-from-estree: 2.0.0
-
-  [email protected]:
-    dependencies:
-      '@types/estree-jsx': 1.0.5
-      acorn: 8.15.0
-      esast-util-from-estree: 2.0.0
-      vfile-message: 4.0.3
-
-  [email protected]([email protected]):
-    dependencies:
-      debug: 4.4.1
-      esbuild: 0.25.10
-    transitivePeerDependencies:
-      - supports-color
-
-  [email protected]:
-    optionalDependencies:
-      '@esbuild/android-arm': 0.18.20
-      '@esbuild/android-arm64': 0.18.20
-      '@esbuild/android-x64': 0.18.20
-      '@esbuild/darwin-arm64': 0.18.20
-      '@esbuild/darwin-x64': 0.18.20
-      '@esbuild/freebsd-arm64': 0.18.20
-      '@esbuild/freebsd-x64': 0.18.20
-      '@esbuild/linux-arm': 0.18.20
-      '@esbuild/linux-arm64': 0.18.20
-      '@esbuild/linux-ia32': 0.18.20
-      '@esbuild/linux-loong64': 0.18.20
-      '@esbuild/linux-mips64el': 0.18.20
-      '@esbuild/linux-ppc64': 0.18.20
-      '@esbuild/linux-riscv64': 0.18.20
-      '@esbuild/linux-s390x': 0.18.20
-      '@esbuild/linux-x64': 0.18.20
-      '@esbuild/netbsd-x64': 0.18.20
-      '@esbuild/openbsd-x64': 0.18.20
-      '@esbuild/sunos-x64': 0.18.20
-      '@esbuild/win32-arm64': 0.18.20
-      '@esbuild/win32-ia32': 0.18.20
-      '@esbuild/win32-x64': 0.18.20
-
-  [email protected]:
-    optionalDependencies:
-      '@esbuild/aix-ppc64': 0.25.10
-      '@esbuild/android-arm': 0.25.10
-      '@esbuild/android-arm64': 0.25.10
-      '@esbuild/android-x64': 0.25.10
-      '@esbuild/darwin-arm64': 0.25.10
-      '@esbuild/darwin-x64': 0.25.10
-      '@esbuild/freebsd-arm64': 0.25.10
-      '@esbuild/freebsd-x64': 0.25.10
-      '@esbuild/linux-arm': 0.25.10
-      '@esbuild/linux-arm64': 0.25.10
-      '@esbuild/linux-ia32': 0.25.10
-      '@esbuild/linux-loong64': 0.25.10
-      '@esbuild/linux-mips64el': 0.25.10
-      '@esbuild/linux-ppc64': 0.25.10
-      '@esbuild/linux-riscv64': 0.25.10
-      '@esbuild/linux-s390x': 0.25.10
-      '@esbuild/linux-x64': 0.25.10
-      '@esbuild/netbsd-arm64': 0.25.10
-      '@esbuild/netbsd-x64': 0.25.10
-      '@esbuild/openbsd-arm64': 0.25.10
-      '@esbuild/openbsd-x64': 0.25.10
-      '@esbuild/openharmony-arm64': 0.25.10
-      '@esbuild/sunos-x64': 0.25.10
-      '@esbuild/win32-arm64': 0.25.10
-      '@esbuild/win32-ia32': 0.25.10
-      '@esbuild/win32-x64': 0.25.10
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]([email protected]([email protected]))([email protected]):
-    dependencies:
-      '@next/eslint-plugin-next': 15.5.6
-      '@rushstack/eslint-patch': 1.12.0
-      '@typescript-eslint/eslint-plugin': 8.39.0(@typescript-eslint/[email protected]([email protected]([email protected]))([email protected]))([email protected]([email protected]))([email protected])
-      '@typescript-eslint/parser': 8.39.0([email protected]([email protected]))([email protected])
-      eslint: 9.38.0([email protected])
-      eslint-import-resolver-node: 0.3.9
-      eslint-import-resolver-typescript: 3.10.1([email protected])([email protected]([email protected]))
-      eslint-plugin-import: 2.32.0(@typescript-eslint/[email protected]([email protected]([email protected]))([email protected]))([email protected])([email protected]([email protected]))
-      eslint-plugin-jsx-a11y: 6.10.2([email protected]([email protected]))
-      eslint-plugin-react: 7.37.5([email protected]([email protected]))
-      eslint-plugin-react-hooks: 5.2.0([email protected]([email protected]))
-    optionalDependencies:
-      typescript: 5.9.3
-    transitivePeerDependencies:
-      - eslint-import-resolver-webpack
-      - eslint-plugin-import-x
-      - supports-color
-
-  [email protected]([email protected]([email protected])):
-    dependencies:
-      eslint: 9.38.0([email protected])
-
-  [email protected]:
-    dependencies:
-      debug: 3.2.7
-      is-core-module: 2.16.1
-      resolve: 1.22.10
-    transitivePeerDependencies:
-      - supports-color
-
-  [email protected]([email protected])([email protected]([email protected])):
-    dependencies:
-      '@nolyfill/is-core-module': 1.0.39
-      debug: 4.4.1
-      eslint: 9.38.0([email protected])
-      get-tsconfig: 4.10.1
-      is-bun-module: 2.0.0
-      stable-hash: 0.0.5
-      tinyglobby: 0.2.14
-      unrs-resolver: 1.11.1
-    optionalDependencies:
-      eslint-plugin-import: 2.32.0(@typescript-eslint/[email protected]([email protected]([email protected]))([email protected]))([email protected])([email protected]([email protected]))
-    transitivePeerDependencies:
-      - supports-color
-
-  [email protected](@typescript-eslint/[email protected]([email protected]([email protected]))([email protected]))([email protected])([email protected])([email protected]([email protected])):
-    dependencies:
-      debug: 3.2.7
-    optionalDependencies:
-      '@typescript-eslint/parser': 8.39.0([email protected]([email protected]))([email protected])
-      eslint: 9.38.0([email protected])
-      eslint-import-resolver-node: 0.3.9
-      eslint-import-resolver-typescript: 3.10.1([email protected])([email protected]([email protected]))
-    transitivePeerDependencies:
-      - supports-color
-
-  [email protected](@typescript-eslint/[email protected]([email protected]([email protected]))([email protected]))([email protected])([email protected]([email protected])):
-    dependencies:
-      '@rtsao/scc': 1.1.0
-      array-includes: 3.1.9
-      array.prototype.findlastindex: 1.2.6
-      array.prototype.flat: 1.3.3
-      array.prototype.flatmap: 1.3.3
-      debug: 3.2.7
-      doctrine: 2.1.0
-      eslint: 9.38.0([email protected])
-      eslint-import-resolver-node: 0.3.9
-      eslint-module-utils: 2.12.1(@typescript-eslint/[email protected]([email protected]([email protected]))([email protected]))([email protected])([email protected])([email protected]([email protected]))
-      hasown: 2.0.2
-      is-core-module: 2.16.1
-      is-glob: 4.0.3
-      minimatch: 3.1.2
-      object.fromentries: 2.0.8
-      object.groupby: 1.0.3
-      object.values: 1.2.1
-      semver: 6.3.1
-      string.prototype.trimend: 1.0.9
-      tsconfig-paths: 3.15.0
-    optionalDependencies:
-      '@typescript-eslint/parser': 8.39.0([email protected]([email protected]))([email protected])
-    transitivePeerDependencies:
-      - eslint-import-resolver-typescript
-      - eslint-import-resolver-webpack
-      - supports-color
-
-  [email protected]([email protected]([email protected])):
-    dependencies:
-      aria-query: 5.3.2
-      array-includes: 3.1.9
-      array.prototype.flatmap: 1.3.3
-      ast-types-flow: 0.0.8
-      axe-core: 4.10.3
-      axobject-query: 4.1.0
-      damerau-levenshtein: 1.0.8
-      emoji-regex: 9.2.2
-      eslint: 9.38.0([email protected])
-      hasown: 2.0.2
-      jsx-ast-utils: 3.3.5
-      language-tags: 1.0.9
-      minimatch: 3.1.2
-      object.fromentries: 2.0.8
-      safe-regex-test: 1.1.0
-      string.prototype.includes: 2.0.1
-
-  [email protected]([email protected]([email protected])):
-    dependencies:
-      eslint: 9.38.0([email protected])
-
-  [email protected]([email protected]([email protected])):
-    dependencies:
-      array-includes: 3.1.9
-      array.prototype.findlast: 1.2.5
-      array.prototype.flatmap: 1.3.3
-      array.prototype.tosorted: 1.1.4
-      doctrine: 2.1.0
-      es-iterator-helpers: 1.2.1
-      eslint: 9.38.0([email protected])
-      estraverse: 5.3.0
-      hasown: 2.0.2
-      jsx-ast-utils: 3.3.5
-      minimatch: 3.1.2
-      object.entries: 1.1.9
-      object.fromentries: 2.0.8
-      object.values: 1.2.1
-      prop-types: 15.8.1
-      resolve: 2.0.0-next.5
-      semver: 6.3.1
-      string.prototype.matchall: 4.0.12
-      string.prototype.repeat: 1.0.0
-
-  [email protected]:
-    dependencies:
-      esrecurse: 4.3.0
-      estraverse: 5.3.0
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]([email protected]):
-    dependencies:
-      '@eslint-community/eslint-utils': 4.9.0([email protected]([email protected]))
-      '@eslint-community/regexpp': 4.12.1
-      '@eslint/config-array': 0.21.1
-      '@eslint/config-helpers': 0.4.1
-      '@eslint/core': 0.16.0
-      '@eslint/eslintrc': 3.3.1
-      '@eslint/js': 9.38.0
-      '@eslint/plugin-kit': 0.4.0
-      '@humanfs/node': 0.16.6
-      '@humanwhocodes/module-importer': 1.0.1
-      '@humanwhocodes/retry': 0.4.3
-      '@types/estree': 1.0.8
-      ajv: 6.12.6
-      chalk: 4.1.2
-      cross-spawn: 7.0.6
-      debug: 4.4.1
-      escape-string-regexp: 4.0.0
-      eslint-scope: 8.4.0
-      eslint-visitor-keys: 4.2.1
-      espree: 10.4.0
-      esquery: 1.6.0
-      esutils: 2.0.3
-      fast-deep-equal: 3.1.3
-      file-entry-cache: 8.0.0
-      find-up: 5.0.0
-      glob-parent: 6.0.2
-      ignore: 5.3.2
-      imurmurhash: 0.1.4
-      is-glob: 4.0.3
-      json-stable-stringify-without-jsonify: 1.0.1
-      lodash.merge: 4.6.2
-      minimatch: 3.1.2
-      natural-compare: 1.4.0
-      optionator: 0.9.4
-    optionalDependencies:
-      jiti: 2.6.1
-    transitivePeerDependencies:
-      - supports-color
-
-  [email protected]:
-    dependencies:
-      acorn: 8.15.0
-      acorn-jsx: 5.3.2([email protected])
-      eslint-visitor-keys: 4.2.1
-
-  [email protected]:
-    dependencies:
-      estraverse: 5.3.0
-
-  [email protected]:
-    dependencies:
-      estraverse: 5.3.0
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      '@types/estree': 1.0.8
-
-  [email protected]:
-    dependencies:
-      '@types/estree-jsx': 1.0.5
-      devlop: 1.1.0
-      estree-util-is-identifier-name: 3.0.0
-      estree-walker: 3.0.3
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      '@types/estree': 1.0.8
-      devlop: 1.1.0
-
-  [email protected]:
-    dependencies:
-      '@types/estree-jsx': 1.0.5
-      astring: 1.9.0
-      source-map: 0.7.6
-
-  [email protected]:
-    dependencies:
-      '@types/estree-jsx': 1.0.5
-      '@types/unist': 3.0.3
-
-  [email protected]:
-    dependencies:
-      '@types/estree': 1.0.8
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      accepts: 2.0.0
-      body-parser: 2.2.0
-      content-disposition: 1.0.0
-      content-type: 1.0.5
-      cookie: 0.7.2
-      cookie-signature: 1.2.2
-      debug: 4.4.1
-      encodeurl: 2.0.0
-      escape-html: 1.0.3
-      etag: 1.8.1
-      finalhandler: 2.1.0
-      fresh: 2.0.0
-      http-errors: 2.0.0
-      merge-descriptors: 2.0.0
-      mime-types: 3.0.1
-      on-finished: 2.4.1
-      once: 1.4.0
-      parseurl: 1.3.3
-      proxy-addr: 2.0.7
-      qs: 6.14.0
-      range-parser: 1.2.1
-      router: 2.2.0
-      send: 1.2.0
-      serve-static: 2.2.0
-      statuses: 2.0.2
-      type-is: 2.0.1
-      vary: 1.1.2
-    transitivePeerDependencies:
-      - supports-color
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      is-extendable: 0.1.1
-
-  [email protected]:
-    dependencies:
-      assign-symbols: 1.0.0
-      is-extendable: 1.0.1
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      '@nodelib/fs.stat': 2.0.5
-      '@nodelib/fs.walk': 1.2.8
-      glob-parent: 5.1.2
-      merge2: 1.4.1
-      micromatch: 4.0.8
-
-  [email protected]:
-    dependencies:
-      '@nodelib/fs.stat': 2.0.5
-      '@nodelib/fs.walk': 1.2.8
-      glob-parent: 5.1.2
-      merge2: 1.4.1
-      micromatch: 4.0.8
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      '@types/pako': 2.0.4
-      iobuffer: 5.4.0
-      pako: 2.1.0
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      reusify: 1.1.0
-
-  [email protected]([email protected]):
-    optionalDependencies:
-      picomatch: 4.0.3
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      flat-cache: 4.0.1
-
-  [email protected]:
-    dependencies:
-      tslib: 2.8.1
-
-  [email protected]:
-    dependencies:
-      minimatch: 5.1.6
-
-  [email protected]:
-    dependencies:
-      to-regex-range: 5.0.1
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      debug: 4.4.1
-      encodeurl: 2.0.0
-      escape-html: 1.0.3
-      on-finished: 2.4.1
-      parseurl: 1.3.3
-      statuses: 2.0.2
-    transitivePeerDependencies:
-      - supports-color
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      locate-path: 6.0.0
-      path-exists: 4.0.0
-
-  [email protected]:
-    dependencies:
-      flatted: 3.3.3
-      keyv: 4.5.4
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      is-callable: 1.2.7
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]([email protected]([email protected]))([email protected]):
-    dependencies:
-      motion-dom: 12.23.23
-      motion-utils: 12.23.6
-      tslib: 2.8.1
-    optionalDependencies:
-      react: 19.2.0
-      react-dom: 19.2.0([email protected])
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      call-bind: 1.0.8
-      call-bound: 1.0.4
-      define-properties: 1.2.1
-      functions-have-names: 1.2.3
-      hasown: 2.0.2
-      is-callable: 1.2.7
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      call-bind-apply-helpers: 1.0.2
-      es-define-property: 1.0.1
-      es-errors: 1.3.0
-      es-object-atoms: 1.1.1
-      function-bind: 1.1.2
-      get-proto: 1.0.1
-      gopd: 1.2.0
-      has-symbols: 1.1.0
-      hasown: 2.0.2
-      math-intrinsics: 1.1.0
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      dunder-proto: 1.0.1
-      es-object-atoms: 1.1.1
-
-  [email protected]:
-    dependencies:
-      call-bound: 1.0.4
-      es-errors: 1.3.0
-      get-intrinsic: 1.3.0
-
-  [email protected]:
-    dependencies:
-      resolve-pkg-maps: 1.0.0
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      lit: 3.3.1
-
-  [email protected]:
-    dependencies:
-      is-glob: 4.0.3
-
-  [email protected]:
-    dependencies:
-      is-glob: 4.0.3
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      define-properties: 1.2.1
-      gopd: 1.2.0
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      es-define-property: 1.0.1
-
-  [email protected]:
-    dependencies:
-      dunder-proto: 1.0.1
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      has-symbols: 1.1.0
-
-  [email protected]:
-    dependencies:
-      function-bind: 1.1.2
-
-  [email protected]:
-    dependencies:
-      '@types/hast': 3.0.4
-      hastscript: 9.0.1
-      web-namespaces: 2.0.1
-
-  [email protected]:
-    dependencies:
-      '@types/hast': 3.0.4
-      hast-util-from-dom: 5.0.1
-      hast-util-from-html: 2.0.3
-      unist-util-remove-position: 5.0.0
-
-  [email protected]:
-    dependencies:
-      '@types/hast': 3.0.4
-      devlop: 1.1.0
-      hast-util-from-parse5: 8.0.3
-      parse5: 7.3.0
-      vfile: 6.0.3
-      vfile-message: 4.0.3
-
-  [email protected]:
-    dependencies:
-      '@types/hast': 3.0.4
-      '@types/unist': 3.0.3
-      devlop: 1.1.0
-      hastscript: 9.0.1
-      property-information: 7.1.0
-      vfile: 6.0.3
-      vfile-location: 5.0.3
-      web-namespaces: 2.0.1
-
-  [email protected]:
-    dependencies:
-      '@types/hast': 3.0.4
-
-  [email protected]:
-    dependencies:
-      '@types/hast': 3.0.4
-
-  [email protected]:
-    dependencies:
-      '@types/hast': 3.0.4
-      '@types/unist': 3.0.3
-      '@ungap/structured-clone': 1.3.0
-      hast-util-from-parse5: 8.0.3
-      hast-util-to-parse5: 8.0.0
-      html-void-elements: 3.0.0
-      mdast-util-to-hast: 13.2.0
-      parse5: 7.3.0
-      unist-util-position: 5.0.0
-      unist-util-visit: 5.0.0
-      vfile: 6.0.3
-      web-namespaces: 2.0.1
-      zwitch: 2.0.4
-
-  [email protected]:
-    dependencies:
-      '@types/estree': 1.0.8
-      '@types/estree-jsx': 1.0.5
-      '@types/hast': 3.0.4
-      comma-separated-tokens: 2.0.3
-      devlop: 1.1.0
-      estree-util-attach-comments: 3.0.0
-      estree-util-is-identifier-name: 3.0.0
-      hast-util-whitespace: 3.0.0
-      mdast-util-mdx-expression: 2.0.1
-      mdast-util-mdx-jsx: 3.2.0
-      mdast-util-mdxjs-esm: 2.0.1
-      property-information: 7.1.0
-      space-separated-tokens: 2.0.2
-      style-to-js: 1.1.18
-      unist-util-position: 5.0.0
-      zwitch: 2.0.4
-    transitivePeerDependencies:
-      - supports-color
-
-  [email protected]:
-    dependencies:
-      '@types/hast': 3.0.4
-      '@types/unist': 3.0.3
-      ccount: 2.0.1
-      comma-separated-tokens: 2.0.3
-      hast-util-whitespace: 3.0.0
-      html-void-elements: 3.0.0
-      mdast-util-to-hast: 13.2.0
-      property-information: 7.1.0
-      space-separated-tokens: 2.0.2
-      stringify-entities: 4.0.4
-      zwitch: 2.0.4
-
-  [email protected]:
-    dependencies:
-      '@types/estree': 1.0.8
-      '@types/hast': 3.0.4
-      '@types/unist': 3.0.3
-      comma-separated-tokens: 2.0.3
-      devlop: 1.1.0
-      estree-util-is-identifier-name: 3.0.0
-      hast-util-whitespace: 3.0.0
-      mdast-util-mdx-expression: 2.0.1
-      mdast-util-mdx-jsx: 3.2.0
-      mdast-util-mdxjs-esm: 2.0.1
-      property-information: 7.1.0
-      space-separated-tokens: 2.0.2
-      style-to-js: 1.1.18
-      unist-util-position: 5.0.0
-      vfile-message: 4.0.3
-    transitivePeerDependencies:
-      - supports-color
-
-  [email protected]:
-    dependencies:
-      '@types/hast': 3.0.4
-      comma-separated-tokens: 2.0.3
-      devlop: 1.1.0
-      property-information: 6.5.0
-      space-separated-tokens: 2.0.2
-      web-namespaces: 2.0.1
-      zwitch: 2.0.4
-
-  [email protected]:
-    dependencies:
-      '@types/hast': 3.0.4
-      '@types/unist': 3.0.3
-      hast-util-is-element: 3.0.0
-      unist-util-find-after: 5.0.0
-
-  [email protected]:
-    dependencies:
-      '@types/hast': 3.0.4
-
-  [email protected]:
-    dependencies:
-      '@types/hast': 3.0.4
-      comma-separated-tokens: 2.0.3
-      hast-util-parse-selector: 4.0.0
-      property-information: 7.1.0
-      space-separated-tokens: 2.0.2
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      react-is: 16.13.1
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      css-line-break: 2.1.0
-      text-segmentation: 1.0.3
-
-  [email protected]:
-    dependencies:
-      depd: 2.0.0
-      inherits: 2.0.4
-      setprototypeof: 1.2.0
-      statuses: 2.0.1
-      toidentifier: 1.0.1
-
-  [email protected]:
-    dependencies:
-      safer-buffer: 2.1.2
-
-  [email protected]:
-    dependencies:
-      safer-buffer: 2.1.2
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      parent-module: 1.0.1
-      resolve-from: 4.0.0
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      es-errors: 1.3.0
-      hasown: 2.0.2
-      side-channel: 1.1.0
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      '@formatjs/ecma402-abstract': 2.3.6
-      '@formatjs/fast-memoize': 2.2.7
-      '@formatjs/icu-messageformat-parser': 2.11.4
-      tslib: 2.8.1
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      '@ioredis/commands': 1.4.0
-      cluster-key-slot: 1.1.2
-      debug: 4.4.1
-      denque: 2.1.0
-      lodash.defaults: 4.2.0
-      lodash.isarguments: 3.1.0
-      redis-errors: 1.2.0
-      redis-parser: 3.0.0
-      standard-as-callback: 2.1.0
-    transitivePeerDependencies:
-      - supports-color
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      is-alphabetical: 2.0.1
-      is-decimal: 2.0.1
-
-  [email protected]:
-    dependencies:
-      call-bind: 1.0.8
-      call-bound: 1.0.4
-      get-intrinsic: 1.3.0
-
-  [email protected]: {}
-
-  [email protected]:
-    optional: true
-
-  [email protected]:
-    dependencies:
-      async-function: 1.0.0
-      call-bound: 1.0.4
-      get-proto: 1.0.1
-      has-tostringtag: 1.0.2
-      safe-regex-test: 1.1.0
-
-  [email protected]:
-    dependencies:
-      has-bigints: 1.1.0
-
-  [email protected]:
-    dependencies:
-      call-bound: 1.0.4
-      has-tostringtag: 1.0.2
-
-  [email protected]:
-    dependencies:
-      semver: 7.7.2
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      hasown: 2.0.2
-
-  [email protected]:
-    dependencies:
-      call-bound: 1.0.4
-      get-intrinsic: 1.3.0
-      is-typed-array: 1.1.15
-
-  [email protected]:
-    dependencies:
-      call-bound: 1.0.4
-      has-tostringtag: 1.0.2
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      is-plain-object: 2.0.4
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      call-bound: 1.0.4
-
-  [email protected]:
-    dependencies:
-      call-bound: 1.0.4
-      get-proto: 1.0.1
-      has-tostringtag: 1.0.2
-      safe-regex-test: 1.1.0
-
-  [email protected]:
-    dependencies:
-      is-extglob: 2.1.1
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      call-bound: 1.0.4
-      has-tostringtag: 1.0.2
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      isobject: 3.0.1
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      call-bound: 1.0.4
-      gopd: 1.2.0
-      has-tostringtag: 1.0.2
-      hasown: 2.0.2
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      call-bound: 1.0.4
-
-  [email protected]:
-    dependencies:
-      call-bound: 1.0.4
-      has-tostringtag: 1.0.2
-
-  [email protected]:
-    dependencies:
-      call-bound: 1.0.4
-      has-symbols: 1.1.0
-      safe-regex-test: 1.1.0
-
-  [email protected]:
-    dependencies:
-      which-typed-array: 1.1.19
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      call-bound: 1.0.4
-
-  [email protected]:
-    dependencies:
-      call-bound: 1.0.4
-      get-intrinsic: 1.3.0
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      define-data-property: 1.1.4
-      es-object-atoms: 1.1.1
-      get-intrinsic: 1.3.0
-      get-proto: 1.0.1
-      has-symbols: 1.1.0
-      set-function-name: 2.0.2
-
-  [email protected]:
-    dependencies:
-      async: 3.2.6
-      filelist: 1.0.4
-      picocolors: 1.1.1
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      argparse: 2.0.1
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      string-convert: 0.2.1
-
-  [email protected]:
-    dependencies:
-      minimist: 1.2.8
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      '@babel/runtime': 7.28.4
-      fast-png: 6.4.0
-      fflate: 0.8.2
-    optionalDependencies:
-      canvg: 3.0.11
-      core-js: 3.46.0
-      dompurify: 3.3.0
-      html2canvas: 1.4.1
-
-  [email protected]:
-    dependencies:
-      array-includes: 3.1.9
-      array.prototype.flat: 1.3.3
-      object.assign: 4.1.7
-      object.values: 1.2.1
-
-  [email protected]:
-    dependencies:
-      commander: 8.3.0
-
-  [email protected]:
-    dependencies:
-      json-buffer: 3.0.1
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      chevrotain: 11.0.3
-      chevrotain-allstar: 0.3.1([email protected])
-      vscode-languageserver: 9.0.1
-      vscode-languageserver-textdocument: 1.0.12
-      vscode-uri: 3.0.8
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      language-subtag-registry: 0.3.23
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected](@types/[email protected])([email protected]([email protected]))([email protected]):
-    dependencies:
-      '@radix-ui/react-portal': 1.0.2([email protected]([email protected]))([email protected])
-      '@radix-ui/react-tooltip': 1.0.5(@types/[email protected])([email protected]([email protected]))([email protected])
-      '@stitches/react': 1.2.8([email protected])
-      '@use-gesture/react': 10.3.1([email protected])
-      colord: 2.9.3
-      dequal: 2.0.3
-      merge-value: 1.0.0
-      react: 19.2.0
-      react-colorful: 5.6.1([email protected]([email protected]))([email protected])
-      react-dom: 19.2.0([email protected])
-      react-dropzone: 12.1.0([email protected])
-      v8n: 1.5.1
-      zustand: 3.7.2([email protected])
-    transitivePeerDependencies:
-      - '@types/react'
-
-  [email protected]:
-    dependencies:
-      prelude-ls: 1.2.1
-      type-check: 0.4.0
-
-  [email protected]:
-    optional: true
-
-  [email protected]:
-    optional: true
-
-  [email protected]:
-    optional: true
-
-  [email protected]:
-    optional: true
-
-  [email protected]:
-    optional: true
-
-  [email protected]:
-    optional: true
-
-  [email protected]:
-    optional: true
-
-  [email protected]:
-    optional: true
-
-  [email protected]:
-    optional: true
-
-  [email protected]:
-    optional: true
-
-  [email protected]:
-    optional: true
-
-  [email protected]:
-    dependencies:
-      detect-libc: 2.0.4
-    optionalDependencies:
-      lightningcss-android-arm64: 1.30.2
-      lightningcss-darwin-arm64: 1.30.2
-      lightningcss-darwin-x64: 1.30.2
-      lightningcss-freebsd-x64: 1.30.2
-      lightningcss-linux-arm-gnueabihf: 1.30.2
-      lightningcss-linux-arm64-gnu: 1.30.2
-      lightningcss-linux-arm64-musl: 1.30.2
-      lightningcss-linux-x64-gnu: 1.30.2
-      lightningcss-linux-x64-musl: 1.30.2
-      lightningcss-win32-arm64-msvc: 1.30.2
-      lightningcss-win32-x64-msvc: 1.30.2
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      '@lit-labs/ssr-dom-shim': 1.4.0
-      '@lit/reactive-element': 2.1.1
-      lit-html: 3.3.1
-
-  [email protected]:
-    dependencies:
-      '@types/trusted-types': 2.0.7
-
-  [email protected]:
-    dependencies:
-      '@lit/reactive-element': 2.1.1
-      lit-element: 4.2.1
-      lit-html: 3.3.1
-
-  [email protected]:
-    dependencies:
-      mlly: 1.8.0
-      pkg-types: 2.3.0
-      quansync: 0.2.11
-
-  [email protected]:
-    dependencies:
-      p-locate: 5.0.0
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      js-tokens: 4.0.0
-
-  [email protected]:
-    dependencies:
-      yallist: 3.1.1
-
-  [email protected]([email protected]):
-    dependencies:
-      react: 19.2.0
-
-  [email protected]([email protected]):
-    dependencies:
-      react: 19.2.0
-
-  [email protected]([email protected]):
-    dependencies:
-      react: 19.2.0
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      '@jridgewell/sourcemap-codec': 1.5.5
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      '@types/mdast': 4.0.4
-      escape-string-regexp: 5.0.0
-      unist-util-is: 6.0.1
-      unist-util-visit-parents: 6.0.2
-
-  [email protected]:
-    dependencies:
-      '@types/mdast': 4.0.4
-      '@types/unist': 3.0.3
-      decode-named-character-reference: 1.2.0
-      devlop: 1.1.0
-      mdast-util-to-string: 4.0.0
-      micromark: 4.0.2
-      micromark-util-decode-numeric-character-reference: 2.0.2
-      micromark-util-decode-string: 2.0.1
-      micromark-util-normalize-identifier: 2.0.1
-      micromark-util-symbol: 2.0.1
-      micromark-util-types: 2.0.2
-      unist-util-stringify-position: 4.0.0
-    transitivePeerDependencies:
-      - supports-color
-
-  [email protected]:
-    dependencies:
-      '@types/mdast': 4.0.4
-      ccount: 2.0.1
-      devlop: 1.1.0
-      mdast-util-find-and-replace: 3.0.2
-      micromark-util-character: 2.1.1
-
-  [email protected]:
-    dependencies:
-      '@types/mdast': 4.0.4
-      devlop: 1.1.0
-      mdast-util-from-markdown: 2.0.2
-      mdast-util-to-markdown: 2.1.2
-      micromark-util-normalize-identifier: 2.0.1
-    transitivePeerDependencies:
-      - supports-color
-
-  [email protected]:
-    dependencies:
-      '@types/mdast': 4.0.4
-      mdast-util-from-markdown: 2.0.2
-      mdast-util-to-markdown: 2.1.2
-    transitivePeerDependencies:
-      - supports-color
-
-  [email protected]:
-    dependencies:
-      '@types/mdast': 4.0.4
-      devlop: 1.1.0
-      markdown-table: 3.0.4
-      mdast-util-from-markdown: 2.0.2
-      mdast-util-to-markdown: 2.1.2
-    transitivePeerDependencies:
-      - supports-color
-
-  [email protected]:
-    dependencies:
-      '@types/mdast': 4.0.4
-      devlop: 1.1.0
-      mdast-util-from-markdown: 2.0.2
-      mdast-util-to-markdown: 2.1.2
-    transitivePeerDependencies:
-      - supports-color
-
-  [email protected]:
-    dependencies:
-      mdast-util-from-markdown: 2.0.2
-      mdast-util-gfm-autolink-literal: 2.0.1
-      mdast-util-gfm-footnote: 2.1.0
-      mdast-util-gfm-strikethrough: 2.0.0
-      mdast-util-gfm-table: 2.0.0
-      mdast-util-gfm-task-list-item: 2.0.0
-      mdast-util-to-markdown: 2.1.2
-    transitivePeerDependencies:
-      - supports-color
-
-  [email protected]:
-    dependencies:
-      '@types/hast': 3.0.4
-      '@types/mdast': 4.0.4
-      devlop: 1.1.0
-      longest-streak: 3.1.0
-      mdast-util-from-markdown: 2.0.2
-      mdast-util-to-markdown: 2.1.2
-      unist-util-remove-position: 5.0.0
-    transitivePeerDependencies:
-      - supports-color
-
-  [email protected]:
-    dependencies:
-      '@types/estree-jsx': 1.0.5
-      '@types/hast': 3.0.4
-      '@types/mdast': 4.0.4
-      devlop: 1.1.0
-      mdast-util-from-markdown: 2.0.2
-      mdast-util-to-markdown: 2.1.2
-    transitivePeerDependencies:
-      - supports-color
-
-  [email protected]:
-    dependencies:
-      '@types/estree-jsx': 1.0.5
-      '@types/hast': 3.0.4
-      '@types/mdast': 4.0.4
-      '@types/unist': 3.0.3
-      ccount: 2.0.1
-      devlop: 1.1.0
-      mdast-util-from-markdown: 2.0.2
-      mdast-util-to-markdown: 2.1.2
-      parse-entities: 4.0.2
-      stringify-entities: 4.0.4
-      unist-util-stringify-position: 4.0.0
-      vfile-message: 4.0.3
-    transitivePeerDependencies:
-      - supports-color
-
-  [email protected]:
-    dependencies:
-      mdast-util-from-markdown: 2.0.2
-      mdast-util-mdx-expression: 2.0.1
-      mdast-util-mdx-jsx: 3.2.0
-      mdast-util-mdxjs-esm: 2.0.1
-      mdast-util-to-markdown: 2.1.2
-    transitivePeerDependencies:
-      - supports-color
-
-  [email protected]:
-    dependencies:
-      '@types/estree-jsx': 1.0.5
-      '@types/hast': 3.0.4
-      '@types/mdast': 4.0.4
-      devlop: 1.1.0
-      mdast-util-from-markdown: 2.0.2
-      mdast-util-to-markdown: 2.1.2
-    transitivePeerDependencies:
-      - supports-color
-
-  [email protected]:
-    dependencies:
-      '@types/mdast': 4.0.4
-      mdast-util-find-and-replace: 3.0.2
-
-  [email protected]:
-    dependencies:
-      '@types/mdast': 4.0.4
-      unist-util-is: 6.0.1
-
-  [email protected]:
-    dependencies:
-      '@types/hast': 3.0.4
-      '@types/mdast': 4.0.4
-      '@ungap/structured-clone': 1.3.0
-      devlop: 1.1.0
-      micromark-util-sanitize-uri: 2.0.1
-      trim-lines: 3.0.1
-      unist-util-position: 5.0.0
-      unist-util-visit: 5.0.0
-      vfile: 6.0.3
-
-  [email protected]:
-    dependencies:
-      '@types/mdast': 4.0.4
-      '@types/unist': 3.0.3
-      longest-streak: 3.1.0
-      mdast-util-phrasing: 4.1.0
-      mdast-util-to-string: 4.0.0
-      micromark-util-classify-character: 2.0.1
-      micromark-util-decode-string: 2.0.1
-      unist-util-visit: 5.0.0
-      zwitch: 2.0.4
-
-  [email protected]:
-    dependencies:
-      '@types/mdast': 4.0.4
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      get-value: 2.0.6
-      is-extendable: 1.0.1
-      mixin-deep: 1.3.2
-      set-value: 2.0.1
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      '@braintree/sanitize-url': 7.1.1
-      '@iconify/utils': 3.0.2
-      '@mermaid-js/parser': 0.6.3
-      '@types/d3': 7.4.3
-      cytoscape: 3.33.1
-      cytoscape-cose-bilkent: 4.1.0([email protected])
-      cytoscape-fcose: 2.2.0([email protected])
-      d3: 7.9.0
-      d3-sankey: 0.12.3
-      dagre-d3-es: 7.0.13
-      dayjs: 1.11.18
-      dompurify: 3.3.0
-      katex: 0.16.25
-      khroma: 2.1.0
-      lodash-es: 4.17.21
-      marked: 16.4.1
-      roughjs: 4.6.6
-      stylis: 4.3.6
-      ts-dedent: 2.2.0
-      uuid: 11.1.0
-    transitivePeerDependencies:
-      - supports-color
-
-  [email protected]:
-    dependencies:
-      decode-named-character-reference: 1.2.0
-      devlop: 1.1.0
-      micromark-factory-destination: 2.0.1
-      micromark-factory-label: 2.0.1
-      micromark-factory-space: 2.0.1
-      micromark-factory-title: 2.0.1
-      micromark-factory-whitespace: 2.0.1
-      micromark-util-character: 2.1.1
-      micromark-util-chunked: 2.0.1
-      micromark-util-classify-character: 2.0.1
-      micromark-util-html-tag-name: 2.0.1
-      micromark-util-normalize-identifier: 2.0.1
-      micromark-util-resolve-all: 2.0.1
-      micromark-util-subtokenize: 2.1.0
-      micromark-util-symbol: 2.0.1
-      micromark-util-types: 2.0.2
-
-  [email protected]([email protected]):
-    dependencies:
-      get-east-asian-width: 1.4.0
-      micromark-util-character: 2.1.1
-      micromark-util-symbol: 2.0.1
-    optionalDependencies:
-      micromark-util-types: 2.0.2
-
-  [email protected]([email protected])([email protected]):
-    dependencies:
-      devlop: 1.1.0
-      micromark: 4.0.2
-      micromark-extension-cjk-friendly-util: 2.1.1([email protected])
-      micromark-util-chunked: 2.0.1
-      micromark-util-resolve-all: 2.0.1
-      micromark-util-symbol: 2.0.1
-    optionalDependencies:
-      micromark-util-types: 2.0.2
-
-  [email protected]:
-    dependencies:
-      micromark-util-character: 2.1.1
-      micromark-util-sanitize-uri: 2.0.1
-      micromark-util-symbol: 2.0.1
-      micromark-util-types: 2.0.2
-
-  [email protected]:
-    dependencies:
-      devlop: 1.1.0
-      micromark-core-commonmark: 2.0.3
-      micromark-factory-space: 2.0.1
-      micromark-util-character: 2.1.1
-      micromark-util-normalize-identifier: 2.0.1
-      micromark-util-sanitize-uri: 2.0.1
-      micromark-util-symbol: 2.0.1
-      micromark-util-types: 2.0.2
-
-  [email protected]:
-    dependencies:
-      devlop: 1.1.0
-      micromark-util-chunked: 2.0.1
-      micromark-util-classify-character: 2.0.1
-      micromark-util-resolve-all: 2.0.1
-      micromark-util-symbol: 2.0.1
-      micromark-util-types: 2.0.2
-
-  [email protected]:
-    dependencies:
-      devlop: 1.1.0
-      micromark-factory-space: 2.0.1
-      micromark-util-character: 2.1.1
-      micromark-util-symbol: 2.0.1
-      micromark-util-types: 2.0.2
-
-  [email protected]:
-    dependencies:
-      micromark-util-types: 2.0.2
-
-  [email protected]:
-    dependencies:
-      devlop: 1.1.0
-      micromark-factory-space: 2.0.1
-      micromark-util-character: 2.1.1
-      micromark-util-symbol: 2.0.1
-      micromark-util-types: 2.0.2
-
-  [email protected]:
-    dependencies:
-      micromark-extension-gfm-autolink-literal: 2.1.0
-      micromark-extension-gfm-footnote: 2.1.0
-      micromark-extension-gfm-strikethrough: 2.1.0
-      micromark-extension-gfm-table: 2.1.1
-      micromark-extension-gfm-tagfilter: 2.0.0
-      micromark-extension-gfm-task-list-item: 2.1.0
-      micromark-util-combine-extensions: 2.0.1
-      micromark-util-types: 2.0.2
-
-  [email protected]:
-    dependencies:
-      '@types/katex': 0.16.7
-      devlop: 1.1.0
-      katex: 0.16.25
-      micromark-factory-space: 2.0.1
-      micromark-util-character: 2.1.1
-      micromark-util-symbol: 2.0.1
-      micromark-util-types: 2.0.2
-
-  [email protected]:
-    dependencies:
-      '@types/estree': 1.0.8
-      devlop: 1.1.0
-      micromark-factory-mdx-expression: 2.0.3
-      micromark-factory-space: 2.0.1
-      micromark-util-character: 2.1.1
-      micromark-util-events-to-acorn: 2.0.3
-      micromark-util-symbol: 2.0.1
-      micromark-util-types: 2.0.2
-
-  [email protected]:
-    dependencies:
-      '@types/estree': 1.0.8
-      devlop: 1.1.0
-      estree-util-is-identifier-name: 3.0.0
-      micromark-factory-mdx-expression: 2.0.3
-      micromark-factory-space: 2.0.1
-      micromark-util-character: 2.1.1
-      micromark-util-events-to-acorn: 2.0.3
-      micromark-util-symbol: 2.0.1
-      micromark-util-types: 2.0.2
-      vfile-message: 4.0.3
-
-  [email protected]:
-    dependencies:
-      micromark-util-types: 2.0.2
-
-  [email protected]:
-    dependencies:
-      '@types/estree': 1.0.8
-      devlop: 1.1.0
-      micromark-core-commonmark: 2.0.3
-      micromark-util-character: 2.1.1
-      micromark-util-events-to-acorn: 2.0.3
-      micromark-util-symbol: 2.0.1
-      micromark-util-types: 2.0.2
-      unist-util-position-from-estree: 2.0.0
-      vfile-message: 4.0.3
-
-  [email protected]:
-    dependencies:
-      acorn: 8.15.0
-      acorn-jsx: 5.3.2([email protected])
-      micromark-extension-mdx-expression: 3.0.1
-      micromark-extension-mdx-jsx: 3.0.2
-      micromark-extension-mdx-md: 2.0.0
-      micromark-extension-mdxjs-esm: 3.0.0
-      micromark-util-combine-extensions: 2.0.1
-      micromark-util-types: 2.0.2
-
-  [email protected]:
-    dependencies:
-      micromark-util-character: 2.1.1
-      micromark-util-symbol: 2.0.1
-      micromark-util-types: 2.0.2
-
-  [email protected]:
-    dependencies:
-      devlop: 1.1.0
-      micromark-util-character: 2.1.1
-      micromark-util-symbol: 2.0.1
-      micromark-util-types: 2.0.2
-
-  [email protected]:
-    dependencies:
-      '@types/estree': 1.0.8
-      devlop: 1.1.0
-      micromark-factory-space: 2.0.1
-      micromark-util-character: 2.1.1
-      micromark-util-events-to-acorn: 2.0.3
-      micromark-util-symbol: 2.0.1
-      micromark-util-types: 2.0.2
-      unist-util-position-from-estree: 2.0.0
-      vfile-message: 4.0.3
-
-  [email protected]:
-    dependencies:
-      micromark-util-character: 2.1.1
-      micromark-util-types: 2.0.2
-
-  [email protected]:
-    dependencies:
-      micromark-factory-space: 2.0.1
-      micromark-util-character: 2.1.1
-      micromark-util-symbol: 2.0.1
-      micromark-util-types: 2.0.2
-
-  [email protected]:
-    dependencies:
-      micromark-factory-space: 2.0.1
-      micromark-util-character: 2.1.1
-      micromark-util-symbol: 2.0.1
-      micromark-util-types: 2.0.2
-
-  [email protected]:
-    dependencies:
-      micromark-util-symbol: 2.0.1
-      micromark-util-types: 2.0.2
-
-  [email protected]:
-    dependencies:
-      micromark-util-symbol: 2.0.1
-
-  [email protected]:
-    dependencies:
-      micromark-util-character: 2.1.1
-      micromark-util-symbol: 2.0.1
-      micromark-util-types: 2.0.2
-
-  [email protected]:
-    dependencies:
-      micromark-util-chunked: 2.0.1
-      micromark-util-types: 2.0.2
-
-  [email protected]:
-    dependencies:
-      micromark-util-symbol: 2.0.1
-
-  [email protected]:
-    dependencies:
-      decode-named-character-reference: 1.2.0
-      micromark-util-character: 2.1.1
-      micromark-util-decode-numeric-character-reference: 2.0.2
-      micromark-util-symbol: 2.0.1
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      '@types/estree': 1.0.8
-      '@types/unist': 3.0.3
-      devlop: 1.1.0
-      estree-util-visit: 2.0.0
-      micromark-util-symbol: 2.0.1
-      micromark-util-types: 2.0.2
-      vfile-message: 4.0.3
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      micromark-util-symbol: 2.0.1
-
-  [email protected]:
-    dependencies:
-      micromark-util-types: 2.0.2
-
-  [email protected]:
-    dependencies:
-      micromark-util-character: 2.1.1
-      micromark-util-encode: 2.0.1
-      micromark-util-symbol: 2.0.1
-
-  [email protected]:
-    dependencies:
-      devlop: 1.1.0
-      micromark-util-chunked: 2.0.1
-      micromark-util-symbol: 2.0.1
-      micromark-util-types: 2.0.2
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      '@types/debug': 4.1.12
-      debug: 4.4.1
-      decode-named-character-reference: 1.2.0
-      devlop: 1.1.0
-      micromark-core-commonmark: 2.0.3
-      micromark-factory-space: 2.0.1
-      micromark-util-character: 2.1.1
-      micromark-util-chunked: 2.0.1
-      micromark-util-combine-extensions: 2.0.1
-      micromark-util-decode-numeric-character-reference: 2.0.2
-      micromark-util-encode: 2.0.1
-      micromark-util-normalize-identifier: 2.0.1
-      micromark-util-resolve-all: 2.0.1
-      micromark-util-sanitize-uri: 2.0.1
-      micromark-util-subtokenize: 2.1.0
-      micromark-util-symbol: 2.0.1
-      micromark-util-types: 2.0.2
-    transitivePeerDependencies:
-      - supports-color
-
-  [email protected]:
-    dependencies:
-      braces: 3.0.3
-      picomatch: 2.3.1
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      mime-db: 1.54.0
-
-  [email protected]:
-    dependencies:
-      brace-expansion: 1.1.12
-
-  [email protected]:
-    dependencies:
-      brace-expansion: 2.0.2
-
-  [email protected]:
-    dependencies:
-      brace-expansion: 2.0.2
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      for-in: 1.0.2
-      is-extendable: 1.0.1
-
-  [email protected]:
-    dependencies:
-      acorn: 8.15.0
-      pathe: 2.0.3
-      pkg-types: 1.3.1
-      ufo: 1.6.1
-
-  [email protected]:
-    dependencies:
-      motion-utils: 12.23.6
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      node-gyp-build-optional-packages: 5.2.2
-    optionalDependencies:
-      '@msgpackr-extract/msgpackr-extract-darwin-arm64': 3.0.3
-      '@msgpackr-extract/msgpackr-extract-darwin-x64': 3.0.3
-      '@msgpackr-extract/msgpackr-extract-linux-arm': 3.0.3
-      '@msgpackr-extract/msgpackr-extract-linux-arm64': 3.0.3
-      '@msgpackr-extract/msgpackr-extract-linux-x64': 3.0.3
-      '@msgpackr-extract/msgpackr-extract-win32-x64': 3.0.3
-    optional: true
-
-  [email protected]:
-    optionalDependencies:
-      msgpackr-extract: 3.0.3
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]([email protected](@babel/[email protected])([email protected]([email protected]))([email protected]))([email protected]):
-    dependencies:
-      '@formatjs/intl-localematcher': 0.5.10
-      negotiator: 1.0.0
-      next: 15.5.6(@babel/[email protected])([email protected]([email protected]))([email protected])
-      react: 19.2.0
-      use-intl: 3.26.5([email protected])
-
-  [email protected]([email protected]([email protected]))([email protected]):
-    dependencies:
-      react: 19.2.0
-      react-dom: 19.2.0([email protected])
-
-  [email protected](@babel/[email protected])([email protected]([email protected]))([email protected]):
-    dependencies:
-      '@next/env': 15.5.6
-      '@swc/helpers': 0.5.15
-      caniuse-lite: 1.0.30001733
-      postcss: 8.4.31
-      react: 19.2.0
-      react-dom: 19.2.0([email protected])
-      styled-jsx: 5.1.6(@babel/[email protected])([email protected])
-    optionalDependencies:
-      '@next/swc-darwin-arm64': 15.5.6
-      '@next/swc-darwin-x64': 15.5.6
-      '@next/swc-linux-arm64-gnu': 15.5.6
-      '@next/swc-linux-arm64-musl': 15.5.6
-      '@next/swc-linux-x64-gnu': 15.5.6
-      '@next/swc-linux-x64-musl': 15.5.6
-      '@next/swc-win32-arm64-msvc': 15.5.6
-      '@next/swc-win32-x64-msvc': 15.5.6
-      sharp: 0.34.3
-    transitivePeerDependencies:
-      - '@babel/core'
-      - babel-plugin-macros
-
-  [email protected]:
-    dependencies:
-      detect-libc: 2.0.4
-    optional: true
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      call-bind: 1.0.8
-      call-bound: 1.0.4
-      define-properties: 1.2.1
-      es-object-atoms: 1.1.1
-      has-symbols: 1.1.0
-      object-keys: 1.1.1
-
-  [email protected]:
-    dependencies:
-      call-bind: 1.0.8
-      call-bound: 1.0.4
-      define-properties: 1.2.1
-      es-object-atoms: 1.1.1
-
-  [email protected]:
-    dependencies:
-      call-bind: 1.0.8
-      define-properties: 1.2.1
-      es-abstract: 1.24.0
-      es-object-atoms: 1.1.1
-
-  [email protected]:
-    dependencies:
-      call-bind: 1.0.8
-      define-properties: 1.2.1
-      es-abstract: 1.24.0
-
-  [email protected]:
-    dependencies:
-      call-bind: 1.0.8
-      call-bound: 1.0.4
-      define-properties: 1.2.1
-      es-object-atoms: 1.1.1
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      ee-first: 1.1.1
-
-  [email protected]:
-    dependencies:
-      wrappy: 1.0.2
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      oniguruma-parser: 0.12.1
-      regex: 6.0.1
-      regex-recursion: 6.0.2
-
-  [email protected]:
-    dependencies:
-      yaml: 2.8.1
-
-  [email protected]:
-    dependencies:
-      deep-is: 0.1.4
-      fast-levenshtein: 2.0.6
-      levn: 0.4.1
-      prelude-ls: 1.2.1
-      type-check: 0.4.0
-      word-wrap: 1.2.5
-
-  [email protected]:
-    dependencies:
-      get-intrinsic: 1.3.0
-      object-keys: 1.1.1
-      safe-push-apply: 1.0.0
-
-  [email protected]:
-    dependencies:
-      yocto-queue: 0.1.0
-
-  [email protected]:
-    dependencies:
-      p-limit: 3.1.0
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      callsites: 3.1.0
-
-  [email protected]:
-    dependencies:
-      '@types/unist': 2.0.11
-      character-entities-legacy: 3.0.0
-      character-reference-invalid: 2.0.1
-      decode-named-character-reference: 1.2.0
-      is-alphanumerical: 2.0.1
-      is-decimal: 2.0.1
-      is-hexadecimal: 2.0.1
-
-  [email protected]:
-    dependencies:
-      '@babel/code-frame': 7.27.1
-      error-ex: 1.3.4
-      json-parse-even-better-errors: 2.3.1
-      lines-and-columns: 1.2.4
-
-  [email protected]:
-    dependencies:
-      entities: 6.0.1
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]:
-    optional: true
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      pg-int8: 1.0.1
-      postgres-array: 2.0.0
-      postgres-bytea: 1.0.0
-      postgres-date: 1.0.7
-      postgres-interval: 1.2.0
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      split2: 4.2.0
-
-  [email protected]:
-    dependencies:
-      colorette: 2.0.20
-      dateformat: 4.6.3
-      fast-copy: 3.0.2
-      fast-safe-stringify: 2.1.1
-      help-me: 5.0.0
-      joycon: 3.1.1
-      minimist: 1.2.8
-      on-exit-leak-free: 2.1.2
-      pino-abstract-transport: 2.0.0
-      pump: 3.0.3
-      secure-json-parse: 4.1.0
-      sonic-boom: 4.2.0
-      strip-json-comments: 5.0.3
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      '@pinojs/redact': 0.4.0
-      atomic-sleep: 1.0.0
-      on-exit-leak-free: 2.1.2
-      pino-abstract-transport: 2.0.0
-      pino-std-serializers: 7.0.0
-      process-warning: 5.0.0
-      quick-format-unescaped: 4.0.4
-      real-require: 0.2.0
-      safe-stable-stringify: 2.5.0
-      sonic-boom: 4.2.0
-      thread-stream: 3.1.0
-
-  [email protected]:
-    dependencies:
-      confbox: 0.1.8
-      mlly: 1.8.0
-      pathe: 2.0.3
-
-  [email protected]:
-    dependencies:
-      confbox: 0.2.2
-      exsolve: 1.0.7
-      pathe: 2.0.3
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      path-data-parser: 0.1.0
-      points-on-curve: 0.2.0
-
-  [email protected]:
-    dependencies:
-      '@babel/runtime': 7.28.4
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      nanoid: 3.3.11
-      picocolors: 1.1.1
-      source-map-js: 1.2.1
-
-  [email protected]:
-    dependencies:
-      nanoid: 3.3.11
-      picocolors: 1.1.1
-      source-map-js: 1.2.1
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      xtend: 4.0.2
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      loose-envify: 1.4.0
-      object-assign: 4.1.1
-      react-is: 16.13.1
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      forwarded: 0.2.0
-      ipaddr.js: 1.9.1
-
-  [email protected]:
-    dependencies:
-      end-of-stream: 1.4.5
-      once: 1.4.0
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      side-channel: 1.1.0
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      decode-uri-component: 0.4.1
-      filter-obj: 5.1.0
-      split-on-first: 3.0.0
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      performance-now: 2.1.0
-    optional: true
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      bytes: 3.1.2
-      http-errors: 2.0.0
-      iconv-lite: 0.7.0
-      unpipe: 1.0.0
-
-  [email protected]([email protected]([email protected]))([email protected]):
-    dependencies:
-      '@babel/runtime': 7.28.4
-      classnames: 2.5.1
-      rc-select: 14.16.8([email protected]([email protected]))([email protected])
-      rc-tree: 5.13.1([email protected]([email protected]))([email protected])
-      rc-util: 5.44.4([email protected]([email protected]))([email protected])
-      react: 19.2.0
-      react-dom: 19.2.0([email protected])
-
-  [email protected]([email protected]([email protected]))([email protected]):
-    dependencies:
-      '@babel/runtime': 7.28.4
-      classnames: 2.5.1
-      rc-util: 5.44.4([email protected]([email protected]))([email protected])
-      react: 19.2.0
-      react-dom: 19.2.0([email protected])
-
-  [email protected]([email protected]([email protected]))([email protected]):
-    dependencies:
-      '@babel/runtime': 7.28.4
-      classnames: 2.5.1
-      rc-motion: 2.9.5([email protected]([email protected]))([email protected])
-      rc-util: 5.44.4([email protected]([email protected]))([email protected])
-      react: 19.2.0
-      react-dom: 19.2.0([email protected])
-
-  [email protected]([email protected]([email protected]))([email protected]):
-    dependencies:
-      '@babel/runtime': 7.28.4
-      classnames: 2.5.1
-      rc-motion: 2.9.5([email protected]([email protected]))([email protected])
-      rc-util: 5.44.4([email protected]([email protected]))([email protected])
-      react: 19.2.0
-      react-dom: 19.2.0([email protected])
-
-  [email protected]([email protected]([email protected]))([email protected]):
-    dependencies:
-      '@babel/runtime': 7.28.4
-      '@rc-component/portal': 1.1.2([email protected]([email protected]))([email protected])
-      classnames: 2.5.1
-      rc-motion: 2.9.5([email protected]([email protected]))([email protected])
-      rc-util: 5.44.4([email protected]([email protected]))([email protected])
-      react: 19.2.0
-      react-dom: 19.2.0([email protected])
-
-  [email protected]([email protected]([email protected]))([email protected]):
-    dependencies:
-      '@babel/runtime': 7.28.4
-      '@rc-component/portal': 1.1.2([email protected]([email protected]))([email protected])
-      classnames: 2.5.1
-      rc-motion: 2.9.5([email protected]([email protected]))([email protected])
-      rc-util: 5.44.4([email protected]([email protected]))([email protected])
-      react: 19.2.0
-      react-dom: 19.2.0([email protected])
-
-  [email protected]([email protected]([email protected]))([email protected]):
-    dependencies:
-      '@babel/runtime': 7.28.4
-      '@rc-component/trigger': 2.3.0([email protected]([email protected]))([email protected])
-      classnames: 2.5.1
-      rc-util: 5.44.4([email protected]([email protected]))([email protected])
-      react: 19.2.0
-      react-dom: 19.2.0([email protected])
-
-  [email protected]([email protected]([email protected]))([email protected]):
-    dependencies:
-      '@babel/runtime': 7.28.4
-      '@rc-component/async-validator': 5.0.4
-      rc-util: 5.44.4([email protected]([email protected]))([email protected])
-      react: 19.2.0
-      react-dom: 19.2.0([email protected])
-
-  [email protected]([email protected]([email protected]))([email protected]):
-    dependencies:
-      '@babel/runtime': 7.28.4
-      classnames: 2.5.1
-      react: 19.2.0
-      react-dom: 19.2.0([email protected])
-
-  [email protected]([email protected]([email protected]))([email protected]):
-    dependencies:
-      '@babel/runtime': 7.28.4
-      '@rc-component/portal': 1.1.2([email protected]([email protected]))([email protected])
-      classnames: 2.5.1
-      rc-dialog: 9.6.0([email protected]([email protected]))([email protected])
-      rc-motion: 2.9.5([email protected]([email protected]))([email protected])
-      rc-util: 5.44.4([email protected]([email protected]))([email protected])
-      react: 19.2.0
-      react-dom: 19.2.0([email protected])
-
-  [email protected]([email protected]([email protected]))([email protected]):
-    dependencies:
-      '@babel/runtime': 7.28.4
-      '@rc-component/mini-decimal': 1.1.0
-      classnames: 2.5.1
-      rc-input: 1.8.0([email protected]([email protected]))([email protected])
-      rc-util: 5.44.4([email protected]([email protected]))([email protected])
-      react: 19.2.0
-      react-dom: 19.2.0([email protected])
-
-  [email protected]([email protected]([email protected]))([email protected]):
-    dependencies:
-      '@babel/runtime': 7.28.4
-      classnames: 2.5.1
-      rc-util: 5.44.4([email protected]([email protected]))([email protected])
-      react: 19.2.0
-      react-dom: 19.2.0([email protected])
-
-  [email protected]([email protected]([email protected]))([email protected]):
-    dependencies:
-      '@babel/runtime': 7.28.4
-      '@rc-component/trigger': 2.3.0([email protected]([email protected]))([email protected])
-      classnames: 2.5.1
-      rc-input: 1.8.0([email protected]([email protected]))([email protected])
-      rc-menu: 9.16.1([email protected]([email protected]))([email protected])
-      rc-textarea: 1.10.2([email protected]([email protected]))([email protected])
-      rc-util: 5.44.4([email protected]([email protected]))([email protected])
-      react: 19.2.0
-      react-dom: 19.2.0([email protected])
-
-  [email protected]([email protected]([email protected]))([email protected]):
-    dependencies:
-      '@babel/runtime': 7.28.4
-      '@rc-component/trigger': 2.3.0([email protected]([email protected]))([email protected])
-      classnames: 2.5.1
-      rc-motion: 2.9.5([email protected]([email protected]))([email protected])
-      rc-overflow: 1.5.0([email protected]([email protected]))([email protected])
-      rc-util: 5.44.4([email protected]([email protected]))([email protected])
-      react: 19.2.0
-      react-dom: 19.2.0([email protected])
-
-  [email protected]([email protected]([email protected]))([email protected]):
-    dependencies:
-      '@babel/runtime': 7.28.4
-      classnames: 2.5.1
-      rc-util: 5.44.4([email protected]([email protected]))([email protected])
-      react: 19.2.0
-      react-dom: 19.2.0([email protected])
-
-  [email protected]([email protected]([email protected]))([email protected]):
-    dependencies:
-      '@babel/runtime': 7.28.4
-      classnames: 2.5.1
-      rc-motion: 2.9.5([email protected]([email protected]))([email protected])
-      rc-util: 5.44.4([email protected]([email protected]))([email protected])
-      react: 19.2.0
-      react-dom: 19.2.0([email protected])
-
-  [email protected]([email protected]([email protected]))([email protected]):
-    dependencies:
-      '@babel/runtime': 7.28.4
-      classnames: 2.5.1
-      rc-resize-observer: 1.4.3([email protected]([email protected]))([email protected])
-      rc-util: 5.44.4([email protected]([email protected]))([email protected])
-      react: 19.2.0
-      react-dom: 19.2.0([email protected])
-
-  [email protected]([email protected]([email protected]))([email protected]):
-    dependencies:
-      '@babel/runtime': 7.28.4
-      classnames: 2.5.1
-      rc-util: 5.44.4([email protected]([email protected]))([email protected])
-      react: 19.2.0
-      react-dom: 19.2.0([email protected])
-
-  [email protected]([email protected])([email protected])([email protected])([email protected]([email protected]))([email protected]):
-    dependencies:
-      '@babel/runtime': 7.28.4
-      '@rc-component/trigger': 2.3.0([email protected]([email protected]))([email protected])
-      classnames: 2.5.1
-      rc-overflow: 1.5.0([email protected]([email protected]))([email protected])
-      rc-resize-observer: 1.4.3([email protected]([email protected]))([email protected])
-      rc-util: 5.44.4([email protected]([email protected]))([email protected])
-      react: 19.2.0
-      react-dom: 19.2.0([email protected])
-    optionalDependencies:
-      date-fns: 4.1.0
-      dayjs: 1.11.18
-      luxon: 3.7.2
-
-  [email protected]([email protected]([email protected]))([email protected]):
-    dependencies:
-      '@babel/runtime': 7.28.4
-      classnames: 2.5.1
-      rc-util: 5.44.4([email protected]([email protected]))([email protected])
-      react: 19.2.0
-      react-dom: 19.2.0([email protected])
-
-  [email protected]([email protected]([email protected]))([email protected]):
-    dependencies:
-      '@babel/runtime': 7.28.4
-      classnames: 2.5.1
-      rc-util: 5.44.4([email protected]([email protected]))([email protected])
-      react: 19.2.0
-      react-dom: 19.2.0([email protected])
-
-  [email protected]([email protected]([email protected]))([email protected]):
-    dependencies:
-      '@babel/runtime': 7.28.4
-      classnames: 2.5.1
-      rc-util: 5.44.4([email protected]([email protected]))([email protected])
-      react: 19.2.0
-      react-dom: 19.2.0([email protected])
-      resize-observer-polyfill: 1.5.1
-
-  [email protected]([email protected]([email protected]))([email protected]):
-    dependencies:
-      '@babel/runtime': 7.28.4
-      classnames: 2.5.1
-      rc-motion: 2.9.5([email protected]([email protected]))([email protected])
-      rc-util: 5.44.4([email protected]([email protected]))([email protected])
-      react: 19.2.0
-      react-dom: 19.2.0([email protected])
-
-  [email protected]([email protected]([email protected]))([email protected]):
-    dependencies:
-      '@babel/runtime': 7.28.4
-      '@rc-component/trigger': 2.3.0([email protected]([email protected]))([email protected])
-      classnames: 2.5.1
-      rc-motion: 2.9.5([email protected]([email protected]))([email protected])
-      rc-overflow: 1.5.0([email protected]([email protected]))([email protected])
-      rc-util: 5.44.4([email protected]([email protected]))([email protected])
-      rc-virtual-list: 3.19.2([email protected]([email protected]))([email protected])
-      react: 19.2.0
-      react-dom: 19.2.0([email protected])
-
-  [email protected]([email protected]([email protected]))([email protected]):
-    dependencies:
-      '@babel/runtime': 7.28.4
-      classnames: 2.5.1
-      rc-util: 5.44.4([email protected]([email protected]))([email protected])
-      react: 19.2.0
-      react-dom: 19.2.0([email protected])
-
-  [email protected]([email protected]([email protected]))([email protected]):
-    dependencies:
-      '@babel/runtime': 7.28.4
-      classnames: 2.5.1
-      rc-util: 5.44.4([email protected]([email protected]))([email protected])
-      react: 19.2.0
-      react-dom: 19.2.0([email protected])
-
-  [email protected]([email protected]([email protected]))([email protected]):
-    dependencies:
-      '@babel/runtime': 7.28.4
-      classnames: 2.5.1
-      rc-util: 5.44.4([email protected]([email protected]))([email protected])
-      react: 19.2.0
-      react-dom: 19.2.0([email protected])
-
-  [email protected]([email protected]([email protected]))([email protected]):
-    dependencies:
-      '@babel/runtime': 7.28.4
-      '@rc-component/context': 1.4.0([email protected]([email protected]))([email protected])
-      classnames: 2.5.1
-      rc-resize-observer: 1.4.3([email protected]([email protected]))([email protected])
-      rc-util: 5.44.4([email protected]([email protected]))([email protected])
-      rc-virtual-list: 3.19.2([email protected]([email protected]))([email protected])
-      react: 19.2.0
-      react-dom: 19.2.0([email protected])
-
-  [email protected]([email protected]([email protected]))([email protected]):
-    dependencies:
-      '@babel/runtime': 7.28.4
-      classnames: 2.5.1
-      rc-dropdown: 4.2.1([email protected]([email protected]))([email protected])
-      rc-menu: 9.16.1([email protected]([email protected]))([email protected])
-      rc-motion: 2.9.5([email protected]([email protected]))([email protected])
-      rc-resize-observer: 1.4.3([email protected]([email protected]))([email protected])
-      rc-util: 5.44.4([email protected]([email protected]))([email protected])
-      react: 19.2.0
-      react-dom: 19.2.0([email protected])
-
-  [email protected]([email protected]([email protected]))([email protected]):
-    dependencies:
-      '@babel/runtime': 7.28.4
-      classnames: 2.5.1
-      rc-input: 1.8.0([email protected]([email protected]))([email protected])
-      rc-resize-observer: 1.4.3([email protected]([email protected]))([email protected])
-      rc-util: 5.44.4([email protected]([email protected]))([email protected])
-      react: 19.2.0
-      react-dom: 19.2.0([email protected])
-
-  [email protected]([email protected]([email protected]))([email protected]):
-    dependencies:
-      '@babel/runtime': 7.28.4
-      '@rc-component/trigger': 2.3.0([email protected]([email protected]))([email protected])
-      classnames: 2.5.1
-      rc-util: 5.44.4([email protected]([email protected]))([email protected])
-      react: 19.2.0
-      react-dom: 19.2.0([email protected])
-
-  [email protected]([email protected]([email protected]))([email protected]):
-    dependencies:
-      '@babel/runtime': 7.28.4
-      classnames: 2.5.1
-      rc-select: 14.16.8([email protected]([email protected]))([email protected])
-      rc-tree: 5.13.1([email protected]([email protected]))([email protected])
-      rc-util: 5.44.4([email protected]([email protected]))([email protected])
-      react: 19.2.0
-      react-dom: 19.2.0([email protected])
-
-  [email protected]([email protected]([email protected]))([email protected]):
-    dependencies:
-      '@babel/runtime': 7.28.4
-      classnames: 2.5.1
-      rc-motion: 2.9.5([email protected]([email protected]))([email protected])
-      rc-util: 5.44.4([email protected]([email protected]))([email protected])
-      rc-virtual-list: 3.19.2([email protected]([email protected]))([email protected])
-      react: 19.2.0
-      react-dom: 19.2.0([email protected])
-
-  [email protected]([email protected]([email protected]))([email protected]):
-    dependencies:
-      '@babel/runtime': 7.28.4
-      classnames: 2.5.1
-      rc-util: 5.44.4([email protected]([email protected]))([email protected])
-      react: 19.2.0
-      react-dom: 19.2.0([email protected])
-
-  [email protected]([email protected]([email protected]))([email protected]):
-    dependencies:
-      '@babel/runtime': 7.28.4
-      react: 19.2.0
-      react-dom: 19.2.0([email protected])
-      react-is: 18.3.1
-
-  [email protected]([email protected]([email protected]))([email protected]):
-    dependencies:
-      '@babel/runtime': 7.28.4
-      classnames: 2.5.1
-      rc-resize-observer: 1.4.3([email protected]([email protected]))([email protected])
-      rc-util: 5.44.4([email protected]([email protected]))([email protected])
-      react: 19.2.0
-      react-dom: 19.2.0([email protected])
-
-  [email protected]([email protected]([email protected]))([email protected]):
-    dependencies:
-      react: 19.2.0
-      react-dom: 19.2.0([email protected])
-
-  [email protected](@babel/[email protected])([email protected]([email protected]))([email protected]):
-    dependencies:
-      '@babel/plugin-transform-runtime': 7.28.5(@babel/[email protected])
-      '@babel/runtime': 7.28.4
-      prop-types: 15.8.1
-      react: 19.2.0
-      react-dom: 19.2.0([email protected])
-    transitivePeerDependencies:
-      - '@babel/core'
-      - supports-color
-
-  [email protected]([email protected]([email protected]))([email protected]):
-    dependencies:
-      react: 19.2.0
-      react-dom: 19.2.0([email protected])
-
-  [email protected]([email protected]):
-    dependencies:
-      react: 19.2.0
-      scheduler: 0.27.0
-
-  [email protected]([email protected]([email protected]))([email protected]):
-    dependencies:
-      clsx: 1.2.1
-      prop-types: 15.8.1
-      react: 19.2.0
-      react-dom: 19.2.0([email protected])
-
-  [email protected]([email protected]):
-    dependencies:
-      attr-accept: 2.2.5
-      file-selector: 0.5.0
-      prop-types: 15.8.1
-      react: 19.2.0
-
-  [email protected]([email protected]):
-    dependencies:
-      '@babel/runtime': 7.28.4
-      react: 19.2.0
-
-  [email protected]: {}
-
-  [email protected]([email protected]):
-    dependencies:
-      react: 19.2.0
-
-  [email protected]([email protected]([email protected]))([email protected]):
-    dependencies:
-      react: 19.2.0
-      react-dom: 19.2.0([email protected])
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]([email protected]):
-    dependencies:
-      '@babel/runtime': 7.28.4
-      '@emotion/css': 11.13.5
-      react: 19.2.0
-    transitivePeerDependencies:
-      - supports-color
-
-  [email protected]([email protected]):
-    dependencies:
-      '@babel/runtime': 7.28.4
-      '@emotion/css': 11.13.5
-      react: 19.2.0
-    transitivePeerDependencies:
-      - supports-color
-
-  [email protected](@types/[email protected])([email protected]):
-    dependencies:
-      '@types/hast': 3.0.4
-      '@types/mdast': 4.0.4
-      '@types/react': 19.2.2
-      devlop: 1.1.0
-      hast-util-to-jsx-runtime: 2.3.6
-      html-url-attributes: 3.0.1
-      mdast-util-to-hast: 13.2.0
-      react: 19.2.0
-      remark-parse: 11.0.0
-      remark-rehype: 11.1.2
-      unified: 11.0.5
-      unist-util-visit: 5.0.0
-      vfile: 6.0.3
-    transitivePeerDependencies:
-      - supports-color
-
-  [email protected]([email protected]):
-    optionalDependencies:
-      react: 19.2.0
-
-  [email protected](@types/[email protected])([email protected]):
-    dependencies:
-      react: 19.2.0
-      react-style-singleton: 2.2.3(@types/[email protected])([email protected])
-      tslib: 2.8.1
-    optionalDependencies:
-      '@types/react': 19.2.2
-
-  [email protected](@types/[email protected])([email protected]):
-    dependencies:
-      react: 19.2.0
-      react-remove-scroll-bar: 2.3.8(@types/[email protected])([email protected])
-      react-style-singleton: 2.2.3(@types/[email protected])([email protected])
-      tslib: 2.8.1
-      use-callback-ref: 1.3.3(@types/[email protected])([email protected])
-      use-sidecar: 1.1.3(@types/[email protected])([email protected])
-    optionalDependencies:
-      '@types/react': 19.2.2
-
-  [email protected]([email protected]([email protected]))([email protected]):
-    dependencies:
-      re-resizable: 6.11.2([email protected]([email protected]))([email protected])
-      react: 19.2.0
-      react-dom: 19.2.0([email protected])
-      react-draggable: 4.4.6([email protected]([email protected]))([email protected])
-      tslib: 2.6.2
-
-  [email protected]([email protected]([email protected]))([email protected]):
-    dependencies:
-      fast-equals: 5.3.0
-      prop-types: 15.8.1
-      react: 19.2.0
-      react-dom: 19.2.0([email protected])
-      react-transition-group: 4.4.5([email protected]([email protected]))([email protected])
-
-  [email protected](@types/[email protected])([email protected]):
-    dependencies:
-      get-nonce: 1.0.1
-      react: 19.2.0
-      tslib: 2.8.1
-    optionalDependencies:
-      '@types/react': 19.2.2
-
-  [email protected]([email protected]([email protected]))([email protected]):
-    dependencies:
-      '@babel/runtime': 7.28.4
-      dom-helpers: 5.2.1
-      loose-envify: 1.4.0
-      prop-types: 15.8.1
-      react: 19.2.0
-      react-dom: 19.2.0([email protected])
-
-  [email protected]([email protected]([email protected]))([email protected]):
-    dependencies:
-      react: 19.2.0
-      react-dom: 19.2.0([email protected])
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      decimal.js-light: 2.5.1
-
-  [email protected]([email protected]([email protected]))([email protected]):
-    dependencies:
-      clsx: 2.1.1
-      eventemitter3: 4.0.7
-      lodash: 4.17.21
-      react: 19.2.0
-      react-dom: 19.2.0([email protected])
-      react-is: 18.3.1
-      react-smooth: 4.0.4([email protected]([email protected]))([email protected])
-      recharts-scale: 0.4.5
-      tiny-invariant: 1.3.3
-      victory-vendor: 36.9.2
-
-  [email protected]:
-    dependencies:
-      '@types/estree': 1.0.8
-      estree-util-build-jsx: 3.0.1
-      vfile: 6.0.3
-
-  [email protected]([email protected]):
-    dependencies:
-      acorn: 8.15.0
-      acorn-jsx: 5.3.2([email protected])
-      estree-util-to-js: 2.0.0
-      recma-parse: 1.0.0
-      recma-stringify: 1.0.0
-      unified: 11.0.5
-
-  [email protected]:
-    dependencies:
-      '@types/estree': 1.0.8
-      esast-util-from-js: 2.0.1
-      unified: 11.0.5
-      vfile: 6.0.3
-
-  [email protected]:
-    dependencies:
-      '@types/estree': 1.0.8
-      estree-util-to-js: 2.0.0
-      unified: 11.0.5
-      vfile: 6.0.3
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      lodash: 4.17.21
-
-  [email protected]:
-    dependencies:
-      redis-errors: 1.2.0
-
-  [email protected]:
-    dependencies:
-      call-bind: 1.0.8
-      define-properties: 1.2.1
-      es-abstract: 1.24.0
-      es-errors: 1.3.0
-      es-object-atoms: 1.1.1
-      get-intrinsic: 1.3.0
-      get-proto: 1.0.1
-      which-builtin-type: 1.2.1
-
-  [email protected]:
-    optional: true
-
-  [email protected]:
-    dependencies:
-      regex-utilities: 2.3.0
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      regex-utilities: 2.3.0
-
-  [email protected]:
-    dependencies:
-      call-bind: 1.0.8
-      define-properties: 1.2.1
-      es-errors: 1.3.0
-      get-proto: 1.0.1
-      gopd: 1.2.0
-      set-function-name: 2.0.2
-
-  [email protected]:
-    dependencies:
-      '@primer/octicons': 19.19.0
-      hast-util-from-html: 2.0.3
-      hast-util-is-element: 3.0.0
-      unist-util-visit: 5.0.0
-
-  [email protected]:
-    dependencies:
-      '@types/hast': 3.0.4
-      '@types/katex': 0.16.7
-      hast-util-from-html-isomorphic: 2.0.0
-      hast-util-to-text: 4.0.2
-      katex: 0.16.25
-      unist-util-visit-parents: 6.0.2
-      vfile: 6.0.3
-
-  [email protected]:
-    dependencies:
-      '@types/hast': 3.0.4
-      hast-util-raw: 9.1.0
-      vfile: 6.0.3
-
-  [email protected]:
-    dependencies:
-      '@types/estree': 1.0.8
-      '@types/hast': 3.0.4
-      hast-util-to-estree: 3.1.3
-    transitivePeerDependencies:
-      - supports-color
-
-  [email protected]:
-    dependencies:
-      '@types/mdast': 4.0.4
-      mdast-util-newline-to-break: 2.0.0
-      unified: 11.0.5
-
-  [email protected](@types/[email protected])([email protected])([email protected])([email protected]):
-    dependencies:
-      micromark-extension-cjk-friendly: 1.2.3([email protected])([email protected])
-      unified: 11.0.5
-    optionalDependencies:
-      '@types/mdast': 4.0.4
-    transitivePeerDependencies:
-      - micromark
-      - micromark-util-types
-
-  [email protected]:
-    dependencies:
-      '@types/mdast': 4.0.4
-      mdast-util-gfm: 3.1.0
-      micromark-extension-gfm: 3.0.0
-      remark-parse: 11.0.0
-      remark-stringify: 11.0.0
-      unified: 11.0.5
-    transitivePeerDependencies:
-      - supports-color
-
-  [email protected]:
-    dependencies:
-      '@types/mdast': 4.0.4
-      mdast-util-find-and-replace: 3.0.2
-      mdast-util-to-string: 4.0.0
-      to-vfile: 8.0.0
-      unist-util-visit: 5.0.0
-      vfile: 6.0.3
-
-  [email protected]:
-    dependencies:
-      '@types/mdast': 4.0.4
-      mdast-util-math: 3.0.0
-      micromark-extension-math: 3.1.0
-      unified: 11.0.5
-    transitivePeerDependencies:
-      - supports-color
-
-  [email protected]:
-    dependencies:
-      mdast-util-mdx: 3.0.0
-      micromark-extension-mdxjs: 3.0.0
-    transitivePeerDependencies:
-      - supports-color
-
-  [email protected]:
-    dependencies:
-      '@types/mdast': 4.0.4
-      mdast-util-from-markdown: 2.0.2
-      micromark-util-types: 2.0.2
-      unified: 11.0.5
-    transitivePeerDependencies:
-      - supports-color
-
-  [email protected]:
-    dependencies:
-      '@types/hast': 3.0.4
-      '@types/mdast': 4.0.4
-      mdast-util-to-hast: 13.2.0
-      unified: 11.0.5
-      vfile: 6.0.3
-
-  [email protected]:
-    dependencies:
-      '@types/mdast': 4.0.4
-      mdast-util-to-markdown: 2.1.2
-      unified: 11.0.5
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      is-core-module: 2.16.1
-      path-parse: 1.0.7
-      supports-preserve-symlinks-flag: 1.0.0
-
-  [email protected]:
-    dependencies:
-      is-core-module: 2.16.1
-      path-parse: 1.0.7
-      supports-preserve-symlinks-flag: 1.0.0
-
-  [email protected]: {}
-
-  [email protected]:
-    optional: true
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      hachure-fill: 0.5.2
-      path-data-parser: 0.1.0
-      points-on-curve: 0.2.0
-      points-on-path: 0.2.1
-
-  [email protected]:
-    dependencies:
-      debug: 4.4.1
-      depd: 2.0.0
-      is-promise: 4.0.0
-      parseurl: 1.3.3
-      path-to-regexp: 8.3.0
-    transitivePeerDependencies:
-      - supports-color
-
-  [email protected]:
-    dependencies:
-      queue-microtask: 1.2.3
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      call-bind: 1.0.8
-      call-bound: 1.0.4
-      get-intrinsic: 1.3.0
-      has-symbols: 1.1.0
-      isarray: 2.0.5
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      es-errors: 1.3.0
-      isarray: 2.0.5
-
-  [email protected]:
-    dependencies:
-      call-bound: 1.0.4
-      es-errors: 1.3.0
-      is-regex: 1.2.1
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      compute-scroll-into-view: 3.1.1
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      debug: 4.4.1
-      encodeurl: 2.0.0
-      escape-html: 1.0.3
-      etag: 1.8.1
-      fresh: 2.0.0
-      http-errors: 2.0.0
-      mime-types: 3.0.1
-      ms: 2.1.3
-      on-finished: 2.4.1
-      range-parser: 1.2.1
-      statuses: 2.0.2
-    transitivePeerDependencies:
-      - supports-color
-
-  [email protected]:
-    dependencies:
-      encodeurl: 2.0.0
-      escape-html: 1.0.3
-      parseurl: 1.3.3
-      send: 1.2.0
-    transitivePeerDependencies:
-      - supports-color
-
-  [email protected]:
-    dependencies:
-      define-data-property: 1.1.4
-      es-errors: 1.3.0
-      function-bind: 1.1.2
-      get-intrinsic: 1.3.0
-      gopd: 1.2.0
-      has-property-descriptors: 1.0.2
-
-  [email protected]:
-    dependencies:
-      define-data-property: 1.1.4
-      es-errors: 1.3.0
-      functions-have-names: 1.2.3
-      has-property-descriptors: 1.0.2
-
-  [email protected]:
-    dependencies:
-      dunder-proto: 1.0.1
-      es-errors: 1.3.0
-      es-object-atoms: 1.1.1
-
-  [email protected]:
-    dependencies:
-      extend-shallow: 2.0.1
-      is-extendable: 0.1.1
-      is-plain-object: 2.0.4
-      split-string: 3.1.0
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      color: 4.2.3
-      detect-libc: 2.0.4
-      semver: 7.7.2
-    optionalDependencies:
-      '@img/sharp-darwin-arm64': 0.34.3
-      '@img/sharp-darwin-x64': 0.34.3
-      '@img/sharp-libvips-darwin-arm64': 1.2.0
-      '@img/sharp-libvips-darwin-x64': 1.2.0
-      '@img/sharp-libvips-linux-arm': 1.2.0
-      '@img/sharp-libvips-linux-arm64': 1.2.0
-      '@img/sharp-libvips-linux-ppc64': 1.2.0
-      '@img/sharp-libvips-linux-s390x': 1.2.0
-      '@img/sharp-libvips-linux-x64': 1.2.0
-      '@img/sharp-libvips-linuxmusl-arm64': 1.2.0
-      '@img/sharp-libvips-linuxmusl-x64': 1.2.0
-      '@img/sharp-linux-arm': 0.34.3
-      '@img/sharp-linux-arm64': 0.34.3
-      '@img/sharp-linux-ppc64': 0.34.3
-      '@img/sharp-linux-s390x': 0.34.3
-      '@img/sharp-linux-x64': 0.34.3
-      '@img/sharp-linuxmusl-arm64': 0.34.3
-      '@img/sharp-linuxmusl-x64': 0.34.3
-      '@img/sharp-wasm32': 0.34.3
-      '@img/sharp-win32-arm64': 0.34.3
-      '@img/sharp-win32-ia32': 0.34.3
-      '@img/sharp-win32-x64': 0.34.3
-    optional: true
-
-  [email protected]:
-    dependencies:
-      shebang-regex: 3.0.0
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      '@shikijs/core': 3.14.0
-      '@shikijs/engine-javascript': 3.14.0
-      '@shikijs/engine-oniguruma': 3.14.0
-      '@shikijs/langs': 3.14.0
-      '@shikijs/themes': 3.14.0
-      '@shikijs/types': 3.14.0
-      '@shikijs/vscode-textmate': 10.0.2
-      '@types/hast': 3.0.4
-
-  [email protected]:
-    dependencies:
-      es-errors: 1.3.0
-      object-inspect: 1.13.4
-
-  [email protected]:
-    dependencies:
-      call-bound: 1.0.4
-      es-errors: 1.3.0
-      get-intrinsic: 1.3.0
-      object-inspect: 1.13.4
-
-  [email protected]:
-    dependencies:
-      call-bound: 1.0.4
-      es-errors: 1.3.0
-      get-intrinsic: 1.3.0
-      object-inspect: 1.13.4
-      side-channel-map: 1.0.1
-
-  [email protected]:
-    dependencies:
-      es-errors: 1.3.0
-      object-inspect: 1.13.4
-      side-channel-list: 1.0.0
-      side-channel-map: 1.0.1
-      side-channel-weakmap: 1.0.2
-
-  [email protected]:
-    dependencies:
-      is-arrayish: 0.3.2
-    optional: true
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      agent-base: 7.1.4
-      debug: 4.4.1
-      socks: 2.8.7
-    transitivePeerDependencies:
-      - supports-color
-
-  [email protected]:
-    dependencies:
-      ip-address: 10.0.1
-      smart-buffer: 4.2.0
-
-  [email protected]:
-    dependencies:
-      atomic-sleep: 1.0.0
-
-  [email protected]([email protected]([email protected]))([email protected]):
-    dependencies:
-      react: 19.2.0
-      react-dom: 19.2.0([email protected])
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      buffer-from: 1.1.2
-      source-map: 0.6.1
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      extend-shallow: 3.0.2
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]:
-    optional: true
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      es-errors: 1.3.0
-      internal-slot: 1.1.0
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      call-bind: 1.0.8
-      define-properties: 1.2.1
-      es-abstract: 1.24.0
-
-  [email protected]:
-    dependencies:
-      call-bind: 1.0.8
-      call-bound: 1.0.4
-      define-properties: 1.2.1
-      es-abstract: 1.24.0
-      es-errors: 1.3.0
-      es-object-atoms: 1.1.1
-      get-intrinsic: 1.3.0
-      gopd: 1.2.0
-      has-symbols: 1.1.0
-      internal-slot: 1.1.0
-      regexp.prototype.flags: 1.5.4
-      set-function-name: 2.0.2
-      side-channel: 1.1.0
-
-  [email protected]:
-    dependencies:
-      define-properties: 1.2.1
-      es-abstract: 1.24.0
-
-  [email protected]:
-    dependencies:
-      call-bind: 1.0.8
-      call-bound: 1.0.4
-      define-data-property: 1.1.4
-      define-properties: 1.2.1
-      es-abstract: 1.24.0
-      es-object-atoms: 1.1.1
-      has-property-descriptors: 1.0.2
-
-  [email protected]:
-    dependencies:
-      call-bind: 1.0.8
-      call-bound: 1.0.4
-      define-properties: 1.2.1
-      es-object-atoms: 1.1.1
-
-  [email protected]:
-    dependencies:
-      call-bind: 1.0.8
-      define-properties: 1.2.1
-      es-object-atoms: 1.1.1
-
-  [email protected]:
-    dependencies:
-      character-entities-html4: 2.1.0
-      character-entities-legacy: 3.0.0
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      style-to-object: 1.0.11
-
-  [email protected]:
-    dependencies:
-      inline-style-parser: 0.2.4
-
-  [email protected](@babel/[email protected])([email protected]):
-    dependencies:
-      client-only: 0.0.1
-      react: 19.2.0
-    optionalDependencies:
-      '@babel/core': 7.28.5
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      has-flag: 4.0.0
-
-  [email protected]: {}
-
-  [email protected]:
-    optional: true
-
-  [email protected]([email protected]):
-    dependencies:
-      dequal: 2.0.3
-      react: 19.2.0
-      use-sync-external-store: 1.5.0([email protected])
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      utrie: 1.0.2
-
-  [email protected]:
-    dependencies:
-      real-require: 0.2.0
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      fdir: 6.4.6([email protected])
-      picomatch: 4.0.3
-
-  [email protected]:
-    dependencies:
-      is-number: 7.0.0
-
-  [email protected]:
-    dependencies:
-      vfile: 6.0.3
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]([email protected]):
-    dependencies:
-      typescript: 5.9.3
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      '@types/json5': 0.0.29
-      json5: 1.0.2
-      minimist: 1.2.8
-      strip-bom: 3.0.0
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      prelude-ls: 1.2.1
-
-  [email protected]:
-    dependencies:
-      tagged-tag: 1.0.0
-
-  [email protected]:
-    dependencies:
-      content-type: 1.0.5
-      media-typer: 1.1.0
-      mime-types: 3.0.1
-
-  [email protected]:
-    dependencies:
-      call-bound: 1.0.4
-      es-errors: 1.3.0
-      is-typed-array: 1.1.15
-
-  [email protected]:
-    dependencies:
-      call-bind: 1.0.8
-      for-each: 0.3.5
-      gopd: 1.2.0
-      has-proto: 1.2.0
-      is-typed-array: 1.1.15
-
-  [email protected]:
-    dependencies:
-      available-typed-arrays: 1.0.7
-      call-bind: 1.0.8
-      for-each: 0.3.5
-      gopd: 1.2.0
-      has-proto: 1.2.0
-      is-typed-array: 1.1.15
-      reflect.getprototypeof: 1.0.10
-
-  [email protected]:
-    dependencies:
-      call-bind: 1.0.8
-      for-each: 0.3.5
-      gopd: 1.2.0
-      is-typed-array: 1.1.15
-      possible-typed-array-names: 1.1.0
-      reflect.getprototypeof: 1.0.10
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      call-bound: 1.0.4
-      has-bigints: 1.1.0
-      has-symbols: 1.1.0
-      which-boxed-primitive: 1.1.1
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      '@types/unist': 3.0.3
-      bail: 2.0.2
-      devlop: 1.1.0
-      extend: 3.0.2
-      is-plain-obj: 4.1.0
-      trough: 2.2.0
-      vfile: 6.0.3
-
-  [email protected]:
-    dependencies:
-      '@types/unist': 3.0.3
-      unist-util-is: 6.0.1
-
-  [email protected]:
-    dependencies:
-      '@types/unist': 3.0.3
-
-  [email protected]:
-    dependencies:
-      '@types/unist': 3.0.3
-
-  [email protected]:
-    dependencies:
-      '@types/unist': 3.0.3
-
-  [email protected]:
-    dependencies:
-      '@types/unist': 3.0.3
-      unist-util-visit: 5.0.0
-
-  [email protected]:
-    dependencies:
-      '@types/unist': 3.0.3
-
-  [email protected]:
-    dependencies:
-      '@types/unist': 3.0.3
-      unist-util-is: 6.0.1
-
-  [email protected]:
-    dependencies:
-      '@types/unist': 3.0.3
-      unist-util-is: 6.0.1
-      unist-util-visit-parents: 6.0.2
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      napi-postinstall: 0.3.2
-    optionalDependencies:
-      '@unrs/resolver-binding-android-arm-eabi': 1.11.1
-      '@unrs/resolver-binding-android-arm64': 1.11.1
-      '@unrs/resolver-binding-darwin-arm64': 1.11.1
-      '@unrs/resolver-binding-darwin-x64': 1.11.1
-      '@unrs/resolver-binding-freebsd-x64': 1.11.1
-      '@unrs/resolver-binding-linux-arm-gnueabihf': 1.11.1
-      '@unrs/resolver-binding-linux-arm-musleabihf': 1.11.1
-      '@unrs/resolver-binding-linux-arm64-gnu': 1.11.1
-      '@unrs/resolver-binding-linux-arm64-musl': 1.11.1
-      '@unrs/resolver-binding-linux-ppc64-gnu': 1.11.1
-      '@unrs/resolver-binding-linux-riscv64-gnu': 1.11.1
-      '@unrs/resolver-binding-linux-riscv64-musl': 1.11.1
-      '@unrs/resolver-binding-linux-s390x-gnu': 1.11.1
-      '@unrs/resolver-binding-linux-x64-gnu': 1.11.1
-      '@unrs/resolver-binding-linux-x64-musl': 1.11.1
-      '@unrs/resolver-binding-wasm32-wasi': 1.11.1
-      '@unrs/resolver-binding-win32-arm64-msvc': 1.11.1
-      '@unrs/resolver-binding-win32-ia32-msvc': 1.11.1
-      '@unrs/resolver-binding-win32-x64-msvc': 1.11.1
-
-  [email protected]([email protected]):
-    dependencies:
-      browserslist: 4.27.0
-      escalade: 3.2.0
-      picocolors: 1.1.1
-
-  [email protected]:
-    dependencies:
-      punycode: 2.3.1
-
-  [email protected]: {}
-
-  [email protected](@types/[email protected])([email protected]):
-    dependencies:
-      react: 19.2.0
-      tslib: 2.8.1
-    optionalDependencies:
-      '@types/react': 19.2.2
-
-  [email protected]([email protected]):
-    dependencies:
-      '@formatjs/fast-memoize': 2.2.7
-      intl-messageformat: 10.7.18
-      react: 19.2.0
-
-  [email protected](@types/[email protected])([email protected]):
-    dependencies:
-      react: 19.2.0
-    optionalDependencies:
-      '@types/react': 19.2.2
-
-  [email protected]([email protected]):
-    dependencies:
-      react: 19.2.0
-
-  [email protected](@types/[email protected])([email protected]):
-    dependencies:
-      detect-node-es: 1.1.0
-      react: 19.2.0
-      tslib: 2.8.1
-    optionalDependencies:
-      '@types/react': 19.2.2
-
-  [email protected]([email protected]):
-    dependencies:
-      react: 19.2.0
-
-  [email protected]:
-    dependencies:
-      base64-arraybuffer: 1.0.2
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      '@types/unist': 3.0.3
-      vfile: 6.0.3
-
-  [email protected]:
-    dependencies:
-      '@types/unist': 3.0.3
-      unist-util-stringify-position: 4.0.0
-
-  [email protected]:
-    dependencies:
-      '@types/unist': 3.0.3
-      vfile-message: 4.0.3
-
-  [email protected]:
-    dependencies:
-      '@types/d3-array': 3.2.2
-      '@types/d3-ease': 3.0.2
-      '@types/d3-interpolate': 3.0.4
-      '@types/d3-scale': 4.0.9
-      '@types/d3-shape': 3.1.7
-      '@types/d3-time': 3.0.4
-      '@types/d3-timer': 3.0.2
-      d3-array: 3.2.4
-      d3-ease: 3.0.1
-      d3-interpolate: 3.0.1
-      d3-scale: 4.0.2
-      d3-shape: 3.2.0
-      d3-time: 3.1.0
-      d3-timer: 3.0.1
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      vscode-jsonrpc: 8.2.0
-      vscode-languageserver-types: 3.17.5
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      vscode-languageserver-protocol: 3.17.5
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]:
-    dependencies:
-      is-bigint: 1.1.0
-      is-boolean-object: 1.2.2
-      is-number-object: 1.1.1
-      is-string: 1.1.1
-      is-symbol: 1.1.1
-
-  [email protected]:
-    dependencies:
-      call-bound: 1.0.4
-      function.prototype.name: 1.1.8
-      has-tostringtag: 1.0.2
-      is-async-function: 2.1.1
-      is-date-object: 1.1.0
-      is-finalizationregistry: 1.1.1
-      is-generator-function: 1.1.0
-      is-regex: 1.2.1
-      is-weakref: 1.1.1
-      isarray: 2.0.5
-      which-boxed-primitive: 1.1.1
-      which-collection: 1.0.2
-      which-typed-array: 1.1.19
-
-  [email protected]:
-    dependencies:
-      is-map: 2.0.3
-      is-set: 2.0.3
-      is-weakmap: 2.0.2
-      is-weakset: 2.0.4
-
-  [email protected]:
-    dependencies:
-      available-typed-arrays: 1.0.7
-      call-bind: 1.0.8
-      call-bound: 1.0.4
-      for-each: 0.3.5
-      get-proto: 1.0.1
-      gopd: 1.2.0
-      has-tostringtag: 1.0.2
-
-  [email protected]:
-    dependencies:
-      isexe: 2.0.0
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]: {}
-
-  [email protected]([email protected]):
-    optionalDependencies:
-      react: 19.2.0
-
-  [email protected]: {}

+ 414 - 22
public/seed/litellm-prices.json

@@ -1987,6 +1987,68 @@
         "supports_tool_choice": true,
         "supports_vision": true
     },
+    "azure/gpt-audio-2025-08-28": {
+        "input_cost_per_audio_token": 4e-05,
+        "input_cost_per_token": 2.5e-06,
+        "litellm_provider": "azure",
+        "max_input_tokens": 128000,
+        "max_output_tokens": 16384,
+        "max_tokens": 16384,
+        "mode": "chat",
+        "output_cost_per_audio_token": 8e-05,
+        "output_cost_per_token": 1e-05,
+        "supported_endpoints": [
+            "/v1/chat/completions"
+        ],
+        "supported_modalities": [
+            "text",
+            "audio"
+        ],
+        "supported_output_modalities": [
+            "text",
+            "audio"
+        ],
+        "supports_function_calling": true,
+        "supports_native_streaming": true,
+        "supports_parallel_function_calling": true,
+        "supports_prompt_caching": false,
+        "supports_reasoning": false,
+        "supports_response_schema": false,
+        "supports_system_messages": true,
+        "supports_tool_choice": true,
+        "supports_vision": false
+    },
+    "azure/gpt-audio-mini-2025-10-06": {
+        "input_cost_per_audio_token": 1e-05,
+        "input_cost_per_token": 6e-07,
+        "litellm_provider": "azure",
+        "max_input_tokens": 128000,
+        "max_output_tokens": 16384,
+        "max_tokens": 16384,
+        "mode": "chat",
+        "output_cost_per_audio_token": 2e-05,
+        "output_cost_per_token": 2.4e-06,
+        "supported_endpoints": [
+            "/v1/chat/completions"
+        ],
+        "supported_modalities": [
+            "text",
+            "audio"
+        ],
+        "supported_output_modalities": [
+            "text",
+            "audio"
+        ],
+        "supports_function_calling": true,
+        "supports_native_streaming": true,
+        "supports_parallel_function_calling": true,
+        "supports_prompt_caching": false,
+        "supports_reasoning": false,
+        "supports_response_schema": false,
+        "supports_system_messages": true,
+        "supports_tool_choice": true,
+        "supports_vision": false
+    },
     "azure/gpt-4o-audio-preview-2024-12-17": {
         "input_cost_per_audio_token": 4e-05,
         "input_cost_per_token": 2.5e-06,
@@ -2100,6 +2162,70 @@
         "supports_system_messages": true,
         "supports_tool_choice": true
     },
+    "azure/gpt-realtime-2025-08-28": {
+        "cache_creation_input_audio_token_cost": 4e-06,
+        "cache_read_input_token_cost": 4e-06,
+        "input_cost_per_audio_token": 3.2e-05,
+        "input_cost_per_image": 5e-06,
+        "input_cost_per_token": 4e-06,
+        "litellm_provider": "azure",
+        "max_input_tokens": 32000,
+        "max_output_tokens": 4096,
+        "max_tokens": 4096,
+        "mode": "chat",
+        "output_cost_per_audio_token": 6.4e-05,
+        "output_cost_per_token": 1.6e-05,
+        "supported_endpoints": [
+            "/v1/realtime"
+        ],
+        "supported_modalities": [
+            "text",
+            "image",
+            "audio"
+        ],
+        "supported_output_modalities": [
+            "text",
+            "audio"
+        ],
+        "supports_audio_input": true,
+        "supports_audio_output": true,
+        "supports_function_calling": true,
+        "supports_parallel_function_calling": true,
+        "supports_system_messages": true,
+        "supports_tool_choice": true
+    },
+    "azure/gpt-realtime-mini-2025-10-06": {
+        "cache_creation_input_audio_token_cost": 3e-07,
+        "cache_read_input_token_cost": 6e-08,
+        "input_cost_per_audio_token": 1e-05,
+        "input_cost_per_image": 8e-07,
+        "input_cost_per_token": 6e-07,
+        "litellm_provider": "azure",
+        "max_input_tokens": 32000,
+        "max_output_tokens": 4096,
+        "max_tokens": 4096,
+        "mode": "chat",
+        "output_cost_per_audio_token": 2e-05,
+        "output_cost_per_token": 2.4e-06,
+        "supported_endpoints": [
+            "/v1/realtime"
+        ],
+        "supported_modalities": [
+            "text",
+            "image",
+            "audio"
+        ],
+        "supported_output_modalities": [
+            "text",
+            "audio"
+        ],
+        "supports_audio_input": true,
+        "supports_audio_output": true,
+        "supports_function_calling": true,
+        "supports_parallel_function_calling": true,
+        "supports_system_messages": true,
+        "supports_tool_choice": true
+    },
     "azure/gpt-4o-mini-transcribe": {
         "input_cost_per_audio_token": 3e-06,
         "input_cost_per_token": 1.25e-06,
@@ -2187,6 +2313,155 @@
             "/v1/audio/transcriptions"
         ]
     },
+    "azure/gpt-4o-transcribe-diarize": {
+        "input_cost_per_audio_token": 6e-06,
+        "input_cost_per_token": 2.5e-06,
+        "litellm_provider": "azure",
+        "max_input_tokens": 16000,
+        "max_output_tokens": 2000,
+        "mode": "audio_transcription",
+        "output_cost_per_token": 1e-05,
+        "supported_endpoints": [
+            "/v1/audio/transcriptions"
+        ]
+    },
+   "azure/gpt-5.1-2025-11-13": {
+        "cache_read_input_token_cost": 1.25e-07,
+        "cache_read_input_token_cost_priority": 2.5e-07,
+        "input_cost_per_token": 1.25e-06,
+        "input_cost_per_token_priority": 2.5e-06,
+        "litellm_provider": "azure",
+        "max_input_tokens": 272000,
+        "max_output_tokens": 128000,
+        "max_tokens": 128000,
+        "mode": "chat",
+        "output_cost_per_token": 1e-05,
+        "output_cost_per_token_priority": 2e-05,
+        "supported_endpoints": [
+            "/v1/chat/completions",
+            "/v1/responses"
+        ],
+        "supported_modalities": [
+            "text",
+            "image"
+        ],
+        "supported_output_modalities": [
+            "text",
+            "image"
+        ],
+        "supports_function_calling": true,
+        "supports_native_streaming": true,
+        "supports_parallel_function_calling": true,
+        "supports_pdf_input": true,
+        "supports_prompt_caching": true,
+        "supports_reasoning": true,
+        "supports_response_schema": true,
+        "supports_system_messages": true,
+        "supports_tool_choice": true,
+        "supports_service_tier": true,
+        "supports_vision": true
+    },
+   "azure/gpt-5.1-chat-2025-11-13": {
+        "cache_read_input_token_cost": 1.25e-07,
+        "cache_read_input_token_cost_priority": 2.5e-07,
+        "input_cost_per_token": 1.25e-06,
+        "input_cost_per_token_priority": 2.5e-06,
+        "litellm_provider": "azure",
+        "max_input_tokens": 128000,
+        "max_output_tokens": 16384,
+        "max_tokens": 16384,
+        "mode": "chat",
+        "output_cost_per_token": 1e-05,
+        "output_cost_per_token_priority": 2e-05,
+        "supported_endpoints": [
+            "/v1/chat/completions",
+            "/v1/responses"
+        ],
+        "supported_modalities": [
+            "text",
+            "image"
+        ],
+        "supported_output_modalities": [
+            "text",
+            "image"
+        ],
+        "supports_function_calling": false,
+        "supports_native_streaming": true,
+        "supports_parallel_function_calling": false,
+        "supports_pdf_input": true,
+        "supports_prompt_caching": true,
+        "supports_reasoning": true,
+        "supports_response_schema": true,
+        "supports_system_messages": true,
+        "supports_tool_choice": false,
+        "supports_vision": true
+    },
+   "azure/gpt-5.1-codex-2025-11-13": {
+        "cache_read_input_token_cost": 1.25e-07,
+        "cache_read_input_token_cost_priority": 2.5e-07,
+        "input_cost_per_token": 1.25e-06,
+        "input_cost_per_token_priority": 2.5e-06,
+        "litellm_provider": "azure",
+        "max_input_tokens": 272000,
+        "max_output_tokens": 128000,
+        "max_tokens": 128000,
+        "mode": "responses",
+        "output_cost_per_token": 1e-05,
+        "output_cost_per_token_priority": 2e-05,
+        "supported_endpoints": [
+            "/v1/responses"
+        ],
+        "supported_modalities": [
+            "text",
+            "image"
+        ],
+        "supported_output_modalities": [
+            "text"
+        ],
+        "supports_function_calling": true,
+        "supports_native_streaming": true,
+        "supports_parallel_function_calling": true,
+        "supports_pdf_input": true,
+        "supports_prompt_caching": true,
+        "supports_reasoning": true,
+        "supports_response_schema": true,
+        "supports_system_messages": false,
+        "supports_tool_choice": true,
+        "supports_vision": true
+    },
+    "azure/gpt-5.1-codex-mini-2025-11-13": {
+        "cache_read_input_token_cost": 2.5e-08,
+        "cache_read_input_token_cost_priority": 4.5e-08,
+        "input_cost_per_token": 2.5e-07,
+        "input_cost_per_token_priority": 4.5e-07,
+        "litellm_provider": "azure",
+        "max_input_tokens": 272000,
+        "max_output_tokens": 128000,
+        "max_tokens": 128000,
+        "mode": "responses",
+        "output_cost_per_token": 2e-06,
+        "output_cost_per_token_priority": 3.6e-06,
+        "supported_endpoints": [
+            "/v1/responses"
+        ],
+        "supported_modalities": [
+            "text",
+            "image"
+        ],
+        "supported_output_modalities": [
+            "text"
+        ],
+        "supports_function_calling": true,
+        "supports_native_streaming": true,
+        "supports_parallel_function_calling": true,
+        "supports_pdf_input": true,
+        "supports_prompt_caching": true,
+        "supports_reasoning": true,
+        "supports_response_schema": true,
+        "supports_system_messages": false,
+        "supports_tool_choice": true,
+        "supports_vision": true
+    },
     "azure/gpt-5": {
         "cache_read_input_token_cost": 1.25e-07,
         "input_cost_per_token": 1.25e-06,
@@ -10993,6 +11268,50 @@
         "supports_vision": true,
         "supports_web_search": true
     },
+    "gemini-3-pro-preview": {
+        "cache_read_input_token_cost": 1.25e-07,
+        "cache_creation_input_token_cost_above_200k_tokens": 2.5e-07,
+        "input_cost_per_token": 2e-06,
+        "input_cost_per_token_above_200k_tokens": 4e-06,
+        "litellm_provider": "vertex_ai-language-models",
+        "max_audio_length_hours": 8.4,
+        "max_audio_per_prompt": 1,
+        "max_images_per_prompt": 3000,
+        "max_input_tokens": 1048576,
+        "max_output_tokens": 65535,
+        "max_pdf_size_mb": 30,
+        "max_tokens": 65535,
+        "max_video_length": 1,
+        "max_videos_per_prompt": 10,
+        "mode": "chat",
+        "output_cost_per_token": 1.2e-05,
+        "output_cost_per_token_above_200k_tokens": 1.8e-05,
+        "source": "https://cloud.google.com/vertex-ai/generative-ai/pricing",
+        "supported_endpoints": [
+            "/v1/chat/completions",
+            "/v1/completions"
+        ],
+        "supported_modalities": [
+            "text",
+            "image",
+            "audio",
+            "video"
+        ],
+        "supported_output_modalities": [
+            "text"
+        ],
+        "supports_audio_input": true,
+        "supports_function_calling": true,
+        "supports_pdf_input": true,
+        "supports_prompt_caching": true,
+        "supports_reasoning": true,
+        "supports_response_schema": true,
+        "supports_system_messages": true,
+        "supports_tool_choice": true,
+        "supports_video_input": true,
+        "supports_vision": true,
+        "supports_web_search": true
+    },
     "gemini-2.5-pro-exp-03-25": {
         "cache_read_input_token_cost": 3.125e-07,
         "input_cost_per_token": 1.25e-06,
@@ -12652,6 +12971,51 @@
         "supports_web_search": true,
         "tpm": 800000
     },
+    "gemini/gemini-3-pro-preview": {
+        "cache_read_input_token_cost": 3.125e-07,
+        "input_cost_per_token": 2e-06,
+        "input_cost_per_token_above_200k_tokens": 4e-06,
+        "litellm_provider": "gemini",
+        "max_audio_length_hours": 8.4,
+        "max_audio_per_prompt": 1,
+        "max_images_per_prompt": 3000,
+        "max_input_tokens": 1048576,
+        "max_output_tokens": 65535,
+        "max_pdf_size_mb": 30,
+        "max_tokens": 65535,
+        "max_video_length": 1,
+        "max_videos_per_prompt": 10,
+        "mode": "chat",
+        "output_cost_per_token": 1.2e-05,
+        "output_cost_per_token_above_200k_tokens": 1.8e-05,
+        "rpm": 2000,
+        "source": "https://cloud.google.com/vertex-ai/generative-ai/pricing",
+        "supported_endpoints": [
+            "/v1/chat/completions",
+            "/v1/completions"
+        ],
+        "supported_modalities": [
+            "text",
+            "image",
+            "audio",
+            "video"
+        ],
+        "supported_output_modalities": [
+            "text"
+        ],
+        "supports_audio_input": true,
+        "supports_function_calling": true,
+        "supports_pdf_input": true,
+        "supports_prompt_caching": true,
+        "supports_reasoning": true,
+        "supports_response_schema": true,
+        "supports_system_messages": true,
+        "supports_tool_choice": true,
+        "supports_video_input": true,
+        "supports_vision": true,
+        "supports_web_search": true,
+        "tpm": 800000
+    },
     "gemini/gemini-2.5-pro-exp-03-25": {
         "cache_read_input_token_cost": 0.0,
         "input_cost_per_token": 0.0,
@@ -12995,7 +13359,7 @@
         "supports_audio_output": false,
         "supports_function_calling": true,
         "supports_response_schema": true,
-        "supports_system_messages": true,
+        "supports_system_messages": false,
         "supports_tool_choice": true,
         "supports_vision": true
     },
@@ -14259,7 +14623,7 @@
         "max_input_tokens": 272000,
         "max_output_tokens": 128000,
         "max_tokens": 128000,
-        "mode": "chat",
+        "mode": "responses",
         "output_cost_per_token": 1e-05,
         "output_cost_per_token_flex": 5e-06,
         "output_cost_per_token_priority": 2e-05,
@@ -14296,7 +14660,7 @@
         "max_input_tokens": 272000,
         "max_output_tokens": 128000,
         "max_tokens": 128000,
-        "mode": "chat",
+        "mode": "responses",
         "output_cost_per_token": 1e-05,
         "output_cost_per_token_priority": 2e-05,
         "supported_endpoints": [
@@ -14332,7 +14696,7 @@
         "max_input_tokens": 272000,
         "max_output_tokens": 128000,
         "max_tokens": 128000,
-        "mode": "chat",
+        "mode": "responses",
         "output_cost_per_token": 1e-05,
         "output_cost_per_token_priority": 2e-05,
         "supported_endpoints": [
@@ -14368,7 +14732,7 @@
         "max_input_tokens": 128000,
         "max_output_tokens": 16384,
         "max_tokens": 16384,
-        "mode": "chat",
+        "mode": "responses",
         "output_cost_per_token": 1e-05,
         "output_cost_per_token_priority": 2e-05,
         "supported_endpoints": [
@@ -14471,7 +14835,7 @@
         "max_input_tokens": 272000,
         "max_output_tokens": 128000,
         "max_tokens": 128000,
-        "mode": "chat",
+        "mode": "responses",
         "output_cost_per_token": 1e-05,
         "output_cost_per_token_flex": 5e-06,
         "output_cost_per_token_priority": 2e-05,
@@ -14506,7 +14870,7 @@
         "max_input_tokens": 272000,
         "max_output_tokens": 128000,
         "max_tokens": 128000,
-        "mode": "chat",
+        "mode": "responses",
         "output_cost_per_token": 1e-05,
         "supported_endpoints": [
             "/v1/chat/completions",
@@ -14538,7 +14902,7 @@
         "max_input_tokens": 128000,
         "max_output_tokens": 16384,
         "max_tokens": 16384,
-        "mode": "chat",
+        "mode": "responses",
         "output_cost_per_token": 1e-05,
         "supported_endpoints": [
             "/v1/chat/completions",
@@ -14670,7 +15034,7 @@
         "max_input_tokens": 272000,
         "max_output_tokens": 128000,
         "max_tokens": 128000,
-        "mode": "chat",
+        "mode": "responses",
         "output_cost_per_token": 2e-06,
         "output_cost_per_token_flex": 1e-06,
         "output_cost_per_token_priority": 3.6e-06,
@@ -14709,7 +15073,7 @@
         "max_input_tokens": 272000,
         "max_output_tokens": 128000,
         "max_tokens": 128000,
-        "mode": "chat",
+        "mode": "responses",
         "output_cost_per_token": 2e-06,
         "output_cost_per_token_flex": 1e-06,
         "output_cost_per_token_priority": 3.6e-06,
@@ -14747,7 +15111,7 @@
         "max_input_tokens": 272000,
         "max_output_tokens": 128000,
         "max_tokens": 128000,
-        "mode": "chat",
+        "mode": "responses",
         "output_cost_per_token": 4e-07,
         "output_cost_per_token_flex": 2e-07,
         "supported_endpoints": [
@@ -14782,7 +15146,7 @@
         "max_input_tokens": 272000,
         "max_output_tokens": 128000,
         "max_tokens": 128000,
-        "mode": "chat",
+        "mode": "responses",
         "output_cost_per_token": 4e-07,
         "output_cost_per_token_flex": 2e-07,
         "supported_endpoints": [
@@ -17635,7 +17999,7 @@
         "max_input_tokens": 200000,
         "max_output_tokens": 100000,
         "max_tokens": 100000,
-        "mode": "chat",
+        "mode": "responses",
         "output_cost_per_token": 6e-05,
         "supports_function_calling": true,
         "supports_parallel_function_calling": true,
@@ -17654,7 +18018,7 @@
         "max_input_tokens": 128000,
         "max_output_tokens": 65536,
         "max_tokens": 65536,
-        "mode": "chat",
+        "mode": "responses",
         "output_cost_per_token": 4.4e-06,
         "supports_pdf_input": true,
         "supports_prompt_caching": true,
@@ -17668,7 +18032,7 @@
         "max_input_tokens": 128000,
         "max_output_tokens": 65536,
         "max_tokens": 65536,
-        "mode": "chat",
+        "mode": "responses",
         "output_cost_per_token": 1.2e-05,
         "supports_pdf_input": true,
         "supports_prompt_caching": true,
@@ -17682,7 +18046,7 @@
         "max_input_tokens": 128000,
         "max_output_tokens": 32768,
         "max_tokens": 32768,
-        "mode": "chat",
+        "mode": "responses",
         "output_cost_per_token": 6e-05,
         "supports_pdf_input": true,
         "supports_prompt_caching": true,
@@ -17696,7 +18060,7 @@
         "max_input_tokens": 128000,
         "max_output_tokens": 32768,
         "max_tokens": 32768,
-        "mode": "chat",
+        "mode": "responses",
         "output_cost_per_token": 6e-05,
         "supports_pdf_input": true,
         "supports_prompt_caching": true,
@@ -17812,7 +18176,7 @@
         "max_input_tokens": 200000,
         "max_output_tokens": 100000,
         "max_tokens": 100000,
-        "mode": "chat",
+        "mode": "responses",
         "output_cost_per_token": 8e-06,
         "supported_endpoints": [
             "/v1/responses",
@@ -17910,7 +18274,7 @@
         "max_input_tokens": 200000,
         "max_output_tokens": 100000,
         "max_tokens": 100000,
-        "mode": "chat",
+        "mode": "responses",
         "output_cost_per_token": 4.4e-06,
         "supports_function_calling": true,
         "supports_parallel_function_calling": false,
@@ -17927,7 +18291,7 @@
         "max_input_tokens": 200000,
         "max_output_tokens": 100000,
         "max_tokens": 100000,
-        "mode": "chat",
+        "mode": "responses",
         "output_cost_per_token": 4.4e-06,
         "supports_function_calling": true,
         "supports_parallel_function_calling": false,
@@ -24085,7 +24449,7 @@
         "max_input_tokens": 1024,
         "max_tokens": 1024,
         "mode": "video_generation",
-        "output_cost_per_second": 0.4,
+        "output_cost_per_second": 0.15,
         "source": "https://ai.google.dev/gemini-api/docs/video",
         "supported_modalities": [
             "text"
@@ -24099,7 +24463,35 @@
         "max_input_tokens": 1024,
         "max_tokens": 1024,
         "mode": "video_generation",
-        "output_cost_per_second": 0.75,
+        "output_cost_per_second": 0.4,
+        "source": "https://ai.google.dev/gemini-api/docs/video",
+        "supported_modalities": [
+            "text"
+        ],
+        "supported_output_modalities": [
+            "video"
+        ]
+    },
+    "vertex_ai/veo-3.0-fast-generate-001": {
+        "litellm_provider": "vertex_ai-video-models",
+        "max_input_tokens": 1024,
+        "max_tokens": 1024,
+        "mode": "video_generation",
+        "output_cost_per_second": 0.15,
+        "source": "https://ai.google.dev/gemini-api/docs/video",
+        "supported_modalities": [
+            "text"
+        ],
+        "supported_output_modalities": [
+            "video"
+        ]
+    },
+    "vertex_ai/veo-3.0-generate-001": {
+        "litellm_provider": "vertex_ai-video-models",
+        "max_input_tokens": 1024,
+        "max_tokens": 1024,
+        "mode": "video_generation",
+        "output_cost_per_second": 0.4,
         "source": "https://ai.google.dev/gemini-api/docs/video",
         "supported_modalities": [
             "text"

+ 1 - 1
scripts/extract-translations.ts

@@ -378,7 +378,7 @@ async function main() {
   console.log("\n📝 Generating translation files...");
   generateTranslationFiles(allStrings, dryRun);
 
-  console.log("\nExtraction complete!");
+  console.log("\nExtraction complete!");
   if (dryRun) {
     console.log("   (Run without --dry-run to save changes)");
   }

+ 25 - 0
scripts/init-error-rules.ts

@@ -0,0 +1,25 @@
+#!/usr/bin/env bun
+/**
+ * Initialize default error rules
+ *
+ * Usage: bun run scripts/init-error-rules.ts
+ *
+ * This script inserts 7 default error rules into the error_rules table.
+ * It uses ON CONFLICT DO NOTHING to ensure idempotency.
+ */
+
+import { initializeDefaultErrorRules } from "@/repository/error-rules";
+
+async function main() {
+  console.log("Initializing default error rules...");
+
+  try {
+    await initializeDefaultErrorRules();
+    console.log("✓ Default error rules initialized successfully");
+  } catch (error) {
+    console.error("✗ Failed to initialize default error rules:", error);
+    process.exit(1);
+  }
+}
+
+main();

+ 6 - 6
src/actions/active-sessions.ts

@@ -15,7 +15,7 @@ import {
  * 获取所有活跃 session 的详细信息(使用聚合数据 + 批量查询 + 缓存)
  * 用于实时监控页面
  *
- * 安全修复:添加用户权限隔离
+ * 安全修复:添加用户权限隔离
  */
 export async function getActiveSessions(): Promise<ActionResult<ActiveSessionInfo[]>> {
   try {
@@ -134,8 +134,8 @@ export async function getActiveSessions(): Promise<ActionResult<ActiveSessionInf
  * 获取所有 session(包括活跃和非活跃的)
  * 用于实时监控页面的完整视图
  *
- * 修复:统一使用数据库聚合查询,确保与其他页面数据一致
- * 安全修复:添加用户权限隔离
+ * 修复:统一使用数据库聚合查询,确保与其他页面数据一致
+ * 安全修复:添加用户权限隔离
  */
 export async function getAllSessions(): Promise<
   ActionResult<{
@@ -290,7 +290,7 @@ export async function getAllSessions(): Promise<
  * 获取指定 session 的 messages 内容
  * 仅当 STORE_SESSION_MESSAGES=true 时可用
  *
- * 安全修复:添加用户权限检查
+ * 安全修复:添加用户权限检查
  */
 export async function getSessionMessages(sessionId: string): Promise<ActionResult<unknown>> {
   try {
@@ -375,8 +375,8 @@ export async function hasSessionMessages(sessionId: string): Promise<ActionResul
  * 获取 session 的完整详情(messages + response + 聚合统计)
  * 用于 session messages 详情页面
  *
- * 优化:添加缓存支持
- * 安全修复:添加用户权限检查
+ * 优化:添加缓存支持
+ * 安全修复:添加用户权限检查
  */
 export async function getSessionDetails(sessionId: string): Promise<
   ActionResult<{

+ 335 - 0
src/actions/error-rules.ts

@@ -0,0 +1,335 @@
+"use server";
+
+import { revalidatePath } from "next/cache";
+import * as repo from "@/repository/error-rules";
+import { errorRuleDetector } from "@/lib/error-rule-detector";
+import { eventEmitter } from "@/lib/event-emitter";
+import { logger } from "@/lib/logger";
+import { getSession } from "@/lib/auth";
+import safeRegex from "safe-regex";
+import type { ActionResult } from "./types";
+
+/**
+ * 获取所有错误规则列表
+ */
+export async function listErrorRules(): Promise<repo.ErrorRule[]> {
+  try {
+    const session = await getSession();
+    if (!session || session.user.role !== "admin") {
+      logger.warn("[ErrorRulesAction] Unauthorized access attempt");
+      return [];
+    }
+
+    return await repo.getAllErrorRules();
+  } catch (error) {
+    logger.error("[ErrorRulesAction] Failed to list error rules:", error);
+    return [];
+  }
+}
+
+/**
+ * 创建错误规则
+ */
+export async function createErrorRuleAction(data: {
+  pattern: string;
+  category:
+    | "prompt_limit"
+    | "content_filter"
+    | "pdf_limit"
+    | "thinking_error"
+    | "parameter_error"
+    | "invalid_request"
+    | "cache_limit";
+  matchType?: "contains" | "exact" | "regex";
+  description?: string;
+}): Promise<ActionResult<repo.ErrorRule>> {
+  try {
+    const session = await getSession();
+    if (!session || session.user.role !== "admin") {
+      return {
+        ok: false,
+        error: "权限不足",
+      };
+    }
+
+    // 验证必填字段
+    if (!data.pattern || data.pattern.trim().length === 0) {
+      return {
+        ok: false,
+        error: "错误模式不能为空",
+      };
+    }
+
+    if (!data.category) {
+      return {
+        ok: false,
+        error: "错误类别不能为空",
+      };
+    }
+
+    // 验证类别
+    const validCategories = [
+      "prompt_limit",
+      "content_filter",
+      "pdf_limit",
+      "thinking_error",
+      "parameter_error",
+      "invalid_request",
+      "cache_limit",
+    ];
+    if (!validCategories.includes(data.category)) {
+      return {
+        ok: false,
+        error: "无效的错误类别",
+      };
+    }
+
+    // 默认 matchType 为 regex
+    const matchType = data.matchType || "regex";
+
+    // 验证匹配类型
+    if (!["contains", "exact", "regex"].includes(matchType)) {
+      return {
+        ok: false,
+        error: "无效的匹配类型",
+      };
+    }
+
+    // ReDoS (Regular Expression Denial of Service) 风险检测
+    if (matchType === "regex") {
+      if (!safeRegex(data.pattern)) {
+        return {
+          ok: false,
+          error: "正则表达式存在 ReDoS 风险,请简化模式",
+        };
+      }
+
+      // 验证正则表达式语法
+      try {
+        new RegExp(data.pattern);
+      } catch {
+        return {
+          ok: false,
+          error: "无效的正则表达式",
+        };
+      }
+    }
+
+    const result = await repo.createErrorRule({
+      pattern: data.pattern,
+      category: data.category,
+      matchType,
+      description: data.description,
+    });
+
+    // 刷新缓存
+    await errorRuleDetector.reload();
+
+    // 触发事件
+    eventEmitter.emit("errorRulesUpdated");
+
+    revalidatePath("/settings/error-rules");
+
+    logger.info("[ErrorRulesAction] Created error rule", {
+      pattern: data.pattern,
+      category: data.category,
+      matchType,
+      userId: session.user.id,
+    });
+
+    return {
+      ok: true,
+      data: result,
+    };
+  } catch (error) {
+    logger.error("[ErrorRulesAction] Failed to create error rule:", error);
+    return {
+      ok: false,
+      error: "创建错误规则失败",
+    };
+  }
+}
+
+/**
+ * 更新错误规则
+ */
+export async function updateErrorRuleAction(
+  id: number,
+  updates: Partial<{
+    pattern: string;
+    category: string;
+    matchType: "regex" | "contains" | "exact";
+    description: string;
+    isEnabled: boolean;
+    priority: number;
+  }>
+): Promise<ActionResult<repo.ErrorRule>> {
+  try {
+    const session = await getSession();
+    if (!session || session.user.role !== "admin") {
+      return {
+        ok: false,
+        error: "权限不足",
+      };
+    }
+
+    // ReDoS (Regular Expression Denial of Service) 风险检测
+    // 仅当更新了 pattern 且 matchType 是 regex 时检查
+    if (updates.pattern) {
+      const matchType = updates.matchType || "regex";
+      if (matchType === "regex") {
+        if (!safeRegex(updates.pattern)) {
+          return {
+            ok: false,
+            error: "正则表达式存在 ReDoS 风险,请简化模式",
+          };
+        }
+
+        // 验证正则表达式语法
+        try {
+          new RegExp(updates.pattern);
+        } catch {
+          return {
+            ok: false,
+            error: "无效的正则表达式",
+          };
+        }
+      }
+    }
+
+    const result = await repo.updateErrorRule(id, updates);
+
+    if (!result) {
+      return {
+        ok: false,
+        error: "错误规则不存在",
+      };
+    }
+
+    // 刷新缓存
+    await errorRuleDetector.reload();
+
+    // 触发事件
+    eventEmitter.emit("errorRulesUpdated");
+
+    revalidatePath("/settings/error-rules");
+
+    logger.info("[ErrorRulesAction] Updated error rule", {
+      id,
+      updates,
+      userId: session.user.id,
+    });
+
+    return {
+      ok: true,
+      data: result,
+    };
+  } catch (error) {
+    logger.error("[ErrorRulesAction] Failed to update error rule:", error);
+    return {
+      ok: false,
+      error: "更新错误规则失败",
+    };
+  }
+}
+
+/**
+ * 删除错误规则
+ */
+export async function deleteErrorRuleAction(id: number): Promise<ActionResult> {
+  try {
+    const session = await getSession();
+    if (!session || session.user.role !== "admin") {
+      return {
+        ok: false,
+        error: "权限不足",
+      };
+    }
+
+    const deleted = await repo.deleteErrorRule(id);
+
+    if (!deleted) {
+      return {
+        ok: false,
+        error: "错误规则不存在",
+      };
+    }
+
+    // 刷新缓存
+    await errorRuleDetector.reload();
+
+    // 触发事件
+    eventEmitter.emit("errorRulesUpdated");
+
+    revalidatePath("/settings/error-rules");
+
+    logger.info("[ErrorRulesAction] Deleted error rule", {
+      id,
+      userId: session.user.id,
+    });
+
+    return {
+      ok: true,
+    };
+  } catch (error) {
+    logger.error("[ErrorRulesAction] Failed to delete error rule:", error);
+    return {
+      ok: false,
+      error: "删除错误规则失败",
+    };
+  }
+}
+
+/**
+ * 手动刷新缓存
+ */
+export async function refreshCacheAction(): Promise<
+  ActionResult<{ stats: ReturnType<typeof errorRuleDetector.getStats> }>
+> {
+  try {
+    const session = await getSession();
+    if (!session || session.user.role !== "admin") {
+      return {
+        ok: false,
+        error: "权限不足",
+      };
+    }
+
+    await errorRuleDetector.reload();
+
+    const stats = errorRuleDetector.getStats();
+
+    logger.info("[ErrorRulesAction] Cache refreshed", {
+      stats,
+      userId: session.user.id,
+    });
+
+    return {
+      ok: true,
+      data: { stats },
+    };
+  } catch (error) {
+    logger.error("[ErrorRulesAction] Failed to refresh cache:", error);
+    return {
+      ok: false,
+      error: "刷新缓存失败",
+    };
+  }
+}
+
+/**
+ * 获取缓存统计信息
+ */
+export async function getCacheStats() {
+  try {
+    const session = await getSession();
+    if (!session || session.user.role !== "admin") {
+      return null;
+    }
+
+    return errorRuleDetector.getStats();
+  } catch (error) {
+    logger.error("[ErrorRulesAction] Failed to get cache stats:", error);
+    return null;
+  }
+}

+ 92 - 0
src/actions/keys.ts

@@ -55,6 +55,50 @@ export async function addKey(data: {
       };
     }
 
+    // 服务端验证:Key限额不能超过用户限额
+    const { findUserById } = await import("@/repository/user");
+    const user = await findUserById(data.userId);
+    if (!user) {
+      return { ok: false, error: "用户不存在" };
+    }
+
+    // 验证各个限额字段
+    if (data.limit5hUsd && user.limit5hUsd && data.limit5hUsd > user.limit5hUsd) {
+      return {
+        ok: false,
+        error: `Key的5小时消费上限(${data.limit5hUsd})不能超过用户限额(${user.limit5hUsd})`,
+      };
+    }
+
+    if (data.limitWeeklyUsd && user.limitWeeklyUsd && data.limitWeeklyUsd > user.limitWeeklyUsd) {
+      return {
+        ok: false,
+        error: `Key的周消费上限(${data.limitWeeklyUsd})不能超过用户限额(${user.limitWeeklyUsd})`,
+      };
+    }
+
+    if (
+      data.limitMonthlyUsd &&
+      user.limitMonthlyUsd &&
+      data.limitMonthlyUsd > user.limitMonthlyUsd
+    ) {
+      return {
+        ok: false,
+        error: `Key的月消费上限(${data.limitMonthlyUsd})不能超过用户限额(${user.limitMonthlyUsd})`,
+      };
+    }
+
+    if (
+      data.limitConcurrentSessions &&
+      user.limitConcurrentSessions &&
+      data.limitConcurrentSessions > user.limitConcurrentSessions
+    ) {
+      return {
+        ok: false,
+        error: `Key的并发Session上限(${data.limitConcurrentSessions})不能超过用户限额(${user.limitConcurrentSessions})`,
+      };
+    }
+
     const generatedKey = "sk-" + randomBytes(16).toString("hex");
 
     // 转换 expiresAt: undefined → null(永不过期),string → Date(设置日期)
@@ -116,6 +160,54 @@ export async function editKey(
 
     const validatedData = KeyFormSchema.parse(data);
 
+    // 服务端验证:Key限额不能超过用户限额
+    const { findUserById } = await import("@/repository/user");
+    const user = await findUserById(key.userId);
+    if (!user) {
+      return { ok: false, error: "用户不存在" };
+    }
+
+    // 验证各个限额字段
+    if (validatedData.limit5hUsd && user.limit5hUsd && validatedData.limit5hUsd > user.limit5hUsd) {
+      return {
+        ok: false,
+        error: `Key的5小时消费上限(${validatedData.limit5hUsd})不能超过用户限额(${user.limit5hUsd})`,
+      };
+    }
+
+    if (
+      validatedData.limitWeeklyUsd &&
+      user.limitWeeklyUsd &&
+      validatedData.limitWeeklyUsd > user.limitWeeklyUsd
+    ) {
+      return {
+        ok: false,
+        error: `Key的周消费上限(${validatedData.limitWeeklyUsd})不能超过用户限额(${user.limitWeeklyUsd})`,
+      };
+    }
+
+    if (
+      validatedData.limitMonthlyUsd &&
+      user.limitMonthlyUsd &&
+      validatedData.limitMonthlyUsd > user.limitMonthlyUsd
+    ) {
+      return {
+        ok: false,
+        error: `Key的月消费上限(${validatedData.limitMonthlyUsd})不能超过用户限额(${user.limitMonthlyUsd})`,
+      };
+    }
+
+    if (
+      validatedData.limitConcurrentSessions &&
+      user.limitConcurrentSessions &&
+      validatedData.limitConcurrentSessions > user.limitConcurrentSessions
+    ) {
+      return {
+        ok: false,
+        error: `Key的并发Session上限(${validatedData.limitConcurrentSessions})不能超过用户限额(${user.limitConcurrentSessions})`,
+      };
+    }
+
     // 转换 expiresAt: undefined → null(清除日期),string → Date(设置日期)
     const expiresAt =
       validatedData.expiresAt === undefined ? null : new Date(validatedData.expiresAt);

+ 19 - 3
src/actions/model-prices.ts

@@ -50,8 +50,16 @@ export async function processPriceTableInternal(
       return { ok: false, error: "价格表必须是一个JSON对象" };
     }
 
-    // 导入所有模型(不限制模型名称前缀)
+    // 元数据字段列表(不是实际的模型数据)
+    const METADATA_FIELDS = ["sample_spec"];
+
+    // 导入所有模型(过滤元数据字段)
     const entries = Object.entries(priceTable).filter(([modelName]) => {
+      // 排除元数据字段
+      if (METADATA_FIELDS.includes(modelName)) {
+        logger.debug(`跳过元数据字段: ${modelName}`);
+        return false;
+      }
       return typeof modelName === "string" && modelName.trim().length > 0;
     });
 
@@ -66,8 +74,16 @@ export async function processPriceTableInternal(
     // 处理每个模型的价格
     for (const [modelName, priceData] of entries) {
       try {
-        // 验证价格数据
+        // 验证价格数据基本类型
         if (typeof priceData !== "object" || priceData === null) {
+          logger.warn(`模型 ${modelName} 的价格数据不是有效的对象`);
+          result.failed.push(modelName);
+          continue;
+        }
+
+        // 验证价格数据必须包含 mode 字段(所有有效模型都有这个字段)
+        if (!("mode" in priceData)) {
+          logger.warn(`模型 ${modelName} 缺少必需的 mode 字段,跳过处理`);
           result.failed.push(modelName);
           continue;
         }
@@ -254,7 +270,7 @@ export async function syncLiteLLMPrices(): Promise<ActionResult<PriceUpdateResul
     const result = await uploadPriceTable(jsonContent);
 
     if (result.ok) {
-      logger.info("LiteLLM price sync completed", { result: result.data });
+      logger.info("LiteLLM price sync completed", { result: result.data });
     } else {
       logger.error("❌ LiteLLM price sync failed:", { context: result.error });
     }

+ 3 - 14
src/actions/overview.ts

@@ -2,12 +2,10 @@
 
 import { getOverviewMetrics as getOverviewMetricsFromDB } from "@/repository/overview";
 import { getConcurrentSessions as getConcurrentSessionsCount } from "./concurrent-sessions";
-import { getActiveSessions as getActiveSessionsFromManager } from "./active-sessions";
 import { getSession } from "@/lib/auth";
 import { getSystemSettings } from "@/repository/system-config";
 import { logger } from "@/lib/logger";
 import type { ActionResult } from "./types";
-import type { ActiveSessionInfo } from "@/types/session";
 
 /**
  * 概览数据(包含并发数和今日统计)
@@ -21,13 +19,11 @@ export interface OverviewData {
   todayCost: number;
   /** 平均响应时间(毫秒) */
   avgResponseTime: number;
-  /** 最近活跃的Session列表(用于滚动展示) */
-  recentSessions: ActiveSessionInfo[];
 }
 
 /**
  * 获取概览数据(首页实时面板使用)
- * 权限控制:管理员或 allowGlobalUsageView=true 时显示全站数据
+ * 权限控制:管理员或 allowGlobalUsageView=true 时显示全站数据
  */
 export async function getOverviewData(): Promise<ActionResult<OverviewData>> {
   try {
@@ -45,21 +41,17 @@ export async function getOverviewData(): Promise<ActionResult<OverviewData>> {
     const canViewGlobalData = isAdmin || settings.allowGlobalUsageView;
 
     // 并行查询所有数据
-    const [concurrentResult, metricsData, sessionsResult] = await Promise.all([
+    const [concurrentResult, metricsData] = await Promise.all([
       getConcurrentSessionsCount(),
       getOverviewMetricsFromDB(),
-      getActiveSessionsFromManager(),
     ]);
 
     // 根据权限决定显示范围
     if (!canViewGlobalData) {
-      // 普通用户且无权限:仅显示自己的活跃 Session,全站指标设为 0
-      const recentSessions = sessionsResult.ok ? sessionsResult.data.slice(0, 10) : [];
-
+      // 普通用户且无权限:全站指标设为 0
       logger.debug("Overview: User without global view permission", {
         userId: session.user.id,
         userName: session.user.name,
-        ownSessionsCount: recentSessions.length,
       });
 
       return {
@@ -69,14 +61,12 @@ export async function getOverviewData(): Promise<ActionResult<OverviewData>> {
           todayRequests: 0, // 无权限时不显示全站请求数
           todayCost: 0, // 无权限时不显示全站消耗
           avgResponseTime: 0, // 无权限时不显示全站平均响应时间
-          recentSessions, // 仅显示自己的活跃 Session(getActiveSessions 已做权限过滤)
         },
       };
     }
 
     // 管理员或有权限:显示全站数据
     const concurrentSessions = concurrentResult.ok ? concurrentResult.data : 0;
-    const recentSessions = sessionsResult.ok ? sessionsResult.data.slice(0, 10) : [];
 
     logger.debug("Overview: User with global view permission", {
       userId: session.user.id,
@@ -92,7 +82,6 @@ export async function getOverviewData(): Promise<ActionResult<OverviewData>> {
         todayRequests: metricsData.todayRequests,
         todayCost: metricsData.todayCost,
         avgResponseTime: metricsData.avgResponseTime,
-        recentSessions,
       },
     };
   } catch (error) {

+ 599 - 10
src/actions/providers.ts

@@ -20,9 +20,23 @@ import {
   saveProviderCircuitConfig,
   deleteProviderCircuitConfig,
 } from "@/lib/redis/circuit-breaker-config";
-import { isValidProxyUrl } from "@/lib/proxy-agent";
+import {
+  createProxyAgentForProvider,
+  isValidProxyUrl,
+  type ProviderProxyConfig,
+} from "@/lib/proxy-agent";
 import { CodexInstructionsCache } from "@/lib/codex-instructions-cache";
 import { isClientAbortError } from "@/app/v1/_lib/proxy/errors";
+import { PROVIDER_TIMEOUT_DEFAULTS } from "@/lib/constants/provider.constants";
+import { GeminiAuth } from "@/app/v1/_lib/gemini/auth";
+
+// API 测试配置常量
+const API_TEST_CONFIG = {
+  TIMEOUT_MS: 10000, // 10 秒超时
+  MAX_RESPONSE_PREVIEW_LENGTH: 100, // 响应内容预览最大长度
+  TEST_MAX_TOKENS: 100, // 测试请求的最大 token 数
+  TEST_PROMPT: "Hello", // 测试请求的默认提示词
+} as const;
 
 // 获取服务商数据
 export async function getProviders(): Promise<ProviderDisplay[]> {
@@ -130,6 +144,9 @@ export async function getProviders(): Promise<ProviderDisplay[]> {
         circuitBreakerHalfOpenSuccessThreshold: provider.circuitBreakerHalfOpenSuccessThreshold,
         proxyUrl: provider.proxyUrl,
         proxyFallbackToDirect: provider.proxyFallbackToDirect,
+        firstByteTimeoutStreamingMs: provider.firstByteTimeoutStreamingMs,
+        streamingIdleTimeoutMs: provider.streamingIdleTimeoutMs,
+        requestTimeoutNonStreamingMs: provider.requestTimeoutNonStreamingMs,
         websiteUrl: provider.websiteUrl,
         faviconUrl: provider.faviconUrl,
         tpm: provider.tpm,
@@ -181,6 +198,9 @@ export async function addProvider(data: {
   circuit_breaker_half_open_success_threshold?: number;
   proxy_url?: string | null;
   proxy_fallback_to_direct?: boolean;
+  first_byte_timeout_streaming_ms?: number;
+  streaming_idle_timeout_ms?: number;
+  request_timeout_non_streaming_ms?: number;
   website_url?: string | null;
   codex_instructions_strategy?: "auto" | "force_official" | "keep_original";
   tpm: number | null;
@@ -198,7 +218,7 @@ export async function addProvider(data: {
       name: data.name,
       url: data.url,
       provider_type: data.provider_type,
-      proxy_url: data.proxy_url ? "***" : null,
+      proxy_url: data.proxy_url ? data.proxy_url.replace(/:\/\/[^@]*@/, "://***@") : null,
     });
 
     // 验证代理 URL 格式
@@ -241,6 +261,14 @@ export async function addProvider(data: {
         validated.circuit_breaker_half_open_success_threshold ?? 2,
       proxy_url: validated.proxy_url ?? null,
       proxy_fallback_to_direct: validated.proxy_fallback_to_direct ?? false,
+      first_byte_timeout_streaming_ms:
+        validated.first_byte_timeout_streaming_ms ??
+        PROVIDER_TIMEOUT_DEFAULTS.FIRST_BYTE_TIMEOUT_STREAMING_MS,
+      streaming_idle_timeout_ms:
+        validated.streaming_idle_timeout_ms ?? PROVIDER_TIMEOUT_DEFAULTS.STREAMING_IDLE_TIMEOUT_MS,
+      request_timeout_non_streaming_ms:
+        validated.request_timeout_non_streaming_ms ??
+        PROVIDER_TIMEOUT_DEFAULTS.REQUEST_TIMEOUT_NON_STREAMING_MS,
       website_url: validated.website_url ?? null,
       favicon_url: faviconUrl,
       tpm: validated.tpm ?? null,
@@ -308,6 +336,9 @@ export async function editProvider(
     circuit_breaker_half_open_success_threshold?: number;
     proxy_url?: string | null;
     proxy_fallback_to_direct?: boolean;
+    first_byte_timeout_streaming_ms?: number;
+    streaming_idle_timeout_ms?: number;
+    request_timeout_non_streaming_ms?: number;
     website_url?: string | null;
     codex_instructions_strategy?: "auto" | "force_official" | "keep_original";
     tpm?: number | null;
@@ -606,6 +637,18 @@ export async function testProviderProxy(data: {
       return { ok: false, error: "无权限执行此操作" };
     }
 
+    const providerUrlValidation = validateProviderUrlForConnectivity(data.providerUrl);
+    if (!providerUrlValidation.valid) {
+      return {
+        ok: true,
+        data: {
+          success: false,
+          message: providerUrlValidation.error.message,
+          details: providerUrlValidation.error.details,
+        },
+      };
+    }
+
     // 验证代理 URL 格式
     if (data.proxyUrl && !isValidProxyUrl(data.proxyUrl)) {
       return {
@@ -623,16 +666,14 @@ export async function testProviderProxy(data: {
 
     const startTime = Date.now();
 
-    // 导入代理工厂函数
-    const { createProxyAgentForProvider } = await import("@/lib/proxy-agent");
-
     // 构造临时 Provider 对象(用于创建代理 agent)
-    const tempProvider = {
+    // 使用类型安全的 ProviderProxyConfig 接口,避免 any
+    const tempProvider: ProviderProxyConfig = {
       id: -1,
-      proxyUrl: data.proxyUrl,
+      name: "test-connection",
+      proxyUrl: data.proxyUrl ?? null,
       proxyFallbackToDirect: data.proxyFallbackToDirect ?? false,
-      // eslint-disable-next-line @typescript-eslint/no-explicit-any
-    } as any;
+    };
 
     try {
       // 创建代理配置
@@ -645,7 +686,7 @@ export async function testProviderProxy(data: {
 
       const init: UndiciFetchOptions = {
         method: "HEAD", // 使用 HEAD 请求,减少流量
-        signal: AbortSignal.timeout(5000), // 5 秒超时
+        signal: AbortSignal.timeout(API_TEST_CONFIG.TIMEOUT_MS),
       };
 
       // 应用代理配置
@@ -741,3 +782,551 @@ export async function getUnmaskedProviderKey(id: number): Promise<ActionResult<{
     return { ok: false, error: message };
   }
 }
+
+type ProviderApiTestArgs = {
+  providerUrl: string;
+  apiKey: string;
+  model?: string;
+  proxyUrl?: string | null;
+  proxyFallbackToDirect?: boolean;
+};
+
+type ProviderApiTestResult = ActionResult<
+  | {
+      success: true;
+      message: string;
+      details?: {
+        responseTime?: number;
+        model?: string;
+        usage?: Record<string, unknown>;
+        content?: string;
+      };
+    }
+  | {
+      success: false;
+      message: string;
+      details?: {
+        responseTime?: number;
+        error?: string;
+      };
+    }
+>;
+
+// Anthropic Messages API 响应类型
+type AnthropicMessagesResponse = {
+  id: string;
+  type: "message";
+  role: "assistant";
+  model: string;
+  content: Array<{ type: "text"; text: string }>;
+  stop_reason: string;
+  usage: {
+    input_tokens: number;
+    output_tokens: number;
+    cache_creation_input_tokens?: number;
+    cache_read_input_tokens?: number;
+  };
+};
+
+// OpenAI Chat Completions API 响应类型
+type OpenAIChatResponse = {
+  id: string;
+  object: "chat.completion";
+  created: number;
+  model: string;
+  choices: Array<{
+    index: number;
+    message: {
+      role: "assistant";
+      content: string;
+    };
+    finish_reason: string;
+  }>;
+  usage: {
+    prompt_tokens: number;
+    completion_tokens: number;
+    total_tokens: number;
+    reasoning_tokens?: number;
+  };
+};
+
+// OpenAI Responses API 响应类型
+type OpenAIResponsesResponse = {
+  id: string;
+  object: "response";
+  created_at: number;
+  model: string;
+  output: Array<{
+    type: "message";
+    id: string;
+    status: string;
+    role: "assistant";
+    content: Array<{
+      type: "output_text";
+      text: string;
+      annotations?: unknown[];
+    }>;
+  }>;
+  usage: {
+    input_tokens: number;
+    output_tokens: number;
+    total_tokens: number;
+  };
+};
+
+// Gemini API 响应类型
+type GeminiResponse = {
+  candidates?: Array<{
+    content?: {
+      parts?: Array<{ text?: string }>;
+    };
+    finishReason?: string;
+  }>;
+  usageMetadata?: {
+    promptTokenCount?: number;
+    candidatesTokenCount?: number;
+    totalTokenCount?: number;
+  };
+  error?: {
+    code: number;
+    message: string;
+    status: string;
+  };
+};
+
+// 联合类型:所有支持的 API 响应格式
+type ProviderApiResponse =
+  | AnthropicMessagesResponse
+  | OpenAIChatResponse
+  | OpenAIResponsesResponse
+  | GeminiResponse;
+
+function extractFirstTextSnippet(
+  response: ProviderApiResponse,
+  maxLength?: number
+): string | undefined {
+  const limit = maxLength ?? API_TEST_CONFIG.MAX_RESPONSE_PREVIEW_LENGTH;
+
+  // Anthropic Messages API
+  if ("content" in response && Array.isArray(response.content)) {
+    const firstText = response.content.find((item) => item.type === "text");
+    if (firstText && "text" in firstText) {
+      return firstText.text.substring(0, limit);
+    }
+  }
+
+  // OpenAI Chat Completions API
+  if ("choices" in response && Array.isArray(response.choices)) {
+    const firstChoice = response.choices[0];
+    if (firstChoice?.message?.content) {
+      return firstChoice.message.content.substring(0, limit);
+    }
+  }
+
+  // OpenAI Responses API
+  if ("output" in response && Array.isArray(response.output)) {
+    const firstOutput = response.output[0];
+    if (firstOutput?.type === "message" && Array.isArray(firstOutput.content)) {
+      const textContent = firstOutput.content.find((c) => c.type === "output_text");
+      if (textContent && "text" in textContent) {
+        return textContent.text.substring(0, limit);
+      }
+    }
+  }
+
+  // Gemini API
+  if ("candidates" in response && Array.isArray(response.candidates)) {
+    const firstCandidate = response.candidates[0];
+    if (firstCandidate?.content?.parts?.[0]?.text) {
+      return firstCandidate.content.parts[0].text.substring(0, limit);
+    }
+  }
+
+  return undefined;
+}
+
+function clipText(value: unknown, maxLength?: number): string | undefined {
+  const limit = maxLength ?? API_TEST_CONFIG.MAX_RESPONSE_PREVIEW_LENGTH;
+  return typeof value === "string" ? value.substring(0, limit) : undefined;
+}
+
+type ProviderUrlValidationError = {
+  message: string;
+  details: {
+    error: string;
+    errorType: "InvalidProviderUrl" | "BlockedUrl" | "BlockedPort";
+  };
+};
+
+function validateProviderUrlForConnectivity(
+  providerUrl: string
+): { valid: true; normalizedUrl: string } | { valid: false; error: ProviderUrlValidationError } {
+  const trimmedUrl = providerUrl.trim();
+
+  try {
+    const parsedProviderUrl = new URL(trimmedUrl);
+
+    if (!["https:", "http:"].includes(parsedProviderUrl.protocol)) {
+      return {
+        valid: false,
+        error: {
+          message: "供应商地址格式无效",
+          details: {
+            error: "仅支持 HTTP 和 HTTPS 协议",
+            errorType: "InvalidProviderUrl",
+          },
+        },
+      };
+    }
+
+    const hostname = parsedProviderUrl.hostname.toLowerCase();
+    const blockedPatterns = [
+      /^localhost$/i,
+      /^127\.\d+\.\d+\.\d+$/,
+      /^10\.\d+\.\d+\.\d+$/,
+      /^172\.(1[6-9]|2\d|3[01])\.\d+\.\d+$/,
+      /^192\.168\.\d+\.\d+$/,
+      /^169\.254\.\d+\.\d+$/,
+      /^::1$/,
+      /^fe80:/i,
+      /^fc00:/i,
+      /^fd00:/i,
+    ];
+
+    if (blockedPatterns.some((pattern) => pattern.test(hostname))) {
+      return {
+        valid: false,
+        error: {
+          message: "供应商地址安全检查失败",
+          details: {
+            error: "不允许访问内部网络地址",
+            errorType: "BlockedUrl",
+          },
+        },
+      };
+    }
+
+    const port = parsedProviderUrl.port ? parseInt(parsedProviderUrl.port, 10) : null;
+    const dangerousPorts = [22, 23, 25, 3306, 5432, 6379, 27017, 9200];
+    if (port && dangerousPorts.includes(port)) {
+      return {
+        valid: false,
+        error: {
+          message: "供应商地址端口检查失败",
+          details: {
+            error: "不允许访问内部服务端口",
+            errorType: "BlockedPort",
+          },
+        },
+      };
+    }
+
+    return { valid: true, normalizedUrl: trimmedUrl };
+  } catch (error) {
+    return {
+      valid: false,
+      error: {
+        message: "供应商地址格式无效",
+        details: {
+          error: error instanceof Error ? error.message : "URL 解析失败",
+          errorType: "InvalidProviderUrl",
+        },
+      },
+    };
+  }
+}
+
+async function executeProviderApiTest(
+  data: ProviderApiTestArgs,
+  options: {
+    path: string | ((model: string, apiKey: string) => string);
+    defaultModel: string;
+    headers: (apiKey: string) => Record<string, string>;
+    body: (model: string) => unknown;
+    successMessage: string;
+    extract: (result: ProviderApiResponse) => {
+      model?: string;
+      usage?: Record<string, unknown>;
+      content?: string;
+    };
+  }
+): Promise<ProviderApiTestResult> {
+  try {
+    const session = await getSession();
+    if (!session || session.user.role !== "admin") {
+      return { ok: false, error: "无权限执行此操作" };
+    }
+
+    if (data.proxyUrl && !isValidProxyUrl(data.proxyUrl)) {
+      return {
+        ok: true,
+        data: {
+          success: false,
+          message: "代理地址格式无效",
+          details: {
+            error: "支持格式: http://, https://, socks5://, socks4://",
+          },
+        },
+      };
+    }
+
+    const providerUrlValidation = validateProviderUrlForConnectivity(data.providerUrl);
+    if (!providerUrlValidation.valid) {
+      return {
+        ok: true,
+        data: {
+          success: false,
+          message: providerUrlValidation.error.message,
+          details: providerUrlValidation.error.details,
+        },
+      };
+    }
+
+    const normalizedProviderUrl = providerUrlValidation.normalizedUrl.replace(/\/$/, "");
+
+    const startTime = Date.now();
+
+    const tempProvider: ProviderProxyConfig = {
+      id: -1,
+      name: "api-test",
+      proxyUrl: data.proxyUrl ?? null,
+      proxyFallbackToDirect: data.proxyFallbackToDirect ?? false,
+    };
+
+    const model = data.model || options.defaultModel;
+    const path =
+      typeof options.path === "function" ? options.path(model, data.apiKey) : options.path;
+    const url = normalizedProviderUrl + path;
+
+    try {
+      const proxyConfig = createProxyAgentForProvider(tempProvider, url);
+
+      interface UndiciFetchOptions extends RequestInit {
+        dispatcher?: unknown;
+      }
+
+      const init: UndiciFetchOptions = {
+        method: "POST",
+        headers: {
+          ...options.headers(data.apiKey),
+          "User-Agent": "claude-cli/2.0.33 (external, cli)",
+        },
+        body: JSON.stringify(options.body(model)),
+        signal: AbortSignal.timeout(API_TEST_CONFIG.TIMEOUT_MS),
+      };
+
+      if (proxyConfig) {
+        init.dispatcher = proxyConfig.agent;
+      }
+
+      const response = await fetch(url, init);
+      const responseTime = Date.now() - startTime;
+
+      if (!response.ok) {
+        const errorText = await response.text();
+        let errorDetail: string | undefined;
+        try {
+          const errorJson = JSON.parse(errorText);
+          errorDetail = errorJson.error?.message || errorJson.message;
+        } catch {
+          errorDetail = undefined;
+        }
+
+        logger.error("Provider API test failed", {
+          providerUrl: normalizedProviderUrl.replace(/:\/\/[^@]*@/, "://***@"),
+          path: typeof options.path === "string" ? options.path : "dynamic",
+          status: response.status,
+          errorDetail: errorDetail ?? clipText(errorText, 200),
+        });
+
+        return {
+          ok: true,
+          data: {
+            success: false,
+            message: `API 返回错误: HTTP ${response.status}`,
+            details: {
+              responseTime,
+              error: "API 请求失败,查看日志以获得更多信息",
+            },
+          },
+        };
+      }
+
+      const result = (await response.json()) as ProviderApiResponse;
+      const extracted = options.extract(result);
+
+      return {
+        ok: true,
+        data: {
+          success: true,
+          message: options.successMessage,
+          details: {
+            responseTime,
+            ...extracted,
+          },
+        },
+      };
+    } catch (error) {
+      const responseTime = Date.now() - startTime;
+      const err = error as Error & { code?: string };
+
+      return {
+        ok: true,
+        data: {
+          success: false,
+          message: `连接失败: ${err.message}`,
+          details: {
+            responseTime,
+            error: err.message,
+          },
+        },
+      };
+    }
+  } catch (error) {
+    logger.error("测试供应商 API 失败:", error);
+    const message = error instanceof Error ? error.message : "测试失败";
+    return { ok: false, error: message };
+  }
+}
+
+/**
+ * 测试 Anthropic Messages API 连通性
+ */
+export async function testProviderAnthropicMessages(
+  data: ProviderApiTestArgs
+): Promise<ProviderApiTestResult> {
+  return executeProviderApiTest(data, {
+    path: "/v1/messages",
+    defaultModel: "claude-sonnet-4-5-20250929",
+    headers: (apiKey) => ({
+      "Content-Type": "application/json",
+      "anthropic-version": "2023-06-01",
+      "x-api-key": apiKey,
+    }),
+    body: (model) => ({
+      model,
+      max_tokens: API_TEST_CONFIG.TEST_MAX_TOKENS,
+      messages: [{ role: "user", content: API_TEST_CONFIG.TEST_PROMPT }],
+    }),
+    successMessage: "Anthropic Messages API 测试成功",
+    extract: (result) => ({
+      model: "model" in result ? result.model : undefined,
+      usage: "usage" in result ? (result.usage as Record<string, unknown>) : undefined,
+      content: extractFirstTextSnippet(result),
+    }),
+  });
+}
+
+/**
+ * 测试 OpenAI Chat Completions API 连通性
+ */
+export async function testProviderOpenAIChatCompletions(
+  data: ProviderApiTestArgs
+): Promise<ProviderApiTestResult> {
+  return executeProviderApiTest(data, {
+    path: "/v1/chat/completions",
+    defaultModel: "gpt-5.1-codex",
+    headers: (apiKey) => ({
+      "Content-Type": "application/json",
+      Authorization: `Bearer ${apiKey}`,
+    }),
+    body: (model) => ({
+      model,
+      max_tokens: API_TEST_CONFIG.TEST_MAX_TOKENS,
+      messages: [
+        { role: "developer", content: "你是一个有帮助的助手。" },
+        { role: "user", content: "你好" },
+      ],
+    }),
+    successMessage: "OpenAI Chat Completions API 测试成功",
+    extract: (result) => ({
+      model: "model" in result ? result.model : undefined,
+      usage: "usage" in result ? (result.usage as Record<string, unknown>) : undefined,
+      content: extractFirstTextSnippet(result),
+    }),
+  });
+}
+
+/**
+ * 测试 OpenAI Responses API 连通性
+ */
+export async function testProviderOpenAIResponses(
+  data: ProviderApiTestArgs
+): Promise<ProviderApiTestResult> {
+  return executeProviderApiTest(data, {
+    path: "/v1/responses",
+    defaultModel: "gpt-5.1-codex",
+    headers: (apiKey) => ({
+      "Content-Type": "application/json",
+      Authorization: `Bearer ${apiKey}`,
+    }),
+    body: (model) => ({
+      model,
+      max_tokens: API_TEST_CONFIG.TEST_MAX_TOKENS,
+      input: "讲一个简短的故事",
+    }),
+    successMessage: "OpenAI Responses API 测试成功",
+    extract: (result) => ({
+      model: "model" in result ? result.model : undefined,
+      usage: "usage" in result ? (result.usage as Record<string, unknown>) : undefined,
+      content: extractFirstTextSnippet(result),
+    }),
+  });
+}
+
+/**
+ * 测试 Gemini API 连通性
+ */
+export async function testProviderGemini(
+  data: ProviderApiTestArgs
+): Promise<ProviderApiTestResult> {
+  // 预处理 Auth,如果是 API Key 保持原样,如果是 JSON 则解析 Access Token
+  let processedApiKey = data.apiKey;
+  let isJsonCreds = false;
+
+  try {
+    // 使用 GeminiAuth 获取 token (如果是 json 凭证)
+    processedApiKey = await GeminiAuth.getAccessToken(data.apiKey);
+    isJsonCreds = GeminiAuth.isJson(data.apiKey);
+  } catch (e) {
+    // 忽略错误,让后续请求失败
+    logger.warn("testProviderGemini:auth_process_failed", { error: e });
+  }
+
+  return executeProviderApiTest(
+    { ...data, apiKey: processedApiKey },
+    {
+      path: (model, apiKey) => {
+        if (!isJsonCreds) {
+          return `/v1beta/models/${model}:generateContent?key=${apiKey}`;
+        }
+        return `/v1beta/models/${model}:generateContent`;
+      },
+      defaultModel: "gemini-1.5-pro",
+      headers: (apiKey) => {
+        const headers: Record<string, string> = {
+          "Content-Type": "application/json",
+        };
+        if (isJsonCreds) {
+          headers["Authorization"] = `Bearer ${apiKey}`;
+        }
+        return headers;
+      },
+      body: (model) => ({
+        contents: [{ parts: [{ text: API_TEST_CONFIG.TEST_PROMPT }] }],
+        generationConfig: {
+          maxOutputTokens: API_TEST_CONFIG.TEST_MAX_TOKENS,
+        },
+      }),
+      successMessage: "Gemini API 测试成功",
+      extract: (result) => {
+        const geminiResult = result as GeminiResponse;
+        return {
+          model: undefined,
+          usage: geminiResult.usageMetadata as Record<string, unknown>,
+          content: extractFirstTextSnippet(geminiResult),
+        };
+      },
+    }
+  );
+}

+ 49 - 0
src/actions/rate-limit-stats.ts

@@ -0,0 +1,49 @@
+"use server";
+
+import { getSession } from "@/lib/auth";
+import { logger } from "@/lib/logger";
+import { getRateLimitEventStats } from "@/repository/statistics";
+import type { RateLimitEventFilters, RateLimitEventStats } from "@/types/statistics";
+import type { ActionResult } from "./types";
+
+/**
+ * 获取限流事件统计数据(仅管理员)
+ *
+ * @param filters 过滤条件(用户ID、供应商ID、限流类型、时间范围等)
+ * @returns 限流事件统计结果
+ */
+export async function getRateLimitStats(
+  filters: RateLimitEventFilters = {}
+): Promise<ActionResult<RateLimitEventStats>> {
+  try {
+    const session = await getSession();
+
+    // 仅管理员可访问
+    if (!session || session.user.role !== "admin") {
+      return {
+        ok: false,
+        error: "Unauthorized - Admin access required",
+      };
+    }
+
+    // 调用 repository 方法获取统计数据
+    const stats = await getRateLimitEventStats(filters);
+
+    logger.info("Rate limit statistics retrieved", {
+      userId: session.user.id,
+      filters,
+      totalEvents: stats.total_events,
+    });
+
+    return {
+      ok: true,
+      data: stats,
+    };
+  } catch (error) {
+    logger.error("Failed to get rate limit statistics", { error, filters });
+    return {
+      ok: false,
+      error: error instanceof Error ? error.message : "Failed to get rate limit statistics",
+    };
+  }
+}

+ 1 - 1
src/actions/session-response.ts

@@ -10,7 +10,7 @@ import { logger } from "@/lib/logger";
  * @param sessionId - Session ID
  * @returns 响应体内容或错误信息
  *
- * 安全修复:添加用户权限检查
+ * 安全修复:添加用户权限检查
  */
 export async function getSessionResponse(
   sessionId: string

+ 64 - 58
src/actions/users.ts

@@ -15,6 +15,7 @@ import type { ActionResult } from "./types";
 import { ERROR_CODES } from "@/lib/utils/error-messages";
 import { formatZodError } from "@/lib/utils/zod-i18n";
 import { getTranslations, getLocale } from "next-intl/server";
+import { getUnauthorizedFields } from "@/lib/permissions/user-field-permissions";
 
 // 获取用户数据
 export async function getUsers(): Promise<UserDisplay[]> {
@@ -64,6 +65,10 @@ export async function getUsers(): Promise<UserDisplay[]> {
             rpm: user.rpm,
             dailyQuota: user.dailyQuota,
             providerGroup: user.providerGroup || undefined,
+            limit5hUsd: user.limit5hUsd ?? null,
+            limitWeeklyUsd: user.limitWeeklyUsd ?? null,
+            limitMonthlyUsd: user.limitMonthlyUsd ?? null,
+            limitConcurrentSessions: user.limitConcurrentSessions ?? null,
             keys: keys.map((key) => {
               const stats = statisticsMap.get(key.id);
               // 用户可以查看和复制自己的密钥,管理员可以查看和复制所有密钥
@@ -112,6 +117,10 @@ export async function getUsers(): Promise<UserDisplay[]> {
             rpm: user.rpm,
             dailyQuota: user.dailyQuota,
             providerGroup: user.providerGroup || undefined,
+            limit5hUsd: user.limit5hUsd ?? null,
+            limitWeeklyUsd: user.limitWeeklyUsd ?? null,
+            limitMonthlyUsd: user.limitMonthlyUsd ?? null,
+            limitConcurrentSessions: user.limitConcurrentSessions ?? null,
             keys: [],
           };
         }
@@ -132,6 +141,10 @@ export async function addUser(data: {
   providerGroup?: string | null;
   rpm?: number;
   dailyQuota?: number;
+  limit5hUsd?: number | null;
+  limitWeeklyUsd?: number | null;
+  limitMonthlyUsd?: number | null;
+  limitConcurrentSessions?: number | null;
 }): Promise<ActionResult> {
   try {
     // Get translations for error messages
@@ -154,6 +167,10 @@ export async function addUser(data: {
       providerGroup: data.providerGroup || "",
       rpm: data.rpm || USER_DEFAULTS.RPM,
       dailyQuota: data.dailyQuota || USER_DEFAULTS.DAILY_QUOTA,
+      limit5hUsd: data.limit5hUsd,
+      limitWeeklyUsd: data.limitWeeklyUsd,
+      limitMonthlyUsd: data.limitMonthlyUsd,
+      limitConcurrentSessions: data.limitConcurrentSessions,
     });
 
     if (!validationResult.success) {
@@ -172,6 +189,10 @@ export async function addUser(data: {
       providerGroup: validatedData.providerGroup || null,
       rpm: validatedData.rpm,
       dailyQuota: validatedData.dailyQuota,
+      limit5hUsd: validatedData.limit5hUsd ?? undefined,
+      limitWeeklyUsd: validatedData.limitWeeklyUsd ?? undefined,
+      limitMonthlyUsd: validatedData.limitMonthlyUsd ?? undefined,
+      limitConcurrentSessions: validatedData.limitConcurrentSessions ?? undefined,
     });
 
     // 为新用户创建默认密钥
@@ -207,6 +228,10 @@ export async function editUser(
     providerGroup?: string | null;
     rpm?: number;
     dailyQuota?: number;
+    limit5hUsd?: number | null;
+    limitWeeklyUsd?: number | null;
+    limitMonthlyUsd?: number | null;
+    limitConcurrentSessions?: number | null;
   }
 ): Promise<ActionResult> {
   try {
@@ -222,64 +247,32 @@ export async function editUser(
       };
     }
 
-    // 定义敏感字段列表(仅管理员可修改)
-    const sensitiveFields = ["rpm", "dailyQuota", "providerGroup"] as const;
-    const hasSensitiveFields = sensitiveFields.some((field) => data[field] !== undefined);
-
-    // 权限检查:区分三种情况
-    if (session.user.role === "admin") {
-      // 管理员可以修改所有用户的所有字段
-      const validationResult = UpdateUserSchema.safeParse(data);
-
-      if (!validationResult.success) {
-        return {
-          ok: false,
-          error: formatZodError(validationResult.error),
-          errorCode: ERROR_CODES.INVALID_FORMAT,
-        };
-      }
-
-      const validatedData = validationResult.data;
-
-      await updateUser(userId, {
-        name: validatedData.name,
-        description: validatedData.note,
-        providerGroup: validatedData.providerGroup,
-        rpm: validatedData.rpm,
-        dailyQuota: validatedData.dailyQuota,
-      });
-    } else if (session.user.id === userId) {
-      // 普通用户修改自己的信息
-      if (hasSensitiveFields) {
-        return {
-          ok: false,
-          error: tError("USER_CANNOT_MODIFY_SENSITIVE_FIELDS"),
-          errorCode: ERROR_CODES.PERMISSION_DENIED,
-        };
-      }
-
-      // 仅允许修改非敏感字段(name, description)
-      const validationResult = UpdateUserSchema.safeParse({
-        name: data.name,
-        note: data.note,
-      });
-
-      if (!validationResult.success) {
-        return {
-          ok: false,
-          error: formatZodError(validationResult.error),
-          errorCode: ERROR_CODES.INVALID_FORMAT,
-        };
-      }
-
-      const validatedData = validationResult.data;
-
-      await updateUser(userId, {
-        name: validatedData.name,
-        description: validatedData.note,
-      });
-    } else {
-      // 普通用户尝试修改他人信息
+    // Validate data with Zod first
+    const validationResult = UpdateUserSchema.safeParse(data);
+
+    if (!validationResult.success) {
+      return {
+        ok: false,
+        error: formatZodError(validationResult.error),
+        errorCode: ERROR_CODES.INVALID_FORMAT,
+      };
+    }
+
+    const validatedData = validationResult.data;
+
+    // Permission check: Get unauthorized fields based on user role
+    const unauthorizedFields = getUnauthorizedFields(validatedData, session.user.role);
+
+    if (unauthorizedFields.length > 0) {
+      return {
+        ok: false,
+        error: tError("PERMISSION_DENIED") + `: ${unauthorizedFields.join(", ")}`,
+        errorCode: ERROR_CODES.PERMISSION_DENIED,
+      };
+    }
+
+    // Additional check: Non-admin users can only modify their own data
+    if (session.user.role !== "admin" && session.user.id !== userId) {
       return {
         ok: false,
         error: tError("PERMISSION_DENIED"),
@@ -287,6 +280,19 @@ export async function editUser(
       };
     }
 
+    // Update user with validated data
+    await updateUser(userId, {
+      name: validatedData.name,
+      description: validatedData.note,
+      providerGroup: validatedData.providerGroup,
+      rpm: validatedData.rpm,
+      dailyQuota: validatedData.dailyQuota,
+      limit5hUsd: validatedData.limit5hUsd ?? undefined,
+      limitWeeklyUsd: validatedData.limitWeeklyUsd ?? undefined,
+      limitMonthlyUsd: validatedData.limitMonthlyUsd ?? undefined,
+      limitConcurrentSessions: validatedData.limitConcurrentSessions ?? undefined,
+    });
+
     revalidatePath("/dashboard");
     return { ok: true };
   } catch (error) {

+ 1 - 5
src/app/[locale]/dashboard/_components/dashboard-header.tsx

@@ -21,13 +21,9 @@ export function DashboardHeader({ session }: DashboardHeaderProps) {
     { href: "/dashboard/logs", label: t("usageLogs") },
     { href: "/dashboard/leaderboard", label: t("leaderboard") },
     { href: "/dashboard/quotas", label: t("quotasManagement") },
+    { href: "/dashboard/users", label: t("userManagement") },
     { href: "/usage-doc", label: t("documentation") },
     { href: "/settings", label: t("systemSettings"), adminOnly: true },
-    {
-      href: "https://github.com/ding113/claude-code-hub/issues",
-      label: t("feedback"),
-      external: true,
-    },
   ];
 
   const items = NAV_ITEMS.filter((item) => !item.adminOnly || isAdmin);

+ 131 - 0
src/app/[locale]/dashboard/_components/rate-limit-events-chart.tsx

@@ -0,0 +1,131 @@
+"use client";
+
+import * as React from "react";
+import { Area, AreaChart, CartesianGrid, XAxis, YAxis } from "recharts";
+import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card";
+import { ChartConfig, ChartContainer, ChartTooltip } from "@/components/ui/chart";
+import type { EventTimeline } from "@/types/statistics";
+import { useTranslations } from "next-intl";
+
+export interface RateLimitEventsChartProps {
+  data: EventTimeline[];
+}
+
+const chartConfig = {
+  count: {
+    label: "限流事件数",
+    color: "hsl(var(--chart-1))",
+  },
+} satisfies ChartConfig;
+
+/**
+ * 限流事件时间线图表
+ * 使用 Recharts AreaChart 显示小时级别的限流事件趋势
+ */
+export function RateLimitEventsChart({ data }: RateLimitEventsChartProps) {
+  const t = useTranslations("dashboard.rateLimits.chart");
+
+  // 格式化小时显示
+  const formatHour = (hourStr: string) => {
+    const date = new Date(hourStr);
+    return date.toLocaleTimeString("zh-CN", {
+      month: "numeric",
+      day: "numeric",
+      hour: "2-digit",
+      minute: "2-digit",
+    });
+  };
+
+  // 格式化 tooltip 显示
+  const formatTooltipHour = (hourStr: string) => {
+    const date = new Date(hourStr);
+    return date.toLocaleString("zh-CN", {
+      year: "numeric",
+      month: "long",
+      day: "numeric",
+      hour: "2-digit",
+      minute: "2-digit",
+    });
+  };
+
+  // 计算总事件数
+  const totalEvents = React.useMemo(() => {
+    return data.reduce((sum, item) => sum + item.count, 0);
+  }, [data]);
+
+  return (
+    <Card>
+      <CardHeader>
+        <CardTitle>{t("title")}</CardTitle>
+        <CardDescription>
+          {t("description")} · {t("total")}: {totalEvents.toLocaleString()}
+        </CardDescription>
+      </CardHeader>
+      <CardContent>
+        <ChartContainer config={chartConfig} className="aspect-auto h-[280px] w-full">
+          <AreaChart
+            data={data}
+            margin={{
+              left: 12,
+              right: 12,
+            }}
+          >
+            <defs>
+              <linearGradient id="fillCount" x1="0" y1="0" x2="0" y2="1">
+                <stop offset="5%" stopColor="var(--color-count)" stopOpacity={0.8} />
+                <stop offset="95%" stopColor="var(--color-count)" stopOpacity={0.1} />
+              </linearGradient>
+            </defs>
+            <CartesianGrid vertical={false} />
+            <XAxis
+              dataKey="hour"
+              tickLine={false}
+              axisLine={false}
+              tickMargin={8}
+              tickFormatter={formatHour}
+            />
+            <YAxis
+              tickLine={false}
+              axisLine={false}
+              tickMargin={8}
+              tickFormatter={(value) => value.toLocaleString()}
+            />
+            <ChartTooltip
+              cursor={false}
+              content={({ active, payload }) => {
+                if (!active || !payload || !payload.length) return null;
+
+                const data = payload[0].payload as EventTimeline;
+
+                return (
+                  <div className="rounded-lg border bg-background p-3 shadow-sm">
+                    <div className="grid gap-2">
+                      <div className="font-medium text-center">{formatTooltipHour(data.hour)}</div>
+                      <div className="flex items-center justify-between gap-3">
+                        <div className="flex items-center gap-2">
+                          <div
+                            className="h-2 w-2 rounded-full"
+                            style={{ backgroundColor: "var(--color-count)" }}
+                          />
+                          <span className="font-medium">{t("events")}:</span>
+                        </div>
+                        <span className="ml-auto font-mono">{data.count.toLocaleString()}</span>
+                      </div>
+                    </div>
+                  </div>
+                );
+              }}
+            />
+            <Area
+              dataKey="count"
+              type="monotone"
+              fill="url(#fillCount)"
+              stroke="var(--color-count)"
+              strokeWidth={2}
+            />
+          </AreaChart>
+        </ChartContainer>
+      </CardContent>
+    </Card>
+  );
+}

+ 150 - 0
src/app/[locale]/dashboard/_components/rate-limit-top-users.tsx

@@ -0,0 +1,150 @@
+"use client";
+
+import * as React from "react";
+import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card";
+import {
+  Table,
+  TableBody,
+  TableCell,
+  TableHead,
+  TableHeader,
+  TableRow,
+} from "@/components/ui/table";
+import { getUsers } from "@/actions/users";
+import { useTranslations } from "next-intl";
+import { ArrowUpDown } from "lucide-react";
+import { Button } from "@/components/ui/button";
+
+export interface RateLimitTopUsersProps {
+  data: Record<number, number>;
+}
+
+type SortField = "name" | "count";
+type SortDirection = "asc" | "desc";
+
+/**
+ * 受影响用户排行榜
+ * 显示触发限流最多的用户列表
+ */
+export function RateLimitTopUsers({ data }: RateLimitTopUsersProps) {
+  const t = useTranslations("dashboard.rateLimits.topUsers");
+  const [users, setUsers] = React.useState<Array<{ id: number; name: string }>>([]);
+  const [loading, setLoading] = React.useState(true);
+  const [sortField, setSortField] = React.useState<SortField>("count");
+  const [sortDirection, setSortDirection] = React.useState<SortDirection>("desc");
+
+  // 加载用户详情
+  React.useEffect(() => {
+    getUsers().then((userList) => {
+      setUsers(userList);
+      setLoading(false);
+    });
+  }, []);
+
+  // 组合数据:用户信息 + 事件计数
+  const tableData = React.useMemo(() => {
+    const userMap = new Map(users.map((u) => [u.id, u.name]));
+
+    return Object.entries(data)
+      .map(([userId, count]) => ({
+        userId: Number(userId),
+        username: userMap.get(Number(userId)) || `User #${userId}`,
+        eventCount: count,
+      }))
+      .sort((a, b) => {
+        if (sortField === "name") {
+          const comparison = a.username.localeCompare(b.username, "zh-CN");
+          return sortDirection === "asc" ? comparison : -comparison;
+        } else {
+          const comparison = a.eventCount - b.eventCount;
+          return sortDirection === "asc" ? comparison : -comparison;
+        }
+      });
+  }, [users, data, sortField, sortDirection]);
+
+  // 切换排序
+  const toggleSort = (field: SortField) => {
+    if (sortField === field) {
+      setSortDirection(sortDirection === "asc" ? "desc" : "asc");
+    } else {
+      setSortField(field);
+      setSortDirection(field === "count" ? "desc" : "asc");
+    }
+  };
+
+  const totalEvents = React.useMemo(() => {
+    return Object.values(data).reduce((sum, count) => sum + count, 0);
+  }, [data]);
+
+  return (
+    <Card>
+      <CardHeader>
+        <CardTitle>{t("title")}</CardTitle>
+        <CardDescription>
+          {t("description")} · {t("total")}: {totalEvents.toLocaleString()}
+        </CardDescription>
+      </CardHeader>
+      <CardContent>
+        {loading ? (
+          <div className="flex h-[280px] items-center justify-center text-muted-foreground">
+            {t("loading")}
+          </div>
+        ) : tableData.length === 0 ? (
+          <div className="flex h-[280px] items-center justify-center text-muted-foreground">
+            {t("noData")}
+          </div>
+        ) : (
+          <div className="relative max-h-[280px] overflow-auto">
+            <Table>
+              <TableHeader>
+                <TableRow>
+                  <TableHead className="w-[60px]">{t("rank")}</TableHead>
+                  <TableHead>
+                    <Button
+                      variant="ghost"
+                      size="sm"
+                      className="h-8 px-2"
+                      onClick={() => toggleSort("name")}
+                    >
+                      {t("username")}
+                      <ArrowUpDown className="ml-1 h-3 w-3" />
+                    </Button>
+                  </TableHead>
+                  <TableHead className="text-right">
+                    <Button
+                      variant="ghost"
+                      size="sm"
+                      className="h-8 px-2"
+                      onClick={() => toggleSort("count")}
+                    >
+                      {t("eventCount")}
+                      <ArrowUpDown className="ml-1 h-3 w-3" />
+                    </Button>
+                  </TableHead>
+                  <TableHead className="text-right w-[100px]">{t("percentage")}</TableHead>
+                </TableRow>
+              </TableHeader>
+              <TableBody>
+                {tableData.map((row, index) => {
+                  const percentage = ((row.eventCount / totalEvents) * 100).toFixed(1);
+                  return (
+                    <TableRow key={row.userId}>
+                      <TableCell className="font-medium">#{index + 1}</TableCell>
+                      <TableCell>{row.username}</TableCell>
+                      <TableCell className="text-right font-mono">
+                        {row.eventCount.toLocaleString()}
+                      </TableCell>
+                      <TableCell className="text-right font-mono text-muted-foreground">
+                        {percentage}%
+                      </TableCell>
+                    </TableRow>
+                  );
+                })}
+              </TableBody>
+            </Table>
+          </div>
+        )}
+      </CardContent>
+    </Card>
+  );
+}

+ 137 - 0
src/app/[locale]/dashboard/_components/rate-limit-type-breakdown.tsx

@@ -0,0 +1,137 @@
+"use client";
+
+import * as React from "react";
+import { Pie, PieChart, Cell, Legend } from "recharts";
+import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card";
+import { ChartConfig, ChartContainer, ChartTooltip } from "@/components/ui/chart";
+import type { RateLimitType } from "@/types/statistics";
+import { useTranslations } from "next-intl";
+
+export interface RateLimitTypeBreakdownProps {
+  data: Record<RateLimitType, number>;
+}
+
+const COLORS = [
+  "hsl(var(--chart-1))",
+  "hsl(var(--chart-2))",
+  "hsl(var(--chart-3))",
+  "hsl(var(--chart-4))",
+  "hsl(var(--chart-5))",
+  "hsl(15, 85%, 60%)",
+];
+
+/**
+ * 限流类型分布饼图
+ * 显示不同限流类型的事件占比
+ */
+export function RateLimitTypeBreakdown({ data }: RateLimitTypeBreakdownProps) {
+  const t = useTranslations("dashboard.rateLimits.breakdown");
+
+  // 转换数据为图表格式
+  const chartData = React.useMemo(() => {
+    return Object.entries(data)
+      .filter(([, count]) => count > 0)
+      .map(([type, count]) => ({
+        type: type as RateLimitType,
+        count,
+        name: t(`types.${type}`),
+      }))
+      .sort((a, b) => b.count - a.count);
+  }, [data, t]);
+
+  const chartConfig: ChartConfig = React.useMemo(() => {
+    const config: ChartConfig = {};
+    chartData.forEach((item, index) => {
+      config[item.type] = {
+        label: item.name,
+        color: COLORS[index % COLORS.length],
+      };
+    });
+    return config;
+  }, [chartData]);
+
+  const totalEvents = React.useMemo(() => {
+    return chartData.reduce((sum, item) => sum + item.count, 0);
+  }, [chartData]);
+
+  return (
+    <Card>
+      <CardHeader>
+        <CardTitle>{t("title")}</CardTitle>
+        <CardDescription>
+          {t("description")} · {t("total")}: {totalEvents.toLocaleString()}
+        </CardDescription>
+      </CardHeader>
+      <CardContent>
+        {chartData.length === 0 ? (
+          <div className="flex h-[280px] items-center justify-center text-muted-foreground">
+            {t("noData")}
+          </div>
+        ) : (
+          <ChartContainer config={chartConfig} className="mx-auto aspect-square max-h-[280px]">
+            <PieChart>
+              <ChartTooltip
+                cursor={false}
+                content={({ active, payload }) => {
+                  if (!active || !payload || !payload.length) return null;
+
+                  const data = payload[0].payload;
+                  const percentage = ((data.count / totalEvents) * 100).toFixed(1);
+
+                  return (
+                    <div className="rounded-lg border bg-background p-3 shadow-sm">
+                      <div className="grid gap-2">
+                        <div className="font-medium">{data.name}</div>
+                        <div className="flex items-center justify-between gap-3">
+                          <span className="text-muted-foreground">{t("count")}:</span>
+                          <span className="font-mono font-bold">{data.count.toLocaleString()}</span>
+                        </div>
+                        <div className="flex items-center justify-between gap-3">
+                          <span className="text-muted-foreground">{t("percentage")}:</span>
+                          <span className="font-mono font-bold">{percentage}%</span>
+                        </div>
+                      </div>
+                    </div>
+                  );
+                }}
+              />
+              <Pie
+                data={chartData}
+                dataKey="count"
+                nameKey="name"
+                cx="50%"
+                cy="50%"
+                outerRadius={80}
+                label={({ name, percent }) => `${name} ${(percent * 100).toFixed(0)}%`}
+              >
+                {chartData.map((entry, index) => (
+                  <Cell key={`cell-${entry.type}`} fill={COLORS[index % COLORS.length]} />
+                ))}
+              </Pie>
+              <Legend
+                verticalAlign="bottom"
+                height={36}
+                content={({ payload }) => (
+                  <div className="flex flex-wrap justify-center gap-2 pt-4">
+                    {payload?.map((entry, index) => (
+                      <div
+                        key={`legend-${index}`}
+                        className="flex items-center gap-2 rounded-md bg-muted/50 px-3 py-1"
+                      >
+                        <div
+                          className="h-2 w-2 rounded-full"
+                          style={{ backgroundColor: entry.color }}
+                        />
+                        <span className="text-xs font-medium">{entry.value}</span>
+                      </div>
+                    ))}
+                  </div>
+                )}
+              />
+            </PieChart>
+          </ChartContainer>
+        )}
+      </CardContent>
+    </Card>
+  );
+}

+ 1 - 1
src/app/[locale]/dashboard/_components/statistics/chart.tsx

@@ -119,7 +119,7 @@ export function UserStatisticsChart({
     });
 
     return config;
-  }, [data.users]);
+  }, [data.users, t]);
 
   const userMap = React.useMemo(() => {
     return new Map(data.users.map((user) => [user.dataKey, user]));

+ 194 - 0
src/app/[locale]/dashboard/_components/user-quick-overview.tsx

@@ -0,0 +1,194 @@
+"use client";
+
+import { useTranslations } from "next-intl";
+import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card";
+import { Button } from "@/components/ui/button";
+import { ArrowRight, Users, Key, TrendingUp, Clock } from "lucide-react";
+import { Link } from "@/i18n/routing";
+import type { UserDisplay } from "@/types/user";
+import { formatRelativeTime } from "@/lib/utils/date";
+
+interface UserQuickOverviewProps {
+  users: UserDisplay[];
+  isAdmin: boolean;
+}
+
+export function UserQuickOverview({ users, isAdmin }: UserQuickOverviewProps) {
+  const t = useTranslations("dashboard");
+
+  // Calculate aggregated statistics
+  const totalUsers = users.length;
+  const totalKeys = users.reduce((sum, user) => sum + user.keys.length, 0);
+  const activeKeys = users.reduce(
+    (sum, user) => sum + user.keys.filter((k) => k.status === "enabled").length,
+    0
+  );
+
+  // Get recent activity from all users' keys
+  const allKeys = users.flatMap((user) =>
+    user.keys.map((key) => ({
+      ...key,
+      userName: user.name,
+    }))
+  );
+
+  // Sort by last used time and get most recent
+  const recentlyUsedKeys = allKeys
+    .filter((k) => k.lastUsedAt)
+    .sort((a, b) => {
+      if (!a.lastUsedAt || !b.lastUsedAt) return 0;
+      return new Date(b.lastUsedAt).getTime() - new Date(a.lastUsedAt).getTime();
+    })
+    .slice(0, 3);
+
+  // Get top models and providers from model stats
+  const modelCounts = new Map<string, number>();
+  const providerCounts = new Map<string, number>();
+
+  allKeys.forEach((key) => {
+    key.modelStats?.forEach((stat) => {
+      modelCounts.set(stat.model, (modelCounts.get(stat.model) || 0) + stat.callCount);
+    });
+    if (key.lastProviderName) {
+      providerCounts.set(key.lastProviderName, (providerCounts.get(key.lastProviderName) || 0) + 1);
+    }
+  });
+
+  const topModels = Array.from(modelCounts.entries())
+    .sort((a, b) => b[1] - a[1])
+    .slice(0, 3);
+
+  const topProviders = Array.from(providerCounts.entries())
+    .sort((a, b) => b[1] - a[1])
+    .slice(0, 3);
+
+  // Calculate total usage today
+  const totalUsageToday = allKeys.reduce((sum, key) => sum + (key.todayUsage || 0), 0);
+  const totalCallsToday = allKeys.reduce((sum, key) => sum + (key.todayCallCount || 0), 0);
+
+  return (
+    <div className="grid gap-4 md:grid-cols-2 lg:grid-cols-3">
+      {/* User Summary Card */}
+      <Card>
+        <CardHeader className="flex flex-row items-center justify-between space-y-0 pb-2">
+          <CardTitle className="text-sm font-medium">
+            {isAdmin ? t("userList.totalKeys") : t("keyList.columns.key")}
+          </CardTitle>
+          <Users className="h-4 w-4 text-muted-foreground" />
+        </CardHeader>
+        <CardContent>
+          <div className="text-2xl font-bold">
+            {isAdmin ? `${totalUsers} ${t("users.title")}` : `${totalKeys} Keys`}
+          </div>
+          <p className="text-xs text-muted-foreground mt-1">
+            {activeKeys} {t("userList.activeKeys").toLowerCase()}
+            {!isAdmin && totalKeys > 0 && ` / ${totalKeys}`}
+          </p>
+          <Link href="/dashboard/users">
+            <Button variant="link" size="sm" className="mt-2 p-0 h-auto">
+              {t("nav.userManagement")}
+              <ArrowRight className="ml-1 h-3 w-3" />
+            </Button>
+          </Link>
+        </CardContent>
+      </Card>
+
+      {/* Today's Usage Card */}
+      <Card>
+        <CardHeader className="flex flex-row items-center justify-between space-y-0 pb-2">
+          <CardTitle className="text-sm font-medium">{t("keyListHeader.todayUsage")}</CardTitle>
+          <TrendingUp className="h-4 w-4 text-muted-foreground" />
+        </CardHeader>
+        <CardContent>
+          <div className="text-2xl font-bold">${totalUsageToday.toFixed(4)}</div>
+          <p className="text-xs text-muted-foreground mt-1">
+            {totalCallsToday} {t("keyList.timesUnit")}
+          </p>
+          <Link href="/dashboard/logs">
+            <Button variant="link" size="sm" className="mt-2 p-0 h-auto">
+              {t("nav.usageLogs")}
+              <ArrowRight className="ml-1 h-3 w-3" />
+            </Button>
+          </Link>
+        </CardContent>
+      </Card>
+
+      {/* Recent Activity Card */}
+      <Card>
+        <CardHeader className="flex flex-row items-center justify-between space-y-0 pb-2">
+          <CardTitle className="text-sm font-medium">
+            {t("leaderboard.columns.lastActive")}
+          </CardTitle>
+          <Clock className="h-4 w-4 text-muted-foreground" />
+        </CardHeader>
+        <CardContent>
+          {recentlyUsedKeys.length > 0 ? (
+            <div className="space-y-2">
+              {recentlyUsedKeys.slice(0, 2).map((key) => (
+                <div key={key.id} className="text-sm">
+                  <div className="font-medium truncate">{key.name}</div>
+                  <div className="text-xs text-muted-foreground">
+                    {key.lastUsedAt ? formatRelativeTime(new Date(key.lastUsedAt)) : "-"}
+                    {key.lastProviderName && ` · ${key.lastProviderName}`}
+                  </div>
+                </div>
+              ))}
+            </div>
+          ) : (
+            <div className="text-sm text-muted-foreground">{t("keyList.neverUsed")}</div>
+          )}
+          <Link href="/dashboard/sessions">
+            <Button variant="link" size="sm" className="mt-2 p-0 h-auto">
+              {t("title.activeSessions")}
+              <ArrowRight className="ml-1 h-3 w-3" />
+            </Button>
+          </Link>
+        </CardContent>
+      </Card>
+
+      {/* Top Models Card */}
+      {topModels.length > 0 && (
+        <Card>
+          <CardHeader className="flex flex-row items-center justify-between space-y-0 pb-2">
+            <CardTitle className="text-sm font-medium">
+              {t("keyList.modelStatsColumns.model")}
+            </CardTitle>
+            <Key className="h-4 w-4 text-muted-foreground" />
+          </CardHeader>
+          <CardContent>
+            <div className="space-y-2">
+              {topModels.map(([model, calls]) => (
+                <div key={model} className="flex items-center justify-between text-sm">
+                  <span className="truncate flex-1">{model}</span>
+                  <span className="text-muted-foreground ml-2">
+                    {calls} {t("keyList.timesUnit")}
+                  </span>
+                </div>
+              ))}
+            </div>
+          </CardContent>
+        </Card>
+      )}
+
+      {/* Top Providers Card */}
+      {topProviders.length > 0 && (
+        <Card>
+          <CardHeader className="flex flex-row items-center justify-between space-y-0 pb-2">
+            <CardTitle className="text-sm font-medium">{t("logs.columns.provider")}</CardTitle>
+            <TrendingUp className="h-4 w-4 text-muted-foreground" />
+          </CardHeader>
+          <CardContent>
+            <div className="space-y-2">
+              {topProviders.map(([provider, count]) => (
+                <div key={provider} className="flex items-center justify-between text-sm">
+                  <span className="truncate flex-1">{provider}</span>
+                  <span className="text-muted-foreground ml-2">{count}</span>
+                </div>
+              ))}
+            </div>
+          </CardContent>
+        </Card>
+      )}
+    </div>
+  );
+}

+ 6 - 2
src/app/[locale]/dashboard/_components/user/add-user-dialog.tsx

@@ -13,12 +13,16 @@ interface AddUserDialogProps {
   variant?: ButtonProps["variant"];
   size?: ButtonProps["size"];
   className?: string;
+  currentUser?: {
+    role: string;
+  };
 }
 
 export function AddUserDialog({
   variant = "default",
   size = "default",
   className,
+  currentUser,
 }: AddUserDialogProps) {
   const [open, setOpen] = useState(false);
   const t = useTranslations("dashboard.userList");
@@ -30,9 +34,9 @@ export function AddUserDialog({
           <ListPlus className="h-4 w-4" /> {t("addUser")}
         </Button>
       </DialogTrigger>
-      <DialogContent>
+      <DialogContent className="max-h-[85vh] flex flex-col">
         <FormErrorBoundary>
-          <UserForm onSuccess={() => setOpen(false)} />
+          <UserForm onSuccess={() => setOpen(false)} currentUser={currentUser} />
         </FormErrorBoundary>
       </DialogContent>
     </Dialog>

Some files were not shown because too many files changed in this diff