Skip to content

插件开发 ​

插件通过 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/提供,文档站构建不需要私有插件仓。

可组合的画布能力,从一个想法开始。