Skip to content

Commit d10a41b

Browse files
committed
fix: 移除未使用的类型导入,修复编译错误
1 parent af16d5b commit d10a41b

File tree

21 files changed

+3176
-29
lines changed

21 files changed

+3176
-29
lines changed

.kiro/specs/interactive-canvas-enhancement/design.md

Lines changed: 623 additions & 0 deletions
Large diffs are not rendered by default.
Lines changed: 158 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,158 @@
1+
# 需求文档
2+
3+
## 简介
4+
5+
本功能旨在增强算法可视化画布,使其成为一个高信息密度、交互式的算法教学平台。画布应占据页面绝大部分空间,支持拖拽、缩放,并能够清晰展示算法执行过程中的所有数据流动、状态变更和递归调用等信息。核心目标是通过丰富的视觉元素(标注、箭头、动画)帮助用户深入理解算法的每一个执行步骤。
6+
7+
## 术语表
8+
9+
- **Canvas(画布)**: 用于绘制和展示算法可视化内容的主要交互区域
10+
- **Data Structure(数据结构)**: 算法中使用的数据组织形式,包括树、图、数组、HashMap等
11+
- **Animation Step(动画步骤/分镜)**: 算法执行过程中的一个离散状态,对应代码的特定执行点
12+
- **Label(标签)**: 附加在节点、边或元素上的文字说明
13+
- **Arrow(箭头)**: 表示数据流动、值传递或状态转移的视觉指示器
14+
- **Code Line Binding(代码行绑定)**: 动画步骤与源代码行号的关联机制
15+
- **Execution Context(执行上下文)**: 包含栈帧、递归深度、调用链等运行时信息
16+
- **Viewport(视口)**: 用户当前可见的画布区域
17+
18+
## 需求
19+
20+
### 需求 1:画布空间优化
21+
22+
**用户故事:** 作为用户,我希望画布占据页面的绝大部分空间,以便我能够清晰地观察算法的可视化演示。
23+
24+
#### 验收标准
25+
26+
1. WHEN 用户打开应用 THEN Canvas 组件 SHALL 占据页面可用空间的至少 70%
27+
2. WHEN 页面布局调整时 THEN Canvas 组件 SHALL 自适应调整大小以保持最大化显示
28+
3. WHEN 其他 UI 元素(如控制面板、代码面板)存在时 THEN Canvas 组件 SHALL 优先获得空间分配
29+
30+
### 需求 2:画布交互功能
31+
32+
**用户故事:** 作为用户,我希望能够自由拖拽和缩放画布,以便我能够查看大型数据结构的任意部分。
33+
34+
#### 验收标准
35+
36+
1. WHEN 用户在画布上拖拽 THEN Canvas 组件 SHALL 平移视图以跟随用户的拖拽方向
37+
2. WHEN 用户使用滚轮或捏合手势 THEN Canvas 组件 SHALL 按比例缩放视图
38+
3. WHEN 数据结构超出当前视口 THEN Canvas 组件 SHALL 自动调整初始缩放级别以适应显示
39+
4. WHEN 用户双击画布 THEN Canvas 组件 SHALL 重置视图到默认位置和缩放级别
40+
5. WHILE 用户进行缩放操作 THEN Canvas 组件 SHALL 以鼠标/触摸点为中心进行缩放
41+
42+
### 需求 3:多数据结构绘制
43+
44+
**用户故事:** 作为用户,我希望画布能够绘制各种数据结构(树、图、数组、HashMap等),以便我能够学习不同类型的算法。
45+
46+
#### 验收标准
47+
48+
1. WHEN 算法涉及二叉树数据结构 THEN Canvas 组件 SHALL 以层次布局绘制树节点和边
49+
2. WHEN 算法涉及数组数据结构 THEN Canvas 组件 SHALL 以线性或网格布局绘制数组元素
50+
3. WHEN 算法涉及 HashMap 数据结构 THEN Canvas 组件 SHALL 清晰绘制键值对,区分 key 和 value
51+
4. WHEN 算法涉及图数据结构 THEN Canvas 组件 SHALL 绘制节点和边,支持有向/无向图
52+
5. WHEN 多个数据结构同时存在 THEN Canvas 组件 SHALL 合理分布元素位置避免重叠
53+
54+
### 需求 4:动态标注系统
55+
56+
**用户故事:** 作为用户,我希望在节点、边和元素上看到详细的文字说明,以便我能够理解每个步骤的具体操作。
57+
58+
#### 验收标准
59+
60+
1. WHEN 动画步骤包含标签信息 THEN Canvas 组件 SHALL 在指定位置(上方、下方、左侧、右侧)显示标签文本
61+
2. WHEN 节点状态发生变更 THEN Canvas 组件 SHALL 在节点附近显示状态变更说明
62+
3. WHEN 数值发生变更 THEN Canvas 组件 SHALL 显示变更前后的值对比
63+
4. WHEN 标签文本过长 THEN Canvas 组件 SHALL 自动换行或截断并提供完整内容的悬浮提示
64+
5. WHEN 多个标签位置冲突 THEN Canvas 组件 SHALL 自动调整标签位置避免重叠
65+
66+
### 需求 5:数据流可视化
67+
68+
**用户故事:** 作为用户,我希望看到值传递、变量变更和指针移动的过程,以便我能够追踪数据在算法中的流动。
69+
70+
#### 验收标准
71+
72+
1. WHEN 值从一个位置传递到另一个位置 THEN Canvas 组件 SHALL 绘制带箭头的连线指示数据流向
73+
2. WHEN 箭头表示数据流动 THEN Canvas 组件 SHALL 在箭头旁边显示传递的值或说明文本
74+
3. WHEN 变量值发生变更 THEN Canvas 组件 SHALL 以动画形式展示变更过程
75+
4. WHEN 指针或引用移动 THEN Canvas 组件 SHALL 以动画形式展示移动轨迹
76+
5. WHEN 存在多条数据流 THEN Canvas 组件 SHALL 使用不同颜色区分不同的数据流
77+
78+
### 需求 6:执行上下文显示
79+
80+
**用户故事:** 作为用户,我希望看到栈帧、递归深度和调用链的可视化,以便我能够理解递归算法的执行过程。
81+
82+
#### 验收标准
83+
84+
1. WHEN 算法进入递归调用 THEN Canvas 组件 SHALL 显示新的栈帧并标注递归深度
85+
2. WHEN 算法退出递归调用 THEN Canvas 组件 SHALL 移除对应栈帧并更新递归深度
86+
3. WHEN 函数调用发生 THEN Canvas 组件 SHALL 显示参数传递过程
87+
4. WHEN 函数返回值 THEN Canvas 组件 SHALL 显示返回值的传递过程
88+
5. WHEN 递归深度变化 THEN Canvas 组件 SHALL 在画布上显示当前递归深度指示器
89+
90+
### 需求 7:状态变量可视化
91+
92+
**用户故事:** 作为用户,我希望看到程序中用于记录数据或状态的变量的完整数据结构和变更过程,以便我能够理解算法的状态管理。
93+
94+
#### 验收标准
95+
96+
1. WHEN 算法使用状态变量 THEN Canvas 组件 SHALL 在画布上绘制该变量的数据结构
97+
2. WHEN 状态变量的值发生变更 THEN Canvas 组件 SHALL 以动画形式展示变更过程
98+
3. WHEN 状态变量是复杂数据结构 THEN Canvas 组件 SHALL 完整展示其内部结构
99+
4. WHEN 多个状态变量存在 THEN Canvas 组件 SHALL 合理布局避免视觉混乱
100+
101+
### 需求 8:分镜步骤与代码绑定
102+
103+
**用户故事:** 作为用户,我希望动画步骤与代码行精确对应,并支持多语言代码同步,以便我能够将可视化与代码实现关联起来。
104+
105+
#### 验收标准
106+
107+
1. WHEN 动画步骤执行 THEN Canvas 组件 SHALL 高亮对应的代码行
108+
2. WHEN 支持多种编程语言 THEN AlgorithmEngine SHALL 为每个步骤维护多语言代码行映射
109+
3. WHEN 用户切换编程语言 THEN 代码面板 SHALL 更新高亮行以匹配当前语言
110+
4. WHEN 一个步骤对应多行代码 THEN 代码面板 SHALL 高亮所有相关代码行
111+
5. WHEN 代码行映射不存在 THEN 系统 SHALL 优雅降级,不显示代码高亮
112+
113+
### 需求 9:详细分镜划分
114+
115+
**用户故事:** 作为用户,我希望算法步骤的分镜尽可能详细,以便我能够理解算法的每一个细节操作。
116+
117+
#### 验收标准
118+
119+
1. WHEN 生成动画步骤 THEN AlgorithmEngine SHALL 为每个原子操作创建独立的步骤
120+
2. WHEN 涉及比较操作 THEN AlgorithmEngine SHALL 创建独立步骤展示比较过程和结果
121+
3. WHEN 涉及赋值操作 THEN AlgorithmEngine SHALL 创建独立步骤展示值的来源和目标
122+
4. WHEN 涉及递归调用 THEN AlgorithmEngine SHALL 创建进入和退出的独立步骤
123+
5. WHEN 涉及条件判断 THEN AlgorithmEngine SHALL 创建独立步骤展示判断条件和结果
124+
125+
### 需求 10:元素布局优化
126+
127+
**用户故事:** 作为用户,我希望画布上的元素分布合理不重叠,以便我能够清晰地观察所有可视化内容。
128+
129+
#### 验收标准
130+
131+
1. WHEN 绘制多个元素 THEN Canvas 组件 SHALL 自动计算布局避免元素重叠
132+
2. WHEN 元素数量增加 THEN Canvas 组件 SHALL 动态调整元素间距
133+
3. WHEN 画布空间有限 THEN Canvas 组件 SHALL 优先保证关键元素的可见性
134+
4. WHEN 用户调整窗口大小 THEN Canvas 组件 SHALL 重新计算布局以适应新尺寸
135+
5. WHEN 元素位置冲突无法避免 THEN Canvas 组件 SHALL 提供层叠或折叠显示选项
136+
137+
### 需求 11:状态高亮系统
138+
139+
**用户故事:** 作为用户,我希望当前操作的元素能够通过颜色和动画突出显示,以便我能够快速定位当前执行点。
140+
141+
#### 验收标准
142+
143+
1. WHEN 元素处于当前操作状态 THEN Canvas 组件 SHALL 使用醒目颜色高亮该元素
144+
2. WHEN 元素状态发生变化 THEN Canvas 组件 SHALL 以平滑动画过渡到新状态
145+
3. WHEN 多个元素参与当前操作 THEN Canvas 组件 SHALL 使用不同颜色区分不同角色
146+
4. WHEN 操作完成 THEN Canvas 组件 SHALL 恢复元素到正常显示状态
147+
5. WHILE 元素处于高亮状态 THEN Canvas 组件 SHALL 保持高亮直到下一步骤开始
148+
149+
### 需求 12:时间轴导航
150+
151+
**用户故事:** 作为用户,我希望能够查看历史步骤和未来步骤,以便我能够自由浏览算法的执行过程。
152+
153+
#### 验收标准
154+
155+
1. WHEN 用户点击时间轴上的某个步骤 THEN PlaybackControls 组件 SHALL 跳转到该步骤
156+
2. WHEN 显示时间轴 THEN PlaybackControls 组件 SHALL 标注当前步骤位置
157+
3. WHEN 步骤数量较多 THEN PlaybackControls 组件 SHALL 提供缩略视图或分页显示
158+
4. WHEN 用户悬停在时间轴步骤上 THEN PlaybackControls 组件 SHALL 显示该步骤的预览信息
Lines changed: 225 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,225 @@
1+
# 实现计划
2+
3+
- [-] 1. 扩展类型定义和数据模型
4+
- [x] 1.1 创建增强的数据结构类型定义
5+
-`src/types/` 目录下创建 `dataStructures.ts` 文件
6+
- 定义 TreeNode、GraphNode、GraphEdge、HashMapEntry 等接口
7+
- 定义 DataStructureType 联合类型
8+
- _Requirements: 3.1, 3.2, 3.3, 3.4_
9+
- [x] 1.2 创建增强的动画步骤类型定义
10+
-`src/types/` 目录下创建 `animationStep.ts` 文件
11+
- 定义 EnhancedAnimationStep、StepSubType、DataFlow 等接口
12+
- 定义 ExecutionContext、StackFrame 接口
13+
- _Requirements: 6.1, 6.2, 9.1_
14+
- [x] 1.3 创建多语言代码行映射类型定义
15+
-`src/types/` 目录下创建 `codeMapping.ts` 文件
16+
- 定义 StepId、MultiLanguageCodeLineMapping 接口
17+
- 定义 EnhancedCodeSnippet 接口
18+
- _Requirements: 8.1, 8.2_
19+
- [ ] 1.4 编写类型定义的属性测试
20+
- **Property 7: 代码行映射完整性属性**
21+
- **Validates: Requirements 8.1, 8.2, 8.3, 8.4**
22+
23+
- [ ] 2. 实现布局引擎
24+
- [ ] 2.1 创建布局引擎核心模块
25+
-`src/services/` 目录下创建 `LayoutEngine.ts` 文件
26+
- 实现 calculateLayout 方法计算多数据结构布局
27+
- 实现边界框计算和间距分配逻辑
28+
- _Requirements: 10.1, 10.2_
29+
- [ ] 2.2 实现标签冲突解决算法
30+
- 实现 resolveLabelsCollision 方法
31+
- 使用贪心算法调整标签位置避免重叠
32+
- _Requirements: 4.5_
33+
- [ ] 2.3 实现自适应缩放计算
34+
- 实现 calculateFitScale 方法
35+
- 根据内容边界和视口大小计算最佳缩放比例
36+
- _Requirements: 2.3_
37+
- [ ] 2.4 编写布局引擎的属性测试
38+
- **Property 1: 布局不重叠属性**
39+
- **Validates: Requirements 3.5, 4.5, 7.4, 10.1**
40+
- [ ] 2.5 编写自适应缩放的属性测试
41+
- **Property 3: 自适应缩放适应属性**
42+
- **Validates: Requirements 2.3**
43+
44+
- [ ] 3. 实现数据结构渲染器
45+
- [ ] 3.1 创建渲染器基础接口和工厂
46+
-`src/services/renderers/` 目录下创建 `types.ts` 文件
47+
- 定义 DataStructureRenderer 接口
48+
- 创建 `RendererFactory.ts` 工厂类
49+
- _Requirements: 3.1, 3.2, 3.3, 3.4_
50+
- [ ] 3.2 实现二叉树渲染器
51+
- 创建 `BinaryTreeRenderer.ts` 文件
52+
- 实现层次布局算法绘制树节点和边
53+
- 支持节点标签和边标签
54+
- _Requirements: 3.1_
55+
- [ ] 3.3 实现数组/网格渲染器
56+
- 创建 `ArrayRenderer.ts` 文件
57+
- 支持一维数组和二维网格布局
58+
- 支持索引显示和值显示
59+
- _Requirements: 3.2_
60+
- [ ] 3.4 实现 HashMap 渲染器
61+
- 创建 `HashMapRenderer.ts` 文件
62+
- 清晰区分 key 和 value 的显示
63+
- 支持哈希桶可视化
64+
- _Requirements: 3.3_
65+
- [ ] 3.5 实现图渲染器
66+
- 创建 `GraphRenderer.ts` 文件
67+
- 支持有向图和无向图
68+
- 实现力导向布局或层次布局
69+
- _Requirements: 3.4_
70+
- [ ] 3.6 编写数据结构渲染器的属性测试
71+
- **Property 4: 数据结构完整渲染属性**
72+
- **Validates: Requirements 3.1, 3.2, 3.3, 3.4, 7.3**
73+
74+
- [ ] 4. Checkpoint - 确保所有测试通过
75+
- 确保所有测试通过,如有问题请询问用户。
76+
77+
- [ ] 5. 实现数据流可视化
78+
- [ ] 5.1 创建箭头绘制模块
79+
-`src/services/` 目录下创建 `ArrowRenderer.ts` 文件
80+
- 实现带标签的箭头绘制
81+
- 支持曲线箭头避免遮挡
82+
- _Requirements: 5.1, 5.2_
83+
- [ ] 5.2 实现数据流动画效果
84+
- 实现箭头沿路径的动画效果
85+
- 支持值传递的视觉反馈
86+
- _Requirements: 5.3, 5.4_
87+
- [ ] 5.3 实现多数据流颜色区分
88+
- 为不同类型的数据流分配不同颜色
89+
- 支持自定义颜色配置
90+
- _Requirements: 5.5_
91+
- [ ] 5.4 编写箭头端点的属性测试
92+
- **Property 5: 箭头端点正确性属性**
93+
- **Validates: Requirements 5.1, 5.2**
94+
95+
- [ ] 6. 实现执行上下文可视化
96+
- [ ] 6.1 创建栈帧可视化组件
97+
-`src/components/` 目录下创建 `StackVisualization/` 组件
98+
- 显示调用栈和递归深度
99+
- 支持参数和返回值显示
100+
- _Requirements: 6.1, 6.2, 6.3, 6.4_
101+
- [ ] 6.2 实现递归深度指示器
102+
- 在画布上显示当前递归深度
103+
- 支持深度变化的动画效果
104+
- _Requirements: 6.5_
105+
- [ ] 6.3 编写递归栈帧的属性测试
106+
- **Property 6: 递归栈帧一致性属性**
107+
- **Validates: Requirements 6.1, 6.2**
108+
109+
- [ ] 7. 增强画布组件
110+
- [ ] 7.1 优化画布空间分配
111+
- 修改 `App.tsx` 和相关样式文件
112+
- 确保画布占据页面至少 70% 空间
113+
- 实现响应式布局
114+
- _Requirements: 1.1, 1.2, 1.3_
115+
- [ ] 7.2 增强缩放交互
116+
- 实现以鼠标点为中心的缩放
117+
- 实现双击重置视图功能
118+
- _Requirements: 2.4, 2.5_
119+
- [ ] 7.3 集成布局引擎和渲染器
120+
- 修改 `Canvas.tsx` 使用新的布局引擎
121+
- 集成多种数据结构渲染器
122+
- _Requirements: 3.5, 10.1_
123+
- [ ] 7.4 实现动态标注系统
124+
- 支持节点上方/下方/左侧/右侧的标签
125+
- 实现标签自动换行和截断
126+
- _Requirements: 4.1, 4.2, 4.3, 4.4_
127+
- [ ] 7.5 编写缩放中心点的属性测试
128+
- **Property 2: 缩放中心点不变属性**
129+
- **Validates: Requirements 2.5**
130+
131+
- [ ] 8. Checkpoint - 确保所有测试通过
132+
- 确保所有测试通过,如有问题请询问用户。
133+
134+
- [ ] 9. 实现多语言代码行映射
135+
- [ ] 9.1 创建代码行映射器服务
136+
-`src/services/` 目录下创建 `CodeLineMapper.ts` 文件
137+
- 实现基于 stepId 的多语言映射查询
138+
- 实现映射验证功能
139+
- _Requirements: 8.1, 8.2_
140+
- [ ] 9.2 重构代码片段数据结构
141+
- 修改 `src/data/codeSnippets.ts` 使用新的映射结构
142+
- 为每个步骤定义唯一的 stepId
143+
- _Requirements: 8.3, 8.4_
144+
- [ ] 9.3 实现代码高亮同步
145+
- 修改 CodePanel 组件使用新的映射器
146+
- 支持多行代码同时高亮
147+
- _Requirements: 8.4, 8.5_
148+
149+
- [ ] 10. 增强算法引擎步骤生成
150+
- [ ] 10.1 重构步骤生成逻辑
151+
- 修改 `AlgorithmEngine.ts` 生成更细粒度的步骤
152+
- 为每个原子操作创建独立步骤
153+
- _Requirements: 9.1_
154+
- [ ] 10.2 添加比较操作步骤
155+
- 为比较操作创建独立步骤
156+
- 显示比较的两个值和结果
157+
- _Requirements: 9.2_
158+
- [ ] 10.3 添加赋值操作步骤
159+
- 为赋值操作创建独立步骤
160+
- 显示值的来源和目标
161+
- _Requirements: 9.3_
162+
- [ ] 10.4 添加递归调用步骤
163+
- 为递归进入和退出创建独立步骤
164+
- 显示参数传递和返回值
165+
- _Requirements: 9.4_
166+
- [ ] 10.5 添加条件判断步骤
167+
- 为条件判断创建独立步骤
168+
- 显示判断条件和结果
169+
- _Requirements: 9.5_
170+
- [ ] 10.6 编写步骤原子性的属性测试
171+
- **Property 9: 步骤原子性属性**
172+
- **Validates: Requirements 9.1, 9.2, 9.3, 9.4, 9.5**
173+
174+
- [ ] 11. 实现状态高亮系统
175+
- [ ] 11.1 创建高亮管理器
176+
-`src/services/` 目录下创建 `HighlightManager.ts` 文件
177+
- 管理元素的高亮状态和颜色
178+
- 支持多角色颜色区分
179+
- _Requirements: 11.1, 11.3_
180+
- [ ] 11.2 实现高亮动画效果
181+
- 实现平滑的颜色过渡动画
182+
- 支持脉冲效果突出当前元素
183+
- _Requirements: 11.2_
184+
- [ ] 11.3 实现高亮状态恢复
185+
- 操作完成后恢复元素到正常状态
186+
- 保持高亮直到下一步骤开始
187+
- _Requirements: 11.4, 11.5_
188+
- [ ] 11.4 编写高亮颜色区分的属性测试
189+
- **Property 8: 高亮颜色区分属性**
190+
- **Validates: Requirements 11.1, 11.3**
191+
192+
- [ ] 12. 增强时间轴导航
193+
- [ ] 12.1 实现时间轴点击跳转
194+
- 修改 PlaybackControls 组件
195+
- 支持点击时间轴跳转到指定步骤
196+
- _Requirements: 12.1_
197+
- [ ] 12.2 实现当前步骤标注
198+
- 在时间轴上突出显示当前步骤位置
199+
- 支持步骤预览悬浮提示
200+
- _Requirements: 12.2, 12.4_
201+
- [ ] 12.3 实现大量步骤的缩略显示
202+
- 当步骤数量较多时提供缩略视图
203+
- 支持分页或滚动浏览
204+
- _Requirements: 12.3_
205+
- [ ] 12.4 编写时间轴跳转的属性测试
206+
- **Property 10: 时间轴跳转一致性属性**
207+
- **Validates: Requirements 12.1, 12.2**
208+
209+
- [ ] 13. 实现状态变量可视化
210+
- [ ] 13.1 创建变量监视面板
211+
-`src/components/` 目录下创建 `VariableWatch/` 组件
212+
- 显示算法中使用的状态变量
213+
- 支持复杂数据结构的展开显示
214+
- _Requirements: 7.1, 7.3_
215+
- [ ] 13.2 实现变量变更动画
216+
- 当变量值变更时显示动画效果
217+
- 高亮显示变更的部分
218+
- _Requirements: 7.2_
219+
- [ ] 13.3 集成变量面板到画布
220+
- 在画布上合理布局变量面板
221+
- 避免与其他元素重叠
222+
- _Requirements: 7.4_
223+
224+
- [ ] 14. Final Checkpoint - 确保所有测试通过
225+
- 确保所有测试通过,如有问题请询问用户。

0 commit comments

Comments
 (0)