From 2849a6250c1a11513adc5c853a9e7818383c9fbe Mon Sep 17 00:00:00 2001 From: sans Date: Thu, 3 Sep 2026 15:44:57 +0800 Subject: [PATCH] =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E6=94=B9=E9=80=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../nonebot_plugin_galgame_card/CLAUDE.md | 9 +- .../nonebot_plugin_galgame_card/__init__.py | 7 +- .../nonebot_plugin_galgame_card/config.py | 8 +- .../nonebot_plugin_galgame_card/web.py | 266 - .../web/index.html | 370 - .../web/persona-admin/index.html | 12 - .../web/persona-admin/package-lock.json | 7159 ----------------- .../web/persona-admin/package.json | 30 - .../web/persona-admin/postcss.config.js | 6 - .../web/persona-admin/src/App.tsx | 112 - .../web/persona-admin/src/api.ts | 92 - .../web/persona-admin/src/index.css | 24 - .../web/persona-admin/src/main.tsx | 20 - .../persona-admin/src/pages/DataBrowser.tsx | 171 - .../persona-admin/src/pages/GroupDetail.tsx | 334 - .../web/persona-admin/src/pages/GroupList.tsx | 227 - .../web/persona-admin/src/pages/Login.tsx | 58 - .../web/persona-admin/src/pages/Settings.tsx | 71 - .../web/persona-admin/tailwind.config.js | 12 - .../web/persona-admin/tsconfig.json | 20 - .../web/persona-admin/vite.config.ts | 7 - .../nonebot_plugin_galgame_card/web_hub.py | 10 +- .../services/equipment_store.py | 30 +- .../utils/equipment_renderer.py | 18 +- .../utils/icon_utils.py | 92 +- .../web/stratagem_admin.py | 21 +- .../nonebot_plugin_learning_chat/__init__.py | 1 - .../nonebot_plugin_learning_chat/config.py | 13 +- .../web/learning-chat-admin/.gitignore | 24 - .../web/learning-chat-admin/README.md | 5 - .../web/learning-chat-admin/index.html | 14 - .../web/learning-chat-admin/package-lock.json | 1559 ---- .../web/learning-chat-admin/package.json | 27 - .../learning-chat-admin/public/favicon.svg | 1 - .../web/learning-chat-admin/src/App.vue | 146 - .../web/learning-chat-admin/src/api/client.ts | 204 - .../src/components/FullTextDialog.vue | 54 - .../web/learning-chat-admin/src/main.ts | 22 - .../learning-chat-admin/src/router/index.ts | 105 - .../learning-chat-admin/src/stores/auth.ts | 81 - .../web/learning-chat-admin/src/style.css | 79 - .../learning-chat-admin/src/types/index.ts | 97 - .../learning-chat-admin/src/utils/format.ts | 14 - .../learning-chat-admin/src/utils/notify.ts | 12 - .../learning-chat-admin/src/views/Answers.vue | 264 - .../src/views/Blacklist.vue | 170 - .../learning-chat-admin/src/views/Config.vue | 586 -- .../src/views/Contexts.vue | 280 - .../learning-chat-admin/src/views/Login.vue | 159 - .../src/views/Messages.vue | 188 - .../web/learning-chat-admin/src/vue.d.ts | 5 - .../web/learning-chat-admin/tsconfig.app.json | 14 - .../web/learning-chat-admin/tsconfig.json | 36 - .../learning-chat-admin/tsconfig.node.json | 11 - .../web/learning-chat-admin/vite.config.ts | 26 - .../nonebot_plugin_learning_chat/web_api.py | 369 - .../web_frontend.py | 99 - .../nonebot_plugin_learning_chat/web_hub.py | 5 +- .../services/store.py | 51 + hexi/web/src/index.css | 13 + 60 files changed, 166 insertions(+), 13754 deletions(-) delete mode 100644 hexi/plugins/nonebot_plugin_galgame_card/web.py delete mode 100644 hexi/plugins/nonebot_plugin_galgame_card/web/index.html delete mode 100644 hexi/plugins/nonebot_plugin_galgame_card/web/persona-admin/index.html delete mode 100644 hexi/plugins/nonebot_plugin_galgame_card/web/persona-admin/package-lock.json delete mode 100644 hexi/plugins/nonebot_plugin_galgame_card/web/persona-admin/package.json delete mode 100644 hexi/plugins/nonebot_plugin_galgame_card/web/persona-admin/postcss.config.js delete mode 100644 hexi/plugins/nonebot_plugin_galgame_card/web/persona-admin/src/App.tsx delete mode 100644 hexi/plugins/nonebot_plugin_galgame_card/web/persona-admin/src/api.ts delete mode 100644 hexi/plugins/nonebot_plugin_galgame_card/web/persona-admin/src/index.css delete mode 100644 hexi/plugins/nonebot_plugin_galgame_card/web/persona-admin/src/main.tsx delete mode 100644 hexi/plugins/nonebot_plugin_galgame_card/web/persona-admin/src/pages/DataBrowser.tsx delete mode 100644 hexi/plugins/nonebot_plugin_galgame_card/web/persona-admin/src/pages/GroupDetail.tsx delete mode 100644 hexi/plugins/nonebot_plugin_galgame_card/web/persona-admin/src/pages/GroupList.tsx delete mode 100644 hexi/plugins/nonebot_plugin_galgame_card/web/persona-admin/src/pages/Login.tsx delete mode 100644 hexi/plugins/nonebot_plugin_galgame_card/web/persona-admin/src/pages/Settings.tsx delete mode 100644 hexi/plugins/nonebot_plugin_galgame_card/web/persona-admin/tailwind.config.js delete mode 100644 hexi/plugins/nonebot_plugin_galgame_card/web/persona-admin/tsconfig.json delete mode 100644 hexi/plugins/nonebot_plugin_galgame_card/web/persona-admin/vite.config.ts delete mode 100644 hexi/plugins/nonebot_plugin_learning_chat/web/learning-chat-admin/.gitignore delete mode 100644 hexi/plugins/nonebot_plugin_learning_chat/web/learning-chat-admin/README.md delete mode 100644 hexi/plugins/nonebot_plugin_learning_chat/web/learning-chat-admin/index.html delete mode 100644 hexi/plugins/nonebot_plugin_learning_chat/web/learning-chat-admin/package-lock.json delete mode 100644 hexi/plugins/nonebot_plugin_learning_chat/web/learning-chat-admin/package.json delete mode 100644 hexi/plugins/nonebot_plugin_learning_chat/web/learning-chat-admin/public/favicon.svg delete mode 100644 hexi/plugins/nonebot_plugin_learning_chat/web/learning-chat-admin/src/App.vue delete mode 100644 hexi/plugins/nonebot_plugin_learning_chat/web/learning-chat-admin/src/api/client.ts delete mode 100644 hexi/plugins/nonebot_plugin_learning_chat/web/learning-chat-admin/src/components/FullTextDialog.vue delete mode 100644 hexi/plugins/nonebot_plugin_learning_chat/web/learning-chat-admin/src/main.ts delete mode 100644 hexi/plugins/nonebot_plugin_learning_chat/web/learning-chat-admin/src/router/index.ts delete mode 100644 hexi/plugins/nonebot_plugin_learning_chat/web/learning-chat-admin/src/stores/auth.ts delete mode 100644 hexi/plugins/nonebot_plugin_learning_chat/web/learning-chat-admin/src/style.css delete mode 100644 hexi/plugins/nonebot_plugin_learning_chat/web/learning-chat-admin/src/types/index.ts delete mode 100644 hexi/plugins/nonebot_plugin_learning_chat/web/learning-chat-admin/src/utils/format.ts delete mode 100644 hexi/plugins/nonebot_plugin_learning_chat/web/learning-chat-admin/src/utils/notify.ts delete mode 100644 hexi/plugins/nonebot_plugin_learning_chat/web/learning-chat-admin/src/views/Answers.vue delete mode 100644 hexi/plugins/nonebot_plugin_learning_chat/web/learning-chat-admin/src/views/Blacklist.vue delete mode 100644 hexi/plugins/nonebot_plugin_learning_chat/web/learning-chat-admin/src/views/Config.vue delete mode 100644 hexi/plugins/nonebot_plugin_learning_chat/web/learning-chat-admin/src/views/Contexts.vue delete mode 100644 hexi/plugins/nonebot_plugin_learning_chat/web/learning-chat-admin/src/views/Login.vue delete mode 100644 hexi/plugins/nonebot_plugin_learning_chat/web/learning-chat-admin/src/views/Messages.vue delete mode 100644 hexi/plugins/nonebot_plugin_learning_chat/web/learning-chat-admin/src/vue.d.ts delete mode 100644 hexi/plugins/nonebot_plugin_learning_chat/web/learning-chat-admin/tsconfig.app.json delete mode 100644 hexi/plugins/nonebot_plugin_learning_chat/web/learning-chat-admin/tsconfig.json delete mode 100644 hexi/plugins/nonebot_plugin_learning_chat/web/learning-chat-admin/tsconfig.node.json delete mode 100644 hexi/plugins/nonebot_plugin_learning_chat/web/learning-chat-admin/vite.config.ts delete mode 100644 hexi/plugins/nonebot_plugin_learning_chat/web_api.py delete mode 100644 hexi/plugins/nonebot_plugin_learning_chat/web_frontend.py diff --git a/hexi/plugins/nonebot_plugin_galgame_card/CLAUDE.md b/hexi/plugins/nonebot_plugin_galgame_card/CLAUDE.md index 388c0fe..ab98bc9 100644 --- a/hexi/plugins/nonebot_plugin_galgame_card/CLAUDE.md +++ b/hexi/plugins/nonebot_plugin_galgame_card/CLAUDE.md @@ -18,14 +18,13 @@ nonebot_plugin_galgame_card/ ├── models.py 数据层:五张表(persona_group/user/chat_log/impression/summary) ├── repository.py 数据层:仓储(来源无关,所有读写唯一入口) ├── processor.py 治理层:纯函数(五维提取/噪声/脱敏),可单测 -├── config.py 插件配置(WEB_ENABLE/WEB_USERNAME/WEB_PASSWORD/WEB_SECRET_KEY) -├── web.py Web 管理后台后端(/galgame_card/api/*,JWT 登录,仿 learning_chat) -├── web/index.html 管理后台前端(单文件,无需构建) +├── config.py 插件配置(仅图片识别开关等;Web 鉴权统一走 /hub) +├── web_hub.py Web API 子应用(挂载到 /api/galgame_card,auth=hexi.web_auth) ├── DESIGN.md 设计定稿(数据模型/流水线/九段协议/证据纪律) └── CLAUDE.md 本文件 ``` -**Web 管理后台**:`http://:/galgame_card`(默认 admin/galgame,可在 .env 改 WEB_*)。功能:群开关、参与者增删、语料/印象/画像浏览与删除、清空群数据。路由在 `@driver.on_startup` 里注册,改后端需重启 bot。 +**Web 管理后台**:已嵌入统一管理台 `/hub/`,前端由 `hexi/web` 渲染,API 挂载到 `/api/galgame_card`,鉴权与 /hub 共用 `hexi.web_auth`(OAuth2 + SQLite)。功能:群开关、参与者增删、语料/印象/画像浏览与删除、清空群数据。改后端需重启 bot。 ## 核心设计(速览,细节见 DESIGN.md) @@ -69,7 +68,7 @@ poetry run pytest - ✅ 数据层:五表 + 仓储(含群开关、滚动淘汰、版本自增) - ✅ 采集层:消息路径(监控→鉴权→治理→脱敏→采样→落库) -- ✅ Web 管理后台:/galgame_card(群开关、参与者、数据浏览/清理;Chrome 已实测) +- ✅ Web 管理后台:嵌入 /hub(/api/galgame_card + hexi/web 页面;群开关、参与者、数据浏览/清理) - ⏳ QQ 命令集:`开启人设采集` / `加入人设` / `退出人设` / `查看人设`(Web 已覆盖同等功能,QQ 命令可选做) - ⏳ 总结路径:LLM 客户端、印象生成、九段画像生成、调度触发 - ⏳ 呈现层:人物卡展示/图片渲染 diff --git a/hexi/plugins/nonebot_plugin_galgame_card/__init__.py b/hexi/plugins/nonebot_plugin_galgame_card/__init__.py index f7a6895..8c2cd4c 100644 --- a/hexi/plugins/nonebot_plugin_galgame_card/__init__.py +++ b/hexi/plugins/nonebot_plugin_galgame_card/__init__.py @@ -28,7 +28,6 @@ except ImportError: from . import models # noqa: F401 # 确保表结构注册 from . import repository, processor -from . import web # noqa: F401 # Web 管理后台(/galgame_card) from . import handlers as _handlers # noqa: E402 from hexi.web_config import register_plugin_config # noqa: E402 @@ -57,7 +56,7 @@ def _get_galgame_config_values() -> dict: conf = getattr(conf_mod, "config", None) if conf_mod else None if conf is None: return {} - keys = ("web_enable", "web_username", "web_password", "web_secret_key", "image_vision_enabled") + keys = ("image_vision_enabled",) return {k: getattr(conf, k, None) for k in keys} @@ -65,10 +64,6 @@ register_plugin_config( __name__, { "fields": [ - {"key": "web_enable", "label": "Web 后台启用", "type": "bool", "default": True}, - {"key": "web_username", "label": "Web 登录账号", "type": "string", "default": "admin"}, - {"key": "web_password", "label": "Web 登录密码", "type": "password", "default": "galgame", "secret": True}, - {"key": "web_secret_key", "label": "Web 签名密钥", "type": "password", "default": "galgame-card-secret-key", "secret": True}, {"key": "image_vision_enabled", "label": "图片识别启用", "type": "bool", "default": False}, ] }, diff --git a/hexi/plugins/nonebot_plugin_galgame_card/config.py b/hexi/plugins/nonebot_plugin_galgame_card/config.py index 660246e..1f26832 100644 --- a/hexi/plugins/nonebot_plugin_galgame_card/config.py +++ b/hexi/plugins/nonebot_plugin_galgame_card/config.py @@ -1,6 +1,6 @@ -"""插件配置(Web 管理后台) +"""插件配置(图片识别等运行时行为)。 -env 变量名与字段名对应(大写):WEB_ENABLE / WEB_USERNAME / WEB_PASSWORD / WEB_SECRET_KEY +access 由统一 Web 管理台 /hub 提供,插件不再自持 Web 鉴权/开关。 """ from nonebot import get_plugin_config @@ -8,10 +8,6 @@ from pydantic import BaseModel class Config(BaseModel): - web_enable: bool = True - web_username: str = "admin" - web_password: str = "galgame" - web_secret_key: str = "galgame-card-secret-key" # 图片多模态识别(预留接口,当前未启用;将来接入后置 True) image_vision_enabled: bool = False diff --git a/hexi/plugins/nonebot_plugin_galgame_card/web.py b/hexi/plugins/nonebot_plugin_galgame_card/web.py deleted file mode 100644 index a5010b0..0000000 --- a/hexi/plugins/nonebot_plugin_galgame_card/web.py +++ /dev/null @@ -1,266 +0,0 @@ -"""Web 管理后台:群开关 / 参与者 / 数据浏览(挂在 bot 端口 /galgame_card 路径) - -仿 nonebot_plugin_learning_chat 的网页模式:JWT 登录 + /galgame_card/api/* 路由 + 静态页。 -""" - -import datetime -from pathlib import Path -from typing import Optional - -from fastapi import Depends, Header, HTTPException -from fastapi.responses import FileResponse, HTMLResponse, JSONResponse -from fastapi.staticfiles import StaticFiles -from jose import jwt -from nonebot import get_adapter, get_app, get_driver, logger -from nonebot.adapters.onebot.v11 import Adapter, Bot -from pydantic import BaseModel - -from . import repository -from .config import config - -API_PREFIX = "/galgame_card/api" -WEB_DIR = Path(__file__).parent / "web" - -driver = get_driver() - - -def authentication(): - def inner(token: Optional[str] = Header(None, alias="Authorization")): - try: - payload = jwt.decode(token, config.web_secret_key, algorithms="HS256") - if not payload.get("username") or payload["username"] != config.web_username: - raise HTTPException(status_code=400, detail="登录验证失败或已失效,请重新登录") - except (jwt.JWTError, jwt.ExpiredSignatureError, AttributeError): - raise HTTPException(status_code=400, detail="登录验证失败或已失效,请重新登录") - - return Depends(inner) - - -class LoginModel(BaseModel): - username: str - password: str - - -def _ok(data=None, msg: str = "ok") -> JSONResponse: - return JSONResponse({"status": 0, "msg": msg, "data": data}) - - -def _err(code: int, msg: str) -> JSONResponse: - return JSONResponse({"status": code, "msg": msg}) - - -async def _first_bot() -> Optional[Bot]: - bots = get_adapter(Adapter).bots - return next(iter(bots.values()), None) - - -@driver.on_startup -async def init_web(): - if not config.web_enable: - return - app = get_app() - - @app.post(f"{API_PREFIX}/login") - async def login(user: LoginModel): - if user.username != config.web_username or user.password != config.web_password: - return _err(-100, "登录失败,请确认账号密码无误") - token = jwt.encode( - { - "username": user.username, - "exp": datetime.datetime.now(datetime.timezone.utc) + datetime.timedelta(hours=12), - }, - config.web_secret_key, - algorithm="HS256", - ) - return _ok({"token": token}, "登录成功") - - @app.get(f"{API_PREFIX}/groups", dependencies=[authentication()]) - async def groups(): - """管理中的群:数据库直读,不依赖 OneBot""" - rows = await repository.list_groups() - corpus = await repository.corpus_counts_by_group() - impressions = await repository.impression_counts_by_group() - summaries = await repository.summary_counts_by_group() - participants = await repository.participant_counts_by_group() - result = [] - for row in rows: - gid = row.group_id - result.append( - { - "group_id": gid, - "group_name": row.group_name, - "enabled": row.enabled, - "participants": participants.get(gid, 0), - "corpus_count": corpus.get(gid, 0), - "impression_count": impressions.get(gid, 0), - "summary_count": summaries.get(gid, 0), - } - ) - return _ok(result) - - @app.get(f"{API_PREFIX}/groups/discover", dependencies=[authentication()]) - async def discover_groups(): - """OneBot 全部群("添加群"选择器用),顺带回填已管理群名称""" - bot = await _first_bot() - if bot is None: - return _err(-100, "未连接 OneBot,无法获取群列表") - group_list = await bot.get_group_list() - managed_ids = {row.group_id for row in await repository.list_groups()} - result = [ - { - "group_id": int(g["group_id"]), - "group_name": g.get("group_name", ""), - "managed": int(g["group_id"]) in managed_ids, - } - for g in group_list - ] - await repository.backfill_group_names( - {int(g["group_id"]): g.get("group_name", "") for g in group_list} - ) - return _ok(result) - - @app.post(f"{API_PREFIX}/groups", dependencies=[authentication()]) - async def add_group(data: dict): - gid = int(data.get("group_id") or 0) - if gid <= 0: - return _err(400, "group_id 不合法") - await repository.add_group(gid, str(data.get("group_name") or "").strip()) - return _ok(msg="已加入管理列表") - - @app.post(f"{API_PREFIX}/groups/{{group_id}}/enabled", dependencies=[authentication()]) - async def set_group_enabled(group_id: int, data: dict): - await repository.set_group_enabled(group_id, bool(data.get("enabled"))) - return _ok(msg="已开启采集" if data.get("enabled") else "已关闭采集") - - @app.get(f"{API_PREFIX}/groups/{{group_id}}/participants", dependencies=[authentication()]) - async def participants(group_id: int): - members = await repository.joined_users(group_id) - stats = dict(await repository.chat_log_stats_by_user(group_id)) - result = [ - {"user_id": uid, "corpus_count": stats.get(uid, 0)} for uid in members - ] - return _ok(result) - - @app.post(f"{API_PREFIX}/groups/{{group_id}}/participants", dependencies=[authentication()]) - async def add_participant(group_id: int, data: dict): - user_id = int(data.get("user_id") or 0) - if user_id <= 0: - return _err(400, "user_id 不合法") - if await repository.is_joined(user_id, group_id): - return _err(400, "已在人设名单中") - await repository.join(user_id, group_id) - return _ok(msg="已加入") - - @app.delete(f"{API_PREFIX}/groups/{{group_id}}/participants/{{user_id}}", dependencies=[authentication()]) - async def remove_participant(group_id: int, user_id: int): - await repository.leave(user_id, group_id) - return _ok(msg="已移除") - - @app.get(f"{API_PREFIX}/groups/{{group_id}}/logs", dependencies=[authentication()]) - async def logs(group_id: int, user_id: Optional[int] = None, page: int = 1, per_page: int = 50): - offset = max(0, (page - 1) * per_page) - items = await repository.list_logs(group_id, user_id, offset, per_page) - total = await repository.count_logs_filtered(group_id, user_id) - result = [ - { - "id": row.id, - "user_id": row.user_id, - "nickname": row.nickname, - "content": row.content, - "target_user_id": row.target_user_id, - "target_inherited": row.target_inherited, - "follows_id": row.follows_id, - "created_at": row.created_at.strftime("%Y-%m-%d %H:%M:%S"), - } - for row in items - ] - return _ok({"items": result, "total": total}) - - @app.get(f"{API_PREFIX}/groups/{{group_id}}/impressions", dependencies=[authentication()]) - async def impressions(group_id: int, page: int = 1, per_page: int = 50): - offset = max(0, (page - 1) * per_page) - items = await repository.list_impressions_group(group_id, offset, per_page) - result = [ - { - "id": row.id, - "user_id": row.user_id, - "content": row.content, - "cover_from_id": row.cover_from_id, - "cover_to_id": row.cover_to_id, - "created_at": row.created_at.strftime("%Y-%m-%d %H:%M:%S"), - } - for row in items - ] - return _ok({"items": result, "total": await repository.count_impressions_group(group_id)}) - - @app.get(f"{API_PREFIX}/groups/{{group_id}}/summaries", dependencies=[authentication()]) - async def summaries(group_id: int): - items = await repository.list_summaries_group(group_id) - result = [ - { - "version": row.version, - "card_text": row.card_text, - "corpus_count": row.corpus_count, - "impression_count": row.impression_count, - "model": row.model, - "created_at": row.created_at.strftime("%Y-%m-%d %H:%M:%S"), - } - for row in items - ] - return _ok(result) - - @app.delete(f"{API_PREFIX}/groups/{{group_id}}/logs", dependencies=[authentication()]) - async def delete_logs(group_id: int, user_id: Optional[int] = None): - count = await repository.delete_logs(group_id, user_id) - return _ok(msg=f"已删除 {count} 条语料") - - @app.delete(f"{API_PREFIX}/groups/{{group_id}}/data", dependencies=[authentication()]) - async def clear_group(group_id: int): - await repository.clear_group_data(group_id) - return _ok(msg="已清空该群全部数据") - - @app.delete(f"{API_PREFIX}/groups/{{group_id}}", dependencies=[authentication()]) - async def remove_group(group_id: int): - await repository.remove_group(group_id) - return _ok(msg="已移出管理列表(数据保留,重新加入可续上)") - - @app.get(f"{API_PREFIX}/settings", dependencies=[authentication()]) - async def settings(): - from . import processor - - return _ok( - { - "web_username": config.web_username, - "web_enable": config.web_enable, - "thresholds": { - "max_content_len": processor.MAX_CONTENT_LEN, - "repeat_window": processor.REPEAT_WINDOW, - "throttle_seconds": processor.THROTTLE_SECONDS, - "rolling_window": repository.ROLLING_WINDOW, - }, - } - ) - - # React 管理后台(web/persona-admin 构建产物) - dist_dir = WEB_DIR / "persona-admin" / "dist" - if (dist_dir / "index.html").exists(): - app.mount( - "/galgame_card/assets", - StaticFiles(directory=dist_dir / "assets"), - name="galgame_card_assets", - ) - - @app.get("/galgame_card") - @app.get("/galgame_card/") - async def admin_page(): - return FileResponse(dist_dir / "index.html") - - else: - # 构建产物缺失时回退到旧版单文件页面 - @app.get("/galgame_card") - @app.get("/galgame_card/") - async def admin_page(): - html = (WEB_DIR / "index.html").read_text(encoding="utf-8") - return HTMLResponse(html) - - logger.info("群聊人设卡 | Web 管理后台已挂载: /galgame_card") diff --git a/hexi/plugins/nonebot_plugin_galgame_card/web/index.html b/hexi/plugins/nonebot_plugin_galgame_card/web/index.html deleted file mode 100644 index e450470..0000000 --- a/hexi/plugins/nonebot_plugin_galgame_card/web/index.html +++ /dev/null @@ -1,370 +0,0 @@ - - - - - -群聊人设卡 · 管理后台 - - - - - - - - - - - diff --git a/hexi/plugins/nonebot_plugin_galgame_card/web/persona-admin/index.html b/hexi/plugins/nonebot_plugin_galgame_card/web/persona-admin/index.html deleted file mode 100644 index b5121f4..0000000 --- a/hexi/plugins/nonebot_plugin_galgame_card/web/persona-admin/index.html +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - 群聊人设卡 · 管理后台 - - -
- - - diff --git a/hexi/plugins/nonebot_plugin_galgame_card/web/persona-admin/package-lock.json b/hexi/plugins/nonebot_plugin_galgame_card/web/persona-admin/package-lock.json deleted file mode 100644 index 8abdfc5..0000000 --- a/hexi/plugins/nonebot_plugin_galgame_card/web/persona-admin/package-lock.json +++ /dev/null @@ -1,7159 +0,0 @@ -{ - "name": "persona-admin", - "version": "0.1.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "persona-admin", - "version": "0.1.0", - "dependencies": { - "@heroui/react": "^2.8.0", - "@heroui/theme": "^2.4.26", - "framer-motion": "^11.11.17", - "next-themes": "^0.4.4", - "react": "^18.3.1", - "react-dom": "^18.3.1", - "react-router-dom": "^6.28.0" - }, - "devDependencies": { - "@types/react": "^18.3.12", - "@types/react-dom": "^18.3.1", - "@vitejs/plugin-react": "^4.3.4", - "autoprefixer": "^10.4.20", - "postcss": "^8.4.49", - "tailwindcss": "^3.4.15", - "typescript": "^5.6.3", - "vite": "^6.0.3" - } - }, - "node_modules/@adobe/react-spectrum": { - "version": "3.47.3", - "resolved": "https://registry.npmjs.org/@adobe/react-spectrum/-/react-spectrum-3.47.3.tgz", - "integrity": "sha512-tWZG59+xTbXIqeZB4uyuo2qljk3nRK66IkdBmMgbl2p6peApkKbrtJ/YOM8rW4gemdmv7qoJlbIHvy8aJkYsCQ==", - "license": "Apache-2.0", - "dependencies": { - "@internationalized/date": "^3.12.3", - "@react-types/shared": "^3.36.1", - "@spectrum-icons/ui": "^3.7.1", - "@spectrum-icons/workflow": "^4.3.1", - "@swc/helpers": "^0.5.0", - "client-only": "^0.0.1", - "clsx": "^2.0.0", - "react-aria": "3.51.0", - "react-aria-components": "1.20.0", - "react-stately": "3.49.0", - "react-transition-group": "^4.4.5", - "use-sync-external-store": "^1.6.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@adobe/react-spectrum-ui": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@adobe/react-spectrum-ui/-/react-spectrum-ui-1.2.1.tgz", - "integrity": "sha512-wcrbEE2O/9WnEn6avBnaVRRx88S5PLFsPLr4wffzlbMfXeQsy+RMQwaJd3cbzrn18/j04Isit7f7Emfn0dhrJA==", - "license": "Apache-2.0", - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0" - } - }, - "node_modules/@adobe/react-spectrum-workflow": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/@adobe/react-spectrum-workflow/-/react-spectrum-workflow-2.3.5.tgz", - "integrity": "sha512-b53VIPwPWKb/T5gzE3qs+QlGP5gVrw/LnWV3xMksDU+CRl3rzOKUwxIGiZO8ICyYh1WiyqY4myGlPU/nAynBUg==", - "license": "Apache-2.0", - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0" - } - }, - "node_modules/@adobe/react-spectrum/node_modules/@react-types/shared": { - "version": "3.36.1", - "resolved": "https://registry.npmjs.org/@react-types/shared/-/shared-3.36.1.tgz", - "integrity": "sha512-AzsuD9OfxTOZMMvTRhlN3oHBwOmFN7tDh27LzqmHt4+uOgPhJT7ZM7/kVs/8/o0WxayMUIk3hBmCFRHv1FUoag==", - "license": "Apache-2.0", - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@alloc/quick-lru": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", - "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.7.tgz", - "integrity": "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-validator-identifier": "^7.29.7", - "js-tokens": "^4.0.0", - "picocolors": "^1.1.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.7.tgz", - "integrity": "sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.7.tgz", - "integrity": "sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.29.7", - "@babel/generator": "^7.29.7", - "@babel/helper-compilation-targets": "^7.29.7", - "@babel/helper-module-transforms": "^7.29.7", - "@babel/helpers": "^7.29.7", - "@babel/parser": "^7.29.7", - "@babel/template": "^7.29.7", - "@babel/traverse": "^7.29.7", - "@babel/types": "^7.29.7", - "@jridgewell/remapping": "^2.3.5", - "convert-source-map": "^2.0.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.3", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/generator": { - "version": "7.29.8", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.8.tgz", - "integrity": "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.29.8", - "@babel/types": "^7.29.8", - "@jridgewell/gen-mapping": "^0.3.12", - "@jridgewell/trace-mapping": "^0.3.28", - "jsesc": "^3.0.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.29.7.tgz", - "integrity": "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.29.7", - "@babel/helper-validator-option": "^7.29.7", - "browserslist": "^4.24.0", - "lru-cache": "^5.1.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-globals": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.29.7.tgz", - "integrity": "sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.29.7.tgz", - "integrity": "sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/traverse": "^7.29.7", - "@babel/types": "^7.29.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.29.7.tgz", - "integrity": "sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-module-imports": "^7.29.7", - "@babel/helper-validator-identifier": "^7.29.7", - "@babel/traverse": "^7.29.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.29.7.tgz", - "integrity": "sha512-G7sHYigPY17oO5SYWnfD/0MTBwVR781S/JI643e/JhUYgVgWE/61SoW3NH9KWUKyKq5LVh3npif99Wkt6j86Jw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz", - "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", - "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.29.7.tgz", - "integrity": "sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.7.tgz", - "integrity": "sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/template": "^7.29.7", - "@babel/types": "^7.29.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.29.8", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.8.tgz", - "integrity": "sha512-E8lTAYNB1KW+FH+VGJuZM1ioAx2E6oVlvQFRrf5P8ZZmsiJXYAD9vTFV7yyEURNzgh1dFqMZuO6tUwcARbqFCA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.29.8" - }, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx-self": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.29.7.tgz", - "integrity": "sha512-TL0hMc9xzy86VD31nUiwzd5otRAcyEPcsegCxolO0PvcXuH1v0kECe/UIznYFihpkvU5wg/jk4v0TTEFfm53fw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.29.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx-source": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.29.7.tgz", - "integrity": "sha512-06IyK09H3wi4cGbhDBwp5gUGo0IKtnYa8tyTiephirPCK6fbobVGiXMMI5zLQ4aKEYP3wZ3ArU44o+8KMrSG/Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.29.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/runtime": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.29.7.tgz", - "integrity": "sha512-Nq8OhGWiZIZGV6hLHoyAKLLcJihP/xFeBMGJoUrxTX2psI8dCifzLhZISFb+VWS3wFMRDmCGw5R+dOySCqPLhw==", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/template": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.29.7.tgz", - "integrity": "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.29.7", - "@babel/parser": "^7.29.7", - "@babel/types": "^7.29.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.29.8", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.8.tgz", - "integrity": "sha512-I5z7H3bf/41ktsNVLtpN0wAa336HkqIHQ5BuPLEhTkt1jVSyZpeNKIzTgEWmlxjdg81R0IgUCcaE+Ok3NvrfZg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.29.7", - "@babel/generator": "^7.29.8", - "@babel/helper-globals": "^7.29.7", - "@babel/parser": "^7.29.8", - "@babel/template": "^7.29.7", - "@babel/types": "^7.29.8", - "debug": "^4.3.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/types": { - "version": "7.29.8", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.8.tgz", - "integrity": "sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-string-parser": "^7.29.7", - "@babel/helper-validator-identifier": "^7.29.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@esbuild/aix-ppc64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz", - "integrity": "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-arm": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.12.tgz", - "integrity": "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz", - "integrity": "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.12.tgz", - "integrity": "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz", - "integrity": "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz", - "integrity": "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz", - "integrity": "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz", - "integrity": "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz", - "integrity": "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz", - "integrity": "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz", - "integrity": "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz", - "integrity": "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==", - "cpu": [ - "loong64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz", - "integrity": "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==", - "cpu": [ - "mips64el" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz", - "integrity": "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz", - "integrity": "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz", - "integrity": "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz", - "integrity": "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/netbsd-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz", - "integrity": "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz", - "integrity": "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openbsd-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz", - "integrity": "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz", - "integrity": "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openharmony-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz", - "integrity": "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openharmony" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz", - "integrity": "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz", - "integrity": "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz", - "integrity": "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz", - "integrity": "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@formatjs/ecma402-abstract": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-2.3.6.tgz", - "integrity": "sha512-HJnTFeRM2kVFVr5gr5kH1XP6K0JcJtE7Lzvtr3FS/so5f1kpsqqqxy5JF+FRaO6H2qmcMfAUIox7AJteieRtVw==", - "license": "MIT", - "dependencies": { - "@formatjs/fast-memoize": "2.2.7", - "@formatjs/intl-localematcher": "0.6.2", - "decimal.js": "^10.4.3", - "tslib": "^2.8.0" - } - }, - "node_modules/@formatjs/fast-memoize": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/@formatjs/fast-memoize/-/fast-memoize-2.2.7.tgz", - "integrity": "sha512-Yabmi9nSvyOMrlSeGGWDiH7rf3a7sIwplbvo/dlz9WCIjzIQAfy1RMf4S0X3yG724n5Ghu2GmEl5NJIV6O9sZQ==", - "license": "MIT", - "dependencies": { - "tslib": "^2.8.0" - } - }, - "node_modules/@formatjs/icu-messageformat-parser": { - "version": "2.11.4", - "resolved": "https://registry.npmjs.org/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.11.4.tgz", - "integrity": "sha512-7kR78cRrPNB4fjGFZg3Rmj5aah8rQj9KPzuLsmcSn4ipLXQvC04keycTI1F7kJYDwIXtT2+7IDEto842CfZBtw==", - "license": "MIT", - "dependencies": { - "@formatjs/ecma402-abstract": "2.3.6", - "@formatjs/icu-skeleton-parser": "1.8.16", - "tslib": "^2.8.0" - } - }, - "node_modules/@formatjs/icu-skeleton-parser": { - "version": "1.8.16", - "resolved": "https://registry.npmjs.org/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.8.16.tgz", - "integrity": "sha512-H13E9Xl+PxBd8D5/6TVUluSpxGNvFSlN/b3coUp0e0JpuWXXnQDiavIpY3NnvSp4xhEMoXyyBvVfdFX8jglOHQ==", - "license": "MIT", - "dependencies": { - "@formatjs/ecma402-abstract": "2.3.6", - "tslib": "^2.8.0" - } - }, - "node_modules/@formatjs/intl-localematcher": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.6.2.tgz", - "integrity": "sha512-XOMO2Hupl0wdd172Y06h6kLpBz6Dv+J4okPLl4LPtzbr8f66WbIoy4ev98EBuZ6ZK4h5ydTN6XneT4QVpD7cdA==", - "license": "MIT", - "dependencies": { - "tslib": "^2.8.0" - } - }, - "node_modules/@heroui/aria-utils": { - "version": "2.2.29", - "resolved": "https://registry.npmjs.org/@heroui/aria-utils/-/aria-utils-2.2.29.tgz", - "integrity": "sha512-tVc5Rz+u/WMaAoYpx4VNheFqsfxA5i0SAqT8OAFpPX0WiNrylXaAGWsid/ivFdlW4rE1FgI/+wP0KS6c8KSEjQ==", - "license": "MIT", - "dependencies": { - "@heroui/system": "2.4.28", - "@react-aria/utils": "3.33.1", - "@react-stately/collections": "3.12.10", - "@react-types/overlays": "3.9.4", - "@react-types/shared": "3.33.1" - }, - "peerDependencies": { - "react": ">=18 || >=19.0.0-rc.0", - "react-dom": ">=18 || >=19.0.0-rc.0" - } - }, - "node_modules/@heroui/aria-utils/node_modules/@react-types/overlays": { - "version": "3.9.4", - "resolved": "https://registry.npmjs.org/@react-types/overlays/-/overlays-3.9.4.tgz", - "integrity": "sha512-7Z9HaebMFyYBqtv3XVNHEmVkm7AiYviV7gv0c98elEN2Co+eQcKFGvwBM9Gy/lV57zlTqFX1EX/SAqkMEbCLOA==", - "license": "Apache-2.0", - "dependencies": { - "@react-types/shared": "^3.33.1" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@heroui/dom-animation": { - "version": "2.1.10", - "resolved": "https://registry.npmjs.org/@heroui/dom-animation/-/dom-animation-2.1.10.tgz", - "integrity": "sha512-dt+0xdVPbORwNvFT5pnqV2ULLlSgOJeqlg/DMo97s9RWeD6rD4VedNY90c8C9meqWqGegQYBQ9ztsfX32mGEPA==", - "license": "MIT", - "peerDependencies": { - "framer-motion": ">=11.5.6 || >=12.0.0-alpha.1" - } - }, - "node_modules/@heroui/form": { - "version": "2.1.32", - "resolved": "https://registry.npmjs.org/@heroui/form/-/form-2.1.32.tgz", - "integrity": "sha512-gcMnlNq2eI8jIvNIEas4HVmQNdkRuZnhRCx/nZOd/FtO+WQwuqN2xFAfm/nGH3Hq/7yRf2yOozuJsm7iJVaatA==", - "license": "MIT", - "dependencies": { - "@heroui/shared-utils": "2.1.12", - "@heroui/system": "2.4.28", - "@heroui/theme": "2.4.26", - "@react-stately/form": "3.2.4", - "@react-types/form": "3.7.18", - "@react-types/shared": "3.33.1" - }, - "peerDependencies": { - "@heroui/system": ">=2.4.18", - "@heroui/theme": ">=2.4.24", - "react": ">=18", - "react-dom": ">=18" - } - }, - "node_modules/@heroui/framer-utils": { - "version": "2.1.28", - "resolved": "https://registry.npmjs.org/@heroui/framer-utils/-/framer-utils-2.1.28.tgz", - "integrity": "sha512-/M2nqHRx4feZx0lgA8QmHDaqu/DgsdynvSnbniptiU/Xi9XgQApCPJ0Qxgk5JZ9g2vemDFgi5AP7C7FqgiMtMA==", - "license": "MIT", - "dependencies": { - "@heroui/system": "2.4.28", - "@heroui/use-measure": "2.1.8" - }, - "peerDependencies": { - "framer-motion": ">=11.5.6 || >=12.0.0-alpha.1", - "react": ">=18 || >=19.0.0-rc.0", - "react-dom": ">=18 || >=19.0.0-rc.0" - } - }, - "node_modules/@heroui/react": { - "version": "2.8.10", - "resolved": "https://registry.npmjs.org/@heroui/react/-/react-2.8.10.tgz", - "integrity": "sha512-rW5wFxLX3SNusf8Uhq10M5btRplKunU8glU1Gd4gD9AMIV/e7D+DGy/g2ildz2gEcMPny4C5kLcYlwRDea5oNw==", - "license": "MIT", - "dependencies": { - "@heroui/accordion": "2.2.29", - "@heroui/alert": "2.2.32", - "@heroui/autocomplete": "2.3.34", - "@heroui/avatar": "2.2.26", - "@heroui/badge": "2.2.18", - "@heroui/breadcrumbs": "2.2.25", - "@heroui/button": "2.2.32", - "@heroui/calendar": "2.2.32", - "@heroui/card": "2.2.28", - "@heroui/checkbox": "2.3.32", - "@heroui/chip": "2.2.25", - "@heroui/code": "2.2.25", - "@heroui/date-input": "2.3.32", - "@heroui/date-picker": "2.3.33", - "@heroui/divider": "2.2.24", - "@heroui/drawer": "2.2.29", - "@heroui/dropdown": "2.3.32", - "@heroui/form": "2.1.32", - "@heroui/framer-utils": "2.1.28", - "@heroui/image": "2.2.19", - "@heroui/input": "2.4.33", - "@heroui/input-otp": "2.1.32", - "@heroui/kbd": "2.2.26", - "@heroui/link": "2.2.26", - "@heroui/listbox": "2.3.31", - "@heroui/menu": "2.2.31", - "@heroui/modal": "2.2.29", - "@heroui/navbar": "2.2.30", - "@heroui/number-input": "2.0.23", - "@heroui/pagination": "2.2.27", - "@heroui/popover": "2.3.32", - "@heroui/progress": "2.2.25", - "@heroui/radio": "2.3.32", - "@heroui/ripple": "2.2.21", - "@heroui/scroll-shadow": "2.3.19", - "@heroui/select": "2.4.33", - "@heroui/skeleton": "2.2.18", - "@heroui/slider": "2.4.29", - "@heroui/snippet": "2.2.33", - "@heroui/spacer": "2.2.25", - "@heroui/spinner": "2.2.29", - "@heroui/switch": "2.2.27", - "@heroui/system": "2.4.28", - "@heroui/table": "2.2.32", - "@heroui/tabs": "2.2.29", - "@heroui/theme": "2.4.26", - "@heroui/toast": "2.0.22", - "@heroui/tooltip": "2.2.29", - "@heroui/user": "2.2.26", - "@react-aria/visually-hidden": "3.8.31" - }, - "peerDependencies": { - "framer-motion": ">=11.5.6 || >=12.0.0-alpha.1", - "react": ">=18 || >=19.0.0-rc.0", - "react-dom": ">=18 || >=19.0.0-rc.0" - } - }, - "node_modules/@heroui/react-rsc-utils": { - "version": "2.1.9", - "resolved": "https://registry.npmjs.org/@heroui/react-rsc-utils/-/react-rsc-utils-2.1.9.tgz", - "integrity": "sha512-e77OEjNCmQxE9/pnLDDb93qWkX58/CcgIqdNAczT/zUP+a48NxGq2A2WRimvc1uviwaNL2StriE2DmyZPyYW7Q==", - "license": "MIT", - "peerDependencies": { - "react": ">=18 || >=19.0.0-rc.0" - } - }, - "node_modules/@heroui/react-utils": { - "version": "2.1.14", - "resolved": "https://registry.npmjs.org/@heroui/react-utils/-/react-utils-2.1.14.tgz", - "integrity": "sha512-hhKklYKy9sRH52C9A8P0jWQ79W4MkIvOnKBIuxEMHhigjfracy0o0lMnAUdEsJni4oZKVJYqNGdQl+UVgcmeDA==", - "license": "MIT", - "dependencies": { - "@heroui/react-rsc-utils": "2.1.9", - "@heroui/shared-utils": "2.1.12" - }, - "peerDependencies": { - "react": ">=18 || >=19.0.0-rc.0" - } - }, - "node_modules/@heroui/react/node_modules/@heroui/accordion": { - "version": "2.2.29", - "resolved": "https://registry.npmjs.org/@heroui/accordion/-/accordion-2.2.29.tgz", - "integrity": "sha512-nhCqgZ3ejgRLRM3jJnpZExufn050raxOVyNUR7zo9o5Ed10KKRpD3J/8l6gwrYA7j+Z46dF2YLJzIFWPzYf1Kw==", - "license": "MIT", - "dependencies": { - "@heroui/aria-utils": "2.2.29", - "@heroui/divider": "2.2.24", - "@heroui/dom-animation": "2.1.10", - "@heroui/framer-utils": "2.1.28", - "@heroui/react-utils": "2.1.14", - "@heroui/shared-icons": "2.1.10", - "@heroui/shared-utils": "2.1.12", - "@heroui/use-aria-accordion": "2.2.20", - "@react-aria/focus": "3.21.5", - "@react-aria/interactions": "3.27.1", - "@react-stately/tree": "3.9.6", - "@react-types/accordion": "3.0.0-alpha.26", - "@react-types/shared": "3.33.1" - }, - "peerDependencies": { - "@heroui/system": ">=2.4.18", - "@heroui/theme": ">=2.4.24", - "framer-motion": ">=11.5.6 || >=12.0.0-alpha.1", - "react": ">=18 || >=19.0.0-rc.0", - "react-dom": ">=18 || >=19.0.0-rc.0" - } - }, - "node_modules/@heroui/react/node_modules/@heroui/alert": { - "version": "2.2.32", - "resolved": "https://registry.npmjs.org/@heroui/alert/-/alert-2.2.32.tgz", - "integrity": "sha512-8piby1PXVTTtdwLLV60JMqduRAFLHoiQpFPeSNVHsAaMIphXsmlpvUb9dct4f0wQJqqgFutiWL3RtjdDwEkRQQ==", - "license": "MIT", - "dependencies": { - "@heroui/button": "2.2.32", - "@heroui/react-utils": "2.1.14", - "@heroui/shared-icons": "2.1.10", - "@heroui/shared-utils": "2.1.12", - "@react-stately/utils": "3.11.0" - }, - "peerDependencies": { - "@heroui/system": ">=2.4.18", - "@heroui/theme": ">=2.4.24", - "react": ">=18 || >=19.0.0-rc.0", - "react-dom": ">=18 || >=19.0.0-rc.0" - } - }, - "node_modules/@heroui/react/node_modules/@heroui/autocomplete": { - "version": "2.3.34", - "resolved": "https://registry.npmjs.org/@heroui/autocomplete/-/autocomplete-2.3.34.tgz", - "integrity": "sha512-DTmztrWMdEtHCIJmgSyO/7QrABsaq/kDqBg6aVw+P30sgLW6k05wYOqe6ctuoNSWaZzr56QPvFpsgbeMy7Ma0A==", - "license": "MIT", - "dependencies": { - "@heroui/aria-utils": "2.2.29", - "@heroui/button": "2.2.32", - "@heroui/form": "2.1.32", - "@heroui/input": "2.4.33", - "@heroui/listbox": "2.3.31", - "@heroui/popover": "2.3.32", - "@heroui/react-utils": "2.1.14", - "@heroui/scroll-shadow": "2.3.19", - "@heroui/shared-icons": "2.1.10", - "@heroui/shared-utils": "2.1.12", - "@heroui/use-safe-layout-effect": "2.1.8", - "@react-aria/combobox": "3.15.0", - "@react-aria/i18n": "3.12.16", - "@react-stately/combobox": "3.13.0", - "@react-types/combobox": "3.14.0", - "@react-types/shared": "3.33.1" - }, - "peerDependencies": { - "@heroui/system": ">=2.4.18", - "@heroui/theme": ">=2.4.24", - "framer-motion": ">=11.5.6 || >=12.0.0-alpha.1", - "react": ">=18 || >=19.0.0-rc.0", - "react-dom": ">=18 || >=19.0.0-rc.0" - } - }, - "node_modules/@heroui/react/node_modules/@heroui/avatar": { - "version": "2.2.26", - "resolved": "https://registry.npmjs.org/@heroui/avatar/-/avatar-2.2.26.tgz", - "integrity": "sha512-W2z64Da38ZL4Lu9Pokan2frTURcXxUs3bV37WWJjMzCD6mOAlaogWYMQdAeYmeWHyAW18XZSa5OaUCMVrzJ2SQ==", - "license": "MIT", - "dependencies": { - "@heroui/react-utils": "2.1.14", - "@heroui/shared-utils": "2.1.12", - "@heroui/use-image": "2.1.14", - "@react-aria/focus": "3.21.5", - "@react-aria/interactions": "3.27.1" - }, - "peerDependencies": { - "@heroui/system": ">=2.4.18", - "@heroui/theme": ">=2.4.24", - "react": ">=18 || >=19.0.0-rc.0", - "react-dom": ">=18 || >=19.0.0-rc.0" - } - }, - "node_modules/@heroui/react/node_modules/@heroui/badge": { - "version": "2.2.18", - "resolved": "https://registry.npmjs.org/@heroui/badge/-/badge-2.2.18.tgz", - "integrity": "sha512-OfGove8YJ9oDrdugzq05FC15ZKD5nzqe+thPZ+1SY1LZorJQjZvqSD9QnoEH1nG7fu2IdH6pYJy3sZ/b6Vj5Kg==", - "license": "MIT", - "dependencies": { - "@heroui/react-utils": "2.1.14", - "@heroui/shared-utils": "2.1.12" - }, - "peerDependencies": { - "@heroui/system": ">=2.4.18", - "@heroui/theme": ">=2.4.23", - "react": ">=18 || >=19.0.0-rc.0", - "react-dom": ">=18 || >=19.0.0-rc.0" - } - }, - "node_modules/@heroui/react/node_modules/@heroui/breadcrumbs": { - "version": "2.2.25", - "resolved": "https://registry.npmjs.org/@heroui/breadcrumbs/-/breadcrumbs-2.2.25.tgz", - "integrity": "sha512-KmUmJiBVzRuKR1tXIvKBqz8rGz4jAPa2FqsDodQ/Z34Eagsw85l3pI6xekKacGcxNQVM+L6KhMRb00QWHT/SmQ==", - "license": "MIT", - "dependencies": { - "@heroui/react-utils": "2.1.14", - "@heroui/shared-icons": "2.1.10", - "@heroui/shared-utils": "2.1.12", - "@react-aria/breadcrumbs": "3.5.32", - "@react-aria/focus": "3.21.5", - "@react-types/breadcrumbs": "3.7.19" - }, - "peerDependencies": { - "@heroui/system": ">=2.4.18", - "@heroui/theme": ">=2.4.24", - "react": ">=18 || >=19.0.0-rc.0", - "react-dom": ">=18 || >=19.0.0-rc.0" - } - }, - "node_modules/@heroui/react/node_modules/@heroui/button": { - "version": "2.2.32", - "resolved": "https://registry.npmjs.org/@heroui/button/-/button-2.2.32.tgz", - "integrity": "sha512-i1vx4gEuyjKmz0xVu+U3PgtYrsGt1PVuWBrT/sSbNcH0AGuPSqQPQ/znwkhgZ4ixhNaU9jjVbBfIGCFGNDz7XA==", - "license": "MIT", - "dependencies": { - "@heroui/react-utils": "2.1.14", - "@heroui/ripple": "2.2.21", - "@heroui/shared-utils": "2.1.12", - "@heroui/spinner": "2.2.29", - "@heroui/use-aria-button": "2.2.22", - "@react-aria/focus": "3.21.5", - "@react-aria/interactions": "3.27.1", - "@react-types/shared": "3.33.1" - }, - "peerDependencies": { - "@heroui/system": ">=2.4.18", - "@heroui/theme": ">=2.4.24", - "framer-motion": ">=11.5.6 || >=12.0.0-alpha.1", - "react": ">=18 || >=19.0.0-rc.0", - "react-dom": ">=18 || >=19.0.0-rc.0" - } - }, - "node_modules/@heroui/react/node_modules/@heroui/calendar": { - "version": "2.2.32", - "resolved": "https://registry.npmjs.org/@heroui/calendar/-/calendar-2.2.32.tgz", - "integrity": "sha512-2xzCmM7Sdz04qYr478lcH3GfGi2HWmKZ77PXrxWyRcVys+6GQpJJS712eusQBdoDNoUHUK/qZLTxihwiDC46wg==", - "license": "MIT", - "dependencies": { - "@heroui/button": "2.2.32", - "@heroui/dom-animation": "2.1.10", - "@heroui/framer-utils": "2.1.28", - "@heroui/react-utils": "2.1.14", - "@heroui/shared-icons": "2.1.10", - "@heroui/shared-utils": "2.1.12", - "@heroui/use-aria-button": "2.2.22", - "@internationalized/date": "3.12.0", - "@react-aria/calendar": "3.9.5", - "@react-aria/focus": "3.21.5", - "@react-aria/i18n": "3.12.16", - "@react-aria/interactions": "3.27.1", - "@react-aria/visually-hidden": "3.8.31", - "@react-stately/calendar": "3.9.3", - "@react-stately/utils": "3.11.0", - "@react-types/button": "3.15.1", - "@react-types/calendar": "3.8.3", - "@react-types/shared": "3.33.1", - "scroll-into-view-if-needed": "3.0.10" - }, - "peerDependencies": { - "@heroui/system": ">=2.4.18", - "@heroui/theme": ">=2.4.24", - "framer-motion": ">=11.5.6 || >=12.0.0-alpha.1", - "react": ">=18 || >=19.0.0-rc.0", - "react-dom": ">=18 || >=19.0.0-rc.0" - } - }, - "node_modules/@heroui/react/node_modules/@heroui/card": { - "version": "2.2.28", - "resolved": "https://registry.npmjs.org/@heroui/card/-/card-2.2.28.tgz", - "integrity": "sha512-njwCocEntWaYyALB+2SHzVzoG4JJMV2rG55vQ0zZIIJoG1+/F9SCfsZQ87ncf+0D7IQx6vw8fWT2VRKojmn9+w==", - "license": "MIT", - "dependencies": { - "@heroui/react-utils": "2.1.14", - "@heroui/ripple": "2.2.21", - "@heroui/shared-utils": "2.1.12", - "@heroui/use-aria-button": "2.2.22", - "@react-aria/focus": "3.21.5", - "@react-aria/interactions": "3.27.1", - "@react-types/shared": "3.33.1" - }, - "peerDependencies": { - "@heroui/system": ">=2.4.18", - "@heroui/theme": ">=2.4.24", - "framer-motion": ">=11.5.6 || >=12.0.0-alpha.1", - "react": ">=18 || >=19.0.0-rc.0", - "react-dom": ">=18 || >=19.0.0-rc.0" - } - }, - "node_modules/@heroui/react/node_modules/@heroui/checkbox": { - "version": "2.3.32", - "resolved": "https://registry.npmjs.org/@heroui/checkbox/-/checkbox-2.3.32.tgz", - "integrity": "sha512-rmFGPTgpG/Uvlr/8KjCSobT3u2Ig4/3p8s0qwTCo37uvtsCIbCYyB1yNAXZkCN2hfg5ZIBofEaYeEmw0OBsQAQ==", - "license": "MIT", - "dependencies": { - "@heroui/form": "2.1.32", - "@heroui/react-utils": "2.1.14", - "@heroui/shared-utils": "2.1.12", - "@heroui/use-callback-ref": "2.1.8", - "@heroui/use-safe-layout-effect": "2.1.8", - "@react-aria/checkbox": "3.16.5", - "@react-aria/focus": "3.21.5", - "@react-aria/interactions": "3.27.1", - "@react-stately/checkbox": "3.7.5", - "@react-stately/toggle": "3.9.5", - "@react-types/checkbox": "3.10.4", - "@react-types/shared": "3.33.1" - }, - "peerDependencies": { - "@heroui/system": ">=2.4.18", - "@heroui/theme": ">=2.4.24", - "react": ">=18 || >=19.0.0-rc.0", - "react-dom": ">=18 || >=19.0.0-rc.0" - } - }, - "node_modules/@heroui/react/node_modules/@heroui/chip": { - "version": "2.2.25", - "resolved": "https://registry.npmjs.org/@heroui/chip/-/chip-2.2.25.tgz", - "integrity": "sha512-kACEoF7tP9o/q5HdARaP3veD0Rl4Uxe9fiTVQvus8kN97Jnw9y4JctsUJ/vXgsscKt39qh53TB8fo8I0sJ2FPg==", - "license": "MIT", - "dependencies": { - "@heroui/react-utils": "2.1.14", - "@heroui/shared-icons": "2.1.10", - "@heroui/shared-utils": "2.1.12", - "@react-aria/focus": "3.21.5", - "@react-aria/interactions": "3.27.1" - }, - "peerDependencies": { - "@heroui/system": ">=2.4.18", - "@heroui/theme": ">=2.4.24", - "react": ">=18 || >=19.0.0-rc.0", - "react-dom": ">=18 || >=19.0.0-rc.0" - } - }, - "node_modules/@heroui/react/node_modules/@heroui/code": { - "version": "2.2.25", - "resolved": "https://registry.npmjs.org/@heroui/code/-/code-2.2.25.tgz", - "integrity": "sha512-oGaQVktqTNqRPDceuV/egVh442Ap4cbuXxVSqsmT0aNV1KnISo/P7VwLm4QDN5T3MXxN3Cs2Pw6z0+oydPL3mA==", - "license": "MIT", - "dependencies": { - "@heroui/react-utils": "2.1.14", - "@heroui/shared-utils": "2.1.12", - "@heroui/system-rsc": "2.3.24" - }, - "peerDependencies": { - "@heroui/theme": ">=2.4.24", - "react": ">=18 || >=19.0.0-rc.0", - "react-dom": ">=18 || >=19.0.0-rc.0" - } - }, - "node_modules/@heroui/react/node_modules/@heroui/date-input": { - "version": "2.3.32", - "resolved": "https://registry.npmjs.org/@heroui/date-input/-/date-input-2.3.32.tgz", - "integrity": "sha512-jk0cPMkfs0lexdJckBZ4qO96tTqT3ZMgb+Z12aS8VW3Hcbvj2vvv2fuHc7LrIg1mdUqZzZwCwUAsUGWSJDTI0w==", - "license": "MIT", - "dependencies": { - "@heroui/form": "2.1.32", - "@heroui/react-utils": "2.1.14", - "@heroui/shared-utils": "2.1.12", - "@internationalized/date": "3.12.0", - "@react-aria/datepicker": "3.16.1", - "@react-aria/i18n": "3.12.16", - "@react-stately/datepicker": "3.16.1", - "@react-types/datepicker": "3.13.5", - "@react-types/shared": "3.33.1" - }, - "peerDependencies": { - "@heroui/system": ">=2.4.18", - "@heroui/theme": ">=2.4.24", - "react": ">=18 || >=19.0.0-rc.0", - "react-dom": ">=18 || >=19.0.0-rc.0" - } - }, - "node_modules/@heroui/react/node_modules/@heroui/date-picker": { - "version": "2.3.33", - "resolved": "https://registry.npmjs.org/@heroui/date-picker/-/date-picker-2.3.33.tgz", - "integrity": "sha512-u9N2NToMLg3hwn7WEXljhrtM/DiRrUVBqs35akW9gTQtcz1fGPugrDkJy4OsKEv7c1HuYBO0As6CM+uXERjHWw==", - "license": "MIT", - "dependencies": { - "@heroui/aria-utils": "2.2.29", - "@heroui/button": "2.2.32", - "@heroui/calendar": "2.2.32", - "@heroui/date-input": "2.3.32", - "@heroui/form": "2.1.32", - "@heroui/popover": "2.3.32", - "@heroui/react-utils": "2.1.14", - "@heroui/shared-icons": "2.1.10", - "@heroui/shared-utils": "2.1.12", - "@internationalized/date": "3.12.0", - "@react-aria/datepicker": "3.16.1", - "@react-aria/i18n": "3.12.16", - "@react-stately/datepicker": "3.16.1", - "@react-stately/utils": "3.11.0", - "@react-types/datepicker": "3.13.5", - "@react-types/shared": "3.33.1" - }, - "peerDependencies": { - "@heroui/system": ">=2.4.18", - "@heroui/theme": ">=2.4.24", - "framer-motion": ">=11.5.6 || >=12.0.0-alpha.1", - "react": ">=18 || >=19.0.0-rc.0", - "react-dom": ">=18 || >=19.0.0-rc.0" - } - }, - "node_modules/@heroui/react/node_modules/@heroui/divider": { - "version": "2.2.24", - "resolved": "https://registry.npmjs.org/@heroui/divider/-/divider-2.2.24.tgz", - "integrity": "sha512-fq7bZFpruws3aC5X2TGMMUhcInyxQS6oWAOYrwgWX5jrmqzg/8CBtIuOehhwcm0HAk+oI55KFidJUFTuA1s7Gg==", - "license": "MIT", - "dependencies": { - "@heroui/react-rsc-utils": "2.1.9", - "@heroui/system-rsc": "2.3.24", - "@react-types/shared": "3.33.1" - }, - "peerDependencies": { - "@heroui/theme": ">=2.4.24", - "react": ">=18 || >=19.0.0-rc.0", - "react-dom": ">=18 || >=19.0.0-rc.0" - } - }, - "node_modules/@heroui/react/node_modules/@heroui/drawer": { - "version": "2.2.29", - "resolved": "https://registry.npmjs.org/@heroui/drawer/-/drawer-2.2.29.tgz", - "integrity": "sha512-zVBKHbcCXZGR79ORw4vQRA/QfHNLoQ9R8q6P1gsjs24uBGdBQAYvQE0F/bfsKZ5JH7asUt+oSIpjqQGmXAbyyQ==", - "license": "MIT", - "dependencies": { - "@heroui/framer-utils": "2.1.28", - "@heroui/modal": "2.2.29", - "@heroui/react-utils": "2.1.14", - "@heroui/shared-utils": "2.1.12" - }, - "peerDependencies": { - "@heroui/system": ">=2.4.18", - "@heroui/theme": ">=2.4.24", - "react": ">=18 || >=19.0.0-rc.0", - "react-dom": ">=18 || >=19.0.0-rc.0" - } - }, - "node_modules/@heroui/react/node_modules/@heroui/dropdown": { - "version": "2.3.32", - "resolved": "https://registry.npmjs.org/@heroui/dropdown/-/dropdown-2.3.32.tgz", - "integrity": "sha512-+ntmjxkBaUVpyGN0pcByeTm2e2RUi5/D5uI9vPFLvJYWCa26bzQRR7EuK7LuGRXVciWl+NODNlLbSUVukkHBUA==", - "license": "MIT", - "dependencies": { - "@heroui/aria-utils": "2.2.29", - "@heroui/menu": "2.2.31", - "@heroui/popover": "2.3.32", - "@heroui/react-utils": "2.1.14", - "@heroui/shared-utils": "2.1.12", - "@react-aria/focus": "3.21.5", - "@react-aria/menu": "3.21.0", - "@react-stately/menu": "3.9.11", - "@react-types/menu": "3.10.7" - }, - "peerDependencies": { - "@heroui/system": ">=2.4.18", - "@heroui/theme": ">=2.4.24", - "framer-motion": ">=11.5.6 || >=12.0.0-alpha.1", - "react": ">=18 || >=19.0.0-rc.0", - "react-dom": ">=18 || >=19.0.0-rc.0" - } - }, - "node_modules/@heroui/react/node_modules/@heroui/image": { - "version": "2.2.19", - "resolved": "https://registry.npmjs.org/@heroui/image/-/image-2.2.19.tgz", - "integrity": "sha512-XdQ1g0kiHl+Kj9Zj1NL1mbKhmzeN0h27dgfegJS2coGM/yrEavYzg1DWUEyVSzPNKFZS8BDGa9DOpWe0vgggBA==", - "license": "MIT", - "dependencies": { - "@heroui/react-utils": "2.1.14", - "@heroui/shared-utils": "2.1.12", - "@heroui/use-image": "2.1.14" - }, - "peerDependencies": { - "@heroui/system": ">=2.4.18", - "@heroui/theme": ">=2.4.24", - "react": ">=18 || >=19.0.0-rc.0", - "react-dom": ">=18 || >=19.0.0-rc.0" - } - }, - "node_modules/@heroui/react/node_modules/@heroui/input": { - "version": "2.4.33", - "resolved": "https://registry.npmjs.org/@heroui/input/-/input-2.4.33.tgz", - "integrity": "sha512-iDKujnKgXDbR4zLVr03Pg3TYKFR2zv0aPZUpjOvtLdB8/wNBQv+rbizqnHQPAYyDwhNQS0WguW0tQVhh4oPy4w==", - "license": "MIT", - "dependencies": { - "@heroui/form": "2.1.32", - "@heroui/react-utils": "2.1.14", - "@heroui/shared-icons": "2.1.10", - "@heroui/shared-utils": "2.1.12", - "@heroui/use-safe-layout-effect": "2.1.8", - "@react-aria/focus": "3.21.5", - "@react-aria/interactions": "3.27.1", - "@react-aria/textfield": "3.18.5", - "@react-stately/utils": "3.11.0", - "@react-types/shared": "3.33.1", - "@react-types/textfield": "3.12.8", - "react-textarea-autosize": "^8.5.3" - }, - "peerDependencies": { - "@heroui/system": ">=2.4.18", - "@heroui/theme": ">=2.4.24", - "react": ">=18 || >=19.0.0-rc.0", - "react-dom": ">=18 || >=19.0.0-rc.0" - } - }, - "node_modules/@heroui/react/node_modules/@heroui/input-otp": { - "version": "2.1.32", - "resolved": "https://registry.npmjs.org/@heroui/input-otp/-/input-otp-2.1.32.tgz", - "integrity": "sha512-lrByjetK5/9MjqhDXHnhAI/gBnCJjMmR92k2HARjnJjYhljD58j6xYuf41zwp/faYkyspVvmLMPHF8qjKMTAbQ==", - "license": "MIT", - "dependencies": { - "@heroui/form": "2.1.32", - "@heroui/react-utils": "2.1.14", - "@heroui/shared-utils": "2.1.12", - "@heroui/use-form-reset": "2.0.1", - "@react-aria/focus": "3.21.5", - "@react-aria/form": "3.1.5", - "@react-stately/form": "3.2.4", - "@react-stately/utils": "3.11.0", - "@react-types/textfield": "3.12.8", - "input-otp": "1.4.1" - }, - "peerDependencies": { - "@heroui/system": ">=2.4.18", - "@heroui/theme": ">=2.4.24", - "react": ">=18", - "react-dom": ">=18" - } - }, - "node_modules/@heroui/react/node_modules/@heroui/kbd": { - "version": "2.2.26", - "resolved": "https://registry.npmjs.org/@heroui/kbd/-/kbd-2.2.26.tgz", - "integrity": "sha512-Z8XpQwMmNpLGlQlGD7UWRWG2S8veNb9vezfWgEKmtnnzdVM/CKSYTWctkmiruJ7tPn3XPsGTEt3QU8WPVAnpqQ==", - "license": "MIT", - "dependencies": { - "@heroui/react-utils": "2.1.14", - "@heroui/shared-utils": "2.1.12", - "@heroui/system-rsc": "2.3.24" - }, - "peerDependencies": { - "@heroui/theme": ">=2.4.24", - "react": ">=18 || >=19.0.0-rc.0", - "react-dom": ">=18 || >=19.0.0-rc.0" - } - }, - "node_modules/@heroui/react/node_modules/@heroui/link": { - "version": "2.2.26", - "resolved": "https://registry.npmjs.org/@heroui/link/-/link-2.2.26.tgz", - "integrity": "sha512-TPxd87ZP8mB8HG0GVIDTuoDxL2mcpCVUY9sjrxujAtin3781znM6jFO+O/tv0huW90+jxBHiFU1KpeZWwtl6qg==", - "license": "MIT", - "dependencies": { - "@heroui/react-utils": "2.1.14", - "@heroui/shared-icons": "2.1.10", - "@heroui/shared-utils": "2.1.12", - "@heroui/use-aria-link": "2.2.23", - "@react-aria/focus": "3.21.5", - "@react-types/link": "3.6.7" - }, - "peerDependencies": { - "@heroui/system": ">=2.4.18", - "@heroui/theme": ">=2.4.24", - "react": ">=18 || >=19.0.0-rc.0", - "react-dom": ">=18 || >=19.0.0-rc.0" - } - }, - "node_modules/@heroui/react/node_modules/@heroui/listbox": { - "version": "2.3.31", - "resolved": "https://registry.npmjs.org/@heroui/listbox/-/listbox-2.3.31.tgz", - "integrity": "sha512-EvYxlama0kDCtgyNfCtz/X7ftYSE0OlPGKrZrv0st0oz790x3E1EQyCEYOaDbHAnGPxJy8pRC88CbzyPWEHeXQ==", - "license": "MIT", - "dependencies": { - "@heroui/aria-utils": "2.2.29", - "@heroui/divider": "2.2.24", - "@heroui/react-utils": "2.1.14", - "@heroui/shared-utils": "2.1.12", - "@heroui/use-is-mobile": "2.2.12", - "@react-aria/focus": "3.21.5", - "@react-aria/interactions": "3.27.1", - "@react-aria/listbox": "3.15.3", - "@react-stately/list": "3.13.4", - "@react-types/shared": "3.33.1", - "@tanstack/react-virtual": "3.11.3" - }, - "peerDependencies": { - "@heroui/system": ">=2.4.18", - "@heroui/theme": ">=2.4.24", - "react": ">=18 || >=19.0.0-rc.0", - "react-dom": ">=18 || >=19.0.0-rc.0" - } - }, - "node_modules/@heroui/react/node_modules/@heroui/menu": { - "version": "2.2.31", - "resolved": "https://registry.npmjs.org/@heroui/menu/-/menu-2.2.31.tgz", - "integrity": "sha512-e5VqpMapolo51kJdHdz+tm3a++dGnvPTQtma8bFPfguVzoyzbq4eicFUR9fvbvYjP2jNewwsyaoTqBvxqbueiQ==", - "license": "MIT", - "dependencies": { - "@heroui/aria-utils": "2.2.29", - "@heroui/divider": "2.2.24", - "@heroui/react-utils": "2.1.14", - "@heroui/shared-utils": "2.1.12", - "@heroui/use-is-mobile": "2.2.12", - "@react-aria/focus": "3.21.5", - "@react-aria/interactions": "3.27.1", - "@react-aria/menu": "3.21.0", - "@react-stately/tree": "3.9.6", - "@react-types/menu": "3.10.7", - "@react-types/shared": "3.33.1" - }, - "peerDependencies": { - "@heroui/system": ">=2.4.18", - "@heroui/theme": ">=2.4.24", - "react": ">=18 || >=19.0.0-rc.0", - "react-dom": ">=18 || >=19.0.0-rc.0" - } - }, - "node_modules/@heroui/react/node_modules/@heroui/modal": { - "version": "2.2.29", - "resolved": "https://registry.npmjs.org/@heroui/modal/-/modal-2.2.29.tgz", - "integrity": "sha512-ke6i2ByLuTE/4OZRZvgKv6A2Vf1GkitL/Lq+Bojq8ovIquphmH7AXrXkWEQ6yq1YdqYRDFcVOX/4p11Qjv4rkg==", - "license": "MIT", - "dependencies": { - "@heroui/dom-animation": "2.1.10", - "@heroui/framer-utils": "2.1.28", - "@heroui/react-utils": "2.1.14", - "@heroui/shared-icons": "2.1.10", - "@heroui/shared-utils": "2.1.12", - "@heroui/use-aria-button": "2.2.22", - "@heroui/use-aria-modal-overlay": "2.2.21", - "@heroui/use-disclosure": "2.2.19", - "@heroui/use-draggable": "2.1.20", - "@heroui/use-viewport-size": "2.0.1", - "@react-aria/dialog": "3.5.34", - "@react-aria/focus": "3.21.5", - "@react-aria/overlays": "3.31.2", - "@react-stately/overlays": "3.6.23" - }, - "peerDependencies": { - "@heroui/system": ">=2.4.18", - "@heroui/theme": ">=2.4.24", - "framer-motion": ">=11.5.6 || >=12.0.0-alpha.1", - "react": ">=18 || >=19.0.0-rc.0", - "react-dom": ">=18 || >=19.0.0-rc.0" - } - }, - "node_modules/@heroui/react/node_modules/@heroui/navbar": { - "version": "2.2.30", - "resolved": "https://registry.npmjs.org/@heroui/navbar/-/navbar-2.2.30.tgz", - "integrity": "sha512-zGMRuewcjUFZhj3hIyIWOq+iRt0Mcc8FHBDPHAcYtYe0PrfYF2Ti0WLoH5Bbf5kR3S5hYfwabyT7jtf173S7iQ==", - "license": "MIT", - "dependencies": { - "@heroui/dom-animation": "2.1.10", - "@heroui/framer-utils": "2.1.28", - "@heroui/react-utils": "2.1.14", - "@heroui/shared-utils": "2.1.12", - "@heroui/use-resize": "2.1.8", - "@heroui/use-scroll-position": "2.1.8", - "@react-aria/button": "3.14.5", - "@react-aria/focus": "3.21.5", - "@react-aria/interactions": "3.27.1", - "@react-aria/overlays": "3.31.2", - "@react-stately/toggle": "3.9.5", - "@react-stately/utils": "3.11.0" - }, - "peerDependencies": { - "@heroui/system": ">=2.4.18", - "@heroui/theme": ">=2.4.24", - "framer-motion": ">=11.5.6 || >=12.0.0-alpha.1", - "react": ">=18 || >=19.0.0-rc.0", - "react-dom": ">=18 || >=19.0.0-rc.0" - } - }, - "node_modules/@heroui/react/node_modules/@heroui/number-input": { - "version": "2.0.23", - "resolved": "https://registry.npmjs.org/@heroui/number-input/-/number-input-2.0.23.tgz", - "integrity": "sha512-06Glv+X+tqSLt7i7MUJJz2Zf65+kkBaL/Cgx0Sw7iA418WejPDF3KIRee48RdfI+AOHYPAH4AD9PnGAaOJvapQ==", - "license": "MIT", - "dependencies": { - "@heroui/button": "2.2.32", - "@heroui/form": "2.1.32", - "@heroui/react-utils": "2.1.14", - "@heroui/shared-icons": "2.1.10", - "@heroui/shared-utils": "2.1.12", - "@heroui/use-safe-layout-effect": "2.1.8", - "@react-aria/focus": "3.21.5", - "@react-aria/i18n": "3.12.16", - "@react-aria/interactions": "3.27.1", - "@react-aria/numberfield": "3.12.5", - "@react-stately/numberfield": "3.11.0", - "@react-types/button": "3.15.1", - "@react-types/numberfield": "3.8.18", - "@react-types/shared": "3.33.1" - }, - "peerDependencies": { - "@heroui/system": ">=2.4.18", - "@heroui/theme": ">=2.4.24", - "react": ">=18 || >=19.0.0-rc.0", - "react-dom": ">=18 || >=19.0.0-rc.0" - } - }, - "node_modules/@heroui/react/node_modules/@heroui/pagination": { - "version": "2.2.27", - "resolved": "https://registry.npmjs.org/@heroui/pagination/-/pagination-2.2.27.tgz", - "integrity": "sha512-omTpyJwGzw2fmSdfCfJuIgVmTqDaMzs4RmDtjgqEZxZCAldFlVuTWmsR1peOwzZKsrhzbp3eH/E9F6ipwF6Yug==", - "license": "MIT", - "dependencies": { - "@heroui/react-utils": "2.1.14", - "@heroui/shared-icons": "2.1.10", - "@heroui/shared-utils": "2.1.12", - "@heroui/use-intersection-observer": "2.2.14", - "@heroui/use-pagination": "2.2.20", - "@react-aria/focus": "3.21.5", - "@react-aria/i18n": "3.12.16", - "@react-aria/interactions": "3.27.1", - "@react-aria/utils": "3.33.1", - "scroll-into-view-if-needed": "3.0.10" - }, - "peerDependencies": { - "@heroui/system": ">=2.4.18", - "@heroui/theme": ">=2.4.24", - "react": ">=18 || >=19.0.0-rc.0", - "react-dom": ">=18 || >=19.0.0-rc.0" - } - }, - "node_modules/@heroui/react/node_modules/@heroui/popover": { - "version": "2.3.32", - "resolved": "https://registry.npmjs.org/@heroui/popover/-/popover-2.3.32.tgz", - "integrity": "sha512-aVkDt9aITI66x7nS0k2BJ7szQtNm5YV+Q31X9aWrXFkRdJ+zl0sMbo1UpVQdGSif0yH6NvsFTThmCWDQZkX6fg==", - "license": "MIT", - "dependencies": { - "@heroui/aria-utils": "2.2.29", - "@heroui/button": "2.2.32", - "@heroui/dom-animation": "2.1.10", - "@heroui/framer-utils": "2.1.28", - "@heroui/react-utils": "2.1.14", - "@heroui/shared-utils": "2.1.12", - "@heroui/use-aria-button": "2.2.22", - "@heroui/use-aria-overlay": "2.0.6", - "@heroui/use-safe-layout-effect": "2.1.8", - "@react-aria/dialog": "3.5.34", - "@react-aria/focus": "3.21.5", - "@react-aria/overlays": "3.31.2", - "@react-stately/overlays": "3.6.23", - "@react-types/overlays": "3.9.4" - }, - "peerDependencies": { - "@heroui/system": ">=2.4.18", - "@heroui/theme": ">=2.4.24", - "framer-motion": ">=11.5.6 || >=12.0.0-alpha.1", - "react": ">=18 || >=19.0.0-rc.0", - "react-dom": ">=18 || >=19.0.0-rc.0" - } - }, - "node_modules/@heroui/react/node_modules/@heroui/progress": { - "version": "2.2.25", - "resolved": "https://registry.npmjs.org/@heroui/progress/-/progress-2.2.25.tgz", - "integrity": "sha512-0aMuB3RaEheJPiQPUPRvwC1CkBG9qDRzRyUu6GT5QJfkFVmeB09NwQB4wec74qa1Ke+Yhj2KHfCVyBzYNqAifw==", - "license": "MIT", - "dependencies": { - "@heroui/react-utils": "2.1.14", - "@heroui/shared-utils": "2.1.12", - "@heroui/use-is-mounted": "2.1.8", - "@react-aria/progress": "3.4.30", - "@react-types/progress": "3.5.18" - }, - "peerDependencies": { - "@heroui/system": ">=2.4.18", - "@heroui/theme": ">=2.4.24", - "react": ">=18 || >=19.0.0-rc.0", - "react-dom": ">=18 || >=19.0.0-rc.0" - } - }, - "node_modules/@heroui/react/node_modules/@heroui/radio": { - "version": "2.3.32", - "resolved": "https://registry.npmjs.org/@heroui/radio/-/radio-2.3.32.tgz", - "integrity": "sha512-R0Oj8sQ5NA5LqPkouGEHPetgZxa1p7XNf5teVv0nL+8A9tg4R8VDLvL50ezc0yXp18PmfHa61AoK5DSCnyesNw==", - "license": "MIT", - "dependencies": { - "@heroui/form": "2.1.32", - "@heroui/react-utils": "2.1.14", - "@heroui/shared-utils": "2.1.12", - "@react-aria/focus": "3.21.5", - "@react-aria/interactions": "3.27.1", - "@react-aria/radio": "3.12.5", - "@react-aria/visually-hidden": "3.8.31", - "@react-stately/radio": "3.11.5", - "@react-types/radio": "3.9.4", - "@react-types/shared": "3.33.1" - }, - "peerDependencies": { - "@heroui/system": ">=2.4.18", - "@heroui/theme": ">=2.4.24", - "react": ">=18 || >=19.0.0-rc.0", - "react-dom": ">=18 || >=19.0.0-rc.0" - } - }, - "node_modules/@heroui/react/node_modules/@heroui/ripple": { - "version": "2.2.21", - "resolved": "https://registry.npmjs.org/@heroui/ripple/-/ripple-2.2.21.tgz", - "integrity": "sha512-wairSq9LnhbIqTCJmUlJAQURQ1wcRK/L8pjg2s3R/XnvZlPXHy4ZzfphiwIlTI21z/f6tH3arxv/g1uXd1RY0g==", - "license": "MIT", - "dependencies": { - "@heroui/dom-animation": "2.1.10", - "@heroui/shared-utils": "2.1.12" - }, - "peerDependencies": { - "@heroui/system": ">=2.4.18", - "@heroui/theme": ">=2.4.23", - "framer-motion": ">=11.5.6 || >=12.0.0-alpha.1", - "react": ">=18 || >=19.0.0-rc.0", - "react-dom": ">=18 || >=19.0.0-rc.0" - } - }, - "node_modules/@heroui/react/node_modules/@heroui/scroll-shadow": { - "version": "2.3.19", - "resolved": "https://registry.npmjs.org/@heroui/scroll-shadow/-/scroll-shadow-2.3.19.tgz", - "integrity": "sha512-y5mdBlhiITVrFnQTDqEphYj7p5pHqoFSFtVuRRvl9wUec2lMxEpD85uMGsfL8OgQTKIAqGh2s6M360+VJm7ajQ==", - "license": "MIT", - "dependencies": { - "@heroui/react-utils": "2.1.14", - "@heroui/shared-utils": "2.1.12", - "@heroui/use-data-scroll-overflow": "2.2.13" - }, - "peerDependencies": { - "@heroui/system": ">=2.4.18", - "@heroui/theme": ">=2.4.23", - "react": ">=18 || >=19.0.0-rc.0", - "react-dom": ">=18 || >=19.0.0-rc.0" - } - }, - "node_modules/@heroui/react/node_modules/@heroui/select": { - "version": "2.4.33", - "resolved": "https://registry.npmjs.org/@heroui/select/-/select-2.4.33.tgz", - "integrity": "sha512-iWlczBmrHz2lIjyAneiiFtmgM+YWKLNIHL9dQnMghSAZWT9iCES5c3RuiggqE9k7DfPjHmgvVB24qeajnnXBOQ==", - "license": "MIT", - "dependencies": { - "@heroui/aria-utils": "2.2.29", - "@heroui/form": "2.1.32", - "@heroui/listbox": "2.3.31", - "@heroui/popover": "2.3.32", - "@heroui/react-utils": "2.1.14", - "@heroui/scroll-shadow": "2.3.19", - "@heroui/shared-icons": "2.1.10", - "@heroui/shared-utils": "2.1.12", - "@heroui/spinner": "2.2.29", - "@heroui/use-aria-button": "2.2.22", - "@heroui/use-aria-multiselect": "2.4.21", - "@heroui/use-form-reset": "2.0.1", - "@heroui/use-safe-layout-effect": "2.1.8", - "@react-aria/focus": "3.21.5", - "@react-aria/form": "3.1.5", - "@react-aria/interactions": "3.27.1", - "@react-aria/overlays": "3.31.2", - "@react-aria/visually-hidden": "3.8.31", - "@react-types/shared": "3.33.1" - }, - "peerDependencies": { - "@heroui/system": ">=2.4.18", - "@heroui/theme": ">=2.4.24", - "framer-motion": ">=11.5.6 || >=12.0.0-alpha.1", - "react": ">=18 || >=19.0.0-rc.0", - "react-dom": ">=18 || >=19.0.0-rc.0" - } - }, - "node_modules/@heroui/react/node_modules/@heroui/skeleton": { - "version": "2.2.18", - "resolved": "https://registry.npmjs.org/@heroui/skeleton/-/skeleton-2.2.18.tgz", - "integrity": "sha512-7AjU5kjk9rqrKP9mWQiAVj0dow4/vbK5/ejh4jqdb3DZm7bM2+DGzfnQPiS0c2eWR606CgOuuoImpwDS82HJtA==", - "license": "MIT", - "dependencies": { - "@heroui/shared-utils": "2.1.12" - }, - "peerDependencies": { - "@heroui/system": ">=2.4.18", - "@heroui/theme": ">=2.4.23", - "react": ">=18 || >=19.0.0-rc.0", - "react-dom": ">=18 || >=19.0.0-rc.0" - } - }, - "node_modules/@heroui/react/node_modules/@heroui/slider": { - "version": "2.4.29", - "resolved": "https://registry.npmjs.org/@heroui/slider/-/slider-2.4.29.tgz", - "integrity": "sha512-JY3uPIShCFLWTbLLYQJJIT5TyLQsyqJHPcM66FprDxwLkf/Ne03jvf+SeieCKAbq/iw+GygTIfwmbSPzrp/yhA==", - "license": "MIT", - "dependencies": { - "@heroui/react-utils": "2.1.14", - "@heroui/shared-utils": "2.1.12", - "@heroui/tooltip": "2.2.29", - "@react-aria/focus": "3.21.5", - "@react-aria/i18n": "3.12.16", - "@react-aria/interactions": "3.27.1", - "@react-aria/slider": "3.8.5", - "@react-aria/visually-hidden": "3.8.31", - "@react-stately/slider": "3.7.5" - }, - "peerDependencies": { - "@heroui/system": ">=2.4.18", - "@heroui/theme": ">=2.4.24", - "react": ">=18 || >=19.0.0-rc.0", - "react-dom": ">=18 || >=19.0.0-rc.0" - } - }, - "node_modules/@heroui/react/node_modules/@heroui/snippet": { - "version": "2.2.33", - "resolved": "https://registry.npmjs.org/@heroui/snippet/-/snippet-2.2.33.tgz", - "integrity": "sha512-BvoqKPRhdZyXvvPLxUoU0Fg5MzxMYdGWmJMS9gLT1Zv9A9ixua7kTFh9Z5NT9aNScRR9vhroaSQi1x39uCp+5g==", - "license": "MIT", - "dependencies": { - "@heroui/button": "2.2.32", - "@heroui/react-utils": "2.1.14", - "@heroui/shared-icons": "2.1.10", - "@heroui/shared-utils": "2.1.12", - "@heroui/tooltip": "2.2.29", - "@heroui/use-clipboard": "2.1.9", - "@react-aria/focus": "3.21.5" - }, - "peerDependencies": { - "@heroui/system": ">=2.4.18", - "@heroui/theme": ">=2.4.24", - "framer-motion": ">=11.5.6 || >=12.0.0-alpha.1", - "react": ">=18 || >=19.0.0-rc.0", - "react-dom": ">=18 || >=19.0.0-rc.0" - } - }, - "node_modules/@heroui/react/node_modules/@heroui/spacer": { - "version": "2.2.25", - "resolved": "https://registry.npmjs.org/@heroui/spacer/-/spacer-2.2.25.tgz", - "integrity": "sha512-XSw54osEkNaBykZXhZcFmvwqwuSKCGPFOd2AIR+vrMqcJg0IxWjpGIsexaT3P/LV1PuoTYkTJ8G3N5Wf4pZTUw==", - "license": "MIT", - "dependencies": { - "@heroui/react-utils": "2.1.14", - "@heroui/shared-utils": "2.1.12", - "@heroui/system-rsc": "2.3.24" - }, - "peerDependencies": { - "@heroui/theme": ">=2.4.24", - "react": ">=18 || >=19.0.0-rc.0", - "react-dom": ">=18 || >=19.0.0-rc.0" - } - }, - "node_modules/@heroui/react/node_modules/@heroui/spinner": { - "version": "2.2.29", - "resolved": "https://registry.npmjs.org/@heroui/spinner/-/spinner-2.2.29.tgz", - "integrity": "sha512-08mWpL4+pdACcyzT5MjR0nSkKoWbab0oPzY+JHxIdPSSh3S8JJ7C8dUeV3Kj/15NRzzZlcTM3ClRCV8fdeGmuw==", - "license": "MIT", - "dependencies": { - "@heroui/shared-utils": "2.1.12", - "@heroui/system": "2.4.28", - "@heroui/system-rsc": "2.3.24" - }, - "peerDependencies": { - "@heroui/theme": ">=2.4.24", - "react": ">=18 || >=19.0.0-rc.0", - "react-dom": ">=18 || >=19.0.0-rc.0" - } - }, - "node_modules/@heroui/react/node_modules/@heroui/switch": { - "version": "2.2.27", - "resolved": "https://registry.npmjs.org/@heroui/switch/-/switch-2.2.27.tgz", - "integrity": "sha512-z23is+gtPkX29EpixY5ZLY1+NQaP+ueshuiXzdgD9SfCQLOSDYDWuFVdR8ZgfdDPyhP8xpOnJf6l9zfgXHD8Rw==", - "license": "MIT", - "dependencies": { - "@heroui/react-utils": "2.1.14", - "@heroui/shared-utils": "2.1.12", - "@heroui/use-safe-layout-effect": "2.1.8", - "@react-aria/focus": "3.21.5", - "@react-aria/interactions": "3.27.1", - "@react-aria/switch": "3.7.11", - "@react-aria/visually-hidden": "3.8.31", - "@react-stately/toggle": "3.9.5" - }, - "peerDependencies": { - "@heroui/system": ">=2.4.18", - "@heroui/theme": ">=2.4.24", - "react": ">=18 || >=19.0.0-rc.0", - "react-dom": ">=18 || >=19.0.0-rc.0" - } - }, - "node_modules/@heroui/react/node_modules/@heroui/system-rsc": { - "version": "2.3.24", - "resolved": "https://registry.npmjs.org/@heroui/system-rsc/-/system-rsc-2.3.24.tgz", - "integrity": "sha512-GEP3hh7j8wE56WdSAIdCcPQOMDdAYk9bSuQpGzXnkYSiSCJKroOyXbRmp9KF2VgpiMXGI0OlO51aj9JWoa+5Tg==", - "license": "MIT", - "dependencies": { - "@react-types/shared": "3.33.1" - }, - "peerDependencies": { - "@heroui/theme": ">=2.4.24", - "react": ">=18 || >=19.0.0-rc.0" - } - }, - "node_modules/@heroui/react/node_modules/@heroui/table": { - "version": "2.2.32", - "resolved": "https://registry.npmjs.org/@heroui/table/-/table-2.2.32.tgz", - "integrity": "sha512-cJ+XtBZOonSmkw7jrj0d9c8aIMdSGSZrBKS/1KZ7J9BTFPDW+ZoWwomgJHgZ31FQlr7dkYa7mZ2rf8LoGoOxRA==", - "license": "MIT", - "dependencies": { - "@heroui/checkbox": "2.3.32", - "@heroui/react-utils": "2.1.14", - "@heroui/shared-icons": "2.1.10", - "@heroui/shared-utils": "2.1.12", - "@react-aria/focus": "3.21.5", - "@react-aria/interactions": "3.27.1", - "@react-aria/table": "3.17.11", - "@react-aria/visually-hidden": "3.8.31", - "@react-stately/table": "3.15.4", - "@react-stately/virtualizer": "4.4.6", - "@react-types/grid": "3.3.8", - "@react-types/table": "3.13.6", - "@tanstack/react-virtual": "3.11.3" - }, - "peerDependencies": { - "@heroui/system": ">=2.4.18", - "@heroui/theme": ">=2.4.24", - "react": ">=18 || >=19.0.0-rc.0", - "react-dom": ">=18 || >=19.0.0-rc.0" - } - }, - "node_modules/@heroui/react/node_modules/@heroui/tabs": { - "version": "2.2.29", - "resolved": "https://registry.npmjs.org/@heroui/tabs/-/tabs-2.2.29.tgz", - "integrity": "sha512-TzCRXDqhdNsUxhO6sPdsbEt8m7KlkGwvJGvs4S/kHvJh1sKCItnnT0Z2FpZr6pLAqmHA6LO6Ow1phR5ACfNmug==", - "license": "MIT", - "dependencies": { - "@heroui/aria-utils": "2.2.29", - "@heroui/react-utils": "2.1.14", - "@heroui/shared-utils": "2.1.12", - "@heroui/use-is-mounted": "2.1.8", - "@react-aria/focus": "3.21.5", - "@react-aria/interactions": "3.27.1", - "@react-aria/tabs": "3.11.1", - "@react-stately/tabs": "3.8.9", - "@react-types/shared": "3.33.1", - "scroll-into-view-if-needed": "3.0.10" - }, - "peerDependencies": { - "@heroui/system": ">=2.4.18", - "@heroui/theme": ">=2.4.24", - "framer-motion": ">=11.5.6 || >=12.0.0-alpha.1", - "react": ">=18 || >=19.0.0-rc.0", - "react-dom": ">=18 || >=19.0.0-rc.0" - } - }, - "node_modules/@heroui/react/node_modules/@heroui/toast": { - "version": "2.0.22", - "resolved": "https://registry.npmjs.org/@heroui/toast/-/toast-2.0.22.tgz", - "integrity": "sha512-eaayx0oJW0/imLyOhfjOdMx8FEKbWa8aKVvPNvXr3mXQbgzBEa+e147Xbh2CneG66we9C24JETE7QMLJ00popw==", - "license": "MIT", - "dependencies": { - "@heroui/react-utils": "2.1.14", - "@heroui/shared-icons": "2.1.10", - "@heroui/shared-utils": "2.1.12", - "@heroui/spinner": "2.2.29", - "@heroui/use-is-mobile": "2.2.12", - "@react-aria/interactions": "3.27.1", - "@react-aria/toast": "3.0.11", - "@react-stately/toast": "3.1.3" - }, - "peerDependencies": { - "@heroui/system": ">=2.4.18", - "@heroui/theme": ">=2.4.24", - "framer-motion": ">=11.5.6 || >=12.0.0-alpha.1", - "react": ">=18 || >=19.0.0-rc.0", - "react-dom": ">=18 || >=19.0.0-rc.0" - } - }, - "node_modules/@heroui/react/node_modules/@heroui/tooltip": { - "version": "2.2.29", - "resolved": "https://registry.npmjs.org/@heroui/tooltip/-/tooltip-2.2.29.tgz", - "integrity": "sha512-PsHVC9XwjmbZpdu7o8TWSHENiCHCsoQpzpFJ3GYgnUULIhH5k69L/+5jiON9qG6k7+tL4RZS6pQPSbxDCf1acQ==", - "license": "MIT", - "dependencies": { - "@heroui/aria-utils": "2.2.29", - "@heroui/dom-animation": "2.1.10", - "@heroui/framer-utils": "2.1.28", - "@heroui/react-utils": "2.1.14", - "@heroui/shared-utils": "2.1.12", - "@heroui/use-aria-overlay": "2.0.6", - "@heroui/use-safe-layout-effect": "2.1.8", - "@react-aria/overlays": "3.31.2", - "@react-aria/tooltip": "3.9.2", - "@react-stately/tooltip": "3.5.11", - "@react-types/overlays": "3.9.4", - "@react-types/tooltip": "3.5.2" - }, - "peerDependencies": { - "@heroui/system": ">=2.4.18", - "@heroui/theme": ">=2.4.24", - "framer-motion": ">=11.5.6 || >=12.0.0-alpha.1", - "react": ">=18 || >=19.0.0-rc.0", - "react-dom": ">=18 || >=19.0.0-rc.0" - } - }, - "node_modules/@heroui/react/node_modules/@heroui/user": { - "version": "2.2.26", - "resolved": "https://registry.npmjs.org/@heroui/user/-/user-2.2.26.tgz", - "integrity": "sha512-3SESvOSYSVysSSwV1SR2QD8cOx6Fv/vVAXry/GmjLl9CSsA6HTlWoLy7TRtteGFqm3XRWVqjzCrcNGlvSmtdnQ==", - "license": "MIT", - "dependencies": { - "@heroui/avatar": "2.2.26", - "@heroui/react-utils": "2.1.14", - "@heroui/shared-utils": "2.1.12", - "@react-aria/focus": "3.21.5" - }, - "peerDependencies": { - "@heroui/system": ">=2.4.18", - "@heroui/theme": ">=2.4.24", - "react": ">=18 || >=19.0.0-rc.0", - "react-dom": ">=18 || >=19.0.0-rc.0" - } - }, - "node_modules/@heroui/react/node_modules/@internationalized/date": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/@internationalized/date/-/date-3.12.0.tgz", - "integrity": "sha512-/PyIMzK29jtXaGU23qTvNZxvBXRtKbNnGDFD+PY6CZw/Y8Ex8pFUzkuCJCG9aOqmShjqhS9mPqP6Dk5onQY8rQ==", - "license": "Apache-2.0", - "dependencies": { - "@swc/helpers": "^0.5.0" - } - }, - "node_modules/@heroui/react/node_modules/@react-aria/button": { - "version": "3.14.5", - "resolved": "https://registry.npmjs.org/@react-aria/button/-/button-3.14.5.tgz", - "integrity": "sha512-ZuLx+wQj9VQhH9BYe7t0JowmKnns2XrFHFNvIVBb5RwxL+CIycIOL7brhWKg2rGdxvlOom7jhVbcjSmtAaSyaQ==", - "license": "Apache-2.0", - "dependencies": { - "@react-aria/interactions": "^3.27.1", - "@react-aria/toolbar": "3.0.0-beta.24", - "@react-aria/utils": "^3.33.1", - "@react-stately/toggle": "^3.9.5", - "@react-types/button": "^3.15.1", - "@react-types/shared": "^3.33.1", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@heroui/react/node_modules/@react-aria/dialog": { - "version": "3.5.34", - "resolved": "https://registry.npmjs.org/@react-aria/dialog/-/dialog-3.5.34.tgz", - "integrity": "sha512-/x53Q5ynpW5Kv9637WYu7SrDfj3woSp6jJRj8l6teGnWW/iNZWYJETgzHfbxx+HPKYATCZesRoIeO2LnYIXyEA==", - "license": "Apache-2.0", - "dependencies": { - "@react-aria/interactions": "^3.27.1", - "@react-aria/overlays": "^3.31.2", - "@react-aria/utils": "^3.33.1", - "@react-types/dialog": "^3.5.24", - "@react-types/shared": "^3.33.1", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@heroui/react/node_modules/@react-aria/focus": { - "version": "3.21.5", - "resolved": "https://registry.npmjs.org/@react-aria/focus/-/focus-3.21.5.tgz", - "integrity": "sha512-V18fwCyf8zqgJdpLQeDU5ZRNd9TeOfBbhLgmX77Zr5ae9XwaoJ1R3SFJG1wCJX60t34AW+aLZSEEK+saQElf3Q==", - "license": "Apache-2.0", - "dependencies": { - "@react-aria/interactions": "^3.27.1", - "@react-aria/utils": "^3.33.1", - "@react-types/shared": "^3.33.1", - "@swc/helpers": "^0.5.0", - "clsx": "^2.0.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@heroui/react/node_modules/@react-aria/form": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/@react-aria/form/-/form-3.1.5.tgz", - "integrity": "sha512-BWlONgHn8hmaMkcS6AgMSLQeNqVBwqPNLhdqjDO/PCfzvV7O8NZw/dFeIzJwfG4aBfSpbHHRdXGdfrk3d8dylQ==", - "license": "Apache-2.0", - "dependencies": { - "@react-aria/interactions": "^3.27.1", - "@react-aria/utils": "^3.33.1", - "@react-stately/form": "^3.2.4", - "@react-types/shared": "^3.33.1", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@heroui/react/node_modules/@react-aria/interactions": { - "version": "3.27.1", - "resolved": "https://registry.npmjs.org/@react-aria/interactions/-/interactions-3.27.1.tgz", - "integrity": "sha512-M3wLpTTmDflI0QGNK0PJNUaBXXfeBXue8ZxLMngfc1piHNiH4G5lUvWd9W14XVbqrSCVY8i8DfGrNYpyyZu0tw==", - "license": "Apache-2.0", - "dependencies": { - "@react-aria/ssr": "^3.9.10", - "@react-aria/utils": "^3.33.1", - "@react-stately/flags": "^3.1.2", - "@react-types/shared": "^3.33.1", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@heroui/react/node_modules/@react-aria/listbox": { - "version": "3.15.3", - "resolved": "https://registry.npmjs.org/@react-aria/listbox/-/listbox-3.15.3.tgz", - "integrity": "sha512-C6YgiyrHS5sbS5UBdxGMhEs+EKJYotJgGVtl9l0ySXpBUXERiHJWLOyV7a8PwkUOmepbB4FaLD7Y9EUzGkrGlw==", - "license": "Apache-2.0", - "dependencies": { - "@react-aria/interactions": "^3.27.1", - "@react-aria/label": "^3.7.25", - "@react-aria/selection": "^3.27.2", - "@react-aria/utils": "^3.33.1", - "@react-stately/collections": "^3.12.10", - "@react-stately/list": "^3.13.4", - "@react-types/listbox": "^3.7.6", - "@react-types/shared": "^3.33.1", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@heroui/react/node_modules/@react-aria/menu": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/@react-aria/menu/-/menu-3.21.0.tgz", - "integrity": "sha512-CKTVZ4izSE1eKIti6TbTtzJAUo+WT8O4JC0XZCYDBpa0f++lD19Kz9aY+iY1buv5xGI20gAfpO474E9oEd4aQA==", - "license": "Apache-2.0", - "dependencies": { - "@react-aria/focus": "^3.21.5", - "@react-aria/i18n": "^3.12.16", - "@react-aria/interactions": "^3.27.1", - "@react-aria/overlays": "^3.31.2", - "@react-aria/selection": "^3.27.2", - "@react-aria/utils": "^3.33.1", - "@react-stately/collections": "^3.12.10", - "@react-stately/menu": "^3.9.11", - "@react-stately/selection": "^3.20.9", - "@react-stately/tree": "^3.9.6", - "@react-types/button": "^3.15.1", - "@react-types/menu": "^3.10.7", - "@react-types/shared": "^3.33.1", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@heroui/react/node_modules/@react-aria/textfield": { - "version": "3.18.5", - "resolved": "https://registry.npmjs.org/@react-aria/textfield/-/textfield-3.18.5.tgz", - "integrity": "sha512-ttwVSuwoV3RPaG2k2QzEXKeQNQ3mbdl/2yy6I4Tjrn1ZNkYHfVyJJ26AjenfSmj1kkTQoSAfZ8p+7rZp4n0xoQ==", - "license": "Apache-2.0", - "dependencies": { - "@react-aria/form": "^3.1.5", - "@react-aria/interactions": "^3.27.1", - "@react-aria/label": "^3.7.25", - "@react-aria/utils": "^3.33.1", - "@react-stately/form": "^3.2.4", - "@react-stately/utils": "^3.11.0", - "@react-types/shared": "^3.33.1", - "@react-types/textfield": "^3.12.8", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@heroui/react/node_modules/@react-stately/overlays": { - "version": "3.6.23", - "resolved": "https://registry.npmjs.org/@react-stately/overlays/-/overlays-3.6.23.tgz", - "integrity": "sha512-RzWxots9A6gAzQMP4s8hOAHV7SbJRTFSlQbb6ly1nkWQXacOSZSFNGsKOaS0eIatfNPlNnW4NIkgtGws5UYzfw==", - "license": "Apache-2.0", - "dependencies": { - "@react-stately/utils": "^3.11.0", - "@react-types/overlays": "^3.9.4", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@heroui/react/node_modules/@react-stately/utils": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/@react-stately/utils/-/utils-3.11.0.tgz", - "integrity": "sha512-8LZpYowJ9eZmmYLpudbo/eclIRnbhWIJZ994ncmlKlouNzKohtM8qTC6B1w1pwUbiwGdUoyzLuQbeaIor5Dvcw==", - "license": "Apache-2.0", - "dependencies": { - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@heroui/react/node_modules/@react-types/button": { - "version": "3.15.1", - "resolved": "https://registry.npmjs.org/@react-types/button/-/button-3.15.1.tgz", - "integrity": "sha512-M1HtsKreJkigCnqceuIT22hDJBSStbPimnpmQmsl7SNyqCFY3+DHS7y/Sl3GvqCkzxF7j9UTL0dG38lGQ3K4xQ==", - "license": "Apache-2.0", - "dependencies": { - "@react-types/shared": "^3.33.1" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@heroui/react/node_modules/@react-types/overlays": { - "version": "3.9.4", - "resolved": "https://registry.npmjs.org/@react-types/overlays/-/overlays-3.9.4.tgz", - "integrity": "sha512-7Z9HaebMFyYBqtv3XVNHEmVkm7AiYviV7gv0c98elEN2Co+eQcKFGvwBM9Gy/lV57zlTqFX1EX/SAqkMEbCLOA==", - "license": "Apache-2.0", - "dependencies": { - "@react-types/shared": "^3.33.1" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@heroui/shared-icons": { - "version": "2.1.10", - "resolved": "https://registry.npmjs.org/@heroui/shared-icons/-/shared-icons-2.1.10.tgz", - "integrity": "sha512-ePo60GjEpM0SEyZBGOeySsLueNDCqLsVL79Fq+5BphzlrBAcaKY7kUp74964ImtkXvknTxAWzuuTr3kCRqj6jg==", - "license": "MIT", - "peerDependencies": { - "react": ">=18 || >=19.0.0-rc.0" - } - }, - "node_modules/@heroui/shared-utils": { - "version": "2.1.12", - "resolved": "https://registry.npmjs.org/@heroui/shared-utils/-/shared-utils-2.1.12.tgz", - "integrity": "sha512-0iCnxVAkIPtrHQo26Qa5g0UTqMTpugTbClNOrEPsrQuyRAq7Syux998cPwGlneTfB5E5xcU3LiEdA9GUyeK2cQ==", - "hasInstallScript": true, - "license": "MIT" - }, - "node_modules/@heroui/system": { - "version": "2.4.28", - "resolved": "https://registry.npmjs.org/@heroui/system/-/system-2.4.28.tgz", - "integrity": "sha512-agtiiMFsCLaBrGWWrGBlFrnwi06ym4uouh61c3/m16CHuYfGm0Hx5oJ1mZVF98SJ91mDyU3e6Rv+8mqV9XVgoQ==", - "license": "MIT", - "dependencies": { - "@heroui/react-utils": "2.1.14", - "@heroui/system-rsc": "2.3.24", - "@react-aria/i18n": "3.12.16", - "@react-aria/overlays": "3.31.2", - "@react-aria/utils": "3.33.1" - }, - "peerDependencies": { - "framer-motion": ">=11.5.6 || >=12.0.0-alpha.1", - "react": ">=18 || >=19.0.0-rc.0", - "react-dom": ">=18 || >=19.0.0-rc.0" - } - }, - "node_modules/@heroui/system/node_modules/@heroui/system-rsc": { - "version": "2.3.24", - "resolved": "https://registry.npmjs.org/@heroui/system-rsc/-/system-rsc-2.3.24.tgz", - "integrity": "sha512-GEP3hh7j8wE56WdSAIdCcPQOMDdAYk9bSuQpGzXnkYSiSCJKroOyXbRmp9KF2VgpiMXGI0OlO51aj9JWoa+5Tg==", - "license": "MIT", - "dependencies": { - "@react-types/shared": "3.33.1" - }, - "peerDependencies": { - "@heroui/theme": ">=2.4.24", - "react": ">=18 || >=19.0.0-rc.0" - } - }, - "node_modules/@heroui/theme": { - "version": "2.4.26", - "resolved": "https://registry.npmjs.org/@heroui/theme/-/theme-2.4.26.tgz", - "integrity": "sha512-TYatChq7YyGDcPJytgOMqQwK72qWYb+vIa7mLmX3Cu9+JzFs2VSHu2QqzdhnOHoK0uJr8giDMy0gvJEDuu31vw==", - "license": "MIT", - "dependencies": { - "@heroui/shared-utils": "2.1.12", - "color": "^4.2.3", - "color2k": "^2.0.3", - "deepmerge": "4.3.1", - "tailwind-merge": "3.4.0", - "tailwind-variants": "3.2.2" - }, - "peerDependencies": { - "tailwindcss": ">=4.0.0" - } - }, - "node_modules/@heroui/use-aria-accordion": { - "version": "2.2.20", - "resolved": "https://registry.npmjs.org/@heroui/use-aria-accordion/-/use-aria-accordion-2.2.20.tgz", - "integrity": "sha512-HvZhfrsxpCab+m4TrbHWsnA8iLaYdq1G1pjFCswftDRzfioJLmkJ0FMtYDPi792akJO+TWEvPhJibcwVD0bbfg==", - "license": "MIT", - "dependencies": { - "@react-aria/button": "3.14.5", - "@react-aria/focus": "3.21.5", - "@react-aria/selection": "3.27.2", - "@react-stately/tree": "3.9.6", - "@react-types/accordion": "3.0.0-alpha.26", - "@react-types/shared": "3.33.1" - }, - "peerDependencies": { - "react": ">=18 || >=19.0.0-rc.0" - } - }, - "node_modules/@heroui/use-aria-accordion/node_modules/@react-aria/button": { - "version": "3.14.5", - "resolved": "https://registry.npmjs.org/@react-aria/button/-/button-3.14.5.tgz", - "integrity": "sha512-ZuLx+wQj9VQhH9BYe7t0JowmKnns2XrFHFNvIVBb5RwxL+CIycIOL7brhWKg2rGdxvlOom7jhVbcjSmtAaSyaQ==", - "license": "Apache-2.0", - "dependencies": { - "@react-aria/interactions": "^3.27.1", - "@react-aria/toolbar": "3.0.0-beta.24", - "@react-aria/utils": "^3.33.1", - "@react-stately/toggle": "^3.9.5", - "@react-types/button": "^3.15.1", - "@react-types/shared": "^3.33.1", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@heroui/use-aria-accordion/node_modules/@react-aria/focus": { - "version": "3.21.5", - "resolved": "https://registry.npmjs.org/@react-aria/focus/-/focus-3.21.5.tgz", - "integrity": "sha512-V18fwCyf8zqgJdpLQeDU5ZRNd9TeOfBbhLgmX77Zr5ae9XwaoJ1R3SFJG1wCJX60t34AW+aLZSEEK+saQElf3Q==", - "license": "Apache-2.0", - "dependencies": { - "@react-aria/interactions": "^3.27.1", - "@react-aria/utils": "^3.33.1", - "@react-types/shared": "^3.33.1", - "@swc/helpers": "^0.5.0", - "clsx": "^2.0.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@heroui/use-aria-accordion/node_modules/@react-aria/selection": { - "version": "3.27.2", - "resolved": "https://registry.npmjs.org/@react-aria/selection/-/selection-3.27.2.tgz", - "integrity": "sha512-GbUSSLX/ciXix95KW1g+SLM9np7iXpIZrFDSXkC6oNx1uhy18eAcuTkeZE25+SY5USVUmEzjI3m/3JoSUcebbg==", - "license": "Apache-2.0", - "dependencies": { - "@react-aria/focus": "^3.21.5", - "@react-aria/i18n": "^3.12.16", - "@react-aria/interactions": "^3.27.1", - "@react-aria/utils": "^3.33.1", - "@react-stately/selection": "^3.20.9", - "@react-types/shared": "^3.33.1", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@heroui/use-aria-button": { - "version": "2.2.22", - "resolved": "https://registry.npmjs.org/@heroui/use-aria-button/-/use-aria-button-2.2.22.tgz", - "integrity": "sha512-6Y+fWkf/LKKxw3cd9QCSdLVMrMgKv+0AGCzNCfDiZ5kzQGCX4JQD9eK/495opAHV90yhIWzolwdNwtsyhDploA==", - "license": "MIT", - "dependencies": { - "@react-aria/focus": "3.21.5", - "@react-aria/interactions": "3.27.1", - "@react-aria/utils": "3.33.1", - "@react-types/button": "3.15.1", - "@react-types/shared": "3.33.1" - }, - "peerDependencies": { - "react": ">=18 || >=19.0.0-rc.0" - } - }, - "node_modules/@heroui/use-aria-button/node_modules/@react-aria/focus": { - "version": "3.21.5", - "resolved": "https://registry.npmjs.org/@react-aria/focus/-/focus-3.21.5.tgz", - "integrity": "sha512-V18fwCyf8zqgJdpLQeDU5ZRNd9TeOfBbhLgmX77Zr5ae9XwaoJ1R3SFJG1wCJX60t34AW+aLZSEEK+saQElf3Q==", - "license": "Apache-2.0", - "dependencies": { - "@react-aria/interactions": "^3.27.1", - "@react-aria/utils": "^3.33.1", - "@react-types/shared": "^3.33.1", - "@swc/helpers": "^0.5.0", - "clsx": "^2.0.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@heroui/use-aria-button/node_modules/@react-aria/interactions": { - "version": "3.27.1", - "resolved": "https://registry.npmjs.org/@react-aria/interactions/-/interactions-3.27.1.tgz", - "integrity": "sha512-M3wLpTTmDflI0QGNK0PJNUaBXXfeBXue8ZxLMngfc1piHNiH4G5lUvWd9W14XVbqrSCVY8i8DfGrNYpyyZu0tw==", - "license": "Apache-2.0", - "dependencies": { - "@react-aria/ssr": "^3.9.10", - "@react-aria/utils": "^3.33.1", - "@react-stately/flags": "^3.1.2", - "@react-types/shared": "^3.33.1", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@heroui/use-aria-button/node_modules/@react-types/button": { - "version": "3.15.1", - "resolved": "https://registry.npmjs.org/@react-types/button/-/button-3.15.1.tgz", - "integrity": "sha512-M1HtsKreJkigCnqceuIT22hDJBSStbPimnpmQmsl7SNyqCFY3+DHS7y/Sl3GvqCkzxF7j9UTL0dG38lGQ3K4xQ==", - "license": "Apache-2.0", - "dependencies": { - "@react-types/shared": "^3.33.1" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@heroui/use-aria-link": { - "version": "2.2.23", - "resolved": "https://registry.npmjs.org/@heroui/use-aria-link/-/use-aria-link-2.2.23.tgz", - "integrity": "sha512-jpFj9HNCdt+DENPJyrfoN+AzuaMze9xqo5Y1P3KGoT/2pFDmelFgbXAOC5CHpatYFIn3YEELBGlj84zNXq2gjQ==", - "license": "MIT", - "dependencies": { - "@react-aria/focus": "3.21.5", - "@react-aria/interactions": "3.27.1", - "@react-aria/utils": "3.33.1", - "@react-types/link": "3.6.7", - "@react-types/shared": "3.33.1" - }, - "peerDependencies": { - "react": ">=18 || >=19.0.0-rc.0" - } - }, - "node_modules/@heroui/use-aria-link/node_modules/@react-aria/focus": { - "version": "3.21.5", - "resolved": "https://registry.npmjs.org/@react-aria/focus/-/focus-3.21.5.tgz", - "integrity": "sha512-V18fwCyf8zqgJdpLQeDU5ZRNd9TeOfBbhLgmX77Zr5ae9XwaoJ1R3SFJG1wCJX60t34AW+aLZSEEK+saQElf3Q==", - "license": "Apache-2.0", - "dependencies": { - "@react-aria/interactions": "^3.27.1", - "@react-aria/utils": "^3.33.1", - "@react-types/shared": "^3.33.1", - "@swc/helpers": "^0.5.0", - "clsx": "^2.0.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@heroui/use-aria-link/node_modules/@react-aria/interactions": { - "version": "3.27.1", - "resolved": "https://registry.npmjs.org/@react-aria/interactions/-/interactions-3.27.1.tgz", - "integrity": "sha512-M3wLpTTmDflI0QGNK0PJNUaBXXfeBXue8ZxLMngfc1piHNiH4G5lUvWd9W14XVbqrSCVY8i8DfGrNYpyyZu0tw==", - "license": "Apache-2.0", - "dependencies": { - "@react-aria/ssr": "^3.9.10", - "@react-aria/utils": "^3.33.1", - "@react-stately/flags": "^3.1.2", - "@react-types/shared": "^3.33.1", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@heroui/use-aria-modal-overlay": { - "version": "2.2.21", - "resolved": "https://registry.npmjs.org/@heroui/use-aria-modal-overlay/-/use-aria-modal-overlay-2.2.21.tgz", - "integrity": "sha512-Qwj5ldLFpfinfGpYUQu92TCpGKzd9Uamhd31ayRvYl6+LwOX124N9ObRYBTXyEiNJ7XFYer3vXQVeaR84xM1Gg==", - "license": "MIT", - "dependencies": { - "@heroui/use-aria-overlay": "2.0.6", - "@react-aria/overlays": "3.31.2", - "@react-aria/utils": "3.33.1", - "@react-stately/overlays": "3.6.23" - }, - "peerDependencies": { - "react": ">=18 || >=19.0.0-rc.0", - "react-dom": ">=18 || >=19.0.0-rc.0" - } - }, - "node_modules/@heroui/use-aria-modal-overlay/node_modules/@react-stately/overlays": { - "version": "3.6.23", - "resolved": "https://registry.npmjs.org/@react-stately/overlays/-/overlays-3.6.23.tgz", - "integrity": "sha512-RzWxots9A6gAzQMP4s8hOAHV7SbJRTFSlQbb6ly1nkWQXacOSZSFNGsKOaS0eIatfNPlNnW4NIkgtGws5UYzfw==", - "license": "Apache-2.0", - "dependencies": { - "@react-stately/utils": "^3.11.0", - "@react-types/overlays": "^3.9.4", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@heroui/use-aria-multiselect": { - "version": "2.4.21", - "resolved": "https://registry.npmjs.org/@heroui/use-aria-multiselect/-/use-aria-multiselect-2.4.21.tgz", - "integrity": "sha512-f/7YkTfS67OMXXYCO9WTI0Fj9YGPOgdwMIqhaSnFdA2UywA3W71PPeEqpKeuvO6isBW53YOynAPMZXF1NcsuHw==", - "license": "MIT", - "dependencies": { - "@react-aria/i18n": "3.12.16", - "@react-aria/interactions": "3.27.1", - "@react-aria/label": "3.7.25", - "@react-aria/listbox": "3.15.3", - "@react-aria/menu": "3.21.0", - "@react-aria/selection": "3.27.2", - "@react-aria/utils": "3.33.1", - "@react-stately/form": "3.2.4", - "@react-stately/list": "3.13.4", - "@react-stately/menu": "3.9.11", - "@react-types/button": "3.15.1", - "@react-types/overlays": "3.9.4", - "@react-types/shared": "3.33.1" - }, - "peerDependencies": { - "react": ">=18 || >=19.0.0-rc.0", - "react-dom": ">=18 || >=19.0.0-rc.0" - } - }, - "node_modules/@heroui/use-aria-multiselect/node_modules/@react-aria/interactions": { - "version": "3.27.1", - "resolved": "https://registry.npmjs.org/@react-aria/interactions/-/interactions-3.27.1.tgz", - "integrity": "sha512-M3wLpTTmDflI0QGNK0PJNUaBXXfeBXue8ZxLMngfc1piHNiH4G5lUvWd9W14XVbqrSCVY8i8DfGrNYpyyZu0tw==", - "license": "Apache-2.0", - "dependencies": { - "@react-aria/ssr": "^3.9.10", - "@react-aria/utils": "^3.33.1", - "@react-stately/flags": "^3.1.2", - "@react-types/shared": "^3.33.1", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@heroui/use-aria-multiselect/node_modules/@react-aria/label": { - "version": "3.7.25", - "resolved": "https://registry.npmjs.org/@react-aria/label/-/label-3.7.25.tgz", - "integrity": "sha512-oNK3Pqj4LDPwEbQaoM/uCip4QvQmmwGOh08VeW+vzSi6TAwf+KoWTyH/tiAeB0CHWNDK0k3e1iTygTAt4wzBmg==", - "license": "Apache-2.0", - "dependencies": { - "@react-aria/utils": "^3.33.1", - "@react-types/shared": "^3.33.1", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@heroui/use-aria-multiselect/node_modules/@react-aria/listbox": { - "version": "3.15.3", - "resolved": "https://registry.npmjs.org/@react-aria/listbox/-/listbox-3.15.3.tgz", - "integrity": "sha512-C6YgiyrHS5sbS5UBdxGMhEs+EKJYotJgGVtl9l0ySXpBUXERiHJWLOyV7a8PwkUOmepbB4FaLD7Y9EUzGkrGlw==", - "license": "Apache-2.0", - "dependencies": { - "@react-aria/interactions": "^3.27.1", - "@react-aria/label": "^3.7.25", - "@react-aria/selection": "^3.27.2", - "@react-aria/utils": "^3.33.1", - "@react-stately/collections": "^3.12.10", - "@react-stately/list": "^3.13.4", - "@react-types/listbox": "^3.7.6", - "@react-types/shared": "^3.33.1", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@heroui/use-aria-multiselect/node_modules/@react-aria/menu": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/@react-aria/menu/-/menu-3.21.0.tgz", - "integrity": "sha512-CKTVZ4izSE1eKIti6TbTtzJAUo+WT8O4JC0XZCYDBpa0f++lD19Kz9aY+iY1buv5xGI20gAfpO474E9oEd4aQA==", - "license": "Apache-2.0", - "dependencies": { - "@react-aria/focus": "^3.21.5", - "@react-aria/i18n": "^3.12.16", - "@react-aria/interactions": "^3.27.1", - "@react-aria/overlays": "^3.31.2", - "@react-aria/selection": "^3.27.2", - "@react-aria/utils": "^3.33.1", - "@react-stately/collections": "^3.12.10", - "@react-stately/menu": "^3.9.11", - "@react-stately/selection": "^3.20.9", - "@react-stately/tree": "^3.9.6", - "@react-types/button": "^3.15.1", - "@react-types/menu": "^3.10.7", - "@react-types/shared": "^3.33.1", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@heroui/use-aria-multiselect/node_modules/@react-aria/selection": { - "version": "3.27.2", - "resolved": "https://registry.npmjs.org/@react-aria/selection/-/selection-3.27.2.tgz", - "integrity": "sha512-GbUSSLX/ciXix95KW1g+SLM9np7iXpIZrFDSXkC6oNx1uhy18eAcuTkeZE25+SY5USVUmEzjI3m/3JoSUcebbg==", - "license": "Apache-2.0", - "dependencies": { - "@react-aria/focus": "^3.21.5", - "@react-aria/i18n": "^3.12.16", - "@react-aria/interactions": "^3.27.1", - "@react-aria/utils": "^3.33.1", - "@react-stately/selection": "^3.20.9", - "@react-types/shared": "^3.33.1", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@heroui/use-aria-multiselect/node_modules/@react-types/button": { - "version": "3.15.1", - "resolved": "https://registry.npmjs.org/@react-types/button/-/button-3.15.1.tgz", - "integrity": "sha512-M1HtsKreJkigCnqceuIT22hDJBSStbPimnpmQmsl7SNyqCFY3+DHS7y/Sl3GvqCkzxF7j9UTL0dG38lGQ3K4xQ==", - "license": "Apache-2.0", - "dependencies": { - "@react-types/shared": "^3.33.1" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@heroui/use-aria-multiselect/node_modules/@react-types/overlays": { - "version": "3.9.4", - "resolved": "https://registry.npmjs.org/@react-types/overlays/-/overlays-3.9.4.tgz", - "integrity": "sha512-7Z9HaebMFyYBqtv3XVNHEmVkm7AiYviV7gv0c98elEN2Co+eQcKFGvwBM9Gy/lV57zlTqFX1EX/SAqkMEbCLOA==", - "license": "Apache-2.0", - "dependencies": { - "@react-types/shared": "^3.33.1" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@heroui/use-aria-overlay": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@heroui/use-aria-overlay/-/use-aria-overlay-2.0.6.tgz", - "integrity": "sha512-7q8oj5DZjr9oGYUB1UTOBnnuAapkBmfATCsdUeNOxQdYb2glJp52sTUslO+ykI9xVOAJSGYAmGuWgY5d+8mD6Q==", - "license": "MIT", - "dependencies": { - "@react-aria/focus": "3.21.5", - "@react-aria/interactions": "3.27.1", - "@react-aria/overlays": "3.31.2", - "@react-types/shared": "3.33.1" - }, - "peerDependencies": { - "react": ">=18", - "react-dom": ">=18" - } - }, - "node_modules/@heroui/use-aria-overlay/node_modules/@react-aria/focus": { - "version": "3.21.5", - "resolved": "https://registry.npmjs.org/@react-aria/focus/-/focus-3.21.5.tgz", - "integrity": "sha512-V18fwCyf8zqgJdpLQeDU5ZRNd9TeOfBbhLgmX77Zr5ae9XwaoJ1R3SFJG1wCJX60t34AW+aLZSEEK+saQElf3Q==", - "license": "Apache-2.0", - "dependencies": { - "@react-aria/interactions": "^3.27.1", - "@react-aria/utils": "^3.33.1", - "@react-types/shared": "^3.33.1", - "@swc/helpers": "^0.5.0", - "clsx": "^2.0.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@heroui/use-aria-overlay/node_modules/@react-aria/interactions": { - "version": "3.27.1", - "resolved": "https://registry.npmjs.org/@react-aria/interactions/-/interactions-3.27.1.tgz", - "integrity": "sha512-M3wLpTTmDflI0QGNK0PJNUaBXXfeBXue8ZxLMngfc1piHNiH4G5lUvWd9W14XVbqrSCVY8i8DfGrNYpyyZu0tw==", - "license": "Apache-2.0", - "dependencies": { - "@react-aria/ssr": "^3.9.10", - "@react-aria/utils": "^3.33.1", - "@react-stately/flags": "^3.1.2", - "@react-types/shared": "^3.33.1", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@heroui/use-callback-ref": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/@heroui/use-callback-ref/-/use-callback-ref-2.1.8.tgz", - "integrity": "sha512-D1JDo9YyFAprYpLID97xxQvf86NvyWLay30BeVVZT9kWmar6O9MbCRc7ACi7Ngko60beonj6+amTWkTm7QuY/Q==", - "license": "MIT", - "dependencies": { - "@heroui/use-safe-layout-effect": "2.1.8" - }, - "peerDependencies": { - "react": ">=18 || >=19.0.0-rc.0" - } - }, - "node_modules/@heroui/use-clipboard": { - "version": "2.1.9", - "resolved": "https://registry.npmjs.org/@heroui/use-clipboard/-/use-clipboard-2.1.9.tgz", - "integrity": "sha512-lkBq5RpXHiPvk1BXKJG8gMM0f7jRMIGnxAXDjAUzZyXKBuWLoM+XlaUWmZHtmkkjVFMX1L4vzA+vxi9rZbenEQ==", - "license": "MIT", - "peerDependencies": { - "react": ">=18 || >=19.0.0-rc.0" - } - }, - "node_modules/@heroui/use-data-scroll-overflow": { - "version": "2.2.13", - "resolved": "https://registry.npmjs.org/@heroui/use-data-scroll-overflow/-/use-data-scroll-overflow-2.2.13.tgz", - "integrity": "sha512-zboLXO1pgYdzMUahDcVt5jf+l1jAQ/D9dFqr7AxWLfn6tn7/EgY0f6xIrgWDgJnM0U3hKxVeY13pAeB4AFTqTw==", - "license": "MIT", - "dependencies": { - "@heroui/shared-utils": "2.1.12" - }, - "peerDependencies": { - "react": ">=18 || >=19.0.0-rc.0" - } - }, - "node_modules/@heroui/use-disclosure": { - "version": "2.2.19", - "resolved": "https://registry.npmjs.org/@heroui/use-disclosure/-/use-disclosure-2.2.19.tgz", - "integrity": "sha512-N3CBikg1cxik2xp1UQkPUBbKPGrvtdsRyAlOnGygliyr5wKpZHLZi0R/g8OxTZVk3zUSCl7HZJT13ddM5TqEvA==", - "license": "MIT", - "dependencies": { - "@heroui/use-callback-ref": "2.1.8", - "@react-aria/utils": "3.33.1", - "@react-stately/utils": "3.11.0" - }, - "peerDependencies": { - "react": ">=18 || >=19.0.0-rc.0" - } - }, - "node_modules/@heroui/use-disclosure/node_modules/@react-stately/utils": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/@react-stately/utils/-/utils-3.11.0.tgz", - "integrity": "sha512-8LZpYowJ9eZmmYLpudbo/eclIRnbhWIJZ994ncmlKlouNzKohtM8qTC6B1w1pwUbiwGdUoyzLuQbeaIor5Dvcw==", - "license": "Apache-2.0", - "dependencies": { - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@heroui/use-draggable": { - "version": "2.1.20", - "resolved": "https://registry.npmjs.org/@heroui/use-draggable/-/use-draggable-2.1.20.tgz", - "integrity": "sha512-yXn3jU3qiUx6aUd2osbDfddpnUTTh2wAVzpNyI+BXl2Z3rkVU9jqiJxZa+BXfsqFX17KrlrxwPPBmLNhSdBKHg==", - "license": "MIT", - "dependencies": { - "@react-aria/interactions": "3.27.1" - }, - "peerDependencies": { - "react": ">=18 || >=19.0.0-rc.0" - } - }, - "node_modules/@heroui/use-draggable/node_modules/@react-aria/interactions": { - "version": "3.27.1", - "resolved": "https://registry.npmjs.org/@react-aria/interactions/-/interactions-3.27.1.tgz", - "integrity": "sha512-M3wLpTTmDflI0QGNK0PJNUaBXXfeBXue8ZxLMngfc1piHNiH4G5lUvWd9W14XVbqrSCVY8i8DfGrNYpyyZu0tw==", - "license": "Apache-2.0", - "dependencies": { - "@react-aria/ssr": "^3.9.10", - "@react-aria/utils": "^3.33.1", - "@react-stately/flags": "^3.1.2", - "@react-types/shared": "^3.33.1", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@heroui/use-form-reset": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@heroui/use-form-reset/-/use-form-reset-2.0.1.tgz", - "integrity": "sha512-6slKWiLtVfgZnVeHVkM9eXgjwI07u0CUaLt2kQpfKPqTSTGfbHgCYJFduijtThhTdKBhdH6HCmzTcnbVlAxBXw==", - "license": "MIT", - "peerDependencies": { - "react": ">=18 || >=19.0.0-rc.0" - } - }, - "node_modules/@heroui/use-image": { - "version": "2.1.14", - "resolved": "https://registry.npmjs.org/@heroui/use-image/-/use-image-2.1.14.tgz", - "integrity": "sha512-eCxtKOsM1tszBKYqz8qIJwGIxEAUC7ua+6L9vK8JgG6gOC0jEPFGH7keQuPVprzRtG3DmNt90icowqEjnOHdFQ==", - "license": "MIT", - "dependencies": { - "@heroui/react-utils": "2.1.14", - "@heroui/use-safe-layout-effect": "2.1.8" - }, - "peerDependencies": { - "react": ">=18 || >=19.0.0-rc.0" - } - }, - "node_modules/@heroui/use-intersection-observer": { - "version": "2.2.14", - "resolved": "https://registry.npmjs.org/@heroui/use-intersection-observer/-/use-intersection-observer-2.2.14.tgz", - "integrity": "sha512-qYJeMk4cTsF+xIckRctazCgWQ4BVOpJu+bhhkB1NrN+MItx19Lcb7ksOqMdN5AiSf85HzDcAEPIQ9w9RBlt5sg==", - "license": "MIT", - "peerDependencies": { - "react": ">=18 || >=19.0.0-rc.0" - } - }, - "node_modules/@heroui/use-is-mobile": { - "version": "2.2.12", - "resolved": "https://registry.npmjs.org/@heroui/use-is-mobile/-/use-is-mobile-2.2.12.tgz", - "integrity": "sha512-2UKa4v1xbvFwerWKoMTrg4q9ZfP9MVIVfCl1a7JuKQlXq3jcyV6z1as5bZ41pCsTOT+wUVOFnlr6rzzQwT9ZOA==", - "license": "MIT", - "dependencies": { - "@react-aria/ssr": "3.9.10" - }, - "peerDependencies": { - "react": ">=18 || >=19.0.0-rc.0" - } - }, - "node_modules/@heroui/use-is-mobile/node_modules/@react-aria/ssr": { - "version": "3.9.10", - "resolved": "https://registry.npmjs.org/@react-aria/ssr/-/ssr-3.9.10.tgz", - "integrity": "sha512-hvTm77Pf+pMBhuBm760Li0BVIO38jv1IBws1xFm1NoL26PU+fe+FMW5+VZWyANR6nYL65joaJKZqOdTQMkO9IQ==", - "license": "Apache-2.0", - "dependencies": { - "@swc/helpers": "^0.5.0" - }, - "engines": { - "node": ">= 12" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@heroui/use-is-mounted": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/@heroui/use-is-mounted/-/use-is-mounted-2.1.8.tgz", - "integrity": "sha512-DO/Th1vD4Uy8KGhd17oGlNA4wtdg91dzga+VMpmt94gSZe1WjsangFwoUBxF2uhlzwensCX9voye3kerP/lskg==", - "license": "MIT", - "peerDependencies": { - "react": ">=18 || >=19.0.0-rc.0" - } - }, - "node_modules/@heroui/use-measure": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/@heroui/use-measure/-/use-measure-2.1.8.tgz", - "integrity": "sha512-GjT9tIgluqYMZWfAX6+FFdRQBqyHeuqUMGzAXMTH9kBXHU0U5C5XU2c8WFORkNDoZIg1h13h1QdV+Vy4LE1dEA==", - "license": "MIT", - "peerDependencies": { - "react": ">=18 || >=19.0.0-rc.0" - } - }, - "node_modules/@heroui/use-pagination": { - "version": "2.2.20", - "resolved": "https://registry.npmjs.org/@heroui/use-pagination/-/use-pagination-2.2.20.tgz", - "integrity": "sha512-+ZK+vJgLq7JKLJAnIwfbxe/oF1hANtIiCR6H++q7fOw9pxZZQsntmLEu4kvRhpGZRp5C5T10A1GKIK7/xz1ZdA==", - "license": "MIT", - "dependencies": { - "@heroui/shared-utils": "2.1.12", - "@react-aria/i18n": "3.12.16" - }, - "peerDependencies": { - "react": ">=18 || >=19.0.0-rc.0" - } - }, - "node_modules/@heroui/use-resize": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/@heroui/use-resize/-/use-resize-2.1.8.tgz", - "integrity": "sha512-htF3DND5GmrSiMGnzRbISeKcH+BqhQ/NcsP9sBTIl7ewvFaWiDhEDiUHdJxflmJGd/c5qZq2nYQM/uluaqIkKA==", - "license": "MIT", - "peerDependencies": { - "react": ">=18 || >=19.0.0-rc.0" - } - }, - "node_modules/@heroui/use-safe-layout-effect": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/@heroui/use-safe-layout-effect/-/use-safe-layout-effect-2.1.8.tgz", - "integrity": "sha512-wbnZxVWCYqk10XRMu0veSOiVsEnLcmGUmJiapqgaz0fF8XcpSScmqjTSoWjHIEWaHjQZ6xr+oscD761D6QJN+Q==", - "license": "MIT", - "peerDependencies": { - "react": ">=18 || >=19.0.0-rc.0" - } - }, - "node_modules/@heroui/use-scroll-position": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/@heroui/use-scroll-position/-/use-scroll-position-2.1.8.tgz", - "integrity": "sha512-NxanHKObxVfWaPpNRyBR8v7RfokxrzcHyTyQfbgQgAGYGHTMaOGkJGqF8kBzInc3zJi+F0zbX7Nb0QjUgsLNUQ==", - "license": "MIT", - "peerDependencies": { - "react": ">=18 || >=19.0.0-rc.0" - } - }, - "node_modules/@heroui/use-viewport-size": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@heroui/use-viewport-size/-/use-viewport-size-2.0.1.tgz", - "integrity": "sha512-blv8BEB/QdLePLWODPRzRS2eELJ2eyHbdOIADbL0KcfLzOUEg9EiuVk90hcSUDAFqYiJ3YZ5Z0up8sdPcR8Y7g==", - "license": "MIT", - "peerDependencies": { - "react": ">=18 || >=19.0.0-rc.0" - } - }, - "node_modules/@internationalized/date": { - "version": "3.12.3", - "resolved": "https://registry.npmjs.org/@internationalized/date/-/date-3.12.3.tgz", - "integrity": "sha512-fuLX+3ZKLsxI73y8b01EG/WjHb6gE6weCqlfawPO27kBWGMh9G1yH6Csv1uU7/cac9H2GHmOMt6CjmuQ1aia4Q==", - "license": "Apache-2.0", - "dependencies": { - "@swc/helpers": "^0.5.0" - } - }, - "node_modules/@internationalized/message": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/@internationalized/message/-/message-3.1.10.tgz", - "integrity": "sha512-nc0Or6EdWHqZRcsXb6P9hBIpLsfSl/ILh0rk5h/OVBpzmhdExXtPy2cQtWsq8XKRBpRHwDNnAHt4OpolcB7dog==", - "license": "Apache-2.0", - "dependencies": { - "@swc/helpers": "^0.5.0", - "intl-messageformat": "^10.1.0" - } - }, - "node_modules/@internationalized/number": { - "version": "3.6.7", - "resolved": "https://registry.npmjs.org/@internationalized/number/-/number-3.6.7.tgz", - "integrity": "sha512-3ji1fcrT+FPAK86UqEhB/psHixYo6niWPJtt7+qRaYFynt/BaJG8GhAPimtWUpEiVSTq8ZM8L5psMxGquiB/Vg==", - "license": "Apache-2.0", - "dependencies": { - "@swc/helpers": "^0.5.0" - } - }, - "node_modules/@internationalized/string": { - "version": "3.2.10", - "resolved": "https://registry.npmjs.org/@internationalized/string/-/string-3.2.10.tgz", - "integrity": "sha512-PDx6//vHSpRnHfxqMqto11zQvhsaU74O3mKv2F/0eicGZcl9NLjQmGlbHz/LsJh5tLKp4A4L7ZVTzN1/MmMTvA==", - "license": "Apache-2.0", - "dependencies": { - "@swc/helpers": "^0.5.0" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.13", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", - "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.0", - "@jridgewell/trace-mapping": "^0.3.24" - } - }, - "node_modules/@jridgewell/remapping": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", - "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.24" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", - "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", - "dev": true, - "license": "MIT" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.31", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", - "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@napi-rs/lzma-linux-x64-gnu": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/@napi-rs/lzma-linux-x64-gnu/-/lzma-linux-x64-gnu-1.5.1.tgz", - "integrity": "sha512-oTXEIha4SsuXdTA4Iyskj0kpdx2yVXdhd75c2v3xGrHFfVMsbhTPZU/nMPL4sWKo4pBHm3aucLaqGlF696dTyQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^22.20 || ^24.12 || >=25" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@react-aria/breadcrumbs": { - "version": "3.5.32", - "resolved": "https://registry.npmjs.org/@react-aria/breadcrumbs/-/breadcrumbs-3.5.32.tgz", - "integrity": "sha512-S61vh5DJ2PXiXUwD7gk+pvS/b4VPrc3ZJOUZ0yVRLHkVESr5LhIZH+SAVgZkm1lzKyMRG+BH+fiRH/DZRSs7SA==", - "license": "Apache-2.0", - "dependencies": { - "@react-aria/i18n": "^3.12.16", - "@react-aria/link": "^3.8.9", - "@react-aria/utils": "^3.33.1", - "@react-types/breadcrumbs": "^3.7.19", - "@react-types/shared": "^3.33.1", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-aria/button": { - "version": "3.15.1", - "resolved": "https://registry.npmjs.org/@react-aria/button/-/button-3.15.1.tgz", - "integrity": "sha512-SBMn8ZLvjuWCpSqi6o1hOjsqQqkdYFfzIdl/0LgNPUpTclkJuMx7gNXfM3mjgxzSCoS5CD/XdicvqJanMw6jCw==", - "license": "Apache-2.0", - "dependencies": { - "@swc/helpers": "^0.5.0", - "react-aria": "^3.48.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-aria/calendar": { - "version": "3.9.5", - "resolved": "https://registry.npmjs.org/@react-aria/calendar/-/calendar-3.9.5.tgz", - "integrity": "sha512-k0kvceYdZZu+DoeqephtlmIvh1CxqdFyoN52iqVzTz9O0pe5Xfhq7zxPGbeCp4pC61xzp8Lu/6uFA/YNfQQNag==", - "license": "Apache-2.0", - "dependencies": { - "@internationalized/date": "^3.12.0", - "@react-aria/i18n": "^3.12.16", - "@react-aria/interactions": "^3.27.1", - "@react-aria/live-announcer": "^3.4.4", - "@react-aria/utils": "^3.33.1", - "@react-stately/calendar": "^3.9.3", - "@react-types/button": "^3.15.1", - "@react-types/calendar": "^3.8.3", - "@react-types/shared": "^3.33.1", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-aria/checkbox": { - "version": "3.16.5", - "resolved": "https://registry.npmjs.org/@react-aria/checkbox/-/checkbox-3.16.5.tgz", - "integrity": "sha512-ZhUT7ELuD52hb+Zpzw0ElLQiVOd5sKYahrh+PK3vq13Wk5TedBscALpjuXetI4pwFfdmAM1Lhgcsrd8+6AmyvA==", - "license": "Apache-2.0", - "dependencies": { - "@react-aria/form": "^3.1.5", - "@react-aria/interactions": "^3.27.1", - "@react-aria/label": "^3.7.25", - "@react-aria/toggle": "^3.12.5", - "@react-aria/utils": "^3.33.1", - "@react-stately/checkbox": "^3.7.5", - "@react-stately/form": "^3.2.4", - "@react-stately/toggle": "^3.9.5", - "@react-types/checkbox": "^3.10.4", - "@react-types/shared": "^3.33.1", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-aria/combobox": { - "version": "3.15.0", - "resolved": "https://registry.npmjs.org/@react-aria/combobox/-/combobox-3.15.0.tgz", - "integrity": "sha512-qSjQTFwKl3x1jCP2NRSJ6doZqAp6c2GTfoiFwWjaWg1IewwLsglaW6NnzqRDFiqFbDGgXPn4MqtC1VYEJ3NEjA==", - "license": "Apache-2.0", - "dependencies": { - "@react-aria/focus": "^3.21.5", - "@react-aria/i18n": "^3.12.16", - "@react-aria/interactions": "^3.27.1", - "@react-aria/listbox": "^3.15.3", - "@react-aria/live-announcer": "^3.4.4", - "@react-aria/menu": "^3.21.0", - "@react-aria/overlays": "^3.31.2", - "@react-aria/selection": "^3.27.2", - "@react-aria/textfield": "^3.18.5", - "@react-aria/utils": "^3.33.1", - "@react-stately/collections": "^3.12.10", - "@react-stately/combobox": "^3.13.0", - "@react-stately/form": "^3.2.4", - "@react-types/button": "^3.15.1", - "@react-types/combobox": "^3.14.0", - "@react-types/shared": "^3.33.1", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-aria/datepicker": { - "version": "3.16.1", - "resolved": "https://registry.npmjs.org/@react-aria/datepicker/-/datepicker-3.16.1.tgz", - "integrity": "sha512-6BltCVWt09yefTkGjb2gViGCwoddx9HKJiZbY9u6Es/Q+VhwNJQRtczbnZ3K32p262hIknukNf/5nZaCOI1AKA==", - "license": "Apache-2.0", - "dependencies": { - "@internationalized/date": "^3.12.0", - "@internationalized/number": "^3.6.5", - "@internationalized/string": "^3.2.7", - "@react-aria/focus": "^3.21.5", - "@react-aria/form": "^3.1.5", - "@react-aria/i18n": "^3.12.16", - "@react-aria/interactions": "^3.27.1", - "@react-aria/label": "^3.7.25", - "@react-aria/spinbutton": "^3.7.2", - "@react-aria/utils": "^3.33.1", - "@react-stately/datepicker": "^3.16.1", - "@react-stately/form": "^3.2.4", - "@react-types/button": "^3.15.1", - "@react-types/calendar": "^3.8.3", - "@react-types/datepicker": "^3.13.5", - "@react-types/dialog": "^3.5.24", - "@react-types/shared": "^3.33.1", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-aria/dialog": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/@react-aria/dialog/-/dialog-3.6.1.tgz", - "integrity": "sha512-Eo3Kj23TjENuERUYrGkH+VN1PJvK8/zep76pfwBg29erUVDpGdfagYRq82aGcxJ/ohG8iRxZDwp2tTrU1RG1MQ==", - "license": "Apache-2.0", - "dependencies": { - "@swc/helpers": "^0.5.0", - "react-aria": "^3.48.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-aria/focus": { - "version": "3.22.1", - "resolved": "https://registry.npmjs.org/@react-aria/focus/-/focus-3.22.1.tgz", - "integrity": "sha512-CPxtkyrBi/HYY5P3lE/57sQ6qfa0lN8E55TOm89H0kNGv0lKt+/0zP7lWERzBjRr5IxBVrQX4gFEowBN52LPaA==", - "license": "Apache-2.0", - "dependencies": { - "@swc/helpers": "^0.5.0", - "react-aria": "^3.48.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-aria/form": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/@react-aria/form/-/form-3.2.1.tgz", - "integrity": "sha512-uSNi8/lSFTMPGHzCeAPmFVQ8h8rRulInSVdstRL3hFmyjEOd2gGeKHwssCcLHmujy3T+K/AGeOQiKFpz2hjZEw==", - "license": "Apache-2.0", - "dependencies": { - "@swc/helpers": "^0.5.0", - "react-aria": "^3.48.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-aria/grid": { - "version": "3.15.1", - "resolved": "https://registry.npmjs.org/@react-aria/grid/-/grid-3.15.1.tgz", - "integrity": "sha512-u/903msISq7V78lAJ1Nt4bElMTh6Pzp/bS+lFv79POkFeHWv4icb42egRI7D9YYjO1tYWmNHC5iTcxzvcnOWxQ==", - "license": "Apache-2.0", - "dependencies": { - "@swc/helpers": "^0.5.0", - "react-aria": "^3.48.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-aria/i18n": { - "version": "3.12.16", - "resolved": "https://registry.npmjs.org/@react-aria/i18n/-/i18n-3.12.16.tgz", - "integrity": "sha512-Km2CAz6MFQOUEaattaW+2jBdWOHUF8WX7VQoNbjlqElCP58nSaqi9yxTWUDRhAcn8/xFUnkFh4MFweNgtrHuEA==", - "license": "Apache-2.0", - "dependencies": { - "@internationalized/date": "^3.12.0", - "@internationalized/message": "^3.1.8", - "@internationalized/number": "^3.6.5", - "@internationalized/string": "^3.2.7", - "@react-aria/ssr": "^3.9.10", - "@react-aria/utils": "^3.33.1", - "@react-types/shared": "^3.33.1", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-aria/interactions": { - "version": "3.28.1", - "resolved": "https://registry.npmjs.org/@react-aria/interactions/-/interactions-3.28.1.tgz", - "integrity": "sha512-Bqb+HrD5I5MHS2SKBhISYqo2SW8Y2dfzgF/Y1lIJq7xqLxheo9vzxPGEHhz+XzkgGfoqEJx8A6a3C7uiqS3HWA==", - "license": "Apache-2.0", - "dependencies": { - "@react-types/shared": "^3.34.0", - "@swc/helpers": "^0.5.0", - "react-aria": "^3.48.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-aria/interactions/node_modules/@react-types/shared": { - "version": "3.36.1", - "resolved": "https://registry.npmjs.org/@react-types/shared/-/shared-3.36.1.tgz", - "integrity": "sha512-AzsuD9OfxTOZMMvTRhlN3oHBwOmFN7tDh27LzqmHt4+uOgPhJT7ZM7/kVs/8/o0WxayMUIk3hBmCFRHv1FUoag==", - "license": "Apache-2.0", - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-aria/label": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/@react-aria/label/-/label-3.8.1.tgz", - "integrity": "sha512-zf6hG22PnxZ9kEUwxORClBicHK5pcvucDU+lotGsI6ENbdIvJAMNn9X0oiPPae56CVf2T0KEL9NB8LKdAfzCIw==", - "license": "Apache-2.0", - "dependencies": { - "@swc/helpers": "^0.5.0", - "react-aria": "^3.48.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-aria/landmark": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@react-aria/landmark/-/landmark-3.1.1.tgz", - "integrity": "sha512-Njn/UVrCb2BPW1CPLHA1vrH51+ug62xLMNGUu2qtYj1rAxkLG1m3151hewgcxYtpmPxYlnRtOAmSuu/oD5YTFA==", - "license": "Apache-2.0", - "dependencies": { - "@swc/helpers": "^0.5.0", - "react-aria": "^3.48.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-aria/link": { - "version": "3.9.1", - "resolved": "https://registry.npmjs.org/@react-aria/link/-/link-3.9.1.tgz", - "integrity": "sha512-lup+i3TVgVjRJOt6kpngZfP+3bmeABqcDRhEaE+7xg7DRpbeiccNYVMtKySiFTZePwP3fcbCyTGxZe6DY4CLmA==", - "license": "Apache-2.0", - "dependencies": { - "@swc/helpers": "^0.5.0", - "react-aria": "^3.48.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-aria/listbox": { - "version": "3.16.1", - "resolved": "https://registry.npmjs.org/@react-aria/listbox/-/listbox-3.16.1.tgz", - "integrity": "sha512-FbNeUXmo/H2Qp+yKboNod1eVhfmQDv1YexzEIAHsKL5Cx8uA7wZID9Pbq28jPC4plPISgS5KLBodaDikOXqviA==", - "license": "Apache-2.0", - "dependencies": { - "@swc/helpers": "^0.5.0", - "react-aria": "^3.48.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-aria/live-announcer": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/@react-aria/live-announcer/-/live-announcer-3.5.1.tgz", - "integrity": "sha512-kLvwHjM3D7KgdquiAhUpRnMLKFrvl2r8naDXqPUlSWGRG15wsJRLhQOHLxGp0Umyg7KcSA+OD1mhQV5aRv0P1w==", - "license": "Apache-2.0", - "dependencies": { - "@swc/helpers": "^0.5.0", - "react-aria": "^3.48.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-aria/menu": { - "version": "3.22.1", - "resolved": "https://registry.npmjs.org/@react-aria/menu/-/menu-3.22.1.tgz", - "integrity": "sha512-ASP2u11+jg4OQh+QaDlWb7upMgsMITBQTjPFPbUJp6eE4q/cddLPYf4/9yfxh/bwTg0iDdzoDrgdtbwNGYNSfg==", - "license": "Apache-2.0", - "dependencies": { - "@swc/helpers": "^0.5.0", - "react-aria": "^3.48.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-aria/numberfield": { - "version": "3.12.5", - "resolved": "https://registry.npmjs.org/@react-aria/numberfield/-/numberfield-3.12.5.tgz", - "integrity": "sha512-Fi41IUWXEHLFIeJ/LHuZ9Azs8J/P563fZi37GSBkIq5P1pNt1rPgJJng5CNn4KsHxwqadTRUlbbZwbZraWDtRg==", - "license": "Apache-2.0", - "dependencies": { - "@react-aria/i18n": "^3.12.16", - "@react-aria/interactions": "^3.27.1", - "@react-aria/live-announcer": "^3.4.4", - "@react-aria/spinbutton": "^3.7.2", - "@react-aria/textfield": "^3.18.5", - "@react-aria/utils": "^3.33.1", - "@react-stately/form": "^3.2.4", - "@react-stately/numberfield": "^3.11.0", - "@react-types/button": "^3.15.1", - "@react-types/numberfield": "^3.8.18", - "@react-types/shared": "^3.33.1", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-aria/overlays": { - "version": "3.31.2", - "resolved": "https://registry.npmjs.org/@react-aria/overlays/-/overlays-3.31.2.tgz", - "integrity": "sha512-78HYI08r6LvcfD34gyv19ArRIjy1qxOKuXl/jYnjLDyQzD4pVb634IQWcm0zt10RdKgyuH6HTqvuDOgZTLet7Q==", - "license": "Apache-2.0", - "dependencies": { - "@react-aria/focus": "^3.21.5", - "@react-aria/i18n": "^3.12.16", - "@react-aria/interactions": "^3.27.1", - "@react-aria/ssr": "^3.9.10", - "@react-aria/utils": "^3.33.1", - "@react-aria/visually-hidden": "^3.8.31", - "@react-stately/flags": "^3.1.2", - "@react-stately/overlays": "^3.6.23", - "@react-types/button": "^3.15.1", - "@react-types/overlays": "^3.9.4", - "@react-types/shared": "^3.33.1", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-aria/progress": { - "version": "3.4.30", - "resolved": "https://registry.npmjs.org/@react-aria/progress/-/progress-3.4.30.tgz", - "integrity": "sha512-S6OWVGgluSWYSd/A6O8CVjz83eeMUfkuWSra0ewAV9bmxZ7TP9pUmD3bGdqHZEl97nt5vHGjZ3eq/x8eCmzKhA==", - "license": "Apache-2.0", - "dependencies": { - "@react-aria/i18n": "^3.12.16", - "@react-aria/label": "^3.7.25", - "@react-aria/utils": "^3.33.1", - "@react-types/progress": "^3.5.18", - "@react-types/shared": "^3.33.1", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-aria/radio": { - "version": "3.12.5", - "resolved": "https://registry.npmjs.org/@react-aria/radio/-/radio-3.12.5.tgz", - "integrity": "sha512-8CCJKJzfozEiWBPO9QAATG1rBGJEJ+xoqvHf9LKU2sPFGsA2/SRnLs6LB9fCG5R3spvaK1xz0any1fjWPl7x8A==", - "license": "Apache-2.0", - "dependencies": { - "@react-aria/focus": "^3.21.5", - "@react-aria/form": "^3.1.5", - "@react-aria/i18n": "^3.12.16", - "@react-aria/interactions": "^3.27.1", - "@react-aria/label": "^3.7.25", - "@react-aria/utils": "^3.33.1", - "@react-stately/radio": "^3.11.5", - "@react-types/radio": "^3.9.4", - "@react-types/shared": "^3.33.1", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-aria/selection": { - "version": "3.28.1", - "resolved": "https://registry.npmjs.org/@react-aria/selection/-/selection-3.28.1.tgz", - "integrity": "sha512-gGa9HkRnWsKxRhrtVASvecNyetMtP9fNF/Vcsy9Z+6NigjGUSN4SU0bhfglZ706B4t/NSMoVhcBJXlyFiG0hQw==", - "license": "Apache-2.0", - "dependencies": { - "@swc/helpers": "^0.5.0", - "react-aria": "^3.48.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-aria/slider": { - "version": "3.8.5", - "resolved": "https://registry.npmjs.org/@react-aria/slider/-/slider-3.8.5.tgz", - "integrity": "sha512-gqkJxznk141mE0JamXF5CXml9PDbPkBz8dyKlihtWHWX4yhEbVYdC9J0otE7iCR3zx69Bm7WHoTGL0BsdpKzVA==", - "license": "Apache-2.0", - "dependencies": { - "@react-aria/i18n": "^3.12.16", - "@react-aria/interactions": "^3.27.1", - "@react-aria/label": "^3.7.25", - "@react-aria/utils": "^3.33.1", - "@react-stately/slider": "^3.7.5", - "@react-types/shared": "^3.33.1", - "@react-types/slider": "^3.8.4", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-aria/spinbutton": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/@react-aria/spinbutton/-/spinbutton-3.8.1.tgz", - "integrity": "sha512-mDed6rDI2JE3QCaX+QykRyw9GjiRAHY1+RqxX2DR0yEtW2n9GxTQfCR9KVnXm69eTgCoxDIa7okBCrHhYB8bUw==", - "license": "Apache-2.0", - "dependencies": { - "@swc/helpers": "^0.5.0", - "react-aria": "^3.48.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-aria/ssr": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/@react-aria/ssr/-/ssr-3.10.1.tgz", - "integrity": "sha512-jn038/ZYmu6DpfXJ6r2U9zFFppjbc9wnApPJSCxao2RZVEqep4YyoniHSy8qv6V21/xyS4IV7W9a+X2jOjSuag==", - "license": "Apache-2.0", - "dependencies": { - "@swc/helpers": "^0.5.0", - "react-aria": "^3.48.0" - }, - "engines": { - "node": ">= 12" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-aria/switch": { - "version": "3.7.11", - "resolved": "https://registry.npmjs.org/@react-aria/switch/-/switch-3.7.11.tgz", - "integrity": "sha512-dYVX71HiepBsKyeMaQgHbhqI+MQ3MVoTd5EnTbUjefIBnmQZavYj1/e4NUiUI4Ix+/C0HxL8ibDAv4NlSW3eLQ==", - "license": "Apache-2.0", - "dependencies": { - "@react-aria/toggle": "^3.12.5", - "@react-stately/toggle": "^3.9.5", - "@react-types/shared": "^3.33.1", - "@react-types/switch": "^3.5.17", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-aria/table": { - "version": "3.17.11", - "resolved": "https://registry.npmjs.org/@react-aria/table/-/table-3.17.11.tgz", - "integrity": "sha512-GkYmWPiW3OM+FUZxdS33teHXHXde7TjHuYgDDaG9phvg6cQTQjGilJozrzA3OfftTOq5VB8XcKTIQW3c0tpYsQ==", - "license": "Apache-2.0", - "dependencies": { - "@react-aria/focus": "^3.21.5", - "@react-aria/grid": "^3.14.8", - "@react-aria/i18n": "^3.12.16", - "@react-aria/interactions": "^3.27.1", - "@react-aria/live-announcer": "^3.4.4", - "@react-aria/utils": "^3.33.1", - "@react-aria/visually-hidden": "^3.8.31", - "@react-stately/collections": "^3.12.10", - "@react-stately/flags": "^3.1.2", - "@react-stately/table": "^3.15.4", - "@react-types/checkbox": "^3.10.4", - "@react-types/grid": "^3.3.8", - "@react-types/shared": "^3.33.1", - "@react-types/table": "^3.13.6", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-aria/tabs": { - "version": "3.11.1", - "resolved": "https://registry.npmjs.org/@react-aria/tabs/-/tabs-3.11.1.tgz", - "integrity": "sha512-3Ppz7yaEDW9L7p9PE9yNOl5caLwNnnLQqI+MX/dwbWlw9HluHS7uIjb21oswNl6UbSxAWyENOka45+KN4Fkh7A==", - "license": "Apache-2.0", - "dependencies": { - "@react-aria/focus": "^3.21.5", - "@react-aria/i18n": "^3.12.16", - "@react-aria/selection": "^3.27.2", - "@react-aria/utils": "^3.33.1", - "@react-stately/tabs": "^3.8.9", - "@react-types/shared": "^3.33.1", - "@react-types/tabs": "^3.3.22", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-aria/textfield": { - "version": "3.19.1", - "resolved": "https://registry.npmjs.org/@react-aria/textfield/-/textfield-3.19.1.tgz", - "integrity": "sha512-zYxQvOgN2CkvNvKchHEDu9UAOrwYzsaeUKVbrFcXJ2iIeZuZnEcNNJpp7WVCfV+9XeP+Jzjjnmjg9BH1H52ebg==", - "license": "Apache-2.0", - "dependencies": { - "@swc/helpers": "^0.5.0", - "react-aria": "^3.48.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-aria/toast": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/@react-aria/toast/-/toast-3.0.11.tgz", - "integrity": "sha512-2DjZjBAvm8/CWbnZ6s7LjkYCkULKtjMve6GvhPTq98AthuEDLEiBvM1wa3xdecCRhZyRT1g6DXqVca0EfZ9fJA==", - "license": "Apache-2.0", - "dependencies": { - "@react-aria/i18n": "^3.12.16", - "@react-aria/interactions": "^3.27.1", - "@react-aria/landmark": "^3.0.10", - "@react-aria/utils": "^3.33.1", - "@react-stately/toast": "^3.1.3", - "@react-types/button": "^3.15.1", - "@react-types/shared": "^3.33.1", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-aria/toggle": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/@react-aria/toggle/-/toggle-3.13.1.tgz", - "integrity": "sha512-1SPMBSrbT94Jsy7Wuv9SH2uPv7szGP7KgO4QGIAcF3e5kHwvGQJdMHY6+xR17slk8ICXfFojBqUKgpJjyY2+KQ==", - "license": "Apache-2.0", - "dependencies": { - "@swc/helpers": "^0.5.0", - "react-aria": "^3.48.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-aria/toolbar": { - "version": "3.0.0-beta.24", - "resolved": "https://registry.npmjs.org/@react-aria/toolbar/-/toolbar-3.0.0-beta.24.tgz", - "integrity": "sha512-B2Rmpko7Ghi2RbNfsGdbR7I+RQBDhPGVE4bU3/EwHz+P/vNe5LyGPTeSwqaOMsQTF9lKNCkY8424dVTCr6RUMg==", - "license": "Apache-2.0", - "dependencies": { - "@react-aria/focus": "^3.21.5", - "@react-aria/i18n": "^3.12.16", - "@react-aria/utils": "^3.33.1", - "@react-types/shared": "^3.33.1", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-aria/tooltip": { - "version": "3.9.2", - "resolved": "https://registry.npmjs.org/@react-aria/tooltip/-/tooltip-3.9.2.tgz", - "integrity": "sha512-VrgkPwHiEnAnBhoQ4W7kfry/RfVuRWrUPaJSp0+wKM6u0gg2tmn7OFRDXTxBAm/omQUguIdIjRWg7sf3zHH82A==", - "license": "Apache-2.0", - "dependencies": { - "@react-aria/interactions": "^3.27.1", - "@react-aria/utils": "^3.33.1", - "@react-stately/tooltip": "^3.5.11", - "@react-types/shared": "^3.33.1", - "@react-types/tooltip": "^3.5.2", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-aria/utils": { - "version": "3.33.1", - "resolved": "https://registry.npmjs.org/@react-aria/utils/-/utils-3.33.1.tgz", - "integrity": "sha512-kIx1Sj6bbAT0pdqCegHuPanR9zrLn5zMRiM7LN12rgRf55S19ptd9g3ncahArifYTRkfEU9VIn+q0HjfMqS9/w==", - "license": "Apache-2.0", - "dependencies": { - "@react-aria/ssr": "^3.9.10", - "@react-stately/flags": "^3.1.2", - "@react-stately/utils": "^3.11.0", - "@react-types/shared": "^3.33.1", - "@swc/helpers": "^0.5.0", - "clsx": "^2.0.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-aria/visually-hidden": { - "version": "3.8.31", - "resolved": "https://registry.npmjs.org/@react-aria/visually-hidden/-/visually-hidden-3.8.31.tgz", - "integrity": "sha512-RTOHHa4n56a9A3criThqFHBifvZoV71+MCkSuNP2cKO662SUWjqKkd0tJt/mBRMEJPkys8K7Eirp6T8Wt5FFRA==", - "license": "Apache-2.0", - "dependencies": { - "@react-aria/interactions": "^3.27.1", - "@react-aria/utils": "^3.33.1", - "@react-types/shared": "^3.33.1", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-spectrum/button": { - "version": "3.18.1", - "resolved": "https://registry.npmjs.org/@react-spectrum/button/-/button-3.18.1.tgz", - "integrity": "sha512-FW+1d6zfKesMLaBrsRsnnYnsLfvf2qFKuatkCo62o1oGUBtEYI/kae+lwGwlfiX5q9P5OgR2y1IqKtxabf/JKQ==", - "license": "Apache-2.0", - "dependencies": { - "@adobe/react-spectrum": "^3.47.0", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-spectrum/dialog": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/@react-spectrum/dialog/-/dialog-3.10.1.tgz", - "integrity": "sha512-RMoZkKswUMFiEnAHZljEV1ybpMUjrS5RxkwWb3IFMo+ZtnLIeIT87k4DxoUJKOVrw3bnSsLRSTw1Fvf7jZ/eFw==", - "license": "Apache-2.0", - "dependencies": { - "@adobe/react-spectrum": "^3.47.0", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-spectrum/listbox": { - "version": "3.16.1", - "resolved": "https://registry.npmjs.org/@react-spectrum/listbox/-/listbox-3.16.1.tgz", - "integrity": "sha512-iQ7eym1zVR3wmOpOnmbKF0A+cbdzUGobZdNC/H9rdiyGkEE0OIrlk3z3APIFHfM/juK/LHXZ+srbF5LU8/sDCg==", - "license": "Apache-2.0", - "dependencies": { - "@adobe/react-spectrum": "^3.47.0", - "@swc/helpers": "^0.5.0", - "react-stately": "^3.46.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-spectrum/overlays": { - "version": "5.10.1", - "resolved": "https://registry.npmjs.org/@react-spectrum/overlays/-/overlays-5.10.1.tgz", - "integrity": "sha512-VSpplRbzYA/Hmg+fR7fonj/Q3jq7mJHD6A5f189teX5/uRiTk7P4DogBYfU1a70BAq3xBEA4hV3QpA8i9pK8jQ==", - "license": "Apache-2.0", - "dependencies": { - "@adobe/react-spectrum": "^3.47.0", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-spectrum/slider": { - "version": "3.9.1", - "resolved": "https://registry.npmjs.org/@react-spectrum/slider/-/slider-3.9.1.tgz", - "integrity": "sha512-UMBZaaofQsAfH+2SPh2GyxlJjKmRkjVoY1ixybkz8Jh+pOPOFEMugAt3fuLMW22geOC5PXs6AxHYsNb0BwKVnQ==", - "license": "Apache-2.0", - "dependencies": { - "@adobe/react-spectrum": "^3.47.0", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-spectrum/switch": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/@react-spectrum/switch/-/switch-3.7.1.tgz", - "integrity": "sha512-71rSqseVrieCWxQpwCBbqY4F6bBo8IK/jM+r8ounN/WIkoMGhZkVigF8tSwd+/p8ym2tmJq6MoWn0he1taBo0Q==", - "license": "Apache-2.0", - "dependencies": { - "@adobe/react-spectrum": "^3.47.0", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-spectrum/tabs": { - "version": "3.9.1", - "resolved": "https://registry.npmjs.org/@react-spectrum/tabs/-/tabs-3.9.1.tgz", - "integrity": "sha512-1r/NiHeyjcHP1CZ7a30PSS5NesARSV1z9fuiKO+rianq/Xyy5bUW5cU+pSNTghNhRCUhQACopkktGzmTCTCCXQ==", - "license": "Apache-2.0", - "dependencies": { - "@adobe/react-spectrum": "^3.47.0", - "@swc/helpers": "^0.5.0", - "react-stately": "^3.46.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-stately/calendar": { - "version": "3.9.3", - "resolved": "https://registry.npmjs.org/@react-stately/calendar/-/calendar-3.9.3.tgz", - "integrity": "sha512-uw7fCZXoypSBBUsVkbNvJMQWTihZReRbyLIGG3o/ZM630N3OCZhb/h4Uxke4pNu7n527H0V1bAnZgAldIzOYqg==", - "license": "Apache-2.0", - "dependencies": { - "@internationalized/date": "^3.12.0", - "@react-stately/utils": "^3.11.0", - "@react-types/calendar": "^3.8.3", - "@react-types/shared": "^3.33.1", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-stately/checkbox": { - "version": "3.7.5", - "resolved": "https://registry.npmjs.org/@react-stately/checkbox/-/checkbox-3.7.5.tgz", - "integrity": "sha512-K5R5ted7AxLB3sDkuVAazUdyRMraFT1imVqij2GuAiOUFvsZvbuocnDuFkBVKojyV3GpqLBvViV8IaCMc4hNIw==", - "license": "Apache-2.0", - "dependencies": { - "@react-stately/form": "^3.2.4", - "@react-stately/utils": "^3.11.0", - "@react-types/checkbox": "^3.10.4", - "@react-types/shared": "^3.33.1", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-stately/collections": { - "version": "3.12.10", - "resolved": "https://registry.npmjs.org/@react-stately/collections/-/collections-3.12.10.tgz", - "integrity": "sha512-wmF9VxJDyBujBuQ76vXj2g/+bnnj8fx5DdXgRmyfkkYhPB46+g2qnjbVGEvipo7bJuGxDftCUC4SN7l7xqUWfg==", - "license": "Apache-2.0", - "dependencies": { - "@react-types/shared": "^3.33.1", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-stately/combobox": { - "version": "3.13.0", - "resolved": "https://registry.npmjs.org/@react-stately/combobox/-/combobox-3.13.0.tgz", - "integrity": "sha512-dX9g/cK1hjLRjcbWVF6keHxTQDGhKGB2QAgPhWcBmOK3qJv+2dQqsJ6YCGWn/Y2N2acoEseLrAA7+Qe4HWV9cg==", - "license": "Apache-2.0", - "dependencies": { - "@react-stately/collections": "^3.12.10", - "@react-stately/form": "^3.2.4", - "@react-stately/list": "^3.13.4", - "@react-stately/overlays": "^3.6.23", - "@react-stately/utils": "^3.11.0", - "@react-types/combobox": "^3.14.0", - "@react-types/shared": "^3.33.1", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-stately/combobox/node_modules/@react-stately/list": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/@react-stately/list/-/list-3.14.1.tgz", - "integrity": "sha512-3W+GqsDqKih7gqVRzA85P2CtGcahETLzC+NM9zhgz+T0xeHQITc7N2oEAT1Vy+cIKGd1YmfGM8ACgtpcbcnWWA==", - "license": "Apache-2.0", - "dependencies": { - "@swc/helpers": "^0.5.0", - "react-stately": "^3.46.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-stately/datepicker": { - "version": "3.16.1", - "resolved": "https://registry.npmjs.org/@react-stately/datepicker/-/datepicker-3.16.1.tgz", - "integrity": "sha512-BtAMDvxd1OZxkxjqq5tN5TYmp6Hm8+o3+IDA4qmem2/pfQfVbOZeWS2WitcPBImj4n4T+W1A5+PI7mT/6DUBVg==", - "license": "Apache-2.0", - "dependencies": { - "@internationalized/date": "^3.12.0", - "@internationalized/number": "^3.6.5", - "@internationalized/string": "^3.2.7", - "@react-stately/form": "^3.2.4", - "@react-stately/overlays": "^3.6.23", - "@react-stately/utils": "^3.11.0", - "@react-types/datepicker": "^3.13.5", - "@react-types/shared": "^3.33.1", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-stately/flags": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/@react-stately/flags/-/flags-3.2.1.tgz", - "integrity": "sha512-WPw9z4SPYqQMuExCnBNrQyyxCWSi9CDYnVqca19bqxaHZRT/uL5nL+IGCPHHa70Y5rx39E5hYKl8Hf0QJ6XKyA==", - "license": "Apache-2.0", - "dependencies": { - "@swc/helpers": "^0.5.0", - "react-stately": "^3.46.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-stately/form": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/@react-stately/form/-/form-3.2.4.tgz", - "integrity": "sha512-qNBzun8SbLdgahryhKLqL1eqP+MXY6as82sVXYOOvUYLzgU5uuN8mObxYlxJgMI5akSdQJQV3RzyfVobPRE7Kw==", - "license": "Apache-2.0", - "dependencies": { - "@react-types/shared": "^3.33.1", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-stately/list": { - "version": "3.13.4", - "resolved": "https://registry.npmjs.org/@react-stately/list/-/list-3.13.4.tgz", - "integrity": "sha512-HHYSjA9VG7FPSAtpXAjQyM/V7qFHWGg88WmMrDt5QDlTBexwPuH0oFLnW0qaVZpAIxuWIsutZfxRAnme/NhhAA==", - "license": "Apache-2.0", - "dependencies": { - "@react-stately/collections": "^3.12.10", - "@react-stately/selection": "^3.20.9", - "@react-stately/utils": "^3.11.0", - "@react-types/shared": "^3.33.1", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-stately/menu": { - "version": "3.9.11", - "resolved": "https://registry.npmjs.org/@react-stately/menu/-/menu-3.9.11.tgz", - "integrity": "sha512-vYkpO9uV2OUecsIkrOc+Urdl/s1xw/ibNH/UXsp4PtjMnS6mK9q2kXZTM3WvMAKoh12iveUO+YkYCZQshmFLHQ==", - "license": "Apache-2.0", - "dependencies": { - "@react-stately/overlays": "^3.6.23", - "@react-types/menu": "^3.10.7", - "@react-types/shared": "^3.33.1", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-stately/numberfield": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/@react-stately/numberfield/-/numberfield-3.11.0.tgz", - "integrity": "sha512-rxfC047vL0LP4tanjinfjKAriAvdVL57Um5RUL5nHML8IOWCB3TBxegQkJ6to6goScC/oZhd0/Y2LSaiRuKbNw==", - "license": "Apache-2.0", - "dependencies": { - "@internationalized/number": "^3.6.5", - "@react-stately/form": "^3.2.4", - "@react-stately/utils": "^3.11.0", - "@react-types/numberfield": "^3.8.18", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-stately/overlays": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/@react-stately/overlays/-/overlays-3.7.1.tgz", - "integrity": "sha512-vGw9f8i5kPvaQqvvQ8iIhPhJZorwtg2rXycqnUNXkNLadewh1S0ocbnRvrb4HW/GGC37rFmGcG1fYCHA/WIn6w==", - "license": "Apache-2.0", - "dependencies": { - "@swc/helpers": "^0.5.0", - "react-stately": "^3.46.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-stately/radio": { - "version": "3.11.5", - "resolved": "https://registry.npmjs.org/@react-stately/radio/-/radio-3.11.5.tgz", - "integrity": "sha512-QxA779S4ea5icQ0ja7CeiNzY1cj7c9G9TN0m7maAIGiTSinZl2Ia8naZJ0XcbRRp+LBll7RFEdekne15TjvS/w==", - "license": "Apache-2.0", - "dependencies": { - "@react-stately/form": "^3.2.4", - "@react-stately/utils": "^3.11.0", - "@react-types/radio": "^3.9.4", - "@react-types/shared": "^3.33.1", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-stately/selection": { - "version": "3.21.1", - "resolved": "https://registry.npmjs.org/@react-stately/selection/-/selection-3.21.1.tgz", - "integrity": "sha512-Tq8UfAOG5SCxnTYivyYQH5NRpiuEJG2k20wmJ/s4Db0FnnjYg1xbKe55vu2A9ni/nUTLKUMj7MFaJytMIXPwxg==", - "license": "Apache-2.0", - "dependencies": { - "@swc/helpers": "^0.5.0", - "react-stately": "^3.46.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-stately/slider": { - "version": "3.7.5", - "resolved": "https://registry.npmjs.org/@react-stately/slider/-/slider-3.7.5.tgz", - "integrity": "sha512-OrQMNR5xamLYH52TXtvTgyw3EMwv+JI+1istQgEj1CHBjC9eZZqn5iNCN20tzm+uDPTH0EIGULFjjPIumqYUQg==", - "license": "Apache-2.0", - "dependencies": { - "@react-stately/utils": "^3.11.0", - "@react-types/shared": "^3.33.1", - "@react-types/slider": "^3.8.4", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-stately/table": { - "version": "3.15.4", - "resolved": "https://registry.npmjs.org/@react-stately/table/-/table-3.15.4.tgz", - "integrity": "sha512-fGaNyw3wv7JgRCNzgyDzpaaTFuSy5f4Qekch4UheMXDJX7dOeaMhUXeOfvnXCVg+BGM4ey/D82RvDOGvPy1Nww==", - "license": "Apache-2.0", - "dependencies": { - "@react-stately/collections": "^3.12.10", - "@react-stately/flags": "^3.1.2", - "@react-stately/grid": "^3.11.9", - "@react-stately/selection": "^3.20.9", - "@react-stately/utils": "^3.11.0", - "@react-types/grid": "^3.3.8", - "@react-types/shared": "^3.33.1", - "@react-types/table": "^3.13.6", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-stately/table/node_modules/@react-stately/grid": { - "version": "3.12.1", - "resolved": "https://registry.npmjs.org/@react-stately/grid/-/grid-3.12.1.tgz", - "integrity": "sha512-GvOXlPtzoswhyV3bZK3habHdHBGR7qdzOy2WumYiNG7DAj8J+9WvAObrPmquuI2VrZYMSNzgFb3IoL+sQsMI8A==", - "license": "Apache-2.0", - "dependencies": { - "@swc/helpers": "^0.5.0", - "react-stately": "^3.46.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-stately/tabs": { - "version": "3.8.9", - "resolved": "https://registry.npmjs.org/@react-stately/tabs/-/tabs-3.8.9.tgz", - "integrity": "sha512-AQ4Xrn6YzIolaVShCV9cnwOjBKPAOGP/PTp7wpSEtQbQ0HZzUDG2RG/M4baMeUB2jZ33b7ifXyPcK78o0uOftg==", - "license": "Apache-2.0", - "dependencies": { - "@react-stately/list": "^3.13.4", - "@react-types/shared": "^3.33.1", - "@react-types/tabs": "^3.3.22", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-stately/toast": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@react-stately/toast/-/toast-3.1.3.tgz", - "integrity": "sha512-mT9QJKmD523lqFpOp0VWZ6QHZENFK7HrodnNJDVc7g616s5GNmemdlkITV43fSY3tHeThCVvPu+Uzh7RvQ9mpQ==", - "license": "Apache-2.0", - "dependencies": { - "@swc/helpers": "^0.5.0", - "use-sync-external-store": "^1.6.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-stately/toggle": { - "version": "3.9.5", - "resolved": "https://registry.npmjs.org/@react-stately/toggle/-/toggle-3.9.5.tgz", - "integrity": "sha512-PVzXc788q3jH98Kvw1LYDL+wpVC14dCEKjOku8cSaqhEof6AJGaLR9yq+EF1yYSL2dxI6z8ghc0OozY8WrcFcA==", - "license": "Apache-2.0", - "dependencies": { - "@react-stately/utils": "^3.11.0", - "@react-types/checkbox": "^3.10.4", - "@react-types/shared": "^3.33.1", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-stately/tooltip": { - "version": "3.5.11", - "resolved": "https://registry.npmjs.org/@react-stately/tooltip/-/tooltip-3.5.11.tgz", - "integrity": "sha512-o8PnFXbvDCuVZ4Ht9ahfS6KHwIZjXopvoQ2vUPxv920irdgWEeC+4omgDOnJ/xFvcpmmJAmSsrQsTQrTguDUQA==", - "license": "Apache-2.0", - "dependencies": { - "@react-stately/overlays": "^3.6.23", - "@react-types/tooltip": "^3.5.2", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-stately/tree": { - "version": "3.9.6", - "resolved": "https://registry.npmjs.org/@react-stately/tree/-/tree-3.9.6.tgz", - "integrity": "sha512-JCuhGyX2A+PAMsx2pRSwArfqNFZJ9JSPkDaOQJS8MFPAsBe5HemvXsdmv9aBIMzlbCYcVq6EsrFnzbVVTBt/6w==", - "license": "Apache-2.0", - "dependencies": { - "@react-stately/collections": "^3.12.10", - "@react-stately/selection": "^3.20.9", - "@react-stately/utils": "^3.11.0", - "@react-types/shared": "^3.33.1", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-stately/utils": { - "version": "3.12.1", - "resolved": "https://registry.npmjs.org/@react-stately/utils/-/utils-3.12.1.tgz", - "integrity": "sha512-NqKfzrknpfwiewx7R2vk1P+CneClInPDsIhw15+jOcUYSEfej0nta4cJywuKQJ2gsPwqX/ojDNixedCve9FWGw==", - "license": "Apache-2.0", - "dependencies": { - "@swc/helpers": "^0.5.0", - "react-stately": "^3.46.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-stately/virtualizer": { - "version": "4.4.6", - "resolved": "https://registry.npmjs.org/@react-stately/virtualizer/-/virtualizer-4.4.6.tgz", - "integrity": "sha512-9SfXgLFB61/8SXNLfg5ARx9jAK4m03Aw6/Cg8mdZN24SYarL4TKNRpfw8K/HHVU/bi6WHSJypk6Z/z19o/ztrg==", - "license": "Apache-2.0", - "dependencies": { - "@react-types/shared": "^3.33.1", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-types/accordion": { - "version": "3.0.0-alpha.26", - "resolved": "https://registry.npmjs.org/@react-types/accordion/-/accordion-3.0.0-alpha.26.tgz", - "integrity": "sha512-OXf/kXcD2vFlEnkcZy/GG+a/1xO9BN7Uh3/5/Ceuj9z2E/WwD55YwU3GFM5zzkZ4+DMkdowHnZX37XnmbyD3Mg==", - "license": "Apache-2.0", - "dependencies": { - "@react-types/shared": "^3.27.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-types/breadcrumbs": { - "version": "3.7.19", - "resolved": "https://registry.npmjs.org/@react-types/breadcrumbs/-/breadcrumbs-3.7.19.tgz", - "integrity": "sha512-AnkyYYmzaM2QFi/N0P/kQLM8tHOyFi7p397B/jEMucXDfwMw5Ny1ObCXeIEqbh8KrIa2Xp8SxmQlCV+8FPs4LA==", - "license": "Apache-2.0", - "dependencies": { - "@react-types/link": "^3.6.7", - "@react-types/shared": "^3.33.1" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-types/breadcrumbs/node_modules/@react-types/link": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@react-types/link/-/link-3.7.0.tgz", - "integrity": "sha512-otEY/XdycY/uz+Ble2vS/VTsU4Myp8bhJtKT17r1R7bYWV3g5ZOVBCH4JvbQHJAkHaqMf9We7uIipkCw42UOeA==", - "license": "Apache-2.0", - "dependencies": { - "@react-aria/link": "^3.9.0", - "@react-spectrum/link": "^3.7.0" - }, - "peerDependencies": { - "@react-spectrum/provider": "^3.0.0", - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-types/breadcrumbs/node_modules/@react-types/link/node_modules/@react-spectrum/link": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/@react-spectrum/link/-/link-3.7.1.tgz", - "integrity": "sha512-sGBrdtrHoEdYv2WGi1MXz4bRVxnspeA02qfIjytOY+vaStqW8tMW21PNw62JbwugaD4SMyoIScEzDuPoxGUW8Q==", - "license": "Apache-2.0", - "dependencies": { - "@adobe/react-spectrum": "^3.47.0", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-types/button": { - "version": "3.16.0", - "resolved": "https://registry.npmjs.org/@react-types/button/-/button-3.16.0.tgz", - "integrity": "sha512-Z5///n2Y1jtF0gokBq2Y1K1cpOwsWZ24HPeAm3eEmZrbBXMrxC2oEA5ZThsSHuIGsqiyNJiQ2scsDftmr+PkZw==", - "license": "Apache-2.0", - "dependencies": { - "@react-aria/button": "^3.15.0", - "@react-spectrum/button": "^3.18.0" - }, - "peerDependencies": { - "@react-spectrum/provider": "^3.0.0", - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-types/calendar": { - "version": "3.8.3", - "resolved": "https://registry.npmjs.org/@react-types/calendar/-/calendar-3.8.3.tgz", - "integrity": "sha512-fpH6WNXotzH0TlKHXXxtjeLZ7ko0sbyHmwDAwmDFyP7T0Iwn1YQZ+lhceLifvynlxuOgX6oBItyUKmkHQ0FouQ==", - "license": "Apache-2.0", - "dependencies": { - "@internationalized/date": "^3.12.0", - "@react-types/shared": "^3.33.1" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-types/checkbox": { - "version": "3.10.4", - "resolved": "https://registry.npmjs.org/@react-types/checkbox/-/checkbox-3.10.4.tgz", - "integrity": "sha512-tYCG0Pd1usEz5hjvBEYcqcA0youx930Rss1QBIse9TgMekA1c2WmPDNupYV8phpO8Zuej3DL1WfBeXcgavK8aw==", - "license": "Apache-2.0", - "dependencies": { - "@react-types/shared": "^3.33.1" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-types/combobox": { - "version": "3.14.0", - "resolved": "https://registry.npmjs.org/@react-types/combobox/-/combobox-3.14.0.tgz", - "integrity": "sha512-zmSSS7BcCOD8rGT8eGbVy7UlL5qq1vm88fFn4WgFe+lfK33ne+E7yTzTxcPY2TCGSo5fY6xMj3OG79FfVNGbSg==", - "license": "Apache-2.0", - "dependencies": { - "@react-types/shared": "^3.33.1" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-types/datepicker": { - "version": "3.13.5", - "resolved": "https://registry.npmjs.org/@react-types/datepicker/-/datepicker-3.13.5.tgz", - "integrity": "sha512-j28Vz+xvbb4bj7+9Xbpc4WTvSitlBvt7YEaEGM/8ZQ5g4Jr85H2KwkmDwjzmMN2r6VMQMMYq9JEcemq5wWpfUQ==", - "license": "Apache-2.0", - "dependencies": { - "@internationalized/date": "^3.12.0", - "@react-types/calendar": "^3.8.3", - "@react-types/overlays": "^3.9.4", - "@react-types/shared": "^3.33.1" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-types/dialog": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@react-types/dialog/-/dialog-3.6.0.tgz", - "integrity": "sha512-vvxohmsTRZWE/saaJt6mMy3ONA4xbQTSk1okfMUK6OMSp/VpLBRLCz/2/myiMK3UIBCagUnrwzOwbk9whnFx0g==", - "license": "Apache-2.0", - "dependencies": { - "@react-aria/dialog": "^3.6.0", - "@react-spectrum/dialog": "^3.10.0" - }, - "peerDependencies": { - "@react-spectrum/provider": "^3.0.0", - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-types/form": { - "version": "3.7.18", - "resolved": "https://registry.npmjs.org/@react-types/form/-/form-3.7.18.tgz", - "integrity": "sha512-0sBJW0+I9nJcF4SmKrYFEWAlehiebSTy7xqriqAXtqfTEdvzAYLGaAK2/7gx+wlNZeDTdW43CDRJ4XAhyhBqnw==", - "license": "Apache-2.0", - "dependencies": { - "@react-types/shared": "^3.33.1" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-types/grid": { - "version": "3.3.8", - "resolved": "https://registry.npmjs.org/@react-types/grid/-/grid-3.3.8.tgz", - "integrity": "sha512-zJvXH8gc1e1VH2H3LRnHH/W2HIkLkZMH3Cu5pLcj0vDuLBSWpcr3Ikh3jZ+VUOZF0G1Jt1lO8pKIaqFzDLNmLQ==", - "license": "Apache-2.0", - "dependencies": { - "@react-types/shared": "^3.33.1" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-types/link": { - "version": "3.6.7", - "resolved": "https://registry.npmjs.org/@react-types/link/-/link-3.6.7.tgz", - "integrity": "sha512-1apXCFJgMC1uydc2KNENrps1qR642FqDpwlNWe254UTpRZn/hEZhA6ImVr8WhomfLJu672WyWA0rUOv4HT+/pQ==", - "license": "Apache-2.0", - "dependencies": { - "@react-types/shared": "^3.33.1" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-types/listbox": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/@react-types/listbox/-/listbox-3.8.0.tgz", - "integrity": "sha512-6l/P1mYQUQ7hGW6x8cH/EB8YvRzhhoB536G/GI7t2F2FbjcGkA1kNXhzDo24tLTXi9elnehevEEySRsRa9p6VA==", - "license": "Apache-2.0", - "dependencies": { - "@react-aria/listbox": "^3.16.0", - "@react-spectrum/listbox": "^3.16.0" - }, - "peerDependencies": { - "@react-spectrum/provider": "^3.0.0", - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-types/menu": { - "version": "3.10.7", - "resolved": "https://registry.npmjs.org/@react-types/menu/-/menu-3.10.7.tgz", - "integrity": "sha512-+p7ixZdvPDJZhisqdtWiiuJ9pteNfK5i19NB6wzAw5XkljbEzodNhwLv6rI96DY5XpbFso2kcjw7IWi+rAAGGQ==", - "license": "Apache-2.0", - "dependencies": { - "@react-types/overlays": "^3.9.4", - "@react-types/shared": "^3.33.1" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-types/numberfield": { - "version": "3.8.18", - "resolved": "https://registry.npmjs.org/@react-types/numberfield/-/numberfield-3.8.18.tgz", - "integrity": "sha512-nLzk7YAG9yAUtSv+9R8LgCHsu8hJq8/A+m1KsKxvc8WmNJjIujSFgWvT21MWBiUgPBzJKGzAqpMDDa087mltJQ==", - "license": "Apache-2.0", - "dependencies": { - "@react-types/shared": "^3.33.1" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-types/overlays": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/@react-types/overlays/-/overlays-3.10.0.tgz", - "integrity": "sha512-cgrcOTxy6ac0kiphQOkc8mj5artZMB/XVrFgukRZ2FcbYNEERpg2VQ5ztd0+H1ER7O0kx7AmwHxdut+x1EAjrw==", - "license": "Apache-2.0", - "dependencies": { - "@react-aria/overlays": "^3.32.0", - "@react-spectrum/overlays": "^5.10.0", - "@react-stately/overlays": "^3.7.0", - "@react-types/shared": "^3.34.0" - }, - "peerDependencies": { - "@react-spectrum/provider": "^3.0.0", - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-types/overlays/node_modules/@react-aria/overlays": { - "version": "3.32.1", - "resolved": "https://registry.npmjs.org/@react-aria/overlays/-/overlays-3.32.1.tgz", - "integrity": "sha512-jjVLcEK5qaGsz3SmW+eLV3QFiJzdDFzgNofPwvzBS1KTPox0a2x5u1ITUPmHwyUNiyexy531h5eVjN3tULEzHQ==", - "license": "Apache-2.0", - "dependencies": { - "@swc/helpers": "^0.5.0", - "react-aria": "^3.48.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-types/overlays/node_modules/@react-types/shared": { - "version": "3.36.1", - "resolved": "https://registry.npmjs.org/@react-types/shared/-/shared-3.36.1.tgz", - "integrity": "sha512-AzsuD9OfxTOZMMvTRhlN3oHBwOmFN7tDh27LzqmHt4+uOgPhJT7ZM7/kVs/8/o0WxayMUIk3hBmCFRHv1FUoag==", - "license": "Apache-2.0", - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-types/progress": { - "version": "3.5.18", - "resolved": "https://registry.npmjs.org/@react-types/progress/-/progress-3.5.18.tgz", - "integrity": "sha512-mKeQn+KrHr1y0/k7KtrbeDGDaERH6i4f6yBwj/ZtYDCTNKMO3tPHJY6nzF0w/KKZLplIO+BjUbHXc2RVm8ovwQ==", - "license": "Apache-2.0", - "dependencies": { - "@react-types/shared": "^3.33.1" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-types/radio": { - "version": "3.9.4", - "resolved": "https://registry.npmjs.org/@react-types/radio/-/radio-3.9.4.tgz", - "integrity": "sha512-TkMRY3sA1PcFZhhclu4IUzUTIir6MzNJj8h6WT8vO6Nug2kXJ72qigugVFBWJSE472mltduOErEAo0rtAYWbQA==", - "license": "Apache-2.0", - "dependencies": { - "@react-types/shared": "^3.33.1" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-types/shared": { - "version": "3.33.1", - "resolved": "https://registry.npmjs.org/@react-types/shared/-/shared-3.33.1.tgz", - "integrity": "sha512-oJHtjvLG43VjwemQDadlR5g/8VepK56B/xKO2XORPHt9zlW6IZs3tZrYlvH29BMvoqC7RtE7E5UjgbnbFtDGag==", - "license": "Apache-2.0", - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-types/slider": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/@react-types/slider/-/slider-3.9.0.tgz", - "integrity": "sha512-gbQWB8LnucC+jhDi5Imd2ZDPbVuiHt0xzObGHWq6GTZ3slLgTvGQaHNO5h9+h7dZH0iFQOVNb6+TlyTsnjFuAw==", - "license": "Apache-2.0", - "dependencies": { - "@react-aria/slider": "^3.9.0", - "@react-spectrum/slider": "^3.9.0", - "@react-stately/slider": "^3.8.0" - }, - "peerDependencies": { - "@react-spectrum/provider": "^3.0.0", - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-types/slider/node_modules/@react-aria/slider": { - "version": "3.9.1", - "resolved": "https://registry.npmjs.org/@react-aria/slider/-/slider-3.9.1.tgz", - "integrity": "sha512-bFWhyM6mP9TzAjCpOKybS7x0RTsFa2+49XKytKN53xS7bdHEnWGbWpsdJ09qZ6z1fnrwFcq/j/hhj/0gVO8kdQ==", - "license": "Apache-2.0", - "dependencies": { - "@react-types/shared": "^3.34.0", - "@swc/helpers": "^0.5.0", - "react-aria": "^3.48.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-types/slider/node_modules/@react-stately/slider": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/@react-stately/slider/-/slider-3.8.1.tgz", - "integrity": "sha512-MSfiRJakgdp2FSPtDeViEgXbYjRBGXXSTvExUvDDZx2xiEmSgefEQ4WWwCWPN4tdWbRISZoCYrmG8mY04Gevpw==", - "license": "Apache-2.0", - "dependencies": { - "@swc/helpers": "^0.5.0", - "react-stately": "^3.46.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-types/slider/node_modules/@react-types/shared": { - "version": "3.36.1", - "resolved": "https://registry.npmjs.org/@react-types/shared/-/shared-3.36.1.tgz", - "integrity": "sha512-AzsuD9OfxTOZMMvTRhlN3oHBwOmFN7tDh27LzqmHt4+uOgPhJT7ZM7/kVs/8/o0WxayMUIk3hBmCFRHv1FUoag==", - "license": "Apache-2.0", - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-types/switch": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@react-types/switch/-/switch-3.6.0.tgz", - "integrity": "sha512-6pjDO5a35ovAAw5xsSJoftmUP1BhFzKazB5IuVBNTbeEvJjz/LC1NGkVV3sQX68ZDSZ0UyYLS7ENIVHKU+hjzA==", - "license": "Apache-2.0", - "dependencies": { - "@react-aria/switch": "^3.8.0", - "@react-spectrum/switch": "^3.7.0" - }, - "peerDependencies": { - "@react-spectrum/provider": "^3.0.0", - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-types/switch/node_modules/@react-aria/switch": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/@react-aria/switch/-/switch-3.8.1.tgz", - "integrity": "sha512-WzkJG3xJnBdd9rdBxG+0RgWdopAqwI61Ni4ZQtA2rgFuG9UpZIrhsL7qgFO/+R6oEgoeGAMeUlvCf97Ppj2uTg==", - "license": "Apache-2.0", - "dependencies": { - "@swc/helpers": "^0.5.0", - "react-aria": "^3.48.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-types/table": { - "version": "3.13.6", - "resolved": "https://registry.npmjs.org/@react-types/table/-/table-3.13.6.tgz", - "integrity": "sha512-eluL+iFfnVmFm7OSZrrFG9AUjw+tcv898zbv+NsZACa8oXG1v9AimhZfd+Mo8q/5+sX/9hguWNXFkSvmTjuVPQ==", - "license": "Apache-2.0", - "dependencies": { - "@react-types/grid": "^3.3.8", - "@react-types/shared": "^3.33.1" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-types/tabs": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@react-types/tabs/-/tabs-3.4.0.tgz", - "integrity": "sha512-/o2gmSKK9MmXCVL9vs+YYU1fl+u3+p07nbl2KXk0aL0UhVfgev3pKpFMjsWBiF9kUGp3EnVNjEDr8ZlSMIgZqQ==", - "license": "Apache-2.0", - "dependencies": { - "@react-aria/tabs": "^3.12.0", - "@react-spectrum/tabs": "^3.9.0", - "@react-stately/tabs": "^3.9.0" - }, - "peerDependencies": { - "@react-spectrum/provider": "^3.0.0", - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-types/tabs/node_modules/@react-aria/tabs": { - "version": "3.12.1", - "resolved": "https://registry.npmjs.org/@react-aria/tabs/-/tabs-3.12.1.tgz", - "integrity": "sha512-fGMxbqSnqtn3GRiicLfnhWcnD6Auch0qCyt5ArfndYrISmSZkzq7PVZtDj85TEqC6p8WSw/M7HjWBBUX5/Of0g==", - "license": "Apache-2.0", - "dependencies": { - "@react-types/shared": "^3.34.0", - "@swc/helpers": "^0.5.0", - "react-aria": "^3.48.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-types/tabs/node_modules/@react-stately/tabs": { - "version": "3.9.1", - "resolved": "https://registry.npmjs.org/@react-stately/tabs/-/tabs-3.9.1.tgz", - "integrity": "sha512-xS9ByN7OMqvU9wyZJ8MnDvRTdsmB+GUP1whlRh4NmxWGmL4SDXKd4slSUGfb2lRi8lgT0OCAjd9om80HJP0p3w==", - "license": "Apache-2.0", - "dependencies": { - "@swc/helpers": "^0.5.0", - "react-stately": "^3.46.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-types/tabs/node_modules/@react-types/shared": { - "version": "3.36.1", - "resolved": "https://registry.npmjs.org/@react-types/shared/-/shared-3.36.1.tgz", - "integrity": "sha512-AzsuD9OfxTOZMMvTRhlN3oHBwOmFN7tDh27LzqmHt4+uOgPhJT7ZM7/kVs/8/o0WxayMUIk3hBmCFRHv1FUoag==", - "license": "Apache-2.0", - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-types/textfield": { - "version": "3.12.8", - "resolved": "https://registry.npmjs.org/@react-types/textfield/-/textfield-3.12.8.tgz", - "integrity": "sha512-wt6FcuE5AyntxsnPika/h3nf/DPmeAVbI018L9o6h+B/IL4sMWWdx663wx2KOOeHH8ejKGZQNPLhUKs4s1mVQA==", - "license": "Apache-2.0", - "dependencies": { - "@react-types/shared": "^3.33.1" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-types/tooltip": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@react-types/tooltip/-/tooltip-3.5.2.tgz", - "integrity": "sha512-FvSuZ2WP08NEWefrpCdBYpEEZh/5TvqvGjq0wqGzWg2OPwpc14HjD8aE7I3MOuylXkD4MSlMjl7J4DlvlcCs3Q==", - "license": "Apache-2.0", - "dependencies": { - "@react-types/overlays": "^3.9.4", - "@react-types/shared": "^3.33.1" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@remix-run/router": { - "version": "1.23.3", - "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.23.3.tgz", - "integrity": "sha512-4An71tdz9X8+3sI4Qqqd2LWd9vS39J7sqd9EU4Scw7TJE/qB10Flv/UuqbPVgfQV9XoK8Np6jNquZitnZq5i+Q==", - "license": "MIT", - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@rolldown/pluginutils": { - "version": "1.0.0-beta.27", - "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.27.tgz", - "integrity": "sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.62.4.tgz", - "integrity": "sha512-RrPokAb7dmbxFoeO3TloqHyOjgye8RkBhSqmp4aJMIex4c9r46ZstPnleDQOq1t46VOVjwIuwNogIqbodV1Vvg==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-android-arm64": { - "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.62.4.tgz", - "integrity": "sha512-JKuJc+pnpks2pjy7L/N3v/cAkZxYlnmuZoD840ldbMI5KDbC4iO9NKwPKYdjYFCMAIIlBzYSFHxIJVYzRo2/8A==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.62.4.tgz", - "integrity": "sha512-krw5uS2STmvJ02x0uTXHbqQNuz+9eZ1iw+qXk9dmW2gvV4jV7O2hEoOnuhFrpOPiel1mBFtqbxYZZtC46hXLOw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.62.4.tgz", - "integrity": "sha512-wsTxtgApb4PrOsNJIm0FZ1h3WvCC+k9uxLJ4ad75hgoS4NiRes2SoJFlDAyMwiUY8IssDqGcHbXuN0sx1tfF1A==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.62.4.tgz", - "integrity": "sha512-GUOnQlyZe3yAXhWOtOMsn5Qkrv5E5mZXa0thbARWi5Ei2szlVXJFQhddZ4HbAzh8q92w5twp+CQvs/eFanz9YQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.62.4.tgz", - "integrity": "sha512-/Y7f3QuxjzPKsjA/rfEDa3+0vXqyjmJ50Ln8dPpCmWkKTrUoWHG1cWhTqaAMLob2m2nESWuC7yGrREz019Ztqg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.62.4.tgz", - "integrity": "sha512-81wiiX3v7aqy+T+bT61TJ78yJjRquqFFTTbAPt08imfQQzkPIW8t6aJbkTagtCCrXMNc9D66+geqlK7ydLPNqA==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.62.4.tgz", - "integrity": "sha512-9kmDIvNZqdoHOBZgNtpTBeLWYO/LVipM3H/j62P8848/l/VPEQL6N3uxU9pvP1oZAsXyC2MEnFP3ovRjo7WYNQ==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.62.4.tgz", - "integrity": "sha512-CcnXHWnXg69g+DX5VWL3FHts3qMRN2uVEHX+BZvGLdd07/gXkn3ePjYtO1LDJvxkGKVHMclKBRa1QUTH+6toYQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.62.4.tgz", - "integrity": "sha512-iFOibiHnTRuhrWLlRsOQFdZJJIa7S8OwkneJr4ocALP16u5yk6lWLINFwhHaEqBFMsKDUZofLkGos7+CPzGB3g==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-loong64-gnu": { - "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.62.4.tgz", - "integrity": "sha512-XnWYMI7euHlb5a871xPja+Gm7DRCFU+FGRrtS2sMq9N8FvqtpagUy6gD4YOemC5MRk9xbh8+jYMEJbigFQwsgA==", - "cpu": [ - "loong64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-loong64-musl": { - "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.62.4.tgz", - "integrity": "sha512-qGDAlO0U8xedCcsdRm9oaoQY8DAx/QT7uIxJWhCdx0ceIWX783UC9QSYkdpzAe29wNiVfp24+bZdQmn49o45SQ==", - "cpu": [ - "loong64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-ppc64-gnu": { - "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.62.4.tgz", - "integrity": "sha512-ru4H6ezD7ysA5EiEK6qkkaEb4modH8CTej6kUy/gQi20u3kB3G7Zn8snXXkeJSCOFKG/rbPPtM/+9Wgas1961w==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-ppc64-musl": { - "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.62.4.tgz", - "integrity": "sha512-2W4MO5WQVJnbJaZdvDb9rhBDuFU1nKIepPFpJUBsTh2k1YY2g+ODViaWuyOAjQ5cOP7NvrvLzt3wvHOoiAvc7w==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.62.4.tgz", - "integrity": "sha512-+fxjfuoAmVMCYV5QyjoIpu0cp5DOiOTeqYFk1AVaxGr+/ravWLX89XfQmptsoWcaVy/TGf2hexzbUOrCQIL1CQ==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.62.4.tgz", - "integrity": "sha512-jTn8JfHGL4djjFxPuM06LmNUJDsst2jeVlsd9OmIH6zc5sC9K6rIuO4YajXatLUpBmBKl6b35ro1QZocLi+tcA==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.62.4.tgz", - "integrity": "sha512-oCJCJL4pXsoDcP2QZ+JVlPTIRc6266zsIaeJJsWImmF7HO0W8nb6HuSgZlMWxJwaPf8ehbSw8yo0EUw925hKsA==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.62.4.tgz", - "integrity": "sha512-W69hukhZ3KKNRCaMIEzKvcFye42hh0FE1+YoYaf5+Ikacuftoco6yO/xouz0hc5d5W/s3yBro5jRiuEE/Q5vUw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.62.4.tgz", - "integrity": "sha512-qiXbGG2jkjXhzXpsFZSR2Xpb8DN/UaxYsbb/STbuR/6fpaDgRmmaq1B/LmtF2wQFOFOSsK2jdE0RZ3a0zHn4QA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-openbsd-x64": { - "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.62.4.tgz", - "integrity": "sha512-nWeM//hxv8mIo6jD7Hu4o48DVmV9pbV6gsKaWU+4NFyqHoPKwrkRiZGLKUhOBk8qNmDmpwFtPKg80Bo/Tn4xiQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ] - }, - "node_modules/@rollup/rollup-openharmony-arm64": { - "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.62.4.tgz", - "integrity": "sha512-s62SQ/vgsRSvMwDkOEfTqfgASF0f26ZNaQuTA6Aok5lrikf89yI2W0gFHvZb2Jpgc6N8JnOKZgCK2iciO3CsxQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openharmony" - ] - }, - "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.62.4.tgz", - "integrity": "sha512-J6wGf8TVGbXJq+HH+ttTvrcfNKPbuZecV6KT1B8I18BC5IURUh5kl4Yl5OEP5eFIUoI5BWxCsyYMhFsDx8kekw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.62.4.tgz", - "integrity": "sha512-zmfrQd/0wu6oJs8Vq8KwY/YtsKSsLtKe/HwAP4Wqy8LhWjeT55fHRAkOhYQ12wI3ayS4Tt12d5CDRD7N96SAYQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-x64-gnu": { - "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.62.4.tgz", - "integrity": "sha512-qPzHqdj9rfUD+w79dtE07zi/kFwKyCJqplp5K5ygeLTp7jLpAoc16OAH39HSmRC9UpozaecsleI8uAdEj6v2yw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.62.4.tgz", - "integrity": "sha512-zD6NdeWEByGE9QF9vCrlJ5YQB4oq9q91kPZS37Jwj5hOkvR1lTBSpsKhKDw4IJtbQ35LsTS1HD9DZYGKIshU1Q==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@spectrum-icons/ui": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/@spectrum-icons/ui/-/ui-3.7.1.tgz", - "integrity": "sha512-veQymocUYo5OciXQajSailOdbWe+k6+2ehfF8D4d0V923D4xOUadtT253xXZ5vEQjPat6Kyp2WDKeQNjd7kL1w==", - "license": "Apache-2.0", - "dependencies": { - "@adobe/react-spectrum-ui": "1.2.1", - "@babel/runtime": "^7.24.4", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "@adobe/react-spectrum": "^3.47.0", - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@spectrum-icons/workflow": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/@spectrum-icons/workflow/-/workflow-4.3.1.tgz", - "integrity": "sha512-kDF+/EbFVyLGytotqqdYt4uSij4j/PQmDQO5km/C6DyzKjyuic3FnSBFinR+mA6oFv1OjMcLvrrDBqK3wbqRlA==", - "license": "Apache-2.0", - "dependencies": { - "@adobe/react-spectrum-workflow": "2.3.5", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "@adobe/react-spectrum": "^3.47.0", - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@swc/helpers": { - "version": "0.5.23", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.23.tgz", - "integrity": "sha512-5lSsMOTXURePglDfvuAQUqkGek9Hg2kksOYay2m0+XR++b2NWYL/4sWyuvVBIs8oKnJaxkdi9whaL/sqN13afw==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.8.0" - } - }, - "node_modules/@tanstack/react-virtual": { - "version": "3.11.3", - "resolved": "https://registry.npmjs.org/@tanstack/react-virtual/-/react-virtual-3.11.3.tgz", - "integrity": "sha512-vCU+OTylXN3hdC8RKg68tPlBPjjxtzon7Ys46MgrSLE+JhSjSTPvoQifV6DQJeJmA8Q3KT6CphJbejupx85vFw==", - "license": "MIT", - "dependencies": { - "@tanstack/virtual-core": "3.11.3" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/tannerlinsley" - }, - "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" - } - }, - "node_modules/@tanstack/virtual-core": { - "version": "3.11.3", - "resolved": "https://registry.npmjs.org/@tanstack/virtual-core/-/virtual-core-3.11.3.tgz", - "integrity": "sha512-v2mrNSnMwnPJtcVqNvV0c5roGCBqeogN8jDtgtuHCphdwBasOZ17x8UV8qpHUh+u0MLfX43c0uUHKje0s+Zb0w==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/tannerlinsley" - } - }, - "node_modules/@types/babel__core": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", - "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "node_modules/@types/babel__generator": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", - "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__template": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", - "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__traverse": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz", - "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.28.2" - } - }, - "node_modules/@types/estree": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz", - "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/prop-types": { - "version": "15.7.15", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.15.tgz", - "integrity": "sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/react": { - "version": "18.3.31", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.31.tgz", - "integrity": "sha512-vfEqpXTvwT91yhmwdfouStN2hSKwTvyRs8qpLfADyrq/kxDw0hZM7Wk9Ug1FELj8hIby+S/+kQCSRFF32nv2Qw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/prop-types": "*", - "csstype": "^3.2.2" - } - }, - "node_modules/@types/react-dom": { - "version": "18.3.7", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.7.tgz", - "integrity": "sha512-MEe3UeoENYVFXzoXEWsvcpg6ZvlrFNlOQ7EOsvhI3CfAXwzPfO8Qwuxd40nepsYKqyyVQnTdEfv68q91yLcKrQ==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "@types/react": "^18.0.0" - } - }, - "node_modules/@vitejs/plugin-react": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.7.0.tgz", - "integrity": "sha512-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/core": "^7.28.0", - "@babel/plugin-transform-react-jsx-self": "^7.27.1", - "@babel/plugin-transform-react-jsx-source": "^7.27.1", - "@rolldown/pluginutils": "1.0.0-beta.27", - "@types/babel__core": "^7.20.5", - "react-refresh": "^0.17.0" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "peerDependencies": { - "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" - } - }, - "node_modules/any-promise": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", - "dev": true, - "license": "MIT" - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "license": "ISC", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/arg": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", - "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", - "dev": true, - "license": "MIT" - }, - "node_modules/aria-hidden": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.6.tgz", - "integrity": "sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==", - "license": "MIT", - "dependencies": { - "tslib": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/autoprefixer": { - "version": "10.5.4", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.5.4.tgz", - "integrity": "sha512-MaU0U/za7N3r6brxD4YB/l4NSrFzLPlANv6wEuQVaIPlD3L4W9rFcQPbL/EilY9BHhHvhfcz3gInDLrEtWT4EA==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/autoprefixer" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "browserslist": "^4.28.6", - "caniuse-lite": "^1.0.30001806", - "fraction.js": "^5.3.4", - "picocolors": "^1.1.1", - "postcss-value-parser": "^4.2.0" - }, - "bin": { - "autoprefixer": "bin/autoprefixer" - }, - "engines": { - "node": "^10 || ^12 || >=14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/baseline-browser-mapping": { - "version": "2.11.13", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.11.13.tgz", - "integrity": "sha512-k9HNuUVMlqVjQ9UHzfPjIqiDbWw7WqT1AoT7GL8VwvF3r0ZfArtgiSPAlmupyNquNgOJHTuH4CKYf8ttMTWBTQ==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "baseline-browser-mapping": "dist/cli.cjs" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/binary-extensions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", - "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, - "license": "MIT", - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browserslist": { - "version": "4.28.8", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.8.tgz", - "integrity": "sha512-V2NpofLblG64mfOtSgDhOJESZEGogzDMBv/q+W6oc4LXWP/q75eOXoOaaOu1EOadB9U4Bwx/e0yzbvwKH8zalA==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "baseline-browser-mapping": "^2.11.12", - "caniuse-lite": "^1.0.30001809", - "electron-to-chromium": "^1.5.402", - "node-releases": "^2.0.53", - "update-browserslist-db": "^1.3.0" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/camelcase-css": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", - "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001809", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001809.tgz", - "integrity": "sha512-xxWVywk6a6Arlk+hymeycyn/VgqEfLDxupvhH/xiY5SJ/18kmi9o6MiO320DCUzypORHLtvh0I4i04tUhCNHNQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "CC-BY-4.0" - }, - "node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", - "dev": true, - "license": "MIT", - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chokidar/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/client-only": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", - "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==", - "license": "MIT" - }, - "node_modules/clsx": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", - "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/color": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", - "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1", - "color-string": "^1.9.0" - }, - "engines": { - "node": ">=12.5.0" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "license": "MIT" - }, - "node_modules/color-string": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", - "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", - "license": "MIT", - "dependencies": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" - } - }, - "node_modules/color2k": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/color2k/-/color2k-2.0.4.tgz", - "integrity": "sha512-OXAPGFRNeLFnUfqDtloYdxkwsJoIdXe28+bjbpJiPqyei2HPa3VHmMCWa0Qe62+U4Ftf9Hj7hRssOkxz7WiWbg==", - "license": "MIT" - }, - "node_modules/commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/compute-scroll-into-view": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/compute-scroll-into-view/-/compute-scroll-into-view-3.1.1.tgz", - "integrity": "sha512-VRhuHOLoKYOy4UbilLbUzbYg93XLjv2PncJC50EuTWPA3gaja1UjBsUP/D/9/juV3vQFr6XBEzn9KCAHdUvOHw==", - "license": "MIT" - }, - "node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true, - "license": "MIT" - }, - "node_modules/cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "dev": true, - "license": "MIT", - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/csstype": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", - "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", - "license": "MIT" - }, - "node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decimal.js": { - "version": "10.6.0", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.6.0.tgz", - "integrity": "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==", - "license": "MIT" - }, - "node_modules/deepmerge": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/didyoumean": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", - "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/dlv": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", - "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", - "dev": true, - "license": "MIT" - }, - "node_modules/dom-helpers": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", - "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.8.7", - "csstype": "^3.0.2" - } - }, - "node_modules/electron-to-chromium": { - "version": "1.5.404", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.404.tgz", - "integrity": "sha512-3WJtd7/lVq2Jnuz6wed1l9+1ZD2u2Tet1/1NBc4Iedkmgbu+I7YuAqdAQ8T+VZtnwysMsAf3IqSq9D1gyZjA2g==", - "dev": true, - "license": "ISC" - }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/esbuild": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.12.tgz", - "integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.25.12", - "@esbuild/android-arm": "0.25.12", - "@esbuild/android-arm64": "0.25.12", - "@esbuild/android-x64": "0.25.12", - "@esbuild/darwin-arm64": "0.25.12", - "@esbuild/darwin-x64": "0.25.12", - "@esbuild/freebsd-arm64": "0.25.12", - "@esbuild/freebsd-x64": "0.25.12", - "@esbuild/linux-arm": "0.25.12", - "@esbuild/linux-arm64": "0.25.12", - "@esbuild/linux-ia32": "0.25.12", - "@esbuild/linux-loong64": "0.25.12", - "@esbuild/linux-mips64el": "0.25.12", - "@esbuild/linux-ppc64": "0.25.12", - "@esbuild/linux-riscv64": "0.25.12", - "@esbuild/linux-s390x": "0.25.12", - "@esbuild/linux-x64": "0.25.12", - "@esbuild/netbsd-arm64": "0.25.12", - "@esbuild/netbsd-x64": "0.25.12", - "@esbuild/openbsd-arm64": "0.25.12", - "@esbuild/openbsd-x64": "0.25.12", - "@esbuild/openharmony-arm64": "0.25.12", - "@esbuild/sunos-x64": "0.25.12", - "@esbuild/win32-arm64": "0.25.12", - "@esbuild/win32-ia32": "0.25.12", - "@esbuild/win32-x64": "0.25.12" - } - }, - "node_modules/escalade": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", - "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/fast-glob": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", - "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.8" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fastq": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", - "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", - "dev": true, - "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dev": true, - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/fraction.js": { - "version": "5.3.4", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-5.3.4.tgz", - "integrity": "sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "*" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/rawify" - } - }, - "node_modules/framer-motion": { - "version": "11.18.2", - "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-11.18.2.tgz", - "integrity": "sha512-5F5Och7wrvtLVElIpclDT0CBzMVg3dL22B64aZwHtsIY8RB4mXICLrkajK4G9R+ieSAGcgrLeae2SeUTg2pr6w==", - "license": "MIT", - "dependencies": { - "motion-dom": "^11.18.1", - "motion-utils": "^11.18.1", - "tslib": "^2.4.0" - }, - "peerDependencies": { - "@emotion/is-prop-valid": "*", - "react": "^18.0.0 || ^19.0.0", - "react-dom": "^18.0.0 || ^19.0.0" - }, - "peerDependenciesMeta": { - "@emotion/is-prop-valid": { - "optional": true - }, - "react": { - "optional": true - }, - "react-dom": { - "optional": true - } - } - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/hasown": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz", - "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==", - "dev": true, - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/input-otp": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/input-otp/-/input-otp-1.4.1.tgz", - "integrity": "sha512-+yvpmKYKHi9jIGngxagY9oWiiblPB7+nEO75F2l2o4vs+6vpPZZmUl4tBNYuTCvQjhvEIbdNeJu70bhfYP2nbw==", - "license": "MIT", - "peerDependencies": { - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc" - } - }, - "node_modules/intl-messageformat": { - "version": "10.7.18", - "resolved": "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-10.7.18.tgz", - "integrity": "sha512-m3Ofv/X/tV8Y3tHXLohcuVuhWKo7BBq62cqY15etqmLxg2DZ34AGGgQDeR+SCta2+zICb1NX83af0GJmbQ1++g==", - "license": "BSD-3-Clause", - "dependencies": { - "@formatjs/ecma402-abstract": "2.3.6", - "@formatjs/fast-memoize": "2.2.7", - "@formatjs/icu-messageformat-parser": "2.11.4", - "tslib": "^2.8.0" - } - }, - "node_modules/is-arrayish": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.4.tgz", - "integrity": "sha512-m6UrgzFVUYawGBh1dUsWR5M2Clqic9RVXC/9f8ceNlv2IcO9j9J/z8UoCLPqtsPBFNzEpfR3xftohbfqDx8EQA==", - "license": "MIT" - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "license": "MIT", - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-core-module": { - "version": "2.16.2", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.2.tgz", - "integrity": "sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA==", - "dev": true, - "license": "MIT", - "dependencies": { - "hasown": "^2.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/jiti": { - "version": "1.21.7", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz", - "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==", - "dev": true, - "license": "MIT", - "bin": { - "jiti": "bin/jiti.js" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "license": "MIT" - }, - "node_modules/jsesc": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", - "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", - "dev": true, - "license": "MIT", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true, - "license": "MIT", - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/lilconfig": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", - "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/antonk52" - } - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true, - "license": "MIT" - }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "license": "MIT", - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "dev": true, - "license": "MIT", - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/motion-dom": { - "version": "11.18.1", - "resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-11.18.1.tgz", - "integrity": "sha512-g76KvA001z+atjfxczdRtw/RXOM3OMSdd1f4DL77qCTF/+avrRJiawSG4yDibEQ215sr9kpinSlX2pCTJ9zbhw==", - "license": "MIT", - "dependencies": { - "motion-utils": "^11.18.1" - } - }, - "node_modules/motion-utils": { - "version": "11.18.1", - "resolved": "https://registry.npmjs.org/motion-utils/-/motion-utils-11.18.1.tgz", - "integrity": "sha512-49Kt+HKjtbJKLtgO/LKj9Ld+6vw9BjH5d9sc40R/kVyH8GLAXgT42M2NnuPcJNuA3s9ZfZBUcwIgpmZWGEE+hA==", - "license": "MIT" - }, - "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, - "license": "MIT" - }, - "node_modules/mz": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", - "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "any-promise": "^1.0.0", - "object-assign": "^4.0.1", - "thenify-all": "^1.0.0" - } - }, - "node_modules/nanoid": { - "version": "3.3.18", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.18.tgz", - "integrity": "sha512-DTg4MJbGMWkfi6VZFdNt2/caMbQy4Ou+Op/hJQvGEWcnVfoA1QA+xzRKAzw9jD6+GVOOeYr/mIcuDSdug6F6+w==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/next-themes": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/next-themes/-/next-themes-0.4.6.tgz", - "integrity": "sha512-pZvgD5L0IEvX5/9GWyHMf3m8BKiVQwsCMHfoFosXtXBMnaS0ZnIJ9ST4b4NqLVKDEm8QBxoNNGNaBv2JNF6XNA==", - "license": "MIT", - "peerDependencies": { - "react": "^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc" - } - }, - "node_modules/node-releases": { - "version": "2.0.53", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.53.tgz", - "integrity": "sha512-D9UOmYG3UH1V+ENW56t5QXBwJw1YEY18ruVeus89Rw+SyIgjPkCO84bRzO3uNIYosJbNwiabWVn48o3uJLjxFQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-hash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", - "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true, - "license": "MIT" - }, - "node_modules/picocolors": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", - "dev": true, - "license": "ISC" - }, - "node_modules/picomatch": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", - "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pirates": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", - "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/postcss": { - "version": "8.5.26", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.26.tgz", - "integrity": "sha512-u82N74LFzG8ca+dD8puPnplTXoGH4fTPpVGuIbt36G3qvNlkvfD0lEAZSxaly3KX8TS/L1A1gsCEmvKmBcVbkQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "nanoid": "^3.3.17", - "picocolors": "^1.1.1", - "source-map-js": "^1.2.1" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/postcss-import": { - "version": "15.1.0", - "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", - "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", - "dev": true, - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.0.0", - "read-cache": "^1.0.0", - "resolve": "^1.1.7" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "postcss": "^8.0.0" - } - }, - "node_modules/postcss-js": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.1.0.tgz", - "integrity": "sha512-oIAOTqgIo7q2EOwbhb8UalYePMvYoIeRY2YKntdpFQXNosSu3vLrniGgmH9OKs/qAkfoj5oB3le/7mINW1LCfw==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "camelcase-css": "^2.0.1" - }, - "engines": { - "node": "^12 || ^14 || >= 16" - }, - "peerDependencies": { - "postcss": "^8.4.21" - } - }, - "node_modules/postcss-load-config": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-6.0.1.tgz", - "integrity": "sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "lilconfig": "^3.1.1" - }, - "engines": { - "node": ">= 18" - }, - "peerDependencies": { - "jiti": ">=1.21.0", - "postcss": ">=8.0.9", - "tsx": "^4.8.1", - "yaml": "^2.4.2" - }, - "peerDependenciesMeta": { - "jiti": { - "optional": true - }, - "postcss": { - "optional": true - }, - "tsx": { - "optional": true - }, - "yaml": { - "optional": true - } - } - }, - "node_modules/postcss-nested": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz", - "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "postcss-selector-parser": "^6.1.1" - }, - "engines": { - "node": ">=12.0" - }, - "peerDependencies": { - "postcss": "^8.2.14" - } - }, - "node_modules/postcss-selector-parser": { - "version": "6.1.4", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.4.tgz", - "integrity": "sha512-bIoJLOmjCO1S9XdY/DcnR5hJxvrDir1PbGChrzXG3vw0/FOliy/fA3dmdhQ441kah4gKv+TwckGzex6wNS5cnQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/react": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", - "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-aria": { - "version": "3.51.0", - "resolved": "https://registry.npmjs.org/react-aria/-/react-aria-3.51.0.tgz", - "integrity": "sha512-AyWLw0XR38cFPwBu/ErgGaVrc5dupLEKmRlMXTGvFKOtbaGRQ2+yQJkjVhpdHhoRhU4+G+tJDFeHDTS8tK3bfQ==", - "license": "Apache-2.0", - "dependencies": { - "@internationalized/date": "^3.12.3", - "@internationalized/number": "^3.6.7", - "@internationalized/string": "^3.2.10", - "@react-types/shared": "^3.36.1", - "@swc/helpers": "^0.5.0", - "aria-hidden": "^1.2.3", - "clsx": "^2.0.0", - "react-stately": "3.49.0", - "use-sync-external-store": "^1.6.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/react-aria-components": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/react-aria-components/-/react-aria-components-1.20.0.tgz", - "integrity": "sha512-BMbpIgoV9aELeBrB0Y120NgoigHb5OdcJwc+4e7uSnbTbamea6lo+gqcc4LAxzMaK3Jf+7LI1oCDE6yANsmxIQ==", - "license": "Apache-2.0", - "dependencies": { - "@internationalized/date": "^3.12.3", - "@internationalized/string": "^3.2.10", - "@react-types/shared": "^3.36.1", - "@swc/helpers": "^0.5.0", - "client-only": "^0.0.1", - "react-aria": "3.51.0", - "react-stately": "3.49.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/react-aria-components/node_modules/@react-types/shared": { - "version": "3.36.1", - "resolved": "https://registry.npmjs.org/@react-types/shared/-/shared-3.36.1.tgz", - "integrity": "sha512-AzsuD9OfxTOZMMvTRhlN3oHBwOmFN7tDh27LzqmHt4+uOgPhJT7ZM7/kVs/8/o0WxayMUIk3hBmCFRHv1FUoag==", - "license": "Apache-2.0", - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/react-aria/node_modules/@react-types/shared": { - "version": "3.36.1", - "resolved": "https://registry.npmjs.org/@react-types/shared/-/shared-3.36.1.tgz", - "integrity": "sha512-AzsuD9OfxTOZMMvTRhlN3oHBwOmFN7tDh27LzqmHt4+uOgPhJT7ZM7/kVs/8/o0WxayMUIk3hBmCFRHv1FUoag==", - "license": "Apache-2.0", - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/react-dom": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", - "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.2" - }, - "peerDependencies": { - "react": "^18.3.1" - } - }, - "node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "license": "MIT" - }, - "node_modules/react-refresh": { - "version": "0.17.0", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.17.0.tgz", - "integrity": "sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-router": { - "version": "6.30.4", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.30.4.tgz", - "integrity": "sha512-SVUsDe+DybHM/WmYKIVYhZh1o5Dcuf16yM6WjG02Q9XVFMZIJyHYhwrr6bFBXZkVP6z69kNkMyBCujt8FaFLJA==", - "license": "MIT", - "dependencies": { - "@remix-run/router": "1.23.3" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "react": ">=16.8" - } - }, - "node_modules/react-router-dom": { - "version": "6.30.4", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.30.4.tgz", - "integrity": "sha512-q4HvNl+mmDdkS0g+MqiBZNteQJCuimWoOyHMy4T/RQLAn9Z29+E91QXRaxOujeMl2HTzRSS0KFPd7lxX3PjV0Q==", - "license": "MIT", - "dependencies": { - "@remix-run/router": "1.23.3", - "react-router": "6.30.4" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "react": ">=16.8", - "react-dom": ">=16.8" - } - }, - "node_modules/react-stately": { - "version": "3.49.0", - "resolved": "https://registry.npmjs.org/react-stately/-/react-stately-3.49.0.tgz", - "integrity": "sha512-13iNq2KzBrRAzxRc+n53hgROfIistiYY/sPtIhCw1qUB7/kmo+X1xEU2uiS5zcCIrc55AUPwoHqOIIpKWSwB9A==", - "license": "Apache-2.0", - "dependencies": { - "@internationalized/date": "^3.12.3", - "@internationalized/number": "^3.6.7", - "@internationalized/string": "^3.2.10", - "@react-types/shared": "^3.36.1", - "@swc/helpers": "^0.5.0", - "use-sync-external-store": "^1.6.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/react-stately/node_modules/@react-types/shared": { - "version": "3.36.1", - "resolved": "https://registry.npmjs.org/@react-types/shared/-/shared-3.36.1.tgz", - "integrity": "sha512-AzsuD9OfxTOZMMvTRhlN3oHBwOmFN7tDh27LzqmHt4+uOgPhJT7ZM7/kVs/8/o0WxayMUIk3hBmCFRHv1FUoag==", - "license": "Apache-2.0", - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/react-textarea-autosize": { - "version": "8.5.9", - "resolved": "https://registry.npmjs.org/react-textarea-autosize/-/react-textarea-autosize-8.5.9.tgz", - "integrity": "sha512-U1DGlIQN5AwgjTyOEnI1oCcMuEr1pv1qOtklB2l4nyMGbHzWrI0eFsYK0zos2YWqAolJyG0IWJaqWmWj5ETh0A==", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.20.13", - "use-composed-ref": "^1.3.0", - "use-latest": "^1.2.1" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" - } - }, - "node_modules/react-transition-group": { - "version": "4.4.5", - "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", - "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", - "license": "BSD-3-Clause", - "dependencies": { - "@babel/runtime": "^7.5.5", - "dom-helpers": "^5.0.1", - "loose-envify": "^1.4.0", - "prop-types": "^15.6.2" - }, - "peerDependencies": { - "react": ">=16.6.0", - "react-dom": ">=16.6.0" - } - }, - "node_modules/read-cache": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", - "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", - "dev": true, - "license": "MIT", - "dependencies": { - "pify": "^2.3.0" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "license": "MIT", - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/resolve": { - "version": "1.22.12", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.12.tgz", - "integrity": "sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "is-core-module": "^2.16.1", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/reusify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", - "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", - "dev": true, - "license": "MIT", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rollup": { - "version": "4.62.4", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.62.4.tgz", - "integrity": "sha512-RXOqwaPsBGjMNMa4sQjDjHieHEZDFoj/Rdr46l2MU5DfEs16wHJPC2RPTPHWhNl+M3aI472LLqFkFKut4SblOg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "1.0.9" - }, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=18.0.0", - "npm": ">=8.0.0" - }, - "optionalDependencies": { - "@napi-rs/lzma-linux-x64-gnu": "1.5.1", - "@rollup/rollup-android-arm-eabi": "4.62.4", - "@rollup/rollup-android-arm64": "4.62.4", - "@rollup/rollup-darwin-arm64": "4.62.4", - "@rollup/rollup-darwin-x64": "4.62.4", - "@rollup/rollup-freebsd-arm64": "4.62.4", - "@rollup/rollup-freebsd-x64": "4.62.4", - "@rollup/rollup-linux-arm-gnueabihf": "4.62.4", - "@rollup/rollup-linux-arm-musleabihf": "4.62.4", - "@rollup/rollup-linux-arm64-gnu": "4.62.4", - "@rollup/rollup-linux-arm64-musl": "4.62.4", - "@rollup/rollup-linux-loong64-gnu": "4.62.4", - "@rollup/rollup-linux-loong64-musl": "4.62.4", - "@rollup/rollup-linux-ppc64-gnu": "4.62.4", - "@rollup/rollup-linux-ppc64-musl": "4.62.4", - "@rollup/rollup-linux-riscv64-gnu": "4.62.4", - "@rollup/rollup-linux-riscv64-musl": "4.62.4", - "@rollup/rollup-linux-s390x-gnu": "4.62.4", - "@rollup/rollup-linux-x64-gnu": "4.62.4", - "@rollup/rollup-linux-x64-musl": "4.62.4", - "@rollup/rollup-openbsd-x64": "4.62.4", - "@rollup/rollup-openharmony-arm64": "4.62.4", - "@rollup/rollup-win32-arm64-msvc": "4.62.4", - "@rollup/rollup-win32-ia32-msvc": "4.62.4", - "@rollup/rollup-win32-x64-gnu": "4.62.4", - "@rollup/rollup-win32-x64-msvc": "4.62.4", - "fsevents": "~2.3.2" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/scheduler": { - "version": "0.23.2", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", - "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.1.0" - } - }, - "node_modules/scroll-into-view-if-needed": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/scroll-into-view-if-needed/-/scroll-into-view-if-needed-3.0.10.tgz", - "integrity": "sha512-t44QCeDKAPf1mtQH3fYpWz8IM/DyvHLjs8wUvvwMYxk5moOqCzrMSxK6HQVD0QVmVjXFavoFIPRVrMuJPKAvtg==", - "license": "MIT", - "dependencies": { - "compute-scroll-into-view": "^3.0.2" - } - }, - "node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/simple-swizzle": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.4.tgz", - "integrity": "sha512-nAu1WFPQSMNr2Zn9PGSZK9AGn4t/y97lEm+MXTtUDwfP0ksAIX4nO+6ruD9Jwut4C49SB1Ws+fbXsm/yScWOHw==", - "license": "MIT", - "dependencies": { - "is-arrayish": "^0.3.1" - } - }, - "node_modules/source-map-js": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", - "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sucrase": { - "version": "3.35.1", - "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.1.tgz", - "integrity": "sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.2", - "commander": "^4.0.0", - "lines-and-columns": "^1.1.6", - "mz": "^2.7.0", - "pirates": "^4.0.1", - "tinyglobby": "^0.2.11", - "ts-interface-checker": "^0.1.9" - }, - "bin": { - "sucrase": "bin/sucrase", - "sucrase-node": "bin/sucrase-node" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/tailwind-merge": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-3.4.0.tgz", - "integrity": "sha512-uSaO4gnW+b3Y2aWoWfFpX62vn2sR3skfhbjsEnaBI81WD1wBLlHZe5sWf0AqjksNdYTbGBEd0UasQMT3SNV15g==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/dcastil" - } - }, - "node_modules/tailwind-variants": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/tailwind-variants/-/tailwind-variants-3.2.2.tgz", - "integrity": "sha512-Mi4kHeMTLvKlM98XPnK+7HoBPmf4gygdFmqQPaDivc3DpYS6aIY6KiG/PgThrGvii5YZJqRsPz0aPyhoFzmZgg==", - "license": "MIT", - "engines": { - "node": ">=16.x", - "pnpm": ">=7.x" - }, - "peerDependencies": { - "tailwind-merge": ">=3.0.0", - "tailwindcss": "*" - }, - "peerDependenciesMeta": { - "tailwind-merge": { - "optional": true - } - } - }, - "node_modules/tailwindcss": { - "version": "3.4.19", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.19.tgz", - "integrity": "sha512-3ofp+LL8E+pK/JuPLPggVAIaEuhvIz4qNcf3nA1Xn2o/7fb7s/TYpHhwGDv1ZU3PkBluUVaF8PyCHcm48cKLWQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@alloc/quick-lru": "^5.2.0", - "arg": "^5.0.2", - "chokidar": "^3.6.0", - "didyoumean": "^1.2.2", - "dlv": "^1.1.3", - "fast-glob": "^3.3.2", - "glob-parent": "^6.0.2", - "is-glob": "^4.0.3", - "jiti": "^1.21.7", - "lilconfig": "^3.1.3", - "micromatch": "^4.0.8", - "normalize-path": "^3.0.0", - "object-hash": "^3.0.0", - "picocolors": "^1.1.1", - "postcss": "^8.4.47", - "postcss-import": "^15.1.0", - "postcss-js": "^4.0.1", - "postcss-load-config": "^4.0.2 || ^5.0 || ^6.0", - "postcss-nested": "^6.2.0", - "postcss-selector-parser": "^6.1.2", - "resolve": "^1.22.8", - "sucrase": "^3.35.0" - }, - "bin": { - "tailwind": "lib/cli.js", - "tailwindcss": "lib/cli.js" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/thenify": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", - "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", - "dev": true, - "license": "MIT", - "dependencies": { - "any-promise": "^1.0.0" - } - }, - "node_modules/thenify-all": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", - "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", - "dev": true, - "license": "MIT", - "dependencies": { - "thenify": ">= 3.1.0 < 4" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/tinyglobby": { - "version": "0.2.17", - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz", - "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==", - "dev": true, - "license": "MIT", - "dependencies": { - "fdir": "^6.5.0", - "picomatch": "^4.0.4" - }, - "engines": { - "node": ">=12.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/SuperchupuDev" - } - }, - "node_modules/tinyglobby/node_modules/fdir": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", - "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "picomatch": "^3 || ^4" - }, - "peerDependenciesMeta": { - "picomatch": { - "optional": true - } - } - }, - "node_modules/tinyglobby/node_modules/picomatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.5.tgz", - "integrity": "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/ts-interface-checker": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", - "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD" - }, - "node_modules/typescript": { - "version": "5.9.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", - "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.3.1.tgz", - "integrity": "sha512-ZZ61DsRsOnakl74HAmp3oSN4aXUmEWXf+i/yv0h7tIBfICc3VdrFErQKUUKPgu3AMsTUMbcongALEN4l6GSUrQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "escalade": "^3.2.0", - "picocolors": "^1.1.1" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/use-composed-ref": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/use-composed-ref/-/use-composed-ref-1.4.0.tgz", - "integrity": "sha512-djviaxuOOh7wkj0paeO1Q/4wMZ8Zrnag5H6yBvzN7AKKe8beOaED9SF5/ByLqsku8NP4zQqsvM2u3ew/tJK8/w==", - "license": "MIT", - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/use-isomorphic-layout-effect": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.2.1.tgz", - "integrity": "sha512-tpZZ+EX0gaghDAiFR37hj5MgY6ZN55kLiPkJsKxBMZ6GZdOSPJXiOzPM984oPYZ5AnehYx5WQp1+ME8I/P/pRA==", - "license": "MIT", - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/use-latest": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/use-latest/-/use-latest-1.3.0.tgz", - "integrity": "sha512-mhg3xdm9NaM8q+gLT8KryJPnRFOz1/5XPBhmDEVZK1webPzDjrPk7f/mbpeLqTgB9msytYWANxgALOCJKnLvcQ==", - "license": "MIT", - "dependencies": { - "use-isomorphic-layout-effect": "^1.1.1" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/use-sync-external-store": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.6.0.tgz", - "integrity": "sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==", - "license": "MIT", - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true, - "license": "MIT" - }, - "node_modules/vite": { - "version": "6.4.3", - "resolved": "https://registry.npmjs.org/vite/-/vite-6.4.3.tgz", - "integrity": "sha512-NTKlcQjlAK7MlQoyb6LgaqHc8sso/pVyUJYWMws3jg21uTJw/LddqIFPcPqP6PzpgbIcZyKI85sFE4HBrQDA8A==", - "dev": true, - "license": "MIT", - "dependencies": { - "esbuild": "^0.25.0", - "fdir": "^6.4.4", - "picomatch": "^4.0.2", - "postcss": "^8.5.3", - "rollup": "^4.34.9", - "tinyglobby": "^0.2.13" - }, - "bin": { - "vite": "bin/vite.js" - }, - "engines": { - "node": "^18.0.0 || ^20.0.0 || >=22.0.0" - }, - "funding": { - "url": "https://github.com/vitejs/vite?sponsor=1" - }, - "optionalDependencies": { - "fsevents": "~2.3.3" - }, - "peerDependencies": { - "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", - "jiti": ">=1.21.0", - "less": "*", - "lightningcss": "^1.21.0", - "sass": "*", - "sass-embedded": "*", - "stylus": "*", - "sugarss": "*", - "terser": "^5.16.0", - "tsx": "^4.8.1", - "yaml": "^2.4.2" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "jiti": { - "optional": true - }, - "less": { - "optional": true - }, - "lightningcss": { - "optional": true - }, - "sass": { - "optional": true - }, - "sass-embedded": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true - }, - "tsx": { - "optional": true - }, - "yaml": { - "optional": true - } - } - }, - "node_modules/vite/node_modules/fdir": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", - "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "picomatch": "^3 || ^4" - }, - "peerDependenciesMeta": { - "picomatch": { - "optional": true - } - } - }, - "node_modules/vite/node_modules/picomatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.5.tgz", - "integrity": "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true, - "license": "ISC" - } - } -} diff --git a/hexi/plugins/nonebot_plugin_galgame_card/web/persona-admin/package.json b/hexi/plugins/nonebot_plugin_galgame_card/web/persona-admin/package.json deleted file mode 100644 index 26bb6fe..0000000 --- a/hexi/plugins/nonebot_plugin_galgame_card/web/persona-admin/package.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "name": "persona-admin", - "private": true, - "version": "0.1.0", - "type": "module", - "scripts": { - "dev": "vite", - "build": "vite build", - "preview": "vite preview" - }, - "dependencies": { - "@heroui/react": "^2.8.0", - "@heroui/theme": "^2.4.26", - "framer-motion": "^11.11.17", - "next-themes": "^0.4.4", - "react": "^18.3.1", - "react-dom": "^18.3.1", - "react-router-dom": "^6.28.0" - }, - "devDependencies": { - "@types/react": "^18.3.12", - "@types/react-dom": "^18.3.1", - "@vitejs/plugin-react": "^4.3.4", - "autoprefixer": "^10.4.20", - "postcss": "^8.4.49", - "tailwindcss": "^3.4.15", - "typescript": "^5.6.3", - "vite": "^6.0.3" - } -} diff --git a/hexi/plugins/nonebot_plugin_galgame_card/web/persona-admin/postcss.config.js b/hexi/plugins/nonebot_plugin_galgame_card/web/persona-admin/postcss.config.js deleted file mode 100644 index 2aa7205..0000000 --- a/hexi/plugins/nonebot_plugin_galgame_card/web/persona-admin/postcss.config.js +++ /dev/null @@ -1,6 +0,0 @@ -export default { - plugins: { - tailwindcss: {}, - autoprefixer: {}, - }, -}; diff --git a/hexi/plugins/nonebot_plugin_galgame_card/web/persona-admin/src/App.tsx b/hexi/plugins/nonebot_plugin_galgame_card/web/persona-admin/src/App.tsx deleted file mode 100644 index 621d323..0000000 --- a/hexi/plugins/nonebot_plugin_galgame_card/web/persona-admin/src/App.tsx +++ /dev/null @@ -1,112 +0,0 @@ -import { useEffect } from "react"; -import { - Navigate, - NavLink, - Outlet, - Route, - Routes, - useLocation, - useNavigate, -} from "react-router-dom"; -import { Button, Tooltip } from "@heroui/react"; -import { useTheme } from "next-themes"; -import { clearToken, hasToken } from "./api"; -import Login from "./pages/Login"; -import GroupList from "./pages/GroupList"; -import GroupDetail from "./pages/GroupDetail"; -import DataBrowser from "./pages/DataBrowser"; -import Settings from "./pages/Settings"; - -const NAV_ITEMS = [ - { to: "/groups", label: "群管理", icon: "◈" }, - { to: "/data", label: "数据浏览", icon: "▤" }, - { to: "/settings", label: "设置", icon: "⚙" }, -]; - -function Layout() { - const navigate = useNavigate(); - const location = useLocation(); - const { resolvedTheme, setTheme } = useTheme(); - const isDark = resolvedTheme === "dark"; - - useEffect(() => { - if (!hasToken()) navigate("/login", { replace: true }); - }, [location.pathname]); - - const logout = () => { - clearToken(); - navigate("/login", { replace: true }); - }; - - return ( -
- -
- -
-
- ); -} - -export default function App() { - return ( - - } /> - }> - } /> - } /> - } /> - } /> - } /> - } /> - - - ); -} diff --git a/hexi/plugins/nonebot_plugin_galgame_card/web/persona-admin/src/api.ts b/hexi/plugins/nonebot_plugin_galgame_card/web/persona-admin/src/api.ts deleted file mode 100644 index 32870e8..0000000 --- a/hexi/plugins/nonebot_plugin_galgame_card/web/persona-admin/src/api.ts +++ /dev/null @@ -1,92 +0,0 @@ -const API = "/galgame_card/api"; - -let token: string = localStorage.getItem("gc_token") || ""; - -export function setToken(t: string) { - token = t; - localStorage.setItem("gc_token", t); -} -export function clearToken() { - token = ""; - localStorage.removeItem("gc_token"); -} -export function hasToken() { - return !!token; -} - -export async function api(path: string, options: RequestInit = {}): Promise { - const res = await fetch(API + path, { - ...options, - headers: { - "Content-Type": "application/json", - Authorization: token, - ...(options.headers || {}), - }, - }); - const data = await res.json(); - if (data.status !== 0) { - if (data.status === 400) { - clearToken(); - window.location.hash = "#/login"; - } - throw new Error(data.msg || "请求失败"); - } - return data.data as T; -} - -/* ---------- 类型 ---------- */ - -export interface GroupInfo { - group_id: number; - group_name: string; - enabled: boolean; - participants: number; - corpus_count: number; - impression_count: number; - summary_count: number; -} -export interface DiscoverGroup { - group_id: number; - group_name: string; - managed: boolean; -} -export interface Participant { - user_id: number; - corpus_count: number; -} -export interface LogItem { - id: number; - user_id: number; - nickname: string; - content: string; - target_user_id: number | null; - target_inherited: boolean; - follows_id: number | null; - created_at: string; -} -export interface ImpressionItem { - id: number; - user_id: number; - content: string; - cover_from_id: number; - cover_to_id: number; - created_at: string; -} -export interface SummaryItem { - version: number; - card_text: string; - corpus_count: number; - impression_count: number; - model: string; - created_at: string; -} -export interface SettingsInfo { - web_username: string; - web_enable: boolean; - thresholds: { - max_content_len: number; - repeat_window: number; - throttle_seconds: number; - rolling_window: number; - }; -} diff --git a/hexi/plugins/nonebot_plugin_galgame_card/web/persona-admin/src/index.css b/hexi/plugins/nonebot_plugin_galgame_card/web/persona-admin/src/index.css deleted file mode 100644 index b8eb30e..0000000 --- a/hexi/plugins/nonebot_plugin_galgame_card/web/persona-admin/src/index.css +++ /dev/null @@ -1,24 +0,0 @@ -@tailwind base; -@tailwind components; -@tailwind utilities; - -html.dark { - color-scheme: dark; -} - -body { - @apply bg-background text-foreground; - font-family: "Microsoft YaHei", -apple-system, sans-serif; -} - -/* 侧栏滚动条 */ -::-webkit-scrollbar { - width: 6px; - height: 6px; -} -::-webkit-scrollbar-thumb { - @apply bg-default-700 rounded-full; -} -::-webkit-scrollbar-track { - background: transparent; -} diff --git a/hexi/plugins/nonebot_plugin_galgame_card/web/persona-admin/src/main.tsx b/hexi/plugins/nonebot_plugin_galgame_card/web/persona-admin/src/main.tsx deleted file mode 100644 index 5185c24..0000000 --- a/hexi/plugins/nonebot_plugin_galgame_card/web/persona-admin/src/main.tsx +++ /dev/null @@ -1,20 +0,0 @@ -import React from "react"; -import ReactDOM from "react-dom/client"; -import { HeroUIProvider, ToastProvider } from "@heroui/react"; -import { ThemeProvider } from "next-themes"; -import { HashRouter } from "react-router-dom"; -import App from "./App"; -import "./index.css"; - -ReactDOM.createRoot(document.getElementById("root")!).render( - - - - - - - - - - -); diff --git a/hexi/plugins/nonebot_plugin_galgame_card/web/persona-admin/src/pages/DataBrowser.tsx b/hexi/plugins/nonebot_plugin_galgame_card/web/persona-admin/src/pages/DataBrowser.tsx deleted file mode 100644 index e46d928..0000000 --- a/hexi/plugins/nonebot_plugin_galgame_card/web/persona-admin/src/pages/DataBrowser.tsx +++ /dev/null @@ -1,171 +0,0 @@ -import { useEffect, useState } from "react"; -import { - Card, - CardBody, - Select, - SelectItem, - Spinner, - Tab, - Tabs, - Table, - TableBody, - TableCell, - TableColumn, - TableHeader, - TableRow, -} from "@heroui/react"; -import { addToast } from "@heroui/react"; -import { api, GroupInfo, ImpressionItem, LogItem, SummaryItem } from "../api"; - -export default function DataBrowser() { - const [groups, setGroups] = useState([]); - const [gid, setGid] = useState(0); - const [tab, setTab] = useState("logs"); - - const [logs, setLogs] = useState([]); - const [impressions, setImpressions] = useState([]); - const [summaries, setSummaries] = useState([]); - const [loading, setLoading] = useState(false); - - useEffect(() => { - api("/groups") - .then(setGroups) - .catch((e: any) => addToast({ title: e.message, color: "danger" })); - }, []); - - useEffect(() => { - if (!gid) return; - setLoading(true); - const loaders: Record> = { - logs: api(`/groups/${gid}/logs?page=1&per_page=100`).then((d: any) => - setLogs(d.items) - ), - impressions: api(`/groups/${gid}/impressions?page=1&per_page=100`).then((d: any) => - setImpressions(d.items) - ), - summaries: api(`/groups/${gid}/summaries`).then(setSummaries), - }; - Promise.all([loaders.logs, loaders.impressions, loaders.summaries]).finally(() => - setLoading(false) - ); - }, [gid]); - - return ( -
-

数据浏览

- - - - - {!gid &&

请先选择群

} - - {loading && gid && ( -
- -
- )} - - {!loading && gid && ( - setTab(String(k))}> - - - - ID - 发送者 - 发给 - 时间 - 内容(已脱敏) - - - {(l) => ( - - {l.id} - -
{l.nickname || "—"}
-
{l.user_id}
-
- - {l.target_user_id ? ( - - → {l.target_user_id} - {l.target_inherited && ( - 延续 - )} - - ) : ( - — - )} - - {l.created_at} - {l.content} -
- )} -
-
-
- - - - - ID - 用户 - 覆盖语料区间 - 时间 - 印象内容 - - - {(r) => ( - - {r.id} - {r.user_id} - - #{r.cover_from_id} ~ #{r.cover_to_id} - - {r.created_at} - {r.content} - - )} - -
-
- - - {summaries.length === 0 ? ( -

{gid ? "暂无数据" : "请先选择群"}

- ) : ( - summaries.map((s) => ( -
-
- v{s.version} · {s.created_at} · 语料 {s.corpus_count} 条 · 印象{" "} - {s.impression_count} 条 -
-
-                        {s.card_text}
-                      
-
- )) - )} -
-
- )} -
-
-
- ); -} diff --git a/hexi/plugins/nonebot_plugin_galgame_card/web/persona-admin/src/pages/GroupDetail.tsx b/hexi/plugins/nonebot_plugin_galgame_card/web/persona-admin/src/pages/GroupDetail.tsx deleted file mode 100644 index 0f90cd6..0000000 --- a/hexi/plugins/nonebot_plugin_galgame_card/web/persona-admin/src/pages/GroupDetail.tsx +++ /dev/null @@ -1,334 +0,0 @@ -import { useCallback, useEffect, useState } from "react"; -import { Link, useParams } from "react-router-dom"; -import { - Button, - Card, - CardBody, - Input, - Spinner, - Tab, - Tabs, - Table, - TableBody, - TableCell, - TableColumn, - TableHeader, - TableRow, -} from "@heroui/react"; -import { addToast } from "@heroui/react"; -import { api, ImpressionItem, LogItem, Participant, SummaryItem } from "../api"; - -export default function GroupDetail() { - const { gid } = useParams(); - const gidNum = Number(gid); - - const [participants, setParticipants] = useState([]); - const [addUid, setAddUid] = useState(""); - const [tab, setTab] = useState("logs"); - - const [logs, setLogs] = useState([]); - const [logTotal, setLogTotal] = useState(0); - const [logPage, setLogPage] = useState(1); - const [logUid, setLogUid] = useState(""); - const [impressions, setImpressions] = useState([]); - const [summaries, setSummaries] = useState([]); - - const [loading, setLoading] = useState(true); - - const loadParticipants = useCallback(async () => { - try { - setParticipants(await api(`/groups/${gidNum}/participants`)); - } catch (e: any) { - addToast({ title: e.message, color: "danger" }); - } - }, [gidNum]); - - const loadLogs = useCallback( - async (page: number) => { - const q = new URLSearchParams({ page: String(page), per_page: "50" }); - if (logUid) q.set("user_id", logUid); - try { - const data = await api<{ items: LogItem[]; total: number }>( - `/groups/${gidNum}/logs?${q}` - ); - setLogs(data.items); - setLogTotal(data.total); - setLogPage(page); - } catch (e: any) { - addToast({ title: e.message, color: "danger" }); - } - }, - [gidNum, logUid] - ); - - const loadImpressions = useCallback(async () => { - try { - const data = await api<{ items: ImpressionItem[] }>( - `/groups/${gidNum}/impressions?page=1&per_page=100` - ); - setImpressions(data.items); - } catch (e: any) { - addToast({ title: e.message, color: "danger" }); - } - }, [gidNum]); - - const loadSummaries = useCallback(async () => { - try { - setSummaries(await api(`/groups/${gidNum}/summaries`)); - } catch (e: any) { - addToast({ title: e.message, color: "danger" }); - } - }, [gidNum]); - - useEffect(() => { - setLoading(true); - Promise.all([loadParticipants(), loadLogs(1)]).finally(() => setLoading(false)); - }, [loadParticipants, loadLogs]); - - useEffect(() => { - if (tab === "impressions") loadImpressions(); - if (tab === "summaries") loadSummaries(); - }, [tab]); - - /* ---------- 操作 ---------- */ - const addParticipant = async () => { - const uid = Number(addUid.trim()); - if (!uid) return; - try { - await api(`/groups/${gidNum}/participants`, { - method: "POST", - body: JSON.stringify({ user_id: uid }), - }); - setAddUid(""); - loadParticipants(); - addToast({ title: `已加入 ${uid}`, color: "success" }); - } catch (e: any) { - addToast({ title: e.message, color: "danger" }); - } - }; - - const removeParticipant = async (uid: number) => { - if (!confirm(`移除 ${uid}?其语料保留在库中`)) return; - try { - await api(`/groups/${gidNum}/participants/${uid}`, { method: "DELETE" }); - loadParticipants(); - addToast({ title: "已移除", color: "success" }); - } catch (e: any) { - addToast({ title: e.message, color: "danger" }); - } - }; - - const clearLogs = async () => { - if (!confirm("删除该群全部语料?印象/画像保留")) return; - try { - await api(`/groups/${gidNum}/logs`, { method: "DELETE" }); - loadLogs(1); - addToast({ title: "已删除全部语料", color: "success" }); - } catch (e: any) { - addToast({ title: e.message, color: "danger" }); - } - }; - - const clearGroup = async () => { - if (!confirm("确认清空该群全部数据(语料/印象/画像/参与者)?此操作不可恢复")) return; - try { - await api(`/groups/${gidNum}/data`, { method: "DELETE" }); - addToast({ title: "已清空", color: "success" }); - setTimeout(() => (window.location.hash = "#/groups"), 600); - } catch (e: any) { - addToast({ title: e.message, color: "danger" }); - } - }; - - const pages = Math.max(1, Math.ceil(logTotal / 50)); - - if (loading) { - return ( -
- -
- ); - } - - return ( -
-
- - - -

群管理 #{gidNum}

- -
- - {/* 参与者 */} - - -

参与者

-
- e.key === "Enter" && addParticipant()} - /> - -
- - - QQ - 语料条数 - 操作 - - - {(p) => ( - - {p.user_id} - {p.corpus_count} - - - - - )} - -
-
-
- - {/* 数据页签 */} - - - setTab(String(k))}> - -
- - - -
- - - ID - 发送者 - 发给 - 时间 - 内容(已脱敏) - - - {(l) => ( - - {l.id} - -
{l.nickname || "—"}
-
{l.user_id}
-
- - {l.target_user_id ? ( - - → {l.target_user_id} - {l.target_inherited && ( - 延续 - )} - - ) : ( - — - )} - - {l.created_at} - {l.content} -
- )} -
-
-
- - - 第 {logPage}/{pages} 页 · 共 {logTotal} 条 - - -
-
- - - - - ID - 用户 - 覆盖语料区间 - 时间 - 印象内容 - - - {(r) => ( - - {r.id} - {r.user_id} - - #{r.cover_from_id} ~ #{r.cover_to_id} - - {r.created_at} - {r.content} - - )} - -
-
- - - {summaries.length === 0 ? ( -

暂无画像(语料积累后由总结路径生成)

- ) : ( - summaries.map((s) => ( -
-
- v{s.version} · {s.created_at} · 语料 {s.corpus_count} 条 · 印象{" "} - {s.impression_count} 条 -
-
-                      {s.card_text}
-                    
-
- )) - )} -
-
-
-
-
- ); -} diff --git a/hexi/plugins/nonebot_plugin_galgame_card/web/persona-admin/src/pages/GroupList.tsx b/hexi/plugins/nonebot_plugin_galgame_card/web/persona-admin/src/pages/GroupList.tsx deleted file mode 100644 index 085c967..0000000 --- a/hexi/plugins/nonebot_plugin_galgame_card/web/persona-admin/src/pages/GroupList.tsx +++ /dev/null @@ -1,227 +0,0 @@ -import { useEffect, useState } from "react"; -import { Link } from "react-router-dom"; -import { - Button, - Card, - CardBody, - Checkbox, - CheckboxGroup, - Modal, - ModalBody, - ModalContent, - ModalFooter, - ModalHeader, - Spinner, - Switch, - Table, - TableBody, - TableCell, - TableColumn, - TableHeader, - TableRow, - useDisclosure, -} from "@heroui/react"; -import { addToast } from "@heroui/react"; -import { api, DiscoverGroup, GroupInfo } from "../api"; - -export default function GroupList() { - const [groups, setGroups] = useState([]); - const [loading, setLoading] = useState(true); - const [error, setError] = useState(""); - - // 添加群弹窗 - const { isOpen, onOpen, onOpenChange } = useDisclosure(); - const [discoverList, setDiscoverList] = useState([]); - const [selected, setSelected] = useState([]); - const [discoverLoading, setDiscoverLoading] = useState(false); - const [adding, setAdding] = useState(false); - - const load = async () => { - setLoading(true); - setError(""); - try { - setGroups(await api("/groups")); - } catch (e: any) { - setError(e.message); - } finally { - setLoading(false); - } - }; - - useEffect(() => { - load(); - }, []); - - const toggle = async (g: GroupInfo, enabled: boolean) => { - try { - await api(`/groups/${g.group_id}/enabled`, { - method: "POST", - body: JSON.stringify({ enabled }), - }); - g.enabled = enabled; - setGroups([...groups]); - addToast({ - title: enabled ? "已开启采集" : "已关闭采集", - description: `${g.group_name || g.group_id}`, - color: enabled ? "success" : "warning", - }); - } catch (e: any) { - addToast({ title: e.message, color: "danger" }); - } - }; - - const removeGroup = async (g: GroupInfo) => { - if (!confirm(`将 ${g.group_name || g.group_id} 移出管理列表?其数据保留`)) return; - try { - await api(`/groups/${g.group_id}`, { method: "DELETE" }); - load(); - addToast({ title: "已移出管理列表", color: "success" }); - } catch (e: any) { - addToast({ title: e.message, color: "danger" }); - } - }; - - /* ---------- 添加群 ---------- */ - const openDiscover = async () => { - onOpen(); - setDiscoverLoading(true); - setSelected([]); - try { - setDiscoverList(await api("/groups/discover")); - } catch (e: any) { - addToast({ title: e.message, color: "danger" }); - } finally { - setDiscoverLoading(false); - } - }; - - const confirmAdd = async () => { - const picked = discoverList.filter( - (g) => selected.includes(String(g.group_id)) && !g.managed - ); - if (picked.length === 0) return; - setAdding(true); - try { - for (const g of picked) { - await api("/groups", { - method: "POST", - body: JSON.stringify({ group_id: g.group_id, group_name: g.group_name }), - }); - } - addToast({ title: `已加入 ${picked.length} 个群`, color: "success" }); - onOpenChange(false); - load(); - } catch (e: any) { - addToast({ title: e.message, color: "danger" }); - } finally { - setAdding(false); - } - }; - - return ( -
-
-

群管理

-
- - -
-
- - - {loading ? ( -
- -
- ) : error ? ( -

{error}

- ) : ( - - - 群 - 采集开关 - 参与者 - 语料 - 印象 - 画像 - 操作 - - - {(g) => ( - - -
{g.group_name || `群 ${g.group_id}`}
-
{g.group_id}
-
- - toggle(g, v)} /> - - {g.participants} - {g.corpus_count} - {g.impression_count} - {g.summary_count} - -
- - - - -
-
-
- )} -
-
- )} -
-
- - {/* 添加群弹窗 */} - - - 添加群到管理列表 - - {discoverLoading ? ( -
- -
- ) : ( - - {discoverList.map((g) => ( -
- - {g.group_name || `群 ${g.group_id}`} - {g.group_id} - - {g.managed && 已管理} -
- ))} -
- )} -
- - - - -
-
-
- ); -} diff --git a/hexi/plugins/nonebot_plugin_galgame_card/web/persona-admin/src/pages/Login.tsx b/hexi/plugins/nonebot_plugin_galgame_card/web/persona-admin/src/pages/Login.tsx deleted file mode 100644 index 878c933..0000000 --- a/hexi/plugins/nonebot_plugin_galgame_card/web/persona-admin/src/pages/Login.tsx +++ /dev/null @@ -1,58 +0,0 @@ -import { useState } from "react"; -import { Button, Card, CardBody, Input } from "@heroui/react"; -import { useNavigate } from "react-router-dom"; -import { api, setToken } from "../api"; - -export default function Login() { - const navigate = useNavigate(); - const [username, setUsername] = useState(""); - const [password, setPassword] = useState(""); - const [loading, setLoading] = useState(false); - const [error, setError] = useState(""); - - const submit = async () => { - setLoading(true); - setError(""); - try { - const data = await api<{ token: string }>("/login", { - method: "POST", - body: JSON.stringify({ username, password }), - }); - setToken(data.token); - navigate("/groups", { replace: true }); - } catch (e: any) { - setError(e.message || "登录失败"); - } finally { - setLoading(false); - } - }; - - return ( -
- - -

群聊人设卡

- e.key === "Enter" && submit()} - /> - e.key === "Enter" && submit()} - /> - {error &&

{error}

} - -
-
-
- ); -} diff --git a/hexi/plugins/nonebot_plugin_galgame_card/web/persona-admin/src/pages/Settings.tsx b/hexi/plugins/nonebot_plugin_galgame_card/web/persona-admin/src/pages/Settings.tsx deleted file mode 100644 index 5f86e2b..0000000 --- a/hexi/plugins/nonebot_plugin_galgame_card/web/persona-admin/src/pages/Settings.tsx +++ /dev/null @@ -1,71 +0,0 @@ -import { useEffect, useState } from "react"; -import { Card, CardBody, Spinner, Table, TableBody, TableCell, TableColumn, TableHeader, TableRow } from "@heroui/react"; -import { api, SettingsInfo } from "../api"; - -export default function Settings() { - const [info, setInfo] = useState(null); - const [error, setError] = useState(""); - - useEffect(() => { - api("/settings") - .then(setInfo) - .catch((e: any) => setError(e.message)); - }, []); - - return ( -
-

设置

- - - {error ? ( -

{error}

- ) : !info ? ( -
- -
- ) : ( - <> -

当前配置(只读)

- - - 项 - 值 - - - - Web 登录账号 - {info.web_username} - - - Web 后台启用 - {info.web_enable ? "是" : "否"} - - - 长文截断上限 - {info.thresholds.max_content_len} 字 - - - 复读检测窗口 - {info.thresholds.repeat_window} 条 - - - 刷屏采样间隔 - {info.thresholds.throttle_seconds} 秒 - - - 单用户语料滚动上限 - {info.thresholds.rolling_window} 条 - - -
-

- 阈值与脱敏规则见插件 processor.py / DESIGN.md;Web 账号密码在 .env 配置 WEB_USERNAME / - WEB_PASSWORD。 -

- - )} -
-
-
- ); -} diff --git a/hexi/plugins/nonebot_plugin_galgame_card/web/persona-admin/tailwind.config.js b/hexi/plugins/nonebot_plugin_galgame_card/web/persona-admin/tailwind.config.js deleted file mode 100644 index 17c175c..0000000 --- a/hexi/plugins/nonebot_plugin_galgame_card/web/persona-admin/tailwind.config.js +++ /dev/null @@ -1,12 +0,0 @@ -import { heroui } from "@heroui/theme"; - -/** @type {import('tailwindcss').Config} */ -export default { - content: [ - "./index.html", - "./src/**/*.{js,ts,jsx,tsx}", - "./node_modules/@heroui/theme/dist/**/*.{js,ts,jsx,tsx}", - ], - darkMode: "class", - plugins: [heroui()], -}; diff --git a/hexi/plugins/nonebot_plugin_galgame_card/web/persona-admin/tsconfig.json b/hexi/plugins/nonebot_plugin_galgame_card/web/persona-admin/tsconfig.json deleted file mode 100644 index 109f0ac..0000000 --- a/hexi/plugins/nonebot_plugin_galgame_card/web/persona-admin/tsconfig.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "compilerOptions": { - "target": "ES2020", - "useDefineForClassFields": true, - "lib": ["ES2020", "DOM", "DOM.Iterable"], - "module": "ESNext", - "skipLibCheck": true, - "moduleResolution": "bundler", - "allowImportingTsExtensions": true, - "isolatedModules": true, - "moduleDetection": "force", - "noEmit": true, - "jsx": "react-jsx", - "strict": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "noFallthroughCasesInSwitch": true - }, - "include": ["src"] -} diff --git a/hexi/plugins/nonebot_plugin_galgame_card/web/persona-admin/vite.config.ts b/hexi/plugins/nonebot_plugin_galgame_card/web/persona-admin/vite.config.ts deleted file mode 100644 index a28de47..0000000 --- a/hexi/plugins/nonebot_plugin_galgame_card/web/persona-admin/vite.config.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { defineConfig } from "vite"; -import react from "@vitejs/plugin-react"; - -export default defineConfig({ - base: "/galgame_card/", - plugins: [react()], -}); diff --git a/hexi/plugins/nonebot_plugin_galgame_card/web_hub.py b/hexi/plugins/nonebot_plugin_galgame_card/web_hub.py index f726b80..d54e8bb 100644 --- a/hexi/plugins/nonebot_plugin_galgame_card/web_hub.py +++ b/hexi/plugins/nonebot_plugin_galgame_card/web_hub.py @@ -2,7 +2,7 @@ """群聊人设卡 Web API 子应用(挂载到 /api/galgame_card)。 统一鉴权走 hexi.web_auth(OAuth2 + SQLite),与统一管理台 /hub 共用登录态。 -旧版独立后台 /galgame_card(JWT 自鉴权)仍保留可用,前端由 hub 渲染。 +前端由统一管理台 hexi/web 渲染。 """ from __future__ import annotations @@ -15,7 +15,6 @@ from fastapi.responses import JSONResponse from hexi.web_auth import require_admin from . import repository -from .config import config API = require_admin @@ -42,11 +41,8 @@ async def _first_bot(): def build_admin_app() -> FastAPI | None: """构建群聊人设卡管理 API 子应用(挂载到 /api/galgame_card)。 - 在 hub 统一登录态下可用;未启用 Web 时返回 None。 + 鉴权由 hub 统一登录态提供(hexi.web_auth)。 """ - if not config.web_enable: - return None - app = FastAPI(title="Galgame Card API") @app.get("/groups", dependencies=[API]) @@ -213,8 +209,6 @@ def build_admin_app() -> FastAPI | None: return _ok( { - "web_username": config.web_username, - "web_enable": config.web_enable, "thresholds": { "max_content_len": processor.MAX_CONTENT_LEN, "repeat_window": processor.REPEAT_WINDOW, diff --git a/hexi/plugins/nonebot_plugin_helldivers_tools/services/equipment_store.py b/hexi/plugins/nonebot_plugin_helldivers_tools/services/equipment_store.py index 8256fa8..39ff89c 100644 --- a/hexi/plugins/nonebot_plugin_helldivers_tools/services/equipment_store.py +++ b/hexi/plugins/nonebot_plugin_helldivers_tools/services/equipment_store.py @@ -153,14 +153,34 @@ def count_stratagems() -> int: return int(conn.execute("SELECT COUNT(*) AS n FROM stratagems").fetchone()["n"]) -def list_stratagems_page(page: int = 1, page_size: int = 20) -> tuple[list[dict[str, Any]], int]: +def list_stratagems_page( + page: int = 1, + page_size: int = 20, + keyword: str = "", + type: str = "", + backpack: str = "", +) -> tuple[list[dict[str, Any]], int]: init_db() - total = count_stratagems() - offset = (page - 1) * page_size + where: list[str] = [] + params: list[Any] = [] + kw = (keyword or "").strip() + if kw: + like = f"%{kw}%" + where.append("(name LIKE ? OR name_en LIKE ? OR alias LIKE ?)") + params.extend([like, like, like]) + if type: + where.append("type = ?") + params.append(type) + if backpack in ("0", "1"): + where.append("backpack = ?") + params.append(int(backpack)) + where_sql = (" WHERE " + " AND ".join(where)) if where else "" with _connect() as conn: + total = int(conn.execute(f"SELECT COUNT(*) FROM stratagems{where_sql}", params).fetchone()[0]) + offset = (page - 1) * page_size rows = conn.execute( - "SELECT * FROM stratagems ORDER BY id LIMIT ? OFFSET ?", - (page_size, offset), + f"SELECT * FROM stratagems{where_sql} ORDER BY id LIMIT ? OFFSET ?", + (*params, page_size, offset), ).fetchall() return [_row_to_item(r) for r in rows], total diff --git a/hexi/plugins/nonebot_plugin_helldivers_tools/utils/equipment_renderer.py b/hexi/plugins/nonebot_plugin_helldivers_tools/utils/equipment_renderer.py index 90b991d..7cdf8b3 100644 --- a/hexi/plugins/nonebot_plugin_helldivers_tools/utils/equipment_renderer.py +++ b/hexi/plugins/nonebot_plugin_helldivers_tools/utils/equipment_renderer.py @@ -34,10 +34,20 @@ def _equip_icon(equip: dict[str, Any]) -> str: raw = equip.get("path") or "" if not raw: return "" - p = basic_path / raw.replace("\\", "/") - if not p.exists(): - return "" - return f"" + rel = raw.replace("\\", "/") + # 兼容两种路径存法:插件根相对路径 res/img/...(新/播种数据), + # 以及 res/img 目录相对路径 img/...(旧库迁移前遗留),统一找真实文件。 + candidates = [rel] + if rel.startswith("res/"): + candidates.append(rel[len("res/"):]) + else: + candidates.append("res/" + rel) + candidates.append("res/img/" + rel) + for cand in candidates: + p = basic_path / cand + if p.exists(): + return f"" + return "" def _item_html(equip: dict[str, Any]) -> str: diff --git a/hexi/plugins/nonebot_plugin_helldivers_tools/utils/icon_utils.py b/hexi/plugins/nonebot_plugin_helldivers_tools/utils/icon_utils.py index e85fad2..099ee5f 100644 --- a/hexi/plugins/nonebot_plugin_helldivers_tools/utils/icon_utils.py +++ b/hexi/plugins/nonebot_plugin_helldivers_tools/utils/icon_utils.py @@ -1,21 +1,30 @@ # -*- coding: utf-8 -*- -"""SVG -> PNG 转换 + 可选 HD2 风格边框,用于战备图标上传。""" +"""SVG -> PNG 转换。 + +与 docs/HD2/run.py 一致:把上传的单张 SVG 按输出尺寸(默认 550x550)栅格化成 +透明背景 PNG,不做批量,也不叠加边框。 + +优先用 cairosvg(与 run.py 完全一致);若运行环境缺 cairo 原生库,则回退到 +Chromium canvas 渲染(透明背景、同尺寸),保证 Web 后台上传始终可用。 +""" from __future__ import annotations import base64 -import io +import logging import re from pathlib import Path -from PIL import Image, ImageDraw +logger = logging.getLogger(__name__) + +try: + import cairosvg # type: ignore + _HAS_CAIROSVG = True +except Exception: # noqa: BLE001 + cairosvg = None + _HAS_CAIROSVG = False SCHEMA_SIZE = 550 # 与随包 PNG 图标一致 -TYPE_COLORS = { - "blue": "#6bb7ea", - "red": "#fe6d6a", - "green": "#7ecb3f", -} basic_path = Path(__file__).resolve().parents[1] IMG_DIR = basic_path / "res" / "img" / "helldivers" @@ -23,49 +32,13 @@ IMG_DIR = basic_path / "res" / "img" / "helldivers" def sanitize_filename(name: str) -> str: """把战备名转成安全的 Windows 文件名(保留中文/空格,去掉非法字符)。""" - s = re.sub(r'[\\/:*?"<>|]', "_", name).strip() + s = re.sub(r'[\/:*?"<>|]', "_", name).strip() s = re.sub(r"\s+", " ", s) return s or "strategem" -def _hex_to_rgb(hex_color: str) -> tuple[int, int, int]: - h = hex_color.lstrip("#") - if len(h) == 3: - h = "".join(c * 2 for c in h) - return tuple(int(h[i : i + 2], 16) for i in (0, 2, 4)) # type: ignore[return-value] - - -def _apply_frame(src_png: bytes, size: int, frame_color: str) -> bytes: - """把透明的 SVG 画面叠到 HD2 风格画布上:彩色边框 + 深色内底 + 居中图形。""" - rgb = _hex_to_rgb(frame_color) - img = Image.open(io.BytesIO(src_png)).convert("RGBA") - canvas = Image.new("RGBA", (size, size), rgb + (255,)) - draw = ImageDraw.Draw(canvas) - border = max(10, size // 20) - # 外圈用类型色,内部深色 - draw.rectangle([0, 0, size - 1, size - 1], fill=rgb + (255,)) - draw.rectangle([border, border, size - 1 - border, size - 1 - border], fill=(12, 12, 12, 255)) - # 去掉透明边距再居中 - alpha = img.getchannel("A") - bbox = alpha.getbbox() - glyph = img.crop(bbox) if bbox else img - inner = size - 2 * border - avail = int(inner * 0.82) - glyph.thumbnail((avail, avail), Image.LANCZOS) - ox = (size - glyph.width) // 2 - oy = (size - glyph.height) // 2 - canvas.alpha_composite(glyph, (ox, oy)) - out = io.BytesIO() - canvas.save(out, format="PNG") - return out.getvalue() - - -async def _render_svg(svg_text: str, size: int) -> bytes: - """用 Chromium 的 canvas 把 SVG 光栅化为带透明通道的 PNG。 - - 用 toDataURL 导出而非截图,避免 omit_background 在部分环境把透明背景 - 拍成白色,从而保住透明 alpha。 - """ +async def _render_svg_canvas(svg_text: str, size: int) -> bytes: + """用 Chromium canvas 把 SVG 光栅化为带透明通道的 PNG(兜底方案)。""" from playwright.async_api import async_playwright data_uri = "data:image/svg+xml;base64," + base64.b64encode(svg_text.encode("utf-8")).decode() @@ -92,17 +65,28 @@ async def _render_svg(svg_text: str, size: int) -> bytes: await page.set_content("") data_url = await page.evaluate(script) await browser.close() + if not data_url: + raise ValueError("SVG 转换失败") return base64.b64decode(data_url.split(",", 1)[1]) -async def svg_to_png(svg_text: str, framed: bool = False, frame_color: str | None = None, size: int = SCHEMA_SIZE) -> bytes: - """SVG -> PNG。framed=True 时叠加 HD2 风格边框到类型色。""" +async def svg_to_png(svg_text: str, size: int = SCHEMA_SIZE) -> bytes: + """SVG -> PNG(透明背景,默认 550x550)。 + + 参考 docs/HD2/run.py:cairosvg.svg2png 按 output_width/output_height 栅格化到目标尺寸。 + """ if not svg_text.strip(): raise ValueError("SVG 内容为空") - png = await _render_svg(svg_text, size) - if framed: - png = _apply_frame(png, size, frame_color or TYPE_COLORS["blue"]) - return png + if _HAS_CAIROSVG: + try: + return cairosvg.svg2png( + bytestring=svg_text.encode("utf-8"), + output_width=size, + output_height=size, + ) + except Exception as e: # noqa: BLE001 + logger.warning(f"cairosvg 转换失败,改用 canvas 兜底: {type(e).__name__}: {e}") + return await _render_svg_canvas(svg_text, size) def save_icon_png(png_bytes: bytes, name: str) -> str: @@ -111,4 +95,4 @@ def save_icon_png(png_bytes: bytes, name: str) -> str: filename = sanitize_filename(name) + ".png" dest = IMG_DIR / filename dest.write_bytes(png_bytes) - return f"res/img/helldivers/{filename}" \ No newline at end of file + return f"res/img/helldivers/{filename}" diff --git a/hexi/plugins/nonebot_plugin_helldivers_tools/web/stratagem_admin.py b/hexi/plugins/nonebot_plugin_helldivers_tools/web/stratagem_admin.py index 460d5a2..1cd59d2 100644 --- a/hexi/plugins/nonebot_plugin_helldivers_tools/web/stratagem_admin.py +++ b/hexi/plugins/nonebot_plugin_helldivers_tools/web/stratagem_admin.py @@ -24,7 +24,7 @@ from ..services.equipment_store import ( list_stratagems_page, update_stratagem, ) -from ..utils.icon_utils import TYPE_COLORS, save_icon_png, svg_to_png +from ..utils.icon_utils import save_icon_png, svg_to_png basic_path = Path(__file__).resolve().parents[1] @@ -39,10 +39,10 @@ def build_admin_app() -> FastAPI | None: auth = require_admin @app.get("/stratagems") - async def api_list(page: int = 1, page_size: int = 20, _: dict = auth): + async def api_list(page: int = 1, page_size: int = 20, q: str = "", type: str = "", backpack: str = "", _: dict = auth): page = max(1, page) page_size = min(max(1, page_size), 100) - items, total = list_stratagems_page(page, page_size) + items, total = list_stratagems_page(page, page_size, keyword=q, type=type, backpack=backpack) return {"items": items, "total": total, "page": page, "page_size": page_size} @app.post("/stratagems") @@ -86,8 +86,17 @@ def build_admin_app() -> FastAPI | None: @app.get("/img/{path:path}") async def icon_file(path: str): + # 兼容多种存量路径:res/img/...(插件根相对,新)、img/...(旧库,res/img 相对)、 + # 以及直接/相对 res/img 的路径,统一归一化到 res/img 下的相对路径再解析。 + rel = path.replace("\\", "/").lstrip("/") + if rel.startswith("res/img/"): + rel = rel[len("res/img/"):] + elif rel.startswith("res/"): + rel = rel[len("res/"):] + elif rel.startswith("img/"): + rel = rel[len("img/"):] base = (basic_path / "res" / "img").resolve() - target = (basic_path / "res" / "img" / path).resolve() + target = (basic_path / "res" / "img" / rel).resolve() if not target.is_relative_to(base) or not target.exists(): raise HTTPException(status_code=404, detail="图片不存在") return FileResponse(target) @@ -96,13 +105,11 @@ def build_admin_app() -> FastAPI | None: async def api_upload_icon(seed: int, request: Request, _: dict = auth): body = await _get_body(request) svg = (body.get("svg") or "").strip() - framed = bool(body.get("framed")) item = get_stratagem(seed) if item is None: raise HTTPException(status_code=404, detail="未找到该战备") - frame_color = TYPE_COLORS.get(item.get("type"), "#6bb7ea") try: - png = await svg_to_png(svg, framed=framed, frame_color=frame_color) + png = await svg_to_png(svg) except ValueError as e: raise HTTPException(status_code=400, detail=str(e)) except Exception as e: diff --git a/hexi/plugins/nonebot_plugin_learning_chat/__init__.py b/hexi/plugins/nonebot_plugin_learning_chat/__init__.py index b7e7e07..ddff324 100644 --- a/hexi/plugins/nonebot_plugin_learning_chat/__init__.py +++ b/hexi/plugins/nonebot_plugin_learning_chat/__init__.py @@ -6,7 +6,6 @@ from nonebot.plugin import PluginMetadata require("nonebot_plugin_orm") from .config import NICKNAME, config_manager, register_config as _register_learning_config # noqa: E402 -from . import web_api # noqa: E402 from . import web_hub # noqa: E402 from hexi.web_plugin_registry import register_web_plugin # noqa: E402 diff --git a/hexi/plugins/nonebot_plugin_learning_chat/config.py b/hexi/plugins/nonebot_plugin_learning_chat/config.py index bcb3020..15c3a3f 100644 --- a/hexi/plugins/nonebot_plugin_learning_chat/config.py +++ b/hexi/plugins/nonebot_plugin_learning_chat/config.py @@ -49,13 +49,6 @@ class ChatGroupConfig(BaseModel): class ChatConfig(BaseModel): total_enable: bool = Field(default=True, alias="群聊学习总开关") - enable_web: bool = Field(default=True, alias="启用后台管理") - web_username: str = Field(default="chat", alias="后台管理用户名") - web_password: str = Field(default="admin", alias="后台管理密码") - web_secret_key: str = Field( - default="49c294d32f69b732ef6447c18379451ce1738922a75cd1d4812ef150318a2ed0", - alias="后台管理token密钥", - ) ban_words: List[str] = Field(default_factory=list, alias="全局屏蔽词") ban_users: List[int] = Field(default_factory=list, alias="全局屏蔽用户") KEYWORDS_SIZE: int = Field(default=3, alias="单句关键词分词数量") @@ -118,7 +111,7 @@ def register_config() -> None: """把顶层 ChatConfig 顶层字段接入统一 Web 配置标准(/hub 可读可改)。 getter/setter 直接读写 config_manager.config,并保存到 learning_chat.yml。 - 权威源是插件自身的 yml,故 nosave 不写入 plugin_config.json(避免与自有后台互相覆盖)。 + 权威源是插件自身的 yml,故 nosave 不写入 plugin_config.json。 """ from hexi.config_standard import register_config_items @@ -131,10 +124,6 @@ def register_config() -> None: fields = [ {"key": "total_enable", "label": "群聊学习总开关", "type": "bool"}, - {"key": "enable_web", "label": "启用后台管理", "type": "bool"}, - {"key": "web_username", "label": "后台管理用户名", "type": "string"}, - {"key": "web_password", "label": "后台管理密码", "type": "password", "secret": True}, - {"key": "web_secret_key", "label": "后台签名密钥", "type": "password", "secret": True}, {"key": "ban_words", "label": "全局屏蔽词", "type": "text", "item_type": "str"}, {"key": "ban_users", "label": "全局屏蔽用户", "type": "text", "item_type": "int"}, {"key": "KEYWORDS_SIZE", "label": "单句关键词分词数量", "type": "int"}, diff --git a/hexi/plugins/nonebot_plugin_learning_chat/web/learning-chat-admin/.gitignore b/hexi/plugins/nonebot_plugin_learning_chat/web/learning-chat-admin/.gitignore deleted file mode 100644 index a547bf3..0000000 --- a/hexi/plugins/nonebot_plugin_learning_chat/web/learning-chat-admin/.gitignore +++ /dev/null @@ -1,24 +0,0 @@ -# Logs -logs -*.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* -pnpm-debug.log* -lerna-debug.log* - -node_modules -dist -dist-ssr -*.local - -# Editor directories and files -.vscode/* -!.vscode/extensions.json -.idea -.DS_Store -*.suo -*.ntvs* -*.njsproj -*.sln -*.sw? diff --git a/hexi/plugins/nonebot_plugin_learning_chat/web/learning-chat-admin/README.md b/hexi/plugins/nonebot_plugin_learning_chat/web/learning-chat-admin/README.md deleted file mode 100644 index 33895ab..0000000 --- a/hexi/plugins/nonebot_plugin_learning_chat/web/learning-chat-admin/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# Vue 3 + TypeScript + Vite - -This template should help get you started developing with Vue 3 and TypeScript in Vite. The template uses Vue 3 ` - - \ No newline at end of file diff --git a/hexi/plugins/nonebot_plugin_learning_chat/web/learning-chat-admin/package-lock.json b/hexi/plugins/nonebot_plugin_learning_chat/web/learning-chat-admin/package-lock.json deleted file mode 100644 index a87aee2..0000000 --- a/hexi/plugins/nonebot_plugin_learning_chat/web/learning-chat-admin/package-lock.json +++ /dev/null @@ -1,1559 +0,0 @@ -{ - "name": "learning-chat-admin", - "version": "1.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "learning-chat-admin", - "version": "1.0.0", - "dependencies": { - "@element-plus/icons-vue": "^2.3.2", - "axios": "^1.5.0", - "element-plus": "^2.14.3", - "pinia": "^2.1.6", - "vue": "^3.3.4", - "vue-router": "^4.2.5" - }, - "devDependencies": { - "@types/node": "^25.6.0", - "@vitejs/plugin-vue": "^4.5.0", - "typescript": "^5.2.2", - "vite": "^4.5.0", - "vue-tsc": "^1.8.19" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", - "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", - "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.29.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.2.tgz", - "integrity": "sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==", - "license": "MIT", - "dependencies": { - "@babel/types": "^7.29.0" - }, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/types": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", - "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", - "license": "MIT", - "dependencies": { - "@babel/helper-string-parser": "^7.27.1", - "@babel/helper-validator-identifier": "^7.28.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@ctrl/tinycolor": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@ctrl/tinycolor/-/tinycolor-4.2.0.tgz", - "integrity": "sha512-kzyuwOAQnXJNLS9PSyrk0CWk35nWJW/zl/6KvnTBMFK65gm7U1/Z5BqjxeapjZCIhQcM/DsrEmcbRwDyXyXK4A==", - "license": "MIT", - "engines": { - "node": ">=14" - } - }, - "node_modules/@element-plus/icons-vue": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/@element-plus/icons-vue/-/icons-vue-2.3.2.tgz", - "integrity": "sha512-OzIuTaIfC8QXEPmJvB4Y4kw34rSXdCJzxcD1kFStBvr8bK6X1zQAYDo0CNMjojnfTqRQCJ0I7prlErcoRiET2A==", - "license": "MIT", - "peerDependencies": { - "vue": "^3.2.0" - } - }, - "node_modules/@esbuild/android-arm": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", - "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", - "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz", - "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", - "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", - "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", - "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", - "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", - "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", - "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", - "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", - "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", - "cpu": [ - "loong64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz", - "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", - "cpu": [ - "mips64el" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz", - "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz", - "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz", - "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", - "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", - "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", - "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz", - "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz", - "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", - "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", - "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@floating-ui/core": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.8.0.tgz", - "integrity": "sha512-0CIZ5itps/8x7BG8dEIhs53BvCUH2PCoogtakwRTut+Arm58sJooJ0AuZhLw2HJYIR5cMLNPBSS728sPho2khQ==", - "license": "MIT", - "dependencies": { - "@floating-ui/utils": "^0.2.12" - } - }, - "node_modules/@floating-ui/dom": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.8.0.tgz", - "integrity": "sha512-yXSrzeHZBTZadLOlfyhCkJHNeLJnHRnRInwdZ40L7ZiaAtrBwoYlsDrX3v5zB1Utk7CLfzcOVnVVWoXEky7Ceg==", - "license": "MIT", - "dependencies": { - "@floating-ui/core": "^1.8.0", - "@floating-ui/utils": "^0.2.12" - } - }, - "node_modules/@floating-ui/utils": { - "version": "0.2.12", - "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.12.tgz", - "integrity": "sha512-HpCo8tmWzLVad5s2d19EhAz5zqrrQ6s69qd6moPMQvkOuSwDT1YgRfWSVuc4ennqrgv3OHppiOGMQ7oC13yIww==", - "license": "MIT" - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", - "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", - "license": "MIT" - }, - "node_modules/@popperjs/core": { - "name": "@sxzz/popperjs-es", - "version": "2.11.8", - "resolved": "https://registry.npmjs.org/@sxzz/popperjs-es/-/popperjs-es-2.11.8.tgz", - "integrity": "sha512-wOwESXvvED3S8xBmcPWHs2dUuzrE4XiZeFu7e1hROIJkm02a49N120pmOXxY33sBb6hArItm5W5tcg1cBtV+HQ==", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/popperjs" - } - }, - "node_modules/@types/lodash": { - "version": "4.17.25", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.25.tgz", - "integrity": "sha512-+K1NIO8I+F9/wNulfVvu23QYd0Pe9/OCqRrim4NoYIf1VoEDL90Ve4ClzpyqBLc7NpGGWRvYNCKZ1BE/Jpf8dQ==", - "license": "MIT" - }, - "node_modules/@types/lodash-es": { - "version": "4.17.12", - "resolved": "https://registry.npmjs.org/@types/lodash-es/-/lodash-es-4.17.12.tgz", - "integrity": "sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==", - "license": "MIT", - "peer": true, - "dependencies": { - "@types/lodash": "*" - } - }, - "node_modules/@types/node": { - "version": "25.6.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-25.6.0.tgz", - "integrity": "sha512-+qIYRKdNYJwY3vRCZMdJbPLJAtGjQBudzZzdzwQYkEPQd+PJGixUL5QfvCLDaULoLv+RhT3LDkwEfKaAkgSmNQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "undici-types": "~7.19.0" - } - }, - "node_modules/@types/web-bluetooth": { - "version": "0.0.21", - "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.21.tgz", - "integrity": "sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA==", - "license": "MIT" - }, - "node_modules/@vitejs/plugin-vue": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-4.6.2.tgz", - "integrity": "sha512-kqf7SGFoG+80aZG6Pf+gsZIVvGSCKE98JbiWqcCV9cThtg91Jav0yvYFC9Zb+jKetNGF6ZKeoaxgZfND21fWKw==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "peerDependencies": { - "vite": "^4.0.0 || ^5.0.0", - "vue": "^3.2.25" - } - }, - "node_modules/@volar/language-core": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-1.11.1.tgz", - "integrity": "sha512-dOcNn3i9GgZAcJt43wuaEykSluAuOkQgzni1cuxLxTV0nJKanQztp7FxyswdRILaKH+P2XZMPRp2S4MV/pElCw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@volar/source-map": "1.11.1" - } - }, - "node_modules/@volar/source-map": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-1.11.1.tgz", - "integrity": "sha512-hJnOnwZ4+WT5iupLRnuzbULZ42L7BWWPMmruzwtLhJfpDVoZLjNBxHDi2sY2bgZXCKlpU5XcsMFoYrsQmPhfZg==", - "dev": true, - "license": "MIT", - "dependencies": { - "muggle-string": "^0.3.1" - } - }, - "node_modules/@volar/typescript": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-1.11.1.tgz", - "integrity": "sha512-iU+t2mas/4lYierSnoFOeRFQUhAEMgsFuQxoxvwn5EdQopw43j+J27a4lt9LMInx1gLJBC6qL14WYGlgymaSMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@volar/language-core": "1.11.1", - "path-browserify": "^1.0.1" - } - }, - "node_modules/@vue/compiler-core": { - "version": "3.5.32", - "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.32.tgz", - "integrity": "sha512-4x74Tbtqnda8s/NSD6e1Dr5p1c8HdMU5RWSjMSUzb8RTcUQqevDCxVAitcLBKT+ie3o0Dl9crc/S/opJM7qBGQ==", - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.29.2", - "@vue/shared": "3.5.32", - "entities": "^7.0.1", - "estree-walker": "^2.0.2", - "source-map-js": "^1.2.1" - } - }, - "node_modules/@vue/compiler-dom": { - "version": "3.5.32", - "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.32.tgz", - "integrity": "sha512-ybHAu70NtiEI1fvAUz3oXZqkUYEe5J98GjMDpTGl5iHb0T15wQYLR4wE3h9xfuTNA+Cm2f4czfe8B4s+CCH57Q==", - "license": "MIT", - "dependencies": { - "@vue/compiler-core": "3.5.32", - "@vue/shared": "3.5.32" - } - }, - "node_modules/@vue/compiler-sfc": { - "version": "3.5.32", - "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.32.tgz", - "integrity": "sha512-8UYUYo71cP/0YHMO814TRZlPuUUw3oifHuMR7Wp9SNoRSrxRQnhMLNlCeaODNn6kNTJsjFoQ/kqIj4qGvya4Xg==", - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.29.2", - "@vue/compiler-core": "3.5.32", - "@vue/compiler-dom": "3.5.32", - "@vue/compiler-ssr": "3.5.32", - "@vue/shared": "3.5.32", - "estree-walker": "^2.0.2", - "magic-string": "^0.30.21", - "postcss": "^8.5.8", - "source-map-js": "^1.2.1" - } - }, - "node_modules/@vue/compiler-ssr": { - "version": "3.5.32", - "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.32.tgz", - "integrity": "sha512-Gp4gTs22T3DgRotZ8aA/6m2jMR+GMztvBXUBEUOYOcST+giyGWJ4WvFd7QLHBkzTxkfOt8IELKNdpzITLbA2rw==", - "license": "MIT", - "dependencies": { - "@vue/compiler-dom": "3.5.32", - "@vue/shared": "3.5.32" - } - }, - "node_modules/@vue/devtools-api": { - "version": "6.6.4", - "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.6.4.tgz", - "integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==", - "license": "MIT" - }, - "node_modules/@vue/language-core": { - "version": "1.8.27", - "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-1.8.27.tgz", - "integrity": "sha512-L8Kc27VdQserNaCUNiSFdDl9LWT24ly8Hpwf1ECy3aFb9m6bDhBGQYOujDm21N7EW3moKIOKEanQwe1q5BK+mA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@volar/language-core": "~1.11.1", - "@volar/source-map": "~1.11.1", - "@vue/compiler-dom": "^3.3.0", - "@vue/shared": "^3.3.0", - "computeds": "^0.0.1", - "minimatch": "^9.0.3", - "muggle-string": "^0.3.1", - "path-browserify": "^1.0.1", - "vue-template-compiler": "^2.7.14" - }, - "peerDependencies": { - "typescript": "*" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@vue/reactivity": { - "version": "3.5.32", - "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.32.tgz", - "integrity": "sha512-/ORasxSGvZ6MN5gc+uE364SxFdJ0+WqVG0CENXaGW58TOCdrAW76WWaplDtECeS1qphvtBZtR+3/o1g1zL4xPQ==", - "license": "MIT", - "dependencies": { - "@vue/shared": "3.5.32" - } - }, - "node_modules/@vue/runtime-core": { - "version": "3.5.32", - "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.32.tgz", - "integrity": "sha512-pDrXCejn4UpFDFmMd27AcJEbHaLemaE5o4pbb7sLk79SRIhc6/t34BQA7SGNgYtbMnvbF/HHOftYBgFJtUoJUQ==", - "license": "MIT", - "dependencies": { - "@vue/reactivity": "3.5.32", - "@vue/shared": "3.5.32" - } - }, - "node_modules/@vue/runtime-dom": { - "version": "3.5.32", - "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.32.tgz", - "integrity": "sha512-1CDVv7tv/IV13V8Nip1k/aaObVbWqRlVCVezTwx3K07p7Vxossp5JU1dcPNhJk3w347gonIUT9jQOGutyJrSVQ==", - "license": "MIT", - "dependencies": { - "@vue/reactivity": "3.5.32", - "@vue/runtime-core": "3.5.32", - "@vue/shared": "3.5.32", - "csstype": "^3.2.3" - } - }, - "node_modules/@vue/server-renderer": { - "version": "3.5.32", - "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.32.tgz", - "integrity": "sha512-IOjm2+JQwRFS7W28HNuJeXQle9KdZbODFY7hFGVtnnghF51ta20EWAZJHX+zLGtsHhaU6uC9BGPV52KVpYryMQ==", - "license": "MIT", - "dependencies": { - "@vue/compiler-ssr": "3.5.32", - "@vue/shared": "3.5.32" - }, - "peerDependencies": { - "vue": "3.5.32" - } - }, - "node_modules/@vue/shared": { - "version": "3.5.32", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.32.tgz", - "integrity": "sha512-ksNyrmRQzWJJ8n3cRDuSF7zNNontuJg1YHnmWRJd2AMu8Ij2bqwiiri2lH5rHtYPZjj4STkNcgcmiQqlOjiYGg==", - "license": "MIT" - }, - "node_modules/@vueuse/core": { - "version": "14.3.0", - "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-14.3.0.tgz", - "integrity": "sha512-aHfz47g0ZhMtTVHmIzMVpJy8ePhhOy68GY5bv110+5DVtZ+W7BsOx+m61UNQqfrWyPztIHIanWa3E2tib3NFIw==", - "license": "MIT", - "dependencies": { - "@types/web-bluetooth": "^0.0.21", - "@vueuse/metadata": "14.3.0", - "@vueuse/shared": "14.3.0" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - }, - "peerDependencies": { - "vue": "^3.5.0" - } - }, - "node_modules/@vueuse/metadata": { - "version": "14.3.0", - "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-14.3.0.tgz", - "integrity": "sha512-BwxmbAzwAVF50+MW57GXOUEV61nFBGnlBvrTqj49PqWJu3uw7hdu72ztXeZ33RdZtDY6kO+bfCAE1PCn88Tktw==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/@vueuse/shared": { - "version": "14.3.0", - "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-14.3.0.tgz", - "integrity": "sha512-bZpge9eSXwa4ToSiqJ7j6KRwhAsneMFoSz3LMWKQDkqimm3D/tbFlrklrs/IOqC8tEcYmXQZJ6N0UrjhBirVCg==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/antfu" - }, - "peerDependencies": { - "vue": "^3.5.0" - } - }, - "node_modules/async-validator": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/async-validator/-/async-validator-4.2.5.tgz", - "integrity": "sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==", - "license": "MIT" - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "license": "MIT" - }, - "node_modules/axios": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.15.0.tgz", - "integrity": "sha512-wWyJDlAatxk30ZJer+GeCWS209sA42X+N5jU2jy6oHTp7ufw8uzUTVFBX9+wTfAlhiJXGS0Bq7X6efruWjuK9Q==", - "license": "MIT", - "dependencies": { - "follow-redirects": "^1.15.11", - "form-data": "^4.0.5", - "proxy-from-env": "^2.1.0" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true, - "license": "MIT" - }, - "node_modules/brace-expansion": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.0.tgz", - "integrity": "sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/call-bind-apply-helpers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", - "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "license": "MIT", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/computeds": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/computeds/-/computeds-0.0.1.tgz", - "integrity": "sha512-7CEBgcMjVmitjYo5q8JTJVra6X5mQ20uTThdK+0kR7UEaDrAWEQcRiBtWJzga4eRpP6afNwwLsX2SET2JhVB1Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/csstype": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", - "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", - "license": "MIT" - }, - "node_modules/dayjs": { - "version": "1.11.21", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.21.tgz", - "integrity": "sha512-98IT+HOahAisibz/yjKbzuOBwYcjJ7BCLPzARyHiyEBmRz4fatF+KPJszEHXsGYjUG234aH/cOjW1wwTbKUZlA==", - "license": "MIT" - }, - "node_modules/de-indent": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz", - "integrity": "sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==", - "dev": true, - "license": "MIT" - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/dunder-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", - "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "es-errors": "^1.3.0", - "gopd": "^1.2.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/element-plus": { - "version": "2.14.3", - "resolved": "https://registry.npmjs.org/element-plus/-/element-plus-2.14.3.tgz", - "integrity": "sha512-pJcvxcpZjYruNzuJhAeVwnbYjfNgzBKnWHwSVEhwzM2/kcLI3brzmtIBxtPqd4hQWJfD1PRnjoc1WipLw2eBGg==", - "license": "MIT", - "dependencies": { - "@ctrl/tinycolor": "^4.2.0", - "@element-plus/icons-vue": "^2.3.2", - "@floating-ui/dom": "^1.7.6", - "@popperjs/core": "npm:@sxzz/popperjs-es@^2.11.8", - "@types/lodash": "^4.17.24", - "@types/lodash-es": "^4.17.12", - "@vueuse/core": "14.3.0", - "async-validator": "^4.2.5", - "dayjs": "^1.11.20", - "lodash": "^4.18.1", - "lodash-es": "^4.18.1", - "lodash-unified": "^1.0.3", - "memoize-one": "^6.0.0", - "normalize-wheel-es": "^1.2.0", - "vue-component-type-helpers": "^3.3.5" - }, - "peerDependencies": { - "vue": "^3.3.7" - } - }, - "node_modules/entities": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-7.0.1.tgz", - "integrity": "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/es-define-property": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", - "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-set-tostringtag": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", - "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/esbuild": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", - "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "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" - } - }, - "node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "license": "MIT" - }, - "node_modules/follow-redirects": { - "version": "1.16.0", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.0.tgz", - "integrity": "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "license": "MIT", - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/form-data": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", - "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", - "license": "MIT", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "es-set-tostringtag": "^2.1.0", - "hasown": "^2.0.2", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-intrinsic": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", - "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", - "license": "MIT", - "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" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", - "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", - "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true, - "license": "MIT", - "bin": { - "he": "bin/he" - } - }, - "node_modules/lodash": { - "version": "4.18.1", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz", - "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==", - "license": "MIT", - "peer": true - }, - "node_modules/lodash-es": { - "version": "4.18.1", - "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.18.1.tgz", - "integrity": "sha512-J8xewKD/Gk22OZbhpOVSwcs60zhd95ESDwezOFuA3/099925PdHJ7OFHNTGtajL3AlZkykD32HykiMo+BIBI8A==", - "license": "MIT", - "peer": true - }, - "node_modules/lodash-unified": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/lodash-unified/-/lodash-unified-1.0.3.tgz", - "integrity": "sha512-WK9qSozxXOD7ZJQlpSqOT+om2ZfcT4yO+03FuzAHD0wF6S0l0090LRPDx3vhTTLZ8cFKpBn+IOcVXK6qOcIlfQ==", - "license": "MIT", - "peerDependencies": { - "@types/lodash-es": "*", - "lodash": "*", - "lodash-es": "*" - } - }, - "node_modules/magic-string": { - "version": "0.30.21", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", - "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", - "license": "MIT", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.5" - } - }, - "node_modules/math-intrinsics": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", - "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/memoize-one": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-6.0.0.tgz", - "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==", - "license": "MIT" - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/minimatch": { - "version": "9.0.9", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", - "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.2" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/muggle-string": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/muggle-string/-/muggle-string-0.3.1.tgz", - "integrity": "sha512-ckmWDJjphvd/FvZawgygcUeQCxzvohjFO5RxTjj4eq8kw359gFF3E1brjfI+viLMxss5JrHTDRHZvu2/tuy0Qg==", - "dev": true, - "license": "MIT" - }, - "node_modules/nanoid": { - "version": "3.3.11", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", - "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/normalize-wheel-es": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/normalize-wheel-es/-/normalize-wheel-es-1.2.0.tgz", - "integrity": "sha512-Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw==", - "license": "BSD-3-Clause" - }, - "node_modules/path-browserify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", - "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", - "dev": true, - "license": "MIT" - }, - "node_modules/picocolors": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", - "license": "ISC" - }, - "node_modules/pinia": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/pinia/-/pinia-2.3.1.tgz", - "integrity": "sha512-khUlZSwt9xXCaTbbxFYBKDc/bWAGWJjOgvxETwkTN7KRm66EeT1ZdZj6i2ceh9sP2Pzqsbc704r2yngBrxBVug==", - "license": "MIT", - "dependencies": { - "@vue/devtools-api": "^6.6.3", - "vue-demi": "^0.14.10" - }, - "funding": { - "url": "https://github.com/sponsors/posva" - }, - "peerDependencies": { - "typescript": ">=4.4.4", - "vue": "^2.7.0 || ^3.5.11" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/postcss": { - "version": "8.5.10", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.10.tgz", - "integrity": "sha512-pMMHxBOZKFU6HgAZ4eyGnwXF/EvPGGqUr0MnZ5+99485wwW41kW91A4LOGxSHhgugZmSChL5AlElNdwlNgcnLQ==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "nanoid": "^3.3.11", - "picocolors": "^1.1.1", - "source-map-js": "^1.2.1" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/proxy-from-env": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-2.1.0.tgz", - "integrity": "sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==", - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/rollup": { - "version": "3.30.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.30.0.tgz", - "integrity": "sha512-kQvGasUgN+AlWGliFn2POSajRQEsULVYFGTvOZmK06d7vCD+YhZztt70kGk3qaeAXeWYL5eO7zx+rAubBc55eA==", - "dev": true, - "license": "MIT", - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=14.18.0", - "npm": ">=8.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/semver": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", - "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/source-map-js": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", - "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/typescript": { - "version": "5.9.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", - "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", - "devOptional": true, - "license": "Apache-2.0", - "peer": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/undici-types": { - "version": "7.19.2", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.19.2.tgz", - "integrity": "sha512-qYVnV5OEm2AW8cJMCpdV20CDyaN3g0AjDlOGf1OW4iaDEx8MwdtChUp4zu4H0VP3nDRF/8RKWH+IPp9uW0YGZg==", - "dev": true, - "license": "MIT" - }, - "node_modules/vite": { - "version": "4.5.14", - "resolved": "https://registry.npmjs.org/vite/-/vite-4.5.14.tgz", - "integrity": "sha512-+v57oAaoYNnO3hIu5Z/tJRZjq5aHM2zDve9YZ8HngVHbhk66RStobhb1sqPMIPEleV6cNKYK4eGrAbE9Ulbl2g==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "esbuild": "^0.18.10", - "postcss": "^8.4.27", - "rollup": "^3.27.1" - }, - "bin": { - "vite": "bin/vite.js" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/vitejs/vite?sponsor=1" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - }, - "peerDependencies": { - "@types/node": ">= 14", - "less": "*", - "lightningcss": "^1.21.0", - "sass": "*", - "stylus": "*", - "sugarss": "*", - "terser": "^5.4.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "less": { - "optional": true - }, - "lightningcss": { - "optional": true - }, - "sass": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true - } - } - }, - "node_modules/vue": { - "version": "3.5.32", - "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.32.tgz", - "integrity": "sha512-vM4z4Q9tTafVfMAK7IVzmxg34rSzTFMyIe0UUEijUCkn9+23lj0WRfA83dg7eQZIUlgOSGrkViIaCfqSAUXsMw==", - "license": "MIT", - "peer": true, - "dependencies": { - "@vue/compiler-dom": "3.5.32", - "@vue/compiler-sfc": "3.5.32", - "@vue/runtime-dom": "3.5.32", - "@vue/server-renderer": "3.5.32", - "@vue/shared": "3.5.32" - }, - "peerDependencies": { - "typescript": "*" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/vue-component-type-helpers": { - "version": "3.3.9", - "resolved": "https://registry.npmjs.org/vue-component-type-helpers/-/vue-component-type-helpers-3.3.9.tgz", - "integrity": "sha512-3c/UfMe0SqyEfcGTyH7mfshHagJ9QTCbppCb0/uGpHZpFug7+If3GeGZN7I0YheKEExemx3xldQPoO7PQSOLQg==", - "license": "MIT" - }, - "node_modules/vue-demi": { - "version": "0.14.10", - "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.10.tgz", - "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==", - "hasInstallScript": true, - "license": "MIT", - "bin": { - "vue-demi-fix": "bin/vue-demi-fix.js", - "vue-demi-switch": "bin/vue-demi-switch.js" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - }, - "peerDependencies": { - "@vue/composition-api": "^1.0.0-rc.1", - "vue": "^3.0.0-0 || ^2.6.0" - }, - "peerDependenciesMeta": { - "@vue/composition-api": { - "optional": true - } - } - }, - "node_modules/vue-router": { - "version": "4.6.4", - "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.6.4.tgz", - "integrity": "sha512-Hz9q5sa33Yhduglwz6g9skT8OBPii+4bFn88w6J+J4MfEo4KRRpmiNG/hHHkdbRFlLBOqxN8y8gf2Fb0MTUgVg==", - "license": "MIT", - "dependencies": { - "@vue/devtools-api": "^6.6.4" - }, - "funding": { - "url": "https://github.com/sponsors/posva" - }, - "peerDependencies": { - "vue": "^3.5.0" - } - }, - "node_modules/vue-template-compiler": { - "version": "2.7.16", - "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.7.16.tgz", - "integrity": "sha512-AYbUWAJHLGGQM7+cNTELw+KsOG9nl2CnSv467WobS5Cv9uk3wFcnr1Etsz2sEIHEZvw1U+o9mRlEO6QbZvUPGQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "de-indent": "^1.0.2", - "he": "^1.2.0" - } - }, - "node_modules/vue-tsc": { - "version": "1.8.27", - "resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-1.8.27.tgz", - "integrity": "sha512-WesKCAZCRAbmmhuGl3+VrdWItEvfoFIPXOvUJkjULi+x+6G/Dy69yO3TBRJDr9eUlmsNAwVmxsNZxvHKzbkKdg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@volar/typescript": "~1.11.1", - "@vue/language-core": "1.8.27", - "semver": "^7.5.4" - }, - "bin": { - "vue-tsc": "bin/vue-tsc.js" - }, - "peerDependencies": { - "typescript": "*" - } - } - } -} diff --git a/hexi/plugins/nonebot_plugin_learning_chat/web/learning-chat-admin/package.json b/hexi/plugins/nonebot_plugin_learning_chat/web/learning-chat-admin/package.json deleted file mode 100644 index 22cae09..0000000 --- a/hexi/plugins/nonebot_plugin_learning_chat/web/learning-chat-admin/package.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "name": "learning-chat-admin", - "private": true, - "version": "1.0.0", - "type": "module", - "scripts": { - "dev": "vite", - "build": "vite build", - "preview": "vite preview", - "lint": "eslint . --ext .vue,.js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix" - }, - "dependencies": { - "@element-plus/icons-vue": "^2.3.2", - "axios": "^1.5.0", - "element-plus": "^2.14.3", - "pinia": "^2.1.6", - "vue": "^3.3.4", - "vue-router": "^4.2.5" - }, - "devDependencies": { - "@types/node": "^25.6.0", - "@vitejs/plugin-vue": "^4.5.0", - "typescript": "^5.2.2", - "vite": "^4.5.0", - "vue-tsc": "^1.8.19" - } -} diff --git a/hexi/plugins/nonebot_plugin_learning_chat/web/learning-chat-admin/public/favicon.svg b/hexi/plugins/nonebot_plugin_learning_chat/web/learning-chat-admin/public/favicon.svg deleted file mode 100644 index 6893eb1..0000000 --- a/hexi/plugins/nonebot_plugin_learning_chat/web/learning-chat-admin/public/favicon.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/hexi/plugins/nonebot_plugin_learning_chat/web/learning-chat-admin/src/App.vue b/hexi/plugins/nonebot_plugin_learning_chat/web/learning-chat-admin/src/App.vue deleted file mode 100644 index c9ecb13..0000000 --- a/hexi/plugins/nonebot_plugin_learning_chat/web/learning-chat-admin/src/App.vue +++ /dev/null @@ -1,146 +0,0 @@ - - - - - diff --git a/hexi/plugins/nonebot_plugin_learning_chat/web/learning-chat-admin/src/api/client.ts b/hexi/plugins/nonebot_plugin_learning_chat/web/learning-chat-admin/src/api/client.ts deleted file mode 100644 index fe5f51f..0000000 --- a/hexi/plugins/nonebot_plugin_learning_chat/web/learning-chat-admin/src/api/client.ts +++ /dev/null @@ -1,204 +0,0 @@ -import axios, { AxiosError } from 'axios'; -import { ElMessage } from 'element-plus'; -import router from '@/router'; -import { useAuthStore } from '@/stores/auth'; -import type { - ApiResponse, - BlacklistItem, - ChatAnswer, - ChatContext, - ChatMessage, - GlobalConfig, - GroupConfig, - GroupInfo, - LoginResult, - PaginatedData, -} from '@/types'; - -/** 带状态码的请求错误 */ -export class ApiError extends Error { - status: number; - - /** 认证失效类错误: 已由全局拦截器提示并跳转登录, 视图层不再重复弹窗 */ - authHandled = false; - - constructor(message: string, status = 0) { - super(message); - this.status = status; - } -} - -let redirectingToLogin = false; - -/** 认证失效: 清除登录态并跳转登录页(避免并发失败时重复跳转) */ -function handleUnauthorized() { - const authStore = useAuthStore(); - authStore.logout(); - if (router.currentRoute.value.path !== '/login' && !redirectingToLogin) { - redirectingToLogin = true; - ElMessage.warning('登录已失效,请重新登录'); - router.push('/login').finally(() => { - redirectingToLogin = false; - }); - } -} - -class ApiClient { - private axiosInstance; - - constructor() { - this.axiosInstance = axios.create({ - baseURL: '/learning_chat/api', - timeout: 30000, - }); - - // 请求: 附加 token 头(后端契约: authentication() 读取 token header) - this.axiosInstance.interceptors.request.use((config) => { - const authStore = useAuthStore(); - if (authStore.token) { - config.headers.token = authStore.token; - } - return config; - }); - - // 响应: 三态归一化 - // 1. {"status": 0, "msg", "data"} → 成功, 返回整个信封(data 由调用方取) - // 2. {"status": !=0, "msg"} → 业务失败(HTTP 200 内) - // 3. {"detail": ...}(HTTP 400/422)→ 认证失效/参数错误 - // 4. 裸 dict(全局/分群配置 GET)→ 直接返回 - this.axiosInstance.interceptors.response.use( - (response) => { - const data = response.data; - if (data && typeof data === 'object' && !Array.isArray(data)) { - if (typeof data.detail !== 'undefined') { - handleUnauthorized(); - const err = new ApiError(String(data.detail), response.status); - err.authHandled = true; - throw err; - } - if (typeof data.status === 'number') { - if (data.status === 0) return data; - throw new ApiError(String(data.msg || '操作失败'), data.status); - } - } - return data; - }, - (error: AxiosError) => { - const status = error.response?.status; - const data = error.response?.data as { detail?: unknown } | undefined; - const isAuthError = status === 400 || status === 422; - // 后端认证失效契约为 HTTP 400/422 + {"detail"} - if (isAuthError) { - handleUnauthorized(); - } - const detail = data?.detail; - const message = - typeof detail === 'string' - ? detail - : status === 0 - ? '无法连接到服务器' - : error.message || '网络请求失败'; - const apiError = new ApiError(message, status ?? 0); - apiError.authHandled = isAuthError; - return Promise.reject(apiError); - } - ); - } - - /** 登录 */ - async login(username: string, password: string): Promise> { - return this.axiosInstance.post('/login', { username, password }); - } - - /** 获取群列表 */ - async getGroupList(): Promise> { - return this.axiosInstance.get('/get_group_list'); - } - - /** 获取全局配置(裸 dict) */ - async getGlobalConfig(): Promise { - return this.axiosInstance.get('/chat_global_config'); - } - - /** 保存全局配置 */ - async saveGlobalConfig(data: GlobalConfig): Promise { - return this.axiosInstance.post('/chat_global_config', data); - } - - /** 获取分群配置(裸 dict, 概率为百分比) */ - async getGroupConfig(groupId: number | string): Promise { - return this.axiosInstance.get(`/chat_group_config?group_id=${groupId}`); - } - - /** 保存分群配置(groupId 传 'all' 表示保存至所有群) */ - async saveGroupConfig(groupId: number | string, data: GroupConfig): Promise { - return this.axiosInstance.post(`/chat_group_config?group_id=${groupId}`, data); - } - - /** 获取聊天消息 */ - async getMessages(params: { - page?: number; - perPage?: number; - orderBy?: string; - orderDir?: string; - group_id?: string; - user_id?: string; - message?: string; - }): Promise>> { - return this.axiosInstance.get('/get_chat_messages', { params }); - } - - /** 获取学习内容 */ - async getContexts(params: { - page?: number; - perPage?: number; - orderBy?: string; - orderDir?: string; - keywords?: string; - }): Promise>> { - return this.axiosInstance.get('/get_chat_contexts', { params }); - } - - /** 获取回复 */ - async getAnswers(params: { - page?: number; - perPage?: number; - orderBy?: string; - orderDir?: string; - context_id?: number; - keywords?: string; - }): Promise>> { - return this.axiosInstance.get('/get_chat_answers', { params }); - } - - /** 获取禁用列表 */ - async getBlacklist(params: { - page?: number; - perPage?: number; - keywords?: string; - bans?: string; - }): Promise>> { - return this.axiosInstance.get('/get_chat_blacklist', { params }); - } - - /** 删除(type: message | context | answer | blacklist) */ - async deleteChat(type: string, id: number): Promise { - return this.axiosInstance.delete(`/delete_chat?type=${type}&id=${id}`); - } - - /** 禁用(type: message | context | answer) */ - async banChat(type: string, id: number): Promise { - return this.axiosInstance.put(`/ban_chat?type=${type}&id=${id}`); - } - - /** 批量删除/取消禁用(type: answer | blacklist | context | message, id 可选) */ - async deleteAll(type: string, id?: number): Promise { - let url = `/delete_all?type=${type}`; - if (id !== undefined) { - url += `&id=${id}`; - } - return this.axiosInstance.put(url); - } -} - -export default new ApiClient(); diff --git a/hexi/plugins/nonebot_plugin_learning_chat/web/learning-chat-admin/src/components/FullTextDialog.vue b/hexi/plugins/nonebot_plugin_learning_chat/web/learning-chat-admin/src/components/FullTextDialog.vue deleted file mode 100644 index 475fbe6..0000000 --- a/hexi/plugins/nonebot_plugin_learning_chat/web/learning-chat-admin/src/components/FullTextDialog.vue +++ /dev/null @@ -1,54 +0,0 @@ - - - - - diff --git a/hexi/plugins/nonebot_plugin_learning_chat/web/learning-chat-admin/src/main.ts b/hexi/plugins/nonebot_plugin_learning_chat/web/learning-chat-admin/src/main.ts deleted file mode 100644 index b45aba9..0000000 --- a/hexi/plugins/nonebot_plugin_learning_chat/web/learning-chat-admin/src/main.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { createApp } from 'vue'; -import { createPinia } from 'pinia'; -import ElementPlus from 'element-plus'; -import 'element-plus/dist/index.css'; -import * as ElementPlusIconsVue from '@element-plus/icons-vue'; -import router from '@/router'; -import App from '@/App.vue'; -import '@/style.css'; - -// 移除旧版「API 地址设置」功能残留(同源架构下该功能已废弃, 写死的地址会导致跨域失败) -localStorage.removeItem('API_BASE_URL'); - -const app = createApp(App); - -for (const [key, component] of Object.entries(ElementPlusIconsVue)) { - app.component(key, component); -} - -app.use(createPinia()); -app.use(router); -app.use(ElementPlus); -app.mount('#app'); diff --git a/hexi/plugins/nonebot_plugin_learning_chat/web/learning-chat-admin/src/router/index.ts b/hexi/plugins/nonebot_plugin_learning_chat/web/learning-chat-admin/src/router/index.ts deleted file mode 100644 index 0ed3295..0000000 --- a/hexi/plugins/nonebot_plugin_learning_chat/web/learning-chat-admin/src/router/index.ts +++ /dev/null @@ -1,105 +0,0 @@ -import { createRouter, createWebHistory, RouteRecordRaw } from 'vue-router'; -import { ElMessage } from 'element-plus'; -import { useAuthStore } from '@/stores/auth'; - -// 懒加载视图 -const Login = () => import('@/views/Login.vue'); -const Config = () => import('@/views/Config.vue'); -const Messages = () => import('@/views/Messages.vue'); -const Contexts = () => import('@/views/Contexts.vue'); -const Answers = () => import('@/views/Answers.vue'); -const Blacklist = () => import('@/views/Blacklist.vue'); - -const routes: RouteRecordRaw[] = [ - { - path: '/', - redirect: () => { - const authStore = useAuthStore(); - return authStore.isAuthenticated ? '/config' : '/login'; - }, - }, - { - path: '/login', - name: 'Login', - component: Login, - meta: { requiresAuth: false }, - }, - { - path: '/config', - name: 'Config', - component: Config, - meta: { requiresAuth: true }, - }, - { - path: '/messages', - name: 'Messages', - component: Messages, - meta: { requiresAuth: true }, - }, - { - path: '/contexts', - name: 'Contexts', - component: Contexts, - meta: { requiresAuth: true }, - }, - { - path: '/answers', - name: 'Answers', - component: Answers, - meta: { requiresAuth: true }, - }, - { - path: '/blacklist', - name: 'Blacklist', - component: Blacklist, - meta: { requiresAuth: true }, - }, - { - path: '/:pathMatch(.*)*', - redirect: '/login', - meta: { requiresAuth: false }, - }, -]; - -const router = createRouter({ - // base 与 vite.config.ts 的 base 保持一致, 否则 SPA 导航会产生不带前缀的根路径 URL, 刷新即 404 - history: createWebHistory('/learning_chat/'), - routes, -}); - -// 全局路由守卫 -router.beforeEach((to, _from) => { - const authStore = useAuthStore(); - - // token 已过期(按 JWT exp 主动检测) -> 立即登出跳登录页 - if (authStore.token) { - const exp = authStore.getTokenExpiry(authStore.token); - if (exp !== null && exp * 1000 <= Date.now()) { - authStore.logout(); - if (to.path !== '/login') { - ElMessage.warning('登录已过期,请重新登录'); - return { path: '/login', query: { redirect: to.fullPath } }; - } - } - } - - const requiresAuth = to.meta.requiresAuth; - - // 需要登录但未认证 -> 跳登录页 - if (requiresAuth && !authStore.isAuthenticated) { - return { - path: '/login', - query: { redirect: to.fullPath }, - }; - } - - // 已登录但访问登录页 -> 跳配置页 - if (to.path === '/login' && authStore.isAuthenticated) { - return '/config'; - } - - // 其他情况放行 - return true; -}); - -export default router; \ No newline at end of file diff --git a/hexi/plugins/nonebot_plugin_learning_chat/web/learning-chat-admin/src/stores/auth.ts b/hexi/plugins/nonebot_plugin_learning_chat/web/learning-chat-admin/src/stores/auth.ts deleted file mode 100644 index f7aa1a9..0000000 --- a/hexi/plugins/nonebot_plugin_learning_chat/web/learning-chat-admin/src/stores/auth.ts +++ /dev/null @@ -1,81 +0,0 @@ -import { defineStore } from 'pinia'; -import { ref, computed } from 'vue'; - -export const useAuthStore = defineStore('auth', () => { - // 初始化时从 localStorage 读取 - const token = ref(localStorage.getItem('token') || ''); - const username = ref(localStorage.getItem('username') || ''); - - const isAuthenticated = computed(() => !!token.value); - - let expireTimer: ReturnType | null = null; - - /** 解析 JWT payload 中的 exp(unix 秒); 非 JWT 或解析失败返回 null */ - const getTokenExpiry = (t: string): number | null => { - try { - const payload = t.split('.')[1]; - if (!payload) return null; - const json = JSON.parse( - atob(payload.replace(/-/g, '+').replace(/_/g, '/')) - ); - return typeof json.exp === 'number' ? json.exp : null; - } catch { - return null; - } - }; - - /** - * 注册到期自动登出: - * - token 已过期 → 立即 logout 并返回 true - * - 未过期 → 在 exp 时刻触发 onExpired 回调 - */ - const scheduleAutoLogout = (onExpired?: () => void): boolean => { - if (expireTimer) { - clearTimeout(expireTimer); - expireTimer = null; - } - if (!token.value) return false; - const exp = getTokenExpiry(token.value); - if (exp === null) return false; - const remainingMs = exp * 1000 - Date.now(); - if (remainingMs <= 0) { - logout(); - return true; - } - expireTimer = setTimeout(() => { - logout(); - onExpired?.(); - }, remainingMs); - return false; - }; - - const setAuth = (newToken: string, newUsername: string) => { - token.value = newToken; - username.value = newUsername; - localStorage.setItem('token', newToken); - localStorage.setItem('username', newUsername); - // 登录即武装到期定时器 - scheduleAutoLogout(); - }; - - const logout = () => { - if (expireTimer) { - clearTimeout(expireTimer); - expireTimer = null; - } - token.value = ''; - username.value = ''; - localStorage.removeItem('token'); - localStorage.removeItem('username'); - }; - - return { - token, - username, - isAuthenticated, - getTokenExpiry, - scheduleAutoLogout, - setAuth, - logout, - }; -}); diff --git a/hexi/plugins/nonebot_plugin_learning_chat/web/learning-chat-admin/src/style.css b/hexi/plugins/nonebot_plugin_learning_chat/web/learning-chat-admin/src/style.css deleted file mode 100644 index fe37268..0000000 --- a/hexi/plugins/nonebot_plugin_learning_chat/web/learning-chat-admin/src/style.css +++ /dev/null @@ -1,79 +0,0 @@ -/* 全局样式 — Element Plus 自带 reset, 这里只保留主题与少量通用类 */ -html, -body, -#app { - height: 100%; - margin: 0; -} - -body { - font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', - 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif; - background: #f5f7fa; - color: #303133; -} - -/* 页面级白色卡片容器(列表页) */ -.page-card { - background: #fff; - border-radius: 8px; - padding: 20px; - box-shadow: 0 1px 4px rgba(0, 0, 0, 0.06); -} - -/* 页面顶部说明条 */ -.page-tip { - margin-bottom: 16px; -} - -/* 搜索栏与操作行 */ -.toolbar { - display: flex; - flex-wrap: wrap; - gap: 8px; - margin-bottom: 16px; -} - -.toolbar .el-input { - width: 160px; -} - -.toolbar .toolbar-wide { - width: 240px; -} - -/* 分页容器 */ -.pagination-wrap { - display: flex; - justify-content: center; - margin-top: 16px; -} - -/* 表格内可点击查看完整内容的长文本单元格 */ -.clickable-cell { - cursor: pointer; - color: #606266; - transition: color 0.2s; -} - -.clickable-cell:hover { - color: var(--el-color-primary); - text-decoration: underline; -} - -/* 单行省略(配合可点击单元格使用) */ -.cell-ellipsis { - display: block; - max-width: 100%; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; -} - -/* 表单辅助说明文字 */ -.help-text { - font-size: 12px; - color: #909399; - line-height: 1.6; - margin-top: 4px; -} diff --git a/hexi/plugins/nonebot_plugin_learning_chat/web/learning-chat-admin/src/types/index.ts b/hexi/plugins/nonebot_plugin_learning_chat/web/learning-chat-admin/src/types/index.ts deleted file mode 100644 index 20f4ac5..0000000 --- a/hexi/plugins/nonebot_plugin_learning_chat/web/learning-chat-admin/src/types/index.ts +++ /dev/null @@ -1,97 +0,0 @@ -/** - * 与后端 web_api.py 契约一致的类型定义 - */ - -/** 后端统一信封(列表/操作类接口); 配置 GET 返回裸 dict, 认证错误返回 {"detail"} */ -export interface ApiResponse { - status: number; - msg: string; - data?: T; -} - -export interface PaginatedData { - items: T[]; - total: number; -} - -export interface LoginResult { - token: string; -} - -export interface GroupInfo { - label: string; - value: number; -} - -export interface ChatMessage { - id: number; - message_id: string | number; - group_id: number; - user_id: number; - raw_message: string; - message?: string; - /** unix 秒整数 */ - time: number; -} - -export interface ChatContext { - id: number; - keywords: string; - /** unix 秒整数 */ - time: number; - count: number; -} - -export interface ChatAnswer { - id: number; - group_id: number; - keywords: string; - /** unix 秒整数 */ - time: number; - count: number; - context_id: number; - /** 旧数据可能为 null */ - messages: Array<{ msg: string }> | null; -} - -export interface BlacklistItem { - id: number; - keywords: string; - bans: string; - global_ban?: boolean; - ban_group_id?: number[]; -} - -export interface GlobalConfig { - total_enable: boolean; - enable_web: boolean; - web_username: string; - web_password: string; - web_secret_key: string; - KEYWORDS_SIZE: number; - cross_group_threshold: number; - learn_max_count: number; - ban_words: string[]; - ban_users: string[]; - dictionary: string[]; -} - -export interface GroupConfig { - enable: boolean; - answer_threshold: number; - answer_threshold_weights: number[]; - repeat_threshold: number; - /** 0-100 百分比(后端 GET ×100 / POST ÷100 契约) */ - break_probability: number; - speak_enable: boolean; - speak_threshold: number; - speak_min_interval: number; - /** 0-100 百分比 */ - speak_continuously_probability: number; - speak_continuously_max_len: number; - /** 0-100 百分比 */ - speak_poke_probability: number; - ban_words: string[]; - ban_users: string[]; - member_list: GroupInfo[]; -} diff --git a/hexi/plugins/nonebot_plugin_learning_chat/web/learning-chat-admin/src/utils/format.ts b/hexi/plugins/nonebot_plugin_learning_chat/web/learning-chat-admin/src/utils/format.ts deleted file mode 100644 index 5278598..0000000 --- a/hexi/plugins/nonebot_plugin_learning_chat/web/learning-chat-admin/src/utils/format.ts +++ /dev/null @@ -1,14 +0,0 @@ -/** 后端 time 为 unix 秒整数, 格式化为本地时间(兼容毫秒/字符串) */ -export function formatTime(time: number | string | null | undefined): string { - if (time === null || time === undefined || time === '') return ''; - let t = Number(time); - if (Number.isNaN(t)) return String(time); - if (t < 1e12) t *= 1000; // 秒 → 毫秒 - return new Date(t).toLocaleString('zh-CN'); -} - -/** 从错误对象提取可读消息(ApiError/普通 Error/未知值) */ -export function errorMessage(err: unknown, fallback: string): string { - if (err instanceof Error && err.message) return err.message; - return fallback; -} diff --git a/hexi/plugins/nonebot_plugin_learning_chat/web/learning-chat-admin/src/utils/notify.ts b/hexi/plugins/nonebot_plugin_learning_chat/web/learning-chat-admin/src/utils/notify.ts deleted file mode 100644 index 61b9aa0..0000000 --- a/hexi/plugins/nonebot_plugin_learning_chat/web/learning-chat-admin/src/utils/notify.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { ElMessage } from 'element-plus'; -import { ApiError } from '@/api/client'; -import { errorMessage } from './format'; - -/** - * 展示错误提示。 - * 认证失效类错误已由全局拦截器统一提示并跳转登录, 这里跳过, 避免重复弹窗。 - */ -export function showError(err: unknown, fallback: string): void { - if (err instanceof ApiError && err.authHandled) return; - ElMessage.error(errorMessage(err, fallback)); -} diff --git a/hexi/plugins/nonebot_plugin_learning_chat/web/learning-chat-admin/src/views/Answers.vue b/hexi/plugins/nonebot_plugin_learning_chat/web/learning-chat-admin/src/views/Answers.vue deleted file mode 100644 index 527dd8f..0000000 --- a/hexi/plugins/nonebot_plugin_learning_chat/web/learning-chat-admin/src/views/Answers.vue +++ /dev/null @@ -1,264 +0,0 @@ - - - - - diff --git a/hexi/plugins/nonebot_plugin_learning_chat/web/learning-chat-admin/src/views/Blacklist.vue b/hexi/plugins/nonebot_plugin_learning_chat/web/learning-chat-admin/src/views/Blacklist.vue deleted file mode 100644 index d5706b2..0000000 --- a/hexi/plugins/nonebot_plugin_learning_chat/web/learning-chat-admin/src/views/Blacklist.vue +++ /dev/null @@ -1,170 +0,0 @@ - - - - - diff --git a/hexi/plugins/nonebot_plugin_learning_chat/web/learning-chat-admin/src/views/Config.vue b/hexi/plugins/nonebot_plugin_learning_chat/web/learning-chat-admin/src/views/Config.vue deleted file mode 100644 index 8092e5e..0000000 --- a/hexi/plugins/nonebot_plugin_learning_chat/web/learning-chat-admin/src/views/Config.vue +++ /dev/null @@ -1,586 +0,0 @@ - - - - - diff --git a/hexi/plugins/nonebot_plugin_learning_chat/web/learning-chat-admin/src/views/Contexts.vue b/hexi/plugins/nonebot_plugin_learning_chat/web/learning-chat-admin/src/views/Contexts.vue deleted file mode 100644 index 1a4a497..0000000 --- a/hexi/plugins/nonebot_plugin_learning_chat/web/learning-chat-admin/src/views/Contexts.vue +++ /dev/null @@ -1,280 +0,0 @@ - - - diff --git a/hexi/plugins/nonebot_plugin_learning_chat/web/learning-chat-admin/src/views/Login.vue b/hexi/plugins/nonebot_plugin_learning_chat/web/learning-chat-admin/src/views/Login.vue deleted file mode 100644 index dd91db4..0000000 --- a/hexi/plugins/nonebot_plugin_learning_chat/web/learning-chat-admin/src/views/Login.vue +++ /dev/null @@ -1,159 +0,0 @@ - - - - - diff --git a/hexi/plugins/nonebot_plugin_learning_chat/web/learning-chat-admin/src/views/Messages.vue b/hexi/plugins/nonebot_plugin_learning_chat/web/learning-chat-admin/src/views/Messages.vue deleted file mode 100644 index 1ca958e..0000000 --- a/hexi/plugins/nonebot_plugin_learning_chat/web/learning-chat-admin/src/views/Messages.vue +++ /dev/null @@ -1,188 +0,0 @@ - - - diff --git a/hexi/plugins/nonebot_plugin_learning_chat/web/learning-chat-admin/src/vue.d.ts b/hexi/plugins/nonebot_plugin_learning_chat/web/learning-chat-admin/src/vue.d.ts deleted file mode 100644 index 4ca75b5..0000000 --- a/hexi/plugins/nonebot_plugin_learning_chat/web/learning-chat-admin/src/vue.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -declare module '*.vue' { - import type { DefineComponent } from 'vue' - const component: DefineComponent<{}, {}, any> - export default component -} \ No newline at end of file diff --git a/hexi/plugins/nonebot_plugin_learning_chat/web/learning-chat-admin/tsconfig.app.json b/hexi/plugins/nonebot_plugin_learning_chat/web/learning-chat-admin/tsconfig.app.json deleted file mode 100644 index 5c750c5..0000000 --- a/hexi/plugins/nonebot_plugin_learning_chat/web/learning-chat-admin/tsconfig.app.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "extends": "@vue/tsconfig/tsconfig.dom.json", - "compilerOptions": { - "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo", - "types": ["vite/client"], - - /* Linting */ - "noUnusedLocals": true, - "noUnusedParameters": true, - "erasableSyntaxOnly": true, - "noFallthroughCasesInSwitch": true - }, - "include": ["src/**/*.ts", "src/**/*.tsx", "src/**/*.vue"] -} diff --git a/hexi/plugins/nonebot_plugin_learning_chat/web/learning-chat-admin/tsconfig.json b/hexi/plugins/nonebot_plugin_learning_chat/web/learning-chat-admin/tsconfig.json deleted file mode 100644 index 735d292..0000000 --- a/hexi/plugins/nonebot_plugin_learning_chat/web/learning-chat-admin/tsconfig.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "compilerOptions": { - "target": "ES2020", - "useDefineForClassFields": true, - "lib": ["ES2020", "DOM", "DOM.Iterable"], - "module": "ESNext", - "skipLibCheck": true, - "esModuleInterop": true, - "allowSyntheticDefaultImports": true, - - /* 路径别名 */ - "baseUrl": ".", - "paths": { - "@/*": ["src/*"] - }, - - /* Bundler mode */ - "moduleResolution": "bundler", - "allowImportingTsExtensions": true, - "resolveJsonModule": true, - "isolatedModules": true, - "noEmit": true, - "jsx": "react-jsx", - - /* Linting */ - "strict": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "noFallthroughCasesInSwitch": true, - - /* Vue支持 */ - "types": ["vite/client"] - }, - "include": ["src", "src/**/*.ts", "src/**/*.vue", "src/**/*.tsx"], - "references": [{ "path": "./tsconfig.node.json" }] -} \ No newline at end of file diff --git a/hexi/plugins/nonebot_plugin_learning_chat/web/learning-chat-admin/tsconfig.node.json b/hexi/plugins/nonebot_plugin_learning_chat/web/learning-chat-admin/tsconfig.node.json deleted file mode 100644 index 4eb43d0..0000000 --- a/hexi/plugins/nonebot_plugin_learning_chat/web/learning-chat-admin/tsconfig.node.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "compilerOptions": { - "composite": true, - "skipLibCheck": true, - "module": "ESNext", - "moduleResolution": "bundler", - "allowSyntheticDefaultImports": true, - "strict": true - }, - "include": ["vite.config.ts"] -} \ No newline at end of file diff --git a/hexi/plugins/nonebot_plugin_learning_chat/web/learning-chat-admin/vite.config.ts b/hexi/plugins/nonebot_plugin_learning_chat/web/learning-chat-admin/vite.config.ts deleted file mode 100644 index 3a9116b..0000000 --- a/hexi/plugins/nonebot_plugin_learning_chat/web/learning-chat-admin/vite.config.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { defineConfig } from 'vite' -import vue from '@vitejs/plugin-vue' -import path from 'node:path' - -export default defineConfig({ - plugins: [vue()], - // 构建产物由 bot 在 /learning_chat 路径下提供 - base: '/learning_chat/', - resolve: { - alias: { - '@': path.resolve(process.cwd(), 'src'), - }, - }, - server: { - port: 5173, - open: false, - host: '0.0.0.0', - // 开发模式下 API 请求转发到 bot 端口 - proxy: { - '/learning_chat/api': { - target: 'http://localhost:39697', - changeOrigin: true, - }, - }, - }, -}) \ No newline at end of file diff --git a/hexi/plugins/nonebot_plugin_learning_chat/web_api.py b/hexi/plugins/nonebot_plugin_learning_chat/web_api.py deleted file mode 100644 index d3cc8cf..0000000 --- a/hexi/plugins/nonebot_plugin_learning_chat/web_api.py +++ /dev/null @@ -1,369 +0,0 @@ -import datetime -from typing import Optional, Union - -from fastapi import FastAPI -from fastapi import Header, HTTPException, Depends -from fastapi.responses import JSONResponse, HTMLResponse, RedirectResponse -from jose import jwt -from nonebot import get_app, get_adapter, logger -from nonebot.adapters.onebot.v11 import Adapter -from pydantic import BaseModel -from sqlalchemy import select, delete, update, func - -try: - import jieba_fast as jieba -except ImportError: - import jieba - -from nonebot_plugin_orm import get_session -from .services.learn import LearningChat -from .models import ChatMessage, ChatContext, ChatAnswer, ChatBlackList -from .config import config_manager, driver -from .web_frontend import ensure_frontend_ready, mount_frontend - - -def authentication(): - def inner(token: Optional[str] = Header(...)): - try: - payload = jwt.decode(token, config_manager.config.web_secret_key, algorithms="HS256") - if ( - not (username := payload.get("username")) - or username != config_manager.config.web_username - ): - raise HTTPException(status_code=400, detail="登录验证失败或已失效,请重新登录") - except (jwt.JWTError, jwt.ExpiredSignatureError, AttributeError): - raise HTTPException(status_code=400, detail="登录验证失败或已失效,请重新登录") - - return Depends(inner) - - -class UserModel(BaseModel): - username: str - password: str - - -@driver.on_startup -async def init_web(): - if not config_manager.config.enable_web: - return - if not await ensure_frontend_ready(): - logger.warning("群聊学习 | 前端构建失败, 管理页面将不可用") - app: FastAPI = get_app() - - @app.post("/learning_chat/api/login", response_class=JSONResponse) - async def login(user: UserModel): - if ( - user.username != config_manager.config.web_username - or user.password != config_manager.config.web_password - ): - return {"status": -100, "msg": "登录失败,请确认用户ID和密码无误"} - token = jwt.encode( - { - "username": user.username, - "exp": datetime.datetime.now(datetime.timezone.utc) + datetime.timedelta(minutes=30), - }, - config_manager.config.web_secret_key, - algorithm="HS256", - ) - return {"status": 0, "msg": "登录成功", "data": {"token": token}} - - @app.options("/learning_chat/api/login") - async def options_login(): - return JSONResponse(content={}, status_code=200) - - @app.get("/learning_chat/api/get_group_list", response_class=JSONResponse, dependencies=[authentication()]) - async def get_group_list_api(): - try: - bots = get_adapter(Adapter).bots - if len(bots) == 0: - return {"status": -100, "msg": "获取群和好友列表失败,请确认已连接GOCQ"} - bot = list(bots.values())[0] - group_list = await bot.get_group_list() - group_list = [ - {"label": f'{group["group_name"]}({group["group_id"]})', "value": group["group_id"]} - for group in group_list - ] - return {"status": 0, "msg": "ok", "data": {"group_list": group_list}} - except ValueError: - return {"status": -100, "msg": "获取群和好友列表失败,请确认已连接GOCQ"} - - @app.options("/learning_chat/api/get_group_list") - async def options_get_group_list(): - return JSONResponse(content={}, status_code=200) - - @app.get("/learning_chat/api/chat_global_config", response_class=JSONResponse, dependencies=[authentication()]) - async def get_chat_global_config(): - # 注意: 不再注入 member_list —— 前端全局配置页不使用(仅分群配置需要, - # 由 chat_group_config 单独拉取单个群成员), 避免串行拉取全部群成员导致接口卡顿 - return config_manager.config.dict(exclude={"group_config"}) - - @app.post("/learning_chat/api/chat_global_config", response_class=JSONResponse, dependencies=[authentication()]) - async def post_chat_global_config(data: dict): - config_manager.config.update(**data) - config_manager.save() - async with get_session() as session: - await session.execute( - update(ChatContext) - .where(ChatContext.count > config_manager.config.learn_max_count) - .values(count=config_manager.config.learn_max_count) - ) - await session.execute( - update(ChatAnswer) - .where(ChatAnswer.count > config_manager.config.learn_max_count) - .values(count=config_manager.config.learn_max_count) - ) - await session.commit() - jieba.load_userdict(config_manager.config.dictionary) - return {"status": 0, "msg": "保存成功"} - - @app.options("/learning_chat/api/chat_global_config") - async def options_chat_global_config(): - return JSONResponse(content={}, status_code=200) - - @app.get("/learning_chat/api/chat_group_config", response_class=JSONResponse, dependencies=[authentication()]) - async def get_chat_group_config(group_id: int): - try: - bots = get_adapter(Adapter).bots - if len(bots) == 0: - return {"status": -100, "msg": "获取群和好友列表失败,请确认已连接GOCQ"} - bot = list(bots.values())[0] - members = await bot.get_group_member_list(group_id=group_id) - member_list = [ - {"label": f'{member["nickname"] or member["card"]}({member["user_id"]})', "value": member["user_id"]} - for member in members - ] - config = config_manager.get_group_config(group_id).dict() - config["break_probability"] = config["break_probability"] * 100 - config["speak_continuously_probability"] = config["speak_continuously_probability"] * 100 - config["speak_poke_probability"] = config["speak_poke_probability"] * 100 - config["member_list"] = member_list - return config - except ValueError: - return {"status": -100, "msg": "获取群和好友列表失败,请确认已连接GOCQ"} - - @app.post("/learning_chat/api/chat_group_config", response_class=JSONResponse, dependencies=[authentication()]) - async def post_chat_group_config(group_id: Union[int, str], data: dict): - if not data.get("answer_threshold_weights"): - return {"status": 400, "msg": "回复阈值权重不能为空,必须至少有一个数值"} - data["break_probability"] = data["break_probability"] / 100 - data["speak_continuously_probability"] = data["speak_continuously_probability"] / 100 - data["speak_poke_probability"] = data["speak_poke_probability"] / 100 - bots = get_adapter(Adapter).bots - if len(bots) == 0: - return {"status": -100, "msg": "获取群和好友列表失败,请确认已连接GOCQ"} - bot = list(bots.values())[0] - groups = ( - [{"group_id": group_id}] if group_id != "all" else await bot.get_group_list() - ) - for group in groups: - config = config_manager.get_group_config(int(group["group_id"])) - config.update(**data) - config_manager.config.group_config[int(group["group_id"])] = config - config_manager.save() - return {"status": 0, "msg": "保存成功"} - - @app.options("/learning_chat/api/chat_group_config") - async def options_chat_group_config(): - return JSONResponse(content={}, status_code=200) - - @app.get("/learning_chat/api/get_chat_messages", response_class=JSONResponse, dependencies=[authentication()]) - async def get_chat_messages( - page: int = 1, - perPage: int = 10, - orderBy: str = "time", - orderDir: str = "desc", - group_id: Optional[str] = None, - user_id: Optional[str] = None, - message: Optional[str] = None, - ): - async with get_session() as session: - stmt = select(ChatMessage) - if group_id: - stmt = stmt.where(ChatMessage.group_id == int(group_id)) - if user_id: - stmt = stmt.where(ChatMessage.user_id == int(user_id)) - if message: - stmt = stmt.where(ChatMessage.raw_message.contains(message)) - - order_col = getattr(ChatMessage, orderBy or "time", ChatMessage.time) - stmt = stmt.order_by(order_col.asc() if (orderDir or "desc") == "asc" else order_col.desc()) - - count_result = await session.execute(select(func.count()).select_from(stmt.subquery())) - total = count_result.scalar() - - items_result = await session.execute(stmt.offset((page - 1) * perPage).limit(perPage)) - items = [ - {c.name: getattr(row, c.name) for c in ChatMessage.__table__.columns} - for row in items_result.scalars().all() - ] - return {"status": 0, "msg": "ok", "data": {"items": items, "total": total}} - - @app.options("/learning_chat/api/get_chat_messages") - async def options_get_chat_messages(): - return JSONResponse(content={}, status_code=200) - - @app.get("/learning_chat/api/get_chat_contexts", response_class=JSONResponse, dependencies=[authentication()]) - async def get_chat_context( - page: int = 1, - perPage: int = 10, - orderBy: str = "time", - orderDir: str = "desc", - keywords: Optional[str] = None, - ): - async with get_session() as session: - stmt = select(ChatContext) - if keywords: - stmt = stmt.where(ChatContext.keywords.contains(keywords)) - order_col = getattr(ChatContext, orderBy or "time", ChatContext.time) - stmt = stmt.order_by(order_col.asc() if (orderDir or "desc") == "asc" else order_col.desc()) - - count_result = await session.execute(select(func.count()).select_from(stmt.subquery())) - total = count_result.scalar() - - items_result = await session.execute(stmt.offset((page - 1) * perPage).limit(perPage)) - items = [ - {c.name: getattr(row, c.name) for c in ChatContext.__table__.columns} - for row in items_result.scalars().all() - ] - return {"status": 0, "msg": "ok", "data": {"items": items, "total": total}} - - @app.options("/learning_chat/api/get_chat_contexts") - async def options_get_chat_contexts(): - return JSONResponse(content={}, status_code=200) - - @app.get("/learning_chat/api/get_chat_answers", response_class=JSONResponse, dependencies=[authentication()]) - async def get_chat_answers( - context_id: Optional[int] = None, - page: int = 1, - perPage: int = 10, - orderBy: str = "count", - orderDir: str = "desc", - keywords: Optional[str] = None, - ): - async with get_session() as session: - stmt = select(ChatAnswer) - if context_id: - stmt = stmt.where(ChatAnswer.context_id == context_id) - if keywords: - stmt = stmt.where(ChatAnswer.keywords.contains(keywords)) - order_col = getattr(ChatAnswer, orderBy or "count", ChatAnswer.count) - stmt = stmt.order_by(order_col.asc() if (orderDir or "desc") == "asc" else order_col.desc()) - - count_result = await session.execute(select(func.count()).select_from(stmt.subquery())) - total = count_result.scalar() - - items_result = await session.execute(stmt.offset((page - 1) * perPage).limit(perPage)) - items = [] - for row in items_result.scalars().all(): - item = {c.name: getattr(row, c.name) for c in ChatAnswer.__table__.columns} - item["messages"] = [{"msg": m} for m in item["messages"]] - items.append(item) - return {"status": 0, "msg": "ok", "data": {"items": items, "total": total}} - - @app.options("/learning_chat/api/get_chat_answers") - async def options_get_chat_answers(): - return JSONResponse(content={}, status_code=200) - - @app.get("/learning_chat/api/get_chat_blacklist", response_class=JSONResponse, dependencies=[authentication()]) - async def get_chat_blacklist( - page: int = 1, - perPage: int = 10, - keywords: Optional[str] = None, - bans: Optional[str] = None, - ): - async with get_session() as session: - stmt = select(ChatBlackList).order_by(ChatBlackList.id.desc()) - if keywords: - stmt = stmt.where(ChatBlackList.keywords.contains(keywords)) - - count_result = await session.execute(select(func.count()).select_from(stmt.subquery())) - total = count_result.scalar() - - # bans 过滤需要基于全部数据(而非当前页), 故先全量取回再过滤、再分页 - items_result = await session.execute(stmt) - items = [] - for row in items_result.scalars().all(): - item = {c.name: getattr(row, c.name) for c in ChatBlackList.__table__.columns} - ban_ids = item["ban_group_id"] or [] - item["bans"] = "全局禁用" if item["global_ban"] else (str(ban_ids[0]) if ban_ids else "") - items.append(item) - if bans: - items = [x for x in items if bans in x["bans"]] - total = len(items) - items = items[(page - 1) * perPage : page * perPage] - return {"status": 0, "msg": "ok", "data": {"items": items, "total": total}} - - @app.options("/learning_chat/api/get_chat_blacklist") - async def options_get_chat_blacklist(): - return JSONResponse(content={}, status_code=200) - - @app.delete("/learning_chat/api/delete_chat", response_class=JSONResponse, dependencies=[authentication()]) - async def delete_chat(id: int, type: str): - try: - async with get_session() as session: - if type == "message": - await session.execute(delete(ChatMessage).where(ChatMessage.id == id)) - elif type == "context": - await session.execute(delete(ChatAnswer).where(ChatAnswer.context_id == id)) - await session.execute(delete(ChatContext).where(ChatContext.id == id)) - elif type == "answer": - await session.execute(delete(ChatAnswer).where(ChatAnswer.id == id)) - elif type == "blacklist": - await session.execute(delete(ChatBlackList).where(ChatBlackList.id == id)) - await session.commit() - return {"status": 0, "msg": "删除成功"} - except Exception as e: - return {"status": 500, "msg": f"删除失败,{e}"} - - @app.options("/learning_chat/api/delete_chat") - async def options_delete_chat(): - return JSONResponse(content={}, status_code=200) - - @app.put("/learning_chat/api/ban_chat", response_class=JSONResponse, dependencies=[authentication()]) - async def ban_chat(id: int, type: str): - try: - async with get_session() as session: - if type == "message": - result = await session.execute(select(ChatMessage).where(ChatMessage.id == id)) - data = result.scalar_one() - elif type == "context": - result = await session.execute(select(ChatContext).where(ChatContext.id == id)) - data = result.scalar_one() - else: - result = await session.execute(select(ChatAnswer).where(ChatAnswer.id == id)) - data = result.scalar_one() - await LearningChat.add_ban(data) - return {"status": 0, "msg": "禁用成功"} - except Exception as e: - return {"status": 500, "msg": f"禁用失败: {e}"} - - @app.options("/learning_chat/api/ban_chat") - async def options_ban_chat(): - return JSONResponse(content={}, status_code=200) - - @app.put("/learning_chat/api/delete_all", response_class=JSONResponse, dependencies=[authentication()]) - async def delete_all(type: str, id: Optional[int] = None): - try: - async with get_session() as session: - if type == "answer": - if id: - await session.execute(delete(ChatAnswer).where(ChatAnswer.context_id == id)) - else: - await session.execute(delete(ChatAnswer)) - elif type == "blacklist": - await session.execute(delete(ChatBlackList)) - elif type == "context": - await session.execute(delete(ChatContext)) - elif type == "message": - await session.execute(delete(ChatMessage)) - await session.commit() - return {"status": 0, "msg": "操作成功"} - except Exception as e: - return {"status": 500, "msg": f"操作失败,{e}"} - - @app.options("/learning_chat/api/delete_all") - async def options_delete_all(): - return JSONResponse(content={}, status_code=200) - - # 静态资源挂载放在所有 API 路由之后, 保证 /learning_chat/api/* 优先匹配 - mount_frontend(app) \ No newline at end of file diff --git a/hexi/plugins/nonebot_plugin_learning_chat/web_frontend.py b/hexi/plugins/nonebot_plugin_learning_chat/web_frontend.py deleted file mode 100644 index a999ff6..0000000 --- a/hexi/plugins/nonebot_plugin_learning_chat/web_frontend.py +++ /dev/null @@ -1,99 +0,0 @@ -"""前端管理页面的构建与静态挂载。 - -方案: 不再由 bot 拉起 vite dev server, 而是把构建产物用 FastAPI StaticFiles -挂载到 bot 端口 /learning_chat 路径, 与 API 同源, 无孤儿进程、无 CORS 问题。 -前端开发时手动 `npm run dev` 即可(API 已配置 dev proxy)。 -""" - -import asyncio -from pathlib import Path - -from fastapi.responses import FileResponse -from fastapi.staticfiles import StaticFiles -from nonebot import logger - -BASE_DIR = Path(__file__).resolve().parent -ADMIN_DIR = BASE_DIR / "web" / "learning-chat-admin" -DIST_DIR = ADMIN_DIR / "dist" - -# 参与构建新鲜度检查的源文件(不在 src/ 下的) -SRC_FILES = ("vite.config.ts", "index.html", "package.json") - - -def _dist_is_stale() -> bool: - """dist/index.html 不存在, 或比任何源码旧时视为需要重建""" - dist_index = DIST_DIR / "index.html" - if not dist_index.exists(): - return True - dist_mtime = dist_index.stat().st_mtime - for src_file in (ADMIN_DIR / "src").rglob("*"): - if src_file.is_file() and src_file.stat().st_mtime > dist_mtime: - return True - return any( - (ADMIN_DIR / name).stat().st_mtime > dist_mtime - for name in SRC_FILES - if (ADMIN_DIR / name).exists() - ) - - -async def build_frontend() -> bool: - """执行 vite 构建, 返回是否成功""" - logger.info("群聊学习 | 前端源码已更新, 开始重新构建(约10-40秒)...") - proc = await asyncio.create_subprocess_exec( - "npx.cmd", - "vite", - "build", - cwd=str(ADMIN_DIR), - stdout=asyncio.subprocess.PIPE, - stderr=asyncio.subprocess.STDOUT, - ) - output, _ = await proc.communicate() - if proc.returncode != 0: - logger.error( - "群聊学习 | 前端构建失败(%s):\n%s", - proc.returncode, - output.decode(errors="ignore")[-3000:], - ) - return False - logger.info("群聊学习 | 前端构建完成") - return True - - -async def ensure_frontend_ready() -> bool: - """确保构建产物是最新的, 返回是否可用(最新或已成功重建)""" - if not _dist_is_stale(): - return True - return await build_frontend() - - -def mount_frontend(app) -> None: - """将构建产物挂载到 bot 端口的 /learning_chat 路径(需在 API 路由注册后调用)。 - - history 模式 SPA 需要回退: assets/ 静态挂载 + 真实文件直接返回, - 其余路径(如 /login /config 等前端路由)一律回退到 index.html。 - """ - if not DIST_DIR.exists(): - logger.error("群聊学习 | 前端构建产物不存在, 管理页面不可用") - return - assets_dir = DIST_DIR / "assets" - if assets_dir.exists(): - app.mount( - "/learning_chat/assets", - StaticFiles(directory=str(assets_dir)), - name="learning_chat_assets", - ) - dist_resolved = DIST_DIR.resolve() - - @app.get("/learning_chat/{full_path:path}") - async def learning_chat_spa(full_path: str): - target = (DIST_DIR / full_path).resolve() - if full_path and target.is_file() and target.is_relative_to(dist_resolved): - return FileResponse(target) - # SPA 回退: 前端路由(如 /login /config)全部交给 index.html - return FileResponse(DIST_DIR / "index.html") - - @app.get("/learning_chat") - async def learning_chat_root(): - return FileResponse(DIST_DIR / "index.html") - - logger.info("群聊学习 | 管理页面已挂载: http://:/learning_chat/") diff --git a/hexi/plugins/nonebot_plugin_learning_chat/web_hub.py b/hexi/plugins/nonebot_plugin_learning_chat/web_hub.py index d93e58c..60da3d9 100644 --- a/hexi/plugins/nonebot_plugin_learning_chat/web_hub.py +++ b/hexi/plugins/nonebot_plugin_learning_chat/web_hub.py @@ -2,7 +2,7 @@ """群聊学习 Web API 子应用(挂载到 /api/learning_chat)。 统一鉴权走 hexi.web_auth(OAuth2 + SQLite),与统一管理台 /hub 共用登录态。 -旧版独立后台 /learning_chat(JWT 自鉴权)保留可用,前端由 hub 渲染。 +前端由统一管理台 hexi/web 渲染。 """ from __future__ import annotations @@ -45,9 +45,6 @@ async def _first_bot(): def build_admin_app() -> FastAPI | None: """构建群聊学习管理 API 子应用(挂载到 /api/learning_chat)。""" - if not config_manager.config.enable_web: - return None - app = FastAPI(title="Learning Chat API") auth = API diff --git a/hexi/plugins/nonebot_plugin_random_jm_code/services/store.py b/hexi/plugins/nonebot_plugin_random_jm_code/services/store.py index 5ceac98..184ca52 100644 --- a/hexi/plugins/nonebot_plugin_random_jm_code/services/store.py +++ b/hexi/plugins/nonebot_plugin_random_jm_code/services/store.py @@ -72,3 +72,54 @@ async def add_new_jm_code(new_code: int) -> bool: JM_CODES.append(new_code) _safe_write_json(JM_CODES, FILE_PATH) return True + + +async def list_jm_codes() -> list[str]: + """读取全部 JM 码(Web 管理 / 导出用)。""" + await load_codes() + return list(JM_CODES) + + +async def remove_jm_code(code: str) -> bool: + """删除一个 JM 码;不存在返回 False。""" + await load_codes() + code = str(code).strip() + async with LOCK: + if code not in JM_CODES: + return False + JM_CODES.remove(code) + _safe_write_json(JM_CODES, FILE_PATH) + return True + + +def _ensure_loaded_sync() -> None: + """同步确保数据已载入(Web 配置读取/写入用,不走异步锁)。""" + global JM_CODES, _LOADED + if _LOADED: + return + _migrate_legacy() + if not FILE_PATH.exists(): + JM_CODES = [] + _safe_write_json(JM_CODES, FILE_PATH) + else: + try: + with open(FILE_PATH, "r", encoding="utf-8") as f: + JM_CODES = json.load(f) + except (json.JSONDecodeError, OSError): + JM_CODES = [] + _LOADED = True + + +def sync_get_jm_codes() -> list[str]: + """同步读取全部 JM 码(供通用配置项 getter)。""" + _ensure_loaded_sync() + return list(JM_CODES) + + +def sync_set_jm_codes(codes) -> None: + """同步写入全部 JM 码(供通用配置项 setter),并落盘到 jm_code.json。""" + global JM_CODES + _ensure_loaded_sync() + cleaned = [str(c).strip() for c in (codes or []) if str(c).strip()] + JM_CODES = cleaned + _safe_write_json(JM_CODES, FILE_PATH) diff --git a/hexi/web/src/index.css b/hexi/web/src/index.css index 5c9a4d5..164a29c 100644 --- a/hexi/web/src/index.css +++ b/hexi/web/src/index.css @@ -1,3 +1,16 @@ @import "tailwindcss"; @import "@heroui/styles"; body { margin: 0; } + +/* 页面切换动画:侧栏导航切换时内容淡入并轻微上移 */ +@keyframes hexi-page-enter { + from { opacity: 0; transform: translateY(8px); } + to { opacity: 1; transform: translateY(0); } +} +.hexi-page-enter { + animation: hexi-page-enter 0.28s ease-out; +} + +@media (prefers-reduced-motion: reduce) { + .hexi-page-enter { animation: none; } +}