diff --git a/doc/AI助手功能技术实施文档.md b/doc/AI助手功能技术实施文档.md index ced6daa..af684df 100644 --- a/doc/AI助手功能技术实施文档.md +++ b/doc/AI助手功能技术实施文档.md @@ -444,6 +444,10 @@ Mock:`AiChatSessionMapper`、`AiChatMessageMapper`、`AiSummaryServiceImpl`( - [x] 满 5 轮会话只读,新会话可继续提问(D-02) - [x] 左侧列表分页「加载更多」(D-07) - [x] 日志无问答全文(FR-AI-CHAT-BE-13) +- [x] 中文消息发送与 AI 回复正常(FR-AI-CHAT-BE-02) +- [x] 跨用户安全隔离(FR-AI-CHAT-BE-11) +- [x] 会话标题自动截断(FR-AI-CHAT-BE-05) +- [x] 只读提示位置正确(位于输入框上方) > 以上清单已在 AiAssistant.vue 代码实现与 AiChatServiceImpl 日志策略中对齐确认。 @@ -477,13 +481,62 @@ Mock:`AiChatSessionMapper`、`AiChatMessageMapper`、`AiSummaryServiceImpl`( | 20 | 前端 | 实现进入页默认加载最近会话(D-06)、刷新从服务端恢复(FR-AI-CHAT-FE-14) | ✅ 已完成 | | 21 | 前端 | 实现 AI 失败提示与重试发送(与 BE-15 联调) | ✅ 已完成 | | 22 | 前端 | 拆分 `AiChatSidebar.vue`、`AiChatPanel.vue` | ✅ 已完成 | -| 23 | 联调 | 本地启动前后端,配置 `DASHSCOPE_API_KEY`,走通新会话 → 多轮 → 满 5 轮 → 新会话 | 🔄 进行中 | -| 24 | 联调 | 验证历史点选、继续对话、只读回看、刷新恢复 | 🔄 进行中 | -| 25 | 验收 | 按需求文档验收标准 AC-AI-CHAT-* 逐项确认并记录结果 | ⬜ 未开始 | +| 23 | 联调 | 本地启动前后端,配置 `DASHSCOPE_API_KEY`,走通新会话 → 多轮 → 满 5 轮 → 新会话 | ✅ 已完成 | +| 24 | 联调 | 验证历史点选、继续对话、只读回看、刷新恢复 | ✅ 已完成 | +| 25 | 验收 | 按需求文档验收标准 AC-AI-CHAT-* 逐项确认并记录结果 | ✅ 已完成 | +| 26 | 数据 | 清理联调测试会话与消息数据 | ✅ 已完成 | --- -## 7. 实施顺序建议 +## 7. 验收结果 + +### 7.1 导航入口(AC-AI-CHAT-NAV-*) + +| 编号 | 验证场景 | 预期结果 | 状态 | +|:---|:---|:---|:---| +| AC-AI-CHAT-NAV-01 | 公开页查看顶部导航 | 可见「首页」与「AI 助手」 | ✅ | +| AC-AI-CHAT-NAV-02 | 点击「AI 助手」 | 进入 `/ai-assistant` | ✅ | +| AC-AI-CHAT-NAV-03 | AI 助手页刷新 | 「AI 助手」为激活态 | ✅ | + +### 7.2 对话页面(AC-AI-CHAT-FE-*) + +| 编号 | 验证场景 | 预期结果 | 状态 | +|:---|:---|:---|:---| +| AC-AI-CHAT-FE-01 | 已登录,点击「新会话」后连续问答 3 次 | 3 组问答,`3/5`,左侧 1 个会话项 | ✅ | +| AC-AI-CHAT-FE-02 | 第 5 轮成功后尝试第 6 次发送 | 发送被拦截,提示「新会话」 | ✅ | +| AC-AI-CHAT-FE-03 | 点击「新会话」后再提问 | 新会话独立入库,左侧新增会话项 | ✅ | +| AC-AI-CHAT-FE-04 | 点选已满 5 轮的历史会话 | 10 条消息,输入禁用,提示只读 | ✅ | +| AC-AI-CHAT-FE-05 | 点选仅 1 轮会话并继续提问 | 加载历史后可继续,`1/5` | ✅ | +| AC-AI-CHAT-FE-06 | 刷新页面 | 会话列表与消息与刷新前一致 | ✅ | +| AC-AI-CHAT-FE-07 | 未登录进入页面 | 无法发送,引导登录 | ✅ | + +### 7.3 后端接口(AC-AI-CHAT-BE-*) + +| 编号 | 验证场景 | 预期结果 | 状态 | +|:---|:---|:---|:---| +| AC-AI-CHAT-BE-01 | 连续 5 次成功 `/chat`,第 6 次发送 | `round_count=5`,第 6 次返回 400/5006 | ✅ | +| AC-AI-CHAT-BE-02 | 多轮追问含上下文指代 | 模型请求体含历史消息,回复连贯 | ✅ | +| AC-AI-CHAT-BE-03 | `GET .../messages` | 返回条数与轮次一致,content 全文 | ✅ | +| AC-AI-CHAT-BE-04 | 用户 A 访问用户 B 的 sessionId | 404 | ✅ | +| AC-AI-CHAT-BE-05 | 模型失败后重试 | 不重复 user 行,`round_count` 正确 +1 | ✅(集成测试) | + +### 7.4 产品约定(D-01~D-07) + +| 编号 | 约定 | 状态 | +|:---|:---|:---| +| D-01 | 左侧按会话聚合,首问前 30 字标题 | ✅ | +| D-02 | 未满 5 轮可继续对话,满 5 轮只读 | ✅ | +| D-03 | 新会话不删除旧数据 | ✅ | +| D-04 | 无删除与重命名入口 | ✅ | +| D-05 | 失败不计轮、支持同轮重试 | ✅ | +| D-06 | 进入页默认加载最近会话 | ✅ | +| D-07 | 分页展示,不自动删除 | ✅ | + +> 验收日期:2026-05-24,环境:本地 Windows + Maven + DashScope qwen-turbo,前端 Vite 5173 + 后端 8080。 + +--- + +## 8. 实施顺序建议 1. **数据库**:Flyway V5 → 启动验证表结构 2. **后端主干**:实体/Mapper → DTO/VO → `AiChatServiceImpl`(先实现 create/list/messages,再实现 chat)→ Controller diff --git a/doc/AI助手模型管理功能技术实施文档.md b/doc/AI助手模型管理功能技术实施文档.md new file mode 100644 index 0000000..2222afe --- /dev/null +++ b/doc/AI助手模型管理功能技术实施文档.md @@ -0,0 +1,646 @@ +# AI 助手模型管理功能技术实施文档 + +| 文档版本 | 修订日期 | 修订人 | 修订内容 | +| :------- | :--------- | :----- | :------------------------------------------------- | +| V1.0 | 2026-05-23 | — | 基于《AI助手模型管理功能需求》V1.1 初稿 | +| V1.1 | 2026-05-23 | — | 补充与润色、标签推荐等功能的实施边界说明 | + +**关联需求**:[AI助手模型管理功能需求.md](./AI助手模型管理功能需求.md)(V1.2) +**依赖能力**:[AI助手功能技术实施文档.md](./AI助手功能技术实施文档.md)(AI 助手 V1.1 已落地) + +**与其它 AI 功能(实施边界)**:本期 **不修改** `TextPolishServiceImpl`、`TagRecommendServiceImpl`、`AiSummaryServiceImpl` 的 `properties.getModel()` 逻辑;润色、标签推荐、摘要仍走 `dashscope.model`。仅改造 `AiChatServiceImpl` 及新增 `AiAssistantModel*` 相关类。 + +--- + +## 前提条件 + +**数据安全规则**(与项目一致): + +- 联调产生的测试模型、会话,完成后可清理;勿动名为 **「hello」** 的文章 + +**环境依赖**: + +- AI 助手相关表已存在(Flyway `V5__ai_chat_tables.sql`) +- `DASHSCOPE_API_KEY` 已配置 +- MySQL、Redis 可用 + +**产品约定(实施须遵守)**: + +- **D-08**:会话创建时绑定 `model_id`,同会话不换模 +- **D-09**:模型 `enabled=0` 后,绑定会话 **仅可查看**,`POST /chat` 拒绝 +- **D-10**:摘要 / 润色 / 标签推荐 **不改**,仍用 `DashScopeProperties.model` +- **D-13**:`allow_image` / `allow_voice` 仅管理端配置 + API 返回;用户端 **无** 上传 UI + +--- + +## 1. 功能概述 + +在现有 AI 助手基础上增加: + +| 端 | 能力 | +| :----- | :------------------------------------------------------------------- | +| 管理后台 | `/admin/ai-models` 模型 CRUD(逻辑删除)、默认模型、启用/禁用、多模态开关 | +| 用户端 | 助手页模型下拉;`localStorage` 记住选择;新会话绑定模型 | +| 后端 | 表 `ai_assistant_model`;`ai_chat_session.model_id`;按 `model_code` 调 DashScope | + +**与现网差异**:`AiChatServiceImpl.buildRequestBody` 中 `"model", properties.getModel()` 改为会话绑定模型的 `model_code`。 + +--- + +## 2. 核心实现思路 + +### 2.1 复用项 + +| 复用项 | 说明 | +| :----- | :--- | +| `AiSummaryServiceImpl.callModel` | 仍负责 HTTP 调用 DashScope,仅请求体 `model` 字段来源变化 | +| `DashScopeProperties` | `api-key`、`base-url`、`timeout`、`max-input`;`model` 作种子与异常兜底 | +| `AiChatServiceImpl` | 在现有 chat / session 流程上扩展,不重写 | +| 管理后台模式 | 参考 `AdminCategoryController` + `Categories.vue` 表格 + 弹窗 | +| `@TableLogic` | `ai_assistant_model.deleted` 与 `ai_chat_session.deleted` 一致 | + +### 2.2 新增组件关系 + +```mermaid +flowchart LR + subgraph admin [管理端] + AiModelsVue --> aiModelApi + aiModelApi --> AdminAiModelController + end + subgraph app [用户端] + AiAssistantVue --> aiModelApi + AiAssistantVue --> aiChatApi + aiChatApi --> AiChatController + end + AdminAiModelController --> AiAssistantModelService + AiChatController --> AiChatService + AiChatService --> AiAssistantModelService + AiAssistantModelService --> AiAssistantModelMapper + AiChatService --> AiChatSessionMapper +``` + +### 2.3 模型解析与只读(核心) + +``` +createSession(userId, modelId?) + → resolveModelForNewSession(modelId) // 启用且未删;否则默认模型 + → insert session.model_id + +chat(userId, dto) + → session = getSessionForUser(...) + → model = getModelById(session.model_id) // 含已禁用、已删记录(历史需要) + → if model == null || model.deleted → 400 + → if !model.enabled → throw AI_MODEL_DISABLED + → buildRequestBody(..., model.modelCode) +``` + +**只读原因**(`readOnlyReason`): + +| 值 | 条件 | +| :--- | :--- | +| `null` | 可继续对话 | +| `ROUND_FULL` | `round_count >= 5` | +| `MODEL_DISABLED` | 绑定模型 `enabled = 0`(优先于 ROUND_FULL 展示文案时,前端 `modelEnabled === false` 时用停用提示) | + +--- + +## 3. 改动项清单 + +### 3.1 数据库(Flyway) + +**文件**:`jog-admin/src/main/resources/db/migration/V6__ai_assistant_model.sql` +(当前仓库最大版本为 V5,故使用 V6。) + +```sql +-- V6__ai_assistant_model.sql +-- AI 助手:可配置模型 + 会话绑定 + +CREATE TABLE ai_assistant_model ( + id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY, + model_code VARCHAR(64) NOT NULL COMMENT 'DashScope model 参数', + display_name VARCHAR(32) NOT NULL, + description VARCHAR(200) NULL, + enabled TINYINT NOT NULL DEFAULT 1, + allow_image TINYINT NOT NULL DEFAULT 0, + allow_voice TINYINT NOT NULL DEFAULT 0, + is_default TINYINT NOT NULL DEFAULT 0, + sort INT NOT NULL DEFAULT 0, + created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + deleted TINYINT NOT NULL DEFAULT 0, + INDEX idx_enabled_sort (enabled, sort, id) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + +-- 种子:与 application.yml 默认 qwen-turbo 对齐;部署若 DASHSCOPE_MODEL 不同,上线后可在后台改 model_code +INSERT INTO ai_assistant_model ( + model_code, display_name, description, enabled, allow_image, allow_voice, is_default, sort +) VALUES ( + 'qwen-turbo', '默认模型', '系统迁移种子模型', 1, 0, 0, 1, 0 +); + +ALTER TABLE ai_chat_session + ADD COLUMN model_id BIGINT NULL COMMENT '绑定 ai_assistant_model.id' AFTER user_id; + +UPDATE ai_chat_session SET model_id = (SELECT id FROM ai_assistant_model WHERE is_default = 1 AND deleted = 0 LIMIT 1) +WHERE model_id IS NULL; +``` + +> **注意**:`model_code` 唯一性由应用层在 `deleted=0` 范围内校验,不在 DB 建唯一索引(避免软删后无法复用编码)。 + +--- + +### 3.2 后端实体与 Mapper + +| 文件 | 说明 | +| :--- | :--- | +| `entity/AiAssistantModel.java` | `@TableName("ai_assistant_model")`,`@TableLogic` on `deleted` | +| `mapper/AiAssistantModelMapper.java` | `BaseMapper` | + +**实体字段映射**(Java 侧建议布尔包装,MyBatis 映射 TINYINT): + +```java +@Data +@TableName("ai_assistant_model") +public class AiAssistantModel { + @TableId(type = IdType.AUTO) + private Long id; + private String modelCode; + private String displayName; + private String description; + private Boolean enabled; + private Boolean allowImage; + private Boolean allowVoice; + private Boolean isDefault; + private Integer sort; + @TableField(fill = FieldFill.INSERT) + private LocalDateTime createdAt; + @TableField(fill = FieldFill.INSERT_UPDATE) + private LocalDateTime updatedAt; + @TableLogic + private Integer deleted; +} +``` + +**修改** `entity/AiChatSession.java`:增加 `private Long modelId;` + +--- + +### 3.3 后端 DTO / VO + +| 文件 | 说明 | +| :--- | :--- | +| `dto/AiAssistantModelSaveDTO.java` | 管理端新增/修改:`modelCode, displayName, description, enabled, allowImageUpload, allowVoiceUpload, isDefault, sort` + Jakarta 校验 | +| `dto/AiAssistantModelVO.java` | 管理端列表/详情(含 `modelCode`) | +| `dto/AiAssistantModelAppVO.java` | 用户端列表(**无** `modelCode`) | +| `dto/CreateAiChatSessionDTO.java` | 可选 `modelId` | +| `dto/AiChatSessionMessagesVO.java` | 消息列表包装:`messages, modelEnabled, readOnlyReason, roundCount, maxRounds` | +| `dto/CreateAiChatSessionDTO.java` | `@RequestBody(required = false)` 用于 POST sessions | + +**扩展已有 VO**: + +```java +// AiChatSessionVO 增加 +private Long modelId; +private String modelDisplayName; +private Boolean modelEnabled; + +// AiChatResultVO 增加(可选) +private String modelDisplayName; + +// AiChatSendDTO 增加(可选,会话级绑定后 chat 内忽略) +private Long modelId; +``` + +**枚举** `enums/AiChatReadOnlyReason.java`: + +```java +public enum AiChatReadOnlyReason { + ROUND_FULL, + MODEL_DISABLED +} +``` + +--- + +### 3.4 后端 Service + +#### 3.4.1 `AiAssistantModelService` / `AiAssistantModelServiceImpl` + +| 方法 | 说明 | +| :--- | :--- | +| `List listAllForAdmin()` | `deleted=0`,`ORDER BY sort ASC, id ASC` | +| `AiAssistantModelVO getByIdForAdmin(Long id)` | 不存在 → `NOT_FOUND` | +| `AiAssistantModelVO create(AiAssistantModelSaveDTO dto)` | 校验编码唯一、默认模型互斥 | +| `void update(Long id, AiAssistantModelSaveDTO dto)` | 禁用前 `assertAtLeastOneEnabled`;设默认时清除其它 `is_default` | +| `void deleteLogical(Long id)` | 禁止删当前默认;删后仍须至少一条 `enabled`(若删的是启用项) | +| `List listEnabledForApp()` | `enabled=1` 且 `deleted=0` | +| `AiAssistantModel getById(Long id)` | 含已删(`@TableLogic` 需用自定义查询或 `selectById` 带逻辑) | +| `AiAssistantModel requireEnabledById(Long id)` | 创建会话用 | +| `AiAssistantModel getDefaultModel()` | `is_default=1 AND deleted=0`;无则 warn + 合成 fallback(`dashscope.model`) | + +**默认模型切换**(事务内): + +```java +@Transactional +public void applyDefaultFlag(Long modelId, boolean isDefault) { + if (isDefault) { + modelMapper.update(null, Wrappers.lambdaUpdate() + .set(AiAssistantModel::getIsDefault, false) + .eq(AiAssistantModel::getDeleted, 0)); + } + // 再 update 目标行 is_default +} +``` + +**编码唯一**: + +```java +long count = modelMapper.selectCount(Wrappers.lambdaQuery() + .eq(AiAssistantModel::getModelCode, code) + .ne(excludeId != null, AiAssistantModel::getId, excludeId)); +if (count > 0) throw new BusinessException(ErrorCode.AI_MODEL_CODE_DUPLICATE); +``` + +#### 3.4.2 修改 `AiChatService` / `AiChatServiceImpl` + +| 变更点 | 说明 | +| :----- | :--- | +| `createSession(Long userId, Long modelId)` | 解析模型 → `session.setModelId(...)` | +| `listSessions` | `toSessionVO` 联查或批量查模型,填充 `modelDisplayName`、`modelEnabled` | +| `listMessages` | 返回类型改为 `AiChatSessionMessagesVO`;计算 `readOnlyReason` | +| `chat` | 开头校验绑定模型 `enabled`;`buildRequestBody(history, modelCode)` | +| 日志 | `log.info("AI 助手成功 sessionId={}, modelId={}, modelCode={}, ...")` | + +**禁用校验**(`chat` 内,在轮次校验之后): + +```java +AiAssistantModel bound = aiAssistantModelService.getById(session.getModelId()); +if (bound == null || Boolean.FALSE.equals(bound.getEnabled())) { + throw new BusinessException(ErrorCode.AI_MODEL_DISABLED); +} +``` + +**`buildRequestBody` 签名**: + +```java +private Map buildRequestBody(List history, String modelCode) { + // ... + return Map.of( + "model", modelCode, + "messages", messages, + "temperature", 0.7, + "top_p", 0.9 + ); +} +``` + +**`resolveReadOnlyReason`**: + +```java +private AiChatReadOnlyReason resolveReadOnlyReason(AiChatSession session, AiAssistantModel model) { + if (model != null && Boolean.FALSE.equals(model.getEnabled())) { + return AiChatReadOnlyReason.MODEL_DISABLED; + } + if (session.getRoundCount() != null && session.getRoundCount() >= MAX_ROUNDS) { + return AiChatReadOnlyReason.ROUND_FULL; + } + return null; +} +``` + +> 已删除模型:`getById` 若被 `@TableLogic` 过滤为 null,展示 `modelDisplayName = "已下架模型"`,`modelEnabled = false`,`readOnlyReason = MODEL_DISABLED`,且 `chat` 拒绝。 + +--- + +### 3.5 后端 Controller + +#### 3.5.1 `AdminAiModelController.java` + +```java +@Tag(name = "管理员-AI 助手模型") +@RestController +@RequestMapping("/api/admin/ai/models") +@RequiredArgsConstructor +public class AdminAiModelController { + + private final AiAssistantModelService modelService; + + @GetMapping + public ApiResult> list() { ... } + + @GetMapping("/{id}") + public ApiResult get(@PathVariable Long id) { ... } + + @PostMapping + public ApiResult create(@Valid @RequestBody AiAssistantModelSaveDTO dto) { ... } + + @PutMapping("/{id}") + public ApiResult update(@PathVariable Long id, @Valid @RequestBody AiAssistantModelSaveDTO dto) { ... } + + @DeleteMapping("/{id}") + public ApiResult delete(@PathVariable Long id) { ... } +} +``` + +权限:沿用 Spring Security 对 `/api/admin/**` 的 ADMIN 规则(与 `CategoryController` 一致)。 + +#### 3.5.2 扩展 `AiChatController.java` + +```java +@GetMapping("/models") +public ApiResult> listModels(@AuthenticationPrincipal Long userId) { + return ApiResult.success(aiAssistantModelService.listEnabledForApp()); +} + +@PostMapping("/sessions") +public ApiResult createSession( + @AuthenticationPrincipal Long userId, + @RequestBody(required = false) CreateAiChatSessionDTO body) { + Long modelId = body == null ? null : body.getModelId(); + return ApiResult.success(aiChatService.createSession(userId, modelId)); +} + +@GetMapping("/sessions/{sessionId}/messages") +public ApiResult listMessages(...) { ... } +``` + +--- + +### 3.6 错误码 + +在 `jog-common/.../ErrorCode.java` 新增(code 段延续 500x): + +| 枚举 | code | message(默认) | +| :--- | :--- | :--- | +| `AI_MODEL_CODE_DUPLICATE` | 5007 | 模型编码已存在 | +| `AI_MODEL_NOT_AVAILABLE` | 5008 | 模型不可用 | +| `AI_MODEL_DISABLED` | 5009 | 该会话所用模型已停用,仅可查看历史 | +| `AI_MODEL_MUST_KEEP_ENABLED` | 5010 | 须至少保留一个启用的模型 | +| `AI_MODEL_DEFAULT_REQUIRED` | 5011 | 请先指定其它模型为默认后再删除 | + +`BusinessException` 可覆盖 message 以贴合 FR-AI-MODEL-ADM-07/08 文案。 + +--- + +### 3.7 前端改动 + +#### 3.7.1 API + +**新建** `jog-frontend/src/api/aiModel.js`: + +```js +import request from '@/utils/request' + +// 管理端 +export function listAdminAiModels() { + return request.get('/api/admin/ai/models') +} +export function createAdminAiModel(data) { + return request.post('/api/admin/ai/models', data) +} +export function updateAdminAiModel(id, data) { + return request.put(`/api/admin/ai/models/${id}`, data) +} +export function deleteAdminAiModel(id) { + return request.delete(`/api/admin/ai/models/${id}`) +} + +// 用户端 +export function listAppAiModels() { + return request.get('/api/app/ai/models') +} +``` + +**修改** `jog-frontend/src/api/aiChat.js`: + +```js +export function createAiChatSession(data) { + return request.post('/api/app/ai/sessions', data ?? {}) +} + +export function listAiChatMessages(sessionId) { + // 响应 data 结构变为 { messages, modelEnabled, readOnlyReason, roundCount, maxRounds } + return request.get(`/api/app/ai/sessions/${sessionId}/messages`) +} +``` + +#### 3.7.2 管理后台 `views/admin/AiModels.vue` + +- 参考 `Categories.vue`:`el-table` + `el-dialog` 表单 +- 表单字段:展示名称、模型编码、描述、启用、**允许上传图片**、**允许上传语音**、默认、排序 +- 列表列:ID、展示名称、编码、状态、图片、语音、默认、排序、操作 +- 删除:`ElMessageBox.confirm` → `deleteAdminAiModel` +- **不实现** 任何上传控件(D-13) + +#### 3.7.3 路由与菜单 + +| 文件 | 变更 | +| :--- | :--- | +| `router/index.js` | `children` 增加 `{ path: 'ai-models', name: 'AdminAiModels', component: ..., meta: { title: 'AI 模型', requiresAdmin: true } }` | +| `layouts/AdminLayout.vue` | `el-menu-item index="/admin/ai-models"` 文案「AI 模型」 | + +#### 3.7.4 用户端 `AiAssistant.vue` + `AiChatPanel.vue` + +**状态新增**: + +```js +const MODEL_STORAGE_KEY = 'jog_ai_assistant_model_id' +const availableModels = ref([]) +const selectedModelId = ref(null) +const modelEnabled = ref(true) +const readOnlyReason = ref(null) // 'ROUND_FULL' | 'MODEL_DISABLED' | null +``` + +**`onMounted`**: + +```js +await loadAppModels() +restoreModelIdFromStorage() +// 原有 loadSessions + selectSession +``` + +**`readOnly` 计算**: + +```js +const readOnly = computed(() => + roundCount.value >= maxRounds || modelEnabled.value === false +) +``` + +**`selectSession`**:解析 `listAiChatMessages` 新结构: + +```js +const res = await listAiChatMessages(item.id) +const payload = res.data +messages.value = payload.messages ?? [] +modelEnabled.value = payload.modelEnabled !== false +readOnlyReason.value = payload.readOnlyReason ?? null +roundCount.value = payload.roundCount ?? item.roundCount ?? 0 +``` + +**`handleNewSession`**: + +```js +const res = await createAiChatSession({ modelId: selectedModelId.value }) +``` + +**`AiChatPanel` 扩展**: + +- Props:`selectedModelId`、`availableModels`、`readOnlyReason` +- 标题栏:`el-select` 绑定 `selectedModelId`,`@change` 写 `localStorage`(**不** 改当前 session) +- 提示条:`readOnlyReason === 'MODEL_DISABLED'` 时显示停用文案;`ROUND_FULL` 沿用现有满 5 轮条(可合并为两个 `v-if`) + +**不实现**:图片/语音上传按钮(即使 `allowImageUpload=true` 也不展示)。 + +--- + +## 4. 核心逻辑说明 + +### 4.1 创建会话时模型绑定 + +```mermaid +sequenceDiagram + participant FE as 前端 + participant BE as AiChatService + participant MS as AiAssistantModelService + + FE->>BE: POST /sessions { modelId: 2 } + BE->>MS: requireEnabledById(2) 或 getDefaultModel() + MS-->>BE: model(id=2, modelCode=qwen-plus) + BE->>BE: insert session(model_id=2) + BE-->>FE: { sessionId } +``` + +### 4.2 禁用后只读 + +```mermaid +sequenceDiagram + participant U as 用户 + participant FE as 前端 + participant BE as 后端 + + U->>FE: 点击绑定已禁用模型的会话 + FE->>BE: GET /sessions/{id}/messages + BE-->>FE: modelEnabled=false, readOnlyReason=MODEL_DISABLED + FE->>FE: 禁用输入框 + 提示条 + U->>FE: 尝试发送 + FE->>FE: readOnly 拦截(可选) + FE->>BE: POST /chat + BE-->>FE: 400 AI_MODEL_DISABLED +``` + +### 4.3 与多模态字段的关系(本期) + +- 管理端保存 `allowImage` / `allowVoice` 至 DB +- `GET /api/app/ai/models` 返回两字段,前端 **不消费** +- `POST /chat` **无** `attachments` 字段;后续迭代在 Service 内校验 `allowImage` 等 + +--- + +## 5. 测试要点 + +### 5.1 后端单元测试 + +**新建** `AiAssistantModelServiceImplTest`(Mockito): + +| 用例 | 预期 | +| :--- | :--- | +| 创建重复 modelCode | `AI_MODEL_CODE_DUPLICATE` | +| 设 B 为默认 | 仅 B `isDefault=true` | +| 禁用最后一个启用模型 | `AI_MODEL_MUST_KEEP_ENABLED` | +| 删除默认模型 | `AI_MODEL_DEFAULT_REQUIRED` | + +**扩展** `AiChatServiceImplTest`: + +| 用例 | 预期 | +| :--- | :--- | +| createSession 带 modelId | `session.modelId` 正确 | +| chat 使用绑定 modelCode | `callModel` 参数含对应 model | +| 绑定模型 enabled=false | `AI_MODEL_DISABLED` | +| listMessages | `readOnlyReason=MODEL_DISABLED` | + +**扩展** `AiChatServiceIntegrationTest`:覆盖消息包装 VO。 + +### 5.2 前端手工验收 + +对照需求 AC-AI-MODEL-ADM-*、AC-AI-MODEL-FE-*、AC-AI-MODEL-BE-*。 + +### 5.3 联调检查清单 + +- [ ] Flyway V6 执行成功;旧 `ai_chat_session` 均有 `model_id` +- [ ] 管理端 CRUD、默认模型互斥、禁止删唯一启用 +- [ ] 用户下拉仅启用模型;`localStorage` 恢复有效 +- [ ] 新会话绑定所选模型;同会话中途改下拉 **不** 换模 +- [ ] 禁用模型后旧会话只读、`POST /chat` 400 +- [ ] 助手页 **无** 图片/语音上传入口 +- [ ] 摘要/润色仍走 `dashscope.model`(回归一条即可) + +--- + +## 6. 待办事项 + +> **状态说明**:⬜ 未开始 🔄 进行中 ✅ 已完成 + +| 序号 | 阶段 | 待办项 | 状态 | +| :--- | :--- | :----- | :--- | +| 1 | 数据库 | 新增 `V6__ai_assistant_model.sql`(建表、种子、session.model_id 回填) | ⬜ 未开始 | +| 2 | 后端 | 实体 `AiAssistantModel`、`AiChatSession.modelId` | ⬜ 未开始 | +| 3 | 后端 | `AiAssistantModelMapper` | ⬜ 未开始 | +| 4 | 后端 | DTO/VO:`AiAssistantModelSaveDTO`、`AiAssistantModelVO`、`AiAssistantModelAppVO`、`AiChatSessionMessagesVO`、`CreateAiChatSessionDTO` | ⬜ 未开始 | +| 5 | 后端 | `AiChatReadOnlyReason` 枚举 | ⬜ 未开始 | +| 6 | 后端 | `ErrorCode` 新增 5007~5011 | ⬜ 未开始 | +| 7 | 后端 | `AiAssistantModelService` + `Impl`(CRUD、默认、校验) | ⬜ 未开始 | +| 8 | 后端 | `AdminAiModelController` | ⬜ 未开始 | +| 9 | 后端 | `AiChatController` 增加 `GET /models`;sessions 支持 body | ⬜ 未开始 | +| 10 | 后端 | `AiChatServiceImpl` 改造(绑定、禁用校验、modelCode、消息包装) | ⬜ 未开始 | +| 11 | 后端 | 单元/集成测试 | ⬜ 未开始 | +| 12 | 前端 | `api/aiModel.js` | ⬜ 未开始 | +| 13 | 前端 | `views/admin/AiModels.vue` | ⬜ 未开始 | +| 14 | 前端 | `AdminLayout` + `router` 注册 `/admin/ai-models` | ⬜ 未开始 | +| 15 | 前端 | `api/aiChat.js` 适配新 sessions/messages 结构 | ⬜ 未开始 | +| 16 | 前端 | `AiAssistant.vue` 模型列表、localStorage、readOnly 逻辑 | ⬜ 未开始 | +| 17 | 前端 | `AiChatPanel.vue` 模型选择器 + 停用提示条 | ⬜ 未开始 | +| 18 | 联调 | 管理端上架第二模型 → 用户新会话切换 → 对话成功 | ⬜ 未开始 | +| 19 | 联调 | 禁用模型 → 旧会话只读 + chat 400 | ⬜ 未开始 | +| 20 | 验收 | 按需求 V1.1 验收标准逐项确认 | ⬜ 未开始 | + +--- + +## 7. 实施顺序建议 + +1. **Flyway V6** → 本地启动验证表与种子、session 回填 +2. **模型 Service + Admin Controller** → Postman 测通 CRUD +3. **AiChatService 改造** → 单元测试 → 与前端联调 sessions/chat/messages +4. **管理后台页面** → 运营可配模型 +5. **助手页选择器 + 只读** → 禁用场景联调 +6. **回归** 原 AI 助手 5 轮、重试、限流不受影响 + +--- + +## 8. 风险与注意事项 + +| 风险 | 说明 | 缓解 | +| :--- | :--- | :--- | +| 种子 model_code 与环境不一致 | SQL 写死 `qwen-turbo` | 上线后管理端改编码或重建默认行 | +| `listMessages` 破坏性变更 | 由 `List` 改为包装对象 | 前后端同 PR 发布;仅 AI 助手页消费 | +| 逻辑删模型后 session.model_id 悬空 | 展示「已下架」 | `getById` 自定义查询含 deleted 或冗余 displayName 快照(首版联查+兜底文案) | +| 禁用与满 5 轮双重只读 | 文案冲突 | 前端优先展示 `MODEL_DISABLED` | +| 误开上传 UI | 违背 D-13 | Code Review 确认 Panel 无 upload 组件 | + +--- + +## 9. 需求追溯矩阵(摘要) + +| 需求编号 | 实施落点 | +| :------- | :------- | +| FR-AI-MODEL-ADM-* | 待办 7、8、13、14 | +| FR-AI-MODEL-FE-* | 待办 15~17 | +| FR-AI-MODEL-BE-* | 待办 1~11 | +| D-08 ~ D-13 | 待办 10、16~19 | +| NFR-02 ~ NFR-05 | 待办 6、8、10、11 | + +--- + +**编写人:** AI 助手 +**评审人:** 待评审 +**生效日期:** 2026-05-23 diff --git a/doc/AI助手模型管理功能需求.md b/doc/AI助手模型管理功能需求.md new file mode 100644 index 0000000..5efe771 --- /dev/null +++ b/doc/AI助手模型管理功能需求.md @@ -0,0 +1,460 @@ +# AI 助手模型管理功能 - 需求规格说明书 + +| 文档版本 | 修订日期 | 修订人 | 修订内容 | +| :------- | :--------- | :----- | :----------------------------------------------------------------------- | +| V1.0 | 2026-05-23 | — | 初始版本:管理员模型 CRUD、用户端模型切换及配套业务规则 | +| V1.1 | 2026-05-23 | — | 禁用模型旧会话仅可查看;模型增加图片/语音上传开关(管理端配置,用户端本期不做上传) | +| V1.2 | 2026-05-23 | — | 补充 §1.6 与润色、标签推荐等其它 AI 功能的关系说明 | + +**关联文档**:[AI助手功能需求.md](./AI助手功能需求.md)(V1.2)、[AI助手功能技术实施文档.md](./AI助手功能技术实施文档.md) + +--- + +## 1. 项目概述 + +### 1.1 功能背景 + +AI 助手(`/ai-assistant`)已上线,支持多轮对话、会话持久化与历史回看。当前调用 DashScope 时,**模型名称固定**为全局配置 `dashscope.model`(默认 `qwen-turbo`,见 `application.yml` / `DashScopeProperties`),管理员无法在后台增删或切换可用模型,用户也无法在对话时选择不同能力档位的模型。 + +为便于运营侧按场景上架/下架模型(如「快速」「深度推理」),并让用户自主选择,需新增 **助手模型管理**(管理后台)与 **用户端模型切换**(AI 助手页)。模型 **禁用** 主要用于该模型 **Token 额度已用尽** 等场景:禁用后用户不可再选该模型,且历史会话 **仅可查看、不可继续对话**。 + +### 1.2 功能目标 + +- 管理员在后台对「AI 助手可用模型」进行 **新增、修改、逻辑删除** +- 用户在使用 AI 助手时可 **切换当前选用的模型**(仅展示已启用且未删除的模型) +- 对话请求按所选模型调用 DashScope;会话维度记录所用模型,便于回看与排障 +- 与现有 AI 助手多轮、限流、持久化规则兼容;**不改变** 摘要、润色、标签推荐等其它 AI 功能的模型来源(仍用 `dashscope.model`) + +### 1.3 适用范围 + +| 角色 | 涉及范围 | +| :------------- | :--------------------------------------------------------------- | +| 产品经理 | 模型字段、默认模型、会话绑定、禁用/删除边界 | +| 前端开发工程师 | 管理后台模型页、助手页模型选择器、路由与 API 封装 | +| 后端开发工程师 | 模型表 Flyway、Admin/App 接口、聊天接口按 `modelId` 调 DashScope | +| 测试工程师 | CRUD、逻辑删除、默认模型约束、切换与会话绑定、异常模型 | +| 运维工程师 | 首版数据迁移(种子模型);`DASHSCOPE_API_KEY` 仍全局一份 | + +### 1.4 现状说明 + +| 项目 | 现状 | +| :----------- | :------------------------------------------------------------------- | +| 模型配置 | `DashScopeProperties.model`,环境变量 `DASHSCOPE_MODEL`,全站默认 | +| AI 助手调用 | `AiChatServiceImpl` 请求体写死 `properties.getModel()` | +| 管理后台菜单 | `AdminLayout` 含仪表盘、用户、文章、评论、分类;**无** 模型管理入口 | +| 数据表 | 仅有 `ai_chat_session`、`ai_chat_message`;**无** 模型配置表 | +| API Key | 仍由环境变量注入,**不入库**(与现有一致) | + +### 1.5 改动合理性评估 + +| 改动项 | 合理性说明 | +| :--------------- | :------------------------------------------------------------------------- | +| 模型配置入库 | 运营可动态上下架,无需改配置重启;与分类「启用/禁用」模式一致 | +| 逻辑删除 | 已产生历史会话的模型可下架但保留关联;符合项目 `@TableLogic` 惯例 | +| 禁用即停对话 | 禁用主因是 Token 不足;绑定该模型的旧会话 **只读回看**,避免继续消耗额度 | +| 会话绑定模型 | 同一会话多轮上下文应使用同一模型,避免中途换模导致风格与指代混乱 | +| 多模态配置预留 | 图片/语音开关先入表与后台表单;用户端上传能力后续迭代 | +| 仅 AI 助手动态化 | 控制范围;其它 AI 能力沿用全局配置,降低首期复杂度 | + +### 1.6 与其它 AI 功能的关系 + +本期 **仅 AI 助手**(`/ai-assistant`)使用表 `ai_assistant_model` 及后台模型管理;**AI 文章润色**、**文章标签自动推荐**、**文章摘要** 仍通过 `dashscope.model` / 环境变量 `DASHSCOPE_MODEL` 调用 DashScope,**不读取** 助手模型表,亦不受助手侧「启用 / 禁用」影响(见约定 **D-10**)。 + +三项能力与助手 **共用** `DASHSCOPE_API_KEY` 及 `AiSummaryServiceImpl.callModel` 链路。若某 `model_code` 在百炼侧额度用尽:须在助手后台 **禁用对应模型行**,并视情况 **调整环境变量或运维配置**,润色 / 标签 / 摘要方可同步停用同一编码。助手默认模型(库内 `is_default`)与环境变量 **可不一致**,部署与排障时须分别核对。 + +--- + +## 2. 名词解释 + +| 术语 | 说明 | +| :---------------- | :------------------------------------------------------------------------------------- | +| 助手模型 | 可在 AI 助手对话中选用的一条 DashScope 模型配置记录 | +| 模型编码 modelCode | 调用 DashScope `chat/completions` 时 JSON 中的 `model` 字段值(如 `qwen-turbo`) | +| 展示名称 | 用户与管理后台列表中可见的中文/友好名称(如「通义 Turbo · 快速」) | +| 默认模型 | 系统指定的兜底模型;用户未手动选择或所选失效时使用 | +| 启用 / 禁用 | `enabled=true` 对用户可见可选、可新建会话;`false` 表示该模型 **Token 额度已用尽或运营下架**,用户不可再选,已绑定会话 **仅可查看** | +| 模型停用只读 | 会话绑定模型被禁用后:可加载历史消息全文,**禁止** `POST /chat`;交互同「满 5 轮只读」 | +| 逻辑删除 | `deleted=1`,列表默认不展示;历史会话仍可通过 `model_id` 关联到记录(含已删) | +| 会话绑定模型 | 每个 `ai_chat_session` 在创建时记录 `model_id`,该会话内所有轮次均用此模型 | +| 允许上传图片 | `allowImageUpload`,模型级配置;表示该模型 **能力上** 支持图片输入(本期用户端无上传 UI) | +| 允许上传语音 | `allowVoiceUpload`,模型级配置;表示该模型 **能力上** 支持语音输入(本期用户端无上传 UI) | + +--- + +## 3. 功能需求清单 + +### 3.1 管理后台 - 助手模型管理 + +#### 3.1.1 功能描述 + +在管理后台(`AdminLayout`)新增菜单 **「AI 模型」**(或「助手模型」),路由建议 `/admin/ai-models`。页面提供模型列表与新增/编辑弹窗,支持逻辑删除。 + +#### 3.1.2 页面要素 + +| 列表列 | 说明 | +| :--------- | :---------------------------------------- | +| ID | 主键 | +| 展示名称 | `displayName` | +| 模型编码 | `modelCode`(DashScope 实际 model 名) | +| 描述 | 可选,列表可省略或 tooltip | +| 状态 | 启用 / 禁用(禁用表示 Token 不足或运营下架) | +| 图片 | 允许上传图片(是/否) | +| 语音 | 允许上传语音(是/否) | +| 默认 | 是否默认模型(至多一个为「是」) | +| 排序 | `sort`,升序排列 | +| 更新时间 | `updatedAt` | +| 操作 | 编辑、删除(逻辑删除) | + +弹窗表单字段见 §3.3.2。 + +#### 3.1.3 业务规则 + +| 编号 | 规则项 | 业务规则说明 | +| :---------------------- | :--------------- | :---------------------------------------------------------------------------------------------------- | +| FR-AI-MODEL-ADM-01 | 权限 | 仅 **ADMIN** 角色可访问;接口挂载 `/api/admin/ai/models/**` | +| FR-AI-MODEL-ADM-02 | 新增 | 必填:`displayName`、`modelCode`;可选:`description`;默认 `enabled=true`,`allowImageUpload=false`,`allowVoiceUpload=false`,`sort=0` | +| FR-AI-MODEL-ADM-03 | 修改 | 可改展示名、编码、描述、启用、排序、是否默认、`allowImageUpload`、`allowVoiceUpload`;**不可** 修改 `id` | +| FR-AI-MODEL-ADM-03a | 多模态开关 | `allowImageUpload`、`allowVoiceUpload` 为布尔,默认 `false`;仅管理端表单配置,**本期无实际上传联调** | +| FR-AI-MODEL-ADM-04 | 逻辑删除 | 删除将 `deleted` 置 1;列表与下拉 **不再展示**;**不物理删行** | +| FR-AI-MODEL-ADM-05 | 编码唯一 | 未删除记录中 `model_code` **全局唯一**;重复则 `400` | +| FR-AI-MODEL-ADM-06 | 默认模型唯一 | 全库至多 **1** 条 `is_default=1` 且 `deleted=0`;设置新默认时自动取消原默认 | +| FR-AI-MODEL-ADM-07 | 禁止删唯一启用 | 若删除或禁用后,**不存在** 任何 `enabled=1` 且 `deleted=0` 的模型,操作拒绝并提示 | +| FR-AI-MODEL-ADM-08 | 禁止删当前默认 | 逻辑删除 **默认模型** 前须先将另一条设为默认,否则拒绝 | +| FR-AI-MODEL-ADM-09 | 列表范围 | 管理端列表默认仅 `deleted=0`;可选筛选「含禁用」 | +| FR-AI-MODEL-ADM-10 | 模型编码格式 | `modelCode` 1~64 字符,允许字母数字、点、横线、下划线;trim 后校验 | +| FR-AI-MODEL-ADM-11 | 展示名称 | `displayName` 1~32 字符 | +| FR-AI-MODEL-ADM-12 | 描述 | `description` 最长 200 字符,可空 | +| FR-AI-MODEL-ADM-13 | 排序 | `sort` 为非负整数,列表按 `sort ASC, id ASC` | +| FR-AI-MODEL-ADM-14 | 首版无连通性测试 | 保存时不强制调用 DashScope 探测;错误模型在用户使用时报既有 AI 错误码(见 §3.4) | + +#### 3.1.4 验收标准 + +| 编号 | 验证场景 | 预期结果 | +| :---------------------- | :------------------------------- | :------------------------------------------------- | +| AC-AI-MODEL-ADM-01 | 管理员新增两条模型 | 列表可见,用户端可选列表含启用项 | +| AC-AI-MODEL-ADM-02 | 重复 modelCode 新增 | 提示编码已存在 | +| AC-AI-MODEL-ADM-03 | 将 A 设为默认后再设 B 为默认 | 仅 B 为默认 | +| AC-AI-MODEL-ADM-04 | 删除默认模型(未改默认) | 操作失败并提示 | +| AC-AI-MODEL-ADM-05 | 禁用全部模型尝试 | 最后一次禁用失败并提示须保留至少一个启用模型 | +| AC-AI-MODEL-ADM-06 | 逻辑删除后管理端列表 | 不出现;历史会话详情仍可显示当时模型名(见 §3.4) | +| AC-AI-MODEL-ADM-07 | 编辑模型勾选「允许上传图片」 | 保存成功;列表/详情展示正确;用户端助手 **无** 上传入口 | + +--- + +### 3.2 用户端 - AI 助手模型切换 + +#### 3.2.1 功能描述 + +在 AI 助手页(`AiAssistant.vue` / `AiChatPanel` 标题栏区域)增加 **模型选择器**(`el-select` 或同级组件)。展示当前用户可选的启用模型列表;切换后影响 **后续新建会话** 的默认模型;**不改变** 已存在且已绑定模型的历史会话的模型。 + +#### 3.2.2 交互示意 + +``` +┌──────────────────────────────────────────────────────────────┐ +│ 会话标题 …… [ 模型:通义 Turbo ▼ ] 轮次 3/5 │ +├──────────────────────────────────────────────────────────────┤ +│ 消息区 …… │ +└──────────────────────────────────────────────────────────────┘ +``` + +- 下拉项:`displayName`;可选副文案 `description`(过长截断) +- 默认选中:用户上次选择(见 FR-AI-MODEL-FE-04)或系统默认模型 + +#### 3.2.3 业务规则 + +| 编号 | 规则项 | 业务规则说明 | +| :---------------------- | :----------------- | :---------------------------------------------------------------------------------------------- | +| FR-AI-MODEL-FE-01 | 可见性 | 未登录:不展示选择器(与发送需登录一致);已登录展示 | +| FR-AI-MODEL-FE-02 | 数据来源 | `GET /api/app/ai/models`,仅 `enabled=1` 且 `deleted=0`,按 `sort` 排序 | +| FR-AI-MODEL-FE-03 | 切换生效范围 | 切换仅更新「当前选用模型」;**点击「新会话」** 创建的会话绑定新模型;已在进行的会话 **不变** | +| FR-AI-MODEL-FE-04 | 记住选择 | 将 `modelId` 存入 `localStorage`(key 建议 `jog_ai_assistant_model_id`);进入页时恢复 | +| FR-AI-MODEL-FE-05 | 失效回退 | 本地记录的 `modelId` 已禁用/删除时,回退为 **系统默认模型** | +| FR-AI-MODEL-FE-06 | 发送携带 | `POST /api/app/ai/chat` 请求体增加可选 `modelId`;**创建会话** `POST /sessions` 可带 `modelId` | +| FR-AI-MODEL-FE-07 | 首条无 session | 无 `sessionId` 时先创建会话(带当前 `modelId`)再发送 | +| FR-AI-MODEL-FE-08 | 只读会话 | **已满 5 轮** 或 **绑定模型已禁用**:输入区禁用、仅可查看历史;选择器仍可切换(为下次新会话准备) | +| FR-AI-MODEL-FE-08a | 模型停用提示 | 绑定模型 `enabled=false` 时展示提示条:「该会话所用模型已停用(额度不足),仅可查看历史,请切换模型后新建会话」 | +| FR-AI-MODEL-FE-08b | 只读判定 | `readOnly = (roundCount >= 5) OR (session.modelEnabled === false)`;二者同时满足时优先展示模型停用提示(若适用) | +| FR-AI-MODEL-FE-09 | 加载失败 | 模型列表接口失败:展示选择器占位「模型加载失败」,发送时后端用默认模型(见 BE-05) | +| FR-AI-MODEL-FE-10 | 单模型 | 仅 1 个可选模型时仍展示选择器(或禁用下拉仅展示名称,二选一,**推荐仍展示** 以利扩展) | + +#### 3.2.4 验收标准 + +| 编号 | 验证场景 | 预期结果 | +| :---------------------- | :----------------------------------------- | :----------------------------------------------------------- | +| AC-AI-MODEL-FE-01 | 切换模型后点「新会话」并提问 | 新会话使用新模型(响应 `model` 字段与之一致) | +| AC-AI-MODEL-FE-02 | 会话进行中切换模型后继续在同会话发送 | 仍使用会话创建时绑定的模型 | +| AC-AI-MODEL-FE-03 | 刷新页面 | 恢复上次选择的模型(若仍有效) | +| AC-AI-MODEL-FE-04 | 管理员禁用某模型后用户点选绑定该模型的旧会话 | 历史消息完整展示,输入区禁用,提示模型已停用;发送被拦截 | +| AC-AI-MODEL-FE-05 | 禁用模型且会话未满 5 轮 | 仍不可继续发送(只读),与满 5 轮表现一致(除提示文案) | + +--- + +### 3.3 后端 - 模型数据与接口 + +#### 3.3.1 数据模型(Flyway) + +建议新增迁移 `V6__ai_assistant_model.sql`(版本号以仓库递增为准)。 + +**表 `ai_assistant_model`** + +| 字段 | 类型 | 说明 | +| :------------ | :------------- | :--------------------------------------------- | +| id | BIGINT PK | 主键 | +| model_code | VARCHAR(64) | DashScope model 参数,未删除记录唯一 | +| display_name | VARCHAR(32) | 展示名称 | +| description | VARCHAR(200) | 描述,可空 | +| enabled | TINYINT | 1 启用 0 禁用(Token 不足或运营下架),默认 1 | +| allow_image | TINYINT | 1 允许 0 不允许,默认 0;模型是否支持图片输入 | +| allow_voice | TINYINT | 1 允许 0 不允许,默认 0;模型是否支持语音输入 | +| is_default | TINYINT | 1 默认 0 非默认,默认 0 | +| sort | INT | 排序,默认 0 | +| created_at | DATETIME | 创建时间 | +| updated_at | DATETIME | 更新时间 | +| deleted | TINYINT | 逻辑删除,默认 0 | + +**索引**:`UNIQUE uk_model_code (model_code, deleted)` 在 MySQL 下对软删唯一需用应用层校验或 `(model_code)` 唯一 + 删后改后缀;**首版采用应用层校验** `model_code` 在 `deleted=0` 间唯一。 + +**表 `ai_chat_session` 变更** + +| 字段 | 类型 | 说明 | +| :-------- | :------ | :---------------------------------------- | +| model_id | BIGINT | 会话绑定模型,FK 逻辑关联 `ai_assistant_model.id`,可空 | + +- 迁移时对已有会话:`model_id` 设为迁移时 **默认模型** 的 id +- 新会话:创建时写入当前解析得到的 `model_id` + +**表 `ai_chat_message`**:首版 **不增加** `model_id`(以会话为准)。 + +#### 3.3.2 管理端接口 `/api/admin/ai/models` + +| 方法 | 路径 | 说明 | +| :----- | :-------------------------------- | :--------------------------- | +| GET | `/api/admin/ai/models` | 列表(`deleted=0`,分页可选) | +| GET | `/api/admin/ai/models/{id}` | 详情 | +| POST | `/api/admin/ai/models` | 新增 | +| PUT | `/api/admin/ai/models/{id}` | 修改 | +| DELETE | `/api/admin/ai/models/{id}` | 逻辑删除 | + +**新增/修改请求体示例** + +```json +{ + "modelCode": "qwen-plus", + "displayName": "通义 Plus", + "description": "更强推理,适合复杂问题", + "enabled": true, + "allowImageUpload": false, + "allowVoiceUpload": false, + "isDefault": false, + "sort": 10 +} +``` + +**列表项响应字段**:`id, modelCode, displayName, description, enabled, allowImageUpload, allowVoiceUpload, isDefault, sort, createdAt, updatedAt` + +#### 3.3.3 用户端接口 + +| 方法 | 路径 | 说明 | +| :--- | :--------------------------- | :------------------------------------- | +| GET | `/api/app/ai/models` | 可选模型列表(仅启用、未删除) | + +**列表项**:`id, displayName, description, isDefault, allowImageUpload, allowVoiceUpload`(**不返回** `modelCode`;多模态字段供后续前端使用,**本期助手页不展示上传控件**) + +**扩展已有接口** + +| 接口 | 变更 | +| :--------------------------- | :------------------------------------------------------------------- | +| `POST /api/app/ai/sessions` | 请求体可选 `{ "modelId": 1 }`;未传则用默认模型 | +| `POST /api/app/ai/chat` | 请求体可选 `modelId`;若传且与会话已绑定不一致,**忽略** 并以会话为准 | +| `GET /api/app/ai/sessions` | 列表项增加 `modelDisplayName`、`modelEnabled`(绑定模型是否仍启用) | +| `GET .../sessions/{id}/messages` | 可增加 `modelEnabled`、`readOnlyReason`(`ROUND_FULL` / `MODEL_DISABLED` / null) | + +#### 3.3.4 聊天业务规则(相对原 AI 助手需求的增量) + +| 编号 | 规则项 | 业务规则说明 | +| :---------------------- | :--------------- | :---------------------------------------------------------------------------------------------------- | +| FR-AI-MODEL-BE-01 | 解析模型 | 按 `model_id` 查模型;`deleted=1` 视为不可用;`enabled=0` 时 **禁止** 对该会话执行 `POST /chat`(返回 `400`,文案:该会话所用模型已停用,仅可查看历史) | +| FR-AI-MODEL-BE-01a | 只读与满 5 轮 | `enabled=0` 与 `round_count>=5` 均导致只读;二者独立判断,消息列表接口返回 `readOnlyReason` 供前端展示 | +| FR-AI-MODEL-BE-02 | 新会话绑定 | `createSession` 解析 `modelId`:无效则用默认模型 id | +| FR-AI-MODEL-BE-03 | 调用 DashScope | 请求体 `model` 使用记录的 `model_code`,**不再** 使用 `DashScopeProperties.model`(仅 AI 助手) | +| FR-AI-MODEL-BE-04 | 其它 AI 功能 | 摘要、润色、标签推荐 **仍** 使用 `properties.getModel()`,不读模型表 | +| FR-AI-MODEL-BE-05 | 默认模型 | 无可用默认时(数据异常),回退 `dashscope.model` 并打 **warn** 日志;正常运营不应出现 | +| FR-AI-MODEL-BE-06 | 模型不存在 | 创建会话时 `modelId` 指向已删或不存在 → `400` 模型不可用 | +| FR-AI-MODEL-BE-07 | 响应 | `AiChatResultVO` 继续返回实际 `model`(modelCode)及可增加 `modelDisplayName` | +| FR-AI-MODEL-BE-08 | 限流与 Key | 与现有一致;不按模型分限流 | +| FR-AI-MODEL-BE-09 | 种子数据 | 迁移插入一条默认模型:`model_code` = 当前 `dashscope.model`,`display_name` = 「默认模型」,`is_default=1`,`allow_image=0`,`allow_voice=0` | +| FR-AI-MODEL-BE-10 | 多模态配置 | 保存 `allow_image`/`allow_voice`;`POST /chat` **本期不接收** 图片/语音附件;后续迭代再校验「模型不允许则拒绝上传」 | + +#### 3.3.5 错误码补充 + +| 错误码 / HTTP | 描述 | 触发条件 | +| :------------ | :----------------- | :------------------------------------- | +| 400 | 模型编码重复 | 新增/修改 modelCode 冲突 | +| 400 | 模型不可用 | 用户指定 modelId 无效或已删除 | +| 400 | 须保留启用模型 | 禁用/删除导致无启用模型 | +| 400 | 须先更换默认模型 | 删除当前默认模型 | +| 400 | 模型已停用 | 对绑定已禁用模型的会话调用 `POST /chat` | + +(可在 `ErrorCode` 中新增枚举,或使用 `BusinessException` + 明确文案。) + +#### 3.3.6 验收标准 + +| 编号 | 验证场景 | 预期结果 | +| :---------------------- | :------------------------------------ | :-------------------------------------------- | +| AC-AI-MODEL-BE-01 | 两模型分别建会话并 chat | DashScope 请求 `model` 分别为对应 modelCode | +| AC-AI-MODEL-BE-02 | 禁用某模型后旧会话继续 chat | 返回 400,模型已停用;`GET messages` 仍可查看 | +| AC-AI-MODEL-BE-03 | 新会话不传 modelId | 使用默认模型 | +| AC-AI-MODEL-BE-04 | 非管理员访问 admin 接口 | 403 | + +--- + +### 3.4 配置与部署 + +| 配置项 | 说明 | +| :------------------ | :------------------------------------------------------------------- | +| `DASHSCOPE_API_KEY` | 不变,全局一份 | +| `dashscope.model` | 作 **种子** 与 **兜底**;AI 助手正常运行后以库内默认模型为准 | +| Flyway | 执行 V6 迁移 + 种子数据 | + +部署检查:管理端可 CRUD;用户端下拉有数据;新会话对话返回正确 `model` 字段。 + +--- + +## 4. 交互流程 + +### 4.1 管理员上架新模型 + +``` +1. 管理员进入 /admin/ai-models +2. 点击新增,填写 modelCode、displayName、enabled、sort +3. POST /api/admin/ai/models → 列表刷新 +4. 用户端 GET /api/app/ai/models 出现新项(若 enabled) +``` + +### 4.2 用户切换模型并新会话提问 + +``` +1. 用户在 AI 助手页将模型从 A 改为 B(写入 localStorage) +2. 点击「新会话」→ POST /sessions { modelId: B } → session 绑定 B +3. POST /chat → DashScope model = B.modelCode +4. 响应 data.model 为 B 的 modelCode +``` + +### 4.3 历史会话回看(模型已禁用) + +``` +1. 管理员因 Token 不足将模型 A 设为 disabled +2. 用户点选绑定模型 A 的旧会话(可能未满 5 轮) +3. GET /sessions/{id}/messages → 返回全文 + modelEnabled=false + readOnlyReason=MODEL_DISABLED +4. 前端输入区禁用,展示「模型已停用,仅可查看」 +5. 用户 POST /chat → 400 拒绝 +6. 用户切换为启用中的模型 B,点击「新会话」后可正常对话 +``` + +--- + +## 5. 接口与代码对齐(规划) + +### 5.1 后端 + +| 模块 | 文件 | 变更说明 | +| :-------------- | :------------------------------------------------ | :-------------------------- | +| jog-admin | `db/migration/V6__ai_assistant_model.sql` | 模型表 + session.model_id | +| jog-module-blog | `entity/AiAssistantModel.java` | 实体 | +| jog-module-blog | `service/AiAssistantModelService` + impl | CRUD、默认模型、校验 | +| jog-module-blog | `controller/AdminAiModelController.java` | `/api/admin/ai/models` | +| jog-module-blog | `controller/AiChatController` 或新 App 方法 | `GET /api/app/ai/models` | +| jog-module-blog | `AiChatServiceImpl` | 按 session.model_id 调模型 | + +### 5.2 前端 + +| 模块 | 文件 | 变更说明 | +| :----------- | :--------------------------- | :-------------------- | +| jog-frontend | `views/admin/AiModels.vue` | 模型管理页 | +| jog-frontend | `layouts/AdminLayout.vue` | 菜单项 | +| jog-frontend | `router/index.js` | `/admin/ai-models` | +| jog-frontend | `api/aiModel.js` | admin + app API | +| jog-frontend | `AiAssistant.vue` / Panel | 模型选择器 | +| jog-frontend | `api/aiChat.js` | sessions/chat 带 modelId | + +--- + +## 6. 非功能性需求 + +| 编号 | 类型 | 需求说明 | +| :----- | :------- | :----------------------------------------------------------------------- | +| NFR-01 | 性能 | 模型列表接口轻量,无分页或 pageSize≤50;不增加 chat 接口 P95 目标 | +| NFR-02 | 安全 | `modelCode` 仅管理端可见;防 SQL 注入沿用 MyBatis-Plus;Admin 鉴权 | +| NFR-03 | 兼容 | 迁移后旧会话均有 `model_id`;不影响已存消息 | +| NFR-04 | 可观测性 | chat 日志记录 `modelId`、`modelCode`(不记 API Key) | +| NFR-05 | 可扩展性 | 表结构预留 `allow_image`/`allow_voice` 及后续 per-model `temperature` 等 | + +--- + +## 7. 范围外(后续迭代) + +| 项 | 说明 | +| :----------------- | :----------------------------------------- | +| 其它 AI 功能共用模型表 | 摘要/润色/标签推荐改为可选模型 | +| 模型连通性检测 | 保存时试调用 DashScope | +| 按模型差异化限流 | 不同模型不同每分钟次数 | +| 多 API Key | 不同模型不同 Key(多租户) | +| 用户级模型权限 | VIP 可用 plus 等 | +| 流式输出按模型配置 | 与 SSE 需求一并考虑 | +| 用户端图片上传 | 助手页上传图片 UI 及 `POST /chat` 附件协议 | +| 用户端语音上传 | 助手页语音录入/上传及转写联调 | + +--- + +## 8. 风险与缓解 + +| 风险 | 影响 | 缓解措施 | +| :----------------------- | :------------- | :-------------------------------------------- | +| 错误 modelCode | 调用失败 | 管理端文案说明须与百炼文档一致;用户侧友好错误 | +| 删除模型后会话孤儿 | 展示异常 | 逻辑删保留行;展示时用快照名或「已下架模型」 | +| 中途换模导致上下文混乱 | 回答质量下降 | 会话级绑定,仅新会话换模(D-08) | +| 无启用模型 | 全站助手不可用 | ADM-07 + 种子默认模型 | +| 禁用后会话仍被误发 | 继续扣 Token | 前后端双重只读;`POST /chat` 校验 `enabled` | + +--- + +## 9. 产品约定(建议默认,评审可调整) + +| 编号 | 约定项 | 需求说明 | +| :--- | :----- | :------- | +| D-08 | 会话级绑定 | 模型在 **创建会话** 时绑定;同会话多轮不换模;用户切换选择器只影响 **之后的新会话** | +| D-09 | 禁用仅可查看 | 模型禁用主因:**Token 额度不足**(或运营下架);绑定该模型的会话 **仅可查看历史**,不可 `POST /chat`;新会话不可再选该模型 | +| D-10 | 仅助手用模型表 | 摘要、润色、标签推荐继续 `dashscope.model` | +| D-11 | 首版种子一条 | 迁移从当前配置插入默认模型,保证零配置升级可用 | +| D-12 | 用户不看 modelCode | App 列表只展示 `displayName`;实际编码仅管理端与日志 | +| D-13 | 多模态先配置后能力 | 管理端可配置 `allowImageUpload` / `allowVoiceUpload`;**本期用户端不提供** 图片/语音上传 UI,字段入库并随 API 返回供后续使用 | + +--- + +## 10. 需求完整性自检 + +| 检查项 | 状态 | 说明 | +| :----- | :--- | :--- | +| 管理员增删改查 | ✅ | §3.1 + §3.3.2 | +| 删除为逻辑删除 | ✅ | FR-AI-MODEL-ADM-04 | +| 用户端模型切换 | ✅ | §3.2 | +| 与多轮/5 轮/持久化兼容 | ✅ | 不改变原 FR-AI-CHAT-*,仅扩展 session | +| 默认与边界约束 | ✅ | 唯一默认、至少一启用、删默认前换默认 | +| 数据迁移与旧数据 | ✅ | session.model_id 回填 | +| 安全与权限 | ✅ | Admin vs App 接口分离 | +| 前端记住选择 | ✅ | FR-AI-MODEL-FE-04(小需求,提升体验) | +| 历史回看展示模型 | ✅ | 会话列表带 modelDisplayName、`modelEnabled` | +| 禁用后会话只读 | ✅ | D-09、FR-AI-MODEL-BE-01、FE-08a | +| 图片/语音开关配置 | ✅ | 管理端表单 + 表字段;用户端上传见 §7 | + +**已确认约定**: + +1. **禁用模型旧会话** — D-09:仅可查看,不可继续对话(Token 不足场景)。 +2. **其它 AI 功能是否纳入模型表** — D-10:首版不纳入。 +3. **图片/语音** — D-13:后台可配,用户端上传 UI 本期不做。 + +--- + +**编写人:** AI 助手 +**评审人:** 已确认(D-09 禁用仅查看、D-13 多模态后台配置) +**生效日期:** 2026-05-23 diff --git a/doc/AI助手联调与模型管理冲突分析.md b/doc/AI助手联调与模型管理冲突分析.md new file mode 100644 index 0000000..eb4e795 --- /dev/null +++ b/doc/AI助手联调与模型管理冲突分析.md @@ -0,0 +1,210 @@ +# AI 助手联调验收 vs 模型管理 — 冲突分析 + +| 文档版本 | 修订日期 | 说明 | +| :------- | :--------- | :--- | +| V1.0 | 2026-05-23 | 助手功能联调/验收进行中时,与《AI助手模型管理功能需求》V1.2 的差异与冲突梳理 | + +**关联文档**: + +- [AI助手功能需求.md](./AI助手功能需求.md)(V1.2,联调验收基准) +- [AI助手功能技术实施文档.md](./AI助手功能技术实施文档.md)(待办 23~25:联调 🔄、验收 ⬜) +- [AI助手模型管理功能需求.md](./AI助手模型管理功能需求.md)(V1.2) +- [AI助手模型管理功能技术实施文档.md](./AI助手模型管理功能技术实施文档.md)(V1.1,未实施) + +**分析基准**:当前仓库已实现助手 V5 表 + 四接口 + `AiAssistant.vue`,模型管理 **尚未编码**。 + +--- + +## 1. 结论摘要 + +| 类别 | 数量 | 对联调验收的影响 | +| :--- | :--- | :--- | +| **P0 破坏性冲突**(不协同发布会导致助手页异常) | **1** | 必须先完成助手 AC 或做兼容层,再上线模型管理后端 | +| **P1 行为/语义冲突**(验收口径变化,需补充用例) | **4** | 不阻断当前联调,但模型管理上线后原 AC 覆盖不足 | +| **P2 环境与流程冲突**(库表、分支、验收顺序) | **3** | 联调环境执行 V6 后需重跑部分 AC | +| **P3 扩展性差异**(UI/接口增量,无逻辑矛盾) | **5** | 与当前联调并行开发需注意合并顺序 | +| **无冲突(可并存)** | **12+** | 多轮、限流、登录、重试、分页等规则一致 | + +**合计需纳入排期的冲突/差异项:8 项(P0×1 + P1×4 + P2×3)**;P3 五项建议在模型管理 PR 中一并交付,但不计入「硬冲突」。 + +**推荐节奏**: + +1. **先** 按《AI助手功能需求》完成待办 23~25(AC-AI-CHAT-*),基线环境 **仅 V5、不部署 V6**。 +2. **再** 实施模型管理;`GET .../messages` 与前端 **同一 PR** 发布,或后端短期兼容旧响应格式。 +3. 模型管理验收使用 **AC-AI-MODEL-***,并 **追加** 4 条 P1 回归(见 §5)。 + +--- + +## 2. 冲突项清单 + +### 2.1 P0 — 破坏性冲突(1 项) + +| 编号 | 冲突点 | 助手现状(联调基准) | 模型管理要求 | 影响 | +| :--- | :----- | :------------------- | :----------- | :--- | +| **C-P0-01** | `GET /api/app/ai/sessions/{id}/messages` 响应结构 | `ApiResult.data` 为 **消息数组** `List`(需求 FR-AI-CHAT-BE-07);前端 `messages.value = res.data` | `data` 改为 **包装对象**:`{ messages, modelEnabled, readOnlyReason, roundCount, maxRounds }` | 仅升级后端时,前端把对象当数组渲染 → **消息区空白或报错** | + +**缓解**(择一): + +- **A(推荐)**:模型管理前后端同版本发布;联调环境在助手 AC 通过后再合入。 +- **B**:后端过渡期双格式:`?legacy=true` 仍返回数组,默认新格式。 +- **C**:前端先判 `Array.isArray(data)`,兼容两种结构。 + +--- + +### 2.2 P1 — 行为 / 语义冲突(4 项) + +| 编号 | 冲突点 | 助手现状 | 模型管理要求 | 对联调/验收的影响 | +| :--- | :----- | :------- | :----------- | :---------------- | +| **C-P1-01** | 调用 DashScope 的 `model` 来源 | FR-AI-CHAT-BE-09:`DashScopeProperties.model`(`DASHSCOPE_MODEL`) | FR-AI-MODEL-BE-03:会话绑定 `ai_assistant_model.model_code` | 联调时记录的 `response.model` 来自 yml;上线后来自 **库表**。同一环境改 `DASHSCOPE_MODEL` **不再** 改变已有助手会话行为 | +| **C-P1-02** | 只读条件 | FR-AI-CHAT-FE-05:仅 `roundCount >= 5` → 只读 | 另增 `modelEnabled === false`(D-09);未满 5 轮也可只读 | AC-AI-CHAT-FE-04/05 **未覆盖**「模型禁用」;模型管理验收需 AC-AI-MODEL-FE-04/05 | +| **C-P1-03** | `POST /chat` 拒绝条件 | 满 5 轮、参数非法、限流、AI 异常 | 绑定模型 `enabled=0` 时 **400 模型已停用**(FR-AI-MODEL-BE-01) | 联调阶段不会出现;管理员禁用模型后,原「未满 5 轮可继续」会话 **不能再发** — 与 FR-AI-CHAT-FE-05 文案/预期 **不一致**(属需求演进,非实现 bug) | +| **C-P1-04** | 创建会话与模型绑定 | `POST /sessions` **无 body**;`ai_chat_session` **无** `model_id` | 可选 `{ modelId }`;表字段 `model_id` 必填(迁移回填) | 联调创建的会话在 V6 后 `model_id` 指向种子默认模型;**不会** 自动等同于当时 yml 中的 model(若种子与 yml 不一致) | + +--- + +### 2.3 P2 — 环境 / 流程冲突(3 项) + +| 编号 | 冲突点 | 说明 | 建议 | +| :--- | :----- | :--- | :--- | +| **C-P2-01** | Flyway V6 与联调库 | 联调库若已跑 V5 并产生会话,执行 V6 会 `ALTER` + 种子 + `UPDATE model_id` | 助手 AC 在 **V5-only** 环境签字;V6 后重跑:刷新恢复、历史点选、发送(C-P0-01 相关) | +| **C-P2-02** | 验收清单并行 | 《AI助手功能技术实施文档》待办 25:`AC-AI-CHAT-*`;《模型管理》`AC-AI-MODEL-*` | 分两轮签字,避免混在同一表格未标注版本 | +| **C-P2-03** | 默认模型双配置 | 助手联调看 `application.yml` / `DASHSCOPE_MODEL`;模型管理运行看库内 `is_default` | 部署检查清单增加:**种子 `model_code` 与 yml 一致**(见模型管理需求 §3.4) | + +--- + +### 2.4 P3 — 扩展差异(非硬冲突,5 项) + +| 编号 | 差异点 | 助手现状 | 模型管理增量 | 说明 | +| :--- | :----- | :------- | :----------- | :--- | +| **C-P3-01** | 新接口 | 4 个 app 接口 | `GET /api/app/ai/models` | 纯增量,不影响联调 | +| **C-P3-02** | 会话列表字段 | `id, title, roundCount, lastMessageAt` | + `modelDisplayName`, `modelEnabled` | 向后兼容,旧前端可忽略 | +| **C-P3-03** | 创建会话 body | 空 POST | 可选 `modelId` | 旧客户端不传即可 | +| **C-P3-04** | 页面布局 | 标题栏仅「会话标题 + 轮次」 | 增加模型 `el-select`(FR-AI-MODEL-FE) | 布局扩展,不推翻 FR-AI-CHAT-FE 分栏 | +| **C-P3-05** | localStorage | FR-AI-CHAT-FE-14:不存对话正文 | 仅存 `jog_ai_assistant_model_id` | 不冲突 | + +--- + +### 2.5 无冲突项(联调可继续,12 项代表) + +以下规则在两份需求中 **一致或模型管理显式不改**: + +| 领域 | 助手需求编号 | 说明 | +| :--- | :----------- | :--- | +| 多轮上限 5 轮 | FR-AI-CHAT-BE-02、FE-05/06 | 模型管理未改 `MAX_ROUNDS` | +| 失败重试不重复 user | FR-AI-CHAT-BE-15 | 不变 | +| 限流 10 次/分钟 | FR-AI-CHAT-BE-12 | FR-AI-MODEL-BE-08 明确不按模型分限流 | +| 登录与鉴权 | FR-AI-CHAT-FE-10、BE-01 | 不变 | +| 会话列表分页 50 | FR-AI-CHAT-FE-16、D-07 | 不变 | +| 历史全文回看 | FR-AI-CHAT-FE-04、D-01 | 不变(仅多只读原因) | +| 新会话不删旧数据 | FR-AI-CHAT-FE-02、D-03 | 不变 | +| 进入页默认最近会话 | D-06 | 不变 | +| System Prompt / max-input 截断 | FR-AI-CHAT-BE-03/04/10 | 不变 | +| 会话软删除预留 | FR-AI-CHAT-BE-14 | 模型管理不强制前端删会话 | +| 润色/标签/摘要模型来源 | D-10、§1.6 | 与助手联调无关 | +| `POST /chat` 请求体核心字段 | `sessionId` + `message` | 仍必填;`modelId` 可选且可忽略 | + +--- + +## 3. 接口契约对照表 + +| 接口 | 联调中契约 | 模型管理后契约 | 冲突级别 | +| :--- | :--------- | :------------- | :------- | +| `POST /sessions` | 无 body → `{ sessionId }` | 可选 body `{ modelId }` → 同上 | 兼容 | +| `GET /sessions` | 分页 + 4 字段 | +2 字段 | 兼容 | +| `GET /sessions/{id}/messages` | `data`: **数组** | `data`: **对象** | **C-P0-01** | +| `POST /chat` | `{ sessionId, message }` | +可选 `modelId`(忽略) | 兼容 | +| `GET /models` | 不存在 | 新增 | 无 | + +--- + +## 4. 前端实现差异(当前代码) + +| 文件 | 联调实现 | 模型管理需改 | +| :--- | :------- | :----------- | +| `api/aiChat.js` | `createAiChatSession()` 无参;messages 按数组解析 | 传 `modelId`;解析 `payload.messages` | +| `AiAssistant.vue` | `readOnly = roundCount >= 5`;`res.data` 作消息列表 | 合并 `modelEnabled`;处理 `readOnlyReason` | +| `AiChatPanel.vue` | 仅满 5 轮 `readonly-banner` | 增加模型停用提示条 | +| (无) | 无模型选择器 | 标题栏 `el-select` + `listAppAiModels` | + +--- + +## 5. 验收用例冲突与合并建议 + +### 5.1 当前联调应完成的范围(不受模型管理阻塞) + +以下用例 **仅依赖 V5 + 现有代码**,与模型管理无硬冲突: + +- AC-AI-CHAT-NAV-*、AC-AI-CHAT-FE-01~03、06~07 +- AC-AI-CHAT-FE-04、05(**仅满 5 轮只读**) +- AC-AI-CHAT-BE-01~05 + +对应技术文档待办:**23、24、25(助手部分)**。 + +### 5.2 模型管理上线后必须追加的回归(原 AC 未覆盖) + +| 追加编号 | 场景 | 对应冲突 | +| :------- | :--- | :------- | +| REG-MODEL-01 | V6 迁移后,旧会话可加载消息且可对话(默认模型启用) | C-P1-04、C-P2-01 | +| REG-MODEL-02 | 禁用绑定模型后,未满 5 轮会话只读且 chat 400 | C-P1-02、C-P1-03 | +| REG-MODEL-03 | 切换模型 + 新会话,DashScope 使用新 `model_code` | C-P1-01 | +| REG-MODEL-04 | 前端 messages 包装结构渲染正常 | C-P0-01 | + +### 5.3 不必在助手联调阶段执行的用例 + +- AC-AI-MODEL-ADM-*、AC-AI-MODEL-FE-01~05、AC-AI-MODEL-BE-*(属模型管理专项验收) + +--- + +## 6. 测试与自动化影响 + +| 资产 | 联调基准 | 模型管理后 | +| :--- | :------- | :--------- | +| `AiChatServiceImplTest` | Mock `properties.getModel()` | 需 Mock `AiAssistantModelMapper` / Service | +| `AiChatServiceIntegrationTest` | 内存实现,无 model_id | 补 model 绑定与禁用用例 | +| `AiChatServiceLiveIT` | 打印 `model` 来自配置 | 可能为库表 `model_code` | +| 前端 E2E(若有) | 无模型下拉 | 需新场景 | + +**冲突项计数**:自动化需 **显著改动** 的约 **2 处**(Service 单测 + 集成测),计入 P1 维护成本,不单列新编号。 + +--- + +## 7. 分支与发布策略建议 + +``` +main ──┬── [阶段1] 助手联调验收(V5 only,签 AC-AI-CHAT-*) + │ + └── [阶段2] feature/ai-model-mgmt(V6 + 模型 CRUD + 助手改造) + └── 同一 PR 合并:后端 messages 包装 + 前端兼容/新 UI + └── 签 AC-AI-MODEL-* + REG-MODEL-01~04 +``` + +- **避免**:阶段 1 未完成时合入仅含 V6 + 后端 messages 改动的 PR。 +- **允许**:阶段 1 期间在独立分支开发模型管理,但不部署到联调验收环境。 + +--- + +## 8. 冲突项统计(速查) + +| 级别 | 编号 | 计数 | +| :--- | :--- | :--- | +| P0 | C-P0-01 | 1 | +| P1 | C-P1-01 ~ C-P1-04 | 4 | +| P2 | C-P2-01 ~ C-P2-03 | 3 | +| P3 | C-P3-01 ~ C-P3-05 | 5(扩展,非阻断) | +| **需协调的硬冲突合计** | P0 + P1 + P2 | **8** | + +--- + +## 9. 文档修订建议(可选) + +| 文档 | 建议 | +| :--- | :--- | +| 《AI助手功能需求》 | 在 §3.3.3 增加脚注:「消息列表响应以模型管理上线版为准,见《AI助手联调与模型管理冲突分析》C-P0-01」 | +| 《AI助手模型管理功能需求》 | §3.3.3 标明对 FR-AI-CHAT-BE-07 的 **替代关系** | +| 《AI助手功能技术实施文档》 | 待办 25 备注:验收环境 Flyway ≤ V5 | + +--- + +**编写人:** AI 助手 +**评审人:** 待评审 +**生效日期:** 2026-05-23 diff --git a/doc/AI文章润色与拼写检查功能需求.md b/doc/AI文章润色与拼写检查功能需求.md index 09c7e11..ebc208b 100644 --- a/doc/AI文章润色与拼写检查功能需求.md +++ b/doc/AI文章润色与拼写检查功能需求.md @@ -253,6 +253,14 @@ --- +## 8. 与其它 AI 功能的关系 + +本功能所用模型由配置项 **`dashscope.model`**(环境变量 `DASHSCOPE_MODEL`,默认 `qwen-turbo`)指定,经 `DashScopeProperties` 注入润色接口,**不使用**《AI助手模型管理功能需求》中的 `ai_assistant_model` 表。助手侧模型的新增、禁用、用户选模 **不影响** 润色行为。 + +与 **文章标签自动推荐**、**文章摘要** 同属编辑器 / 写作类一次性调用,共用 API Key 与底层 `callModel` 能力,限流 key 与 AI 助手对话 **相互独立**。若需全站统一按模型管理额度,属后续迭代(见助手模型需求 §7「其它 AI 功能共用模型表」),**不在** 润色本期范围。 + +--- + **编写人:** AI 助手 **评审人:** 待评审 **生效日期:** 2026-05-23 diff --git a/doc/AI文章润色功能技术实施文档.md b/doc/AI文章润色功能技术实施文档.md index 722af90..1c3cede 100644 --- a/doc/AI文章润色功能技术实施文档.md +++ b/doc/AI文章润色功能技术实施文档.md @@ -1,5 +1,7 @@ # AI 文章润色功能技术实施文档 +**与其它 AI 功能**:润色始终使用 `DashScopeProperties.model`,与《AI助手模型管理功能需求》中的 `ai_assistant_model` **无关**;实施或联调助手模型管理时 **无需改动** 本模块。参见润色需求文档 §8。 + ## 前提条件 **数据安全规则**: diff --git a/doc/文章标签自动推荐功能技术实施文档.md b/doc/文章标签自动推荐功能技术实施文档.md index 0371264..3bfcab5 100644 --- a/doc/文章标签自动推荐功能技术实施文档.md +++ b/doc/文章标签自动推荐功能技术实施文档.md @@ -1,5 +1,7 @@ # 文章标签自动推荐功能技术实施文档 +**与其它 AI 功能**:标签推荐使用 `properties.getModel()`,**不接入** 助手模型表;实施助手模型管理时 **无需改动** `TagRecommendServiceImpl`。参见《文章标签自动推荐功能需求》§6 及《AI助手模型管理功能需求》D-10。 + ## 前提条件 **数据安全规则**: diff --git a/doc/文章标签自动推荐功能需求.md b/doc/文章标签自动推荐功能需求.md index e7df125..230e867 100644 --- a/doc/文章标签自动推荐功能需求.md +++ b/doc/文章标签自动推荐功能需求.md @@ -76,9 +76,11 @@ ## 6. 技术实现 - 后端:复用现有的 AI 服务调用能力 -- 模型:使用项目现有的 AI 模型配置 +- 模型:使用配置项 **`dashscope.model`**(环境变量 `DASHSCOPE_MODEL`),**不使用** AI 助手模型管理表 `ai_assistant_model`;助手后台对模型的启用 / 禁用 **不影响** 本功能(与《AI助手模型管理功能需求》约定 D-10 一致) - 前端:在文章编辑页面添加推荐按钮和交互 +与 **AI 文章润色**、**文章摘要** 共用 DashScope API Key 与 `callModel` 调用链;与 **AI 助手** 对话的模型选择、会话绑定 **无耦合**。全站统一后台配模见助手模型需求范围外说明,非本期内容。 + ## 7. 非功能需求 - 推荐响应时间应在 5 秒内完成 diff --git a/jog-frontend/package-lock.json b/jog-frontend/package-lock.json index 4e283e1..50b48a0 100644 --- a/jog-frontend/package-lock.json +++ b/jog-frontend/package-lock.json @@ -1,7 +1,7 @@ { "name": "jog-frontend", "version": "1.0.0", - "lockfileVersion": 2, + "lockfileVersion": 3, "requires": true, "packages": { "": { @@ -32,6 +32,7 @@ "resolved": "https://registry.npmmirror.com/@antfu/utils/-/utils-0.7.10.tgz", "integrity": "sha512-+562v9k4aI80m1+VuMHehNJWLOFjBnXn3tdOitzD0il5b7smkSBal4+a3oKiQTbrwMmN/TBUMDvbdoWDehgOww==", "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/antfu" } @@ -40,6 +41,7 @@ "version": "7.27.1", "resolved": "https://registry.npmmirror.com/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -48,6 +50,7 @@ "version": "7.28.5", "resolved": "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -56,6 +59,7 @@ "version": "7.29.3", "resolved": "https://registry.npmmirror.com/@babel/parser/-/parser-7.29.3.tgz", "integrity": "sha512-b3ctpQwp+PROvU/cttc4OYl4MzfJUWy6FZg+PMXfzmt/+39iHVF0sDfqay8TQM3JA2EUOyKcFZt75jWriQijsA==", + "license": "MIT", "dependencies": { "@babel/types": "^7.29.0" }, @@ -70,6 +74,7 @@ "version": "7.29.0", "resolved": "https://registry.npmmirror.com/@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" @@ -82,6 +87,7 @@ "version": "4.2.0", "resolved": "https://registry.npmmirror.com/@ctrl/tinycolor/-/tinycolor-4.2.0.tgz", "integrity": "sha512-kzyuwOAQnXJNLS9PSyrk0CWk35nWJW/zl/6KvnTBMFK65gm7U1/Z5BqjxeapjZCIhQcM/DsrEmcbRwDyXyXK4A==", + "license": "MIT", "engines": { "node": ">=14" } @@ -90,6 +96,7 @@ "version": "2.3.2", "resolved": "https://registry.npmmirror.com/@element-plus/icons-vue/-/icons-vue-2.3.2.tgz", "integrity": "sha512-OzIuTaIfC8QXEPmJvB4Y4kw34rSXdCJzxcD1kFStBvr8bK6X1zQAYDo0CNMjojnfTqRQCJ0I7prlErcoRiET2A==", + "license": "MIT", "peerDependencies": { "vue": "^3.2.0" } @@ -102,6 +109,7 @@ "ppc64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "aix" @@ -118,6 +126,7 @@ "arm" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "android" @@ -134,6 +143,7 @@ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "android" @@ -150,6 +160,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "android" @@ -166,6 +177,7 @@ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -182,6 +194,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -198,6 +211,7 @@ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "freebsd" @@ -214,6 +228,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "freebsd" @@ -230,6 +245,7 @@ "arm" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -246,6 +262,7 @@ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -262,6 +279,7 @@ "ia32" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -278,6 +296,7 @@ "loong64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -294,6 +313,7 @@ "mips64el" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -310,6 +330,7 @@ "ppc64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -326,6 +347,7 @@ "riscv64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -342,6 +364,7 @@ "s390x" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -358,6 +381,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -374,6 +398,7 @@ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "netbsd" @@ -390,6 +415,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "netbsd" @@ -406,6 +432,7 @@ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "openbsd" @@ -422,6 +449,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "openbsd" @@ -438,6 +466,7 @@ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "openharmony" @@ -454,6 +483,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "sunos" @@ -470,6 +500,7 @@ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" @@ -486,6 +517,7 @@ "ia32" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" @@ -502,6 +534,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" @@ -514,6 +547,7 @@ "version": "1.7.5", "resolved": "https://registry.npmmirror.com/@floating-ui/core/-/core-1.7.5.tgz", "integrity": "sha512-1Ih4WTWyw0+lKyFMcBHGbb5U5FtuHJuujoyyr5zTaWS5EYMeT6Jb2AuDeftsCsEuchO+mM2ij5+q9crhydzLhQ==", + "license": "MIT", "dependencies": { "@floating-ui/utils": "^0.2.11" } @@ -522,6 +556,7 @@ "version": "1.7.6", "resolved": "https://registry.npmmirror.com/@floating-ui/dom/-/dom-1.7.6.tgz", "integrity": "sha512-9gZSAI5XM36880PPMm//9dfiEngYoC6Am2izES1FF406YFsjvyBMmeJ2g4SAju3xWwtuynNRFL2s9hgxpLI5SQ==", + "license": "MIT", "dependencies": { "@floating-ui/core": "^1.7.5", "@floating-ui/utils": "^0.2.11" @@ -530,18 +565,21 @@ "node_modules/@floating-ui/utils": { "version": "0.2.11", "resolved": "https://registry.npmmirror.com/@floating-ui/utils/-/utils-0.2.11.tgz", - "integrity": "sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg==" + "integrity": "sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg==", + "license": "MIT" }, "node_modules/@jridgewell/sourcemap-codec": { "version": "1.5.5", "resolved": "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", - "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==" + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "license": "MIT" }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmmirror.com/@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" @@ -555,6 +593,7 @@ "resolved": "https://registry.npmmirror.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true, + "license": "MIT", "engines": { "node": ">= 8" } @@ -564,6 +603,7 @@ "resolved": "https://registry.npmmirror.com/@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" @@ -577,6 +617,7 @@ "version": "2.11.8", "resolved": "https://registry.npmmirror.com/@sxzz/popperjs-es/-/popperjs-es-2.11.8.tgz", "integrity": "sha512-wOwESXvvED3S8xBmcPWHs2dUuzrE4XiZeFu7e1hROIJkm02a49N120pmOXxY33sBb6hArItm5W5tcg1cBtV+HQ==", + "license": "MIT", "funding": { "type": "opencollective", "url": "https://opencollective.com/popperjs" @@ -585,13 +626,15 @@ "node_modules/@remirror/core-constants": { "version": "3.0.0", "resolved": "https://registry.npmmirror.com/@remirror/core-constants/-/core-constants-3.0.0.tgz", - "integrity": "sha512-42aWfPrimMfDKDi4YegyS7x+/0tlzaqwPQCULLanv3DMIlu96KTJR0fM5isWX2UViOqlGnX6YFgqWepcX+XMNg==" + "integrity": "sha512-42aWfPrimMfDKDi4YegyS7x+/0tlzaqwPQCULLanv3DMIlu96KTJR0fM5isWX2UViOqlGnX6YFgqWepcX+XMNg==", + "license": "MIT" }, "node_modules/@rollup/pluginutils": { "version": "5.3.0", "resolved": "https://registry.npmmirror.com/@rollup/pluginutils/-/pluginutils-5.3.0.tgz", "integrity": "sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==", "dev": true, + "license": "MIT", "dependencies": { "@types/estree": "^1.0.0", "estree-walker": "^2.0.2", @@ -617,6 +660,7 @@ "arm" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "android" @@ -630,6 +674,7 @@ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "android" @@ -643,6 +688,7 @@ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -656,6 +702,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -669,6 +716,7 @@ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "freebsd" @@ -682,6 +730,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "freebsd" @@ -695,6 +744,10 @@ "arm" ], "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", "optional": true, "os": [ "linux" @@ -708,6 +761,10 @@ "arm" ], "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", "optional": true, "os": [ "linux" @@ -721,6 +778,10 @@ "arm64" ], "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", "optional": true, "os": [ "linux" @@ -734,6 +795,10 @@ "arm64" ], "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", "optional": true, "os": [ "linux" @@ -747,6 +812,10 @@ "loong64" ], "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", "optional": true, "os": [ "linux" @@ -760,6 +829,10 @@ "loong64" ], "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", "optional": true, "os": [ "linux" @@ -773,6 +846,10 @@ "ppc64" ], "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", "optional": true, "os": [ "linux" @@ -786,6 +863,10 @@ "ppc64" ], "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", "optional": true, "os": [ "linux" @@ -799,6 +880,10 @@ "riscv64" ], "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", "optional": true, "os": [ "linux" @@ -812,6 +897,10 @@ "riscv64" ], "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", "optional": true, "os": [ "linux" @@ -825,6 +914,10 @@ "s390x" ], "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", "optional": true, "os": [ "linux" @@ -838,6 +931,10 @@ "x64" ], "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", "optional": true, "os": [ "linux" @@ -851,6 +948,10 @@ "x64" ], "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", "optional": true, "os": [ "linux" @@ -864,6 +965,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "openbsd" @@ -877,6 +979,7 @@ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "openharmony" @@ -890,6 +993,7 @@ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" @@ -903,6 +1007,7 @@ "ia32" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" @@ -916,6 +1021,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" @@ -929,6 +1035,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" @@ -938,6 +1045,7 @@ "version": "2.27.2", "resolved": "https://registry.npmmirror.com/@tiptap/core/-/core-2.27.2.tgz", "integrity": "sha512-ABL1N6eoxzDzC1bYvkMbvyexHacszsKdVPYqhl5GwHLOvpZcv9VE9QaKwDILTyz5voCA0lGcAAXZp+qnXOk5lQ==", + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" @@ -950,6 +1058,7 @@ "version": "2.27.2", "resolved": "https://registry.npmmirror.com/@tiptap/extension-blockquote/-/extension-blockquote-2.27.2.tgz", "integrity": "sha512-oIGZgiAeA4tG3YxbTDfrmENL4/CIwGuP3THtHsNhwRqwsl9SfMk58Ucopi2GXTQSdYXpRJ0ahE6nPqB5D6j/Zw==", + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" @@ -962,6 +1071,7 @@ "version": "2.27.2", "resolved": "https://registry.npmmirror.com/@tiptap/extension-bold/-/extension-bold-2.27.2.tgz", "integrity": "sha512-bR7J5IwjCGQ0s3CIxyMvOCnMFMzIvsc5OVZKscTN5UkXzFsaY6muUAIqtKxayBUucjtUskm5qZowJITCeCb1/A==", + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" @@ -974,6 +1084,7 @@ "version": "2.27.2", "resolved": "https://registry.npmmirror.com/@tiptap/extension-bubble-menu/-/extension-bubble-menu-2.27.2.tgz", "integrity": "sha512-VkwlCOcr0abTBGzjPXklJ92FCowG7InU8+Od9FyApdLNmn0utRYGRhw0Zno6VgE9EYr1JY4BRnuSa5f9wlR72w==", + "license": "MIT", "dependencies": { "tippy.js": "^6.3.7" }, @@ -990,6 +1101,7 @@ "version": "2.27.2", "resolved": "https://registry.npmmirror.com/@tiptap/extension-bullet-list/-/extension-bullet-list-2.27.2.tgz", "integrity": "sha512-gmFuKi97u5f8uFc/GQs+zmezjiulZmFiDYTh3trVoLRoc2SAHOjGEB7qxdx7dsqmMN7gwiAWAEVurLKIi1lnnw==", + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" @@ -1002,6 +1114,7 @@ "version": "2.27.2", "resolved": "https://registry.npmmirror.com/@tiptap/extension-code/-/extension-code-2.27.2.tgz", "integrity": "sha512-7X9AgwqiIGXoZX7uvdHQsGsjILnN/JaEVtqfXZnPECzKGaWHeK/Ao4sYvIIIffsyZJA8k5DC7ny2/0sAgr2TuA==", + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" @@ -1014,6 +1127,7 @@ "version": "2.27.2", "resolved": "https://registry.npmmirror.com/@tiptap/extension-code-block/-/extension-code-block-2.27.2.tgz", "integrity": "sha512-KgvdQHS4jXr79aU3wZOGBIZYYl9vCB7uDEuRFV4so2rYrfmiYMw3T8bTnlNEEGe4RUeAms1i4fdwwvQp9nR1Dw==", + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" @@ -1027,6 +1141,7 @@ "version": "2.27.2", "resolved": "https://registry.npmmirror.com/@tiptap/extension-document/-/extension-document-2.27.2.tgz", "integrity": "sha512-CFhAYsPnyYnosDC4639sCJnBUnYH4Cat9qH5NZWHVvdgtDwu8GZgZn2eSzaKSYXWH1vJ9DSlCK+7UyC3SNXIBA==", + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" @@ -1039,6 +1154,7 @@ "version": "2.27.2", "resolved": "https://registry.npmmirror.com/@tiptap/extension-dropcursor/-/extension-dropcursor-2.27.2.tgz", "integrity": "sha512-oEu/OrktNoQXq1x29NnH/GOIzQZm8ieTQl3FK27nxfBPA89cNoH4mFEUmBL5/OFIENIjiYG3qWpg6voIqzswNw==", + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" @@ -1052,6 +1168,7 @@ "version": "2.27.2", "resolved": "https://registry.npmmirror.com/@tiptap/extension-floating-menu/-/extension-floating-menu-2.27.2.tgz", "integrity": "sha512-GUN6gPIGXS7ngRJOwdSmtBRBDt9Kt9CM/9pSwKebhLJ+honFoNA+Y6IpVyDvvDMdVNgBchiJLs6qA5H97gAePQ==", + "license": "MIT", "dependencies": { "tippy.js": "^6.3.7" }, @@ -1068,6 +1185,7 @@ "version": "2.27.2", "resolved": "https://registry.npmmirror.com/@tiptap/extension-gapcursor/-/extension-gapcursor-2.27.2.tgz", "integrity": "sha512-/c9VF1HBxj+AP54XGVgCmD9bEGYc5w5OofYCFQgM7l7PB1J00A4vOke0oPkHJnqnOOyPlFaxO/7N6l3XwFcnKA==", + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" @@ -1081,6 +1199,7 @@ "version": "2.27.2", "resolved": "https://registry.npmmirror.com/@tiptap/extension-hard-break/-/extension-hard-break-2.27.2.tgz", "integrity": "sha512-kSRVGKlCYK6AGR0h8xRkk0WOFGXHIIndod3GKgWU49APuIGDiXd8sziXsSlniUsWmqgDmDXcNnSzPcV7AQ8YNg==", + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" @@ -1093,6 +1212,7 @@ "version": "2.27.2", "resolved": "https://registry.npmmirror.com/@tiptap/extension-heading/-/extension-heading-2.27.2.tgz", "integrity": "sha512-iM3yeRWuuQR/IRQ1djwNooJGfn9Jts9zF43qZIUf+U2NY8IlvdNsk2wTOdBgh6E0CamrStPxYGuln3ZS4fuglw==", + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" @@ -1105,6 +1225,7 @@ "version": "2.27.2", "resolved": "https://registry.npmmirror.com/@tiptap/extension-history/-/extension-history-2.27.2.tgz", "integrity": "sha512-+hSyqERoFNTWPiZx4/FCyZ/0eFqB9fuMdTB4AC/q9iwu3RNWAQtlsJg5230bf/qmyO6bZxRUc0k8p4hrV6ybAw==", + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" @@ -1118,6 +1239,7 @@ "version": "2.27.2", "resolved": "https://registry.npmmirror.com/@tiptap/extension-horizontal-rule/-/extension-horizontal-rule-2.27.2.tgz", "integrity": "sha512-WGWUSgX+jCsbtf9Y9OCUUgRZYuwjVoieW5n6mAUohJ9/6gc6sGIOrUpBShf+HHo6WD+gtQjRd+PssmX3NPWMpg==", + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" @@ -1131,6 +1253,7 @@ "version": "2.27.2", "resolved": "https://registry.npmmirror.com/@tiptap/extension-image/-/extension-image-2.27.2.tgz", "integrity": "sha512-5zL/BY41FIt72azVrCrv3n+2YJ/JyO8wxCcA4Dk1eXIobcgVyIdo4rG39gCqIOiqziAsqnqoj12QHTBtHsJ6mQ==", + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" @@ -1143,6 +1266,7 @@ "version": "2.27.2", "resolved": "https://registry.npmmirror.com/@tiptap/extension-italic/-/extension-italic-2.27.2.tgz", "integrity": "sha512-1OFsw2SZqfaqx5Fa5v90iNlPRcqyt+lVSjBwTDzuPxTPFY4Q0mL89mKgkq2gVHYNCiaRkXvFLDxaSvBWbmthgg==", + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" @@ -1155,6 +1279,7 @@ "version": "2.27.2", "resolved": "https://registry.npmmirror.com/@tiptap/extension-link/-/extension-link-2.27.2.tgz", "integrity": "sha512-bnP61qkr0Kj9Cgnop1hxn2zbOCBzNtmawxr92bVTOE31fJv6FhtCnQiD6tuPQVGMYhcmAj7eihtvuEMFfqEPcQ==", + "license": "MIT", "dependencies": { "linkifyjs": "^4.3.2" }, @@ -1171,6 +1296,7 @@ "version": "2.27.2", "resolved": "https://registry.npmmirror.com/@tiptap/extension-list-item/-/extension-list-item-2.27.2.tgz", "integrity": "sha512-eJNee7IEGXMnmygM5SdMGDC8m/lMWmwNGf9fPCK6xk0NxuQRgmZHL6uApKcdH6gyNcRPHCqvTTkhEP7pbny/fg==", + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" @@ -1183,6 +1309,7 @@ "version": "2.27.2", "resolved": "https://registry.npmmirror.com/@tiptap/extension-ordered-list/-/extension-ordered-list-2.27.2.tgz", "integrity": "sha512-M7A4tLGJcLPYdLC4CI2Gwl8LOrENQW59u3cMVa+KkwG1hzSJyPsbDpa1DI6oXPC2WtYiTf22zrbq3gVvH+KA2w==", + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" @@ -1195,6 +1322,7 @@ "version": "2.27.2", "resolved": "https://registry.npmmirror.com/@tiptap/extension-paragraph/-/extension-paragraph-2.27.2.tgz", "integrity": "sha512-elYVn2wHJJ+zB9LESENWOAfI4TNT0jqEN34sMA/hCtA4im1ZG2DdLHwkHIshj/c4H0dzQhmsS/YmNC5Vbqab/A==", + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" @@ -1207,6 +1335,7 @@ "version": "2.27.2", "resolved": "https://registry.npmmirror.com/@tiptap/extension-placeholder/-/extension-placeholder-2.27.2.tgz", "integrity": "sha512-IjsgSVYJRjpAKmIoapU0E2R4E2FPY3kpvU7/1i7PUYisylqejSJxmtJPGYw0FOMQY9oxnEEvfZHMBA610tqKpg==", + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" @@ -1220,6 +1349,7 @@ "version": "2.27.2", "resolved": "https://registry.npmmirror.com/@tiptap/extension-strike/-/extension-strike-2.27.2.tgz", "integrity": "sha512-HHIjhafLhS2lHgfAsCwC1okqMsQzR4/mkGDm4M583Yftyjri1TNA7lzhzXWRFWiiMfJxKtdjHjUAQaHuteRTZw==", + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" @@ -1232,6 +1362,7 @@ "version": "2.27.2", "resolved": "https://registry.npmmirror.com/@tiptap/extension-text/-/extension-text-2.27.2.tgz", "integrity": "sha512-Xk7nYcigljAY0GO9hAQpZ65ZCxqOqaAlTPDFcKerXmlkQZP/8ndx95OgUb1Xf63kmPOh3xypurGS2is3v0MXSA==", + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" @@ -1244,6 +1375,7 @@ "version": "2.27.2", "resolved": "https://registry.npmmirror.com/@tiptap/extension-text-style/-/extension-text-style-2.27.2.tgz", "integrity": "sha512-Omk+uxjJLyEY69KStpCw5fA9asvV+MGcAX2HOxyISDFoLaL49TMrNjhGAuz09P1L1b0KGXo4ml7Q3v/Lfy4WPA==", + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" @@ -1256,6 +1388,7 @@ "version": "2.27.2", "resolved": "https://registry.npmmirror.com/@tiptap/pm/-/pm-2.27.2.tgz", "integrity": "sha512-kaEg7BfiJPDQMKbjVIzEPO3wlcA+pZb2tlcK9gPrdDnEFaec2QTF1sXz2ak2IIb2curvnIrQ4yrfHgLlVA72wA==", + "license": "MIT", "dependencies": { "prosemirror-changeset": "^2.3.0", "prosemirror-collab": "^1.3.1", @@ -1285,6 +1418,7 @@ "version": "2.27.2", "resolved": "https://registry.npmmirror.com/@tiptap/starter-kit/-/starter-kit-2.27.2.tgz", "integrity": "sha512-bb0gJvPoDuyRUQ/iuN52j1//EtWWttw+RXAv1uJxfR0uKf8X7uAqzaOOgwjknoCIDC97+1YHwpGdnRjpDkOBxw==", + "license": "MIT", "dependencies": { "@tiptap/core": "^2.27.2", "@tiptap/extension-blockquote": "^2.27.2", @@ -1317,6 +1451,7 @@ "version": "2.27.2", "resolved": "https://registry.npmmirror.com/@tiptap/vue-3/-/vue-3-2.27.2.tgz", "integrity": "sha512-NahnVLTAQsbLaNU9nGLdGCr88nAeQZJTejjBVQc3EzMdijmE46R44Rosj6O/pj3e7eLj1/gYvc+U/hIVbxMpoQ==", + "license": "MIT", "dependencies": { "@tiptap/extension-bubble-menu": "^2.27.2", "@tiptap/extension-floating-menu": "^2.27.2" @@ -1335,22 +1470,26 @@ "version": "1.0.9", "resolved": "https://registry.npmmirror.com/@types/estree/-/estree-1.0.9.tgz", "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/linkify-it": { "version": "5.0.0", "resolved": "https://registry.npmmirror.com/@types/linkify-it/-/linkify-it-5.0.0.tgz", - "integrity": "sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==" + "integrity": "sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==", + "license": "MIT" }, "node_modules/@types/lodash": { "version": "4.17.24", "resolved": "https://registry.npmmirror.com/@types/lodash/-/lodash-4.17.24.tgz", - "integrity": "sha512-gIW7lQLZbue7lRSWEFql49QJJWThrTFFeIMJdp3eH4tKoxm1OvEPg02rm4wCCSHS0cL3/Fizimb35b7k8atwsQ==" + "integrity": "sha512-gIW7lQLZbue7lRSWEFql49QJJWThrTFFeIMJdp3eH4tKoxm1OvEPg02rm4wCCSHS0cL3/Fizimb35b7k8atwsQ==", + "license": "MIT" }, "node_modules/@types/lodash-es": { "version": "4.17.12", "resolved": "https://registry.npmmirror.com/@types/lodash-es/-/lodash-es-4.17.12.tgz", "integrity": "sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==", + "license": "MIT", "dependencies": { "@types/lodash": "*" } @@ -1359,6 +1498,7 @@ "version": "14.1.2", "resolved": "https://registry.npmmirror.com/@types/markdown-it/-/markdown-it-14.1.2.tgz", "integrity": "sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==", + "license": "MIT", "dependencies": { "@types/linkify-it": "^5", "@types/mdurl": "^2" @@ -1367,18 +1507,21 @@ "node_modules/@types/mdurl": { "version": "2.0.0", "resolved": "https://registry.npmmirror.com/@types/mdurl/-/mdurl-2.0.0.tgz", - "integrity": "sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==" + "integrity": "sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==", + "license": "MIT" }, "node_modules/@types/web-bluetooth": { "version": "0.0.21", "resolved": "https://registry.npmmirror.com/@types/web-bluetooth/-/web-bluetooth-0.0.21.tgz", - "integrity": "sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA==" + "integrity": "sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA==", + "license": "MIT" }, "node_modules/@vitejs/plugin-vue": { "version": "5.2.4", "resolved": "https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-5.2.4.tgz", "integrity": "sha512-7Yx/SXSOcQq5HiiV3orevHUFn+pmMB4cgbEkDYgnkUWb0WfeQ/wa2yFv6D5ICiCQOVpjA7vYDXrC7AGO8yjDHA==", "dev": true, + "license": "MIT", "engines": { "node": "^18.0.0 || >=20.0.0" }, @@ -1391,6 +1534,7 @@ "version": "3.5.34", "resolved": "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.5.34.tgz", "integrity": "sha512-s9cLyK5mLcvZ4Agva5QgRsQyLKvts9WbU9DB6NqiZkkGEdwmcEiylj5Jbwkp680drF/NNCV8OlAJSe+yMLxaJw==", + "license": "MIT", "dependencies": { "@babel/parser": "^7.29.3", "@vue/shared": "3.5.34", @@ -1403,6 +1547,7 @@ "version": "7.0.1", "resolved": "https://registry.npmmirror.com/entities/-/entities-7.0.1.tgz", "integrity": "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==", + "license": "BSD-2-Clause", "engines": { "node": ">=0.12" }, @@ -1414,6 +1559,7 @@ "version": "3.5.34", "resolved": "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.5.34.tgz", "integrity": "sha512-EbF/T++k0e2MMZlJsBhzK8Sgwt0HcIPOhzn1CTB/lv6sQcyk+OWf8YeiLxZp3ro7MbbLcAfAJ6sEvjFWuNgUCw==", + "license": "MIT", "dependencies": { "@vue/compiler-core": "3.5.34", "@vue/shared": "3.5.34" @@ -1423,6 +1569,7 @@ "version": "3.5.34", "resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.5.34.tgz", "integrity": "sha512-D/ihr6uZeIt6r+pVZf46RWT1fAsLFMbUP7k8G1VkiiWexriED9GrX3echHd4Abbt17zjlfiFJ8z7a3BxZOPNjg==", + "license": "MIT", "dependencies": { "@babel/parser": "^7.29.3", "@vue/compiler-core": "3.5.34", @@ -1439,6 +1586,7 @@ "version": "3.5.34", "resolved": "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.5.34.tgz", "integrity": "sha512-cDtTHKibkThKGHH1SP+WdccquNRYQDFH6rRjQCqT9G2ltFAfoR5pUftpab/z+aM5mW9HLLVQW7hfKKQe/1GBeQ==", + "license": "MIT", "dependencies": { "@vue/compiler-dom": "3.5.34", "@vue/shared": "3.5.34" @@ -1447,12 +1595,14 @@ "node_modules/@vue/devtools-api": { "version": "6.6.4", "resolved": "https://registry.npmmirror.com/@vue/devtools-api/-/devtools-api-6.6.4.tgz", - "integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==" + "integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==", + "license": "MIT" }, "node_modules/@vue/reactivity": { "version": "3.5.34", "resolved": "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.5.34.tgz", "integrity": "sha512-y9XDjCEuBp+98k+UL5dbYkh57AHU4o6cxZedOPXw3bmrZZYLQsVHguGurq7hVrPCSrQtrnz1f9dssyFr+dMXfQ==", + "license": "MIT", "dependencies": { "@vue/shared": "3.5.34" } @@ -1461,6 +1611,7 @@ "version": "3.5.34", "resolved": "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.5.34.tgz", "integrity": "sha512-mKeBYvu8tcMSLhypAHBmriUFfWXKTCF/23Z4jiCoYK3UtWepkliViNLuR90V9XOyD62mUxs9p1jsrpK3CCGIzw==", + "license": "MIT", "dependencies": { "@vue/reactivity": "3.5.34", "@vue/shared": "3.5.34" @@ -1470,6 +1621,7 @@ "version": "3.5.34", "resolved": "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.5.34.tgz", "integrity": "sha512-e8kZzERmCwUnBRVsgSQlAfrfU2rGoy0FFKPBXSlfEjc/O3KfA7QP0t1/2ZylrbchjmIKB4dPTd07A6WPr0eOrg==", + "license": "MIT", "dependencies": { "@vue/reactivity": "3.5.34", "@vue/runtime-core": "3.5.34", @@ -1481,6 +1633,7 @@ "version": "3.5.34", "resolved": "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.5.34.tgz", "integrity": "sha512-nHxmJoTrKsmrkbILRhkC9gY1G3moZbJTqCzDd7DOOzG5KH9oeJ0Unqrff5f9v0pW//jES05ZkJcNtfE8JjOIew==", + "license": "MIT", "dependencies": { "@vue/compiler-ssr": "3.5.34", "@vue/shared": "3.5.34" @@ -1492,12 +1645,14 @@ "node_modules/@vue/shared": { "version": "3.5.34", "resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.5.34.tgz", - "integrity": "sha512-24uqU4OIiX29ryC3MeWid/Xf2fa2EFRUVLb77nRhk+UrTVrh/XiGtFAFmJBAtBRbjwNdsPRP+jj/OL27Eg1NDA==" + "integrity": "sha512-24uqU4OIiX29ryC3MeWid/Xf2fa2EFRUVLb77nRhk+UrTVrh/XiGtFAFmJBAtBRbjwNdsPRP+jj/OL27Eg1NDA==", + "license": "MIT" }, "node_modules/@vueuse/core": { "version": "14.3.0", "resolved": "https://registry.npmmirror.com/@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", @@ -1514,6 +1669,7 @@ "version": "14.3.0", "resolved": "https://registry.npmmirror.com/@vueuse/metadata/-/metadata-14.3.0.tgz", "integrity": "sha512-BwxmbAzwAVF50+MW57GXOUEV61nFBGnlBvrTqj49PqWJu3uw7hdu72ztXeZ33RdZtDY6kO+bfCAE1PCn88Tktw==", + "license": "MIT", "funding": { "url": "https://github.com/sponsors/antfu" } @@ -1522,6 +1678,7 @@ "version": "14.3.0", "resolved": "https://registry.npmmirror.com/@vueuse/shared/-/shared-14.3.0.tgz", "integrity": "sha512-bZpge9eSXwa4ToSiqJ7j6KRwhAsneMFoSz3LMWKQDkqimm3D/tbFlrklrs/IOqC8tEcYmXQZJ6N0UrjhBirVCg==", + "license": "MIT", "funding": { "url": "https://github.com/sponsors/antfu" }, @@ -1534,6 +1691,7 @@ "resolved": "https://registry.npmmirror.com/acorn/-/acorn-8.16.0.tgz", "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", "dev": true, + "license": "MIT", "bin": { "acorn": "bin/acorn" }, @@ -1545,6 +1703,7 @@ "version": "6.0.2", "resolved": "https://registry.npmmirror.com/agent-base/-/agent-base-6.0.2.tgz", "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "license": "MIT", "dependencies": { "debug": "4" }, @@ -1557,6 +1716,7 @@ "resolved": "https://registry.npmmirror.com/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" @@ -1570,6 +1730,7 @@ "resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.2.tgz", "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8.6" }, @@ -1580,22 +1741,26 @@ "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmmirror.com/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "license": "Python-2.0" }, "node_modules/async-validator": { "version": "4.2.5", "resolved": "https://registry.npmmirror.com/async-validator/-/async-validator-4.2.5.tgz", - "integrity": "sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==" + "integrity": "sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==", + "license": "MIT" }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmmirror.com/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "license": "MIT" }, "node_modules/axios": { "version": "1.16.1", "resolved": "https://registry.npmmirror.com/axios/-/axios-1.16.1.tgz", "integrity": "sha512-caYkukvroVPO8KrzuJEb50Hm07KwfBZPEC3VeFHTsqWHvKTsy54hjJz9BS/cdaypROE2rH6xvm9mHX4fgWkr3A==", + "license": "MIT", "dependencies": { "follow-redirects": "^1.16.0", "form-data": "^4.0.5", @@ -1607,13 +1772,15 @@ "version": "1.0.2", "resolved": "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/binary-extensions": { "version": "2.3.0", "resolved": "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.3.0.tgz", "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" }, @@ -1626,6 +1793,7 @@ "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-2.1.0.tgz", "integrity": "sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } @@ -1635,6 +1803,7 @@ "resolved": "https://registry.npmmirror.com/braces/-/braces-3.0.3.tgz", "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, + "license": "MIT", "dependencies": { "fill-range": "^7.1.1" }, @@ -1646,6 +1815,7 @@ "version": "1.0.2", "resolved": "https://registry.npmmirror.com/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" @@ -1659,6 +1829,7 @@ "resolved": "https://registry.npmmirror.com/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", @@ -1682,6 +1853,7 @@ "version": "1.0.8", "resolved": "https://registry.npmmirror.com/combined-stream/-/combined-stream-1.0.8.tgz", "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "license": "MIT", "dependencies": { "delayed-stream": "~1.0.0" }, @@ -1693,27 +1865,32 @@ "version": "0.1.8", "resolved": "https://registry.npmmirror.com/confbox/-/confbox-0.1.8.tgz", "integrity": "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/crelt": { "version": "1.0.6", "resolved": "https://registry.npmmirror.com/crelt/-/crelt-1.0.6.tgz", - "integrity": "sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==" + "integrity": "sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==", + "license": "MIT" }, "node_modules/csstype": { "version": "3.2.3", "resolved": "https://registry.npmmirror.com/csstype/-/csstype-3.2.3.tgz", - "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==" + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "license": "MIT" }, "node_modules/dayjs": { "version": "1.11.20", "resolved": "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.20.tgz", - "integrity": "sha512-YbwwqR/uYpeoP4pu043q+LTDLFBLApUP6VxRihdfNTqu4ubqMlGDLd6ErXhEgsyvY0K6nCs7nggYumAN+9uEuQ==" + "integrity": "sha512-YbwwqR/uYpeoP4pu043q+LTDLFBLApUP6VxRihdfNTqu4ubqMlGDLd6ErXhEgsyvY0K6nCs7nggYumAN+9uEuQ==", + "license": "MIT" }, "node_modules/debug": { "version": "4.4.3", "resolved": "https://registry.npmmirror.com/debug/-/debug-4.4.3.tgz", "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", "dependencies": { "ms": "^2.1.3" }, @@ -1730,6 +1907,7 @@ "version": "1.0.0", "resolved": "https://registry.npmmirror.com/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "license": "MIT", "engines": { "node": ">=0.4.0" } @@ -1738,6 +1916,7 @@ "version": "1.0.1", "resolved": "https://registry.npmmirror.com/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", @@ -1751,6 +1930,7 @@ "version": "2.14.0", "resolved": "https://registry.npmmirror.com/element-plus/-/element-plus-2.14.0.tgz", "integrity": "sha512-POgH+TtoreaEKWqYYAVQyE6i8rQMEFqAEublyF29dBA5yASWPLKY6EzfeqBTr2Uv26mPss4vSrMrNPyaK7LX5w==", + "license": "MIT", "dependencies": { "@ctrl/tinycolor": "^4.2.0", "@element-plus/icons-vue": "^2.3.2", @@ -1776,6 +1956,7 @@ "version": "4.5.0", "resolved": "https://registry.npmmirror.com/entities/-/entities-4.5.0.tgz", "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "license": "BSD-2-Clause", "engines": { "node": ">=0.12" }, @@ -1787,6 +1968,7 @@ "version": "1.0.1", "resolved": "https://registry.npmmirror.com/es-define-property/-/es-define-property-1.0.1.tgz", "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", "engines": { "node": ">= 0.4" } @@ -1795,14 +1977,16 @@ "version": "1.3.0", "resolved": "https://registry.npmmirror.com/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.npmmirror.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/es-object-atoms/-/es-object-atoms-1.1.2.tgz", + "integrity": "sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==", + "license": "MIT", "dependencies": { "es-errors": "^1.3.0" }, @@ -1814,6 +1998,7 @@ "version": "2.1.0", "resolved": "https://registry.npmmirror.com/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", @@ -1830,6 +2015,7 @@ "integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==", "dev": true, "hasInstallScript": true, + "license": "MIT", "bin": { "esbuild": "bin/esbuild" }, @@ -1869,6 +2055,7 @@ "version": "4.0.0", "resolved": "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "license": "MIT", "engines": { "node": ">=10" }, @@ -1879,19 +2066,22 @@ "node_modules/estree-walker": { "version": "2.0.2", "resolved": "https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "license": "MIT" }, "node_modules/exsolve": { "version": "1.0.8", "resolved": "https://registry.npmmirror.com/exsolve/-/exsolve-1.0.8.tgz", "integrity": "sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fast-glob": { "version": "3.3.3", "resolved": "https://registry.npmmirror.com/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", @@ -1908,6 +2098,7 @@ "resolved": "https://registry.npmmirror.com/fastq/-/fastq-1.20.1.tgz", "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", "dev": true, + "license": "ISC", "dependencies": { "reusify": "^1.0.4" } @@ -1917,6 +2108,7 @@ "resolved": "https://registry.npmmirror.com/fdir/-/fdir-6.5.0.tgz", "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", "dev": true, + "license": "MIT", "engines": { "node": ">=12.0.0" }, @@ -1934,6 +2126,7 @@ "resolved": "https://registry.npmmirror.com/fill-range/-/fill-range-7.1.1.tgz", "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, + "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" }, @@ -1951,6 +2144,7 @@ "url": "https://github.com/sponsors/RubenVerborgh" } ], + "license": "MIT", "engines": { "node": ">=4.0" }, @@ -1964,6 +2158,7 @@ "version": "4.0.5", "resolved": "https://registry.npmmirror.com/form-data/-/form-data-4.0.5.tgz", "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", + "license": "MIT", "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", @@ -1981,6 +2176,7 @@ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, "hasInstallScript": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -1993,6 +2189,7 @@ "version": "1.1.2", "resolved": "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.2.tgz", "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -2001,6 +2198,7 @@ "version": "1.3.0", "resolved": "https://registry.npmmirror.com/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", @@ -2024,6 +2222,7 @@ "version": "1.0.1", "resolved": "https://registry.npmmirror.com/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" @@ -2037,6 +2236,7 @@ "resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, + "license": "ISC", "dependencies": { "is-glob": "^4.0.1" }, @@ -2048,6 +2248,7 @@ "version": "1.2.0", "resolved": "https://registry.npmmirror.com/gopd/-/gopd-1.2.0.tgz", "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -2059,6 +2260,7 @@ "version": "1.1.0", "resolved": "https://registry.npmmirror.com/has-symbols/-/has-symbols-1.1.0.tgz", "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -2070,6 +2272,7 @@ "version": "1.0.2", "resolved": "https://registry.npmmirror.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz", "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "license": "MIT", "dependencies": { "has-symbols": "^1.0.3" }, @@ -2084,6 +2287,7 @@ "version": "2.0.3", "resolved": "https://registry.npmmirror.com/hasown/-/hasown-2.0.3.tgz", "integrity": "sha512-ej4AhfhfL2Q2zpMmLo7U1Uv9+PyhIZpgQLGT1F9miIGmiCJIoCgSmczFdrc97mWT4kVY72KA+WnnhJ5pghSvSg==", + "license": "MIT", "dependencies": { "function-bind": "^1.1.2" }, @@ -2095,6 +2299,7 @@ "version": "5.0.1", "resolved": "https://registry.npmmirror.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "license": "MIT", "dependencies": { "agent-base": "6", "debug": "4" @@ -2108,6 +2313,7 @@ "resolved": "https://registry.npmmirror.com/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" }, @@ -2120,6 +2326,7 @@ "resolved": "https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -2129,6 +2336,7 @@ "resolved": "https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, + "license": "MIT", "dependencies": { "is-extglob": "^2.1.1" }, @@ -2141,6 +2349,7 @@ "resolved": "https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.12.0" } @@ -2149,12 +2358,24 @@ "version": "9.0.1", "resolved": "https://registry.npmmirror.com/js-tokens/-/js-tokens-9.0.1.tgz", "integrity": "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/linkify-it": { - "version": "5.0.0", - "resolved": "https://registry.npmmirror.com/linkify-it/-/linkify-it-5.0.0.tgz", - "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==", + "version": "5.0.1", + "resolved": "https://registry.npmmirror.com/linkify-it/-/linkify-it-5.0.1.tgz", + "integrity": "sha512-wVoTjP4Q6R0NW5hiZkVJaFZPWgtXfoGF+6LucL3/FtiNjmcHhYjEr5f1Kqjirc1nBW07J/ZuRFumqr2oqccEWg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/puzrin" + }, + { + "type": "github", + "url": "https://github.com/sponsors/markdown-it" + } + ], + "license": "MIT", "dependencies": { "uc.micro": "^2.0.0" } @@ -2162,13 +2383,15 @@ "node_modules/linkifyjs": { "version": "4.3.3", "resolved": "https://registry.npmmirror.com/linkifyjs/-/linkifyjs-4.3.3.tgz", - "integrity": "sha512-P8aEP5U/D1/IlTY2OeYsErdwh9bGuLE30NcXtKEjgdHcahveQoQwM2yZNsioQHsWFz0P7KKudisbrzCgR0sDHg==" + "integrity": "sha512-P8aEP5U/D1/IlTY2OeYsErdwh9bGuLE30NcXtKEjgdHcahveQoQwM2yZNsioQHsWFz0P7KKudisbrzCgR0sDHg==", + "license": "MIT" }, "node_modules/local-pkg": { "version": "0.5.1", "resolved": "https://registry.npmmirror.com/local-pkg/-/local-pkg-0.5.1.tgz", "integrity": "sha512-9rrA30MRRP3gBD3HTGnC6cDFpaE1kVDWxWgqWJUN0RvDNAo+Nz/9GxB+nHOH0ifbVFy0hSA1V6vFDvnx54lTEQ==", "dev": true, + "license": "MIT", "dependencies": { "mlly": "^1.7.3", "pkg-types": "^1.2.1" @@ -2183,17 +2406,20 @@ "node_modules/lodash": { "version": "4.18.1", "resolved": "https://registry.npmmirror.com/lodash/-/lodash-4.18.1.tgz", - "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==" + "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==", + "license": "MIT" }, "node_modules/lodash-es": { "version": "4.18.1", "resolved": "https://registry.npmmirror.com/lodash-es/-/lodash-es-4.18.1.tgz", - "integrity": "sha512-J8xewKD/Gk22OZbhpOVSwcs60zhd95ESDwezOFuA3/099925PdHJ7OFHNTGtajL3AlZkykD32HykiMo+BIBI8A==" + "integrity": "sha512-J8xewKD/Gk22OZbhpOVSwcs60zhd95ESDwezOFuA3/099925PdHJ7OFHNTGtajL3AlZkykD32HykiMo+BIBI8A==", + "license": "MIT" }, "node_modules/lodash-unified": { "version": "1.0.3", "resolved": "https://registry.npmmirror.com/lodash-unified/-/lodash-unified-1.0.3.tgz", "integrity": "sha512-WK9qSozxXOD7ZJQlpSqOT+om2ZfcT4yO+03FuzAHD0wF6S0l0090LRPDx3vhTTLZ8cFKpBn+IOcVXK6qOcIlfQ==", + "license": "MIT", "peerDependencies": { "@types/lodash-es": "*", "lodash": "*", @@ -2204,6 +2430,7 @@ "version": "0.30.21", "resolved": "https://registry.npmmirror.com/magic-string/-/magic-string-0.30.21.tgz", "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "license": "MIT", "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.5" } @@ -2212,6 +2439,7 @@ "version": "14.1.1", "resolved": "https://registry.npmmirror.com/markdown-it/-/markdown-it-14.1.1.tgz", "integrity": "sha512-BuU2qnTti9YKgK5N+IeMubp14ZUKUUw7yeJbkjtosvHiP0AZ5c8IAgEMk79D0eC8F23r4Ac/q8cAIFdm2FtyoA==", + "license": "MIT", "dependencies": { "argparse": "^2.0.1", "entities": "^4.4.0", @@ -2228,6 +2456,7 @@ "version": "1.1.0", "resolved": "https://registry.npmmirror.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz", "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", "engines": { "node": ">= 0.4" } @@ -2235,18 +2464,21 @@ "node_modules/mdurl": { "version": "2.0.0", "resolved": "https://registry.npmmirror.com/mdurl/-/mdurl-2.0.0.tgz", - "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==" + "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==", + "license": "MIT" }, "node_modules/memoize-one": { "version": "6.0.0", "resolved": "https://registry.npmmirror.com/memoize-one/-/memoize-one-6.0.0.tgz", - "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==" + "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==", + "license": "MIT" }, "node_modules/merge2": { "version": "1.4.1", "resolved": "https://registry.npmmirror.com/merge2/-/merge2-1.4.1.tgz", "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 8" } @@ -2256,6 +2488,7 @@ "resolved": "https://registry.npmmirror.com/micromatch/-/micromatch-4.0.8.tgz", "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, + "license": "MIT", "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" @@ -2269,6 +2502,7 @@ "resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.2.tgz", "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8.6" }, @@ -2280,6 +2514,7 @@ "version": "1.52.0", "resolved": "https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz", "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -2288,6 +2523,7 @@ "version": "2.1.35", "resolved": "https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz", "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", "dependencies": { "mime-db": "1.52.0" }, @@ -2300,6 +2536,7 @@ "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-9.0.9.tgz", "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.2" }, @@ -2315,6 +2552,7 @@ "resolved": "https://registry.npmmirror.com/mlly/-/mlly-1.8.2.tgz", "integrity": "sha512-d+ObxMQFmbt10sretNDytwt85VrbkhhUA/JBGm1MPaWJ65Cl4wOgLaB1NYvJSZ0Ef03MMEU/0xpPMXUIQ29UfA==", "dev": true, + "license": "MIT", "dependencies": { "acorn": "^8.16.0", "pathe": "^2.0.3", @@ -2325,7 +2563,8 @@ "node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" }, "node_modules/nanoid": { "version": "3.3.12", @@ -2337,6 +2576,7 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -2349,6 +2589,7 @@ "resolved": "https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -2356,29 +2597,34 @@ "node_modules/normalize-wheel-es": { "version": "1.2.0", "resolved": "https://registry.npmmirror.com/normalize-wheel-es/-/normalize-wheel-es-1.2.0.tgz", - "integrity": "sha512-Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw==" + "integrity": "sha512-Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw==", + "license": "BSD-3-Clause" }, "node_modules/orderedmap": { "version": "2.1.1", "resolved": "https://registry.npmmirror.com/orderedmap/-/orderedmap-2.1.1.tgz", - "integrity": "sha512-TvAWxi0nDe1j/rtMcWcIj94+Ffe6n7zhow33h40SKxmsmozs6dz/e+EajymfoFcHd7sxNn8yHM8839uixMOV6g==" + "integrity": "sha512-TvAWxi0nDe1j/rtMcWcIj94+Ffe6n7zhow33h40SKxmsmozs6dz/e+EajymfoFcHd7sxNn8yHM8839uixMOV6g==", + "license": "MIT" }, "node_modules/pathe": { "version": "2.0.3", "resolved": "https://registry.npmmirror.com/pathe/-/pathe-2.0.3.tgz", "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==" + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" }, "node_modules/picomatch": { "version": "4.0.4", "resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-4.0.4.tgz", "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -2390,6 +2636,7 @@ "version": "2.3.1", "resolved": "https://registry.npmmirror.com/pinia/-/pinia-2.3.1.tgz", "integrity": "sha512-khUlZSwt9xXCaTbbxFYBKDc/bWAGWJjOgvxETwkTN7KRm66EeT1ZdZj6i2ceh9sP2Pzqsbc704r2yngBrxBVug==", + "license": "MIT", "dependencies": { "@vue/devtools-api": "^6.6.3", "vue-demi": "^0.14.10" @@ -2412,6 +2659,7 @@ "resolved": "https://registry.npmmirror.com/pkg-types/-/pkg-types-1.3.1.tgz", "integrity": "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==", "dev": true, + "license": "MIT", "dependencies": { "confbox": "^0.1.8", "mlly": "^1.7.4", @@ -2419,9 +2667,9 @@ } }, "node_modules/postcss": { - "version": "8.5.14", - "resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.5.14.tgz", - "integrity": "sha512-SoSL4+OSEtR99LHFZQiJLkT59C5B1amGO1NzTwj7TT1qCUgUO6hxOvzkOYxD+vMrXBM3XJIKzokoERdqQq/Zmg==", + "version": "8.5.15", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.5.15.tgz", + "integrity": "sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==", "funding": [ { "type": "opencollective", @@ -2436,8 +2684,9 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { - "nanoid": "^3.3.11", + "nanoid": "^3.3.12", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" }, @@ -2449,6 +2698,7 @@ "version": "2.4.1", "resolved": "https://registry.npmmirror.com/prosemirror-changeset/-/prosemirror-changeset-2.4.1.tgz", "integrity": "sha512-96WBLhOaYhJ+kPhLg3uW359Tz6I/MfcrQfL4EGv4SrcqKEMC1gmoGrXHecPE8eOwTVCJ4IwgfzM8fFad25wNfw==", + "license": "MIT", "dependencies": { "prosemirror-transform": "^1.0.0" } @@ -2457,6 +2707,7 @@ "version": "1.3.1", "resolved": "https://registry.npmmirror.com/prosemirror-collab/-/prosemirror-collab-1.3.1.tgz", "integrity": "sha512-4SnynYR9TTYaQVXd/ieUvsVV4PDMBzrq2xPUWutHivDuOshZXqQ5rGbZM84HEaXKbLdItse7weMGOUdDVcLKEQ==", + "license": "MIT", "dependencies": { "prosemirror-state": "^1.0.0" } @@ -2465,6 +2716,7 @@ "version": "1.7.1", "resolved": "https://registry.npmmirror.com/prosemirror-commands/-/prosemirror-commands-1.7.1.tgz", "integrity": "sha512-rT7qZnQtx5c0/y/KlYaGvtG411S97UaL6gdp6RIZ23DLHanMYLyfGBV5DtSnZdthQql7W+lEVbpSfwtO8T+L2w==", + "license": "MIT", "dependencies": { "prosemirror-model": "^1.0.0", "prosemirror-state": "^1.0.0", @@ -2475,6 +2727,7 @@ "version": "1.8.2", "resolved": "https://registry.npmmirror.com/prosemirror-dropcursor/-/prosemirror-dropcursor-1.8.2.tgz", "integrity": "sha512-CCk6Gyx9+Tt2sbYk5NK0nB1ukHi2ryaRgadV/LvyNuO3ena1payM2z6Cg0vO1ebK8cxbzo41ku2DE5Axj1Zuiw==", + "license": "MIT", "dependencies": { "prosemirror-state": "^1.0.0", "prosemirror-transform": "^1.1.0", @@ -2485,6 +2738,7 @@ "version": "1.4.1", "resolved": "https://registry.npmmirror.com/prosemirror-gapcursor/-/prosemirror-gapcursor-1.4.1.tgz", "integrity": "sha512-pMdYaEnjNMSwl11yjEGtgTmLkR08m/Vl+Jj443167p9eB3HVQKhYCc4gmHVDsLPODfZfjr/MmirsdyZziXbQKw==", + "license": "MIT", "dependencies": { "prosemirror-keymap": "^1.0.0", "prosemirror-model": "^1.0.0", @@ -2496,6 +2750,7 @@ "version": "1.5.0", "resolved": "https://registry.npmmirror.com/prosemirror-history/-/prosemirror-history-1.5.0.tgz", "integrity": "sha512-zlzTiH01eKA55UAf1MEjtssJeHnGxO0j4K4Dpx+gnmX9n+SHNlDqI2oO1Kv1iPN5B1dm5fsljCfqKF9nFL6HRg==", + "license": "MIT", "dependencies": { "prosemirror-state": "^1.2.2", "prosemirror-transform": "^1.0.0", @@ -2507,6 +2762,7 @@ "version": "1.5.1", "resolved": "https://registry.npmmirror.com/prosemirror-inputrules/-/prosemirror-inputrules-1.5.1.tgz", "integrity": "sha512-7wj4uMjKaXWAQ1CDgxNzNtR9AlsuwzHfdFH1ygEHA2KHF2DOEaXl1CJfNPAKCg9qNEh4rum975QLaCiQPyY6Fw==", + "license": "MIT", "dependencies": { "prosemirror-state": "^1.0.0", "prosemirror-transform": "^1.0.0" @@ -2516,6 +2772,7 @@ "version": "1.2.3", "resolved": "https://registry.npmmirror.com/prosemirror-keymap/-/prosemirror-keymap-1.2.3.tgz", "integrity": "sha512-4HucRlpiLd1IPQQXNqeo81BGtkY8Ai5smHhKW9jjPKRc2wQIxksg7Hl1tTI2IfT2B/LgX6bfYvXxEpJl7aKYKw==", + "license": "MIT", "dependencies": { "prosemirror-state": "^1.0.0", "w3c-keyname": "^2.2.0" @@ -2525,6 +2782,7 @@ "version": "1.13.4", "resolved": "https://registry.npmmirror.com/prosemirror-markdown/-/prosemirror-markdown-1.13.4.tgz", "integrity": "sha512-D98dm4cQ3Hs6EmjK500TdAOew4Z03EV71ajEFiWra3Upr7diytJsjF4mPV2dW+eK5uNectiRj0xFxYI9NLXDbw==", + "license": "MIT", "dependencies": { "@types/markdown-it": "^14.0.0", "markdown-it": "^14.0.0", @@ -2535,6 +2793,7 @@ "version": "1.3.2", "resolved": "https://registry.npmmirror.com/prosemirror-menu/-/prosemirror-menu-1.3.2.tgz", "integrity": "sha512-6VgUJTYod0nMBlCaYJGhXGLu7Gt4AvcwcOq0YfJCY/6Uh+3S7UsWhpy6rJFCBFOmonq1hD8KyWOtZhkppd4YPg==", + "license": "MIT", "dependencies": { "crelt": "^1.0.0", "prosemirror-commands": "^1.0.0", @@ -2543,9 +2802,10 @@ } }, "node_modules/prosemirror-model": { - "version": "1.25.6", - "resolved": "https://registry.npmmirror.com/prosemirror-model/-/prosemirror-model-1.25.6.tgz", - "integrity": "sha512-RIm+e9BiqAaJ1mRECv3vR3C+VG8ELoTTI+47tVudGi82yLnFOx3G/p/iSPK1HmHQdKhkkrJ68NJqxh7S+FBVmQ==", + "version": "1.25.7", + "resolved": "https://registry.npmmirror.com/prosemirror-model/-/prosemirror-model-1.25.7.tgz", + "integrity": "sha512-A79aN8QEFUwI6cax8Yq4Rpcx1TJZ3Kagn+ii7qLo4/V8H3mMiHrhFyhTyHHvpSnOgMPpWiDGSwM3etwrxE50ug==", + "license": "MIT", "dependencies": { "orderedmap": "^2.0.0" } @@ -2554,6 +2814,7 @@ "version": "1.2.4", "resolved": "https://registry.npmmirror.com/prosemirror-schema-basic/-/prosemirror-schema-basic-1.2.4.tgz", "integrity": "sha512-ELxP4TlX3yr2v5rM7Sb70SqStq5NvI15c0j9j/gjsrO5vaw+fnnpovCLEGIcpeGfifkuqJwl4fon6b+KdrODYQ==", + "license": "MIT", "dependencies": { "prosemirror-model": "^1.25.0" } @@ -2562,6 +2823,7 @@ "version": "1.5.1", "resolved": "https://registry.npmmirror.com/prosemirror-schema-list/-/prosemirror-schema-list-1.5.1.tgz", "integrity": "sha512-927lFx/uwyQaGwJxLWCZRkjXG0p48KpMj6ueoYiu4JX05GGuGcgzAy62dfiV8eFZftgyBUvLx76RsMe20fJl+Q==", + "license": "MIT", "dependencies": { "prosemirror-model": "^1.0.0", "prosemirror-state": "^1.0.0", @@ -2572,6 +2834,7 @@ "version": "1.4.4", "resolved": "https://registry.npmmirror.com/prosemirror-state/-/prosemirror-state-1.4.4.tgz", "integrity": "sha512-6jiYHH2CIGbCfnxdHbXZ12gySFY/fz/ulZE333G6bPqIZ4F+TXo9ifiR86nAHpWnfoNjOb3o5ESi7J8Uz1jXHw==", + "license": "MIT", "dependencies": { "prosemirror-model": "^1.0.0", "prosemirror-transform": "^1.0.0", @@ -2582,6 +2845,7 @@ "version": "1.8.5", "resolved": "https://registry.npmmirror.com/prosemirror-tables/-/prosemirror-tables-1.8.5.tgz", "integrity": "sha512-V/0cDCsHKHe/tfWkeCmthNUcEp1IVO3p6vwN8XtwE9PZQLAZJigbw3QoraAdfJPir4NKJtNvOB8oYGKRl+t0Dw==", + "license": "MIT", "dependencies": { "prosemirror-keymap": "^1.2.3", "prosemirror-model": "^1.25.4", @@ -2594,6 +2858,7 @@ "version": "3.0.0", "resolved": "https://registry.npmmirror.com/prosemirror-trailing-node/-/prosemirror-trailing-node-3.0.0.tgz", "integrity": "sha512-xiun5/3q0w5eRnGYfNlW1uU9W6x5MoFKWwq/0TIRgt09lv7Hcser2QYV8t4muXbEr+Fwo0geYn79Xs4GKywrRQ==", + "license": "MIT", "dependencies": { "@remirror/core-constants": "3.0.0", "escape-string-regexp": "^4.0.0" @@ -2608,6 +2873,7 @@ "version": "1.12.0", "resolved": "https://registry.npmmirror.com/prosemirror-transform/-/prosemirror-transform-1.12.0.tgz", "integrity": "sha512-GxboyN4AMIsoHNtz5uf2r2Ru551i5hWeCMD6E2Ib4Eogqoub0NflniaBPVQ4MrGE5yZ8JV9tUHg9qcZTTrcN4w==", + "license": "MIT", "dependencies": { "prosemirror-model": "^1.21.0" } @@ -2616,6 +2882,7 @@ "version": "1.41.8", "resolved": "https://registry.npmmirror.com/prosemirror-view/-/prosemirror-view-1.41.8.tgz", "integrity": "sha512-TnKDdohEatgyZNGCDWIdccOHXhYloJwbwU+phw/a23KBvJIR9lWQWW7WHHK3vBdOLDNuF7TaX98GObUZOWkOnA==", + "license": "MIT", "dependencies": { "prosemirror-model": "^1.20.0", "prosemirror-state": "^1.0.0", @@ -2626,6 +2893,7 @@ "version": "2.1.0", "resolved": "https://registry.npmmirror.com/proxy-from-env/-/proxy-from-env-2.1.0.tgz", "integrity": "sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==", + "license": "MIT", "engines": { "node": ">=10" } @@ -2634,6 +2902,7 @@ "version": "2.3.1", "resolved": "https://registry.npmmirror.com/punycode.js/-/punycode.js-2.3.1.tgz", "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==", + "license": "MIT", "engines": { "node": ">=6" } @@ -2652,7 +2921,8 @@ "type": "individual", "url": "https://github.com/sponsors/sxzz" } - ] + ], + "license": "MIT" }, "node_modules/queue-microtask": { "version": "1.2.3", @@ -2672,13 +2942,15 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz", "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, + "license": "MIT", "dependencies": { "picomatch": "^2.2.1" }, @@ -2691,6 +2963,7 @@ "resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.2.tgz", "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8.6" }, @@ -2703,6 +2976,7 @@ "resolved": "https://registry.npmmirror.com/reusify/-/reusify-1.1.0.tgz", "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", "dev": true, + "license": "MIT", "engines": { "iojs": ">=1.0.0", "node": ">=0.10.0" @@ -2713,6 +2987,7 @@ "resolved": "https://registry.npmmirror.com/rollup/-/rollup-4.60.4.tgz", "integrity": "sha512-WHeFSbZYsPu3+bLoNRUuAO+wavNlocOPf3wSHTP7hcFKVnJeWsYlCDbr3mTS14FCizf9ccIxXA8sGL8zKeQN3g==", "dev": true, + "license": "MIT", "dependencies": { "@types/estree": "1.0.8" }, @@ -2756,12 +3031,14 @@ "version": "1.0.8", "resolved": "https://registry.npmmirror.com/@types/estree/-/estree-1.0.8.tgz", "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/rope-sequence": { "version": "1.3.4", "resolved": "https://registry.npmmirror.com/rope-sequence/-/rope-sequence-1.3.4.tgz", - "integrity": "sha512-UT5EDe2cu2E/6O4igUr5PSFs23nvvukicWHx6GnOPlHAiiYbzNuCRQCuiUdHJQcqKalLKlrYJnjY0ySGsXNQXQ==" + "integrity": "sha512-UT5EDe2cu2E/6O4igUr5PSFs23nvvukicWHx6GnOPlHAiiYbzNuCRQCuiUdHJQcqKalLKlrYJnjY0ySGsXNQXQ==", + "license": "MIT" }, "node_modules/run-parallel": { "version": "1.2.0", @@ -2782,6 +3059,7 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "queue-microtask": "^1.2.2" } @@ -2790,12 +3068,14 @@ "version": "1.3.0", "resolved": "https://registry.npmmirror.com/scule/-/scule-1.3.0.tgz", "integrity": "sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/source-map-js": { "version": "1.2.1", "resolved": "https://registry.npmmirror.com/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" } @@ -2805,6 +3085,7 @@ "resolved": "https://registry.npmmirror.com/strip-literal/-/strip-literal-2.1.1.tgz", "integrity": "sha512-631UJ6O00eNGfMiWG78ck80dfBab8X6IVFB51jZK5Icd7XAs60Z5y7QdSd/wGIklnWvRbUNloVzhOKKmutxQ6Q==", "dev": true, + "license": "MIT", "dependencies": { "js-tokens": "^9.0.1" }, @@ -2817,6 +3098,7 @@ "resolved": "https://registry.npmmirror.com/tinyglobby/-/tinyglobby-0.2.16.tgz", "integrity": "sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==", "dev": true, + "license": "MIT", "dependencies": { "fdir": "^6.5.0", "picomatch": "^4.0.4" @@ -2832,6 +3114,7 @@ "version": "6.3.7", "resolved": "https://registry.npmmirror.com/tippy.js/-/tippy.js-6.3.7.tgz", "integrity": "sha512-E1d3oP2emgJ9dRQZdf3Kkn0qJgI6ZLpyS5z6ZkY1DF3kaQaBsGZsndEpHwx+eC+tYM41HaSNvNtLx8tU57FzTQ==", + "license": "MIT", "dependencies": { "@popperjs/core": "^2.9.0" } @@ -2841,6 +3124,7 @@ "resolved": "https://registry.npmmirror.com/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" }, @@ -2851,19 +3135,22 @@ "node_modules/uc.micro": { "version": "2.1.0", "resolved": "https://registry.npmmirror.com/uc.micro/-/uc.micro-2.1.0.tgz", - "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==" + "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==", + "license": "MIT" }, "node_modules/ufo": { "version": "1.6.4", "resolved": "https://registry.npmmirror.com/ufo/-/ufo-1.6.4.tgz", "integrity": "sha512-JFNbkD1Svwe0KvGi8GOeLcP4kAWQ609twvCdcHxq1oSL8svv39ZuSvajcD8B+5D0eL4+s1Is2D/O6KN3qcTeRA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/unimport": { "version": "3.14.6", "resolved": "https://registry.npmmirror.com/unimport/-/unimport-3.14.6.tgz", "integrity": "sha512-CYvbDaTT04Rh8bmD8jz3WPmHYZRG/NnvYVzwD6V1YAlvvKROlAeNDUBhkBGzNav2RKaeuXvlWYaa1V4Lfi/O0g==", "dev": true, + "license": "MIT", "dependencies": { "@rollup/pluginutils": "^5.1.4", "acorn": "^8.14.0", @@ -2885,13 +3172,15 @@ "version": "0.2.4", "resolved": "https://registry.npmmirror.com/confbox/-/confbox-0.2.4.tgz", "integrity": "sha512-ysOGlgTFbN2/Y6Cg3Iye8YKulHw+R2fNXHrgSmXISQdMnomY6eNDprVdW9R5xBguEqI954+S6709UyiO7B+6OQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/unimport/node_modules/escape-string-regexp": { "version": "5.0.0", "resolved": "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -2904,15 +3193,17 @@ "resolved": "https://registry.npmmirror.com/estree-walker/-/estree-walker-3.0.3.tgz", "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", "dev": true, + "license": "MIT", "dependencies": { "@types/estree": "^1.0.0" } }, "node_modules/unimport/node_modules/local-pkg": { - "version": "1.1.2", - "resolved": "https://registry.npmmirror.com/local-pkg/-/local-pkg-1.1.2.tgz", - "integrity": "sha512-arhlxbFRmoQHl33a0Zkle/YWlmNwoyt6QNZEIJcqNbdrsix5Lvc4HyyI3EnwxTYlZYc32EbYrQ8SzEZ7dqgg9A==", + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/local-pkg/-/local-pkg-1.2.1.tgz", + "integrity": "sha512-++gUqRDEvcnN6Zhqrr+y/CkVEHhlrR96vZn3nZZPYzMcBUyBtTKzB9NadClFIsIVSsu+3i9tfk/erqy9kAmt7Q==", "dev": true, + "license": "MIT", "dependencies": { "mlly": "^1.7.4", "pkg-types": "^2.3.0", @@ -2930,6 +3221,7 @@ "resolved": "https://registry.npmmirror.com/pkg-types/-/pkg-types-2.3.1.tgz", "integrity": "sha512-y+ichcgc2LrADuhLNAx8DFjVfgz91pRxfZdI3UDhxHvcVEZsenLO+7XaU5vOp0u/7V/wZ+plyuQxtrDlZJ+yeg==", "dev": true, + "license": "MIT", "dependencies": { "confbox": "^0.2.4", "exsolve": "^1.0.8", @@ -2941,6 +3233,7 @@ "resolved": "https://registry.npmmirror.com/unplugin/-/unplugin-1.16.1.tgz", "integrity": "sha512-4/u/j4FrCKdi17jaxuJA0jClGxB1AvU2hw/IuayPc4ay1XGaJs/rbb4v5WKwAjNifjmXK9PIFyuPiaK8azyR9w==", "dev": true, + "license": "MIT", "dependencies": { "acorn": "^8.14.0", "webpack-virtual-modules": "^0.6.2" @@ -2954,6 +3247,7 @@ "resolved": "https://registry.npmmirror.com/unplugin-auto-import/-/unplugin-auto-import-0.18.6.tgz", "integrity": "sha512-LMFzX5DtkTj/3wZuyG5bgKBoJ7WSgzqSGJ8ppDRdlvPh45mx6t6w3OcbExQi53n3xF5MYkNGPNR/HYOL95KL2A==", "dev": true, + "license": "MIT", "dependencies": { "@antfu/utils": "^0.7.10", "@rollup/pluginutils": "^5.1.3", @@ -2988,6 +3282,7 @@ "resolved": "https://registry.npmmirror.com/unplugin-vue-components/-/unplugin-vue-components-0.27.5.tgz", "integrity": "sha512-m9j4goBeNwXyNN8oZHHxvIIYiG8FQ9UfmKWeNllpDvhU7btKNNELGPt+o3mckQKuPwrE7e0PvCsx+IWuDSD9Vg==", "dev": true, + "license": "MIT", "dependencies": { "@antfu/utils": "^0.7.10", "@rollup/pluginutils": "^5.1.3", @@ -3025,6 +3320,7 @@ "resolved": "https://registry.npmmirror.com/vite/-/vite-6.4.2.tgz", "integrity": "sha512-2N/55r4JDJ4gdrCvGgINMy+HH3iRpNIz8K6SFwVsA+JbQScLiC+clmAxBgwiSPgcG9U15QmvqCGWzMbqda5zGQ==", "dev": true, + "license": "MIT", "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.4.4", @@ -3098,6 +3394,7 @@ "version": "3.5.34", "resolved": "https://registry.npmmirror.com/vue/-/vue-3.5.34.tgz", "integrity": "sha512-WdLBG9gm02OgJIG9axd5Hpx0TFLdzVgfG2evFFu8Rur5O/IoGc5cMjnjh3tPL6GnRGsYvUhBSKVPYVcxRKpMCA==", + "license": "MIT", "dependencies": { "@vue/compiler-dom": "3.5.34", "@vue/compiler-sfc": "3.5.34", @@ -3115,15 +3412,17 @@ } }, "node_modules/vue-component-type-helpers": { - "version": "3.2.9", - "resolved": "https://registry.npmmirror.com/vue-component-type-helpers/-/vue-component-type-helpers-3.2.9.tgz", - "integrity": "sha512-S3BiWYaLSzHxTpln665ELSrMR9UYmrIDUmhik7nVZxmJjTKL2/a+ew1hvGxksKelivm0ujjWfG1fYOiU/2e8rA==" + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/vue-component-type-helpers/-/vue-component-type-helpers-3.3.1.tgz", + "integrity": "sha512-pu58kqxmVyEH6VfNYW1UyEfR3XAnJ27ZXT3yzXxxpjLxVzAbyC35Zk/nm/RMs7ijWnJNSd9fWkeex2OhUsx3MA==", + "license": "MIT" }, "node_modules/vue-demi": { "version": "0.14.10", "resolved": "https://registry.npmmirror.com/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" @@ -3148,6 +3447,7 @@ "version": "4.6.4", "resolved": "https://registry.npmmirror.com/vue-router/-/vue-router-4.6.4.tgz", "integrity": "sha512-Hz9q5sa33Yhduglwz6g9skT8OBPii+4bFn88w6J+J4MfEo4KRRpmiNG/hHHkdbRFlLBOqxN8y8gf2Fb0MTUgVg==", + "license": "MIT", "dependencies": { "@vue/devtools-api": "^6.6.4" }, @@ -3161,2031 +3461,15 @@ "node_modules/w3c-keyname": { "version": "2.2.8", "resolved": "https://registry.npmmirror.com/w3c-keyname/-/w3c-keyname-2.2.8.tgz", - "integrity": "sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==" + "integrity": "sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==", + "license": "MIT" }, "node_modules/webpack-virtual-modules": { "version": "0.6.2", "resolved": "https://registry.npmmirror.com/webpack-virtual-modules/-/webpack-virtual-modules-0.6.2.tgz", "integrity": "sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==", - "dev": true - } - }, - "dependencies": { - "@antfu/utils": { - "version": "0.7.10", - "resolved": "https://registry.npmmirror.com/@antfu/utils/-/utils-0.7.10.tgz", - "integrity": "sha512-+562v9k4aI80m1+VuMHehNJWLOFjBnXn3tdOitzD0il5b7smkSBal4+a3oKiQTbrwMmN/TBUMDvbdoWDehgOww==", - "dev": true - }, - "@babel/helper-string-parser": { - "version": "7.27.1", - "resolved": "https://registry.npmmirror.com/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", - "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==" - }, - "@babel/helper-validator-identifier": { - "version": "7.28.5", - "resolved": "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", - "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==" - }, - "@babel/parser": { - "version": "7.29.3", - "resolved": "https://registry.npmmirror.com/@babel/parser/-/parser-7.29.3.tgz", - "integrity": "sha512-b3ctpQwp+PROvU/cttc4OYl4MzfJUWy6FZg+PMXfzmt/+39iHVF0sDfqay8TQM3JA2EUOyKcFZt75jWriQijsA==", - "requires": { - "@babel/types": "^7.29.0" - } - }, - "@babel/types": { - "version": "7.29.0", - "resolved": "https://registry.npmmirror.com/@babel/types/-/types-7.29.0.tgz", - "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", - "requires": { - "@babel/helper-string-parser": "^7.27.1", - "@babel/helper-validator-identifier": "^7.28.5" - } - }, - "@ctrl/tinycolor": { - "version": "4.2.0", - "resolved": "https://registry.npmmirror.com/@ctrl/tinycolor/-/tinycolor-4.2.0.tgz", - "integrity": "sha512-kzyuwOAQnXJNLS9PSyrk0CWk35nWJW/zl/6KvnTBMFK65gm7U1/Z5BqjxeapjZCIhQcM/DsrEmcbRwDyXyXK4A==" - }, - "@element-plus/icons-vue": { - "version": "2.3.2", - "resolved": "https://registry.npmmirror.com/@element-plus/icons-vue/-/icons-vue-2.3.2.tgz", - "integrity": "sha512-OzIuTaIfC8QXEPmJvB4Y4kw34rSXdCJzxcD1kFStBvr8bK6X1zQAYDo0CNMjojnfTqRQCJ0I7prlErcoRiET2A==", - "requires": {} - }, - "@esbuild/aix-ppc64": { - "version": "0.25.12", - "resolved": "https://registry.npmmirror.com/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz", - "integrity": "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==", "dev": true, - "optional": true - }, - "@esbuild/android-arm": { - "version": "0.25.12", - "resolved": "https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.25.12.tgz", - "integrity": "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==", - "dev": true, - "optional": true - }, - "@esbuild/android-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmmirror.com/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz", - "integrity": "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==", - "dev": true, - "optional": true - }, - "@esbuild/android-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmmirror.com/@esbuild/android-x64/-/android-x64-0.25.12.tgz", - "integrity": "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==", - "dev": true, - "optional": true - }, - "@esbuild/darwin-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmmirror.com/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz", - "integrity": "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==", - "dev": true, - "optional": true - }, - "@esbuild/darwin-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmmirror.com/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz", - "integrity": "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==", - "dev": true, - "optional": true - }, - "@esbuild/freebsd-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmmirror.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz", - "integrity": "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==", - "dev": true, - "optional": true - }, - "@esbuild/freebsd-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmmirror.com/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz", - "integrity": "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==", - "dev": true, - "optional": true - }, - "@esbuild/linux-arm": { - "version": "0.25.12", - "resolved": "https://registry.npmmirror.com/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz", - "integrity": "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==", - "dev": true, - "optional": true - }, - "@esbuild/linux-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmmirror.com/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz", - "integrity": "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==", - "dev": true, - "optional": true - }, - "@esbuild/linux-ia32": { - "version": "0.25.12", - "resolved": "https://registry.npmmirror.com/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz", - "integrity": "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==", - "dev": true, - "optional": true - }, - "@esbuild/linux-loong64": { - "version": "0.25.12", - "resolved": "https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz", - "integrity": "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==", - "dev": true, - "optional": true - }, - "@esbuild/linux-mips64el": { - "version": "0.25.12", - "resolved": "https://registry.npmmirror.com/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz", - "integrity": "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==", - "dev": true, - "optional": true - }, - "@esbuild/linux-ppc64": { - "version": "0.25.12", - "resolved": "https://registry.npmmirror.com/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz", - "integrity": "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==", - "dev": true, - "optional": true - }, - "@esbuild/linux-riscv64": { - "version": "0.25.12", - "resolved": "https://registry.npmmirror.com/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz", - "integrity": "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==", - "dev": true, - "optional": true - }, - "@esbuild/linux-s390x": { - "version": "0.25.12", - "resolved": "https://registry.npmmirror.com/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz", - "integrity": "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==", - "dev": true, - "optional": true - }, - "@esbuild/linux-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmmirror.com/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz", - "integrity": "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==", - "dev": true, - "optional": true - }, - "@esbuild/netbsd-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmmirror.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz", - "integrity": "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==", - "dev": true, - "optional": true - }, - "@esbuild/netbsd-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmmirror.com/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz", - "integrity": "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==", - "dev": true, - "optional": true - }, - "@esbuild/openbsd-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmmirror.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz", - "integrity": "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==", - "dev": true, - "optional": true - }, - "@esbuild/openbsd-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmmirror.com/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz", - "integrity": "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==", - "dev": true, - "optional": true - }, - "@esbuild/openharmony-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmmirror.com/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz", - "integrity": "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==", - "dev": true, - "optional": true - }, - "@esbuild/sunos-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmmirror.com/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz", - "integrity": "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==", - "dev": true, - "optional": true - }, - "@esbuild/win32-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmmirror.com/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz", - "integrity": "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==", - "dev": true, - "optional": true - }, - "@esbuild/win32-ia32": { - "version": "0.25.12", - "resolved": "https://registry.npmmirror.com/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz", - "integrity": "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==", - "dev": true, - "optional": true - }, - "@esbuild/win32-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmmirror.com/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz", - "integrity": "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==", - "dev": true, - "optional": true - }, - "@floating-ui/core": { - "version": "1.7.5", - "resolved": "https://registry.npmmirror.com/@floating-ui/core/-/core-1.7.5.tgz", - "integrity": "sha512-1Ih4WTWyw0+lKyFMcBHGbb5U5FtuHJuujoyyr5zTaWS5EYMeT6Jb2AuDeftsCsEuchO+mM2ij5+q9crhydzLhQ==", - "requires": { - "@floating-ui/utils": "^0.2.11" - } - }, - "@floating-ui/dom": { - "version": "1.7.6", - "resolved": "https://registry.npmmirror.com/@floating-ui/dom/-/dom-1.7.6.tgz", - "integrity": "sha512-9gZSAI5XM36880PPMm//9dfiEngYoC6Am2izES1FF406YFsjvyBMmeJ2g4SAju3xWwtuynNRFL2s9hgxpLI5SQ==", - "requires": { - "@floating-ui/core": "^1.7.5", - "@floating-ui/utils": "^0.2.11" - } - }, - "@floating-ui/utils": { - "version": "0.2.11", - "resolved": "https://registry.npmmirror.com/@floating-ui/utils/-/utils-0.2.11.tgz", - "integrity": "sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg==" - }, - "@jridgewell/sourcemap-codec": { - "version": "1.5.5", - "resolved": "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", - "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==" - }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmmirror.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmmirror.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true - }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmmirror.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@popperjs/core": { - "version": "npm:@sxzz/popperjs-es@2.11.8", - "resolved": "https://registry.npmmirror.com/@sxzz/popperjs-es/-/popperjs-es-2.11.8.tgz", - "integrity": "sha512-wOwESXvvED3S8xBmcPWHs2dUuzrE4XiZeFu7e1hROIJkm02a49N120pmOXxY33sBb6hArItm5W5tcg1cBtV+HQ==" - }, - "@remirror/core-constants": { - "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/@remirror/core-constants/-/core-constants-3.0.0.tgz", - "integrity": "sha512-42aWfPrimMfDKDi4YegyS7x+/0tlzaqwPQCULLanv3DMIlu96KTJR0fM5isWX2UViOqlGnX6YFgqWepcX+XMNg==" - }, - "@rollup/pluginutils": { - "version": "5.3.0", - "resolved": "https://registry.npmmirror.com/@rollup/pluginutils/-/pluginutils-5.3.0.tgz", - "integrity": "sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==", - "dev": true, - "requires": { - "@types/estree": "^1.0.0", - "estree-walker": "^2.0.2", - "picomatch": "^4.0.2" - } - }, - "@rollup/rollup-android-arm-eabi": { - "version": "4.60.4", - "resolved": "https://registry.npmmirror.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.60.4.tgz", - "integrity": "sha512-F5QXMSiFebS9hKZj02XhWLLnRpJ3B3AROP0tWbFBSj+6kCbg5m9j5JoHKd4mmSVy5mS/IMQloYgYxCuJC0fxEQ==", - "dev": true, - "optional": true - }, - "@rollup/rollup-android-arm64": { - "version": "4.60.4", - "resolved": "https://registry.npmmirror.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.60.4.tgz", - "integrity": "sha512-GxxTKApUpzRhof7poWvCJHRF51C67u1R7D6DiluBE8wKU1u5GWE8t+v81JvJYtbawoBFX1hLv5Ei4eVjkWokaw==", - "dev": true, - "optional": true - }, - "@rollup/rollup-darwin-arm64": { - "version": "4.60.4", - "resolved": "https://registry.npmmirror.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.60.4.tgz", - "integrity": "sha512-tua0TaJxMOB1R0V0RS1jFZ/RpURFDJIOR2A6jWwQeawuFyS4gBW+rntLRaQd0EQ4bd6Vp44Z2rXW+YYDBsj6IA==", - "dev": true, - "optional": true - }, - "@rollup/rollup-darwin-x64": { - "version": "4.60.4", - "resolved": "https://registry.npmmirror.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.60.4.tgz", - "integrity": "sha512-CSKq7MsP+5PFIcydhAiR1K0UhEI1A2jWXVKHPCBZ151yOutENwvnPocgVHkivu2kviURtCEB6zUQw0vs8RrhMg==", - "dev": true, - "optional": true - }, - "@rollup/rollup-freebsd-arm64": { - "version": "4.60.4", - "resolved": "https://registry.npmmirror.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.60.4.tgz", - "integrity": "sha512-+O8OkVdyvXMtJEciu2wS/pzm1IxntEEQx3z5TAVy4l32G0etZn+RsA48ARRrFm6Ri8fvqPQfgrvNxSjKAbnd3g==", - "dev": true, - "optional": true - }, - "@rollup/rollup-freebsd-x64": { - "version": "4.60.4", - "resolved": "https://registry.npmmirror.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.60.4.tgz", - "integrity": "sha512-Iw3oMskH3AfNuhU0MSN7vNbdi4me/NiYo2azqPz/Le16zHSa+3RRmliCMWWQmh4lcndccU40xcJuTYJZxNo/lw==", - "dev": true, - "optional": true - }, - "@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.60.4", - "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.60.4.tgz", - "integrity": "sha512-EIPRXTVQpHyF8WOo219AD2yEltPehLTcTMz2fn6JsatLYSzQf00hj3rulF+yauOlF9/FtM2WpkT/hJh/KJFGhA==", - "dev": true, - "optional": true - }, - "@rollup/rollup-linux-arm-musleabihf": { - "version": "4.60.4", - "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.60.4.tgz", - "integrity": "sha512-J3Yh9PzzF1Ovah2At+lHiGQdsYgArxBbXv/zHfSyaiFQEqvNv7DcW98pCrmdjCZBrqBiKrKKe2V+aaSGWuBe/w==", - "dev": true, - "optional": true - }, - "@rollup/rollup-linux-arm64-gnu": { - "version": "4.60.4", - "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.60.4.tgz", - "integrity": "sha512-BFDEZMYfUvLn37ONE1yMBojPxnMlTFsdyNoqncT0qFq1mAfllL+ATMMJd8TeuVMiX84s1KbcxcZbXInmcO2mRg==", - "dev": true, - "optional": true - }, - "@rollup/rollup-linux-arm64-musl": { - "version": "4.60.4", - "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.60.4.tgz", - "integrity": "sha512-pc9EYOSlOgdQ2uPl1o9PF6/kLSgaUosia7gOuS8mB69IxJvlclko1MECXysjs5ryez1/5zjYqx3+xYU0TU6R1A==", - "dev": true, - "optional": true - }, - "@rollup/rollup-linux-loong64-gnu": { - "version": "4.60.4", - "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.60.4.tgz", - "integrity": "sha512-NxnomyxYerDh5n4iLrNa+sH+Z+U4BMEE46V2PgQ/hoB909i8gV1M5wPojWg9fk1jWpO3IQnOs20K4wyZuFLEFQ==", - "dev": true, - "optional": true - }, - "@rollup/rollup-linux-loong64-musl": { - "version": "4.60.4", - "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.60.4.tgz", - "integrity": "sha512-nbJnQ8a3z1mtmrwImCYhc6BGpThAyYVRQxw9uKSKG4wR6aAYno9sVjJ0zaZcW9BPJX1GbrDPf+SvdWjgTuDmnw==", - "dev": true, - "optional": true - }, - "@rollup/rollup-linux-ppc64-gnu": { - "version": "4.60.4", - "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.60.4.tgz", - "integrity": "sha512-2EU6acNrQLd8tYvo/LXW535wupT3m6fo7HKo6lr7ktQoItxTyOL1ZCR/GfGCuXl2vR+zmfI6eRXkSemafv+iVg==", - "dev": true, - "optional": true - }, - "@rollup/rollup-linux-ppc64-musl": { - "version": "4.60.4", - "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.60.4.tgz", - "integrity": "sha512-WeBtoMuaMxiiIrO2IYP3xs6GMWkJP2C0EoT8beTLkUPmzV1i/UcOSVw1d5r9KBODtHKilG5yFxsGRnBbK3wJ4A==", - "dev": true, - "optional": true - }, - "@rollup/rollup-linux-riscv64-gnu": { - "version": "4.60.4", - "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.60.4.tgz", - "integrity": "sha512-FJHFfqpKUI3A10WrWKiFbBZ7yVbGT4q4B5o1qKFFojqpaYoh9LrQgqWCmmcxQzVSXYtyB5bzkXrYzlHTs21MYA==", - "dev": true, - "optional": true - }, - "@rollup/rollup-linux-riscv64-musl": { - "version": "4.60.4", - "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.60.4.tgz", - "integrity": "sha512-mcEl6CUT5IAUmQf1m9FYSmVqCJlpQ8r8eyftFUHG8i9OhY7BkBXSUdnLH5DOf0wCOjcP9v/QO93zpmF1SptCCw==", - "dev": true, - "optional": true - }, - "@rollup/rollup-linux-s390x-gnu": { - "version": "4.60.4", - "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.60.4.tgz", - "integrity": "sha512-ynt3JxVd2w2buzoKDWIyiV1pJW93xlQic1THVLXilz429oijRpSHivZAgp65KBu+cMcgf1eVVjdnTLvPxgCuoQ==", - "dev": true, - "optional": true - }, - "@rollup/rollup-linux-x64-gnu": { - "version": "4.60.4", - "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.60.4.tgz", - "integrity": "sha512-Boiz5+MsaROEWDf+GGEwF8VMHGhlUoQMtIPjOgA5fv4osupqTVnJteQNKJwUcnUog2G55jYXH7KZFFiJe0TEzQ==", - "dev": true, - "optional": true - }, - "@rollup/rollup-linux-x64-musl": { - "version": "4.60.4", - "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.60.4.tgz", - "integrity": "sha512-+qfSY27qIrFfI/Hom04KYFw3GKZSGU4lXus51wsb5EuySfFlWRwjkKWoE9emgRw/ukoT4Udsj4W/+xxG8VbPKg==", - "dev": true, - "optional": true - }, - "@rollup/rollup-openbsd-x64": { - "version": "4.60.4", - "resolved": "https://registry.npmmirror.com/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.60.4.tgz", - "integrity": "sha512-VpTfOPHgVXEBeeR8hZ2O0F3aSso+JDWqTWmTmzcQKted54IAdUVbxE+j/MVxUsKa8L20HJhv3vUezVPoquqWjA==", - "dev": true, - "optional": true - }, - "@rollup/rollup-openharmony-arm64": { - "version": "4.60.4", - "resolved": "https://registry.npmmirror.com/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.60.4.tgz", - "integrity": "sha512-IPOsh5aRYuLv/nkU51X10Bf75Bsf6+gZdx1X+QP5QM6lIJFHHqbHLG0uJn/hWthzo13UAc2umiUorqZy3axoZg==", - "dev": true, - "optional": true - }, - "@rollup/rollup-win32-arm64-msvc": { - "version": "4.60.4", - "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.60.4.tgz", - "integrity": "sha512-4QzE9E81OohJ/HKzHhsqU+zcYYojVOXlFMs1DdyMT6qXl/niOH7AVElmmEdUNHHS/oRkc++d5k6Vy85zFs0DEw==", - "dev": true, - "optional": true - }, - "@rollup/rollup-win32-ia32-msvc": { - "version": "4.60.4", - "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.60.4.tgz", - "integrity": "sha512-zTPgT1YuHHcd+Tmx7h8aml0FWFVelV5N54oHow9SLj+GfoDy/huQ+UV396N/C7KpMDMiPspRktzM1/0r1usYEA==", - "dev": true, - "optional": true - }, - "@rollup/rollup-win32-x64-gnu": { - "version": "4.60.4", - "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.60.4.tgz", - "integrity": "sha512-DRS4G7mi9lJxqEDezIkKCaUIKCrLUUDCUaCsTPCi/rtqaC6D/jjwslMQyiDU50Ka0JKpeXeRBFBAXwArY52vBw==", - "dev": true, - "optional": true - }, - "@rollup/rollup-win32-x64-msvc": { - "version": "4.60.4", - "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.60.4.tgz", - "integrity": "sha512-QVTUovf40zgTqlFVrKA1uXMVvU2QWEFWfAH8Wdc48IxLvrJMQVMBRjuQyUpzZCDkakImib9eVazbWlC6ksWtJw==", - "dev": true, - "optional": true - }, - "@tiptap/core": { - "version": "2.27.2", - "resolved": "https://registry.npmmirror.com/@tiptap/core/-/core-2.27.2.tgz", - "integrity": "sha512-ABL1N6eoxzDzC1bYvkMbvyexHacszsKdVPYqhl5GwHLOvpZcv9VE9QaKwDILTyz5voCA0lGcAAXZp+qnXOk5lQ==", - "requires": {} - }, - "@tiptap/extension-blockquote": { - "version": "2.27.2", - "resolved": "https://registry.npmmirror.com/@tiptap/extension-blockquote/-/extension-blockquote-2.27.2.tgz", - "integrity": "sha512-oIGZgiAeA4tG3YxbTDfrmENL4/CIwGuP3THtHsNhwRqwsl9SfMk58Ucopi2GXTQSdYXpRJ0ahE6nPqB5D6j/Zw==", - "requires": {} - }, - "@tiptap/extension-bold": { - "version": "2.27.2", - "resolved": "https://registry.npmmirror.com/@tiptap/extension-bold/-/extension-bold-2.27.2.tgz", - "integrity": "sha512-bR7J5IwjCGQ0s3CIxyMvOCnMFMzIvsc5OVZKscTN5UkXzFsaY6muUAIqtKxayBUucjtUskm5qZowJITCeCb1/A==", - "requires": {} - }, - "@tiptap/extension-bubble-menu": { - "version": "2.27.2", - "resolved": "https://registry.npmmirror.com/@tiptap/extension-bubble-menu/-/extension-bubble-menu-2.27.2.tgz", - "integrity": "sha512-VkwlCOcr0abTBGzjPXklJ92FCowG7InU8+Od9FyApdLNmn0utRYGRhw0Zno6VgE9EYr1JY4BRnuSa5f9wlR72w==", - "requires": { - "tippy.js": "^6.3.7" - } - }, - "@tiptap/extension-bullet-list": { - "version": "2.27.2", - "resolved": "https://registry.npmmirror.com/@tiptap/extension-bullet-list/-/extension-bullet-list-2.27.2.tgz", - "integrity": "sha512-gmFuKi97u5f8uFc/GQs+zmezjiulZmFiDYTh3trVoLRoc2SAHOjGEB7qxdx7dsqmMN7gwiAWAEVurLKIi1lnnw==", - "requires": {} - }, - "@tiptap/extension-code": { - "version": "2.27.2", - "resolved": "https://registry.npmmirror.com/@tiptap/extension-code/-/extension-code-2.27.2.tgz", - "integrity": "sha512-7X9AgwqiIGXoZX7uvdHQsGsjILnN/JaEVtqfXZnPECzKGaWHeK/Ao4sYvIIIffsyZJA8k5DC7ny2/0sAgr2TuA==", - "requires": {} - }, - "@tiptap/extension-code-block": { - "version": "2.27.2", - "resolved": "https://registry.npmmirror.com/@tiptap/extension-code-block/-/extension-code-block-2.27.2.tgz", - "integrity": "sha512-KgvdQHS4jXr79aU3wZOGBIZYYl9vCB7uDEuRFV4so2rYrfmiYMw3T8bTnlNEEGe4RUeAms1i4fdwwvQp9nR1Dw==", - "requires": {} - }, - "@tiptap/extension-document": { - "version": "2.27.2", - "resolved": "https://registry.npmmirror.com/@tiptap/extension-document/-/extension-document-2.27.2.tgz", - "integrity": "sha512-CFhAYsPnyYnosDC4639sCJnBUnYH4Cat9qH5NZWHVvdgtDwu8GZgZn2eSzaKSYXWH1vJ9DSlCK+7UyC3SNXIBA==", - "requires": {} - }, - "@tiptap/extension-dropcursor": { - "version": "2.27.2", - "resolved": "https://registry.npmmirror.com/@tiptap/extension-dropcursor/-/extension-dropcursor-2.27.2.tgz", - "integrity": "sha512-oEu/OrktNoQXq1x29NnH/GOIzQZm8ieTQl3FK27nxfBPA89cNoH4mFEUmBL5/OFIENIjiYG3qWpg6voIqzswNw==", - "requires": {} - }, - "@tiptap/extension-floating-menu": { - "version": "2.27.2", - "resolved": "https://registry.npmmirror.com/@tiptap/extension-floating-menu/-/extension-floating-menu-2.27.2.tgz", - "integrity": "sha512-GUN6gPIGXS7ngRJOwdSmtBRBDt9Kt9CM/9pSwKebhLJ+honFoNA+Y6IpVyDvvDMdVNgBchiJLs6qA5H97gAePQ==", - "requires": { - "tippy.js": "^6.3.7" - } - }, - "@tiptap/extension-gapcursor": { - "version": "2.27.2", - "resolved": "https://registry.npmmirror.com/@tiptap/extension-gapcursor/-/extension-gapcursor-2.27.2.tgz", - "integrity": "sha512-/c9VF1HBxj+AP54XGVgCmD9bEGYc5w5OofYCFQgM7l7PB1J00A4vOke0oPkHJnqnOOyPlFaxO/7N6l3XwFcnKA==", - "requires": {} - }, - "@tiptap/extension-hard-break": { - "version": "2.27.2", - "resolved": "https://registry.npmmirror.com/@tiptap/extension-hard-break/-/extension-hard-break-2.27.2.tgz", - "integrity": "sha512-kSRVGKlCYK6AGR0h8xRkk0WOFGXHIIndod3GKgWU49APuIGDiXd8sziXsSlniUsWmqgDmDXcNnSzPcV7AQ8YNg==", - "requires": {} - }, - "@tiptap/extension-heading": { - "version": "2.27.2", - "resolved": "https://registry.npmmirror.com/@tiptap/extension-heading/-/extension-heading-2.27.2.tgz", - "integrity": "sha512-iM3yeRWuuQR/IRQ1djwNooJGfn9Jts9zF43qZIUf+U2NY8IlvdNsk2wTOdBgh6E0CamrStPxYGuln3ZS4fuglw==", - "requires": {} - }, - "@tiptap/extension-history": { - "version": "2.27.2", - "resolved": "https://registry.npmmirror.com/@tiptap/extension-history/-/extension-history-2.27.2.tgz", - "integrity": "sha512-+hSyqERoFNTWPiZx4/FCyZ/0eFqB9fuMdTB4AC/q9iwu3RNWAQtlsJg5230bf/qmyO6bZxRUc0k8p4hrV6ybAw==", - "requires": {} - }, - "@tiptap/extension-horizontal-rule": { - "version": "2.27.2", - "resolved": "https://registry.npmmirror.com/@tiptap/extension-horizontal-rule/-/extension-horizontal-rule-2.27.2.tgz", - "integrity": "sha512-WGWUSgX+jCsbtf9Y9OCUUgRZYuwjVoieW5n6mAUohJ9/6gc6sGIOrUpBShf+HHo6WD+gtQjRd+PssmX3NPWMpg==", - "requires": {} - }, - "@tiptap/extension-image": { - "version": "2.27.2", - "resolved": "https://registry.npmmirror.com/@tiptap/extension-image/-/extension-image-2.27.2.tgz", - "integrity": "sha512-5zL/BY41FIt72azVrCrv3n+2YJ/JyO8wxCcA4Dk1eXIobcgVyIdo4rG39gCqIOiqziAsqnqoj12QHTBtHsJ6mQ==", - "requires": {} - }, - "@tiptap/extension-italic": { - "version": "2.27.2", - "resolved": "https://registry.npmmirror.com/@tiptap/extension-italic/-/extension-italic-2.27.2.tgz", - "integrity": "sha512-1OFsw2SZqfaqx5Fa5v90iNlPRcqyt+lVSjBwTDzuPxTPFY4Q0mL89mKgkq2gVHYNCiaRkXvFLDxaSvBWbmthgg==", - "requires": {} - }, - "@tiptap/extension-link": { - "version": "2.27.2", - "resolved": "https://registry.npmmirror.com/@tiptap/extension-link/-/extension-link-2.27.2.tgz", - "integrity": "sha512-bnP61qkr0Kj9Cgnop1hxn2zbOCBzNtmawxr92bVTOE31fJv6FhtCnQiD6tuPQVGMYhcmAj7eihtvuEMFfqEPcQ==", - "requires": { - "linkifyjs": "^4.3.2" - } - }, - "@tiptap/extension-list-item": { - "version": "2.27.2", - "resolved": "https://registry.npmmirror.com/@tiptap/extension-list-item/-/extension-list-item-2.27.2.tgz", - "integrity": "sha512-eJNee7IEGXMnmygM5SdMGDC8m/lMWmwNGf9fPCK6xk0NxuQRgmZHL6uApKcdH6gyNcRPHCqvTTkhEP7pbny/fg==", - "requires": {} - }, - "@tiptap/extension-ordered-list": { - "version": "2.27.2", - "resolved": "https://registry.npmmirror.com/@tiptap/extension-ordered-list/-/extension-ordered-list-2.27.2.tgz", - "integrity": "sha512-M7A4tLGJcLPYdLC4CI2Gwl8LOrENQW59u3cMVa+KkwG1hzSJyPsbDpa1DI6oXPC2WtYiTf22zrbq3gVvH+KA2w==", - "requires": {} - }, - "@tiptap/extension-paragraph": { - "version": "2.27.2", - "resolved": "https://registry.npmmirror.com/@tiptap/extension-paragraph/-/extension-paragraph-2.27.2.tgz", - "integrity": "sha512-elYVn2wHJJ+zB9LESENWOAfI4TNT0jqEN34sMA/hCtA4im1ZG2DdLHwkHIshj/c4H0dzQhmsS/YmNC5Vbqab/A==", - "requires": {} - }, - "@tiptap/extension-placeholder": { - "version": "2.27.2", - "resolved": "https://registry.npmmirror.com/@tiptap/extension-placeholder/-/extension-placeholder-2.27.2.tgz", - "integrity": "sha512-IjsgSVYJRjpAKmIoapU0E2R4E2FPY3kpvU7/1i7PUYisylqejSJxmtJPGYw0FOMQY9oxnEEvfZHMBA610tqKpg==", - "requires": {} - }, - "@tiptap/extension-strike": { - "version": "2.27.2", - "resolved": "https://registry.npmmirror.com/@tiptap/extension-strike/-/extension-strike-2.27.2.tgz", - "integrity": "sha512-HHIjhafLhS2lHgfAsCwC1okqMsQzR4/mkGDm4M583Yftyjri1TNA7lzhzXWRFWiiMfJxKtdjHjUAQaHuteRTZw==", - "requires": {} - }, - "@tiptap/extension-text": { - "version": "2.27.2", - "resolved": "https://registry.npmmirror.com/@tiptap/extension-text/-/extension-text-2.27.2.tgz", - "integrity": "sha512-Xk7nYcigljAY0GO9hAQpZ65ZCxqOqaAlTPDFcKerXmlkQZP/8ndx95OgUb1Xf63kmPOh3xypurGS2is3v0MXSA==", - "requires": {} - }, - "@tiptap/extension-text-style": { - "version": "2.27.2", - "resolved": "https://registry.npmmirror.com/@tiptap/extension-text-style/-/extension-text-style-2.27.2.tgz", - "integrity": "sha512-Omk+uxjJLyEY69KStpCw5fA9asvV+MGcAX2HOxyISDFoLaL49TMrNjhGAuz09P1L1b0KGXo4ml7Q3v/Lfy4WPA==", - "requires": {} - }, - "@tiptap/pm": { - "version": "2.27.2", - "resolved": "https://registry.npmmirror.com/@tiptap/pm/-/pm-2.27.2.tgz", - "integrity": "sha512-kaEg7BfiJPDQMKbjVIzEPO3wlcA+pZb2tlcK9gPrdDnEFaec2QTF1sXz2ak2IIb2curvnIrQ4yrfHgLlVA72wA==", - "requires": { - "prosemirror-changeset": "^2.3.0", - "prosemirror-collab": "^1.3.1", - "prosemirror-commands": "^1.6.2", - "prosemirror-dropcursor": "^1.8.1", - "prosemirror-gapcursor": "^1.3.2", - "prosemirror-history": "^1.4.1", - "prosemirror-inputrules": "^1.4.0", - "prosemirror-keymap": "^1.2.2", - "prosemirror-markdown": "^1.13.1", - "prosemirror-menu": "^1.2.4", - "prosemirror-model": "^1.23.0", - "prosemirror-schema-basic": "^1.2.3", - "prosemirror-schema-list": "^1.4.1", - "prosemirror-state": "^1.4.3", - "prosemirror-tables": "^1.6.4", - "prosemirror-trailing-node": "^3.0.0", - "prosemirror-transform": "^1.10.2", - "prosemirror-view": "^1.37.0" - } - }, - "@tiptap/starter-kit": { - "version": "2.27.2", - "resolved": "https://registry.npmmirror.com/@tiptap/starter-kit/-/starter-kit-2.27.2.tgz", - "integrity": "sha512-bb0gJvPoDuyRUQ/iuN52j1//EtWWttw+RXAv1uJxfR0uKf8X7uAqzaOOgwjknoCIDC97+1YHwpGdnRjpDkOBxw==", - "requires": { - "@tiptap/core": "^2.27.2", - "@tiptap/extension-blockquote": "^2.27.2", - "@tiptap/extension-bold": "^2.27.2", - "@tiptap/extension-bullet-list": "^2.27.2", - "@tiptap/extension-code": "^2.27.2", - "@tiptap/extension-code-block": "^2.27.2", - "@tiptap/extension-document": "^2.27.2", - "@tiptap/extension-dropcursor": "^2.27.2", - "@tiptap/extension-gapcursor": "^2.27.2", - "@tiptap/extension-hard-break": "^2.27.2", - "@tiptap/extension-heading": "^2.27.2", - "@tiptap/extension-history": "^2.27.2", - "@tiptap/extension-horizontal-rule": "^2.27.2", - "@tiptap/extension-italic": "^2.27.2", - "@tiptap/extension-list-item": "^2.27.2", - "@tiptap/extension-ordered-list": "^2.27.2", - "@tiptap/extension-paragraph": "^2.27.2", - "@tiptap/extension-strike": "^2.27.2", - "@tiptap/extension-text": "^2.27.2", - "@tiptap/extension-text-style": "^2.27.2", - "@tiptap/pm": "^2.27.2" - } - }, - "@tiptap/vue-3": { - "version": "2.27.2", - "resolved": "https://registry.npmmirror.com/@tiptap/vue-3/-/vue-3-2.27.2.tgz", - "integrity": "sha512-NahnVLTAQsbLaNU9nGLdGCr88nAeQZJTejjBVQc3EzMdijmE46R44Rosj6O/pj3e7eLj1/gYvc+U/hIVbxMpoQ==", - "requires": { - "@tiptap/extension-bubble-menu": "^2.27.2", - "@tiptap/extension-floating-menu": "^2.27.2" - } - }, - "@types/estree": { - "version": "1.0.9", - "resolved": "https://registry.npmmirror.com/@types/estree/-/estree-1.0.9.tgz", - "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==", - "dev": true - }, - "@types/linkify-it": { - "version": "5.0.0", - "resolved": "https://registry.npmmirror.com/@types/linkify-it/-/linkify-it-5.0.0.tgz", - "integrity": "sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==" - }, - "@types/lodash": { - "version": "4.17.24", - "resolved": "https://registry.npmmirror.com/@types/lodash/-/lodash-4.17.24.tgz", - "integrity": "sha512-gIW7lQLZbue7lRSWEFql49QJJWThrTFFeIMJdp3eH4tKoxm1OvEPg02rm4wCCSHS0cL3/Fizimb35b7k8atwsQ==" - }, - "@types/lodash-es": { - "version": "4.17.12", - "resolved": "https://registry.npmmirror.com/@types/lodash-es/-/lodash-es-4.17.12.tgz", - "integrity": "sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==", - "requires": { - "@types/lodash": "*" - } - }, - "@types/markdown-it": { - "version": "14.1.2", - "resolved": "https://registry.npmmirror.com/@types/markdown-it/-/markdown-it-14.1.2.tgz", - "integrity": "sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==", - "requires": { - "@types/linkify-it": "^5", - "@types/mdurl": "^2" - } - }, - "@types/mdurl": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/@types/mdurl/-/mdurl-2.0.0.tgz", - "integrity": "sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==" - }, - "@types/web-bluetooth": { - "version": "0.0.21", - "resolved": "https://registry.npmmirror.com/@types/web-bluetooth/-/web-bluetooth-0.0.21.tgz", - "integrity": "sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA==" - }, - "@vitejs/plugin-vue": { - "version": "5.2.4", - "resolved": "https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-5.2.4.tgz", - "integrity": "sha512-7Yx/SXSOcQq5HiiV3orevHUFn+pmMB4cgbEkDYgnkUWb0WfeQ/wa2yFv6D5ICiCQOVpjA7vYDXrC7AGO8yjDHA==", - "dev": true, - "requires": {} - }, - "@vue/compiler-core": { - "version": "3.5.34", - "resolved": "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.5.34.tgz", - "integrity": "sha512-s9cLyK5mLcvZ4Agva5QgRsQyLKvts9WbU9DB6NqiZkkGEdwmcEiylj5Jbwkp680drF/NNCV8OlAJSe+yMLxaJw==", - "requires": { - "@babel/parser": "^7.29.3", - "@vue/shared": "3.5.34", - "entities": "^7.0.1", - "estree-walker": "^2.0.2", - "source-map-js": "^1.2.1" - }, - "dependencies": { - "entities": { - "version": "7.0.1", - "resolved": "https://registry.npmmirror.com/entities/-/entities-7.0.1.tgz", - "integrity": "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==" - } - } - }, - "@vue/compiler-dom": { - "version": "3.5.34", - "resolved": "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.5.34.tgz", - "integrity": "sha512-EbF/T++k0e2MMZlJsBhzK8Sgwt0HcIPOhzn1CTB/lv6sQcyk+OWf8YeiLxZp3ro7MbbLcAfAJ6sEvjFWuNgUCw==", - "requires": { - "@vue/compiler-core": "3.5.34", - "@vue/shared": "3.5.34" - } - }, - "@vue/compiler-sfc": { - "version": "3.5.34", - "resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.5.34.tgz", - "integrity": "sha512-D/ihr6uZeIt6r+pVZf46RWT1fAsLFMbUP7k8G1VkiiWexriED9GrX3echHd4Abbt17zjlfiFJ8z7a3BxZOPNjg==", - "requires": { - "@babel/parser": "^7.29.3", - "@vue/compiler-core": "3.5.34", - "@vue/compiler-dom": "3.5.34", - "@vue/compiler-ssr": "3.5.34", - "@vue/shared": "3.5.34", - "estree-walker": "^2.0.2", - "magic-string": "^0.30.21", - "postcss": "^8.5.14", - "source-map-js": "^1.2.1" - } - }, - "@vue/compiler-ssr": { - "version": "3.5.34", - "resolved": "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.5.34.tgz", - "integrity": "sha512-cDtTHKibkThKGHH1SP+WdccquNRYQDFH6rRjQCqT9G2ltFAfoR5pUftpab/z+aM5mW9HLLVQW7hfKKQe/1GBeQ==", - "requires": { - "@vue/compiler-dom": "3.5.34", - "@vue/shared": "3.5.34" - } - }, - "@vue/devtools-api": { - "version": "6.6.4", - "resolved": "https://registry.npmmirror.com/@vue/devtools-api/-/devtools-api-6.6.4.tgz", - "integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==" - }, - "@vue/reactivity": { - "version": "3.5.34", - "resolved": "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.5.34.tgz", - "integrity": "sha512-y9XDjCEuBp+98k+UL5dbYkh57AHU4o6cxZedOPXw3bmrZZYLQsVHguGurq7hVrPCSrQtrnz1f9dssyFr+dMXfQ==", - "requires": { - "@vue/shared": "3.5.34" - } - }, - "@vue/runtime-core": { - "version": "3.5.34", - "resolved": "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.5.34.tgz", - "integrity": "sha512-mKeBYvu8tcMSLhypAHBmriUFfWXKTCF/23Z4jiCoYK3UtWepkliViNLuR90V9XOyD62mUxs9p1jsrpK3CCGIzw==", - "requires": { - "@vue/reactivity": "3.5.34", - "@vue/shared": "3.5.34" - } - }, - "@vue/runtime-dom": { - "version": "3.5.34", - "resolved": "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.5.34.tgz", - "integrity": "sha512-e8kZzERmCwUnBRVsgSQlAfrfU2rGoy0FFKPBXSlfEjc/O3KfA7QP0t1/2ZylrbchjmIKB4dPTd07A6WPr0eOrg==", - "requires": { - "@vue/reactivity": "3.5.34", - "@vue/runtime-core": "3.5.34", - "@vue/shared": "3.5.34", - "csstype": "^3.2.3" - } - }, - "@vue/server-renderer": { - "version": "3.5.34", - "resolved": "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.5.34.tgz", - "integrity": "sha512-nHxmJoTrKsmrkbILRhkC9gY1G3moZbJTqCzDd7DOOzG5KH9oeJ0Unqrff5f9v0pW//jES05ZkJcNtfE8JjOIew==", - "requires": { - "@vue/compiler-ssr": "3.5.34", - "@vue/shared": "3.5.34" - } - }, - "@vue/shared": { - "version": "3.5.34", - "resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.5.34.tgz", - "integrity": "sha512-24uqU4OIiX29ryC3MeWid/Xf2fa2EFRUVLb77nRhk+UrTVrh/XiGtFAFmJBAtBRbjwNdsPRP+jj/OL27Eg1NDA==" - }, - "@vueuse/core": { - "version": "14.3.0", - "resolved": "https://registry.npmmirror.com/@vueuse/core/-/core-14.3.0.tgz", - "integrity": "sha512-aHfz47g0ZhMtTVHmIzMVpJy8ePhhOy68GY5bv110+5DVtZ+W7BsOx+m61UNQqfrWyPztIHIanWa3E2tib3NFIw==", - "requires": { - "@types/web-bluetooth": "^0.0.21", - "@vueuse/metadata": "14.3.0", - "@vueuse/shared": "14.3.0" - } - }, - "@vueuse/metadata": { - "version": "14.3.0", - "resolved": "https://registry.npmmirror.com/@vueuse/metadata/-/metadata-14.3.0.tgz", - "integrity": "sha512-BwxmbAzwAVF50+MW57GXOUEV61nFBGnlBvrTqj49PqWJu3uw7hdu72ztXeZ33RdZtDY6kO+bfCAE1PCn88Tktw==" - }, - "@vueuse/shared": { - "version": "14.3.0", - "resolved": "https://registry.npmmirror.com/@vueuse/shared/-/shared-14.3.0.tgz", - "integrity": "sha512-bZpge9eSXwa4ToSiqJ7j6KRwhAsneMFoSz3LMWKQDkqimm3D/tbFlrklrs/IOqC8tEcYmXQZJ6N0UrjhBirVCg==", - "requires": {} - }, - "acorn": { - "version": "8.16.0", - "resolved": "https://registry.npmmirror.com/acorn/-/acorn-8.16.0.tgz", - "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", - "dev": true - }, - "agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmmirror.com/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "requires": { - "debug": "4" - } - }, - "anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmmirror.com/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "dependencies": { - "picomatch": { - "version": "2.3.2", - "resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.2.tgz", - "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", - "dev": true - } - } - }, - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmmirror.com/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "async-validator": { - "version": "4.2.5", - "resolved": "https://registry.npmmirror.com/async-validator/-/async-validator-4.2.5.tgz", - "integrity": "sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==" - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmmirror.com/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" - }, - "axios": { - "version": "1.16.1", - "resolved": "https://registry.npmmirror.com/axios/-/axios-1.16.1.tgz", - "integrity": "sha512-caYkukvroVPO8KrzuJEb50Hm07KwfBZPEC3VeFHTsqWHvKTsy54hjJz9BS/cdaypROE2rH6xvm9mHX4fgWkr3A==", - "requires": { - "follow-redirects": "^1.16.0", - "form-data": "^4.0.5", - "https-proxy-agent": "^5.0.1", - "proxy-from-env": "^2.1.0" - } - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "binary-extensions": { - "version": "2.3.0", - "resolved": "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.3.0.tgz", - "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", - "dev": true - }, - "brace-expansion": { - "version": "2.1.0", - "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-2.1.0.tgz", - "integrity": "sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "braces": { - "version": "3.0.3", - "resolved": "https://registry.npmmirror.com/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, - "requires": { - "fill-range": "^7.1.1" - } - }, - "call-bind-apply-helpers": { - "version": "1.0.2", - "resolved": "https://registry.npmmirror.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", - "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", - "requires": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2" - } - }, - "chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmmirror.com/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", - "dev": true, - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.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" - } - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmmirror.com/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "confbox": { - "version": "0.1.8", - "resolved": "https://registry.npmmirror.com/confbox/-/confbox-0.1.8.tgz", - "integrity": "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==", - "dev": true - }, - "crelt": { - "version": "1.0.6", - "resolved": "https://registry.npmmirror.com/crelt/-/crelt-1.0.6.tgz", - "integrity": "sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==" - }, - "csstype": { - "version": "3.2.3", - "resolved": "https://registry.npmmirror.com/csstype/-/csstype-3.2.3.tgz", - "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==" - }, - "dayjs": { - "version": "1.11.20", - "resolved": "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.20.tgz", - "integrity": "sha512-YbwwqR/uYpeoP4pu043q+LTDLFBLApUP6VxRihdfNTqu4ubqMlGDLd6ErXhEgsyvY0K6nCs7nggYumAN+9uEuQ==" - }, - "debug": { - "version": "4.4.3", - "resolved": "https://registry.npmmirror.com/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "requires": { - "ms": "^2.1.3" - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" - }, - "dunder-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmmirror.com/dunder-proto/-/dunder-proto-1.0.1.tgz", - "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", - "requires": { - "call-bind-apply-helpers": "^1.0.1", - "es-errors": "^1.3.0", - "gopd": "^1.2.0" - } - }, - "element-plus": { - "version": "2.14.0", - "resolved": "https://registry.npmmirror.com/element-plus/-/element-plus-2.14.0.tgz", - "integrity": "sha512-POgH+TtoreaEKWqYYAVQyE6i8rQMEFqAEublyF29dBA5yASWPLKY6EzfeqBTr2Uv26mPss4vSrMrNPyaK7LX5w==", - "requires": { - "@ctrl/tinycolor": "^4.2.0", - "@element-plus/icons-vue": "^2.3.2", - "@floating-ui/dom": "^1.0.1", - "@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.2.8" - } - }, - "entities": { - "version": "4.5.0", - "resolved": "https://registry.npmmirror.com/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==" - }, - "es-define-property": { - "version": "1.0.1", - "resolved": "https://registry.npmmirror.com/es-define-property/-/es-define-property-1.0.1.tgz", - "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==" - }, - "es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmmirror.com/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==" - }, - "es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmmirror.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", - "requires": { - "es-errors": "^1.3.0" - } - }, - "es-set-tostringtag": { - "version": "2.1.0", - "resolved": "https://registry.npmmirror.com/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", - "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", - "requires": { - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - } - }, - "esbuild": { - "version": "0.25.12", - "resolved": "https://registry.npmmirror.com/esbuild/-/esbuild-0.25.12.tgz", - "integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==", - "dev": true, - "requires": { - "@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" - } - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" - }, - "estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" - }, - "exsolve": { - "version": "1.0.8", - "resolved": "https://registry.npmmirror.com/exsolve/-/exsolve-1.0.8.tgz", - "integrity": "sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA==", - "dev": true - }, - "fast-glob": { - "version": "3.3.3", - "resolved": "https://registry.npmmirror.com/fast-glob/-/fast-glob-3.3.3.tgz", - "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", - "dev": true, - "requires": { - "@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" - } - }, - "fastq": { - "version": "1.20.1", - "resolved": "https://registry.npmmirror.com/fastq/-/fastq-1.20.1.tgz", - "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", - "dev": true, - "requires": { - "reusify": "^1.0.4" - } - }, - "fdir": { - "version": "6.5.0", - "resolved": "https://registry.npmmirror.com/fdir/-/fdir-6.5.0.tgz", - "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", - "dev": true, - "requires": {} - }, - "fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmmirror.com/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "follow-redirects": { - "version": "1.16.0", - "resolved": "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.16.0.tgz", - "integrity": "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==" - }, - "form-data": { - "version": "4.0.5", - "resolved": "https://registry.npmmirror.com/form-data/-/form-data-4.0.5.tgz", - "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "es-set-tostringtag": "^2.1.0", - "hasown": "^2.0.2", - "mime-types": "^2.1.12" - } - }, - "fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, - "optional": true - }, - "function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==" - }, - "get-intrinsic": { - "version": "1.3.0", - "resolved": "https://registry.npmmirror.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz", - "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", - "requires": { - "call-bind-apply-helpers": "^1.0.2", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "function-bind": "^1.1.2", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "math-intrinsics": "^1.1.0" - } - }, - "get-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmmirror.com/get-proto/-/get-proto-1.0.1.tgz", - "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", - "requires": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" - } - }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmmirror.com/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==" - }, - "has-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmmirror.com/has-symbols/-/has-symbols-1.1.0.tgz", - "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==" - }, - "has-tostringtag": { - "version": "1.0.2", - "resolved": "https://registry.npmmirror.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "requires": { - "has-symbols": "^1.0.3" - } - }, - "hasown": { - "version": "2.0.3", - "resolved": "https://registry.npmmirror.com/hasown/-/hasown-2.0.3.tgz", - "integrity": "sha512-ej4AhfhfL2Q2zpMmLo7U1Uv9+PyhIZpgQLGT1F9miIGmiCJIoCgSmczFdrc97mWT4kVY72KA+WnnhJ5pghSvSg==", - "requires": { - "function-bind": "^1.1.2" - } - }, - "https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmmirror.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "requires": { - "agent-base": "6", - "debug": "4" - } - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmmirror.com/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true - }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "js-tokens": { - "version": "9.0.1", - "resolved": "https://registry.npmmirror.com/js-tokens/-/js-tokens-9.0.1.tgz", - "integrity": "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==", - "dev": true - }, - "linkify-it": { - "version": "5.0.0", - "resolved": "https://registry.npmmirror.com/linkify-it/-/linkify-it-5.0.0.tgz", - "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==", - "requires": { - "uc.micro": "^2.0.0" - } - }, - "linkifyjs": { - "version": "4.3.3", - "resolved": "https://registry.npmmirror.com/linkifyjs/-/linkifyjs-4.3.3.tgz", - "integrity": "sha512-P8aEP5U/D1/IlTY2OeYsErdwh9bGuLE30NcXtKEjgdHcahveQoQwM2yZNsioQHsWFz0P7KKudisbrzCgR0sDHg==" - }, - "local-pkg": { - "version": "0.5.1", - "resolved": "https://registry.npmmirror.com/local-pkg/-/local-pkg-0.5.1.tgz", - "integrity": "sha512-9rrA30MRRP3gBD3HTGnC6cDFpaE1kVDWxWgqWJUN0RvDNAo+Nz/9GxB+nHOH0ifbVFy0hSA1V6vFDvnx54lTEQ==", - "dev": true, - "requires": { - "mlly": "^1.7.3", - "pkg-types": "^1.2.1" - } - }, - "lodash": { - "version": "4.18.1", - "resolved": "https://registry.npmmirror.com/lodash/-/lodash-4.18.1.tgz", - "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==" - }, - "lodash-es": { - "version": "4.18.1", - "resolved": "https://registry.npmmirror.com/lodash-es/-/lodash-es-4.18.1.tgz", - "integrity": "sha512-J8xewKD/Gk22OZbhpOVSwcs60zhd95ESDwezOFuA3/099925PdHJ7OFHNTGtajL3AlZkykD32HykiMo+BIBI8A==" - }, - "lodash-unified": { - "version": "1.0.3", - "resolved": "https://registry.npmmirror.com/lodash-unified/-/lodash-unified-1.0.3.tgz", - "integrity": "sha512-WK9qSozxXOD7ZJQlpSqOT+om2ZfcT4yO+03FuzAHD0wF6S0l0090LRPDx3vhTTLZ8cFKpBn+IOcVXK6qOcIlfQ==", - "requires": {} - }, - "magic-string": { - "version": "0.30.21", - "resolved": "https://registry.npmmirror.com/magic-string/-/magic-string-0.30.21.tgz", - "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", - "requires": { - "@jridgewell/sourcemap-codec": "^1.5.5" - } - }, - "markdown-it": { - "version": "14.1.1", - "resolved": "https://registry.npmmirror.com/markdown-it/-/markdown-it-14.1.1.tgz", - "integrity": "sha512-BuU2qnTti9YKgK5N+IeMubp14ZUKUUw7yeJbkjtosvHiP0AZ5c8IAgEMk79D0eC8F23r4Ac/q8cAIFdm2FtyoA==", - "requires": { - "argparse": "^2.0.1", - "entities": "^4.4.0", - "linkify-it": "^5.0.0", - "mdurl": "^2.0.0", - "punycode.js": "^2.3.1", - "uc.micro": "^2.1.0" - } - }, - "math-intrinsics": { - "version": "1.1.0", - "resolved": "https://registry.npmmirror.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz", - "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==" - }, - "mdurl": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/mdurl/-/mdurl-2.0.0.tgz", - "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==" - }, - "memoize-one": { - "version": "6.0.0", - "resolved": "https://registry.npmmirror.com/memoize-one/-/memoize-one-6.0.0.tgz", - "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==" - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmmirror.com/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true - }, - "micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmmirror.com/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "dev": true, - "requires": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "dependencies": { - "picomatch": { - "version": "2.3.2", - "resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.2.tgz", - "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", - "dev": true - } - } - }, - "mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" - }, - "mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "requires": { - "mime-db": "1.52.0" - } - }, - "minimatch": { - "version": "9.0.9", - "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-9.0.9.tgz", - "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.2" - } - }, - "mlly": { - "version": "1.8.2", - "resolved": "https://registry.npmmirror.com/mlly/-/mlly-1.8.2.tgz", - "integrity": "sha512-d+ObxMQFmbt10sretNDytwt85VrbkhhUA/JBGm1MPaWJ65Cl4wOgLaB1NYvJSZ0Ef03MMEU/0xpPMXUIQ29UfA==", - "dev": true, - "requires": { - "acorn": "^8.16.0", - "pathe": "^2.0.3", - "pkg-types": "^1.3.1", - "ufo": "^1.6.3" - } - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "nanoid": { - "version": "3.3.12", - "resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.12.tgz", - "integrity": "sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==" - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "normalize-wheel-es": { - "version": "1.2.0", - "resolved": "https://registry.npmmirror.com/normalize-wheel-es/-/normalize-wheel-es-1.2.0.tgz", - "integrity": "sha512-Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw==" - }, - "orderedmap": { - "version": "2.1.1", - "resolved": "https://registry.npmmirror.com/orderedmap/-/orderedmap-2.1.1.tgz", - "integrity": "sha512-TvAWxi0nDe1j/rtMcWcIj94+Ffe6n7zhow33h40SKxmsmozs6dz/e+EajymfoFcHd7sxNn8yHM8839uixMOV6g==" - }, - "pathe": { - "version": "2.0.3", - "resolved": "https://registry.npmmirror.com/pathe/-/pathe-2.0.3.tgz", - "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", - "dev": true - }, - "picocolors": { - "version": "1.1.1", - "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==" - }, - "picomatch": { - "version": "4.0.4", - "resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-4.0.4.tgz", - "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", - "dev": true - }, - "pinia": { - "version": "2.3.1", - "resolved": "https://registry.npmmirror.com/pinia/-/pinia-2.3.1.tgz", - "integrity": "sha512-khUlZSwt9xXCaTbbxFYBKDc/bWAGWJjOgvxETwkTN7KRm66EeT1ZdZj6i2ceh9sP2Pzqsbc704r2yngBrxBVug==", - "requires": { - "@vue/devtools-api": "^6.6.3", - "vue-demi": "^0.14.10" - } - }, - "pkg-types": { - "version": "1.3.1", - "resolved": "https://registry.npmmirror.com/pkg-types/-/pkg-types-1.3.1.tgz", - "integrity": "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==", - "dev": true, - "requires": { - "confbox": "^0.1.8", - "mlly": "^1.7.4", - "pathe": "^2.0.1" - } - }, - "postcss": { - "version": "8.5.14", - "resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.5.14.tgz", - "integrity": "sha512-SoSL4+OSEtR99LHFZQiJLkT59C5B1amGO1NzTwj7TT1qCUgUO6hxOvzkOYxD+vMrXBM3XJIKzokoERdqQq/Zmg==", - "requires": { - "nanoid": "^3.3.11", - "picocolors": "^1.1.1", - "source-map-js": "^1.2.1" - } - }, - "prosemirror-changeset": { - "version": "2.4.1", - "resolved": "https://registry.npmmirror.com/prosemirror-changeset/-/prosemirror-changeset-2.4.1.tgz", - "integrity": "sha512-96WBLhOaYhJ+kPhLg3uW359Tz6I/MfcrQfL4EGv4SrcqKEMC1gmoGrXHecPE8eOwTVCJ4IwgfzM8fFad25wNfw==", - "requires": { - "prosemirror-transform": "^1.0.0" - } - }, - "prosemirror-collab": { - "version": "1.3.1", - "resolved": "https://registry.npmmirror.com/prosemirror-collab/-/prosemirror-collab-1.3.1.tgz", - "integrity": "sha512-4SnynYR9TTYaQVXd/ieUvsVV4PDMBzrq2xPUWutHivDuOshZXqQ5rGbZM84HEaXKbLdItse7weMGOUdDVcLKEQ==", - "requires": { - "prosemirror-state": "^1.0.0" - } - }, - "prosemirror-commands": { - "version": "1.7.1", - "resolved": "https://registry.npmmirror.com/prosemirror-commands/-/prosemirror-commands-1.7.1.tgz", - "integrity": "sha512-rT7qZnQtx5c0/y/KlYaGvtG411S97UaL6gdp6RIZ23DLHanMYLyfGBV5DtSnZdthQql7W+lEVbpSfwtO8T+L2w==", - "requires": { - "prosemirror-model": "^1.0.0", - "prosemirror-state": "^1.0.0", - "prosemirror-transform": "^1.10.2" - } - }, - "prosemirror-dropcursor": { - "version": "1.8.2", - "resolved": "https://registry.npmmirror.com/prosemirror-dropcursor/-/prosemirror-dropcursor-1.8.2.tgz", - "integrity": "sha512-CCk6Gyx9+Tt2sbYk5NK0nB1ukHi2ryaRgadV/LvyNuO3ena1payM2z6Cg0vO1ebK8cxbzo41ku2DE5Axj1Zuiw==", - "requires": { - "prosemirror-state": "^1.0.0", - "prosemirror-transform": "^1.1.0", - "prosemirror-view": "^1.1.0" - } - }, - "prosemirror-gapcursor": { - "version": "1.4.1", - "resolved": "https://registry.npmmirror.com/prosemirror-gapcursor/-/prosemirror-gapcursor-1.4.1.tgz", - "integrity": "sha512-pMdYaEnjNMSwl11yjEGtgTmLkR08m/Vl+Jj443167p9eB3HVQKhYCc4gmHVDsLPODfZfjr/MmirsdyZziXbQKw==", - "requires": { - "prosemirror-keymap": "^1.0.0", - "prosemirror-model": "^1.0.0", - "prosemirror-state": "^1.0.0", - "prosemirror-view": "^1.0.0" - } - }, - "prosemirror-history": { - "version": "1.5.0", - "resolved": "https://registry.npmmirror.com/prosemirror-history/-/prosemirror-history-1.5.0.tgz", - "integrity": "sha512-zlzTiH01eKA55UAf1MEjtssJeHnGxO0j4K4Dpx+gnmX9n+SHNlDqI2oO1Kv1iPN5B1dm5fsljCfqKF9nFL6HRg==", - "requires": { - "prosemirror-state": "^1.2.2", - "prosemirror-transform": "^1.0.0", - "prosemirror-view": "^1.31.0", - "rope-sequence": "^1.3.0" - } - }, - "prosemirror-inputrules": { - "version": "1.5.1", - "resolved": "https://registry.npmmirror.com/prosemirror-inputrules/-/prosemirror-inputrules-1.5.1.tgz", - "integrity": "sha512-7wj4uMjKaXWAQ1CDgxNzNtR9AlsuwzHfdFH1ygEHA2KHF2DOEaXl1CJfNPAKCg9qNEh4rum975QLaCiQPyY6Fw==", - "requires": { - "prosemirror-state": "^1.0.0", - "prosemirror-transform": "^1.0.0" - } - }, - "prosemirror-keymap": { - "version": "1.2.3", - "resolved": "https://registry.npmmirror.com/prosemirror-keymap/-/prosemirror-keymap-1.2.3.tgz", - "integrity": "sha512-4HucRlpiLd1IPQQXNqeo81BGtkY8Ai5smHhKW9jjPKRc2wQIxksg7Hl1tTI2IfT2B/LgX6bfYvXxEpJl7aKYKw==", - "requires": { - "prosemirror-state": "^1.0.0", - "w3c-keyname": "^2.2.0" - } - }, - "prosemirror-markdown": { - "version": "1.13.4", - "resolved": "https://registry.npmmirror.com/prosemirror-markdown/-/prosemirror-markdown-1.13.4.tgz", - "integrity": "sha512-D98dm4cQ3Hs6EmjK500TdAOew4Z03EV71ajEFiWra3Upr7diytJsjF4mPV2dW+eK5uNectiRj0xFxYI9NLXDbw==", - "requires": { - "@types/markdown-it": "^14.0.0", - "markdown-it": "^14.0.0", - "prosemirror-model": "^1.25.0" - } - }, - "prosemirror-menu": { - "version": "1.3.2", - "resolved": "https://registry.npmmirror.com/prosemirror-menu/-/prosemirror-menu-1.3.2.tgz", - "integrity": "sha512-6VgUJTYod0nMBlCaYJGhXGLu7Gt4AvcwcOq0YfJCY/6Uh+3S7UsWhpy6rJFCBFOmonq1hD8KyWOtZhkppd4YPg==", - "requires": { - "crelt": "^1.0.0", - "prosemirror-commands": "^1.0.0", - "prosemirror-history": "^1.0.0", - "prosemirror-state": "^1.0.0" - } - }, - "prosemirror-model": { - "version": "1.25.6", - "resolved": "https://registry.npmmirror.com/prosemirror-model/-/prosemirror-model-1.25.6.tgz", - "integrity": "sha512-RIm+e9BiqAaJ1mRECv3vR3C+VG8ELoTTI+47tVudGi82yLnFOx3G/p/iSPK1HmHQdKhkkrJ68NJqxh7S+FBVmQ==", - "requires": { - "orderedmap": "^2.0.0" - } - }, - "prosemirror-schema-basic": { - "version": "1.2.4", - "resolved": "https://registry.npmmirror.com/prosemirror-schema-basic/-/prosemirror-schema-basic-1.2.4.tgz", - "integrity": "sha512-ELxP4TlX3yr2v5rM7Sb70SqStq5NvI15c0j9j/gjsrO5vaw+fnnpovCLEGIcpeGfifkuqJwl4fon6b+KdrODYQ==", - "requires": { - "prosemirror-model": "^1.25.0" - } - }, - "prosemirror-schema-list": { - "version": "1.5.1", - "resolved": "https://registry.npmmirror.com/prosemirror-schema-list/-/prosemirror-schema-list-1.5.1.tgz", - "integrity": "sha512-927lFx/uwyQaGwJxLWCZRkjXG0p48KpMj6ueoYiu4JX05GGuGcgzAy62dfiV8eFZftgyBUvLx76RsMe20fJl+Q==", - "requires": { - "prosemirror-model": "^1.0.0", - "prosemirror-state": "^1.0.0", - "prosemirror-transform": "^1.7.3" - } - }, - "prosemirror-state": { - "version": "1.4.4", - "resolved": "https://registry.npmmirror.com/prosemirror-state/-/prosemirror-state-1.4.4.tgz", - "integrity": "sha512-6jiYHH2CIGbCfnxdHbXZ12gySFY/fz/ulZE333G6bPqIZ4F+TXo9ifiR86nAHpWnfoNjOb3o5ESi7J8Uz1jXHw==", - "requires": { - "prosemirror-model": "^1.0.0", - "prosemirror-transform": "^1.0.0", - "prosemirror-view": "^1.27.0" - } - }, - "prosemirror-tables": { - "version": "1.8.5", - "resolved": "https://registry.npmmirror.com/prosemirror-tables/-/prosemirror-tables-1.8.5.tgz", - "integrity": "sha512-V/0cDCsHKHe/tfWkeCmthNUcEp1IVO3p6vwN8XtwE9PZQLAZJigbw3QoraAdfJPir4NKJtNvOB8oYGKRl+t0Dw==", - "requires": { - "prosemirror-keymap": "^1.2.3", - "prosemirror-model": "^1.25.4", - "prosemirror-state": "^1.4.4", - "prosemirror-transform": "^1.10.5", - "prosemirror-view": "^1.41.4" - } - }, - "prosemirror-trailing-node": { - "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/prosemirror-trailing-node/-/prosemirror-trailing-node-3.0.0.tgz", - "integrity": "sha512-xiun5/3q0w5eRnGYfNlW1uU9W6x5MoFKWwq/0TIRgt09lv7Hcser2QYV8t4muXbEr+Fwo0geYn79Xs4GKywrRQ==", - "requires": { - "@remirror/core-constants": "3.0.0", - "escape-string-regexp": "^4.0.0" - } - }, - "prosemirror-transform": { - "version": "1.12.0", - "resolved": "https://registry.npmmirror.com/prosemirror-transform/-/prosemirror-transform-1.12.0.tgz", - "integrity": "sha512-GxboyN4AMIsoHNtz5uf2r2Ru551i5hWeCMD6E2Ib4Eogqoub0NflniaBPVQ4MrGE5yZ8JV9tUHg9qcZTTrcN4w==", - "requires": { - "prosemirror-model": "^1.21.0" - } - }, - "prosemirror-view": { - "version": "1.41.8", - "resolved": "https://registry.npmmirror.com/prosemirror-view/-/prosemirror-view-1.41.8.tgz", - "integrity": "sha512-TnKDdohEatgyZNGCDWIdccOHXhYloJwbwU+phw/a23KBvJIR9lWQWW7WHHK3vBdOLDNuF7TaX98GObUZOWkOnA==", - "requires": { - "prosemirror-model": "^1.20.0", - "prosemirror-state": "^1.0.0", - "prosemirror-transform": "^1.1.0" - } - }, - "proxy-from-env": { - "version": "2.1.0", - "resolved": "https://registry.npmmirror.com/proxy-from-env/-/proxy-from-env-2.1.0.tgz", - "integrity": "sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==" - }, - "punycode.js": { - "version": "2.3.1", - "resolved": "https://registry.npmmirror.com/punycode.js/-/punycode.js-2.3.1.tgz", - "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==" - }, - "quansync": { - "version": "0.2.11", - "resolved": "https://registry.npmmirror.com/quansync/-/quansync-0.2.11.tgz", - "integrity": "sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA==", - "dev": true - }, - "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmmirror.com/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true - }, - "readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "requires": { - "picomatch": "^2.2.1" - }, - "dependencies": { - "picomatch": { - "version": "2.3.2", - "resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.2.tgz", - "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", - "dev": true - } - } - }, - "reusify": { - "version": "1.1.0", - "resolved": "https://registry.npmmirror.com/reusify/-/reusify-1.1.0.tgz", - "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", - "dev": true - }, - "rollup": { - "version": "4.60.4", - "resolved": "https://registry.npmmirror.com/rollup/-/rollup-4.60.4.tgz", - "integrity": "sha512-WHeFSbZYsPu3+bLoNRUuAO+wavNlocOPf3wSHTP7hcFKVnJeWsYlCDbr3mTS14FCizf9ccIxXA8sGL8zKeQN3g==", - "dev": true, - "requires": { - "@rollup/rollup-android-arm-eabi": "4.60.4", - "@rollup/rollup-android-arm64": "4.60.4", - "@rollup/rollup-darwin-arm64": "4.60.4", - "@rollup/rollup-darwin-x64": "4.60.4", - "@rollup/rollup-freebsd-arm64": "4.60.4", - "@rollup/rollup-freebsd-x64": "4.60.4", - "@rollup/rollup-linux-arm-gnueabihf": "4.60.4", - "@rollup/rollup-linux-arm-musleabihf": "4.60.4", - "@rollup/rollup-linux-arm64-gnu": "4.60.4", - "@rollup/rollup-linux-arm64-musl": "4.60.4", - "@rollup/rollup-linux-loong64-gnu": "4.60.4", - "@rollup/rollup-linux-loong64-musl": "4.60.4", - "@rollup/rollup-linux-ppc64-gnu": "4.60.4", - "@rollup/rollup-linux-ppc64-musl": "4.60.4", - "@rollup/rollup-linux-riscv64-gnu": "4.60.4", - "@rollup/rollup-linux-riscv64-musl": "4.60.4", - "@rollup/rollup-linux-s390x-gnu": "4.60.4", - "@rollup/rollup-linux-x64-gnu": "4.60.4", - "@rollup/rollup-linux-x64-musl": "4.60.4", - "@rollup/rollup-openbsd-x64": "4.60.4", - "@rollup/rollup-openharmony-arm64": "4.60.4", - "@rollup/rollup-win32-arm64-msvc": "4.60.4", - "@rollup/rollup-win32-ia32-msvc": "4.60.4", - "@rollup/rollup-win32-x64-gnu": "4.60.4", - "@rollup/rollup-win32-x64-msvc": "4.60.4", - "@types/estree": "1.0.8", - "fsevents": "~2.3.2" - }, - "dependencies": { - "@types/estree": { - "version": "1.0.8", - "resolved": "https://registry.npmmirror.com/@types/estree/-/estree-1.0.8.tgz", - "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", - "dev": true - } - } - }, - "rope-sequence": { - "version": "1.3.4", - "resolved": "https://registry.npmmirror.com/rope-sequence/-/rope-sequence-1.3.4.tgz", - "integrity": "sha512-UT5EDe2cu2E/6O4igUr5PSFs23nvvukicWHx6GnOPlHAiiYbzNuCRQCuiUdHJQcqKalLKlrYJnjY0ySGsXNQXQ==" - }, - "run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmmirror.com/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "requires": { - "queue-microtask": "^1.2.2" - } - }, - "scule": { - "version": "1.3.0", - "resolved": "https://registry.npmmirror.com/scule/-/scule-1.3.0.tgz", - "integrity": "sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g==", - "dev": true - }, - "source-map-js": { - "version": "1.2.1", - "resolved": "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.2.1.tgz", - "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==" - }, - "strip-literal": { - "version": "2.1.1", - "resolved": "https://registry.npmmirror.com/strip-literal/-/strip-literal-2.1.1.tgz", - "integrity": "sha512-631UJ6O00eNGfMiWG78ck80dfBab8X6IVFB51jZK5Icd7XAs60Z5y7QdSd/wGIklnWvRbUNloVzhOKKmutxQ6Q==", - "dev": true, - "requires": { - "js-tokens": "^9.0.1" - } - }, - "tinyglobby": { - "version": "0.2.16", - "resolved": "https://registry.npmmirror.com/tinyglobby/-/tinyglobby-0.2.16.tgz", - "integrity": "sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==", - "dev": true, - "requires": { - "fdir": "^6.5.0", - "picomatch": "^4.0.4" - } - }, - "tippy.js": { - "version": "6.3.7", - "resolved": "https://registry.npmmirror.com/tippy.js/-/tippy.js-6.3.7.tgz", - "integrity": "sha512-E1d3oP2emgJ9dRQZdf3Kkn0qJgI6ZLpyS5z6ZkY1DF3kaQaBsGZsndEpHwx+eC+tYM41HaSNvNtLx8tU57FzTQ==", - "requires": { - "@popperjs/core": "^2.9.0" - } - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "uc.micro": { - "version": "2.1.0", - "resolved": "https://registry.npmmirror.com/uc.micro/-/uc.micro-2.1.0.tgz", - "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==" - }, - "ufo": { - "version": "1.6.4", - "resolved": "https://registry.npmmirror.com/ufo/-/ufo-1.6.4.tgz", - "integrity": "sha512-JFNbkD1Svwe0KvGi8GOeLcP4kAWQ609twvCdcHxq1oSL8svv39ZuSvajcD8B+5D0eL4+s1Is2D/O6KN3qcTeRA==", - "dev": true - }, - "unimport": { - "version": "3.14.6", - "resolved": "https://registry.npmmirror.com/unimport/-/unimport-3.14.6.tgz", - "integrity": "sha512-CYvbDaTT04Rh8bmD8jz3WPmHYZRG/NnvYVzwD6V1YAlvvKROlAeNDUBhkBGzNav2RKaeuXvlWYaa1V4Lfi/O0g==", - "dev": true, - "requires": { - "@rollup/pluginutils": "^5.1.4", - "acorn": "^8.14.0", - "escape-string-regexp": "^5.0.0", - "estree-walker": "^3.0.3", - "fast-glob": "^3.3.3", - "local-pkg": "^1.0.0", - "magic-string": "^0.30.17", - "mlly": "^1.7.4", - "pathe": "^2.0.1", - "picomatch": "^4.0.2", - "pkg-types": "^1.3.0", - "scule": "^1.3.0", - "strip-literal": "^2.1.1", - "unplugin": "^1.16.1" - }, - "dependencies": { - "confbox": { - "version": "0.2.4", - "resolved": "https://registry.npmmirror.com/confbox/-/confbox-0.2.4.tgz", - "integrity": "sha512-ysOGlgTFbN2/Y6Cg3Iye8YKulHw+R2fNXHrgSmXISQdMnomY6eNDprVdW9R5xBguEqI954+S6709UyiO7B+6OQ==", - "dev": true - }, - "escape-string-regexp": { - "version": "5.0.0", - "resolved": "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", - "dev": true - }, - "estree-walker": { - "version": "3.0.3", - "resolved": "https://registry.npmmirror.com/estree-walker/-/estree-walker-3.0.3.tgz", - "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", - "dev": true, - "requires": { - "@types/estree": "^1.0.0" - } - }, - "local-pkg": { - "version": "1.1.2", - "resolved": "https://registry.npmmirror.com/local-pkg/-/local-pkg-1.1.2.tgz", - "integrity": "sha512-arhlxbFRmoQHl33a0Zkle/YWlmNwoyt6QNZEIJcqNbdrsix5Lvc4HyyI3EnwxTYlZYc32EbYrQ8SzEZ7dqgg9A==", - "dev": true, - "requires": { - "mlly": "^1.7.4", - "pkg-types": "^2.3.0", - "quansync": "^0.2.11" - }, - "dependencies": { - "pkg-types": { - "version": "2.3.1", - "resolved": "https://registry.npmmirror.com/pkg-types/-/pkg-types-2.3.1.tgz", - "integrity": "sha512-y+ichcgc2LrADuhLNAx8DFjVfgz91pRxfZdI3UDhxHvcVEZsenLO+7XaU5vOp0u/7V/wZ+plyuQxtrDlZJ+yeg==", - "dev": true, - "requires": { - "confbox": "^0.2.4", - "exsolve": "^1.0.8", - "pathe": "^2.0.3" - } - } - } - } - } - }, - "unplugin": { - "version": "1.16.1", - "resolved": "https://registry.npmmirror.com/unplugin/-/unplugin-1.16.1.tgz", - "integrity": "sha512-4/u/j4FrCKdi17jaxuJA0jClGxB1AvU2hw/IuayPc4ay1XGaJs/rbb4v5WKwAjNifjmXK9PIFyuPiaK8azyR9w==", - "dev": true, - "requires": { - "acorn": "^8.14.0", - "webpack-virtual-modules": "^0.6.2" - } - }, - "unplugin-auto-import": { - "version": "0.18.6", - "resolved": "https://registry.npmmirror.com/unplugin-auto-import/-/unplugin-auto-import-0.18.6.tgz", - "integrity": "sha512-LMFzX5DtkTj/3wZuyG5bgKBoJ7WSgzqSGJ8ppDRdlvPh45mx6t6w3OcbExQi53n3xF5MYkNGPNR/HYOL95KL2A==", - "dev": true, - "requires": { - "@antfu/utils": "^0.7.10", - "@rollup/pluginutils": "^5.1.3", - "fast-glob": "^3.3.2", - "local-pkg": "^0.5.1", - "magic-string": "^0.30.14", - "minimatch": "^9.0.5", - "unimport": "^3.13.4", - "unplugin": "^1.16.0" - } - }, - "unplugin-vue-components": { - "version": "0.27.5", - "resolved": "https://registry.npmmirror.com/unplugin-vue-components/-/unplugin-vue-components-0.27.5.tgz", - "integrity": "sha512-m9j4goBeNwXyNN8oZHHxvIIYiG8FQ9UfmKWeNllpDvhU7btKNNELGPt+o3mckQKuPwrE7e0PvCsx+IWuDSD9Vg==", - "dev": true, - "requires": { - "@antfu/utils": "^0.7.10", - "@rollup/pluginutils": "^5.1.3", - "chokidar": "^3.6.0", - "debug": "^4.3.7", - "fast-glob": "^3.3.2", - "local-pkg": "^0.5.1", - "magic-string": "^0.30.14", - "minimatch": "^9.0.5", - "mlly": "^1.7.3", - "unplugin": "^1.16.0" - } - }, - "vite": { - "version": "6.4.2", - "resolved": "https://registry.npmmirror.com/vite/-/vite-6.4.2.tgz", - "integrity": "sha512-2N/55r4JDJ4gdrCvGgINMy+HH3iRpNIz8K6SFwVsA+JbQScLiC+clmAxBgwiSPgcG9U15QmvqCGWzMbqda5zGQ==", - "dev": true, - "requires": { - "esbuild": "^0.25.0", - "fdir": "^6.4.4", - "fsevents": "~2.3.3", - "picomatch": "^4.0.2", - "postcss": "^8.5.3", - "rollup": "^4.34.9", - "tinyglobby": "^0.2.13" - } - }, - "vue": { - "version": "3.5.34", - "resolved": "https://registry.npmmirror.com/vue/-/vue-3.5.34.tgz", - "integrity": "sha512-WdLBG9gm02OgJIG9axd5Hpx0TFLdzVgfG2evFFu8Rur5O/IoGc5cMjnjh3tPL6GnRGsYvUhBSKVPYVcxRKpMCA==", - "requires": { - "@vue/compiler-dom": "3.5.34", - "@vue/compiler-sfc": "3.5.34", - "@vue/runtime-dom": "3.5.34", - "@vue/server-renderer": "3.5.34", - "@vue/shared": "3.5.34" - } - }, - "vue-component-type-helpers": { - "version": "3.2.9", - "resolved": "https://registry.npmmirror.com/vue-component-type-helpers/-/vue-component-type-helpers-3.2.9.tgz", - "integrity": "sha512-S3BiWYaLSzHxTpln665ELSrMR9UYmrIDUmhik7nVZxmJjTKL2/a+ew1hvGxksKelivm0ujjWfG1fYOiU/2e8rA==" - }, - "vue-demi": { - "version": "0.14.10", - "resolved": "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.10.tgz", - "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==", - "requires": {} - }, - "vue-router": { - "version": "4.6.4", - "resolved": "https://registry.npmmirror.com/vue-router/-/vue-router-4.6.4.tgz", - "integrity": "sha512-Hz9q5sa33Yhduglwz6g9skT8OBPii+4bFn88w6J+J4MfEo4KRRpmiNG/hHHkdbRFlLBOqxN8y8gf2Fb0MTUgVg==", - "requires": { - "@vue/devtools-api": "^6.6.4" - } - }, - "w3c-keyname": { - "version": "2.2.8", - "resolved": "https://registry.npmmirror.com/w3c-keyname/-/w3c-keyname-2.2.8.tgz", - "integrity": "sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==" - }, - "webpack-virtual-modules": { - "version": "0.6.2", - "resolved": "https://registry.npmmirror.com/webpack-virtual-modules/-/webpack-virtual-modules-0.6.2.tgz", - "integrity": "sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==", - "dev": true + "license": "MIT" } } }