插件开发
插件通过 SkyNotePlugin 和 CanvasPluginContext 扩展编辑器。上下文提供公开的文档语义命令、实体/空间查询、会话与宿主能力。
最小插件
ts
import type { CanvasPluginContext, SkyNotePlugin } from '@skynote/core';
export class MyPlugin implements SkyNotePlugin {
readonly id = 'example/my-plugin';
readonly name = '示例插件';
readonly version = '0.1.0';
install(ctx: CanvasPluginContext): void {
ctx.registerInputScope({ id: this.id, priority: 10, onKeyDown: () => false });
}
}通过构造参数 plugins: [new MyPlugin()] 安装。上下文注册的资源随插件卸载解除;自己创建的订阅、异步任务和临时资源仍需成对释放。
自定义节点
通过 NodeTypeDefinition 定义节点创建内容、几何、文本槽位和声明式绘制。节点专有数据使用具名强类型字段;文档更改通过语义命令或事务提交。
从定义、注册到创建真实节点的完整流程见自定义节点。
输入与平台边界
- 快捷键使用
InputScope,避免全局键盘监听争抢。 - 排他指针手势通过指针会话认领,取消时释放状态。
- 通用插件保持平台中立,DOM与具体渲染器属于宿主和适配器。
- 跨插件协作通过公开协议或宿主组合,不读取其他插件的私有状态。
高级插件是否加载由宿主决定。本站的脑图、表格、画笔和钢笔免费体验由独立体验应用,可与文档站一起部署到/playground/提供,文档站构建不需要私有插件仓。