架构和工作方式
HeartCart 怎么分层、怎么一块一块往上加功能,以及你怎么看到「哪一块是什么、做到哪了」。
① 需求 · 你的原话
「每次修改都是在他需要的架构上面加功能 而不是堆屎山」
2026-10-28 · 说为什么要先搭架构 · 挂到 shared/editor-core, shared/registry「我觉得可以直接就在是现在的heartcart 然后有个切换键就是这个inspector 相当于网站看后台代码一样 只是我们是更可视化的prototype」
2026-10-28 · 架构查看器放在哪 · 挂到 app/inspector「我右键 我可以看到他在哪个板块 哪个咋咋咋我需要如何 给你指令这样 我也知道 你有没有miss之类的」
2026-10-28 · 架构查看器要做到什么 · 挂到 app/inspector「1 需求 → 设计 → 拆成任务 → 实现,每一步都是仓库里的一份文字文件。2 每条需求挂到一个具体的任务或项目上,原话和上下文一直保留;按产品区域打标签,重复的需求合并」
2026-10-28 · 需求怎么记 · 挂到 shared/registry「我觉得不是这样复杂化 而是搭建一个满足我们需求 又符合产品啊 ai产品 迭代的架构和系统」
2026-10-28 · 需求记录别做复杂 · 挂到 shared/registry「手感目前可以」
2026-10-28 · 第 1 步地基(撤销 / 重做)试过 · 挂到 shared/editor-core「你先继续做架构」
2026-10-29 · 分享上线先放一放,接着做搬家第 6 步 · 挂到 shared/registry「先搬拖放命令」
2026-10-29 · 架构下一块先搬哪个(拖放命令 / 文具盘 / 屏幕缩放接口) · 挂到 widgets/desk-canvas, features/trash「继续搬手势」
2026-10-29 · 拖放命令上线后,问接着搬拖的手势还是先搬文具盘 · 挂到 widgets/desk-canvas「画布剩下的」
2026-10-29 · 拖的手势上线后,问下一块搬画布剩下的(放进去的动画、改大小、框选)还是文具盘 · 挂到 widgets/desk-canvas「finish these all first: B. Architecture still to move (I do it, it doesn't change the feel)」
2026-10-29 · 看完「剩下还有啥没弄」的清单,让先把架构剩下的 7 块全搬完 · 挂到 pages/desk, widgets/shelf, widgets/opened-container, widgets/bench-left
② 设计
定了
- 2026-10-28 你 okkk 了 6 步搬家:1 地基 → 2 桌上的东西搬进 entities → 3 画布和周边 → 4 工作台换成共用代码 → 5 新功能 → 6 需求记录。
- 代码用 React + TypeScript + Vite,放在仓库 app/。分六层:app → pages → widgets → features → entities → shared;上层可以用下层,同一层两块不互相用;检查不过网站不更新。
- 架构查看器:HeartCart 里按 I。点任何东西看它属于哪一块、状态、命令、数据、规则、代码现状、你的原话、任务,还能复制一段指令给我。
- 需求记录(第 6 步,2026-10-29):仓库 requests/,一个功能一个文件夹,需求 / 设计 / 任务三份;查看器从这里读,不再手写在代码里。
还没定
- 2026-10-29 你定先搬拖放命令:松手那一下改数据已是三个命令(features/move 放下、put-into 放进去 / 叠一叠、trash 扔掉),旧代码只管手势和动画。2026-10-29 你说「继续搬手势」:拖的手势已搬到 widgets/desk-canvas/drag.ts。你说「画布剩下的」:光标和边角、多选框选、改大小、放进去时被接过去的动画也搬到 widgets/desk-canvas 了(cursor / select / resize / receive)。画布只剩指着东西时的「手的场」。之后底部文具盘、打开的组合。
- 2026-10-29 你说「先把架构剩下的都搬完」:手的场、文具盘、打开的组合、板子、项目页、桌上的纸和新设计、工作台左右两栏都搬出来了。大块是原样搬过去的(开头写着 @ts-nocheck,类型以后补),所以手感不会变;每一块都和搬之前用同一串动作比对过。页面旧代码从 1395 行减到约 750 行,剩下的见任务。
- 框的逻辑留一个「屏幕缩放」接口(改第 1 层,要你 okk):工作台就不用抄 box.js 里的 hit、meas 和自动排列的 lineGapAt。
③ 任务
- ✓第 1 步 地基:撤销 / 重做交给 shared/editor-core(提交 ec18e8a)shared/editor-core
- ✓架构查看器:按 I 看每一块app/inspector
- ✓第 2 步 桌上的东西搬进 entities(提交 19113f6)entities/note, entities/sticky, entities/board, entities/container, entities/design-frame
- ✓第 3 步 平移缩放、工具条、侧边栏、搜索搬进 widgets / features(提交 51a4ce4、df4b736)widgets/desk-canvas, widgets/toolbar, widgets/sidebar, features/search
- ✓第 4 步 工作台换成框的逻辑第 3 版 + 自动排列第 2 版(提交 99b37cb、4ce21d3)pages/bench, widgets/paper
- ✓第 6 步 需求记录:requests/ 接进架构查看器,原话不再手写在代码里shared/registry, app/inspector
- ✓拖 / 放进去 / 扔纸篓:松手那一下改数据变成三个命令(放下、放进去 / 叠一叠、扔掉),和改之前同一串动作比对 31 + 22 步全一样features/move, features/put-into, features/trash
- ✓拖的手势搬出旧代码:按下、拿起、跟着走、吸进纸篓、组合慢慢张开、松手,搬到 widgets/desk-canvas/drag.ts;比对 31 + 22 步松手后、9 个拖着没松手的时刻都一样widgets/desk-canvas
- ✓画布剩下的搬出旧代码:光标和边角(cursor.ts)、多选框选(select.ts)、改大小(resize.ts)、放进去时被接过去的动画(receive.ts);比对 31 + 22 步、9 个拖着的时刻、13 步改大小都一样widgets/desk-canvas
- ✓画布最后一点:指着东西时的「手的场」搬到 widgets/desk-canvas/field.ts(提交 5a92c86)widgets/desk-canvas
- ✓底部文具盘、工具箱、工作台牌、液态玻璃搬到 widgets/shelf;拿出文具、裹纸、放到桌上搬到 features/add-tool(提交 b24ec95)widgets/shelf, widgets/toolbox, features/add-tool
- ✓打开的组合搬到 widgets/opened-container:原位展开、收回、Esc、从里面拖出来(提交 f447223)widgets/opened-container
- ✓板子的手势搬到 widgets/desk-canvas/boards.ts:拖、扔纸篓、改大小、改名、边角光标、经过发光、松手换板子(提交 15f68db)widgets/desk-canvas, entities/board
- ✓项目页搬到 features/project-pages:存页、换页、新建、计数、缩略图、先选项目(提交 48d9b2e)features/project-pages, widgets/project-list
- ✓桌上的纸搬到 features/desk-paper;设计框、新设计、工作台放大出来、关上变成框、双击回去改搬到 features/create-design(提交 0337c68)features/desk-paper, features/create-design, features/close-design
- ✓工作台左栏、右栏(参数面板)拆到 workbench/left-panel.js、right-panel.js(提交 4be20be)widgets/bench-left, widgets/inspector-panel
- ✓上面 7 块每一块都和搬之前比对:桌面 31 + 22 步、9 个拖着的时刻、13 步改大小、4 个手的场位置、文具盘 9、打开的组合 5、板子 9、项目页 8、新设计 13、工作台两栏 9 步,全部一样、没有报错pages/desk
- ○给原样搬过去的文件补类型(文具盘、拿出文具、打开的组合、板子、项目页、桌上的纸、新设计;现在开头写着 @ts-nocheck)widgets/shelf, features/add-tool, widgets/opened-container, features/project-pages, features/desk-paper, features/create-design
- ○页面旧代码里还剩:示例素材和一开始摆什么、把各块接起来的那几行、提示条、已经不从任何入口打开的旧编辑器(旧编辑器要不要删,问你)pages/desk, archive/old-editor
- ○工作台流程本身(做什么 → 说什么 → 骨架、工作台自己的撤销)还在 workbench/demo.html 里,没按层拆widgets/paper, pages/bench
- ○框的逻辑「屏幕缩放」接口(等你 okk)pages/bench
- ○查:便签从文具盘拖到一张纸上,偶尔没贴上、变成桌上一张新便签(无界面浏览器里 5 次有 1–2 次;搬家前后都这样,不是搬出来的)features/add-tool