canvas-flow

Canvas 2D ベースの高速ノードエディタライブラリです。フレームワーク非依存のコア NodeEditor と、 それを包む Lit Web Component <canvas-flow-editor> で構成されていて、10,000 ノード規模でも軽快に動きます。

v0.4.0 · MIT License · ES Modules · 依存は lit(Web Component 版のみ)

できること

インストール

npm install @hidemikimura/canvas-flow lit
import内容lit
@hidemikimura/canvas-flowコア + Web Component(読み込むと <canvas-flow-editor> が登録される)必要
@hidemikimura/canvas-flow/coreNodeEditor などコアのみ(フレームワーク非依存)不要
@hidemikimura/canvas-flow/litWeb Component のみ必要
npm には既存の canvasflow パッケージがあり、記号を無視した同名判定で canvas-flow を取得できないため、 スコープ付きの名前で公開しています。カスタム要素名と JSON の formatcanvas-flow のままです。

使い方

ビルドなしで試すなら、CDN から読み込むだけで動きます(このデモと同じ構成です)。

<script type="module">
  import 'https://cdn.jsdelivr.net/npm/@hidemikimura/canvas-flow/+esm';
</script>

<canvas-flow-editor id="editor" minimap style="width:100%;height:600px"></canvas-flow-editor>

<script type="module">
  const el = document.getElementById('editor');
  el.addEventListener('ready', () => {
    el.load({
      nodes: [
        { id: 'a', title: 'Source', x: 40,  y: 40,  output: true,
          items: [{ id: 'v', label: 'value', value: '10', output: true }] },
        { id: 'b', title: 'Sink',   x: 360, y: 120, input: true,
          items: [{ id: 'in', label: 'in', input: true }] },
      ],
      edges: [{ source: 'a', sourcePort: 'item:v:out', target: 'b', targetPort: 'item:in:in' }],
    });
  });
  el.addEventListener('item-click', (e) => console.log(e.detail.node.title, e.detail.item.label));
</script>

コアだけを使う場合は new NodeEditor(canvas, options)<canvas> を渡します。 メソッド・イベント・データモデルの詳細は API 仕様書を参照してください。