diff --git a/.opencode/skills/bug-fix/SKILL.md b/.opencode/skills/bug-fix/SKILL.md new file mode 100644 index 0000000..19ded36 --- /dev/null +++ b/.opencode/skills/bug-fix/SKILL.md @@ -0,0 +1,201 @@ +--- +name: bug-fix +description: Bug诊断与修复技能 - 强调交互式确认和影响分析 +tags: + - bug-fix + - debugging + - troubleshooting + - interactive +version: 1.0.1 +--- + +# Bug修复技能 + +## 技能概述 + +专门用于诊断和修复项目中的bug,强调谨慎的分析流程和充分的交互式确认,确保修复的准确性和完整性,避免引入新的问题或破坏现有功能。 + +## ⚠️ 强制交互规则(MUST FOLLOW) + +**遇到需要用户确认的情况时,必须立即调用 `question` 工具:** + +❌ **禁止**:"我需要向用户确认..."、"请用户回答..."、"在Plan模式下建议先询问..." +✅ **必须**:直接调用工具,不要描述或延迟 + +**调用格式**: +```javascript +question({ + header: "问题确认", + questions: [{ + question: "具体触发场景是什么?", + options: ["新增时", "修改时", "批量导入时", "定时任务时", "其他"] + }] +}) +``` + +**规则**: +- 每次最多 **3个问题** +- 每个问题 **3-6个选项**(穷举常见情况 + "其他"兜底) +- 用户通过**上下键导航**选择 +- 适用于**所有模式**(Build/Plan) + +## 执行原则 + +### 1. 充分理解问题(必要时交互确认) + +**触发条件**: +- 用户对bug的描述含糊不清 +- 问题复现步骤不完整 +- 预期行为与实际行为表述存在歧义 +- 涉及多个可能的问题根因 + +**执行策略**: +- ✅ **立即调用 `question` 工具**(不要描述,直接执行) +- ✅ **暂停其他操作**,不要基于假设进行修复 +- ✅ 澄清:错误现象、触发条件、预期行为、是否有日志 + +### 2. 风险评估与影响分析(必要时交互确认) + +**触发条件**: +- 发现潜在的边界情况用户未提及 +- 代码修改可能影响其他功能模块 +- 存在多种修复方案,各有利弊 +- 发现可能的性能、安全或兼容性隐患 + +**执行策略**: +- ✅ 代码分析后,**不要直接修改代码** +- ✅ 报告潜在问题:影响范围、边界情况、测试场景、数据迁移需求 +- ✅ **使用 `question` 工具**让用户选择方案或确认风险 + +### 3. 关联代码检查(必要时交互确认) + +**触发条件**: +- 发现多个位置存在相似的代码逻辑 +- 修复需要同步更新多个文件 +- 存在可能依赖该bug行为的代码(反模式) +- 发现测试用例可能基于错误行为编写 + +**执行策略**: +- ✅ 使用代码搜索工具查找相似逻辑和调用链 +- ✅ 报告关联代码:是否需要同步修复、依赖关系、测试更新 +- ✅ **使用 `question` 工具**让用户确认修复范围 + +## 修复流程 + +### 阶段1: 问题诊断 +1. 阅读用户的bug描述 +2. 定位相关代码文件(使用 semantic_search, grep_search) +3. 分析代码逻辑和调用链 +4. **触发点1**: 如有不明确之处 → **立即调用 `question` 工具**(不要描述计划) + +### 阶段2: 根因分析 +1. 确定bug的根本原因 +2. 识别影响范围和边界情况 +3. **触发点2**: 发现用户未考虑的问题 → **立即调用 `question` 工具** + +### 阶段3: 方案设计 +1. 设计修复方案 +2. 评估方案的影响和风险 +3. 查找相似代码和依赖关系 +4. **触发点3**: 可能影响其他逻辑 → **立即调用 `question` 工具** + +### 阶段4: 实施修复 +1. 获得用户最终确认后执行代码修改 +2. 使用 `multi_replace_string_in_file` 批量修改 +3. 确保修改的原子性和一致性 + +### 阶段5: 验证建议 +提示用户执行:单元测试(`dotnet test`)、手动测试场景、回归测试 + +## 反模式与成功标准 + +❌ **不要**在未明确理解问题的情况下猜测修复 +❌ **不要**在未评估影响范围的情况下直接修改代码 +❌ **不要**假设用户已考虑所有边界情况 +❌ **不要**在发现关联逻辑时仅修复单个位置 +❌ **不要**跳过风险通知直接实施有争议的修复方案 +❌ **不要**修改代码后不提供验证建议 +❌ **不要**描述"我会询问用户..."而不调用 `question` 工具 +❌ **不要**列出问题清单让用户自行回答 +❌ **不要**在Plan模式下说"如果用户确认..."而不执行工具调用 + +## 成功标准 + +✅ 用户明确确认问题理解无误(通过 `question` 工具获取) +✅ 所有潜在风险和影响已向用户说明(通过 `question` 工具确认) +✅ 修复方案获得用户明确同意(通过 `question` 工具选择) +✅ 相似逻辑和关联代码已同步处理(如适用) +✅ 提供了完整的验证和测试建议 + +## 示例工作流 + +``` +用户: "策略计算结果不对,加价逻辑有问题" + +Agent: +[阶段1 - 问题诊断] +我需要确认几个细节: +1. 具体是哪种类型的策略计算不对?(机票、动态加价、固定加价?) +2. 能否提供一个具体的测试用例输入和错误输出? +3. 预期的正确输出是什么? + +用户: "动态加价,百分比计算错误,应该是基准价×10%,但实际是×100%" + +Agent: +[阶段2 - 根因分析] +已定位到问题: +- 位置: src/Domain.Service/Services/AgentService.cs:234 +- 原因: 百分比未除以100 + +[阶段3 - 方案设计] +⚠️ 发现以下需要确认的点: + +1. **关联代码**: 在 PolicyService.cs 中发现相似的百分比计算(3处), + 是否也存在相同问题? + +2. **单元测试**: UnitTestPolicy.cs:67 的断言值为100%,可能基于错误行为, + 修复后需要更新测试 + +3. **前端影响**: 如果历史数据按错误逻辑存储,前端展示需要迁移脚本吗? + +请确认是否需要一并处理这些关联问题? + +用户: "是的,PolicyService 也需要修复,测试用例也要改,历史数据没有存储" + +Agent: +[阶段4 - 实施修复] +好的,我将修复以下位置: +1. AgentService.cs:234 +2. PolicyService.cs:156, 178, 201 +3. UnitTestPolicy.cs:67 + +[执行代码修改...] + +[阶段5 - 验证建议] +修复完成!建议验证: +1. 运行单元测试: dotnet test +2. 手动测试场景: + - 输入基准价1000,加价10%,期望结果1100 + - 验证策略列表API返回正确百分比 +3. 回归测试: 检查其他类型策略未受影响 +``` + +## 适用场景 + +- ✅ 逻辑错误修复 +- ✅ 空指针异常修复 +- ✅ 数据计算错误 +- ✅ API行为异常 +- ✅ 性能问题修复 +- ✅ 边界条件处理 + +## 相关技能 + +- `refactor`: 重构优化(非bug修复) +- `feature`: 新功能开发 +- `test`: 测试用例编写 + +## 核心约束(必须遵守) +1. **禁止开放式提问** - 所有需要用户输入的场景,必须提供选项列表 +2. 每次交互最多提出5个问题,避免信息过载 +3. 选项设计要穷举常见情况,并保留"其他"兜底选项 diff --git a/.pans/v2.pen b/.pans/v2.pen index 84026cd..1094ed3 100644 --- a/.pans/v2.pen +++ b/.pans/v2.pen @@ -8593,6 +8593,616 @@ ] } ] + }, + { + "type": "frame", + "id": "JJ9L0", + "x": -1841, + "y": 1250, + "name": "Sheet Container - Light", + "width": 375, + "height": 533, + "fill": "transparent", + "layout": "vertical", + "justifyContent": "end", + "children": [ + { + "type": "frame", + "id": "KZKtq", + "name": "sheetL", + "width": "fill_container", + "fill": "#FFFFFF", + "layout": "vertical", + "gap": 24, + "padding": 24, + "children": [ + { + "type": "frame", + "id": "gtdkO", + "name": "headerL", + "width": "fill_container", + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "PKef2", + "name": "titleL", + "fill": "#09090B", + "content": "交易详情", + "fontFamily": "Inter", + "fontSize": 18, + "fontWeight": "600" + }, + { + "type": "icon_font", + "id": "0q9sK", + "name": "closeL", + "width": 24, + "height": 24, + "iconFontName": "close", + "iconFontFamily": "Material Symbols Rounded", + "fill": "#71717A" + } + ] + }, + { + "type": "frame", + "id": "29S5W", + "name": "amountSecL", + "width": "fill_container", + "layout": "vertical", + "gap": 8, + "padding": [ + 16, + 0 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "ThW3y", + "name": "amountLabelL", + "fill": "#71717A", + "content": "金额", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "4YJNt", + "name": "amountValL", + "fill": "#09090B", + "content": "¥ 128.00", + "fontFamily": "Inter", + "fontSize": 32, + "fontWeight": "700" + } + ] + }, + { + "type": "frame", + "id": "5BFVE", + "name": "form", + "width": "fill_container", + "layout": "vertical", + "gap": 16, + "children": [ + { + "type": "frame", + "id": "zWW2D", + "name": "row1", + "width": "fill_container", + "height": 48, + "stroke": { + "align": "inside", + "thickness": { + "bottom": 1 + }, + "fill": "#E4E4E7" + }, + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "smF5M", + "name": "label1", + "fill": "#71717A", + "content": "类型", + "fontFamily": "Inter", + "fontSize": 16, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "z5fFu", + "name": "val1", + "fill": "#09090B", + "content": "支出", + "fontFamily": "Inter", + "fontSize": 16, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "XbgI8", + "name": "row2", + "width": "fill_container", + "height": 48, + "stroke": { + "align": "inside", + "thickness": { + "bottom": 1 + }, + "fill": "#E4E4E7" + }, + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "lkyfw", + "name": "label2", + "fill": "#71717A", + "content": "分类", + "fontFamily": "Inter", + "fontSize": 16, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "nnnmb", + "name": "val2", + "fill": "#09090B", + "content": "餐饮", + "fontFamily": "Inter", + "fontSize": 16, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "Z5R3M", + "name": "row3", + "width": "fill_container", + "height": 48, + "stroke": { + "align": "inside", + "thickness": { + "bottom": 1 + }, + "fill": "#E4E4E7" + }, + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "Crvgr", + "name": "label3", + "fill": "#71717A", + "content": "时间", + "fontFamily": "Inter", + "fontSize": 16, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "RlXZg", + "name": "val3", + "fill": "#09090B", + "content": "2023-10-27 12:30", + "fontFamily": "Inter", + "fontSize": 16, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "SwX0p", + "name": "row4", + "width": "fill_container", + "height": 48, + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "baOuc", + "name": "label4", + "fill": "#71717A", + "content": "备注", + "fontFamily": "Inter", + "fontSize": 16, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "RwRvy", + "name": "val4", + "fill": "#09090B", + "content": "午餐", + "fontFamily": "Inter", + "fontSize": 16, + "fontWeight": "normal" + } + ] + } + ] + }, + { + "type": "frame", + "id": "OKewD", + "name": "actions", + "width": "fill_container", + "gap": 16, + "children": [ + { + "type": "frame", + "id": "zvkRM", + "name": "delBtn", + "width": "fill_container", + "height": 48, + "cornerRadius": 8, + "stroke": { + "align": "inside", + "thickness": 1, + "fill": "#EF4444" + }, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "0yPCM", + "name": "delText", + "fill": "#EF4444", + "content": "删除", + "fontFamily": "Inter", + "fontSize": 16, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "xk312", + "name": "saveBtn", + "width": "fill_container", + "height": 48, + "fill": "#6366F1", + "cornerRadius": 8, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "Yt6e8", + "name": "saveText", + "fill": "#FAFAFA", + "content": "保存", + "fontFamily": "Inter", + "fontSize": 16, + "fontWeight": "500" + } + ] + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "dqj3Y", + "x": -1413, + "y": 1250, + "name": "Sheet Container - Dark", + "width": 375, + "height": 533, + "fill": "transparent", + "layout": "vertical", + "justifyContent": "end", + "children": [ + { + "type": "frame", + "id": "faeHw", + "name": "sheetD", + "width": "fill_container", + "fill": "#18181B", + "layout": "vertical", + "gap": 24, + "padding": 24, + "children": [ + { + "type": "frame", + "id": "cOp6l", + "name": "headerD", + "width": "fill_container", + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "tu5EZ", + "name": "titleD", + "fill": "#FAFAFA", + "content": "交易详情", + "fontFamily": "Inter", + "fontSize": 18, + "fontWeight": "600" + }, + { + "type": "icon_font", + "id": "lcntx", + "name": "closeD", + "width": 24, + "height": 24, + "iconFontName": "close", + "iconFontFamily": "Material Symbols Rounded", + "fill": "#A1A1AA" + } + ] + }, + { + "type": "frame", + "id": "z4y07", + "name": "amountSecD", + "width": "fill_container", + "layout": "vertical", + "gap": 8, + "padding": [ + 16, + 0 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "aTq8s", + "name": "amountLabelD", + "fill": "#A1A1AA", + "content": "金额", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "E5Y8W", + "name": "amountValD", + "fill": "#FAFAFA", + "content": "¥ 128.00", + "fontFamily": "Inter", + "fontSize": 32, + "fontWeight": "700" + } + ] + }, + { + "type": "frame", + "id": "HFPFh", + "name": "form", + "width": "fill_container", + "layout": "vertical", + "gap": 16, + "children": [ + { + "type": "frame", + "id": "vu63U", + "name": "row1", + "width": "fill_container", + "height": 48, + "stroke": { + "align": "inside", + "thickness": { + "bottom": 1 + }, + "fill": "#27272A" + }, + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "JN8i6", + "name": "label1", + "fill": "#A1A1AA", + "content": "类型", + "fontFamily": "Inter", + "fontSize": 16, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "Zoqza", + "name": "val1", + "fill": "#FAFAFA", + "content": "支出", + "fontFamily": "Inter", + "fontSize": 16, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "LM6qW", + "name": "row2", + "width": "fill_container", + "height": 48, + "stroke": { + "align": "inside", + "thickness": { + "bottom": 1 + }, + "fill": "#27272A" + }, + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "f5o4a", + "name": "label2", + "fill": "#A1A1AA", + "content": "分类", + "fontFamily": "Inter", + "fontSize": 16, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "w0wXq", + "name": "val2", + "fill": "#FAFAFA", + "content": "餐饮", + "fontFamily": "Inter", + "fontSize": 16, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "sXXKZ", + "name": "row3", + "width": "fill_container", + "height": 48, + "stroke": { + "align": "inside", + "thickness": { + "bottom": 1 + }, + "fill": "#27272A" + }, + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "7Krx3", + "name": "label3", + "fill": "#A1A1AA", + "content": "时间", + "fontFamily": "Inter", + "fontSize": 16, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "VMAas", + "name": "val3", + "fill": "#FAFAFA", + "content": "2023-10-27 12:30", + "fontFamily": "Inter", + "fontSize": 16, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "gn9yU", + "name": "row4", + "width": "fill_container", + "height": 48, + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "eE7u1", + "name": "label4", + "fill": "#A1A1AA", + "content": "备注", + "fontFamily": "Inter", + "fontSize": 16, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "KKvHv", + "name": "val4", + "fill": "#FAFAFA", + "content": "午餐", + "fontFamily": "Inter", + "fontSize": 16, + "fontWeight": "normal" + } + ] + } + ] + }, + { + "type": "frame", + "id": "59EMZ", + "name": "actions", + "width": "fill_container", + "gap": 16, + "children": [ + { + "type": "frame", + "id": "t9EGF", + "name": "delBtn", + "width": "fill_container", + "height": 48, + "cornerRadius": 8, + "stroke": { + "align": "inside", + "thickness": 1, + "fill": "#EF4444" + }, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "CieS3", + "name": "delText", + "fill": "#EF4444", + "content": "删除", + "fontFamily": "Inter", + "fontSize": 16, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "HtYaG", + "name": "saveBtn", + "width": "fill_container", + "height": 48, + "fill": "#6366F1", + "cornerRadius": 8, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "yxC6Y", + "name": "saveText", + "fill": "#FAFAFA", + "content": "保存", + "fontFamily": "Inter", + "fontSize": 16, + "fontWeight": "500" + } + ] + } + ] + } + ] + } + ] } ] } \ No newline at end of file diff --git a/Web/package.json b/Web/package.json index e4d485b..76cf52d 100644 --- a/Web/package.json +++ b/Web/package.json @@ -30,6 +30,7 @@ "eslint-plugin-vue": "~10.5.1", "globals": "^16.5.0", "prettier": "3.6.2", + "sass-embedded": "^1.97.3", "vite": "^7.2.4", "vite-plugin-vue-devtools": "^8.0.5" } diff --git a/Web/pnpm-lock.yaml b/Web/pnpm-lock.yaml index e98f482..37b4ab5 100644 --- a/Web/pnpm-lock.yaml +++ b/Web/pnpm-lock.yaml @@ -35,7 +35,7 @@ importers: version: 9.39.2 '@vitejs/plugin-vue': specifier: ^6.0.2 - version: 6.0.3(vite@7.3.0)(vue@3.5.26) + version: 6.0.3(vite@7.3.0(sass-embedded@1.97.3)(sass@1.97.3))(vue@3.5.26) '@vue/eslint-config-prettier': specifier: ^10.2.0 version: 10.2.0(eslint@9.39.2)(prettier@3.6.2) @@ -51,12 +51,15 @@ importers: prettier: specifier: 3.6.2 version: 3.6.2 + sass-embedded: + specifier: ^1.97.3 + version: 1.97.3 vite: specifier: ^7.2.4 - version: 7.3.0 + version: 7.3.0(sass-embedded@1.97.3)(sass@1.97.3) vite-plugin-vue-devtools: specifier: ^8.0.5 - version: 8.0.5(vite@7.3.0)(vue@3.5.26) + version: 8.0.5(vite@7.3.0(sass-embedded@1.97.3)(sass@1.97.3))(vue@3.5.26) packages: @@ -200,6 +203,9 @@ packages: resolution: {integrity: sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==} engines: {node: '>=6.9.0'} + '@bufbuild/protobuf@2.11.0': + resolution: {integrity: sha512-sBXGT13cpmPR5BMgHE6UEEfEaShh5Ror6rfN3yEK5si7QVrtZg8LEPQb0VVhiLRUslD2yLnXtnRzG035J/mZXQ==} + '@esbuild/aix-ppc64@0.27.2': resolution: {integrity: sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw==} engines: {node: '>=18'} @@ -426,6 +432,88 @@ packages: '@jridgewell/trace-mapping@0.3.31': resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} + '@parcel/watcher-android-arm64@2.5.6': + resolution: {integrity: sha512-YQxSS34tPF/6ZG7r/Ih9xy+kP/WwediEUsqmtf0cuCV5TPPKw/PQHRhueUo6JdeFJaqV3pyjm0GdYjZotbRt/A==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [android] + + '@parcel/watcher-darwin-arm64@2.5.6': + resolution: {integrity: sha512-Z2ZdrnwyXvvvdtRHLmM4knydIdU9adO3D4n/0cVipF3rRiwP+3/sfzpAwA/qKFL6i1ModaabkU7IbpeMBgiVEA==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [darwin] + + '@parcel/watcher-darwin-x64@2.5.6': + resolution: {integrity: sha512-HgvOf3W9dhithcwOWX9uDZyn1lW9R+7tPZ4sug+NGrGIo4Rk1hAXLEbcH1TQSqxts0NYXXlOWqVpvS1SFS4fRg==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [darwin] + + '@parcel/watcher-freebsd-x64@2.5.6': + resolution: {integrity: sha512-vJVi8yd/qzJxEKHkeemh7w3YAn6RJCtYlE4HPMoVnCpIXEzSrxErBW5SJBgKLbXU3WdIpkjBTeUNtyBVn8TRng==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [freebsd] + + '@parcel/watcher-linux-arm-glibc@2.5.6': + resolution: {integrity: sha512-9JiYfB6h6BgV50CCfasfLf/uvOcJskMSwcdH1PHH9rvS1IrNy8zad6IUVPVUfmXr+u+Km9IxcfMLzgdOudz9EQ==} + engines: {node: '>= 10.0.0'} + cpu: [arm] + os: [linux] + + '@parcel/watcher-linux-arm-musl@2.5.6': + resolution: {integrity: sha512-Ve3gUCG57nuUUSyjBq/MAM0CzArtuIOxsBdQ+ftz6ho8n7s1i9E1Nmk/xmP323r2YL0SONs1EuwqBp2u1k5fxg==} + engines: {node: '>= 10.0.0'} + cpu: [arm] + os: [linux] + + '@parcel/watcher-linux-arm64-glibc@2.5.6': + resolution: {integrity: sha512-f2g/DT3NhGPdBmMWYoxixqYr3v/UXcmLOYy16Bx0TM20Tchduwr4EaCbmxh1321TABqPGDpS8D/ggOTaljijOA==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [linux] + + '@parcel/watcher-linux-arm64-musl@2.5.6': + resolution: {integrity: sha512-qb6naMDGlbCwdhLj6hgoVKJl2odL34z2sqkC7Z6kzir8b5W65WYDpLB6R06KabvZdgoHI/zxke4b3zR0wAbDTA==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [linux] + + '@parcel/watcher-linux-x64-glibc@2.5.6': + resolution: {integrity: sha512-kbT5wvNQlx7NaGjzPFu8nVIW1rWqV780O7ZtkjuWaPUgpv2NMFpjYERVi0UYj1msZNyCzGlaCWEtzc+exjMGbQ==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [linux] + + '@parcel/watcher-linux-x64-musl@2.5.6': + resolution: {integrity: sha512-1JRFeC+h7RdXwldHzTsmdtYR/Ku8SylLgTU/reMuqdVD7CtLwf0VR1FqeprZ0eHQkO0vqsbvFLXUmYm/uNKJBg==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [linux] + + '@parcel/watcher-win32-arm64@2.5.6': + resolution: {integrity: sha512-3ukyebjc6eGlw9yRt678DxVF7rjXatWiHvTXqphZLvo7aC5NdEgFufVwjFfY51ijYEWpXbqF5jtrK275z52D4Q==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [win32] + + '@parcel/watcher-win32-ia32@2.5.6': + resolution: {integrity: sha512-k35yLp1ZMwwee3Ez/pxBi5cf4AoBKYXj00CZ80jUz5h8prpiaQsiRPKQMxoLstNuqe2vR4RNPEAEcjEFzhEz/g==} + engines: {node: '>= 10.0.0'} + cpu: [ia32] + os: [win32] + + '@parcel/watcher-win32-x64@2.5.6': + resolution: {integrity: sha512-hbQlYcCq5dlAX9Qx+kFb0FHue6vbjlf0FrNzSKdYK2APUf7tGfGxQCk2ihEREmbR6ZMc0MVAD5RIX/41gpUzTw==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [win32] + + '@parcel/watcher@2.5.6': + resolution: {integrity: sha512-tmmZ3lQxAe/k/+rNnXQRawJ4NjxO2hqiOLTHvWchtGZULp4RyFeh6aU4XdOYBFe2KE1oShQTv4AblOs2iOrNnQ==} + engines: {node: '>= 10.0.0'} + '@pkgr/core@0.2.9': resolution: {integrity: sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==} engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} @@ -470,67 +558,56 @@ packages: resolution: {integrity: sha512-EHMUcDwhtdRGlXZsGSIuXSYwD5kOT9NVnx9sqzYiwAc91wfYOE1g1djOEDseZJKKqtHAHGwnGPQu3kytmfaXLQ==} cpu: [arm] os: [linux] - libc: [glibc] '@rollup/rollup-linux-arm-musleabihf@4.54.0': resolution: {integrity: sha512-+pBrqEjaakN2ySv5RVrj/qLytYhPKEUwk+e3SFU5jTLHIcAtqh2rLrd/OkbNuHJpsBgxsD8ccJt5ga/SeG0JmA==} cpu: [arm] os: [linux] - libc: [musl] '@rollup/rollup-linux-arm64-gnu@4.54.0': resolution: {integrity: sha512-NSqc7rE9wuUaRBsBp5ckQ5CVz5aIRKCwsoa6WMF7G01sX3/qHUw/z4pv+D+ahL1EIKy6Enpcnz1RY8pf7bjwng==} cpu: [arm64] os: [linux] - libc: [glibc] '@rollup/rollup-linux-arm64-musl@4.54.0': resolution: {integrity: sha512-gr5vDbg3Bakga5kbdpqx81m2n9IX8M6gIMlQQIXiLTNeQW6CucvuInJ91EuCJ/JYvc+rcLLsDFcfAD1K7fMofg==} cpu: [arm64] os: [linux] - libc: [musl] '@rollup/rollup-linux-loong64-gnu@4.54.0': resolution: {integrity: sha512-gsrtB1NA3ZYj2vq0Rzkylo9ylCtW/PhpLEivlgWe0bpgtX5+9j9EZa0wtZiCjgu6zmSeZWyI/e2YRX1URozpIw==} cpu: [loong64] os: [linux] - libc: [glibc] '@rollup/rollup-linux-ppc64-gnu@4.54.0': resolution: {integrity: sha512-y3qNOfTBStmFNq+t4s7Tmc9hW2ENtPg8FeUD/VShI7rKxNW7O4fFeaYbMsd3tpFlIg1Q8IapFgy7Q9i2BqeBvA==} cpu: [ppc64] os: [linux] - libc: [glibc] '@rollup/rollup-linux-riscv64-gnu@4.54.0': resolution: {integrity: sha512-89sepv7h2lIVPsFma8iwmccN7Yjjtgz0Rj/Ou6fEqg3HDhpCa+Et+YSufy27i6b0Wav69Qv4WBNl3Rs6pwhebQ==} cpu: [riscv64] os: [linux] - libc: [glibc] '@rollup/rollup-linux-riscv64-musl@4.54.0': resolution: {integrity: sha512-ZcU77ieh0M2Q8Ur7D5X7KvK+UxbXeDHwiOt/CPSBTI1fBmeDMivW0dPkdqkT4rOgDjrDDBUed9x4EgraIKoR2A==} cpu: [riscv64] os: [linux] - libc: [musl] '@rollup/rollup-linux-s390x-gnu@4.54.0': resolution: {integrity: sha512-2AdWy5RdDF5+4YfG/YesGDDtbyJlC9LHmL6rZw6FurBJ5n4vFGupsOBGfwMRjBYH7qRQowT8D/U4LoSvVwOhSQ==} cpu: [s390x] os: [linux] - libc: [glibc] '@rollup/rollup-linux-x64-gnu@4.54.0': resolution: {integrity: sha512-WGt5J8Ij/rvyqpFexxk3ffKqqbLf9AqrTBbWDk7ApGUzaIs6V+s2s84kAxklFwmMF/vBNGrVdYgbblCOFFezMQ==} cpu: [x64] os: [linux] - libc: [glibc] '@rollup/rollup-linux-x64-musl@4.54.0': resolution: {integrity: sha512-JzQmb38ATzHjxlPHuTH6tE7ojnMKM2kYNzt44LO/jJi8BpceEC8QuXYA908n8r3CNuG/B3BV8VR3Hi1rYtmPiw==} cpu: [x64] os: [linux] - libc: [musl] '@rollup/rollup-openharmony-arm64@4.54.0': resolution: {integrity: sha512-huT3fd0iC7jigGh7n3q/+lfPcXxBi+om/Rs3yiFxjvSxbSB6aohDFXbWvlspaqjeOh+hx7DDHS+5Es5qRkWkZg==} @@ -722,6 +799,10 @@ packages: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} + chokidar@4.0.3: + resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} + engines: {node: '>= 14.16.0'} + color-convert@2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} engines: {node: '>=7.0.0'} @@ -729,6 +810,9 @@ packages: color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + colorjs.io@0.5.2: + resolution: {integrity: sha512-twmVoizEW7ylZSN32OgKdXRmo1qg+wT5/6C3xu5b9QsWzSFAhHLn2xd8ro0diCsKfCj1RdaTP/nrcW+vAoQPIw==} + combined-stream@1.0.8: resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} engines: {node: '>= 0.8'} @@ -786,6 +870,10 @@ packages: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} + detect-libc@2.1.2: + resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} + engines: {node: '>=8'} + dunder-proto@1.0.1: resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} engines: {node: '>= 0.4'} @@ -1019,6 +1107,9 @@ packages: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} + immutable@5.1.4: + resolution: {integrity: sha512-p6u1bG3YSnINT5RQmx/yRZBpenIl30kVxkTLDyHLIMk0gict704Q9n+thfDI7lTRm9vXdDYutVzXhzcThxTnXA==} + import-fresh@3.3.1: resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} engines: {node: '>=6'} @@ -1143,6 +1234,9 @@ packages: natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + node-addon-api@7.1.1: + resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==} + node-releases@2.0.27: resolution: {integrity: sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==} @@ -1233,6 +1327,10 @@ packages: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} + readdirp@4.1.2: + resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} + engines: {node: '>= 14.18.0'} + resolve-from@4.0.0: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} @@ -1249,6 +1347,123 @@ packages: resolution: {integrity: sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==} engines: {node: '>=18'} + rxjs@7.8.2: + resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==} + + sass-embedded-all-unknown@1.97.3: + resolution: {integrity: sha512-t6N46NlPuXiY3rlmG6/+1nwebOBOaLFOOVqNQOC2cJhghOD4hh2kHNQQTorCsbY9S1Kir2la1/XLBwOJfui0xg==} + cpu: ['!arm', '!arm64', '!riscv64', '!x64'] + + sass-embedded-android-arm64@1.97.3: + resolution: {integrity: sha512-aiZ6iqiHsUsaDx0EFbbmmA0QgxicSxVVN3lnJJ0f1RStY0DthUkquGT5RJ4TPdaZ6ebeJWkboV4bra+CP766eA==} + engines: {node: '>=14.0.0'} + cpu: [arm64] + os: [android] + + sass-embedded-android-arm@1.97.3: + resolution: {integrity: sha512-cRTtf/KV/q0nzGZoUzVkeIVVFv3L/tS1w4WnlHapphsjTXF/duTxI8JOU1c/9GhRPiMdfeXH7vYNcMmtjwX7jg==} + engines: {node: '>=14.0.0'} + cpu: [arm] + os: [android] + + sass-embedded-android-riscv64@1.97.3: + resolution: {integrity: sha512-zVEDgl9JJodofGHobaM/q6pNETG69uuBIGQHRo789jloESxxZe82lI3AWJQuPmYCOG5ElfRthqgv89h3gTeLYA==} + engines: {node: '>=14.0.0'} + cpu: [riscv64] + os: [android] + + sass-embedded-android-x64@1.97.3: + resolution: {integrity: sha512-3ke0le7ZKepyXn/dKKspYkpBC0zUk/BMciyP5ajQUDy4qJwobd8zXdAq6kOkdiMB+d9UFJOmEkvgFJHl3lqwcw==} + engines: {node: '>=14.0.0'} + cpu: [x64] + os: [android] + + sass-embedded-darwin-arm64@1.97.3: + resolution: {integrity: sha512-fuqMTqO4gbOmA/kC5b9y9xxNYw6zDEyfOtMgabS7Mz93wimSk2M1quQaTJnL98Mkcsl2j+7shNHxIS/qpcIDDA==} + engines: {node: '>=14.0.0'} + cpu: [arm64] + os: [darwin] + + sass-embedded-darwin-x64@1.97.3: + resolution: {integrity: sha512-b/2RBs/2bZpP8lMkyZ0Px0vkVkT8uBd0YXpOwK7iOwYkAT8SsO4+WdVwErsqC65vI5e1e5p1bb20tuwsoQBMVA==} + engines: {node: '>=14.0.0'} + cpu: [x64] + os: [darwin] + + sass-embedded-linux-arm64@1.97.3: + resolution: {integrity: sha512-IP1+2otCT3DuV46ooxPaOKV1oL5rLjteRzf8ldZtfIEcwhSgSsHgA71CbjYgLEwMY9h4jeal8Jfv3QnedPvSjg==} + engines: {node: '>=14.0.0'} + cpu: [arm64] + os: [linux] + + sass-embedded-linux-arm@1.97.3: + resolution: {integrity: sha512-2lPQ7HQQg4CKsH18FTsj2hbw5GJa6sBQgDsls+cV7buXlHjqF8iTKhAQViT6nrpLK/e8nFCoaRgSqEC8xMnXuA==} + engines: {node: '>=14.0.0'} + cpu: [arm] + os: [linux] + + sass-embedded-linux-musl-arm64@1.97.3: + resolution: {integrity: sha512-Lij0SdZCsr+mNRSyDZ7XtJpXEITrYsaGbOTz5e6uFLJ9bmzUbV7M8BXz2/cA7bhfpRPT7/lwRKPdV4+aR9Ozcw==} + engines: {node: '>=14.0.0'} + cpu: [arm64] + os: [linux] + + sass-embedded-linux-musl-arm@1.97.3: + resolution: {integrity: sha512-cBTMU68X2opBpoYsSZnI321gnoaiMBEtc+60CKCclN6PCL3W3uXm8g4TLoil1hDD6mqU9YYNlVG6sJ+ZNef6Lg==} + engines: {node: '>=14.0.0'} + cpu: [arm] + os: [linux] + + sass-embedded-linux-musl-riscv64@1.97.3: + resolution: {integrity: sha512-sBeLFIzMGshR4WmHAD4oIM7WJVkSoCIEwutzptFtGlSlwfNiijULp+J5hA2KteGvI6Gji35apR5aWj66wEn/iA==} + engines: {node: '>=14.0.0'} + cpu: [riscv64] + os: [linux] + + sass-embedded-linux-musl-x64@1.97.3: + resolution: {integrity: sha512-/oWJ+OVrDg7ADDQxRLC/4g1+Nsz1g4mkYS2t6XmyMJKFTFK50FVI2t5sOdFH+zmMp+nXHKM036W94y9m4jjEcw==} + engines: {node: '>=14.0.0'} + cpu: [x64] + os: [linux] + + sass-embedded-linux-riscv64@1.97.3: + resolution: {integrity: sha512-l3IfySApLVYdNx0Kjm7Zehte1CDPZVcldma3dZt+TfzvlAEerM6YDgsk5XEj3L8eHBCgHgF4A0MJspHEo2WNfA==} + engines: {node: '>=14.0.0'} + cpu: [riscv64] + os: [linux] + + sass-embedded-linux-x64@1.97.3: + resolution: {integrity: sha512-Kwqwc/jSSlcpRjULAOVbndqEy2GBzo6OBmmuBVINWUaJLJ8Kczz3vIsDUWLfWz/kTEw9FHBSiL0WCtYLVAXSLg==} + engines: {node: '>=14.0.0'} + cpu: [x64] + os: [linux] + + sass-embedded-unknown-all@1.97.3: + resolution: {integrity: sha512-/GHajyYJmvb0IABUQHbVHf1nuHPtIDo/ClMZ81IDr59wT5CNcMe7/dMNujXwWugtQVGI5UGmqXWZQCeoGnct8Q==} + os: ['!android', '!darwin', '!linux', '!win32'] + + sass-embedded-win32-arm64@1.97.3: + resolution: {integrity: sha512-RDGtRS1GVvQfMGAmVXNxYiUOvPzn9oO1zYB/XUM9fudDRnieYTcUytpNTQZLs6Y1KfJxgt5Y+giRceC92fT8Uw==} + engines: {node: '>=14.0.0'} + cpu: [arm64] + os: [win32] + + sass-embedded-win32-x64@1.97.3: + resolution: {integrity: sha512-SFRa2lED9UEwV6vIGeBXeBOLKF+rowF3WmNfb/BzhxmdAsKofCXrJ8ePW7OcDVrvNEbTOGwhsReIsF5sH8fVaw==} + engines: {node: '>=14.0.0'} + cpu: [x64] + os: [win32] + + sass-embedded@1.97.3: + resolution: {integrity: sha512-eKzFy13Nk+IRHhlAwP3sfuv+PzOrvzUkwJK2hdoCKYcWGSdmwFpeGpWmyewdw8EgBnsKaSBtgf/0b2K635ecSA==} + engines: {node: '>=16.0.0'} + hasBin: true + + sass@1.97.3: + resolution: {integrity: sha512-fDz1zJpd5GycprAbu4Q2PV/RprsRtKC/0z82z0JLgdytmcq0+ujJbJ/09bPGDxCLkKY3Np5cRAOcWiVkLXJURg==} + engines: {node: '>=14.0.0'} + hasBin: true + semver@6.3.1: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true @@ -1290,6 +1505,18 @@ packages: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} + supports-color@8.1.1: + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} + + sync-child-process@1.0.2: + resolution: {integrity: sha512-8lD+t2KrrScJ/7KXCSyfhT3/hRq78rC0wBFqNJXv3mZyn6hW2ypM05JmlSvtqRbeq6jqA94oHbxAr2vYsJ8vDA==} + engines: {node: '>=16.0.0'} + + sync-message-port@1.2.0: + resolution: {integrity: sha512-gAQ9qrUN/UCypHtGFbbe7Rc/f9bzO88IwrG8TDo/aMKAApKyD6E3W4Cm0EfhfBb6Z6SKt59tTCTfD+n1xmAvMg==} + engines: {node: '>=16.0.0'} + synckit@0.11.11: resolution: {integrity: sha512-MeQTA1r0litLUf0Rp/iisCaL8761lKAZHaimlbGK4j0HysC4PLfqygQj9srcs0m2RdtDYnF8UuYyKpbjHYp7Jw==} engines: {node: ^14.18.0 || >=16.0.0} @@ -1330,6 +1557,9 @@ packages: peerDependencies: vue: ^3.0.0 + varint@6.0.0: + resolution: {integrity: sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==} + vite-dev-rpc@1.1.0: resolution: {integrity: sha512-pKXZlgoXGoE8sEKiKJSng4hI1sQ4wi5YT24FCrwrLt6opmkjlqPPVmiPWWJn8M8byMxRGzp1CrFuqQs4M/Z39A==} peerDependencies: @@ -1640,6 +1870,8 @@ snapshots: '@babel/helper-string-parser': 7.27.1 '@babel/helper-validator-identifier': 7.28.5 + '@bufbuild/protobuf@2.11.0': {} + '@esbuild/aix-ppc64@0.27.2': optional: true @@ -1794,6 +2026,67 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.5 + '@parcel/watcher-android-arm64@2.5.6': + optional: true + + '@parcel/watcher-darwin-arm64@2.5.6': + optional: true + + '@parcel/watcher-darwin-x64@2.5.6': + optional: true + + '@parcel/watcher-freebsd-x64@2.5.6': + optional: true + + '@parcel/watcher-linux-arm-glibc@2.5.6': + optional: true + + '@parcel/watcher-linux-arm-musl@2.5.6': + optional: true + + '@parcel/watcher-linux-arm64-glibc@2.5.6': + optional: true + + '@parcel/watcher-linux-arm64-musl@2.5.6': + optional: true + + '@parcel/watcher-linux-x64-glibc@2.5.6': + optional: true + + '@parcel/watcher-linux-x64-musl@2.5.6': + optional: true + + '@parcel/watcher-win32-arm64@2.5.6': + optional: true + + '@parcel/watcher-win32-ia32@2.5.6': + optional: true + + '@parcel/watcher-win32-x64@2.5.6': + optional: true + + '@parcel/watcher@2.5.6': + dependencies: + detect-libc: 2.1.2 + is-glob: 4.0.3 + node-addon-api: 7.1.1 + picomatch: 4.0.3 + optionalDependencies: + '@parcel/watcher-android-arm64': 2.5.6 + '@parcel/watcher-darwin-arm64': 2.5.6 + '@parcel/watcher-darwin-x64': 2.5.6 + '@parcel/watcher-freebsd-x64': 2.5.6 + '@parcel/watcher-linux-arm-glibc': 2.5.6 + '@parcel/watcher-linux-arm-musl': 2.5.6 + '@parcel/watcher-linux-arm64-glibc': 2.5.6 + '@parcel/watcher-linux-arm64-musl': 2.5.6 + '@parcel/watcher-linux-x64-glibc': 2.5.6 + '@parcel/watcher-linux-x64-musl': 2.5.6 + '@parcel/watcher-win32-arm64': 2.5.6 + '@parcel/watcher-win32-ia32': 2.5.6 + '@parcel/watcher-win32-x64': 2.5.6 + optional: true + '@pkgr/core@0.2.9': {} '@polka/url@1.0.0-next.29': {} @@ -1876,10 +2169,10 @@ snapshots: dependencies: vue: 3.5.26 - '@vitejs/plugin-vue@6.0.3(vite@7.3.0)(vue@3.5.26)': + '@vitejs/plugin-vue@6.0.3(vite@7.3.0(sass-embedded@1.97.3)(sass@1.97.3))(vue@3.5.26)': dependencies: '@rolldown/pluginutils': 1.0.0-beta.53 - vite: 7.3.0 + vite: 7.3.0(sass-embedded@1.97.3)(sass@1.97.3) vue: 3.5.26 '@vue/babel-helper-vue-transform-on@1.5.0': {} @@ -1947,14 +2240,14 @@ snapshots: dependencies: '@vue/devtools-kit': 7.7.9 - '@vue/devtools-core@8.0.5(vite@7.3.0)(vue@3.5.26)': + '@vue/devtools-core@8.0.5(vite@7.3.0(sass-embedded@1.97.3)(sass@1.97.3))(vue@3.5.26)': dependencies: '@vue/devtools-kit': 8.0.5 '@vue/devtools-shared': 8.0.5 mitt: 3.0.1 nanoid: 5.1.6 pathe: 2.0.3 - vite-hot-client: 2.1.0(vite@7.3.0) + vite-hot-client: 2.1.0(vite@7.3.0(sass-embedded@1.97.3)(sass@1.97.3)) vue: 3.5.26 transitivePeerDependencies: - vite @@ -2090,12 +2383,19 @@ snapshots: ansi-styles: 4.3.0 supports-color: 7.2.0 + chokidar@4.0.3: + dependencies: + readdirp: 4.1.2 + optional: true + color-convert@2.0.1: dependencies: color-name: 1.1.4 color-name@1.1.4: {} + colorjs.io@0.5.2: {} + combined-stream@1.0.8: dependencies: delayed-stream: 1.0.0 @@ -2137,6 +2437,9 @@ snapshots: delayed-stream@1.0.0: {} + detect-libc@2.1.2: + optional: true + dunder-proto@1.0.1: dependencies: call-bind-apply-helpers: 1.0.2 @@ -2383,6 +2686,8 @@ snapshots: ignore@5.3.2: {} + immutable@5.1.4: {} + import-fresh@3.3.1: dependencies: parent-module: 1.0.1 @@ -2475,6 +2780,9 @@ snapshots: natural-compare@1.4.0: {} + node-addon-api@7.1.1: + optional: true + node-releases@2.0.27: {} nth-check@2.1.1: @@ -2553,6 +2861,9 @@ snapshots: punycode@2.3.1: {} + readdirp@4.1.2: + optional: true + resolve-from@4.0.0: {} rfdc@1.4.1: {} @@ -2587,6 +2898,106 @@ snapshots: run-applescript@7.1.0: {} + rxjs@7.8.2: + dependencies: + tslib: 2.3.0 + + sass-embedded-all-unknown@1.97.3: + dependencies: + sass: 1.97.3 + optional: true + + sass-embedded-android-arm64@1.97.3: + optional: true + + sass-embedded-android-arm@1.97.3: + optional: true + + sass-embedded-android-riscv64@1.97.3: + optional: true + + sass-embedded-android-x64@1.97.3: + optional: true + + sass-embedded-darwin-arm64@1.97.3: + optional: true + + sass-embedded-darwin-x64@1.97.3: + optional: true + + sass-embedded-linux-arm64@1.97.3: + optional: true + + sass-embedded-linux-arm@1.97.3: + optional: true + + sass-embedded-linux-musl-arm64@1.97.3: + optional: true + + sass-embedded-linux-musl-arm@1.97.3: + optional: true + + sass-embedded-linux-musl-riscv64@1.97.3: + optional: true + + sass-embedded-linux-musl-x64@1.97.3: + optional: true + + sass-embedded-linux-riscv64@1.97.3: + optional: true + + sass-embedded-linux-x64@1.97.3: + optional: true + + sass-embedded-unknown-all@1.97.3: + dependencies: + sass: 1.97.3 + optional: true + + sass-embedded-win32-arm64@1.97.3: + optional: true + + sass-embedded-win32-x64@1.97.3: + optional: true + + sass-embedded@1.97.3: + dependencies: + '@bufbuild/protobuf': 2.11.0 + colorjs.io: 0.5.2 + immutable: 5.1.4 + rxjs: 7.8.2 + supports-color: 8.1.1 + sync-child-process: 1.0.2 + varint: 6.0.0 + optionalDependencies: + sass-embedded-all-unknown: 1.97.3 + sass-embedded-android-arm: 1.97.3 + sass-embedded-android-arm64: 1.97.3 + sass-embedded-android-riscv64: 1.97.3 + sass-embedded-android-x64: 1.97.3 + sass-embedded-darwin-arm64: 1.97.3 + sass-embedded-darwin-x64: 1.97.3 + sass-embedded-linux-arm: 1.97.3 + sass-embedded-linux-arm64: 1.97.3 + sass-embedded-linux-musl-arm: 1.97.3 + sass-embedded-linux-musl-arm64: 1.97.3 + sass-embedded-linux-musl-riscv64: 1.97.3 + sass-embedded-linux-musl-x64: 1.97.3 + sass-embedded-linux-riscv64: 1.97.3 + sass-embedded-linux-x64: 1.97.3 + sass-embedded-unknown-all: 1.97.3 + sass-embedded-win32-arm64: 1.97.3 + sass-embedded-win32-x64: 1.97.3 + + sass@1.97.3: + dependencies: + chokidar: 4.0.3 + immutable: 5.1.4 + source-map-js: 1.2.1 + optionalDependencies: + '@parcel/watcher': 2.5.6 + optional: true + semver@6.3.1: {} semver@7.7.3: {} @@ -2617,6 +3028,16 @@ snapshots: dependencies: has-flag: 4.0.0 + supports-color@8.1.1: + dependencies: + has-flag: 4.0.0 + + sync-child-process@1.0.2: + dependencies: + sync-message-port: 1.2.0 + + sync-message-port@1.2.0: {} + synckit@0.11.11: dependencies: '@pkgr/core': 0.2.9 @@ -2658,17 +3079,19 @@ snapshots: '@vue/shared': 3.5.26 vue: 3.5.26 - vite-dev-rpc@1.1.0(vite@7.3.0): + varint@6.0.0: {} + + vite-dev-rpc@1.1.0(vite@7.3.0(sass-embedded@1.97.3)(sass@1.97.3)): dependencies: birpc: 2.9.0 - vite: 7.3.0 - vite-hot-client: 2.1.0(vite@7.3.0) + vite: 7.3.0(sass-embedded@1.97.3)(sass@1.97.3) + vite-hot-client: 2.1.0(vite@7.3.0(sass-embedded@1.97.3)(sass@1.97.3)) - vite-hot-client@2.1.0(vite@7.3.0): + vite-hot-client@2.1.0(vite@7.3.0(sass-embedded@1.97.3)(sass@1.97.3)): dependencies: - vite: 7.3.0 + vite: 7.3.0(sass-embedded@1.97.3)(sass@1.97.3) - vite-plugin-inspect@11.3.3(vite@7.3.0): + vite-plugin-inspect@11.3.3(vite@7.3.0(sass-embedded@1.97.3)(sass@1.97.3)): dependencies: ansis: 4.2.0 debug: 4.4.3 @@ -2678,26 +3101,26 @@ snapshots: perfect-debounce: 2.0.0 sirv: 3.0.2 unplugin-utils: 0.3.1 - vite: 7.3.0 - vite-dev-rpc: 1.1.0(vite@7.3.0) + vite: 7.3.0(sass-embedded@1.97.3)(sass@1.97.3) + vite-dev-rpc: 1.1.0(vite@7.3.0(sass-embedded@1.97.3)(sass@1.97.3)) transitivePeerDependencies: - supports-color - vite-plugin-vue-devtools@8.0.5(vite@7.3.0)(vue@3.5.26): + vite-plugin-vue-devtools@8.0.5(vite@7.3.0(sass-embedded@1.97.3)(sass@1.97.3))(vue@3.5.26): dependencies: - '@vue/devtools-core': 8.0.5(vite@7.3.0)(vue@3.5.26) + '@vue/devtools-core': 8.0.5(vite@7.3.0(sass-embedded@1.97.3)(sass@1.97.3))(vue@3.5.26) '@vue/devtools-kit': 8.0.5 '@vue/devtools-shared': 8.0.5 sirv: 3.0.2 - vite: 7.3.0 - vite-plugin-inspect: 11.3.3(vite@7.3.0) - vite-plugin-vue-inspector: 5.3.2(vite@7.3.0) + vite: 7.3.0(sass-embedded@1.97.3)(sass@1.97.3) + vite-plugin-inspect: 11.3.3(vite@7.3.0(sass-embedded@1.97.3)(sass@1.97.3)) + vite-plugin-vue-inspector: 5.3.2(vite@7.3.0(sass-embedded@1.97.3)(sass@1.97.3)) transitivePeerDependencies: - '@nuxt/kit' - supports-color - vue - vite-plugin-vue-inspector@5.3.2(vite@7.3.0): + vite-plugin-vue-inspector@5.3.2(vite@7.3.0(sass-embedded@1.97.3)(sass@1.97.3)): dependencies: '@babel/core': 7.28.5 '@babel/plugin-proposal-decorators': 7.28.0(@babel/core@7.28.5) @@ -2708,11 +3131,11 @@ snapshots: '@vue/compiler-dom': 3.5.26 kolorist: 1.8.0 magic-string: 0.30.21 - vite: 7.3.0 + vite: 7.3.0(sass-embedded@1.97.3)(sass@1.97.3) transitivePeerDependencies: - supports-color - vite@7.3.0: + vite@7.3.0(sass-embedded@1.97.3)(sass@1.97.3): dependencies: esbuild: 0.27.2 fdir: 6.5.0(picomatch@4.0.3) @@ -2722,6 +3145,8 @@ snapshots: tinyglobby: 0.2.15 optionalDependencies: fsevents: 2.3.3 + sass: 1.97.3 + sass-embedded: 1.97.3 vue-eslint-parser@10.2.0(eslint@9.39.2): dependencies: diff --git a/Web/src/components/Transaction/TransactionDetailSheet.vue b/Web/src/components/Transaction/TransactionDetailSheet.vue new file mode 100644 index 0000000..539f0c8 --- /dev/null +++ b/Web/src/components/Transaction/TransactionDetailSheet.vue @@ -0,0 +1,681 @@ + + + + + + + 交易详情 + + + + + + + + 金额 + + + + ¥ {{ formatAmount(parseFloat(editForm.amount) || 0) }} + + + + ¥ + + + + + + + + + 时间 + + + {{ formatDateTime(editForm.occurredAt) }} + + + + + + 备注 + + + + + + + + 类型 + + + + + 支出 + + + 收入 + + + 不计 + + + + + + + 分类 + + + {{ editForm.classify }} + 请选择分类 + + + + + + + + + + + + 删除 + + + 保存 + + + + + + + + + + + + + +