childs を持たせるとノードの中に子ノードが入り、位置と幅は親が自動計算。何段でも入れ子にでき、子も外のノードと自由に接続できます。npm install @hidemikimura/canvas-flow lit
| import | 内容 | lit |
|---|---|---|
@hidemikimura/canvas-flow | コア + Web Component(読み込むと <canvas-flow-editor> が登録される) | 必要 |
@hidemikimura/canvas-flow/core | NodeEditor などコアのみ(フレームワーク非依存) | 不要 |
@hidemikimura/canvas-flow/lit | Web Component のみ | 必要 |
canvasflow パッケージがあり、記号を無視した同名判定で canvas-flow を取得できないため、
スコープ付きの名前で公開しています。カスタム要素名と JSON の format は canvas-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 仕様書を参照してください。