Haoo28 downloadsTurn notes into cards, sort them into domain piles, and arrange them on a board with links and ink to build a MOC.
把写好的笔记变成一张张卡片,按领域装进文件夹;摊开卡堆挑卡,放上画板亲手摆位、连线、圈画,排成一篇 MOC 的骨架。
一块画板就是一篇 Markdown 笔记:上面是你自己写的手写区,中间是插件根据画板自动生成的 MOC 正文(一串 [[卡片]] 链接),末尾是藏起来的画板数据。所以反向链接、关系图谱、搜索、同步都能直接用,画板不是一座孤岛。
桌面端专用(
isDesktopOnly)。当前是 v1:卡堆栏、画板、连线、标注、卡片上色、导出.canvas都已可用。

domain/* 标签,一个领域对应一个卡堆;前缀可以在设置里改。type:literature(文献)、permanent(永久)、fleeting(闪念,flash 和「闪念」也认);不写算未分类。从源码构建一次:
npm install
npm run build # 产物在 dist/
把 dist/ 里的 main.js、manifest.json、styles.css 拷进库的 .obsidian/plugins/haoo-cardbox/(文件夹名要和 manifest 的 id 一致),然后在「设置 → 第三方插件」里启用。
开发时更省事的做法:把 .obsidian/plugins/haoo-cardbox/ 直接做成指向本仓库 dist/ 的符号链接,跑 npm run dev 监听构建,改完在 Obsidian 里重载插件。
⌘ + 滚轮或双指捏合缩放。⌘ 单击在右侧分栏打开原笔记,⌘ 悬停看 Obsidian 原生的页面预览。⌘Z / ⇧⌘Z 撤销和重做卡片、连线、标注(平移缩放不算)。⇧ / ⌘ 多选,拖到画板上;多张落下时每行 4 张排成一小块。Esc、再点文件夹或点画板空白处收回。⌥ 从卡面直接拖也行。Delete 删除;一对卡片只有一条线,不分方向。V 选择、P 画笔、L 直线、R 矩形、T 文字、E 橡皮擦,Esc 回到选择。⇧ 吸附到 15° 一档。Delete 删除;橡皮擦碰到哪条就擦掉整条。#rrggbb,跟着画板笔记保存;导出 .canvas 时会一起带上。字色按底色深浅自动选深字或浅字。skeuo-board: 1 的笔记,打开时默认进画板;视图菜单里可以「用 Markdown 打开」。domain/,可以换成自己已有的标签体系。画板数据放在笔记末尾 %% 注释里的一个 skeuo-board 代码块,字段沿用 JSON Canvas:nodes(file、x、y、width、height,可选 flipped、missing、color)、edges(fromNode、toNode、可选 label),标注放在额外的 strokes 字段,另外还有 viewport。读不懂的顶层字段会原样保留。
「导出为 .canvas」会生成原生画板文件,卡片、坐标、连线、标签和卡片颜色照原样带过去;标注和缺失卡片原生画板不支持,导出时会提示。
npm run dev # 监听构建
npm run check # tsc --noEmit
npm run check:obsidian # Obsidian 社区插件自检:manifest/versions 检查 + 官方 ESLint 规则
npm test # node:test,先 esbuild 打包再跑
npm run build # 生产构建到 dist/
src/core/ 是纯逻辑(归堆、画板笔记读写、MOC 正文、改名删除跟随、拖放排布、撤销、导出),不 import Obsidian,是唯一的测试接缝。src/ui/ 是画板和卡堆栏(原生 DOM 和 SVG),src/obsidian/ 是适配层(视图、设置、监听库变化)。.canvas 导出。MIT。