@luispm/zflow-graph 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +287 -0
- package/SECURITY.md +67 -0
- package/dist/adapters/yjs.esm.js +238 -0
- package/dist/adapters/yjs.esm.min.js +2 -0
- package/dist/adapters/yjs.umd.js +246 -0
- package/dist/webgl-renderer.esm.js +376 -0
- package/dist/webgl-renderer.esm.min.js +2 -0
- package/dist/webgl-renderer.umd.js +384 -0
- package/dist/zflow.esm.js +4365 -0
- package/dist/zflow.esm.js.map +1 -0
- package/dist/zflow.esm.min.js +2 -0
- package/dist/zflow.umd.js +4375 -0
- package/dist/zflow.umd.js.map +1 -0
- package/dist/zflow.umd.min.js +2 -0
- package/dist/zflow.wasm +0 -0
- package/docs/01-getting-started.md +210 -0
- package/docs/02-runtime.md +257 -0
- package/docs/03-kinds.md +282 -0
- package/docs/04-performance.md +218 -0
- package/docs/05-plugins.md +235 -0
- package/docs/06-multiplayer.md +180 -0
- package/docs/07-recipes.md +340 -0
- package/docs/08-api.md +436 -0
- package/docs/README.md +61 -0
- package/package.json +100 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zflow.esm.js","sources":["../src/zflow.js","../src/webgl-renderer.js"],"sourcesContent":["// zflow — node-edge graph editor library (full version).\n//\n// Single ES module. Consumers do:\n// import { ZFlow } from './dist/zflow.js';\n// const flow = await ZFlow.create({ container, wasmUrl });\n//\n// Wraps a Zig WASM core (~200 KB) and a Canvas2D renderer. JS holds typed-\n// array views over WASM linear memory for zero-copy reads. The memory\n// contract: WASM allocates everything at init time and never grows again,\n// so the views remain valid for the life of the instance.\n\n// ── Default kinds shipped with the library ─────────────────────────────────\n// Minimal flow primitives. Consumers extend with registerKind() for domain-\n// specific kinds (service, database, queue, etc.).\nconst DEFAULT_KINDS = [\n { name: 'input', color: '#5b8def', badge: 'I', w: 140, h: 60, nin: 0, nout: 1, shape: 'rect' },\n { name: 'process', color: '#e8b04b', badge: 'P', w: 160, h: 80, nin: 1, nout: 1, shape: 'rect' },\n { name: 'filter', color: '#5be0d0', badge: 'F', w: 160, h: 80, nin: 1, nout: 1, shape: 'rect' },\n { name: 'decision', color: '#c062e8', badge: 'D', w: 130, h: 130, nin: 1, nout: 2, shape: 'diamond' },\n { name: 'output', color: '#5bd17a', badge: 'O', w: 140, h: 60, nin: 1, nout: 0, shape: 'rect' },\n { name: 'aggregator', color: '#f0b93a', badge: '∑', w: 160, h: 120, nin: 3, nout: 1, shape: 'hexagon' },\n { name: 'branch', color: '#e8462b', badge: 'B', w: 130, h: 130, nin: 1, nout: 3, shape: 'ellipse' },\n // Built-in control-flow kinds (execute-enabled).\n { name: 'if', color: '#c062e8', badge: '?', w: 150, h: 70, nin: 1, nout: 2, shape: 'diamond',\n portIn: ['value'], portOut: ['true', 'false'],\n execute: (ctx, ins) => {\n const v = ins.value ?? ins[0];\n const cond = ctx.params?.condition;\n let ok;\n if (typeof cond === 'function') ok = cond(v);\n else if (typeof cond === 'string') {\n // Serializable: condition is a JS expression where `value` and `v` are bound.\n try { ok = Function('value', 'v', `\"use strict\"; return (${cond});`)(v, v); }\n catch { ok = false; }\n } else ok = Boolean(v);\n return ok ? { true: v } : { false: v };\n },\n },\n { name: 'forEach', color: '#5be0d0', badge: '↻', w: 160, h: 70, nin: 1, nout: 1, shape: 'rect',\n portIn: ['array'], portOut: ['item'],\n execute: async (ctx, ins) => {\n const arr = ins.array ?? ins[0] ?? [];\n if (!Array.isArray(arr) || arr.length === 0) return null;\n for (let i = 0; i < arr.length; i++) {\n if (ctx.signal.aborted) return;\n ctx.setProgress((i + 1) / arr.length);\n ctx.emit({ item: arr[i] });\n await new Promise((r) => setTimeout(r, 30));\n }\n return { item: arr[arr.length - 1] };\n },\n },\n { name: 'const', color: '#8b95a7', badge: 'K', w: 130, h: 56, nin: 0, nout: 1, shape: 'rect',\n portOut: ['value'],\n execute: (ctx) => ({ value: ctx.params?.value ?? 0 }),\n },\n { name: 'log', color: '#5b8def', badge: '◷', w: 160, h: 60, nin: 1, nout: 0, shape: 'rect',\n portIn: ['value'],\n execute: (ctx, ins) => { ctx.log(ins.value ?? ins[0]); return { received: ins.value ?? ins[0] }; },\n },\n];\n\nconst DARK_THEME = {\n bg: '#07090f', panel: 'rgba(20,28,40,0.92)', border: 'rgba(255,255,255,0.10)',\n fg: '#e6edf3', muted: '#8b95a7', accent: '#f0b93a', hi: 'rgba(240,185,58,0.10)',\n grid: 'rgba(255,255,255,0.04)', gridDot: 'rgba(255,255,255,0.10)',\n};\nconst LIGHT_THEME = {\n bg: '#f6f8fb', panel: 'rgba(255,255,255,0.96)', border: 'rgba(0,0,0,0.10)',\n fg: '#1d2330', muted: '#5a6577', accent: '#b8860b', hi: 'rgba(184,134,11,0.12)',\n grid: 'rgba(0,0,0,0.04)', gridDot: 'rgba(0,0,0,0.16)',\n};\n\nconst HANDLE_CORNERS = ['tl', 't', 'tr', 'r', 'br', 'b', 'bl', 'l'];\nconst HANDLE_LEFTS = new Set(['l', 'tl', 'bl']);\nconst HANDLE_RIGHTS = new Set(['r', 'tr', 'br']);\nconst HANDLE_TOPS = new Set(['t', 'tl', 'tr']);\nconst HANDLE_BOTS = new Set(['b', 'bl', 'br']);\nconst HANDLE_CURSOR = {\n tl: 'nwse-resize', br: 'nwse-resize',\n tr: 'nesw-resize', bl: 'nesw-resize',\n t: 'ns-resize', b: 'ns-resize',\n l: 'ew-resize', r: 'ew-resize',\n};\n\nexport class ZFlow {\n /** Async constructor — loads the WASM and prepares the canvas. */\n static async create(opts) {\n const flow = new ZFlow();\n await flow._init(opts);\n return flow;\n }\n\n // ── Lifecycle ─────────────────────────────────────────────────────────\n async _init(opts) {\n if (!opts || !opts.container) throw new Error('zflow: container is required');\n this.container = opts.container;\n this.options = Object.assign({\n theme: 'dark', background: '#07090f',\n edgeStyle: 'bezier', snapToGrid: false, gridSize: 20,\n contextMenu: true, keyboard: true,\n minimap: false, animateEdges: false, edgeFlowSpeed: 60,\n commandPalette: true, search: true, inlineMarkdown: true,\n }, opts);\n this._theme = this.options.theme === 'light' ? LIGHT_THEME : DARK_THEME;\n if (this.options.theme === 'light') this.options.background = this._theme.bg;\n\n // Load WASM bytes.\n let wasmBytes;\n if (opts.wasmBytes) {\n wasmBytes = opts.wasmBytes instanceof Uint8Array ? opts.wasmBytes : new Uint8Array(opts.wasmBytes);\n } else if (opts.wasmUrl) {\n wasmBytes = new Uint8Array(await (await fetch(opts.wasmUrl)).arrayBuffer());\n } else {\n throw new Error('zflow: pass either { wasmUrl } or { wasmBytes }');\n }\n const { instance } = await WebAssembly.instantiate(wasmBytes, {});\n this.w = instance.exports;\n if (this.w.init() === 0) throw new Error('zflow: WASM init OOM');\n\n const cap = this.w.nodeCap();\n const ecap = this.w.edgeCap();\n this.V = {\n posX: new Float32Array(this.w.memory.buffer, this.w.posXPtr(), cap),\n posY: new Float32Array(this.w.memory.buffer, this.w.posYPtr(), cap),\n sizeW: new Float32Array(this.w.memory.buffer, this.w.sizeWPtr(), cap),\n sizeH: new Float32Array(this.w.memory.buffer, this.w.sizeHPtr(), cap),\n kind: new Uint8Array (this.w.memory.buffer, this.w.kindPtr(), cap),\n nIn: new Uint8Array (this.w.memory.buffer, this.w.nInPtr(), cap),\n nOut: new Uint8Array (this.w.memory.buffer, this.w.nOutPtr(), cap),\n selected: new Uint8Array (this.w.memory.buffer, this.w.selectedPtr(), cap),\n edgeFromN: new Uint32Array (this.w.memory.buffer, this.w.edgeFromNodePtr(), ecap),\n edgeToN: new Uint32Array (this.w.memory.buffer, this.w.edgeToNodePtr(), ecap),\n edgeFromP: new Uint8Array (this.w.memory.buffer, this.w.edgeFromPortPtr(), ecap),\n edgeToP: new Uint8Array (this.w.memory.buffer, this.w.edgeToPortPtr(), ecap),\n edgeSel: new Uint8Array (this.w.memory.buffer, this.w.edgeSelectedPtr(), ecap),\n queryRes: new Uint32Array (this.w.memory.buffer, this.w.queryResultsPtr(), cap),\n };\n\n // Kinds + per-node JS overlays.\n this.kinds = DEFAULT_KINDS.map((k) => ({ ...k }));\n this.kindByName = new Map();\n this.kinds.forEach((k, i) => this.kindByName.set(k.name, i));\n this.titles = new Map();\n this.colors = new Map();\n this.descriptions = new Map();\n this.tags = new Map();\n this.status = new Map();\n this.progress = new Map();\n this.image = new Map(); // nodeId -> image url\n this.checked = new Map(); // nodeId -> bool (optional checkbox)\n this.tasks = new Map(); // nodeId -> [{text, done}]\n this.icon = new Map(); // nodeId -> emoji/glyph\n this.links = new Map(); // nodeId -> [{ url, label? }]\n this.portIn = new Map(); // nodeId -> string[] (in port labels)\n this.portOut = new Map(); // nodeId -> string[] (out port labels)\n this.zOrder = new Map(); // nodeId -> z (default 0)\n this.bookmarks = new Map(); // slot 1..9 -> nodeId\n this.edgeLabels = new Map();\n this._imageCache = new Map(); // url -> { img, ready }\n this._nodeAddedAt = new Map(); // nodeId -> timestamp (pop animation)\n this._dyingNodes = []; // [{ x,y,w,h,kind,color,t0 }] for fade-out\n this._dyingEdges = [];\n\n // Notes (sticky annotations) — JS-only entities.\n this.notes = []; // [{ id, x, y, w, h, text, color }]\n this._noteSeq = 0;\n // Frames (groups) — JS-only entities.\n this.frames = []; // [{ id, x, y, w, h, label, color }]\n this._frameSeq = 0;\n\n // Canvas + camera.\n this.canvas = document.createElement('canvas');\n this.canvas.style.cssText = `display:block;width:100%;height:100%;background:${this.options.background};cursor:default;outline:none;touch-action:none;user-select:none;`;\n this.canvas.tabIndex = 0;\n this.container.style.position = this.container.style.position || 'relative';\n this.container.appendChild(this.canvas);\n this.ctx = this.canvas.getContext('2d', { alpha: false });\n this.cam = { x: 0, y: 0, zoom: 1 };\n this._panVel = { x: 0, y: 0, lastTs: 0 };\n this._clipboard = null;\n this._nudgeTimer = null;\n\n // Interaction state.\n this.listeners = new Map();\n this._mode = 'idle';\n this._dragStart = null;\n this._dragLast = null;\n this._hoveredNode = -1;\n this._hoveredEdge = -1;\n this._hoveredNodeSince = 0;\n this._previewedNode = -1;\n this._resizingHandle = null;\n this._marquee = null;\n this._lasso = null;\n this._alignGuides = null;\n this._edgeStart = null;\n this._edgeCursor = null;\n this._draggingNote = -1;\n this._noteDragLast = null;\n this._draggingFrame = -1;\n this._frameDragLast = null;\n this._resizingFrame = null;\n this._editingNote = -1;\n this._editingNoteEl = null;\n this._editingTitle = -1;\n this._editingTitleEl = null;\n this._focusFrame = -1; // subflow focus\n this._htmlOverlays = new Map(); // nodeId -> DOM element\n this._previewEl = null;\n this._pathHighlightEnabled = false;\n this._focusedSet = null;\n this._lastFocusComputed = -2;\n\n // Right-click menu element (lazy, removed on dispose).\n this._menuEl = null;\n\n // ── New: locks, read-only, snap, reachable, presence, palette ─────\n this.locked = new Set(); // nodeId set — drag/resize blocked\n this.readOnly = false;\n this.snapToNodes = true; // edge-alignment magnet to other nodes\n this._reachableSet = null; // Set<nodeId> from setReachableFrom\n this.remoteCursors = new Map(); // userId -> { x, y, name, color, t }\n this._edgeWaypoints = new Map(); // edgeIdx -> [{ x, y }] mid-bends\n this._draggingWaypoint = null; // { edgeIdx, wpIdx }\n this.frameCollapsed = new Set(); // frameIdx set\n this._paletteGhost = null; // DOM element shown while dragging\n\n // ── live metrics, animation, search, templates, validation ─────────\n this.metrics = new Map(); // nodeId -> Float32Array rolling window\n this.metricMax = new Map(); // nodeId -> max for normalization\n this._metricCap = 32;\n this.animatedEdges = new Set(); // edgeIdx set for per-edge animation\n this._edgePhase = 0; // global phase for flow particles\n this._connValidator = null; // fn(fromN, fromP, toN, toP) -> bool\n this._templates = new Map(); // name -> { build(flow,x,y) }\n this._searchEl = null; this._searchQuery = ''; this._searchHits = [];\n this._cmdPaletteEl = null;\n this._minimapEl = null; // canvas overlay\n this._minimapCtx = null;\n this._historyThumbs = []; // [{ png, t }] (best-effort)\n if (this.options.minimap) this._setupMinimap();\n\n // ── Plugin system ───────────────────────────────────────────────\n this._plugins = [];\n this._hooks = {\n beforeRender: [], afterRender: [],\n onNodeAdd: [], onNodeDelete: [], onEdgeAdd: [],\n onBeforeExec: [], onAfterExec: [],\n onConnect: [], onSelectionChange: [], onChange: [],\n };\n\n // ── Graph runtime (opt-in, dormant until first run) ───────────────\n this._values = new Map(); // nodeId -> last output object\n this._running = false;\n this._runAbort = null; // AbortController\n this._runSeq = 0;\n this._runOrder = null; // cached topo order\n this._execHooks = new Map(); // kindIdx -> execute fn\n this._streamSrc = new Map(); // nodeId -> cancel fn\n this._runStepDelay = 250; // ms pause between nodes (visible by default)\n this._valueBubbles = []; // [{ nodeId, text, t0, dur }]\n this._activeEdges = new Map(); // edgeIdx -> expiry timestamp\n this._memoize = false; // skip nodes whose inputs hash unchanged\n this._memoKeys = new Map(); // nodeId -> last hash\n this._retryStats = new Map(); // nodeId -> attempt count for current run\n this.breakpoints = new Set(); // nodeId set — pause before exec\n this._paused = false; // step-through paused state\n this._resumeNext = null; // resolver to continue from paused state\n this._stepMode = false; // true → pause after each node\n this._subflows = new Map(); // kindName -> { nodes, edges, inputs, outputs }\n\n this._resize();\n this._resizeObs = new ResizeObserver(() => this._resize());\n this._resizeObs.observe(this.container);\n this._attachEvents();\n if (this.options.keyboard) this._attachKeyboard();\n this._loop();\n }\n\n dispose() {\n cancelAnimationFrame(this._raf);\n this._resizeObs?.disconnect();\n this.canvas?.remove();\n this._menuEl?.remove();\n if (this._keyHandler) window.removeEventListener('keydown', this._keyHandler);\n this.listeners.clear();\n }\n\n // ── Public mutation API ───────────────────────────────────────────────\n addNode(spec = {}) {\n if (this.readOnly) return -1;\n this._runOrder = null;\n const k = this._resolveKind(spec.kind ?? 'process');\n const cat = this.kinds[k];\n const id = this.w.addNode(\n spec.x ?? 0, spec.y ?? 0,\n spec.w ?? cat.w, spec.h ?? cat.h,\n k, spec.nin ?? cat.nin, spec.nout ?? cat.nout,\n );\n if (id < 0) return -1;\n if (spec.title) this.titles.set(id, spec.title);\n if (spec.color) this.colors.set(id, spec.color);\n if (spec.description) this.descriptions.set(id, spec.description);\n if (spec.tags) this.tags.set(id, spec.tags.slice());\n if (spec.status) this.status.set(id, spec.status);\n if (spec.progress !== undefined) this.progress.set(id, spec.progress);\n if (spec.image) this.image.set(id, spec.image);\n if (spec.checked !== undefined) this.checked.set(id, !!spec.checked);\n if (spec.tasks) this.tasks.set(id, spec.tasks.map((t) => ({ ...t })));\n if (spec.icon) this.icon.set(id, spec.icon);\n if (spec.links) this.links.set(id, spec.links.map((l) => ({ ...l })));\n if (spec.portIn) this.portIn.set(id, spec.portIn.slice());\n if (spec.portOut) this.portOut.set(id, spec.portOut.slice());\n if (spec.animate !== false) this._nodeAddedAt.set(id, performance.now());\n if (this._hooks) this._runHook('onNodeAdd', id, spec);\n this._emit('change');\n return id;\n }\n\n /** Insert many nodes at once. Skips per-node emit/hook overhead; emits once at end. */\n addNodesBulk(specs) {\n if (this.readOnly) return [];\n this._runOrder = null;\n const ids = new Array(specs.length);\n const wasSilent = this._suspendEvents; this._suspendEvents = true;\n for (let i = 0; i < specs.length; i++) {\n const s = specs[i];\n const k = this._resolveKind(s.kind);\n const id = this.w.addNode(k, s.x ?? 0, s.y ?? 0);\n if (id < 0) { ids[i] = -1; continue; }\n if (s.w !== undefined) this.V.sizeW[id] = s.w;\n if (s.h !== undefined) this.V.sizeH[id] = s.h;\n if (s.title) this.titles.set(id, s.title);\n if (s.color) this.colors.set(id, s.color);\n ids[i] = id;\n }\n this._suspendEvents = wasSilent;\n if (this._gl) this._gl.markAllDirty();\n this._emit('change');\n return ids;\n }\n\n /** Insert many edges at once. */\n addEdgesBulk(specs) {\n if (this.readOnly) return [];\n this._runOrder = null;\n const ids = new Array(specs.length);\n const wasSilent = this._suspendEvents; this._suspendEvents = true;\n for (let i = 0; i < specs.length; i++) {\n const s = specs[i];\n ids[i] = this.w.addEdge(s.from, s.fp ?? 0, s.to, s.tp ?? 0);\n if (s.label && ids[i] >= 0) this.edgeLabels.set(ids[i], s.label);\n }\n this._suspendEvents = wasSilent;\n if (this._gl) this._gl.markAllDirty();\n this._adjDirty = true;\n this._emit('change');\n return ids;\n }\n\n addEdge(spec = {}) {\n if (this.readOnly) return -1;\n this._runOrder = null;\n this._adjDirty = true;\n const eid = this.w.addEdge(spec.from, spec.fp ?? 0, spec.to, spec.tp ?? 0);\n if (eid >= 0) {\n if (spec.label) this.edgeLabels.set(eid, spec.label);\n if (this._hooks) this._runHook('onEdgeAdd', eid, spec);\n this._emit('change');\n }\n return eid;\n }\n\n moveNode(id, x, y) { this.w.moveNode(id, x, y); this._emit('change'); }\n _guardWrite() { return !this.readOnly; }\n\n deleteSelection() {\n if (this.readOnly) return;\n this._runOrder = null;\n // Capture dying entities for fade-out before WASM compacts the arrays.\n this._captureDying();\n const n = this.w.deleteSelected();\n if (n > 0) { this.w.snapshot(); this._emit('change'); }\n return n;\n }\n _captureDying() {\n const now = performance.now();\n const nodeWillDie = new Uint8Array(this.w.nodeCount_());\n for (let i = 0; i < this.w.nodeCount_(); i++) if (this.V.selected[i]) nodeWillDie[i] = 1;\n for (let i = 0; i < this.w.nodeCount_(); i++) {\n if (!nodeWillDie[i]) continue;\n const cat = this.kinds[this.V.kind[i]];\n this._dyingNodes.push({\n x: this.V.posX[i], y: this.V.posY[i],\n w: this.V.sizeW[i], h: this.V.sizeH[i],\n shape: cat.shape, color: this.colors.get(i) || cat.color, t0: now,\n });\n }\n for (let e = 0; e < this.w.edgeCount_(); e++) {\n const a = this.V.edgeFromN[e], b = this.V.edgeToN[e];\n if (!this.V.edgeSel[e] && !nodeWillDie[a] && !nodeWillDie[b]) continue;\n const ap = this._portWorld(a, 1, this.V.edgeFromP[e]);\n const bp = this._portWorld(b, 0, this.V.edgeToP[e]);\n this._dyingEdges.push({\n ap, bp,\n colA: this.colors.get(a) || this.kinds[this.V.kind[a]].color,\n colB: this.colors.get(b) || this.kinds[this.V.kind[b]].color,\n t0: now,\n });\n }\n }\n duplicateSelection(dx = 40, dy = 40) {\n const n = this.w.duplicateSelected(dx, dy);\n if (n > 0) { this.w.snapshot(); this._emit('change'); }\n return n;\n }\n setSelected(id, on) { this.w.setSelected(id, on ? 1 : 0); this._emit('select', this.getSelection()); }\n toggleSelected(id) { this.w.toggleSelected(id); this._emit('select', this.getSelection()); }\n clearSelection() { this.w.clearSelection(); this._emit('select', []); }\n selectAll() { this.w.selectAll(); this._emit('select', this.getSelection()); }\n getSelection() {\n const out = [];\n const n = this.w.nodeCount_();\n for (let i = 0; i < n; i++) if (this.V.selected[i]) out.push(i);\n return out;\n }\n nodeCount() { return this.w.nodeCount_(); }\n edgeCount() { return this.w.edgeCount_(); }\n\n // ── Per-node setters (public API) ─────────────────────────────────────\n setNodeTitle(id, t) { t ? this.titles.set(id, t) : this.titles.delete(id); this._emit('change'); }\n setNodeColor(id, c) { c ? this.colors.set(id, c) : this.colors.delete(id); this._emit('change'); }\n setNodeDescription(id, d) { d ? this.descriptions.set(id, d) : this.descriptions.delete(id); this._emit('change'); }\n setNodeTags(id, tags) { (tags && tags.length) ? this.tags.set(id, tags.slice()) : this.tags.delete(id); this._emit('change'); }\n setNodeStatus(id, s) { s ? this.status.set(id, s) : this.status.delete(id); this._emit('change'); }\n setNodeProgress(id, p) { (p !== undefined && p !== null) ? this.progress.set(id, p) : this.progress.delete(id); this._emit('change'); }\n setEdgeLabel(eid, label) { label ? this.edgeLabels.set(eid, label) : this.edgeLabels.delete(eid); this._emit('change'); }\n setEdgeStyle(style) { this.options.edgeStyle = style === 'orthogonal' ? 'orthogonal' : 'bezier'; }\n setSnapToGrid(on) { this.options.snapToGrid = !!on; }\n setNodeImage(id, url) { url ? this.image.set(id, url) : this.image.delete(id); this._emit('change'); }\n setNodeChecked(id, on) { on === null || on === undefined ? this.checked.delete(id) : this.checked.set(id, !!on); this._emit('change'); }\n setNodeTasks(id, list) { (list && list.length) ? this.tasks.set(id, list.map((t) => ({ ...t }))) : this.tasks.delete(id); this._emit('change'); }\n setNodeIcon(id, glyph) { glyph ? this.icon.set(id, glyph) : this.icon.delete(id); this._emit('change'); }\n setNodeLinks(id, links) { (links && links.length) ? this.links.set(id, links.map((l) => ({ ...l }))) : this.links.delete(id); this._emit('change'); }\n setPortInLabels(id, arr) { (arr && arr.some(Boolean)) ? this.portIn.set(id, arr.slice()) : this.portIn.delete(id); this._emit('change'); }\n setPortOutLabels(id, arr) { (arr && arr.some(Boolean)) ? this.portOut.set(id, arr.slice()) : this.portOut.delete(id); this._emit('change'); }\n\n // ── Z-order ───────────────────────────────────────────────────────────\n _nextZ = 0;\n bringToFront(ids) {\n const sel = ids || this.getSelection();\n for (const i of sel) this.zOrder.set(i, ++this._nextZ);\n }\n sendToBack(ids) {\n const sel = ids || this.getSelection();\n for (const i of sel) this.zOrder.set(i, --this._nextZ);\n }\n\n // ── Bookmarks (slots 1..9) ───────────────────────────────────────────\n setBookmark(slot, nodeId) { this.bookmarks.set(slot, nodeId ?? (this.getSelection()[0])); }\n jumpBookmark(slot) {\n const id = this.bookmarks.get(slot);\n if (id === undefined || id >= this.w.nodeCount_()) return;\n this.clearSelection(); this.w.setSelected(id, 1);\n this.panTo(this.V.posX[id], this.V.posY[id]);\n this._emit('select', this.getSelection());\n }\n\n // ── Hover preview popover (consumer toggles via options.hoverPreview) ──\n setHoverPreview(on) { this.options.hoverPreview = !!on; if (!on) this._hidePreview(); }\n\n // ── Plugin API ──────────────────────────────────────────────────────\n /** Install a plugin object with optional lifecycle hooks. Returns dispose fn. */\n use(plugin) {\n if (!plugin) throw new Error('use(plugin): plugin required');\n if (typeof plugin === 'function') plugin = plugin(this) || {};\n this._plugins.push(plugin);\n for (const name of Object.keys(this._hooks)) {\n if (typeof plugin[name] === 'function') this._hooks[name].push(plugin[name]);\n }\n if (typeof plugin.extendAPI === 'function') plugin.extendAPI(this);\n if (typeof plugin.init === 'function') plugin.init(this);\n if (Array.isArray(plugin.kinds)) for (const k of plugin.kinds) this.registerKind(k);\n if (Array.isArray(plugin.commands)) {\n this._extraCommands = (this._extraCommands || []).concat(plugin.commands);\n }\n this._emit('plugin:installed', plugin.name || plugin);\n return () => this._removePlugin(plugin);\n }\n _removePlugin(plugin) {\n const i = this._plugins.indexOf(plugin); if (i === -1) return;\n this._plugins.splice(i, 1);\n for (const name of Object.keys(this._hooks)) {\n if (typeof plugin[name] === 'function') {\n const arr = this._hooks[name];\n const j = arr.indexOf(plugin[name]);\n if (j !== -1) arr.splice(j, 1);\n }\n }\n if (typeof plugin.dispose === 'function') plugin.dispose(this);\n }\n _runHook(name, ...args) {\n const arr = this._hooks[name]; if (!arr || !arr.length) return null;\n let result;\n for (const fn of arr) {\n try { const r = fn(this, ...args); if (r === false) return false; if (r !== undefined) result = r; }\n catch (e) { console.error(`plugin ${name} hook error`, e); }\n }\n return result;\n }\n\n // ── WebGL renderer (opt-in, hybrid: GL bodies + Canvas2D text overlay) ─\n async enableWebGL(force = false) {\n if (this._gl) return true;\n if (!force && this.w.nodeCount_() < (this.options.webglThreshold || 2000)) return false;\n try {\n const mod = await import('./webgl-renderer.js');\n this._gl = new mod.WebGLRenderer(this);\n if (this._gl.disabled) { this._gl = null; return false; }\n this.options.renderer = 'webgl';\n this._emit('renderer', 'webgl');\n return true;\n } catch (e) {\n console.warn('zflow: WebGL renderer failed', e);\n return false;\n }\n }\n disableWebGL() {\n if (!this._gl) return;\n this._gl.dispose();\n this._gl = null;\n this.canvas.style.background = this.options.background;\n this.canvas.style.zIndex = '';\n this.canvas.style.position = '';\n this.options.renderer = 'canvas2d';\n this._emit('renderer', 'canvas2d');\n }\n\n // ── Graph execution runtime ──────────────────────────────────────────\n // Each kind may register an `execute(ctx, inputs) -> outputs | Promise`.\n // The scheduler walks the graph in topological order, gathering inputs\n // from upstream outputs via the edge connectivity. Status / progress /\n // sparkline are updated automatically so the UI shows the run live.\n\n /** Set how long the runtime pauses between nodes so propagation is visible. */\n setRunStepDelay(ms) { this._runStepDelay = Math.max(0, ms|0); }\n\n /** Enable input memoization globally — re-runs skip nodes whose inputs match the previous tick. */\n setMemoization(on) { this._memoize = !!on; if (!on) this._memoKeys?.clear(); }\n\n /** Evaluate an expression like \"{{node_3.value}} * 2\" against current runtime values. */\n // ── Schema / type validation ────────────────────────────────────────\n /** Returns null if the connection is OK, or a string reason if not. */\n validateConnection(fromN, fromP, toN, toP) {\n if (fromN === toN) return 'self-loop';\n const fromCat = this.kinds[this.V.kind[fromN]];\n const toCat = this.kinds[this.V.kind[toN]];\n const outSchema = fromCat.outputs?.[fromP];\n const inSchema = toCat.inputs?.[toP];\n if (outSchema && inSchema) {\n if (!isCompatibleType(outSchema.type, inSchema.type)) {\n return `type mismatch: ${outSchema.type} → ${inSchema.type}`;\n }\n }\n if (this._connValidator) {\n const v = this._connValidator(fromN, fromP, toN, toP);\n if (v === false) return 'rejected by validator';\n }\n return null;\n }\n\n // ── Inline expression editor with autocomplete ────────────────────\n /** Open an inline editor that accepts {{node_X.field}} expressions with live preview. */\n editNodeExpression(nodeId, field = 'title') {\n if (this._exprEditorEl) this._closeExprEditor();\n const cur = field === 'title' ? (this.titles.get(nodeId) || '')\n : field === 'desc' ? (this.descriptions.get(nodeId) || '')\n : '';\n const wrap = document.createElement('div');\n wrap.style.cssText = `position:absolute;z-index:600;background:#161b27;border:1px solid #f0b93a;border-radius:6px;box-shadow:0 8px 24px rgba(0,0,0,0.5);font-family:Inter, ui-sans-serif;font-size:12px;color:#e6edf3;width:280px;`;\n wrap.innerHTML = `\n <input id=\"zf-expr\" type=\"text\" style=\"width:260px;padding:8px 10px;background:transparent;border:0;color:#e6edf3;outline:none;font-family:ui-monospace,Consolas,monospace;font-size:12px;\">\n <div id=\"zf-expr-preview\" style=\"padding:4px 10px;border-top:1px solid rgba(255,255,255,0.08);color:#5be0d0;font-family:ui-monospace,Consolas,monospace;font-size:11px;min-height:14px;\"></div>\n <div id=\"zf-expr-list\" style=\"max-height:160px;overflow:auto;border-top:1px solid rgba(255,255,255,0.08);display:none;\"></div>`;\n this.container.appendChild(wrap);\n this._exprEditorEl = wrap;\n const cx = this.V.posX[nodeId], cy = this.V.posY[nodeId];\n const hh = this.V.sizeH[nodeId] * 0.5;\n const tl = this._w2s(cx - this.V.sizeW[nodeId] * 0.5, cy - hh);\n const dpr = window.devicePixelRatio || 1;\n wrap.style.left = (tl.x / dpr) + 'px';\n wrap.style.top = Math.max(8, tl.y / dpr - 110) + 'px';\n const input = wrap.querySelector('#zf-expr');\n const list = wrap.querySelector('#zf-expr-list');\n const prev = wrap.querySelector('#zf-expr-preview');\n input.value = cur;\n const refreshPreview = () => {\n try { const r = this.evalExpression(input.value); prev.style.color = '#5be0d0'; prev.textContent = '= ' + formatRuntimeValue(r); }\n catch (e) { prev.style.color = '#e8462b'; prev.textContent = String(e.message || e); }\n };\n const refreshSuggestions = () => {\n const pos = input.selectionStart;\n const m = input.value.slice(0, pos).match(/\\{\\{\\s*([\\w_.]*)$/);\n if (!m) { list.style.display = 'none'; return; }\n const prefix = m[1].toLowerCase();\n const candidates = [];\n for (let i = 0; i < this.w.nodeCount_(); i++) {\n if (i === nodeId) continue;\n const title = this.titles.get(i) || this.kinds[this.V.kind[i]].name;\n const val = this._values.get(i);\n const expansions = (val && typeof val === 'object') ? Object.keys(val).map((k) => `node_${i}.${k}`) : [`node_${i}`];\n for (const c of expansions) if (c.toLowerCase().startsWith(prefix)) candidates.push({ text: c, label: `${c} · ${title}` });\n }\n if (!candidates.length) { list.style.display = 'none'; return; }\n list.style.display = 'block';\n list._items = candidates.slice(0, 8);\n list._cursor = 0;\n list.innerHTML = list._items.map((c, i) =>\n `<div data-i=\"${i}\" data-text=\"${escapeHtml(c.text)}\" style=\"padding:6px 10px;cursor:pointer;${i === 0 ? 'background:rgba(240,185,58,0.18);' : ''}\">${escapeHtml(c.label)}</div>`).join('');\n };\n const insert = (txt) => {\n const pos = input.selectionStart;\n const before = input.value.slice(0, pos).replace(/\\{\\{\\s*[\\w_.]*$/, '{{') + txt + '}}';\n input.value = before + input.value.slice(pos);\n input.selectionStart = input.selectionEnd = before.length;\n refreshPreview(); list.style.display = 'none';\n };\n const updateHi = () => list.querySelectorAll('[data-i]').forEach((r, i) =>\n r.style.background = i === list._cursor ? 'rgba(240,185,58,0.18)' : 'transparent');\n input.addEventListener('input', () => { refreshPreview(); refreshSuggestions(); });\n input.addEventListener('keydown', (e) => {\n const open = list.style.display !== 'none' && list._items;\n if (open && e.code === 'ArrowDown') { list._cursor = (list._cursor + 1) % list._items.length; updateHi(); e.preventDefault(); return; }\n if (open && e.code === 'ArrowUp') { list._cursor = (list._cursor - 1 + list._items.length) % list._items.length; updateHi(); e.preventDefault(); return; }\n if (open && (e.code === 'Tab' || e.code === 'Enter')) { insert(list._items[list._cursor].text); e.preventDefault(); return; }\n if (e.code === 'Enter') {\n if (field === 'title') this.setNodeTitle(nodeId, input.value);\n else if (field === 'desc') this.setNodeDescription(nodeId, input.value);\n this._closeExprEditor();\n }\n if (e.code === 'Escape') this._closeExprEditor();\n });\n list.addEventListener('mousedown', (e) => {\n const r = e.target.closest('[data-i]'); if (!r) return;\n insert(r.dataset.text); input.focus(); e.preventDefault();\n });\n setTimeout(() => { input.focus(); input.select(); refreshPreview(); }, 10);\n // Click outside closes the editor.\n const closeOnOutside = (e) => {\n if (this._exprEditorEl && !this._exprEditorEl.contains(e.target)) { this._closeExprEditor(); }\n };\n setTimeout(() => document.addEventListener('mousedown', closeOnOutside, { once: false }), 60);\n this._exprEditorEl._cleanup = () => document.removeEventListener('mousedown', closeOnOutside);\n }\n _closeExprEditor() {\n if (this._exprEditorEl) {\n this._exprEditorEl._cleanup?.();\n this._exprEditorEl.remove();\n this._exprEditorEl = null;\n }\n }\n\n evalExpression(expr, extraScope = {}) {\n if (typeof expr !== 'string') return expr;\n const interp = expr.replace(/\\{\\{\\s*([^}]+?)\\s*\\}\\}/g, (_, path) => {\n const [head, ...rest] = path.split('.');\n let v;\n if (/^node_(\\d+)$/.test(head)) v = this._values.get(parseInt(head.slice(5), 10));\n else if (head in extraScope) v = extraScope[head];\n else return 'null';\n for (const seg of rest) v = (v == null) ? undefined : v[seg];\n return JSON.stringify(v ?? null);\n });\n if (interp === expr) return expr;\n try { return Function(`\"use strict\"; return (${interp})`)(); }\n catch { return interp; }\n }\n\n /** Inject or replace the execute fn for a kind. Returns the previous fn. */\n setKindExecutor(kindName, fn) {\n const k = this.kindByName.get(kindName);\n if (k === undefined) throw new Error(`unknown kind: ${kindName}`);\n const prev = this.kinds[k].execute;\n this.kinds[k].execute = fn;\n this._runOrder = null;\n return prev;\n }\n /** Force a specific input value for a node (useful for source nodes). */\n setNodeInput(nodeId, outputs) {\n this._values.set(nodeId, outputs);\n this.setNodeStatus(nodeId, 'ok');\n }\n getNodeValue(nodeId) { return this._values.get(nodeId); }\n clearRuntimeState() {\n this._values.clear();\n for (const sc of this._streamSrc.values()) try { sc(); } catch {}\n this._streamSrc.clear();\n const n = this.w.nodeCount_();\n for (let i = 0; i < n; i++) { this.status.delete(i); this.progress.delete(i); }\n this._emit('change');\n }\n\n /** Returns [nodeIds] in topological order, ignoring cycles. */\n _topoOrder() {\n if (this._runOrder) return this._runOrder;\n const n = this.w.nodeCount_(), m = this.w.edgeCount_();\n const indeg = new Int32Array(n);\n const out = Array.from({ length: n }, () => []);\n for (let i = 0; i < m; i++) {\n const a = this.V.edgeFromN[i], b = this.V.edgeToN[i];\n if (a !== b) { indeg[b]++; out[a].push({ to: b, fp: this.V.edgeFromP[i], tp: this.V.edgeToP[i], idx: i }); }\n }\n const q = [];\n for (let i = 0; i < n; i++) if (indeg[i] === 0) q.push(i);\n const order = [];\n while (q.length) {\n const u = q.shift();\n order.push(u);\n for (const e of out[u]) if (--indeg[e.to] === 0) q.push(e.to);\n }\n // Cycle nodes: append in id order so they still get a chance to run once.\n if (order.length < n) {\n const seen = new Set(order);\n for (let i = 0; i < n; i++) if (!seen.has(i)) order.push(i);\n }\n this._runOrder = order;\n this._runOut = out;\n return order;\n }\n\n /** Gather inputs for a node by reading upstream node outputs through edges. */\n _gatherInputs(nodeId) {\n const inputs = {};\n const cat = this.kinds[this.V.kind[nodeId]];\n const portLabels = this.portIn.get(nodeId) || cat.portIn || [];\n const m = this.w.edgeCount_();\n for (let i = 0; i < m; i++) {\n if (this.V.edgeToN[i] !== nodeId) continue;\n const tp = this.V.edgeToP[i];\n const src = this.V.edgeFromN[i], sp = this.V.edgeFromP[i];\n const srcOut = this._values.get(src);\n if (srcOut === undefined) continue;\n let val;\n if (srcOut && typeof srcOut === 'object' && !Array.isArray(srcOut)) {\n const srcCat = this.kinds[this.V.kind[src]];\n const srcPortLabels = this.portOut.get(src) || srcCat.portOut || [];\n const key = srcPortLabels[sp];\n // Conditional routing: if the source declared labeled outputs and THIS\n // branch's labeled key isn't present, the branch didn't fire — skip.\n if (key) {\n if (!(key in srcOut)) continue;\n val = srcOut[key];\n } else if (sp in srcOut) val = srcOut[sp];\n else if ('value' in srcOut) val = srcOut.value;\n else if ('out' in srcOut) val = srcOut.out;\n else val = srcOut;\n if (val === undefined) continue;\n } else val = srcOut;\n const tkey = portLabels[tp] || `in${tp}`;\n inputs[tkey] = val;\n inputs[tp] = val;\n }\n void cat;\n return inputs;\n }\n\n /** All transitive successors of nodeId in topological order. */\n _collectDownstream(nodeId) {\n const m = this.w.edgeCount_();\n const out = [];\n const seen = new Set();\n const order = this._topoOrder();\n const indexOf = new Map(order.map((id, i) => [id, i]));\n const stack = [nodeId];\n while (stack.length) {\n const u = stack.pop();\n for (let i = 0; i < m; i++) {\n if (this.V.edgeFromN[i] === u && !seen.has(this.V.edgeToN[i])) {\n seen.add(this.V.edgeToN[i]); out.push(this.V.edgeToN[i]); stack.push(this.V.edgeToN[i]);\n }\n }\n }\n out.sort((a, b) => indexOf.get(a) - indexOf.get(b));\n return out;\n }\n\n /** Topological run of the whole graph (or from a starting subgraph). */\n async run({ from = null, signal = null, filter = null } = {}) {\n if (this._running) return;\n this._running = true;\n const mySeq = ++this._runSeq;\n const ac = new AbortController();\n this._runAbort = ac;\n if (signal) signal.addEventListener('abort', () => ac.abort());\n\n this._topoOrder();\n let order = this._runOrder;\n if (from !== null) {\n const reach = new Set([from]); const q = [from];\n while (q.length) {\n const u = q.shift();\n for (const e of this._runOut[u]) if (!reach.has(e.to)) { reach.add(e.to); q.push(e.to); }\n }\n order = order.filter((id) => reach.has(id));\n }\n if (typeof filter === 'function') order = order.filter(filter);\n\n const result = { executed: 0, errors: [], values: new Map() };\n this._emit('run:start', { order });\n\n for (const id of order) {\n if (ac.signal.aborted || mySeq !== this._runSeq) break;\n const cat = this.kinds[this.V.kind[id]];\n const exec = cat.execute;\n if (typeof exec !== 'function') {\n if (!this._values.has(id)) continue;\n result.values.set(id, this._values.get(id));\n continue;\n }\n const inputs = this._gatherInputs(id);\n // Conditional-routing skip: if this node has declared inputs but no\n // upstream supplied any (because the parent emitted on a different branch),\n // skip exec entirely — the dead branch shouldn't fire.\n if (cat.nin > 0 && Object.keys(inputs).length === 0) {\n // Only skip if there is at least one incoming edge in the graph (else\n // it's just a disconnected node and should still run if explicitly invoked).\n let hasIncoming = false;\n const m2 = this.w.edgeCount_();\n for (let e = 0; e < m2; e++) if (this.V.edgeToN[e] === id) { hasIncoming = true; break; }\n if (hasIncoming) continue;\n }\n // Memoization — skip if inputs hash unchanged (FNV-1a 32-bit, no JSON cost).\n if (this._memoize) {\n const hash = fnvHash(inputs);\n if (this._memoKeys.get(id) === hash && this._values.has(id)) {\n result.executed++;\n this._emit('node:cached', { id });\n continue;\n }\n this._memoKeys.set(id, hash);\n }\n // Light up the incoming edges so the user sees the data path.\n const m2 = this.w.edgeCount_();\n for (let e = 0; e < m2; e++) {\n if (this.V.edgeToN[e] === id && this._values.has(this.V.edgeFromN[e])) {\n this._activeEdges.set(e, performance.now() + 800);\n }\n }\n this.setNodeStatus(id, 'running');\n this.setNodeProgress(id, 0);\n this._emit('node:exec', { id, inputs });\n if (this._hooks) {\n const r = this._runHook('onBeforeExec', id, inputs);\n if (r === false) { this.setNodeStatus(id, 'idle'); continue; }\n }\n // Breakpoint / step pause.\n if (this.breakpoints.has(id) || this._stepMode) {\n await this._awaitContinue(id);\n if (ac.signal.aborted || mySeq !== this._runSeq) break;\n }\n if (this._runStepDelay > 0) {\n await new Promise((r) => setTimeout(r, this._runStepDelay));\n if (ac.signal.aborted || mySeq !== this._runSeq) break;\n }\n const ctx = {\n nodeId: id,\n signal: ac.signal,\n params: this._nodeParams?.get(id) || {},\n emit: (out) => { this._values.set(id, out); this._emit('node:emit', { id, outputs: out }); if (typeof out === 'number') this.pushNodeMetric(id, out); },\n log: (...args) => this._emit('node:log', { id, args }),\n setProgress: (p) => this.setNodeProgress(id, p),\n metric: (v) => this.pushNodeMetric(id, v),\n get: (otherId) => this._values.get(otherId),\n };\n const retryCfg = cat.retry || null;\n const maxAttempts = retryCfg ? (retryCfg.n ?? 3) : 1;\n const retryDelay = retryCfg ? (retryCfg.delay ?? 100) : 0;\n let attempt = 0, out, lastErr = null, succeeded = false;\n while (attempt < maxAttempts) {\n attempt++;\n this._retryStats.set(id, attempt);\n try {\n const outRaw = exec(ctx, inputs);\n // Async generator → stream multiple emissions.\n if (outRaw && typeof outRaw[Symbol.asyncIterator] === 'function') {\n // For each emission, propagate through downstream chain synchronously\n // before yielding the next. That way \"stream → double → sink\" really\n // shows 5 ticks down the pipe instead of one.\n let lastEmission;\n const downstream = this._collectDownstream(id);\n for await (const emission of outRaw) {\n if (ac.signal.aborted) break;\n lastEmission = emission;\n this._values.set(id, emission);\n this._emit('node:emit', { id, outputs: emission });\n if (typeof emission === 'number') this.pushNodeMetric(id, emission);\n this._valueBubbles.push({ nodeId: id, text: bubbleSummary(emission), t0: performance.now(), dur: 700 });\n // Propagate through downstream nodes (skip if they have their own execute that should wait for full stream).\n for (const dId of downstream) {\n if (ac.signal.aborted) break;\n const dCat = this.kinds[this.V.kind[dId]];\n if (typeof dCat.execute !== 'function') continue;\n if (dCat.execute.constructor.name === 'AsyncGeneratorFunction') continue;\n const dIns = this._gatherInputs(dId);\n // Light up the edge feeding this downstream node.\n const m2b = this.w.edgeCount_();\n for (let e = 0; e < m2b; e++) {\n if (this.V.edgeToN[e] === dId && this.V.edgeFromN[e] === id) {\n this._activeEdges.set(e, performance.now() + 500);\n }\n }\n this.setNodeStatus(dId, 'running');\n try {\n const dRaw = dCat.execute({ ...ctx, nodeId: dId, params: this._nodeParams?.get(dId) || {} }, dIns);\n const dOut = (dRaw && typeof dRaw.then === 'function') ? await dRaw : dRaw;\n if (dOut !== undefined && dOut !== null) {\n this._values.set(dId, dOut);\n this._emit('node:emit', { id: dId, outputs: dOut });\n this._valueBubbles.push({ nodeId: dId, text: bubbleSummary(dOut), t0: performance.now(), dur: 700 });\n if (typeof dOut === 'number') this.pushNodeMetric(dId, dOut);\n }\n this.setNodeStatus(dId, 'ok');\n } catch (e) { this.setNodeStatus(dId, 'error'); }\n }\n await new Promise((r) => setTimeout(r, 60));\n }\n out = lastEmission;\n } else {\n out = (outRaw && typeof outRaw.then === 'function') ? await outRaw : outRaw;\n }\n if (ac.signal.aborted || mySeq !== this._runSeq) break;\n succeeded = true; lastErr = null; break;\n } catch (err) {\n lastErr = err;\n this._emit('node:retry', { id, attempt, error: err });\n if (attempt < maxAttempts) await new Promise((r) => setTimeout(r, retryDelay));\n }\n }\n try {\n if (!succeeded) throw lastErr;\n if (ac.signal.aborted || mySeq !== this._runSeq) break;\n if (out !== undefined && out !== null) {\n this._values.set(id, out);\n result.values.set(id, out);\n // Show a floating value bubble above the node.\n let summary;\n if (typeof out === 'number') summary = formatRuntimeValue(out);\n else if (out && typeof out === 'object') {\n const entries = Object.entries(out).filter(([, v]) => v !== undefined && v !== null);\n summary = entries.map(([k, v]) => `${k}: ${formatRuntimeValue(v)}`).join(' ');\n } else summary = formatRuntimeValue(out);\n this._valueBubbles.push({ nodeId: id, text: summary, t0: performance.now(), dur: 1400 });\n if (typeof out === 'number') this.pushNodeMetric(id, out);\n else if (out && typeof out === 'object') {\n for (const v of Object.values(out)) if (typeof v === 'number') { this.pushNodeMetric(id, v); break; }\n }\n }\n this.setNodeStatus(id, 'ok');\n this.setNodeProgress(id, 1);\n result.executed++;\n if (this._hooks) this._runHook('onAfterExec', id, out);\n this._emit('node:done', { id, outputs: out });\n } catch (err) {\n this.setNodeStatus(id, 'error');\n result.errors.push({ id, error: err });\n this._emit('node:error', { id, error: err });\n if (this.options.stopOnError) break;\n }\n }\n\n this._running = false;\n this._runAbort = null;\n this._emit('run:done', result);\n return result;\n }\n runFrom(nodeId) { return this.run({ from: nodeId }); }\n\n // ── Debug: breakpoints + step-through ──────────────────────────────\n setBreakpoint(nodeId, on = true) {\n if (on) this.breakpoints.add(nodeId); else this.breakpoints.delete(nodeId);\n }\n toggleBreakpoint(nodeId) {\n if (this.breakpoints.has(nodeId)) this.breakpoints.delete(nodeId);\n else this.breakpoints.add(nodeId);\n }\n clearBreakpoints() { this.breakpoints.clear(); }\n setStepMode(on) { this._stepMode = !!on; }\n /** When paused at a breakpoint, advance one node. */\n stepOver() {\n if (this._resumeNext) { const r = this._resumeNext; this._resumeNext = null; r(); }\n }\n /** Resume normal execution. */\n resume() {\n this._paused = false; this._stepMode = false;\n if (this._resumeNext) { const r = this._resumeNext; this._resumeNext = null; r(); }\n }\n isPaused() { return this._paused; }\n _awaitContinue(nodeId) {\n return new Promise((resolve) => {\n this._paused = true;\n this._emit('run:paused', { nodeId });\n this._resumeNext = resolve;\n });\n }\n\n // ── Sub-flows: turn a frame into a reusable kind ───────────────────\n /** Snapshot a frame's contents as a callable kind. Returns the new kind name. */\n registerSubflowFromFrame(frameId, opts = {}) {\n const f = this.frames.find((ff) => ff.id === frameId);\n if (!f) throw new Error('frame not found');\n const inside = [];\n const n = this.w.nodeCount_();\n for (let i = 0; i < n; i++) {\n if (this.V.posX[i] >= f.x && this.V.posX[i] <= f.x + f.w &&\n this.V.posY[i] >= f.y && this.V.posY[i] <= f.y + f.h) inside.push(i);\n }\n if (!inside.length) throw new Error('frame is empty');\n const setIn = new Set(inside);\n // Capture node specs by current state.\n const localToSnap = new Map();\n const nodes = inside.map((id, i) => {\n localToSnap.set(id, i);\n return {\n kind: this.kinds[this.V.kind[id]].name,\n x: this.V.posX[id] - f.x, y: this.V.posY[id] - f.y,\n w: this.V.sizeW[id], h: this.V.sizeH[id],\n title: this.titles.get(id), color: this.colors.get(id),\n params: this._nodeParams?.get(id),\n };\n });\n const edges = [];\n const m = this.w.edgeCount_();\n for (let e = 0; e < m; e++) {\n if (setIn.has(this.V.edgeFromN[e]) && setIn.has(this.V.edgeToN[e])) {\n edges.push({\n from: localToSnap.get(this.V.edgeFromN[e]),\n to: localToSnap.get(this.V.edgeToN[e]),\n fp: this.V.edgeFromP[e], tp: this.V.edgeToP[e],\n });\n }\n }\n // Boundary detection: nodes with no inside-predecessor are inputs;\n // nodes with no inside-successor are outputs.\n const hasIncoming = new Set(), hasOutgoing = new Set();\n for (const ed of edges) { hasIncoming.add(ed.to); hasOutgoing.add(ed.from); }\n const inputs = inside.map((_, i) => i).filter((i) => !hasIncoming.has(i));\n const outputs = inside.map((_, i) => i).filter((i) => !hasOutgoing.has(i));\n\n const kindName = opts.name || `subflow_${f.label || frameId}`.replace(/\\s+/g, '_');\n // Surface inputs/outputs with the label from the node's title or kind.\n const inputLabels = inputs.map((idx) => {\n const local = inside[idx];\n const t = this.titles.get(local);\n return t || this.kinds[this.V.kind[local]].name;\n });\n const outputLabels = outputs.map((idx) => {\n const local = inside[idx];\n const t = this.titles.get(local);\n return t || this.kinds[this.V.kind[local]].name;\n });\n this._subflows.set(kindName, { nodes, edges, inputs, outputs, inputLabels, outputLabels });\n const self = this;\n this.registerKind({\n name: kindName, color: opts.color || '#5be0d0', badge: opts.badge || 'Σ',\n w: 180, h: 90, nin: Math.max(1, inputs.length), nout: Math.max(1, outputs.length),\n shape: 'rect',\n portIn: inputLabels,\n portOut: outputLabels,\n inputs: inputLabels.map((n) => ({ name: n, type: 'any' })),\n outputs: outputLabels.map((n) => ({ name: n, type: 'any' })),\n execute: async (ctx, ins) => {\n // Spawn ephemeral nodes for execution? Cheap path: rebuild a transient\n // value map inside this call using the snapshot's adjacency.\n const sf = self._subflows.get(kindName);\n const tmpVals = new Map();\n for (let i = 0; i < sf.inputs.length; i++) {\n const val = ins[i] ?? ins[`in${i}`] ?? ins[sf.inputLabels[i]];\n tmpVals.set(sf.inputs[i], val);\n }\n // Walk in topo order over snapshot edges.\n const indeg = sf.nodes.map(() => 0);\n const out = sf.nodes.map(() => []);\n for (const e of sf.edges) { indeg[e.to]++; out[e.from].push(e); }\n const q = [];\n for (let i = 0; i < sf.nodes.length; i++) if (indeg[i] === 0) q.push(i);\n while (q.length) {\n const u = q.shift();\n const node = sf.nodes[u];\n const cat = self.kinds[self.kindByName.get(node.kind)];\n let val;\n if (!tmpVals.has(u) && typeof cat?.execute === 'function') {\n const localIns = {};\n for (const e of sf.edges) {\n if (e.to === u && tmpVals.has(e.from)) {\n const srcVal = tmpVals.get(e.from);\n const v = (srcVal && typeof srcVal === 'object') ? (srcVal.value ?? srcVal[e.fp] ?? srcVal) : srcVal;\n localIns[`in${e.tp}`] = v;\n localIns[e.tp] = v;\n }\n }\n val = await cat.execute({ ...ctx, params: node.params || {} }, localIns);\n tmpVals.set(u, val);\n } else val = tmpVals.get(u);\n for (const e of out[u]) if (--indeg[e.to] === 0) q.push(e.to);\n }\n // Aggregated output keyed by BOTH index and label.\n const result = {};\n for (let i = 0; i < sf.outputs.length; i++) {\n const v = tmpVals.get(sf.outputs[i]);\n const unwrapped = (v && typeof v === 'object' && 'value' in v) ? v.value : v;\n result[i] = unwrapped;\n result[sf.outputLabels[i]] = unwrapped;\n }\n return result;\n },\n });\n return kindName;\n }\n runFrame(frameId) {\n const f = this.frames.find((ff) => ff.id === frameId);\n if (!f) return Promise.resolve({ executed: 0, errors: [] });\n const inside = new Set();\n const n = this.w.nodeCount_();\n for (let i = 0; i < n; i++) {\n if (this.V.posX[i] >= f.x && this.V.posX[i] <= f.x + f.w &&\n this.V.posY[i] >= f.y && this.V.posY[i] <= f.y + f.h) inside.add(i);\n }\n return this.run({ filter: (id) => inside.has(id) });\n }\n stop() { if (this._runAbort) this._runAbort.abort(); this._running = false; }\n isRunning() { return this._running; }\n\n /** Set per-node runtime parameters (used by built-in kinds: const, if). */\n setNodeParams(nodeId, params) {\n if (!this._nodeParams) this._nodeParams = new Map();\n this._nodeParams.set(nodeId, params);\n }\n getNodeParams(nodeId) { return this._nodeParams?.get(nodeId); }\n\n /** Long-running loop: re-run every `interval` ms until stopped. */\n startLoop(interval = 500) {\n this._loopStop = false;\n const tick = async () => {\n if (this._loopStop) return;\n await this.run();\n if (this._loopStop) return;\n setTimeout(tick, interval);\n };\n tick();\n }\n stopLoop() { this._loopStop = true; this.stop(); }\n\n // ── Locks + read-only ────────────────────────────────────────────────\n lockNode(id, on = true) { if (on) this.locked.add(id); else this.locked.delete(id); }\n isLocked(id) { return this.locked.has(id); }\n setReadOnly(on) { this.readOnly = !!on; }\n\n // ── Reachable highlight ──────────────────────────────────────────────\n setReachableFrom(nodeId) {\n if (nodeId === null || nodeId === undefined || nodeId < 0) { this._reachableSet = null; return; }\n const reach = new Set([nodeId]);\n const q = [nodeId];\n const m = this.w.edgeCount_();\n while (q.length) {\n const u = q.shift();\n for (let i = 0; i < m; i++) {\n if (this.V.edgeFromN[i] === u && !reach.has(this.V.edgeToN[i])) {\n reach.add(this.V.edgeToN[i]); q.push(this.V.edgeToN[i]);\n }\n }\n }\n this._reachableSet = reach;\n }\n clearReachable() { this._reachableSet = null; }\n\n // ── Remote cursor presence (collaboration UI primitive) ───────────────\n setRemoteCursor(userId, x, y, name = userId, color = '#5be0d0') {\n if (x === null) { this.remoteCursors.delete(userId); return; }\n this.remoteCursors.set(userId, { x, y, name, color, t: performance.now() });\n }\n clearRemoteCursors() { this.remoteCursors.clear(); }\n\n // ── Edge waypoints ───────────────────────────────────────────────────\n setEdgeWaypoints(edgeIdx, points) {\n if (!points || !points.length) this._edgeWaypoints.delete(edgeIdx);\n else this._edgeWaypoints.set(edgeIdx, points.map((p) => ({ x: p.x, y: p.y })));\n }\n clearEdgeWaypoints(edgeIdx) { this._edgeWaypoints.delete(edgeIdx); }\n\n // ── Frame collapse ───────────────────────────────────────────────────\n toggleFrameCollapse(frameIdx) {\n if (this.frameCollapsed.has(frameIdx)) this.frameCollapsed.delete(frameIdx);\n else this.frameCollapsed.add(frameIdx);\n this._emit('change');\n }\n isFrameCollapsed(idx) { return this.frameCollapsed.has(idx); }\n _nodeHiddenByCollapse(nodeId) {\n if (!this.frameCollapsed.size) return false;\n for (const fidx of this.frameCollapsed) {\n const f = this.frames[fidx]; if (!f) continue;\n if (this.V.posX[nodeId] >= f.x && this.V.posX[nodeId] <= f.x + f.w &&\n this.V.posY[nodeId] >= f.y + 26 && this.V.posY[nodeId] <= f.y + f.h) return true;\n }\n return false;\n }\n\n // ── Palette: any DOM element can drag-drop into the canvas ───────────\n makeDraggable(el, spec) {\n if (!el || !spec || !spec.kind) throw new Error('makeDraggable: spec.kind required');\n el.style.cursor = 'grab';\n el.addEventListener('mousedown', (ev) => {\n ev.preventDefault();\n if (this.readOnly) return;\n const ghost = el.cloneNode(true);\n Object.assign(ghost.style, { position: 'fixed', pointerEvents: 'none', opacity: '0.75', zIndex: '900', transform: 'translate(-50%,-50%) scale(1.02)' });\n document.body.appendChild(ghost);\n const move = (e) => { ghost.style.left = e.clientX + 'px'; ghost.style.top = e.clientY + 'px'; };\n move(ev);\n const up = (e) => {\n window.removeEventListener('mousemove', move);\n window.removeEventListener('mouseup', up);\n ghost.remove();\n const r = this.canvas.getBoundingClientRect();\n if (e.clientX < r.left || e.clientX > r.right || e.clientY < r.top || e.clientY > r.bottom) return;\n const wp = this._s2w(e.clientX, e.clientY);\n const nodeSpec = { ...spec, x: wp.x, y: wp.y };\n delete nodeSpec.element;\n const id = this.addNode(nodeSpec);\n this._emit('palette:drop', { id, x: wp.x, y: wp.y, spec });\n };\n window.addEventListener('mousemove', move);\n window.addEventListener('mouseup', up);\n });\n }\n\n // ── Theme ─────────────────────────────────────────────────────────────\n setTheme(name) {\n this._theme = name === 'light' ? LIGHT_THEME : DARK_THEME;\n this.options.theme = name;\n this.options.background = this._theme.bg;\n this.canvas.style.background = this._theme.bg;\n this._emit('theme', name);\n }\n toggleTheme() { this.setTheme(this.options.theme === 'light' ? 'dark' : 'light'); }\n\n // ── Live metrics (sparkline) ──────────────────────────────────────────\n pushNodeMetric(id, value) {\n let buf = this.metrics.get(id);\n if (!buf) {\n buf = { data: new Float32Array(this._metricCap), idx: 0, count: 0 };\n this.metrics.set(id, buf);\n }\n buf.data[buf.idx] = value;\n buf.idx = (buf.idx + 1) % this._metricCap;\n if (buf.count < this._metricCap) buf.count++;\n const prev = this.metricMax.get(id) || 1;\n this.metricMax.set(id, Math.max(prev * 0.99, Math.abs(value), 1));\n }\n clearNodeMetric(id) { this.metrics.delete(id); this.metricMax.delete(id); }\n\n // ── Edge animation ────────────────────────────────────────────────────\n setEdgeAnimated(edgeIdx, on) {\n if (on) this.animatedEdges.add(edgeIdx); else this.animatedEdges.delete(edgeIdx);\n }\n setAllEdgesAnimated(on) {\n if (!on) { this.animatedEdges.clear(); return; }\n const m = this.w.edgeCount_();\n for (let i = 0; i < m; i++) this.animatedEdges.add(i);\n }\n\n // ── Connection validation ─────────────────────────────────────────────\n setConnectionValidator(fn) { this._connValidator = typeof fn === 'function' ? fn : null; }\n\n // ── Templates ─────────────────────────────────────────────────────────\n registerTemplate(name, builder) { this._templates.set(name, builder); }\n insertTemplate(name, x = 0, y = 0) {\n const b = this._templates.get(name);\n if (!b) return -1;\n return b(this, x, y);\n }\n listTemplates() { return [...this._templates.keys()]; }\n\n // ── Search ────────────────────────────────────────────────────────────\n search(query) {\n this._searchQuery = (query || '').toLowerCase();\n this._searchHits = [];\n if (!this._searchQuery) return [];\n const n = this.w.nodeCount_();\n for (let i = 0; i < n; i++) {\n const title = (this.titles.get(i) || '').toLowerCase();\n const desc = (this.descriptions.get(i) || '').toLowerCase();\n const kind = this.kinds[this.V.kind[i]].name.toLowerCase();\n const tagStr = (this.tags.get(i) || []).join(' ').toLowerCase();\n if (title.includes(this._searchQuery) || desc.includes(this._searchQuery) ||\n kind.includes(this._searchQuery) || tagStr.includes(this._searchQuery)) {\n this._searchHits.push(i);\n }\n }\n return this._searchHits.slice();\n }\n jumpToSearchHit(idx) {\n if (!this._searchHits.length) return;\n const i = this._searchHits[((idx % this._searchHits.length) + this._searchHits.length) % this._searchHits.length];\n this.clearSelection();\n this.w.setSelected(i, 1);\n this.panTo(this.V.posX[i], this.V.posY[i]);\n }\n clearSearch() { this._searchQuery = ''; this._searchHits = []; }\n\n // ── Command palette ───────────────────────────────────────────────────\n openCommandPalette() {\n if (this._cmdPaletteEl) { this._cmdPaletteEl.remove(); this._cmdPaletteEl = null; return; }\n const cmds = this._builtinCommands();\n const el = document.createElement('div');\n el.style.cssText = `position:absolute;top:80px;left:50%;transform:translateX(-50%);width:480px;max-height:60vh;overflow:hidden;background:${this._theme.panel};border:1px solid ${this._theme.border};border-radius:10px;box-shadow:0 16px 48px rgba(0,0,0,0.6);z-index:500;color:${this._theme.fg};font-family:Inter, ui-sans-serif;`;\n el.innerHTML = `\n <input id=\"zf-cmd-q\" type=\"text\" placeholder=\"Type a command…\" style=\"width:100%;padding:14px 16px;background:transparent;color:${this._theme.fg};border:0;border-bottom:1px solid ${this._theme.border};outline:none;font-size:14px;\">\n <div id=\"zf-cmd-list\" style=\"max-height:46vh;overflow:auto;\"></div>`;\n this.container.appendChild(el);\n this._cmdPaletteEl = el;\n const input = el.querySelector('#zf-cmd-q'), list = el.querySelector('#zf-cmd-list');\n let cursor = 0, filtered = cmds;\n const render = () => {\n list.innerHTML = filtered.map((c, i) => `\n <div data-i=\"${i}\" style=\"padding:9px 16px;cursor:pointer;display:flex;justify-content:space-between;align-items:center;background:${i === cursor ? this._theme.hi : 'transparent'};\">\n <span>${escapeHtml(c.label)}</span>\n <span style=\"color:${this._theme.muted};font-family:ui-monospace,Consolas,monospace;font-size:11px;\">${c.hotkey || ''}</span>\n </div>`).join('');\n };\n render();\n const run = (i) => { const cmd = filtered[i]; if (cmd) cmd.run(); this.openCommandPalette(); };\n list.addEventListener('mousedown', (e) => {\n const row = e.target.closest('[data-i]'); if (!row) return;\n run(parseInt(row.dataset.i, 10));\n });\n input.addEventListener('input', () => {\n const q = input.value.toLowerCase();\n filtered = q ? cmds.filter((c) => c.label.toLowerCase().includes(q)) : cmds;\n cursor = 0; render();\n });\n input.addEventListener('keydown', (e) => {\n if (e.code === 'ArrowDown') { cursor = Math.min(filtered.length - 1, cursor + 1); render(); e.preventDefault(); }\n if (e.code === 'ArrowUp') { cursor = Math.max(0, cursor - 1); render(); e.preventDefault(); }\n if (e.code === 'Enter') { run(cursor); }\n if (e.code === 'Escape') { this.openCommandPalette(); }\n });\n input.focus();\n }\n _builtinCommands() {\n return [\n { label: 'Auto layout (Sugiyama)', hotkey: 'L', run: () => this.runAutoLayout() },\n { label: 'Force layout', hotkey: 'F', run: () => this.runForceLayout() },\n { label: 'Fit view', hotkey: '0', run: () => this.fitView() },\n { label: 'Toggle theme (light/dark)', hotkey: 'Ctrl+T', run: () => this.toggleTheme() },\n { label: 'Toggle minimap', hotkey: 'Ctrl+M', run: () => this.setMinimap(!this.options.minimap) },\n { label: 'Toggle edge animation', hotkey: 'Ctrl+E', run: () => this.setAllEdgesAnimated(this.animatedEdges.size === 0) },\n { label: 'Toggle edge style', hotkey: '', run: () => this.setEdgeStyle(this.options.edgeStyle === 'bezier' ? 'orthogonal' : 'bezier') },\n { label: 'Toggle snap-to-grid', hotkey: 'G', run: () => this.setSnapToGrid(!this.options.snapToGrid) },\n { label: 'Toggle path highlight', hotkey: '', run: () => this.setPathHighlight(!this._pathHighlightEnabled) },\n { label: 'Toggle hover preview', hotkey: '', run: () => this.setHoverPreview(!this.options.hoverPreview) },\n { label: 'Find…', hotkey: 'Ctrl+F', run: () => this.openSearch() },\n { label: 'Highlight critical path', hotkey: '', run: () => { const e = this.criticalPath(); for (const i of e) this.w.setEdgeSelected_(i, 1); } },\n { label: 'Find SCCs (cycle groups)', hotkey: '', run: () => { const sccs = this.findSCCs(); for (const g of sccs) for (const n of g) this.w.setSelected(n, 1); } },\n { label: 'Color nodes by degree', hotkey: '', run: () => this.colorByDegree() },\n { label: 'Clear node colors', hotkey: '', run: () => this.clearNodeColors() },\n { label: 'Group selection', hotkey: 'Ctrl+G', run: () => this.groupSelection() },\n { label: 'Add sticky note', hotkey: '', run: () => this.addNote(-this.cam.x, -this.cam.y) },\n { label: 'Select all', hotkey: 'Ctrl+A', run: () => this.selectAll() },\n { label: 'Duplicate selection', hotkey: 'Ctrl+D', run: () => this.duplicateSelection() },\n { label: 'Delete selection', hotkey: 'Del', run: () => this.deleteSelection() },\n { label: 'Export PNG', hotkey: '', run: async () => { const b = await this.exportPNG(); window.open(URL.createObjectURL(b)); } },\n { label: 'Export SVG', hotkey: '', run: () => { const blob = new Blob([this.exportSVG()], { type: 'image/svg+xml' }); window.open(URL.createObjectURL(blob)); } },\n { label: 'Export JSON', hotkey: '', run: () => { const blob = new Blob([JSON.stringify(this.toJSON(), null, 2)], { type: 'application/json' }); window.open(URL.createObjectURL(blob)); } },\n { label: 'Undo', hotkey: 'Ctrl+Z', run: () => this.undo() },\n { label: 'Redo', hotkey: 'Ctrl+Y', run: () => this.redo() },\n { label: 'Run graph', hotkey: 'F5', run: () => this.run() },\n { label: 'Stop run', hotkey: 'Shift+F5', run: () => this.stop() },\n { label: 'Clear runtime state', hotkey: '', run: () => this.clearRuntimeState() },\n ...[...this._templates.keys()].map((name) => ({\n label: `Insert template: ${name}`, hotkey: '',\n run: () => this.insertTemplate(name, -this.cam.x, -this.cam.y),\n })),\n ...((this._extraCommands || []).map((c) => ({ label: c.label, hotkey: c.hotkey || '', run: c.run }))),\n ];\n }\n\n // ── Search UI ─────────────────────────────────────────────────────────\n openSearch() {\n if (this._searchEl) { this._searchEl.remove(); this._searchEl = null; this.clearSearch(); return; }\n const el = document.createElement('div');\n el.style.cssText = `position:absolute;top:14px;left:50%;transform:translateX(-50%);background:${this._theme.panel};color:${this._theme.fg};border:1px solid ${this._theme.border};border-radius:8px;padding:6px 10px;display:flex;align-items:center;gap:8px;z-index:500;font-family:Inter, ui-sans-serif;box-shadow:0 8px 24px rgba(0,0,0,0.4);`;\n el.innerHTML = `<svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"${this._theme.muted}\" stroke-width=\"2\"><circle cx=\"11\" cy=\"11\" r=\"7\"/><line x1=\"21\" y1=\"21\" x2=\"16.65\" y2=\"16.65\"/></svg>\n <input id=\"zf-s\" type=\"text\" placeholder=\"Find nodes…\" style=\"background:transparent;border:0;outline:none;color:${this._theme.fg};font-size:13px;width:240px;\">\n <span id=\"zf-sn\" style=\"color:${this._theme.muted};font-size:11px;font-family:ui-monospace,Consolas,monospace;\"></span>`;\n this.container.appendChild(el);\n this._searchEl = el;\n const input = el.querySelector('#zf-s'), counter = el.querySelector('#zf-sn');\n let idx = 0;\n const onChange = () => {\n const hits = this.search(input.value);\n counter.textContent = hits.length ? `${idx + 1}/${hits.length}` : (input.value ? '0' : '');\n if (hits.length) this.jumpToSearchHit(idx);\n };\n input.addEventListener('input', () => { idx = 0; onChange(); });\n input.addEventListener('keydown', (e) => {\n if (e.code === 'Enter') { idx = (idx + (e.shiftKey ? -1 : 1) + this._searchHits.length) % Math.max(this._searchHits.length, 1); onChange(); e.preventDefault(); }\n if (e.code === 'Escape') { this.openSearch(); }\n });\n input.focus();\n }\n\n // ── Minimap ───────────────────────────────────────────────────────────\n setMinimap(on) {\n this.options.minimap = !!on;\n if (on) this._setupMinimap();\n else if (this._minimapEl) { this._minimapEl.remove(); this._minimapEl = null; this._minimapCtx = null; }\n }\n _setupMinimap() {\n if (this._minimapEl) return;\n const el = document.createElement('canvas');\n el.width = 200 * (window.devicePixelRatio || 1);\n el.height = 140 * (window.devicePixelRatio || 1);\n el.style.cssText = `position:absolute;right:14px;bottom:14px;width:200px;height:140px;background:${this._theme.panel};border:1px solid ${this._theme.border};border-radius:8px;cursor:pointer;z-index:50;box-shadow:0 4px 16px rgba(0,0,0,0.4);`;\n this.container.appendChild(el);\n el.addEventListener('mousedown', (e) => {\n const r = el.getBoundingClientRect();\n const px = (e.clientX - r.left) / r.width, py = (e.clientY - r.top) / r.height;\n const bb = this._graphBounds(); if (!bb) return;\n this.cam.x = -(bb.minX + px * (bb.maxX - bb.minX));\n this.cam.y = -(bb.minY + py * (bb.maxY - bb.minY));\n });\n this._minimapEl = el;\n this._minimapCtx = el.getContext('2d', { alpha: false });\n }\n _graphBounds() {\n const n = this.w.nodeCount_(); if (n === 0) return null;\n let mnx = Infinity, mxx = -Infinity, mny = Infinity, mxy = -Infinity;\n for (let i = 0; i < n; i++) {\n const hw = this.V.sizeW[i] * 0.5, hh = this.V.sizeH[i] * 0.5;\n if (this.V.posX[i] - hw < mnx) mnx = this.V.posX[i] - hw;\n if (this.V.posX[i] + hw > mxx) mxx = this.V.posX[i] + hw;\n if (this.V.posY[i] - hh < mny) mny = this.V.posY[i] - hh;\n if (this.V.posY[i] + hh > mxy) mxy = this.V.posY[i] + hh;\n }\n const padX = (mxx - mnx) * 0.1 + 40, padY = (mxy - mny) * 0.1 + 40;\n return { minX: mnx - padX, maxX: mxx + padX, minY: mny - padY, maxY: mxy + padY };\n }\n _drawValueBubbles() {\n if (!this._valueBubbles.length) return;\n const now = performance.now();\n const ctx = this.ctx;\n for (let i = this._valueBubbles.length - 1; i >= 0; i--) {\n const b = this._valueBubbles[i];\n const t = (now - b.t0) / b.dur;\n if (t >= 1) { this._valueBubbles.splice(i, 1); continue; }\n const alpha = t < 0.15 ? t / 0.15 : t > 0.7 ? (1 - t) / 0.3 : 1;\n const rise = t * 30;\n const id = b.nodeId;\n if (id >= this.w.nodeCount_()) continue;\n const cx = this.V.posX[id], cy = this.V.posY[id];\n const hh = this.V.sizeH[id] * 0.5;\n const sp = this._w2s(cx, cy - hh);\n ctx.save();\n ctx.globalAlpha = alpha;\n ctx.font = `600 12px ui-monospace, Consolas, monospace`;\n const tw = ctx.measureText(b.text).width;\n const padX = 8, padY = 5;\n const bw = tw + padX * 2, bh = 22;\n const bx = sp.x - bw / 2, by = sp.y - bh - 10 - rise;\n ctx.shadowColor = 'rgba(0,0,0,0.5)';\n ctx.shadowBlur = 8;\n ctx.fillStyle = '#161b27';\n this._roundRect(bx, by, bw, bh, 5); ctx.fill();\n ctx.shadowBlur = 0;\n ctx.strokeStyle = '#5b8def'; ctx.lineWidth = 1.4;\n this._roundRect(bx, by, bw, bh, 5); ctx.stroke();\n ctx.fillStyle = '#5be0d0';\n ctx.textBaseline = 'middle'; ctx.textAlign = 'center';\n ctx.fillText(b.text, sp.x, by + bh / 2);\n // Tail.\n ctx.fillStyle = '#161b27';\n ctx.strokeStyle = '#5b8def';\n ctx.beginPath();\n ctx.moveTo(sp.x - 5, by + bh);\n ctx.lineTo(sp.x + 5, by + bh);\n ctx.lineTo(sp.x, by + bh + 6);\n ctx.closePath(); ctx.fill(); ctx.stroke();\n ctx.restore();\n }\n }\n\n _drawWaypoints() {\n for (const [edgeIdx, list] of this._edgeWaypoints) {\n void edgeIdx;\n for (const p of list) {\n const sp = this._w2s(p.x, p.y);\n this.ctx.fillStyle = '#f0b93a';\n this.ctx.beginPath(); this.ctx.arc(sp.x, sp.y, 5, 0, Math.PI * 2); this.ctx.fill();\n this.ctx.strokeStyle = '#0b0f17'; this.ctx.lineWidth = 1.2; this.ctx.stroke();\n }\n }\n }\n\n _hitWaypoint(qx, qy) {\n const tol = 8 / this.cam.zoom;\n for (const [edgeIdx, list] of this._edgeWaypoints) {\n for (let i = 0; i < list.length; i++) {\n if (Math.hypot(list[i].x - qx, list[i].y - qy) < tol) return { edgeIdx, wpIdx: i };\n }\n }\n return null;\n }\n\n _drawRemoteCursors() {\n if (!this.remoteCursors.size) return;\n const now = performance.now();\n for (const [id, c] of this.remoteCursors) {\n if (now - c.t > 30000) { this.remoteCursors.delete(id); continue; }\n const sp = this._w2s(c.x, c.y);\n const ctx = this.ctx;\n ctx.save();\n // Arrow.\n ctx.fillStyle = c.color;\n ctx.beginPath();\n ctx.moveTo(sp.x, sp.y);\n ctx.lineTo(sp.x + 12, sp.y + 4);\n ctx.lineTo(sp.x + 5, sp.y + 6);\n ctx.lineTo(sp.x + 4, sp.y + 13);\n ctx.closePath(); ctx.fill();\n // Name tag.\n ctx.font = '600 11px Inter, ui-sans-serif';\n const tw = ctx.measureText(c.name).width;\n ctx.fillStyle = c.color;\n this._roundRect(sp.x + 12, sp.y + 12, tw + 12, 16, 4); ctx.fill();\n ctx.fillStyle = '#0b0f17';\n ctx.textBaseline = 'middle';\n ctx.fillText(c.name, sp.x + 18, sp.y + 20);\n ctx.restore();\n }\n }\n\n _getImage(url) {\n let entry = this._imageCache.get(url);\n if (!entry) {\n entry = { img: new Image(), ready: false };\n entry.img.crossOrigin = 'anonymous';\n entry.img.onload = () => { entry.ready = true; };\n entry.img.onerror = () => { entry.ready = false; };\n entry.img.src = url;\n this._imageCache.set(url, entry);\n }\n return entry;\n }\n\n _drawMinimap() {\n if (!this._minimapEl || !this._minimapCtx) return;\n const m = this._minimapCtx;\n const W = this._minimapEl.width, H = this._minimapEl.height;\n m.fillStyle = this._theme.panel;\n m.fillRect(0, 0, W, H);\n const bb = this._graphBounds();\n if (!bb) return;\n const sx = W / (bb.maxX - bb.minX), sy = H / (bb.maxY - bb.minY);\n const s = Math.min(sx, sy);\n const ox = (W - s * (bb.maxX - bb.minX)) * 0.5;\n const oy = (H - s * (bb.maxY - bb.minY)) * 0.5;\n const n = this.w.nodeCount_();\n for (let i = 0; i < n; i++) {\n const cat = this.kinds[this.V.kind[i]];\n const hw = this.V.sizeW[i] * 0.5 * s, hh = this.V.sizeH[i] * 0.5 * s;\n const x = ox + (this.V.posX[i] - bb.minX) * s, y = oy + (this.V.posY[i] - bb.minY) * s;\n m.fillStyle = this.colors.get(i) || cat.color;\n m.fillRect(x - hw, y - hh, Math.max(2, hw * 2), Math.max(2, hh * 2));\n }\n // Viewport rect.\n const dpr = window.devicePixelRatio || 1;\n const cw = this.canvas.width / dpr / this.cam.zoom;\n const ch = this.canvas.height / dpr / this.cam.zoom;\n const vx = ox + (-this.cam.x - cw * 0.5 - bb.minX) * s;\n const vy = oy + (-this.cam.y - ch * 0.5 - bb.minY) * s;\n m.strokeStyle = this._theme.accent;\n m.lineWidth = 2;\n m.strokeRect(vx, vy, cw * s, ch * s);\n }\n // Path-highlight on hover (Obsidian-style fade).\n setPathHighlight(on) { this._pathHighlightEnabled = !!on; if (!on) this._focusedSet = null; }\n\n // ── Plugin API ────────────────────────────────────────────────────────\n registerKind(spec) {\n const idx = this.kinds.length;\n const cat = {\n name: spec.name ?? `custom${idx}`,\n color: spec.color ?? '#94a3b8',\n badge: spec.badge ?? 'C',\n w: spec.w ?? 140,\n h: spec.h ?? 60,\n nin: spec.nin ?? 1,\n nout: spec.nout ?? 1,\n shape: spec.shape ?? 'rect',\n html: spec.html === true,\n template: spec.template || null,\n execute: typeof spec.execute === 'function' ? spec.execute : null,\n portIn: Array.isArray(spec.portIn) ? spec.portIn.slice() : null,\n portOut: Array.isArray(spec.portOut) ? spec.portOut.slice() : null,\n // Schema declarations — each entry: { name, type, required?, default? }\n // Type is a string used by isCompatibleType(). Special: 'any' matches everything.\n inputs: Array.isArray(spec.inputs) ? spec.inputs.slice() : null,\n outputs: Array.isArray(spec.outputs) ? spec.outputs.slice() : null,\n retry: spec.retry || null,\n };\n this.kinds.push(cat);\n this.kindByName.set(cat.name, idx);\n this._runOrder = null;\n return idx;\n }\n\n // ── Sticky notes ──────────────────────────────────────────────────────\n addNote(x, y, text = '', opts = {}) {\n const palette = [\n { fill: 'rgba(254,249,195,0.94)', text: '#5b3d12', border: '#caa54a' },\n { fill: 'rgba(252,231,243,0.94)', text: '#831843', border: '#db5895' },\n { fill: 'rgba(220,252,231,0.94)', text: '#14532d', border: '#5cad75' },\n { fill: 'rgba(219,234,254,0.94)', text: '#1e3a8a', border: '#5b8def' },\n ];\n const color = opts.color || palette[this.notes.length % palette.length];\n const note = { id: ++this._noteSeq, x, y, w: opts.w || 220, h: opts.h || 130, text, color };\n this.notes.push(note);\n this._emit('change');\n return note.id;\n }\n deleteNote(id) { this.notes = this.notes.filter((n) => n.id !== id); this._emit('change'); }\n\n // ── Frames (groups) ───────────────────────────────────────────────────\n addFrame(x, y, w, h, label = 'Group', color = '#5b8def') {\n const f = { id: ++this._frameSeq, x, y, w, h, label, color };\n this.frames.push(f);\n this._emit('change');\n return f.id;\n }\n groupSelection(label) {\n const sel = this.getSelection();\n if (sel.length === 0) return -1;\n let mnx = Infinity, mxx = -Infinity, mny = Infinity, mxy = -Infinity;\n for (const i of sel) {\n const hw = this.V.sizeW[i] * 0.5, hh = this.V.sizeH[i] * 0.5;\n if (this.V.posX[i] - hw < mnx) mnx = this.V.posX[i] - hw;\n if (this.V.posX[i] + hw > mxx) mxx = this.V.posX[i] + hw;\n if (this.V.posY[i] - hh < mny) mny = this.V.posY[i] - hh;\n if (this.V.posY[i] + hh > mxy) mxy = this.V.posY[i] + hh;\n }\n const pad = 30;\n return this.addFrame(mnx - pad, mny - pad - 26, mxx - mnx + pad * 2, mxy - mny + pad * 2 + 26, label || `Group ${this.frames.length + 1}`);\n }\n deleteFrame(id) { this.frames = this.frames.filter((f) => f.id !== id); this._emit('change'); }\n\n // Subflow drill-in: focus on a frame.\n enterSubflow(fid) {\n const idx = this.frames.findIndex((f) => f.id === fid);\n if (idx === -1) return;\n this._focusFrame = idx;\n const f = this.frames[idx];\n this.cam.x = -(f.x + f.w / 2); this.cam.y = -(f.y + f.h / 2);\n this.cam.zoom = Math.min(this.canvas.width / (f.w + 80), this.canvas.height / (f.h + 80)) * 0.9;\n this._emit('subflow', f.id);\n }\n exitSubflow() {\n if (this._focusFrame === -1) return;\n this._focusFrame = -1;\n this.fitView();\n this._emit('subflow', null);\n }\n _isInsideFocusFrame(nodeId) {\n if (this._focusFrame === -1) return true;\n const f = this.frames[this._focusFrame];\n return this.V.posX[nodeId] >= f.x && this.V.posX[nodeId] <= f.x + f.w &&\n this.V.posY[nodeId] >= f.y && this.V.posY[nodeId] <= f.y + f.h;\n }\n\n _resolveKind(k) {\n if (typeof k === 'number') return k;\n const idx = this.kindByName.get(k);\n if (idx === undefined) throw new Error(`zflow: unknown kind \"${k}\"`);\n return idx;\n }\n\n // ── Layout / view ─────────────────────────────────────────────────────\n runAutoLayout() {\n const layers = this.w.autoLayout();\n this.w.snapshot();\n this._emit('change');\n return layers;\n }\n runForceLayout(maxFrames = 220) {\n if (this._forceRaf) cancelAnimationFrame(this._forceRaf);\n this.w.forceLayoutReset();\n let i = 0;\n const tick = () => {\n this.w.forceLayoutTick(0.05);\n i++;\n if (i < maxFrames) this._forceRaf = requestAnimationFrame(tick);\n else { this._forceRaf = null; this.w.snapshot(); this._emit('change'); }\n };\n this._forceRaf = requestAnimationFrame(tick);\n }\n fitView(padding = 80) {\n const n = this.w.nodeCount_();\n if (n === 0) return;\n let mnx = Infinity, mxx = -Infinity, mny = Infinity, mxy = -Infinity;\n for (let i = 0; i < n; i++) {\n const hw = this.V.sizeW[i] * 0.5, hh = this.V.sizeH[i] * 0.5;\n if (this.V.posX[i] - hw < mnx) mnx = this.V.posX[i] - hw;\n if (this.V.posX[i] + hw > mxx) mxx = this.V.posX[i] + hw;\n if (this.V.posY[i] - hh < mny) mny = this.V.posY[i] - hh;\n if (this.V.posY[i] + hh > mxy) mxy = this.V.posY[i] + hh;\n }\n const bw = mxx - mnx + padding * 2, bh = mxy - mny + padding * 2;\n this.cam.x = -(mnx + (mxx - mnx) / 2);\n this.cam.y = -(mny + (mxy - mny) / 2);\n this.cam.zoom = Math.min(this.canvas.width / bw, this.canvas.height / bh) * 0.85;\n }\n zoomTo(zoom) { this.cam.zoom = Math.max(0.2, Math.min(3.0, zoom)); }\n panTo(x, y) { this.cam.x = -x; this.cam.y = -y; }\n\n // ── History ───────────────────────────────────────────────────────────\n undo() { if (this.w.undo()) this._emit('change'); }\n redo() { if (this.w.redo()) this._emit('change'); }\n snapshot() { this.w.snapshot(); }\n\n // ── Algorithms ────────────────────────────────────────────────────────\n /** Longest path in the DAG via topo-sort + DP. Returns [edgeIds] or []. */\n criticalPath() {\n const n = this.w.nodeCount_(), m = this.w.edgeCount_();\n if (n === 0) return [];\n const inDeg = new Uint32Array(n);\n for (let i = 0; i < m; i++) inDeg[this.V.edgeToN[i]]++;\n const queue = [];\n for (let i = 0; i < n; i++) if (inDeg[i] === 0) queue.push(i);\n const dist = new Int32Array(n);\n const predEdge = new Int32Array(n); predEdge.fill(-1);\n const adj = this._buildAdj();\n let head = 0;\n while (head < queue.length) {\n const u = queue[head++];\n for (const e of (adj.get(u) || [])) {\n if (dist[u] + 1 > dist[e.to]) { dist[e.to] = dist[u] + 1; predEdge[e.to] = e.edge; }\n inDeg[e.to]--;\n if (inDeg[e.to] === 0) queue.push(e.to);\n }\n }\n let best = 0;\n for (let i = 1; i < n; i++) if (dist[i] > dist[best]) best = i;\n if (dist[best] === 0) return [];\n const path = [];\n let cur = best;\n while (predEdge[cur] !== -1) { path.push(predEdge[cur]); cur = this.V.edgeFromN[predEdge[cur]]; }\n return path;\n }\n\n /** Tarjan's SCC. Returns array of arrays (each non-trivial SCC's node ids). */\n findSCCs() {\n const n = this.w.nodeCount_();\n const adj = this._buildAdj();\n const index = new Int32Array(n).fill(-1);\n const lowlink = new Int32Array(n);\n const onStack = new Uint8Array(n);\n const stack = [];\n const sccs = [];\n let counter = 0;\n for (let start = 0; start < n; start++) {\n if (index[start] !== -1) continue;\n const work = [{ v: start, child: 0 }];\n index[start] = counter; lowlink[start] = counter++;\n stack.push(start); onStack[start] = 1;\n while (work.length) {\n const top = work[work.length - 1];\n const out = adj.get(top.v) || [];\n if (top.child < out.length) {\n const wto = out[top.child++].to;\n if (index[wto] === -1) {\n index[wto] = counter; lowlink[wto] = counter++;\n stack.push(wto); onStack[wto] = 1;\n work.push({ v: wto, child: 0 });\n } else if (onStack[wto]) {\n if (index[wto] < lowlink[top.v]) lowlink[top.v] = index[wto];\n }\n } else {\n if (lowlink[top.v] === index[top.v]) {\n const scc = [];\n while (stack.length) {\n const x = stack.pop(); onStack[x] = 0; scc.push(x);\n if (x === top.v) break;\n }\n if (scc.length >= 2) sccs.push(scc);\n }\n const finished = top.v;\n work.pop();\n if (work.length && lowlink[finished] < lowlink[work[work.length - 1].v]) {\n lowlink[work[work.length - 1].v] = lowlink[finished];\n }\n }\n }\n }\n return sccs;\n }\n\n /** Heatmap: color every node by its in+out degree. Pass null to clear. */\n colorByDegree() {\n const n = this.w.nodeCount_(), m = this.w.edgeCount_();\n const deg = new Uint16Array(n);\n for (let i = 0; i < m; i++) { deg[this.V.edgeFromN[i]]++; deg[this.V.edgeToN[i]]++; }\n let max = 1;\n for (let i = 0; i < n; i++) if (deg[i] > max) max = deg[i];\n const ramp = ['#3b5fc4', '#5b8def', '#5be0d0', '#5bd17a', '#f0b93a', '#fb923c', '#e8462b'];\n const lerp = (t) => {\n if (t <= 0) return ramp[0]; if (t >= 1) return ramp[ramp.length - 1];\n const idx = t * (ramp.length - 1), i0 = Math.floor(idx), i1 = Math.min(ramp.length - 1, i0 + 1);\n const f = idx - i0; const a = parseHex(ramp[i0]), b = parseHex(ramp[i1]);\n return `rgb(${Math.round(a[0]*(1-f)+b[0]*f)},${Math.round(a[1]*(1-f)+b[1]*f)},${Math.round(a[2]*(1-f)+b[2]*f)})`;\n };\n for (let i = 0; i < n; i++) this.colors.set(i, lerp(deg[i] / max));\n this._emit('change');\n }\n clearNodeColors() {\n this.colors.clear();\n this._emit('change');\n }\n\n // ── Imports (Mermaid + DOT) ───────────────────────────────────────────\n importMermaid(text) {\n const parsed = parseMermaid(text);\n if (!parsed || parsed.nodes.size === 0) return 0;\n const shapeMap = { rect: 'process', rhombus: 'decision', circle: 'branch', round: 'process', subroutine: 'aggregator', default: 'process' };\n const idMap = new Map();\n let drop = 0;\n for (const [mid, def] of parsed.nodes) {\n const id = this.addNode({\n kind: shapeMap[def.shape] || 'process',\n x: (drop % 8) * 200 - 700, y: Math.floor(drop / 8) * 110,\n title: def.label,\n });\n if (id < 0) break;\n idMap.set(mid, id); drop++;\n }\n for (const e of parsed.edges) {\n const a = idMap.get(e.from), b = idMap.get(e.to);\n if (a === undefined || b === undefined) continue;\n this.addEdge({ from: a, to: b, label: e.label });\n }\n this.runAutoLayout();\n this.fitView();\n return parsed.nodes.size;\n }\n importDot(text) {\n const parsed = parseDot(text);\n if (!parsed || parsed.nodes.size === 0) return 0;\n const idMap = new Map();\n let drop = 0;\n for (const [mid, def] of parsed.nodes) {\n const id = this.addNode({ kind: 'process', x: (drop % 8) * 200 - 700, y: Math.floor(drop / 8) * 110, title: def.label });\n if (id < 0) break;\n idMap.set(mid, id); drop++;\n }\n for (const e of parsed.edges) {\n const a = idMap.get(e.from), b = idMap.get(e.to);\n if (a === undefined || b === undefined) continue;\n const eid = this.addEdge({ from: a, to: b });\n if (eid >= 0 && e.label) this.setEdgeLabel(eid, e.label);\n }\n this.runAutoLayout();\n this.fitView();\n return parsed.nodes.size;\n }\n\n /** Returns an array of edge indices forming the shortest path, or [] if unreachable. */\n shortestPathSafe(from, to) { return this.shortestPath(from, to) || []; }\n shortestPath(from, to) {\n const adj = this._buildAdj();\n const prev = new Map(); prev.set(from, null);\n const queue = [from];\n while (queue.length) {\n const u = queue.shift();\n if (u === to) break;\n for (const e of (adj.get(u) || [])) {\n if (!prev.has(e.to)) { prev.set(e.to, { from: u, edgeIdx: e.edge }); queue.push(e.to); }\n }\n }\n if (!prev.has(to)) return [];\n const path = [];\n let cur = to;\n while (prev.get(cur)) { path.push(prev.get(cur).edgeIdx); cur = prev.get(cur).from; }\n return path.reverse();\n }\n findCycles() {\n const n = this.w.nodeCount_();\n const color = new Uint8Array(n);\n const result = new Set();\n const adj = this._buildAdj();\n for (let start = 0; start < n; start++) {\n if (color[start] !== 0) continue;\n const stack = [{ u: start, iter: (adj.get(start) || [])[Symbol.iterator]() }];\n color[start] = 1;\n while (stack.length) {\n const top = stack[stack.length - 1];\n const next = top.iter.next();\n if (next.done) { color[top.u] = 2; stack.pop(); continue; }\n const e = next.value;\n if (color[e.to] === 1) result.add(e.edge);\n else if (color[e.to] === 0) {\n color[e.to] = 1;\n stack.push({ u: e.to, iter: (adj.get(e.to) || [])[Symbol.iterator]() });\n }\n }\n }\n return [...result];\n }\n /** Build per-node edge-id adjacency for fast dirty-marking. */\n _ensureAdj() {\n if (!this._adjDirty && this._nodeAdj) return;\n const n = this.w.nodeCount_(), m = this.w.edgeCount_();\n const adj = new Array(n);\n for (let i = 0; i < n; i++) adj[i] = [];\n for (let e = 0; e < m; e++) {\n const a = this.V.edgeFromN[e], b = this.V.edgeToN[e];\n if (a < n) adj[a].push(e);\n if (b < n && a !== b) adj[b].push(e);\n }\n this._nodeAdj = adj;\n this._adjDirty = false;\n }\n\n _buildAdj() {\n const m = this.w.edgeCount_();\n const adj = new Map();\n for (let i = 0; i < m; i++) {\n const a = this.V.edgeFromN[i];\n if (!adj.has(a)) adj.set(a, []);\n adj.get(a).push({ to: this.V.edgeToN[i], edge: i });\n }\n return adj;\n }\n\n // ── Persistence ───────────────────────────────────────────────────────\n toJSON() {\n const n = this.w.nodeCount_(), m = this.w.edgeCount_();\n const nodes = [];\n for (let i = 0; i < n; i++) {\n const node = {\n id: i, kind: this.kinds[this.V.kind[i]].name,\n x: this.V.posX[i], y: this.V.posY[i],\n w: this.V.sizeW[i], h: this.V.sizeH[i],\n nin: this.V.nIn[i], nout: this.V.nOut[i],\n };\n if (this.titles.has(i)) node.title = this.titles.get(i);\n if (this.colors.has(i)) node.color = this.colors.get(i);\n if (this.descriptions.has(i)) node.description = this.descriptions.get(i);\n if (this.tags.has(i)) node.tags = this.tags.get(i);\n if (this.status.has(i)) node.status = this.status.get(i);\n if (this.progress.has(i)) node.progress = this.progress.get(i);\n nodes.push(node);\n }\n const edges = [];\n for (let i = 0; i < m; i++) {\n const edge = { from: this.V.edgeFromN[i], fp: this.V.edgeFromP[i],\n to: this.V.edgeToN[i], tp: this.V.edgeToP[i] };\n if (this.edgeLabels.has(i)) edge.label = this.edgeLabels.get(i);\n edges.push(edge);\n }\n return {\n version: 1, nodes, edges,\n camera: { ...this.cam },\n edgeStyle: this.options.edgeStyle,\n };\n }\n loadJSON(data) {\n this.w.reset();\n this.titles.clear(); this.colors.clear(); this.descriptions.clear();\n this.tags.clear(); this.status.clear(); this.progress.clear();\n this.edgeLabels.clear();\n const idMap = new Map();\n for (const node of (data.nodes || [])) {\n const id = this.addNode({\n kind: node.kind, x: node.x, y: node.y, w: node.w, h: node.h,\n title: node.title, color: node.color, description: node.description,\n tags: node.tags, status: node.status, progress: node.progress,\n });\n idMap.set(node.id ?? id, id);\n }\n for (const edge of (data.edges || [])) {\n this.addEdge({\n from: idMap.get(edge.from) ?? edge.from, fp: edge.fp,\n to: idMap.get(edge.to) ?? edge.to, tp: edge.tp,\n label: edge.label,\n });\n }\n if (data.camera) Object.assign(this.cam, data.camera);\n if (data.edgeStyle) this.options.edgeStyle = data.edgeStyle;\n this.w.snapshot();\n this._emit('change');\n }\n async exportPNG() {\n return new Promise((resolve) => this.canvas.toBlob(resolve, 'image/png'));\n }\n\n /** Build a standalone SVG document representing the current graph. */\n exportSVG() {\n const n = this.w.nodeCount_(), m = this.w.edgeCount_();\n if (n === 0) return '<svg xmlns=\"http://www.w3.org/2000/svg\"/>';\n let mnx = Infinity, mxx = -Infinity, mny = Infinity, mxy = -Infinity;\n for (let i = 0; i < n; i++) {\n const hw = this.V.sizeW[i] * 0.5, hh = this.V.sizeH[i] * 0.5;\n if (this.V.posX[i] - hw < mnx) mnx = this.V.posX[i] - hw;\n if (this.V.posX[i] + hw > mxx) mxx = this.V.posX[i] + hw;\n if (this.V.posY[i] - hh < mny) mny = this.V.posY[i] - hh;\n if (this.V.posY[i] + hh > mxy) mxy = this.V.posY[i] + hh;\n }\n const pad = 40;\n const bw = mxx - mnx + pad * 2, bh = mxy - mny + pad * 2;\n const out = [`<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"${mnx - pad} ${mny - pad} ${bw} ${bh}\" width=\"${bw}\" height=\"${bh}\" style=\"background:${this.options.background}\">`];\n for (let i = 0; i < m; i++) {\n const a = this.V.edgeFromN[i], b = this.V.edgeToN[i];\n const ap = this._portWorld(a, 1, this.V.edgeFromP[i]);\n const bp = this._portWorld(b, 0, this.V.edgeToP[i]);\n const cA = this.colors.get(a) || this.kinds[this.V.kind[a]].color;\n const cB = this.colors.get(b) || this.kinds[this.V.kind[b]].color;\n const gid = `g${i}`;\n out.push(`<defs><linearGradient id=\"${gid}\" x1=\"${ap.x}\" y1=\"${ap.y}\" x2=\"${bp.x}\" y2=\"${bp.y}\" gradientUnits=\"userSpaceOnUse\"><stop offset=\"0%\" stop-color=\"${cA}\"/><stop offset=\"100%\" stop-color=\"${cB}\"/></linearGradient></defs>`);\n if (this.options.edgeStyle === 'orthogonal') {\n const path = this._orthoPath(ap, bp);\n const d = `M ${path[0].x} ${path[0].y} ` + path.slice(1).map((p) => `L ${p.x} ${p.y}`).join(' ');\n out.push(`<path d=\"${d}\" stroke=\"url(#${gid})\" stroke-width=\"1.7\" fill=\"none\" stroke-linejoin=\"round\"/>`);\n } else {\n const dx = bp.x - ap.x, dy = bp.y - ap.y;\n const off = Math.max(50, Math.abs(dx) * 0.5 + Math.abs(dy) * 0.4);\n out.push(`<path d=\"M ${ap.x} ${ap.y} C ${ap.x + off} ${ap.y} ${bp.x - off} ${bp.y} ${bp.x} ${bp.y}\" stroke=\"url(#${gid})\" stroke-width=\"1.7\" fill=\"none\"/>`);\n }\n }\n for (let i = 0; i < n; i++) {\n const cat = this.kinds[this.V.kind[i]];\n const color = this.colors.get(i) || cat.color;\n const x = this.V.posX[i] - this.V.sizeW[i] / 2;\n const y = this.V.posY[i] - this.V.sizeH[i] / 2;\n const w = this.V.sizeW[i], h = this.V.sizeH[i];\n if (cat.shape === 'diamond') {\n const cx = this.V.posX[i], cy = this.V.posY[i];\n out.push(`<polygon points=\"${cx},${y} ${x+w},${cy} ${cx},${y+h} ${x},${cy}\" fill=\"#161b27\" stroke=\"${color}\" stroke-width=\"1.4\"/>`);\n } else if (cat.shape === 'ellipse') {\n out.push(`<ellipse cx=\"${this.V.posX[i]}\" cy=\"${this.V.posY[i]}\" rx=\"${w/2}\" ry=\"${h/2}\" fill=\"#161b27\" stroke=\"${color}\" stroke-width=\"1.4\"/>`);\n } else {\n out.push(`<rect x=\"${x}\" y=\"${y}\" width=\"${w}\" height=\"${h}\" rx=\"8\" fill=\"#161b27\" stroke=\"${color}\" stroke-width=\"1.4\"/>`);\n if (cat.shape === 'rect') out.push(`<rect x=\"${x}\" y=\"${y}\" width=\"${w}\" height=\"22\" rx=\"8\" fill=\"${color}\"/>`);\n }\n const title = this.titles.get(i) || `${cat.name} #${i}`;\n out.push(`<text x=\"${this.V.posX[i]}\" y=\"${y + (cat.shape === 'rect' ? 14 : h/2)}\" font-family=\"Inter, system-ui, sans-serif\" font-size=\"11\" font-weight=\"600\" text-anchor=\"middle\" fill=\"${cat.shape === 'rect' ? '#0b0f17' : color}\">${escapeXml(title)}</text>`);\n }\n out.push('</svg>');\n return out.join('\\n');\n }\n\n // ── Events ────────────────────────────────────────────────────────────\n on(event, fn) {\n if (!this.listeners.has(event)) this.listeners.set(event, []);\n this.listeners.get(event).push(fn);\n return () => { const arr = this.listeners.get(event); const i = arr.indexOf(fn); if (i >= 0) arr.splice(i, 1); };\n }\n _emit(event, ...args) {\n if (this._suspendEvents && event !== 'change') return;\n const arr = this.listeners.get(event);\n if (!arr) return;\n for (const fn of arr.slice()) try { fn(...args); } catch (e) { console.error(e); }\n }\n\n // ── Coordinate helpers ────────────────────────────────────────────────\n _resize() {\n const dpr = window.devicePixelRatio || 1;\n const r = this.container.getBoundingClientRect();\n this.canvas.width = Math.floor(r.width * dpr);\n this.canvas.height = Math.floor(r.height * dpr);\n this.canvas.style.width = r.width + 'px';\n this.canvas.style.height = r.height + 'px';\n }\n _w2s(wx, wy) {\n return { x: this.canvas.width / 2 + (wx + this.cam.x) * this.cam.zoom,\n y: this.canvas.height / 2 + (wy + this.cam.y) * this.cam.zoom };\n }\n _s2w(cx, cy) {\n const dpr = window.devicePixelRatio || 1;\n const r = this.canvas.getBoundingClientRect();\n const sx = (cx - r.left) * dpr, sy = (cy - r.top) * dpr;\n return { x: (sx - this.canvas.width / 2) / this.cam.zoom - this.cam.x,\n y: (sy - this.canvas.height / 2) / this.cam.zoom - this.cam.y };\n }\n\n // ── Interactions ──────────────────────────────────────────────────────\n _attachEvents() {\n const c = this.canvas;\n c.addEventListener('contextmenu', (e) => e.preventDefault());\n\n c.addEventListener('mousedown', (e) => {\n this._hideMenu();\n if (this._editingNoteEl && this._editingNote !== -1) this._editingNoteEl.blur();\n if (this._editingTitleEl && this._editingTitle !== -1) this._editingTitleEl.blur();\n const wp = this._s2w(e.clientX, e.clientY);\n if (e.button === 2) { this._onRightClick(e, wp); return; }\n if (e.button === 1) { this._startPan(e); return; }\n // Port? (bidirectional)\n const ph = this.w.hitTestPort(wp.x, wp.y, 11);\n if (ph !== -1) {\n const side = (ph >>> 24) & 0xFF, idx = (ph >>> 16) & 0xFF, nid = ph & 0xFFFF;\n this._mode = 'connecting';\n this._edgeStart = { nodeId: nid, side, idx };\n this._edgeCursor = wp;\n this.canvas.style.cursor = 'crosshair';\n return;\n }\n // Resize handle?\n const handle = this._hitHandle(wp.x, wp.y);\n if (handle && !this.readOnly && !this.locked.has(handle.nodeId)) {\n this._mode = 'resize';\n this._resizingHandle = { ...handle, lastX: wp.x, lastY: wp.y };\n return;\n }\n // Edge waypoint drag?\n const wpHit = this._hitWaypoint(wp.x, wp.y);\n if (wpHit && !this.readOnly) {\n this._draggingWaypoint = wpHit;\n this._mode = 'drag-waypoint';\n return;\n }\n // Frame corner resize?\n const fc = this._hitFrameCorner(wp.x, wp.y);\n if (fc) {\n this._mode = 'resize-frame';\n this._resizingFrame = { ...fc, lastX: wp.x, lastY: wp.y };\n return;\n }\n // Frame header drag?\n const fh = this._hitFrameHeader(wp.x, wp.y);\n if (fh !== -1) {\n this._mode = 'drag-frame';\n this._draggingFrame = fh;\n this._frameDragLast = wp;\n return;\n }\n // Sticky note drag?\n const nh = this._hitNote(wp.x, wp.y);\n if (nh !== -1) {\n this._mode = 'drag-note';\n this._draggingNote = nh;\n this._noteDragLast = wp;\n return;\n }\n // Sub-task checkbox click?\n const taskHit = this._hitTaskCheckbox(wp.x, wp.y);\n if (taskHit) {\n const list = this.tasks.get(taskHit.nodeId);\n if (list && list[taskHit.taskIdx]) {\n list[taskHit.taskIdx].done = !list[taskHit.taskIdx].done;\n const done = list.filter((t) => t.done).length;\n this.progress.set(taskHit.nodeId, done / list.length);\n this._emit('change');\n }\n return;\n }\n // Node?\n const nid = this.w.hitTestNode(wp.x, wp.y);\n if (nid !== -1) {\n if (!e.shiftKey && this.V.selected[nid] === 0) { this.w.clearSelection(); this.w.setSelected(nid, 1); }\n else if (e.shiftKey) this.w.toggleSelected(nid);\n // Locked / read-only → select but do not drag.\n if (!this.readOnly && !this.locked.has(nid)) {\n this._mode = 'drag';\n this._dragLast = wp;\n }\n this._emit('select', this.getSelection());\n return;\n }\n // Edge click → select.\n const eid = this._hitTestEdge(wp.x, wp.y, 6 / this.cam.zoom);\n if (eid !== -1) {\n if (!e.shiftKey) this.w.clearSelection();\n this.w.setEdgeSelected(eid, 1);\n this._emit('select', this.getSelection());\n return;\n }\n // Alt-drag empty → lasso.\n if (e.altKey) {\n if (!e.shiftKey) this.w.clearSelection();\n this._mode = 'lasso';\n this._lasso = [{ x: wp.x, y: wp.y }];\n return;\n }\n // Empty space → marquee.\n if (!e.shiftKey) this.w.clearSelection();\n this._mode = 'marquee';\n this._marquee = { x0: wp.x, y0: wp.y, x1: wp.x, y1: wp.y };\n });\n\n c.addEventListener('mousemove', (e) => {\n const wp = this._s2w(e.clientX, e.clientY);\n if (this._mode === 'pan') {\n const dpr = window.devicePixelRatio || 1;\n const dxW = (e.clientX - this._dragStart.sx) * dpr / this.cam.zoom;\n const dyW = (e.clientY - this._dragStart.sy) * dpr / this.cam.zoom;\n this.cam.x += dxW; this.cam.y += dyW;\n const now = performance.now();\n const dt = Math.max(1, now - (this._panVel.lastTs || now)) / 1000;\n this._panVel.x = dxW / dt; this._panVel.y = dyW / dt; this._panVel.lastTs = now;\n this._dragStart.sx = e.clientX; this._dragStart.sy = e.clientY;\n return;\n }\n if (this._mode === 'resize' && this._resizingHandle) {\n const dx = wp.x - this._resizingHandle.lastX, dy = wp.y - this._resizingHandle.lastY;\n this._applyResize(this._resizingHandle.corner, dx, dy);\n this._resizingHandle.lastX = wp.x; this._resizingHandle.lastY = wp.y;\n return;\n }\n if (this._mode === 'drag-waypoint' && this._draggingWaypoint) {\n const { edgeIdx, wpIdx } = this._draggingWaypoint;\n const list = this._edgeWaypoints.get(edgeIdx);\n if (list && list[wpIdx]) { list[wpIdx].x = wp.x; list[wpIdx].y = wp.y; }\n return;\n }\n if (this._mode === 'drag') {\n if (this._gl) {\n this._ensureAdj();\n for (let i = 0; i < this.w.nodeCount_(); i++) if (this.V.selected[i]) {\n this._gl.markNodeDirty(i);\n const edges = this._nodeAdj[i];\n if (edges) for (let k = 0; k < edges.length; k++) this._gl.markEdgeDirty(edges[k]);\n }\n }\n let dx = wp.x - this._dragLast.x, dy = wp.y - this._dragLast.y;\n if (this.options.snapToGrid) {\n // Snap by the first selected node.\n for (let i = 0; i < this.w.nodeCount_(); i++) {\n if (this.V.selected[i]) {\n const grid = this.options.gridSize;\n const nx = Math.round((this.V.posX[i] + dx) / grid) * grid;\n const ny = Math.round((this.V.posY[i] + dy) / grid) * grid;\n dx = nx - this.V.posX[i]; dy = ny - this.V.posY[i]; break;\n }\n }\n this._alignGuides = null;\n } else {\n const sa = this._computeAlignSnap(dx, dy);\n dx += sa.dx; dy += sa.dy;\n this._alignGuides = { v: sa.guideX !== null ? [sa.guideX] : [],\n h: sa.guideY !== null ? [sa.guideY] : [] };\n }\n this.w.moveSelectedBy(dx, dy);\n this._dragLast = { x: this._dragLast.x + dx, y: this._dragLast.y + dy };\n return;\n }\n if (this._mode === 'drag-frame') {\n const dx = wp.x - this._frameDragLast.x, dy = wp.y - this._frameDragLast.y;\n const f = this.frames[this._draggingFrame];\n f.x += dx; f.y += dy;\n for (let i = 0; i < this.w.nodeCount_(); i++) {\n if (this.V.posX[i] >= f.x && this.V.posX[i] <= f.x + f.w &&\n this.V.posY[i] >= f.y && this.V.posY[i] <= f.y + f.h) {\n this.V.posX[i] += dx; this.V.posY[i] += dy;\n }\n }\n this._frameDragLast = wp;\n return;\n }\n if (this._mode === 'resize-frame' && this._resizingFrame) {\n const dx = wp.x - this._resizingFrame.lastX, dy = wp.y - this._resizingFrame.lastY;\n this._applyFrameResize(this._resizingFrame.idx, this._resizingFrame.corner, dx, dy);\n this._resizingFrame.lastX = wp.x; this._resizingFrame.lastY = wp.y;\n return;\n }\n if (this._mode === 'drag-note') {\n const dx = wp.x - this._noteDragLast.x, dy = wp.y - this._noteDragLast.y;\n const n = this.notes[this._draggingNote];\n n.x += dx; n.y += dy;\n this._noteDragLast = wp;\n return;\n }\n if (this._mode === 'connecting') {\n this._edgeCursor = wp;\n return;\n }\n if (this._mode === 'lasso' && this._lasso) {\n const last = this._lasso[this._lasso.length - 1];\n if (Math.hypot(wp.x - last.x, wp.y - last.y) > 6 / this.cam.zoom) {\n this._lasso.push({ x: wp.x, y: wp.y });\n }\n return;\n }\n if (this._mode === 'marquee') {\n this._marquee.x1 = wp.x; this._marquee.y1 = wp.y;\n this.w.selectInRect(this._marquee.x0, this._marquee.y0, this._marquee.x1, this._marquee.y1, 1);\n return;\n }\n // Idle hover.\n const newHover = this.w.hitTestNode(wp.x, wp.y);\n if (newHover !== this._hoveredNode) {\n this._hoveredNode = newHover;\n this._hoveredNodeSince = performance.now();\n this._lastFocusComputed = -2;\n }\n this._hoveredEdge = newHover === -1 ? this._hitTestEdge(wp.x, wp.y, 6 / this.cam.zoom) : -1;\n const handle = this._hitHandle(wp.x, wp.y);\n c.style.cursor = handle ? HANDLE_CURSOR[handle.corner] : '';\n });\n\n c.addEventListener('mouseup', () => {\n if (this._mode === 'connecting' && this._edgeCursor) {\n // Bidirectional: accept either output→input or input→output drop.\n const ph = this.w.hitTestPort(this._edgeCursor.x, this._edgeCursor.y, 14);\n if (ph !== -1) {\n const ts = (ph >>> 24) & 0xFF, ti = (ph >>> 16) & 0xFF, tn = ph & 0xFFFF;\n if (ts !== this._edgeStart.side && tn !== this._edgeStart.nodeId) {\n const fromN = this._edgeStart.side === 1 ? this._edgeStart.nodeId : tn;\n const fromP = this._edgeStart.side === 1 ? this._edgeStart.idx : ti;\n const toN = this._edgeStart.side === 0 ? this._edgeStart.nodeId : tn;\n const toP = this._edgeStart.side === 0 ? this._edgeStart.idx : ti;\n const reason = this.validateConnection(fromN, fromP, toN, toP);\n if (reason === null) {\n this.addEdge({ from: fromN, fp: fromP, to: toN, tp: toP });\n } else {\n this._emit('connection:rejected', { fromN, fromP, toN, toP, reason });\n this._flashReject = { x: this._edgeCursor.x, y: this._edgeCursor.y, msg: reason, t0: performance.now() };\n }\n }\n }\n } else if (this._mode === 'lasso' && this._lasso && this._lasso.length > 2) {\n for (let i = 0; i < this.w.nodeCount_(); i++) {\n if (pointInPolygon(this.V.posX[i], this.V.posY[i], this._lasso)) this.w.setSelected(i, 1);\n }\n this._emit('select', this.getSelection());\n } else if (this._mode === 'drag-waypoint') {\n this._draggingWaypoint = null;\n this._emit('change');\n } else if (this._mode === 'drag' || this._mode === 'resize' ||\n this._mode === 'drag-frame' || this._mode === 'resize-frame' || this._mode === 'drag-note' ||\n this._mode === 'marquee') {\n if (this._mode !== 'marquee') { this.w.snapshot(); this._emit('change'); }\n this._emit('select', this.getSelection());\n }\n this._mode = 'idle';\n this._edgeStart = null; this._edgeCursor = null;\n this._marquee = null; this._lasso = null; this._alignGuides = null;\n this._resizingHandle = null; this._resizingFrame = null;\n this._draggingFrame = -1; this._draggingNote = -1;\n this.canvas.classList.remove('panning');\n this.canvas.style.cursor = '';\n });\n\n // ── Touch: pinch zoom + two-finger pan ────────────────────────────\n const pointers = new Map(); // pointerId -> { x, y }\n let pinchPrev = null; // { dist, mid }\n let longPressTimer = null;\n // Track which mouse events came synthesized from pointer to suppress double-firing.\n this._pointerSynthesizing = false;\n c.addEventListener('pointerdown', (e) => {\n if (e.pointerType === 'mouse') return; // mouse already handled\n c.setPointerCapture(e.pointerId);\n pointers.set(e.pointerId, { x: e.clientX, y: e.clientY });\n if (pointers.size === 2) {\n pinchPrev = pinchInfo(pointers);\n this._mode = 'pinch';\n } else if (pointers.size === 1) {\n // Start long-press timer for context menu.\n const x = e.clientX, y = e.clientY;\n longPressTimer = setTimeout(() => {\n longPressTimer = null;\n const wp = this._s2w(x, y);\n this._onRightClick({ clientX: x, clientY: y, preventDefault() {} }, wp);\n }, 550);\n // Simulate a left mousedown for taps.\n this._pointerSynthesizing = true;\n c.dispatchEvent(new MouseEvent('mousedown', { clientX: x, clientY: y, button: 0, bubbles: true }));\n this._pointerSynthesizing = false;\n }\n });\n c.addEventListener('pointermove', (e) => {\n if (e.pointerType === 'mouse') return;\n if (!pointers.has(e.pointerId)) return;\n pointers.set(e.pointerId, { x: e.clientX, y: e.clientY });\n if (pointers.size === 2 && pinchPrev) {\n const cur = pinchInfo(pointers);\n const zoomFactor = cur.dist / pinchPrev.dist;\n const before = this._s2w(cur.mid.x, cur.mid.y);\n this.cam.zoom = Math.max(0.2, Math.min(3.0, this.cam.zoom * zoomFactor));\n const after = this._s2w(cur.mid.x, cur.mid.y);\n this.cam.x += after.x - before.x; this.cam.y += after.y - before.y;\n const dpr = window.devicePixelRatio || 1;\n this.cam.x += (cur.mid.x - pinchPrev.mid.x) * dpr / this.cam.zoom;\n this.cam.y += (cur.mid.y - pinchPrev.mid.y) * dpr / this.cam.zoom;\n pinchPrev = cur;\n } else if (pointers.size === 1) {\n if (longPressTimer && Math.hypot(e.movementX || 0, e.movementY || 0) > 4) {\n clearTimeout(longPressTimer); longPressTimer = null;\n }\n this._pointerSynthesizing = true;\n c.dispatchEvent(new MouseEvent('mousemove', { clientX: e.clientX, clientY: e.clientY, button: 0, bubbles: true }));\n this._pointerSynthesizing = false;\n }\n });\n const endPointer = (e) => {\n if (e.pointerType === 'mouse') return;\n pointers.delete(e.pointerId);\n if (longPressTimer) { clearTimeout(longPressTimer); longPressTimer = null; }\n if (pointers.size < 2) { pinchPrev = null; if (this._mode === 'pinch') this._mode = 'idle'; }\n if (pointers.size === 0) {\n this._pointerSynthesizing = true;\n c.dispatchEvent(new MouseEvent('mouseup', { clientX: e.clientX, clientY: e.clientY, button: 0, bubbles: true }));\n this._pointerSynthesizing = false;\n }\n };\n c.addEventListener('pointerup', endPointer);\n c.addEventListener('pointercancel', endPointer);\n\n c.addEventListener('wheel', (e) => {\n e.preventDefault();\n const isPinch = e.ctrlKey;\n if (isPinch || e.deltaMode === 1) {\n const before = this._s2w(e.clientX, e.clientY);\n this.cam.zoom = Math.max(0.2, Math.min(3.0,\n this.cam.zoom * Math.exp(-e.deltaY * (isPinch ? 0.012 : 0.05))));\n const after = this._s2w(e.clientX, e.clientY);\n this.cam.x += after.x - before.x; this.cam.y += after.y - before.y;\n return;\n }\n // Trackpad two-finger pan.\n const dpr = window.devicePixelRatio || 1;\n this.cam.x -= e.deltaX * dpr / this.cam.zoom;\n this.cam.y -= e.deltaY * dpr / this.cam.zoom;\n }, { passive: false });\n\n c.addEventListener('dblclick', (e) => {\n const wp = this._s2w(e.clientX, e.clientY);\n // Frame header → drill into subflow.\n const fh = this._hitFrameHeader(wp.x, wp.y);\n if (fh !== -1) { this.enterSubflow(this.frames[fh].id); return; }\n // Note → edit text.\n const nh = this._hitNote(wp.x, wp.y);\n if (nh !== -1) { this._startEditingNote(nh); return; }\n const nid = this.w.hitTestNode(wp.x, wp.y);\n if (nid !== -1) {\n if (this.options.dblclickEditsTitle !== false) this._startEditingTitle(nid);\n this._emit('node:dblclick', nid);\n return;\n }\n const eid = this._hitTestEdge(wp.x, wp.y, 6 / this.cam.zoom);\n if (eid !== -1) { this._emit('edge:dblclick', eid); return; }\n this._emit('canvas:dblclick', wp);\n });\n }\n\n _startPan(e) {\n this._mode = 'pan';\n this._dragStart = { sx: e.clientX, sy: e.clientY };\n this._panVel.x = 0; this._panVel.y = 0; this._panVel.lastTs = performance.now();\n this.canvas.style.cursor = 'grabbing';\n }\n\n _attachKeyboard() {\n const handler = (e) => {\n // Only handle when our container has focus (or the canvas).\n const inOwn = this.container.contains(document.activeElement) || document.activeElement === document.body;\n if (!inOwn) return;\n // Don't steal typing in inputs/textareas.\n const t = document.activeElement;\n if (t && (t.tagName === 'INPUT' || t.tagName === 'TEXTAREA')) return;\n const ctrl = e.ctrlKey || e.metaKey;\n\n if (e.code === 'Delete' || e.code === 'Backspace') {\n if (this.deleteSelection() > 0) e.preventDefault();\n return;\n }\n if (ctrl && e.code === 'KeyZ' && !e.shiftKey) { this.undo(); e.preventDefault(); return; }\n if (ctrl && (e.code === 'KeyY' || (e.code === 'KeyZ' && e.shiftKey))) { this.redo(); e.preventDefault(); return; }\n if (ctrl && e.code === 'KeyA') { this.selectAll(); e.preventDefault(); return; }\n if (ctrl && e.code === 'KeyD') { this.duplicateSelection(); e.preventDefault(); return; }\n if (ctrl && e.code === 'KeyC') { this._copy(); e.preventDefault(); return; }\n if (ctrl && e.code === 'KeyV') { this._paste(); e.preventDefault(); return; }\n if (ctrl && e.code === 'KeyG') { this.groupSelection(); e.preventDefault(); return; }\n if (ctrl && e.code === 'BracketRight') { this.bringToFront(); e.preventDefault(); return; }\n if (ctrl && e.code === 'BracketLeft') { this.sendToBack(); e.preventDefault(); return; }\n if (ctrl && e.code === 'KeyK') { this.openCommandPalette(); e.preventDefault(); return; }\n if (ctrl && e.code === 'KeyF' && this.options.search) { this.openSearch(); e.preventDefault(); return; }\n if (ctrl && e.code === 'KeyT') { this.toggleTheme(); e.preventDefault(); return; }\n if (ctrl && e.code === 'KeyM') { this.setMinimap(!this.options.minimap); e.preventDefault(); return; }\n if (ctrl && e.code === 'KeyE') { this.setAllEdgesAnimated(this.animatedEdges.size === 0); e.preventDefault(); return; }\n if (!ctrl && e.code === 'Digit0') { this.fitView(); e.preventDefault(); return; }\n if (!ctrl && e.code === 'KeyL' && !this._editingTitle && this._editingNote === -1) { this.runAutoLayout(); e.preventDefault(); return; }\n if (e.code === 'F5' && !e.shiftKey) { this.run(); e.preventDefault(); return; }\n if (e.code === 'F5' && e.shiftKey) { this.stop(); e.preventDefault(); return; }\n if (e.code === 'Tab' && !ctrl) {\n const n = this.w.nodeCount_();\n if (n === 0) return;\n let cur = this.getSelection()[0] ?? -1;\n let next = e.shiftKey ? cur - 1 : cur + 1;\n if (cur === -1) next = 0;\n if (next < 0) next = n - 1;\n if (next >= n) next = 0;\n this.clearSelection(); this.w.setSelected(next, 1);\n this.panTo(this.V.posX[next], this.V.posY[next]);\n e.preventDefault();\n return;\n }\n if (!ctrl && /^Digit[1-9]$/.test(e.code)) {\n const slot = parseInt(e.code.slice(5), 10);\n if (e.altKey) this.jumpBookmark(slot);\n else this.setBookmark(slot);\n e.preventDefault();\n return;\n }\n if (e.code === 'Escape') {\n // Cancel an in-progress edge or exit subflow before falling through.\n if (this._mode === 'connecting') {\n this._mode = 'idle'; this._edgeStart = null; this._edgeCursor = null;\n this.canvas.style.cursor = '';\n return;\n }\n if (this._focusFrame !== -1) { this.exitSubflow(); return; }\n this.clearSelection(); this._hideMenu(); return;\n }\n if (e.code.startsWith('Arrow')) {\n const d = e.shiftKey ? 1 : 10;\n const dx = e.code === 'ArrowLeft' ? -d : e.code === 'ArrowRight' ? d : 0;\n const dy = e.code === 'ArrowUp' ? -d : e.code === 'ArrowDown' ? d : 0;\n if (this.getSelection().length > 0) {\n this.w.moveSelectedBy(dx, dy);\n if (this._nudgeTimer) clearTimeout(this._nudgeTimer);\n this._nudgeTimer = setTimeout(() => { this.w.snapshot(); this._emit('change'); }, 400);\n e.preventDefault();\n }\n }\n };\n window.addEventListener('keydown', handler);\n this._keyHandler = handler;\n }\n\n // ── Clipboard ─────────────────────────────────────────────────────────\n _copy() {\n const sel = this.getSelection();\n if (sel.length === 0) return;\n const selSet = new Set(sel);\n const nodes = sel.map((i) => ({\n origId: i,\n kind: this.kinds[this.V.kind[i]].name,\n x: this.V.posX[i], y: this.V.posY[i], w: this.V.sizeW[i], h: this.V.sizeH[i],\n title: this.titles.get(i), color: this.colors.get(i),\n description: this.descriptions.get(i), tags: this.tags.get(i),\n status: this.status.get(i), progress: this.progress.get(i),\n }));\n const edges = [];\n for (let e = 0; e < this.w.edgeCount_(); e++) {\n if (selSet.has(this.V.edgeFromN[e]) && selSet.has(this.V.edgeToN[e])) {\n edges.push({ from: this.V.edgeFromN[e], fp: this.V.edgeFromP[e],\n to: this.V.edgeToN[e], tp: this.V.edgeToP[e],\n label: this.edgeLabels.get(e) });\n }\n }\n let minX = Infinity, minY = Infinity;\n for (const n of nodes) { if (n.x < minX) minX = n.x; if (n.y < minY) minY = n.y; }\n this._clipboard = { nodes, edges, anchor: { x: minX, y: minY } };\n }\n _paste() {\n if (!this._clipboard) return;\n const c = this._clipboard;\n const px = -this.cam.x, py = -this.cam.y;\n const dx = px - c.anchor.x, dy = py - c.anchor.y;\n const idMap = new Map();\n this.clearSelection();\n for (const n of c.nodes) {\n const id = this.addNode({\n kind: n.kind, x: n.x + dx, y: n.y + dy, w: n.w, h: n.h,\n title: n.title, color: n.color, description: n.description,\n tags: n.tags, status: n.status, progress: n.progress,\n });\n idMap.set(n.origId, id);\n this.w.setSelected(id, 1);\n }\n for (const e of c.edges) {\n const a = idMap.get(e.from), b = idMap.get(e.to);\n if (a !== undefined && b !== undefined) this.addEdge({ from: a, fp: e.fp, to: b, tp: e.tp, label: e.label });\n }\n this._clipboard = { ...c, anchor: { x: c.anchor.x - 24, y: c.anchor.y - 24 } };\n this.w.snapshot();\n this._emit('change');\n }\n\n // ── Resize handles ────────────────────────────────────────────────────\n // ── Frame hit-tests + resize ──────────────────────────────────────────\n _hitFrameHeader(qx, qy) {\n for (let i = this.frames.length - 1; i >= 0; i--) {\n const f = this.frames[i];\n if (qx < f.x || qx > f.x + f.w) continue;\n if (qy < f.y || qy > f.y + 26) continue;\n return i;\n }\n return -1;\n }\n _hitFrameCorner(qx, qy) {\n const tol = 14 / this.cam.zoom;\n for (let i = this.frames.length - 1; i >= 0; i--) {\n const f = this.frames[i];\n const corners = {\n tl: { x: f.x, y: f.y }, tr: { x: f.x + f.w, y: f.y },\n bl: { x: f.x, y: f.y + f.h }, br: { x: f.x + f.w, y: f.y + f.h },\n };\n for (const c of ['br', 'bl', 'tr', 'tl']) {\n const p = corners[c];\n if (Math.abs(qx - p.x) < tol && Math.abs(qy - p.y) < tol) return { idx: i, corner: c };\n }\n }\n return null;\n }\n _applyFrameResize(idx, corner, dx, dy) {\n const f = this.frames[idx], MIN_W = 120, MIN_H = 80;\n if (corner === 'br') { f.w += dx; f.h += dy; }\n if (corner === 'bl') { f.x += dx; f.w -= dx; f.h += dy; }\n if (corner === 'tr') { f.w += dx; f.y += dy; f.h -= dy; }\n if (corner === 'tl') { f.x += dx; f.w -= dx; f.y += dy; f.h -= dy; }\n if (f.w < MIN_W) { if (corner === 'bl' || corner === 'tl') f.x -= (MIN_W - f.w); f.w = MIN_W; }\n if (f.h < MIN_H) { if (corner === 'tl' || corner === 'tr') f.y -= (MIN_H - f.h); f.h = MIN_H; }\n }\n _hitNote(qx, qy) {\n for (let i = this.notes.length - 1; i >= 0; i--) {\n const n = this.notes[i];\n if (qx >= n.x && qx <= n.x + n.w && qy >= n.y && qy <= n.y + n.h) return i;\n }\n return -1;\n }\n _hitTaskCheckbox(qx, qy) {\n const n = this.w.nodeCount_();\n for (let i = n - 1; i >= 0; i--) {\n const list = this.tasks.get(i);\n if (!list || !list.length) continue;\n const cx = this.V.posX[i], cy = this.V.posY[i];\n const hw = this.V.sizeW[i] * 0.5, hh = this.V.sizeH[i] * 0.5;\n if (qx < cx - hw || qx > cx + hw || qy < cy - hh || qy > cy + hh) continue;\n // Rough layout: each row 14 world-units tall, starting ~30 from top.\n const innerLeft = cx - hw + 8;\n let curY = cy - hh + 32;\n if (this.descriptions.get(i)) curY += 30;\n const rowH = 14, boxS = 10;\n for (let t = 0; t < list.length; t++) {\n if (qx >= innerLeft && qx <= innerLeft + boxS && qy >= curY && qy <= curY + boxS) {\n return { nodeId: i, taskIdx: t };\n }\n curY += rowH;\n if (curY > cy + hh - 6) break;\n }\n }\n return null;\n }\n\n _hitHandle(qx, qy) {\n // Only when exactly 1 node selected.\n const sel = this.getSelection();\n if (sel.length !== 1) return null;\n const id = sel[0];\n const cx = this.V.posX[id], cy = this.V.posY[id];\n const hw = this.V.sizeW[id] * 0.5, hh = this.V.sizeH[id] * 0.5;\n const tol = 6 / this.cam.zoom;\n const pts = {\n tl: {x: cx-hw, y: cy-hh}, t: {x: cx, y: cy-hh}, tr: {x: cx+hw, y: cy-hh},\n r: {x: cx+hw, y: cy},\n br: {x: cx+hw, y: cy+hh}, b: {x: cx, y: cy+hh}, bl: {x: cx-hw, y: cy+hh},\n l: {x: cx-hw, y: cy},\n };\n for (const c of HANDLE_CORNERS) {\n const p = pts[c];\n if (Math.abs(qx - p.x) < tol && Math.abs(qy - p.y) < tol) return { nodeId: id, corner: c };\n }\n return null;\n }\n _applyResize(corner, dx, dy) {\n const id = this._resizingHandle.nodeId;\n const MIN = 60;\n let nw = this.V.sizeW[id], nh = this.V.sizeH[id];\n let dcx = 0, dcy = 0;\n if (HANDLE_LEFTS.has(corner)) { nw -= dx; dcx = dx * 0.5; }\n if (HANDLE_RIGHTS.has(corner)) { nw += dx; dcx = dx * 0.5; }\n if (HANDLE_TOPS.has(corner)) { nh -= dy; dcy = dy * 0.5; }\n if (HANDLE_BOTS.has(corner)) { nh += dy; dcy = dy * 0.5; }\n if (nw < MIN) { nw = MIN; dcx = 0; }\n if (nh < MIN) { nh = MIN; dcy = 0; }\n this.V.sizeW[id] = nw; this.V.sizeH[id] = nh;\n this.V.posX[id] += dcx; this.V.posY[id] += dcy;\n }\n\n // ── Alignment guides (during drag) ────────────────────────────────────\n _computeAlignSnap(deltaX, deltaY) {\n const ALIGN_EPS = 6;\n const n = this.w.nodeCount_();\n const xs = [], ys = [];\n for (let i = 0; i < n; i++) {\n if (this.V.selected[i]) continue;\n const cx = this.V.posX[i], cy = this.V.posY[i];\n const hw = this.V.sizeW[i] * 0.5, hh = this.V.sizeH[i] * 0.5;\n xs.push(cx, cx - hw, cx + hw);\n ys.push(cy, cy - hh, cy + hh);\n }\n let bestDX = 0, bestDY = 0, foundX = null, foundY = null;\n let bestX = ALIGN_EPS + 1, bestY = ALIGN_EPS + 1;\n for (let i = 0; i < n; i++) {\n if (!this.V.selected[i]) continue;\n const tcx = this.V.posX[i] + deltaX, tcy = this.V.posY[i] + deltaY;\n for (const x of xs) {\n const d = tcx - x;\n if (Math.abs(d) < bestX) { bestX = Math.abs(d); bestDX = -d; foundX = x; }\n }\n for (const y of ys) {\n const d = tcy - y;\n if (Math.abs(d) < bestY) { bestY = Math.abs(d); bestDY = -d; foundY = y; }\n }\n }\n return { dx: bestX <= ALIGN_EPS ? bestDX : 0, dy: bestY <= ALIGN_EPS ? bestDY : 0,\n guideX: foundX, guideY: foundY };\n }\n\n // ── Edge hit-test (JS-side, samples bezier or polyline) ──────────────\n _hitTestEdge(qx, qy, tolWorld) {\n const tol2 = tolWorld * tolWorld;\n const m = this.w.edgeCount_();\n let bestIdx = -1, bestDist = tol2;\n for (let i = 0; i < m; i++) {\n const ap = this._portWorld(this.V.edgeFromN[i], 1, this.V.edgeFromP[i]);\n const bp = this._portWorld(this.V.edgeToN[i], 0, this.V.edgeToP[i]);\n const minx = Math.min(ap.x, bp.x) - tolWorld, maxx = Math.max(ap.x, bp.x) + tolWorld;\n const miny = Math.min(ap.y, bp.y) - tolWorld - 80, maxy = Math.max(ap.y, bp.y) + tolWorld + 80;\n if (qx < minx || qx > maxx || qy < miny || qy > maxy) continue;\n if (this.options.edgeStyle === 'orthogonal') {\n const path = this._orthoPath(ap, bp);\n for (let s = 0; s < path.length - 1; s++) {\n const d2 = distSeg2(qx, qy, path[s].x, path[s].y, path[s+1].x, path[s+1].y);\n if (d2 < bestDist) { bestDist = d2; bestIdx = i; }\n }\n } else {\n const dxe = bp.x - ap.x, dye = bp.y - ap.y;\n const off = Math.max(50, Math.abs(dxe) * 0.5 + Math.abs(dye) * 0.4);\n for (let s = 0; s <= 16; s++) {\n const t = s / 16;\n const pt = bezPt(t, ap.x, ap.y, ap.x + off, ap.y, bp.x - off, bp.y, bp.x, bp.y);\n const ddx = pt.x - qx, ddy = pt.y - qy;\n const d2 = ddx*ddx + ddy*ddy;\n if (d2 < bestDist) { bestDist = d2; bestIdx = i; }\n }\n }\n }\n return bestIdx;\n }\n\n // ── Right-click menu ──────────────────────────────────────────────────\n _onRightClick(e, wp) {\n if (!this.options.contextMenu) return;\n const nid = this.w.hitTestNode(wp.x, wp.y);\n const eid = nid === -1 ? this._hitTestEdge(wp.x, wp.y, 6 / this.cam.zoom) : -1;\n let items;\n if (nid !== -1) {\n if (this.V.selected[nid] === 0) { this.w.clearSelection(); this.w.setSelected(nid, 1); }\n items = [\n { label: 'Duplicate', kbd: 'Ctrl+D', fn: () => this.duplicateSelection() },\n { label: 'Delete', kbd: 'Del', danger: true, fn: () => this.deleteSelection() },\n { sep: true },\n { label: 'Deselect', kbd: 'Esc', fn: () => this.clearSelection() },\n ];\n } else if (eid !== -1) {\n const a = this.V.edgeFromN[eid], b = this.V.edgeToN[eid];\n items = [\n { label: 'Select endpoints', fn: () => { this.clearSelection(); this.w.setSelected(a,1); this.w.setSelected(b,1); this._emit('select', this.getSelection()); } },\n { label: 'Set label…', fn: () => { const v = prompt('Edge label', this.edgeLabels.get(eid) || ''); if (v !== null) this.setEdgeLabel(eid, v); } },\n { sep: true },\n { label: 'Delete edge', danger: true, fn: () => { this.w.deleteEdge(eid); this.edgeLabels.delete(eid); this.w.snapshot(); this._emit('change'); } },\n ];\n } else {\n items = [\n { label: 'Add Process node here', fn: () => this.addNode({ kind: 'process', x: wp.x, y: wp.y }) },\n { sep: true },\n { label: 'Select all', kbd: 'Ctrl+A', fn: () => this.selectAll() },\n { label: 'Auto-layout', fn: () => this.runAutoLayout() },\n { label: 'Fit view', fn: () => this.fitView() },\n ];\n }\n this._showMenu(e.clientX, e.clientY, items);\n }\n // ── Inline editors (title + note) ─────────────────────────────────────\n _startEditingTitle(nodeId) {\n this._editingTitle = nodeId;\n if (!this._editingTitleEl) {\n const el = document.createElement('input');\n el.type = 'text';\n Object.assign(el.style, {\n position: 'absolute', background: '#161b27', color: '#e6edf3',\n border: '1px solid #f0b93a', borderRadius: '4px',\n fontFamily: 'Inter, ui-sans-serif', fontSize: '12px', fontWeight: '600',\n padding: '4px 8px', outline: 'none', zIndex: '300',\n boxShadow: '0 4px 12px rgba(0,0,0,0.35)',\n });\n this.container.appendChild(el);\n el.addEventListener('blur', () => this._stopEditingTitle());\n el.addEventListener('keydown', (e) => { if (e.code === 'Enter' || e.code === 'Escape') el.blur(); });\n this._editingTitleEl = el;\n }\n this._positionTitleEditor();\n this._editingTitleEl.value = this.titles.get(nodeId) || '';\n this._editingTitleEl.placeholder = `${this.kinds[this.V.kind[nodeId]].name} #${nodeId}`;\n this._editingTitleEl.style.display = 'block';\n setTimeout(() => { this._editingTitleEl.focus(); this._editingTitleEl.select(); }, 20);\n }\n _positionTitleEditor() {\n if (this._editingTitle === -1 || !this._editingTitleEl) return;\n const i = this._editingTitle;\n const cx = this.V.posX[i], cy = this.V.posY[i];\n const hw = this.V.sizeW[i] * 0.5, hh = this.V.sizeH[i] * 0.5;\n const tl = this._w2s(cx - hw, cy - hh);\n const dpr = window.devicePixelRatio || 1;\n this._editingTitleEl.style.left = (tl.x / dpr) + 'px';\n this._editingTitleEl.style.top = (tl.y / dpr - 32) + 'px';\n this._editingTitleEl.style.width = Math.max(120, this.V.sizeW[i] * this.cam.zoom / dpr) + 'px';\n }\n _stopEditingTitle() {\n if (this._editingTitle === -1) return;\n const v = this._editingTitleEl.value.trim();\n if (v) this.titles.set(this._editingTitle, v);\n else this.titles.delete(this._editingTitle);\n this._editingTitleEl.style.display = 'none';\n this._editingTitle = -1;\n this._emit('change');\n }\n _startEditingNote(idx) {\n this._editingNote = idx;\n if (!this._editingNoteEl) {\n const el = document.createElement('textarea');\n el.spellcheck = false;\n Object.assign(el.style, {\n position: 'absolute', resize: 'none', outline: 'none',\n border: '1px solid #f0b93a', borderRadius: '4px',\n padding: '8px 10px', fontFamily: 'Inter, ui-sans-serif',\n fontSize: '12px', lineHeight: '16px', zIndex: '300',\n });\n this.container.appendChild(el);\n el.addEventListener('blur', () => this._stopEditingNote());\n el.addEventListener('keydown', (e) => { if (e.code === 'Escape') el.blur(); });\n this._editingNoteEl = el;\n }\n this._positionNoteEditor();\n const n = this.notes[idx];\n this._editingNoteEl.style.background = n.color.fill;\n this._editingNoteEl.style.color = n.color.text;\n this._editingNoteEl.value = n.text;\n this._editingNoteEl.style.display = 'block';\n setTimeout(() => this._editingNoteEl.focus(), 20);\n }\n _positionNoteEditor() {\n if (this._editingNote === -1 || !this._editingNoteEl) return;\n const n = this.notes[this._editingNote];\n const tl = this._w2s(n.x, n.y);\n const dpr = window.devicePixelRatio || 1;\n this._editingNoteEl.style.left = (tl.x / dpr) + 'px';\n this._editingNoteEl.style.top = (tl.y / dpr) + 'px';\n this._editingNoteEl.style.width = (n.w * this.cam.zoom / dpr) + 'px';\n this._editingNoteEl.style.height = (n.h * this.cam.zoom / dpr) + 'px';\n }\n _stopEditingNote() {\n if (this._editingNote === -1) return;\n this.notes[this._editingNote].text = this._editingNoteEl.value;\n this._editingNoteEl.style.display = 'none';\n this._editingNote = -1;\n this._emit('change');\n }\n\n _showMenu(x, y, items) {\n this._hideMenu();\n const m = document.createElement('div');\n m.style.cssText = 'position:fixed;min-width:200px;padding:4px;background:#161b27;border:1px solid rgba(255,255,255,0.16);border-radius:8px;box-shadow:0 12px 32px rgba(0,0,0,0.45);z-index:99999;color:#e6edf3;font:13px/1.45 ui-sans-serif, system-ui, sans-serif;';\n for (const it of items) {\n if (it.sep) { const d = document.createElement('div'); d.style.cssText = 'height:1px;background:rgba(255,255,255,0.08);margin:4px;'; m.appendChild(d); continue; }\n const d = document.createElement('div');\n d.style.cssText = `padding:6px 10px;border-radius:6px;cursor:pointer;display:flex;justify-content:space-between;gap:12px;${it.danger ? 'color:#ffb4a4;' : ''}`;\n d.innerHTML = `<span>${escapeHtml(it.label)}</span>${it.kbd ? `<span style=\"color:#5a6577;font-family:ui-monospace,Consolas,monospace;font-size:11px;\">${escapeHtml(it.kbd)}</span>` : ''}`;\n d.onmouseenter = () => d.style.background = it.danger ? 'rgba(232,70,43,0.18)' : 'rgba(255,255,255,0.04)';\n d.onmouseleave = () => d.style.background = '';\n d.onclick = () => { it.fn(); this._hideMenu(); };\n m.appendChild(d);\n }\n m.style.left = Math.min(x, window.innerWidth - 220) + 'px';\n m.style.top = Math.min(y, window.innerHeight - 280) + 'px';\n document.body.appendChild(m);\n this._menuEl = m;\n setTimeout(() => {\n const off = (ev) => { if (!m.contains(ev.target)) { this._hideMenu(); document.removeEventListener('mousedown', off, true); } };\n document.addEventListener('mousedown', off, true);\n }, 0);\n }\n _hideMenu() { if (this._menuEl) { this._menuEl.remove(); this._menuEl = null; } }\n\n // ── Render loop ───────────────────────────────────────────────────────\n _loop() { this._render(); this._raf = requestAnimationFrame(() => this._loop()); }\n\n _render() {\n // Pan inertia.\n if (this._mode !== 'pan') {\n const v2 = this._panVel.x * this._panVel.x + this._panVel.y * this._panVel.y;\n if (v2 < 16) { this._panVel.x = 0; this._panVel.y = 0; }\n else {\n this.cam.x += this._panVel.x * (1/60); this.cam.y += this._panVel.y * (1/60);\n this._panVel.x *= 0.91; this._panVel.y *= 0.91;\n }\n }\n\n const ctx = this.ctx;\n if (this._hooks?.beforeRender?.length) this._runHook('beforeRender', ctx);\n if (this._gl) {\n ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);\n this._gl.render();\n } else {\n ctx.fillStyle = this.options.background;\n ctx.fillRect(0, 0, this.canvas.width, this.canvas.height);\n }\n this._drawGrid();\n this._drawFrames();\n this._drawNotes();\n this._refreshFocus();\n this._refreshPreview();\n this._positionTitleEditor();\n this._positionNoteEditor();\n this._drawDying();\n this._drawWaypoints();\n this._drawRemoteCursors();\n this._drawValueBubbles();\n if (this.options.minimap) this._drawMinimap();\n\n const n = this.w.nodeCount_(), m = this.w.edgeCount_();\n // Edges first.\n this._edgePhase = (this._edgePhase + (this.options.edgeFlowSpeed || 60) * (1 / 60)) % 1000;\n for (let i = 0; i < m; i++) {\n const a = this.V.edgeFromN[i], b = this.V.edgeToN[i];\n const ap = this._portWorld(a, 1, this.V.edgeFromP[i]);\n const bp = this._portWorld(b, 0, this.V.edgeToP[i]);\n let dim = false;\n if (this._focusedSet && (!this._focusedSet.has(a) || !this._focusedSet.has(b))) dim = true;\n if (this._hoveredEdge !== -1 && this._hoveredEdge !== i) dim = true;\n if (this._focusFrame !== -1 && !(this._isInsideFocusFrame(a) && this._isInsideFocusFrame(b))) dim = true;\n if (dim) ctx.globalAlpha = 0.18;\n this._currentEdgeIdx = i;\n this._drawEdge(ap, bp,\n this.colors.get(a) || this.kinds[this.V.kind[a]].color,\n this.colors.get(b) || this.kinds[this.V.kind[b]].color,\n this.V.edgeSel[i] !== 0, false, this.edgeLabels.get(i));\n ctx.globalAlpha = 1;\n }\n this._currentEdgeIdx = undefined;\n // Edge in-flight preview.\n // Show rejection toast briefly (auto-clear after expiry).\n if (this._flashReject && performance.now() - this._flashReject.t0 >= 1400) {\n this._flashReject = null;\n }\n if (this._flashReject && performance.now() - this._flashReject.t0 < 1400) {\n const r = this._flashReject;\n const sp = this._w2s(r.x, r.y);\n const ctx = this.ctx;\n const alpha = 1 - (performance.now() - r.t0) / 1400;\n ctx.save();\n ctx.globalAlpha = alpha;\n ctx.fillStyle = '#e8462b'; ctx.font = '600 12px Inter, ui-sans-serif';\n const tw = ctx.measureText(r.msg).width;\n const bx = sp.x - tw / 2 - 8, by = sp.y - 36, bw = tw + 16, bh = 22;\n ctx.fillStyle = '#1a0e0e';\n this._roundRect(bx, by, bw, bh, 4); ctx.fill();\n ctx.strokeStyle = '#e8462b'; ctx.lineWidth = 1.4;\n this._roundRect(bx, by, bw, bh, 4); ctx.stroke();\n ctx.fillStyle = '#e8462b';\n ctx.textAlign = 'center'; ctx.textBaseline = 'middle';\n ctx.fillText(r.msg, sp.x, by + bh / 2);\n ctx.restore();\n }\n if (this._mode === 'connecting' && this._edgeStart && this._edgeCursor) {\n const ap = this._portWorld(this._edgeStart.nodeId, 1, this._edgeStart.idx);\n this._drawEdge(ap, this._edgeCursor, '#8b95a7', '#8b95a7', false, true);\n }\n\n // Nodes — viewport culled via spatial grid for >300 nodes.\n const dpr = window.devicePixelRatio || 1;\n const halfW = this.canvas.width / (2 * this.cam.zoom);\n const halfH = this.canvas.height / (2 * this.cam.zoom);\n const viewMinX = -this.cam.x - halfW - 80, viewMaxX = -this.cam.x + halfW + 80;\n const viewMinY = -this.cam.y - halfH - 80, viewMaxY = -this.cam.y + halfH + 80;\n let order;\n if (n > 300) {\n const c = this.w.queryRect(viewMinX, viewMinY, viewMaxX, viewMaxY);\n order = Array.from(this.V.queryRes.subarray(0, c));\n } else {\n order = [];\n for (let i = 0; i < n; i++) order.push(i);\n }\n // Sort by z-order so bringToFront'd nodes paint last.\n order.sort((a, b) => {\n const za = this.zOrder.get(a) || 0, zb = this.zOrder.get(b) || 0;\n return za === zb ? a - b : za - zb;\n });\n for (const i of order) {\n const hw = this.V.sizeW[i] * 0.5, hh = this.V.sizeH[i] * 0.5;\n if (this.V.posX[i] + hw < viewMinX || this.V.posX[i] - hw > viewMaxX) continue;\n if (this.V.posY[i] + hh < viewMinY || this.V.posY[i] - hh > viewMaxY) continue;\n // Skip canvas render for HTML-overlay kinds (DOM handled separately).\n if (this.kinds[this.V.kind[i]].html) continue;\n if (this._nodeHiddenByCollapse(i)) continue;\n // Subflow / hovered-edge / focusedSet / reachable dimming.\n let dim = false;\n if (this._focusedSet && !this._focusedSet.has(i)) dim = true;\n if (this._reachableSet && !this._reachableSet.has(i)) dim = true;\n if (this._hoveredEdge !== -1) {\n const a = this.V.edgeFromN[this._hoveredEdge], b = this.V.edgeToN[this._hoveredEdge];\n if (i !== a && i !== b) dim = true;\n }\n if (this._focusFrame !== -1 && !this._isInsideFocusFrame(i)) dim = true;\n if (dim) ctx.globalAlpha = 0.22;\n // Pop-in animation.\n const popped = this._openPopAnim(i);\n if (this._gl) this._drawNodeOverlay(i); // GL handled body+border; only paint text/badges/ports/etc\n else this._drawNode(i);\n if (popped) ctx.restore();\n if (dim) ctx.globalAlpha = 1;\n }\n this._syncHTMLOverlays();\n this._drawMultiSelectBBox();\n this._drawMarquee();\n this._drawLasso();\n this._drawAlignGuides();\n this._drawResizeHandles();\n this._drawFrameHandles();\n void dpr;\n }\n\n _openPopAnim(i) {\n const at = this._nodeAddedAt.get(i);\n if (at === undefined) return false;\n const t = (performance.now() - at) / 280;\n if (t >= 1) { this._nodeAddedAt.delete(i); return false; }\n const e = 1 - Math.pow(1 - t, 3);\n const sp = this._w2s(this.V.posX[i], this.V.posY[i]);\n this.ctx.save();\n this.ctx.globalAlpha = e;\n this.ctx.translate(sp.x, sp.y);\n this.ctx.scale(0.85 + e * 0.15, 0.85 + e * 0.15);\n this.ctx.translate(-sp.x, -sp.y);\n return true;\n }\n\n _drawDying() {\n const now = performance.now();\n for (let i = this._dyingEdges.length - 1; i >= 0; i--) {\n const d = this._dyingEdges[i];\n const t = (now - d.t0) / 220;\n if (t >= 1) { this._dyingEdges.splice(i, 1); continue; }\n this.ctx.save();\n this.ctx.globalAlpha = (1 - t) * 0.7;\n this._drawEdge(d.ap, d.bp, d.colA, d.colB, false, true);\n this.ctx.restore();\n }\n for (let i = this._dyingNodes.length - 1; i >= 0; i--) {\n const d = this._dyingNodes[i];\n const t = (now - d.t0) / 220;\n if (t >= 1) { this._dyingNodes.splice(i, 1); continue; }\n const ease = 1 - Math.pow(1 - t, 3);\n const alpha = 1 - ease, scale = 1 - ease * 0.18;\n const hw = d.w * 0.5 * scale, hh = d.h * 0.5 * scale;\n const tl = this._w2s(d.x - hw, d.y - hh);\n const sw = d.w * scale * this.cam.zoom, sh = d.h * scale * this.cam.zoom;\n this.ctx.save();\n this.ctx.globalAlpha = alpha;\n this.ctx.fillStyle = '#161b27';\n this._shapePath(d.shape, tl.x, tl.y, sw, sh);\n this.ctx.fill();\n this.ctx.strokeStyle = alphaize(d.color, 0.6);\n this.ctx.lineWidth = 1.4 * this.cam.zoom;\n this._shapePath(d.shape, tl.x, tl.y, sw, sh);\n this.ctx.stroke();\n this.ctx.restore();\n }\n }\n\n _drawMultiSelectBBox() {\n if (this._mode !== 'idle') return;\n const sel = this.getSelection();\n if (sel.length < 2) return;\n let mnx = Infinity, mxx = -Infinity, mny = Infinity, mxy = -Infinity;\n for (const i of sel) {\n const hw = this.V.sizeW[i] * 0.5, hh = this.V.sizeH[i] * 0.5;\n if (this.V.posX[i] - hw < mnx) mnx = this.V.posX[i] - hw;\n if (this.V.posX[i] + hw > mxx) mxx = this.V.posX[i] + hw;\n if (this.V.posY[i] - hh < mny) mny = this.V.posY[i] - hh;\n if (this.V.posY[i] + hh > mxy) mxy = this.V.posY[i] + hh;\n }\n const pad = 10;\n const a = this._w2s(mnx - pad, mny - pad), b = this._w2s(mxx + pad, mxy + pad);\n this.ctx.strokeStyle = 'rgba(240,185,58,0.55)';\n this.ctx.lineWidth = 1.2;\n this.ctx.setLineDash([5, 4]);\n this.ctx.strokeRect(a.x, a.y, b.x - a.x, b.y - a.y);\n this.ctx.setLineDash([]);\n }\n\n _drawLasso() {\n if (!this._lasso || this._lasso.length < 2) return;\n this.ctx.strokeStyle = 'rgba(192,98,232,0.85)';\n this.ctx.fillStyle = 'rgba(192,98,232,0.10)';\n this.ctx.lineWidth = 1.4;\n this.ctx.setLineDash([4, 4]);\n this.ctx.beginPath();\n const first = this._w2s(this._lasso[0].x, this._lasso[0].y);\n this.ctx.moveTo(first.x, first.y);\n for (let i = 1; i < this._lasso.length; i++) {\n const p = this._w2s(this._lasso[i].x, this._lasso[i].y);\n this.ctx.lineTo(p.x, p.y);\n }\n this.ctx.closePath();\n this.ctx.fill(); this.ctx.stroke();\n this.ctx.setLineDash([]);\n }\n\n _drawFrames() {\n for (let fi = 0; fi < this.frames.length; fi++) {\n const f = this.frames[fi];\n const collapsed = this.frameCollapsed.has(fi);\n const tl = this._w2s(f.x, f.y);\n const sw = f.w * this.cam.zoom;\n const sh = (collapsed ? 26 : f.h) * this.cam.zoom;\n this.ctx.fillStyle = alphaize(f.color, 0.05);\n this._roundRect(tl.x, tl.y, sw, sh, 12 * this.cam.zoom);\n this.ctx.fill();\n this.ctx.strokeStyle = alphaize(f.color, 0.45);\n this.ctx.lineWidth = 1.4 * this.cam.zoom;\n this.ctx.setLineDash([8 * this.cam.zoom, 4 * this.cam.zoom]);\n this._roundRect(tl.x, tl.y, sw, sh, 12 * this.cam.zoom);\n this.ctx.stroke();\n this.ctx.setLineDash([]);\n const hH = 26 * this.cam.zoom;\n this.ctx.save();\n this._roundRect(tl.x, tl.y, sw, sh, 12 * this.cam.zoom);\n this.ctx.clip();\n this.ctx.fillStyle = alphaize(f.color, 0.16);\n this.ctx.fillRect(tl.x, tl.y, sw, hH);\n this.ctx.restore();\n if (this.cam.zoom > 0.4) {\n this.ctx.fillStyle = f.color;\n this.ctx.font = `600 ${12 * this.cam.zoom}px Inter, ui-sans-serif`;\n this.ctx.textBaseline = 'middle';\n this.ctx.textAlign = 'left';\n const chev = collapsed ? '▸' : '▾';\n this.ctx.fillText(`${chev} ${f.label}`, tl.x + 10 * this.cam.zoom, tl.y + hH * 0.5);\n }\n }\n }\n _drawFrameHandles() {\n for (const f of this.frames) {\n const tl = this._w2s(f.x, f.y);\n const br = this._w2s(f.x + f.w, f.y + f.h);\n const s = 6 * this.cam.zoom;\n this.ctx.fillStyle = f.color;\n for (const [x, y] of [[tl.x, tl.y], [br.x, tl.y], [tl.x, br.y], [br.x, br.y]]) {\n this.ctx.fillRect(x - s / 2, y - s / 2, s, s);\n }\n }\n }\n\n _drawNotes() {\n for (const n of this.notes) {\n const tl = this._w2s(n.x, n.y);\n const sw = n.w * this.cam.zoom, sh = n.h * this.cam.zoom;\n this.ctx.save();\n this.ctx.shadowColor = 'rgba(0,0,0,0.4)';\n this.ctx.shadowBlur = 12 * this.cam.zoom;\n this.ctx.shadowOffsetY = 4 * this.cam.zoom;\n this.ctx.fillStyle = n.color.fill;\n this._roundRect(tl.x, tl.y, sw, sh, 4 * this.cam.zoom);\n this.ctx.fill();\n this.ctx.restore();\n this.ctx.strokeStyle = n.color.border;\n this.ctx.lineWidth = 1 * this.cam.zoom;\n this._roundRect(tl.x, tl.y, sw, sh, 4 * this.cam.zoom);\n this.ctx.stroke();\n if (this.cam.zoom > 0.4 && n.text) {\n this.ctx.fillStyle = n.color.text;\n this.ctx.font = `500 ${12 * this.cam.zoom}px Inter, ui-sans-serif`;\n this.ctx.textBaseline = 'top';\n this.ctx.textAlign = 'left';\n const lineH = 16 * this.cam.zoom;\n const padX = 10 * this.cam.zoom, padY = 8 * this.cam.zoom;\n const maxW = sw - padX * 2;\n let ty = tl.y + padY;\n for (const para of n.text.split('\\n')) {\n const words = para.split(/\\s+/);\n let line = '';\n for (const word of words) {\n const test = line ? line + ' ' + word : word;\n if (this.ctx.measureText(test).width > maxW && line) {\n this.ctx.fillText(line, tl.x + padX, ty); ty += lineH; line = word;\n if (ty > tl.y + sh - lineH) break;\n } else line = test;\n }\n if (line && ty < tl.y + sh - lineH * 0.5) { this.ctx.fillText(line, tl.x + padX, ty); ty += lineH; }\n }\n }\n }\n }\n\n // ── Path-highlight focus ──────────────────────────────────────────────\n _refreshFocus() {\n if (!this._pathHighlightEnabled) { this._focusedSet = null; return; }\n if (this._mode !== 'idle' || this._hoveredNode < 0) { this._focusedSet = null; this._lastFocusComputed = -2; return; }\n if (performance.now() - this._hoveredNodeSince < 200) return;\n if (this._hoveredNode === this._lastFocusComputed) return;\n const reach = new Set([this._hoveredNode]);\n const queue = [this._hoveredNode];\n const m = this.w.edgeCount_();\n while (queue.length) {\n const u = queue.shift();\n for (let i = 0; i < m; i++) {\n if (this.V.edgeFromN[i] === u && !reach.has(this.V.edgeToN[i])) { reach.add(this.V.edgeToN[i]); queue.push(this.V.edgeToN[i]); }\n if (this.V.edgeToN[i] === u && !reach.has(this.V.edgeFromN[i])) { reach.add(this.V.edgeFromN[i]); queue.push(this.V.edgeFromN[i]); }\n }\n }\n this._focusedSet = reach;\n this._lastFocusComputed = this._hoveredNode;\n }\n\n // ── Hover preview popover ────────────────────────────────────────────\n _refreshPreview() {\n if (!this.options.hoverPreview) { this._hidePreview(); return; }\n if (this._mode !== 'idle' || this._hoveredNode < 0) { this._hidePreview(); return; }\n if (performance.now() - this._hoveredNodeSince < 600) return;\n if (this._previewedNode === this._hoveredNode) { this._positionPreview(this._hoveredNode); return; }\n this._showPreview(this._hoveredNode);\n this._previewedNode = this._hoveredNode;\n }\n _showPreview(id) {\n if (!this._previewEl) {\n const el = document.createElement('div');\n el.style.cssText = 'position:absolute;width:260px;padding:12px 14px;background:#161b27;border:1px solid rgba(255,255,255,0.16);border-radius:8px;box-shadow:0 12px 32px rgba(0,0,0,0.45);color:#e6edf3;font:13px/1.45 ui-sans-serif, system-ui, sans-serif;pointer-events:none;opacity:0;transition:opacity 140ms;z-index:200;';\n this.container.appendChild(el);\n this._previewEl = el;\n }\n const cat = this.kinds[this.V.kind[id]];\n const title = this.titles.get(id) || cat.name;\n const desc = this.descriptions.get(id);\n const tags = this.tags.get(id) || [];\n const status = this.status.get(id);\n const progress = this.progress.get(id);\n const parts = [\n `<div style=\"display:flex;align-items:center;gap:8px;padding-bottom:8px;margin-bottom:8px;border-bottom:1px solid rgba(255,255,255,0.08);\">\n <span style=\"width:24px;height:24px;border-radius:5px;background:${alphaize(cat.color, 0.18)};color:${cat.color};display:grid;place-items:center;font:700 12px Inter\">${this.icon.get(id) || cat.badge}</span>\n <div><div style=\"font-weight:600\">${escapeHtml(title)}</div><div style=\"color:#8b95a7;font-family:ui-monospace,Consolas,monospace;font-size:11px;\">#${id} · ${cat.name}</div></div>\n </div>`,\n ];\n if (desc) parts.push(`<div style=\"font-size:12px;color:#8b95a7;margin-bottom:8px;\">${escapeHtml(desc)}</div>`);\n if (status || progress !== undefined) {\n const bits = [];\n if (status) bits.push(`<span style=\"padding:2px 7px;border-radius:10px;background:rgba(255,255,255,0.06);\">${status}</span>`);\n if (progress !== undefined) bits.push(`<span style=\"padding:2px 7px;border-radius:10px;background:rgba(255,255,255,0.06);\">${Math.round(progress * 100)}%</span>`);\n parts.push(`<div style=\"display:flex;gap:6px;margin-bottom:8px;font-size:11px;\">${bits.join('')}</div>`);\n }\n if (tags.length) parts.push(`<div style=\"display:flex;flex-wrap:wrap;gap:4px;\">${tags.map((t) => `<span style=\"font-size:10.5px;padding:2px 7px;border-radius:3px;background:${alphaize(cat.color, 0.18)};color:${cat.color};\">${escapeHtml(t)}</span>`).join('')}</div>`);\n this._previewEl.innerHTML = parts.join('');\n this._positionPreview(id);\n this._previewEl.style.opacity = '1';\n }\n _positionPreview(id) {\n if (!this._previewEl) return;\n const cx = this.V.posX[id], cy = this.V.posY[id];\n const hw = this.V.sizeW[id] * 0.5, hh = this.V.sizeH[id] * 0.5;\n const tr = this._w2s(cx + hw, cy - hh), tl = this._w2s(cx - hw, cy - hh);\n const cr = this.container.getBoundingClientRect();\n const dpr = window.devicePixelRatio || 1;\n let lx = tr.x / dpr + 12, ty = tr.y / dpr;\n if (lx + 280 > cr.width) lx = tl.x / dpr - 280 - 12;\n if (lx < 8) lx = 8;\n this._previewEl.style.left = lx + 'px';\n this._previewEl.style.top = Math.max(8, ty) + 'px';\n }\n _hidePreview() {\n if (this._previewEl) this._previewEl.style.opacity = '0';\n this._previewedNode = -1;\n }\n\n // ── HTML overlay nodes ────────────────────────────────────────────────\n _syncHTMLOverlays() {\n const seen = new Set();\n const n = this.w.nodeCount_();\n for (let i = 0; i < n; i++) {\n const cat = this.kinds[this.V.kind[i]];\n if (!cat.html) continue;\n seen.add(i);\n let el = this._htmlOverlays.get(i);\n if (!el) {\n el = document.createElement('div');\n el.className = 'zflow-html-node';\n el.style.cssText = 'position:absolute;border:1px solid rgba(255,255,255,0.16);border-radius:8px;background:#161b27;color:#e6edf3;overflow:hidden;font-family:Inter, ui-sans-serif;font-size:12px;transform-origin:top left;';\n // cat.template comes from the plugin author who registered the kind —\n // treat as trusted. cat.name passes through escape to be safe.\n el.innerHTML = cat.template || `<div style=\"padding:8px;\">${escapeHtml(cat.name)} #${i}</div>`;\n this.container.appendChild(el);\n this._htmlOverlays.set(i, el);\n }\n const cx = this.V.posX[i], cy = this.V.posY[i];\n const hw = this.V.sizeW[i] * 0.5, hh = this.V.sizeH[i] * 0.5;\n const tl = this._w2s(cx - hw, cy - hh);\n const dpr = window.devicePixelRatio || 1;\n el.style.left = (tl.x / dpr) + 'px';\n el.style.top = (tl.y / dpr) + 'px';\n el.style.width = (this.V.sizeW[i] * this.cam.zoom / dpr) + 'px';\n el.style.height = (this.V.sizeH[i] * this.cam.zoom / dpr) + 'px';\n }\n for (const [id, el] of this._htmlOverlays) {\n if (!seen.has(id)) { el.remove(); this._htmlOverlays.delete(id); }\n }\n }\n\n _drawGrid() {\n const ctx = this.ctx;\n const step = 40 * this.cam.zoom;\n if (step < 6) return;\n const cx = this.canvas.width / 2 + this.cam.x * this.cam.zoom;\n const cy = this.canvas.height / 2 + this.cam.y * this.cam.zoom;\n const startX = cx - Math.ceil(cx / step) * step;\n const startY = cy - Math.ceil(cy / step) * step;\n ctx.fillStyle = this.options.snapToGrid ? 'rgba(240,185,58,0.10)' : 'rgba(255,255,255,0.045)';\n const dpr = window.devicePixelRatio || 1;\n for (let x = startX; x < this.canvas.width; x += step) {\n for (let y = startY; y < this.canvas.height; y += step) {\n ctx.fillRect(x, y, 1.4 * dpr, 1.4 * dpr);\n }\n }\n }\n\n _drawMarquee() {\n if (!this._marquee) return;\n const a = this._w2s(this._marquee.x0, this._marquee.y0);\n const b = this._w2s(this._marquee.x1, this._marquee.y1);\n const x = Math.min(a.x, b.x), y = Math.min(a.y, b.y);\n const w = Math.abs(b.x - a.x), h = Math.abs(b.y - a.y);\n const ctx = this.ctx;\n ctx.fillStyle = 'rgba(240,185,58,0.10)';\n ctx.fillRect(x, y, w, h);\n ctx.strokeStyle = 'rgba(240,185,58,0.7)';\n ctx.setLineDash([4, 4]);\n ctx.lineWidth = 1.2;\n ctx.strokeRect(x, y, w, h);\n ctx.setLineDash([]);\n }\n\n _drawAlignGuides() {\n if (!this._alignGuides) return;\n const ctx = this.ctx;\n ctx.strokeStyle = 'rgba(192,98,232,0.85)';\n ctx.lineWidth = 1.2;\n ctx.setLineDash([2, 4]);\n for (const g of this._alignGuides.v) {\n const x = this._w2s(g, 0).x;\n ctx.beginPath(); ctx.moveTo(x, 0); ctx.lineTo(x, this.canvas.height); ctx.stroke();\n }\n for (const g of this._alignGuides.h) {\n const y = this._w2s(0, g).y;\n ctx.beginPath(); ctx.moveTo(0, y); ctx.lineTo(this.canvas.width, y); ctx.stroke();\n }\n ctx.setLineDash([]);\n }\n\n _drawResizeHandles() {\n if (this._mode !== 'idle') return;\n const sel = this.getSelection();\n if (sel.length !== 1) return;\n const id = sel[0];\n const cx = this.V.posX[id], cy = this.V.posY[id];\n const hw = this.V.sizeW[id] * 0.5, hh = this.V.sizeH[id] * 0.5;\n const pts = {\n tl: {x: cx-hw, y: cy-hh}, t: {x: cx, y: cy-hh}, tr: {x: cx+hw, y: cy-hh},\n r: {x: cx+hw, y: cy},\n br: {x: cx+hw, y: cy+hh}, b: {x: cx, y: cy+hh}, bl: {x: cx-hw, y: cy+hh},\n l: {x: cx-hw, y: cy},\n };\n const ctx = this.ctx;\n const s = 4 * this.cam.zoom;\n ctx.fillStyle = '#f0b93a';\n ctx.strokeStyle = '#07090f';\n ctx.lineWidth = 1 * this.cam.zoom;\n for (const c of HANDLE_CORNERS) {\n const sp = this._w2s(pts[c].x, pts[c].y);\n ctx.beginPath();\n ctx.rect(sp.x - s, sp.y - s, s * 2, s * 2);\n ctx.fill(); ctx.stroke();\n }\n }\n\n _portWorld(nodeId, side, idx) {\n const cx = this.V.posX[nodeId], cy = this.V.posY[nodeId];\n const hw = this.V.sizeW[nodeId] * 0.5, hh = this.V.sizeH[nodeId] * 0.5;\n const total = side === 0 ? this.V.nIn[nodeId] : this.V.nOut[nodeId];\n const t = (idx + 1) / (total + 1);\n const py = cy - hh + this.V.sizeH[nodeId] * t;\n return { x: side === 0 ? cx - hw : cx + hw, y: py };\n }\n\n _orthoPath(p1, p2) {\n const minOff = 30, dx = p2.x - p1.x;\n if (dx > 2 * minOff) {\n const midX = (p1.x + p2.x) / 2;\n return [p1, { x: midX, y: p1.y }, { x: midX, y: p2.y }, p2];\n }\n const midY = (p1.y + p2.y) / 2;\n return [p1, { x: p1.x + minOff, y: p1.y }, { x: p1.x + minOff, y: midY },\n { x: p2.x - minOff, y: midY }, { x: p2.x - minOff, y: p2.y }, p2];\n }\n\n _drawEdge(ap, bp, colA, colB, selected, preview, label) {\n const as = this._w2s(ap.x, ap.y), bs = this._w2s(bp.x, bp.y);\n const ctx = this.ctx;\n const grad = ctx.createLinearGradient(as.x, as.y, bs.x, bs.y);\n grad.addColorStop(0, colA); grad.addColorStop(1, colB);\n const isActive = this._currentEdgeIdx !== undefined && this._activeEdges.has(this._currentEdgeIdx) &&\n this._activeEdges.get(this._currentEdgeIdx) > performance.now();\n ctx.strokeStyle = selected ? '#f0b93a' : isActive ? '#5b8def' : (preview ? '#8b95a7' : grad);\n ctx.lineWidth = (selected ? 2.4 : isActive ? 3.0 : 1.6) * this.cam.zoom;\n if (isActive) { ctx.shadowColor = '#5b8def'; ctx.shadowBlur = 10 * this.cam.zoom; }\n ctx.lineJoin = 'round';\n let midPt;\n if (this.options.edgeStyle === 'orthogonal') {\n const path = this._orthoPath(as, bs);\n ctx.beginPath();\n ctx.moveTo(path[0].x, path[0].y);\n for (let i = 1; i < path.length; i++) ctx.lineTo(path[i].x, path[i].y);\n ctx.stroke();\n midPt = path[Math.floor(path.length / 2)];\n } else {\n const dxe = bs.x - as.x, dye = bs.y - as.y;\n const off = Math.max(50, Math.abs(dxe) * 0.5 + Math.abs(dye) * 0.4);\n ctx.beginPath();\n ctx.moveTo(as.x, as.y);\n ctx.bezierCurveTo(as.x + off, as.y, bs.x - off, bs.y, bs.x, bs.y);\n ctx.stroke();\n midPt = bezPt(0.5, as.x, as.y, as.x + off, as.y, bs.x - off, bs.y, bs.x, bs.y);\n }\n // Flow particles (set per-edge via setEdgeAnimated or globally).\n if (!preview && this._currentEdgeIdx !== undefined && this.animatedEdges.has(this._currentEdgeIdx)) {\n const N = 4;\n for (let k = 0; k < N; k++) {\n const t = ((this._edgePhase / 1000) + k / N) % 1;\n let p;\n if (this.options.edgeStyle === 'orthogonal') {\n const dxe = bs.x - as.x, dye = bs.y - as.y;\n const off = Math.max(50, Math.abs(dxe) * 0.5 + Math.abs(dye) * 0.4);\n p = bezPt(t, as.x, as.y, as.x + off, as.y, bs.x - off, bs.y, bs.x, bs.y);\n } else {\n const dxe = bs.x - as.x, dye = bs.y - as.y;\n const off = Math.max(50, Math.abs(dxe) * 0.5 + Math.abs(dye) * 0.4);\n p = bezPt(t, as.x, as.y, as.x + off, as.y, bs.x - off, bs.y, bs.x, bs.y);\n }\n ctx.fillStyle = colB;\n ctx.beginPath(); ctx.arc(p.x, p.y, 3.2 * this.cam.zoom, 0, Math.PI * 2); ctx.fill();\n }\n }\n // Edge label badge.\n if (!preview && label && this.cam.zoom > 0.45) {\n ctx.font = `600 ${10.5 * this.cam.zoom}px ui-monospace, Consolas, monospace`;\n const tw = ctx.measureText(label).width;\n const pad = 5 * this.cam.zoom;\n const bw = tw + pad * 2;\n const bh = 16 * this.cam.zoom;\n ctx.fillStyle = '#0b0f17';\n this._roundRect(midPt.x - bw / 2, midPt.y - bh / 2, bw, bh, 5 * this.cam.zoom);\n ctx.fill();\n ctx.strokeStyle = selected ? '#f0b93a' : alphaize(colA, 0.6);\n ctx.lineWidth = 1 * this.cam.zoom;\n ctx.stroke();\n ctx.fillStyle = '#e6edf3';\n ctx.textAlign = 'center'; ctx.textBaseline = 'middle';\n ctx.fillText(label, midPt.x, midPt.y);\n }\n }\n\n /** Slim overlay: only paints what WebGL didn't, with LOD gating. */\n _drawNodeOverlay(i) {\n const z = this.cam.zoom;\n // LOD: below 0.3 zoom (or with >5k nodes far out) skip text + ports entirely.\n if (z < 0.25) return;\n if (this.w.nodeCount_() > 5000 && z < 0.55) return;\n const cx = this.V.posX[i], cy = this.V.posY[i];\n const hw = this.V.sizeW[i] * 0.5, hh = this.V.sizeH[i] * 0.5;\n const tl = this._w2s(cx - hw, cy - hh);\n const sw = this.V.sizeW[i] * z;\n const sh = this.V.sizeH[i] * z;\n const cat = this.kinds[this.V.kind[i]];\n const color = this.colors.get(i) || cat.color;\n const ctx = this.ctx;\n if (z > 0.4) {\n const title = this.titles.get(i) || cat.name;\n ctx.font = `600 ${12 * z}px Inter, ui-sans-serif`;\n ctx.fillStyle = '#0b0f17';\n ctx.textAlign = 'center'; ctx.textBaseline = 'middle';\n ctx.fillText(title, tl.x + sw / 2, tl.y + 11 * z);\n }\n // Ports only when zoom is decent.\n if (z > 0.35) {\n for (let s = 0; s < 2; s++) {\n const count = s === 0 ? this.V.nIn[i] : this.V.nOut[i];\n for (let p = 0; p < count; p++) {\n const wp = this._portWorld(i, s, p);\n const sp = this._w2s(wp.x, wp.y);\n ctx.fillStyle = color;\n ctx.strokeStyle = '#07090f';\n ctx.lineWidth = 1.5 * z;\n ctx.beginPath(); ctx.arc(sp.x, sp.y, 4.5 * z, 0, Math.PI * 2);\n ctx.fill(); ctx.stroke();\n }\n }\n }\n if (this.breakpoints.has(i)) {\n ctx.fillStyle = '#e8462b';\n ctx.beginPath(); ctx.arc(tl.x - 4 * z, tl.y + sh / 2, 4.5 * z, 0, Math.PI * 2); ctx.fill();\n }\n }\n\n _drawNode(i) {\n const cx = this.V.posX[i], cy = this.V.posY[i];\n const hw = this.V.sizeW[i] * 0.5, hh = this.V.sizeH[i] * 0.5;\n const tl = this._w2s(cx - hw, cy - hh);\n const sw = this.V.sizeW[i] * this.cam.zoom;\n const sh = this.V.sizeH[i] * this.cam.zoom;\n const cat = this.kinds[this.V.kind[i]];\n const color = this.colors.get(i) || cat.color;\n const sel = this.V.selected[i] !== 0;\n const hov = this._hoveredNode === i && this._mode === 'idle';\n const ctx = this.ctx;\n\n // Body shadow + fill.\n ctx.save();\n ctx.shadowColor = 'rgba(0,0,0,0.45)';\n ctx.shadowBlur = (hov ? 14 : 10) * this.cam.zoom;\n ctx.shadowOffsetY = 4 * this.cam.zoom;\n ctx.fillStyle = '#161b27';\n this._shapePath(cat.shape, tl.x, tl.y, sw, sh);\n ctx.fill();\n ctx.restore();\n\n // Header strip (rect kinds only).\n if (cat.shape === 'rect') {\n ctx.save();\n this._shapePath(cat.shape, tl.x, tl.y, sw, sh);\n ctx.clip();\n ctx.fillStyle = color;\n ctx.fillRect(tl.x, tl.y, sw, 22 * this.cam.zoom);\n ctx.restore();\n }\n\n // Running pulse — strong blue glow while exec is in flight.\n if (this.status.get(i) === 'running') {\n const pulse = 0.5 + 0.5 * Math.sin(performance.now() / 180);\n ctx.save();\n ctx.shadowColor = '#5b8def';\n ctx.shadowBlur = (18 + 14 * pulse) * this.cam.zoom;\n ctx.strokeStyle = `rgba(91,141,239,${0.6 + 0.4 * pulse})`;\n ctx.lineWidth = (2.2 + pulse) * this.cam.zoom;\n this._shapePath(cat.shape, tl.x - 2, tl.y - 2, sw + 4, sh + 4);\n ctx.stroke();\n ctx.restore();\n }\n\n // Border / selection.\n if (sel) {\n ctx.save();\n ctx.shadowColor = 'rgba(240,185,58,0.55)';\n ctx.shadowBlur = 14 * this.cam.zoom;\n ctx.strokeStyle = '#f0b93a'; ctx.lineWidth = 1.6 * this.cam.zoom;\n this._shapePath(cat.shape, tl.x, tl.y, sw, sh); ctx.stroke();\n ctx.restore();\n } else {\n ctx.strokeStyle = hov ? alphaize(color, 0.55) : 'rgba(255,255,255,0.08)';\n ctx.lineWidth = (hov ? 1.3 : 1) * this.cam.zoom;\n this._shapePath(cat.shape, tl.x, tl.y, sw, sh); ctx.stroke();\n }\n\n // Title.\n if (this.cam.zoom > 0.42) {\n const title = this.titles.get(i) || `${cat.name} #${i}`;\n ctx.textBaseline = 'middle';\n ctx.font = `600 ${11 * this.cam.zoom}px Inter, ui-sans-serif`;\n if (cat.shape === 'rect') {\n ctx.fillStyle = '#0b0f17'; ctx.textAlign = 'left';\n ctx.fillText(title, tl.x + 10 * this.cam.zoom, tl.y + 11 * this.cam.zoom);\n } else {\n ctx.fillStyle = color; ctx.textAlign = 'center';\n ctx.fillText(title, tl.x + sw / 2, tl.y + sh / 2);\n }\n }\n\n\n // Progress bar (bottom).\n const prog = this.progress.get(i);\n if (prog !== undefined && prog > 0) {\n const barH = 3 * this.cam.zoom;\n const barY = tl.y + sh - barH - 2 * this.cam.zoom;\n const barX = tl.x + 8 * this.cam.zoom;\n const barW = sw - 16 * this.cam.zoom;\n ctx.fillStyle = 'rgba(255,255,255,0.06)';\n ctx.fillRect(barX, barY, barW, barH);\n ctx.fillStyle = color;\n ctx.fillRect(barX, barY, barW * Math.min(1, Math.max(0, prog)), barH);\n }\n\n // Tags.\n const tags = this.tags.get(i);\n if (tags && tags.length && this.cam.zoom > 0.5) {\n let tx = tl.x + 8 * this.cam.zoom;\n const ty = tl.y + sh - 24 * this.cam.zoom;\n ctx.font = `500 ${9 * this.cam.zoom}px Inter, ui-sans-serif`;\n ctx.textBaseline = 'middle';\n for (const tag of tags) {\n const wText = ctx.measureText(tag).width;\n const w0 = wText + 10 * this.cam.zoom;\n if (tx + w0 > tl.x + sw - 8 * this.cam.zoom) break;\n ctx.fillStyle = alphaize(color, 0.18);\n this._roundRect(tx, ty, w0, 14 * this.cam.zoom, 3 * this.cam.zoom);\n ctx.fill();\n ctx.fillStyle = color;\n ctx.textAlign = 'left';\n ctx.fillText(tag, tx + 5 * this.cam.zoom, ty + 7 * this.cam.zoom);\n tx += w0 + 4 * this.cam.zoom;\n }\n }\n\n // Sparkline (live metric).\n const m = this.metrics.get(i);\n if (m && m.count > 1 && cat.shape === 'rect' && this.cam.zoom > 0.45) {\n const max = this.metricMax.get(i) || 1;\n const px = tl.x + 8 * this.cam.zoom, py = tl.y + sh - 22 * this.cam.zoom;\n const pw = sw - 16 * this.cam.zoom, ph = 16 * this.cam.zoom;\n ctx.strokeStyle = alphaize(color, 0.85);\n ctx.lineWidth = 1.5 * this.cam.zoom;\n ctx.beginPath();\n for (let k = 0; k < m.count; k++) {\n const v = m.data[(m.idx + this._metricCap - m.count + k) % this._metricCap];\n const xx = px + (k / Math.max(1, m.count - 1)) * pw;\n const yy = py + ph - (Math.min(Math.max(v / max, 0), 1)) * ph;\n if (k === 0) ctx.moveTo(xx, yy); else ctx.lineTo(xx, yy);\n }\n ctx.stroke();\n }\n\n // Breakpoint indicator (red filled circle on left edge).\n if (this.breakpoints.has(i)) {\n const bx = tl.x - 4 * this.cam.zoom, by = tl.y + sh / 2;\n ctx.save();\n ctx.shadowColor = '#e8462b'; ctx.shadowBlur = 8 * this.cam.zoom;\n ctx.fillStyle = '#e8462b';\n ctx.beginPath(); ctx.arc(bx, by, 4.5 * this.cam.zoom, 0, Math.PI * 2); ctx.fill();\n ctx.restore();\n }\n\n // Status dot (top-right of header).\n const st = this.status.get(i);\n if (st && cat.shape === 'rect') {\n const sCol = STATUS_COLORS[st] || '#8b95a7';\n const dotX = tl.x + sw - 12 * this.cam.zoom;\n const dotY = tl.y + 11 * this.cam.zoom;\n ctx.save();\n ctx.shadowColor = sCol; ctx.shadowBlur = 6 * this.cam.zoom;\n ctx.fillStyle = sCol;\n ctx.beginPath(); ctx.arc(dotX, dotY, 3.5 * this.cam.zoom, 0, Math.PI * 2); ctx.fill();\n ctx.restore();\n }\n\n // Locked indicator (small lock glyph top-left).\n if (this.locked.has(i)) {\n const lx = tl.x + 6 * this.cam.zoom, ly = tl.y + 6 * this.cam.zoom;\n const lz = 10 * this.cam.zoom;\n ctx.fillStyle = 'rgba(0,0,0,0.55)';\n this._roundRect(lx, ly, lz, lz, 2 * this.cam.zoom); ctx.fill();\n ctx.strokeStyle = '#f0b93a'; ctx.lineWidth = 1.2 * this.cam.zoom;\n ctx.strokeRect(lx + 2.5 * this.cam.zoom, ly + 5 * this.cam.zoom, lz - 5 * this.cam.zoom, lz - 6 * this.cam.zoom);\n ctx.beginPath();\n ctx.arc(lx + lz * 0.5, ly + 5 * this.cam.zoom, 2 * this.cam.zoom, Math.PI, 0);\n ctx.stroke();\n }\n\n // Image thumbnail (top of body).\n const imgUrl = this.image.get(i);\n if (imgUrl && cat.shape === 'rect' && this.cam.zoom > 0.5) {\n const img = this._getImage(imgUrl);\n if (img && img.ready) {\n const ix = tl.x + 8 * this.cam.zoom;\n const iy = tl.y + 28 * this.cam.zoom;\n const iw = sw - 16 * this.cam.zoom;\n const ih = Math.min(54 * this.cam.zoom, sh * 0.45);\n ctx.save();\n this._roundRect(ix, iy, iw, ih, 4 * this.cam.zoom);\n ctx.clip();\n ctx.drawImage(img.img, ix, iy, iw, ih);\n ctx.restore();\n }\n }\n\n // Inline markdown description (one line, runs).\n const desc = this.descriptions.get(i);\n if (desc && cat.shape === 'rect' && this.cam.zoom > 0.5 && !imgUrl) {\n const runs = this.options.inlineMarkdown !== false ? parseInlineMd(desc) : [{ t: desc, style: 'p' }];\n let dx = tl.x + 8 * this.cam.zoom;\n const dyy = tl.y + 44 * this.cam.zoom;\n ctx.font = `400 ${10 * this.cam.zoom}px Inter, ui-sans-serif`;\n ctx.textBaseline = 'top';\n const maxX = tl.x + sw - 8 * this.cam.zoom;\n for (const run of runs) {\n let f = `${10 * this.cam.zoom}px `;\n if (run.style === 'b') f = `700 ${10 * this.cam.zoom}px Inter, ui-sans-serif`;\n else if (run.style === 'i') f = `italic 400 ${10 * this.cam.zoom}px Inter, ui-sans-serif`;\n else if (run.style === 'c') f = `${10 * this.cam.zoom}px ui-monospace, Consolas, monospace`;\n else if (run.style === 'a') f = `400 ${10 * this.cam.zoom}px Inter, ui-sans-serif`;\n else f = `400 ${10 * this.cam.zoom}px Inter, ui-sans-serif`;\n ctx.font = f;\n ctx.fillStyle = run.style === 'a' ? '#5be0d0' : run.style === 'c' ? '#f0b93a' : '#c8d1de';\n const tw = ctx.measureText(run.t).width;\n if (dx + tw > maxX) break;\n ctx.fillText(run.t, dx, dyy);\n dx += tw;\n }\n }\n\n // Search hit glow.\n if (this._searchHits && this._searchHits.includes(i)) {\n ctx.save();\n ctx.shadowColor = '#5be0d0';\n ctx.shadowBlur = 18 * this.cam.zoom;\n ctx.strokeStyle = '#5be0d0';\n ctx.lineWidth = 1.6 * this.cam.zoom;\n this._shapePath(cat.shape, tl.x - 3, tl.y - 3, sw + 6, sh + 6);\n ctx.stroke();\n ctx.restore();\n }\n\n // Ports.\n for (let s = 0; s < 2; s++) {\n const count = s === 0 ? this.V.nIn[i] : this.V.nOut[i];\n for (let p = 0; p < count; p++) {\n const wp = this._portWorld(i, s, p);\n const sp = this._w2s(wp.x, wp.y);\n ctx.fillStyle = color;\n ctx.strokeStyle = '#07090f';\n ctx.lineWidth = 1.5 * this.cam.zoom;\n ctx.beginPath(); ctx.arc(sp.x, sp.y, 4.5 * this.cam.zoom, 0, Math.PI * 2);\n ctx.fill(); ctx.stroke();\n }\n }\n }\n\n _shapePath(shape, x, y, w, h) {\n const ctx = this.ctx;\n if (shape === 'diamond') {\n const cx = x + w / 2, cy = y + h / 2;\n ctx.beginPath();\n ctx.moveTo(cx, y); ctx.lineTo(x + w, cy);\n ctx.lineTo(cx, y + h); ctx.lineTo(x, cy);\n ctx.closePath(); return;\n }\n if (shape === 'ellipse') {\n ctx.beginPath();\n ctx.ellipse(x + w / 2, y + h / 2, w / 2, h / 2, 0, 0, Math.PI * 2);\n return;\n }\n if (shape === 'hexagon') {\n const cx = x + w / 2, cy = y + h / 2;\n const hw = w / 2, hh = h / 2, a = hw * 0.45;\n ctx.beginPath();\n ctx.moveTo(cx - hw + a, y); ctx.lineTo(cx + hw - a, y);\n ctx.lineTo(x + w, cy); ctx.lineTo(cx + hw - a, y + h);\n ctx.lineTo(cx - hw + a, y + h); ctx.lineTo(x, cy);\n ctx.closePath(); return;\n }\n this._roundRect(x, y, w, h, 8);\n }\n _roundRect(x, y, w, h, r) {\n const ctx = this.ctx;\n ctx.beginPath();\n ctx.moveTo(x + r, y); ctx.lineTo(x + w - r, y);\n ctx.quadraticCurveTo(x + w, y, x + w, y + r);\n ctx.lineTo(x + w, y + h - r);\n ctx.quadraticCurveTo(x + w, y + h, x + w - r, y + h);\n ctx.lineTo(x + r, y + h);\n ctx.quadraticCurveTo(x, y + h, x, y + h - r);\n ctx.lineTo(x, y + r);\n ctx.quadraticCurveTo(x, y, x + r, y);\n ctx.closePath();\n }\n}\n\n// ── Free helpers ──────────────────────────────────────────────────────────\nfunction bezPt(t, x1, y1, cx1, cy1, cx2, cy2, x2, y2) {\n const mt = 1 - t, mt2 = mt * mt, t2 = t * t;\n const a = mt2 * mt, b = 3 * mt2 * t, c = 3 * mt * t2, d = t2 * t;\n return { x: a*x1 + b*cx1 + c*cx2 + d*x2, y: a*y1 + b*cy1 + c*cy2 + d*y2 };\n}\nfunction distSeg2(qx, qy, x1, y1, x2, y2) {\n const dx = x2 - x1, dy = y2 - y1;\n const len2 = dx*dx + dy*dy;\n if (len2 === 0) { const ddx = qx - x1, ddy = qy - y1; return ddx*ddx + ddy*ddy; }\n let t = ((qx - x1) * dx + (qy - y1) * dy) / len2;\n t = Math.max(0, Math.min(1, t));\n const px = x1 + t * dx, py = y1 + t * dy;\n const ddx = qx - px, ddy = qy - py;\n return ddx*ddx + ddy*ddy;\n}\nfunction alphaize(hex, a) {\n if (hex.startsWith('rgb')) return hex.replace(')', `, ${a})`).replace('rgb(', 'rgba(');\n const r = parseInt(hex.slice(1, 3), 16);\n const g = parseInt(hex.slice(3, 5), 16);\n const b = parseInt(hex.slice(5, 7), 16);\n return `rgba(${r},${g},${b},${a})`;\n}\nconst STATUS_COLORS = {\n ok: '#5bd17a', live: '#5bd17a', running: '#5b8def', idle: '#8b95a7',\n warn: '#f0b93a', error: '#e8462b', failed: '#e8462b', stopped: '#8b95a7',\n};\n\nfunction parseInlineMd(s) {\n if (!s) return [{ t: '', style: 'p' }];\n const runs = [];\n const re = /(\\*\\*[^*]+\\*\\*|\\*[^*]+\\*|`[^`]+`|\\[[^\\]]+\\]\\([^)]+\\))/g;\n let last = 0, m;\n while ((m = re.exec(s)) !== null) {\n if (m.index > last) runs.push({ t: s.slice(last, m.index), style: 'p' });\n const tok = m[1];\n if (tok.startsWith('**')) runs.push({ t: tok.slice(2, -2), style: 'b' });\n else if (tok.startsWith('`')) runs.push({ t: tok.slice(1, -1), style: 'c' });\n else if (tok.startsWith('[')) {\n const close = tok.indexOf('](');\n runs.push({ t: tok.slice(1, close), style: 'a', href: tok.slice(close + 2, -1) });\n }\n else runs.push({ t: tok.slice(1, -1), style: 'i' });\n last = m.index + tok.length;\n }\n if (last < s.length) runs.push({ t: s.slice(last), style: 'p' });\n return runs;\n}\n\nfunction pinchInfo(pointers) {\n const [a, b] = [...pointers.values()];\n const dx = b.x - a.x, dy = b.y - a.y;\n return { dist: Math.hypot(dx, dy) || 1, mid: { x: (a.x + b.x) / 2, y: (a.y + b.y) / 2 } };\n}\n\nfunction isCompatibleType(out, inn) {\n if (!out || !inn) return true;\n if (out === inn) return true;\n if (out === 'any' || inn === 'any') return true;\n if (inn === 'string') return true; // anything stringifies\n const numerics = new Set(['number', 'int', 'float', 'integer']);\n if (numerics.has(out) && numerics.has(inn)) return true;\n return false;\n}\n\nfunction fnvHash(v) {\n // Fast structural hash for primitives / shallow objects / arrays. Avoids JSON.\n let h = 0x811c9dc5;\n const visit = (x) => {\n if (x === null || x === undefined) { h = (h ^ 0xff) * 0x01000193 >>> 0; return; }\n const t = typeof x;\n if (t === 'number') { h = (h ^ ((x * 1e6) | 0)) * 0x01000193 >>> 0; return; }\n if (t === 'string') { for (let i = 0; i < x.length; i++) h = (h ^ x.charCodeAt(i)) * 0x01000193 >>> 0; return; }\n if (t === 'boolean') { h = (h ^ (x ? 1 : 0)) * 0x01000193 >>> 0; return; }\n if (Array.isArray(x)) { for (const e of x) visit(e); return; }\n if (t === 'object') { for (const k of Object.keys(x).sort()) { for (let i = 0; i < k.length; i++) h = (h ^ k.charCodeAt(i)) * 0x01000193 >>> 0; visit(x[k]); } return; }\n };\n visit(v);\n return h >>> 0;\n}\n\nfunction bubbleSummary(v) {\n if (typeof v === 'number') return formatRuntimeValue(v);\n if (v && typeof v === 'object') {\n return Object.entries(v).filter(([, x]) => x != null).map(([k, x]) => `${k}: ${formatRuntimeValue(x)}`).join(' ');\n }\n return formatRuntimeValue(v);\n}\n\nfunction formatRuntimeValue(v) {\n if (v === null || v === undefined) return '∅';\n if (typeof v === 'number') return Number.isInteger(v) ? String(v) : v.toFixed(2);\n if (typeof v === 'boolean') return v ? 'true' : 'false';\n if (typeof v === 'string') return v.length > 22 ? v.slice(0, 22) + '…' : v;\n try { const s = JSON.stringify(v); return s.length > 30 ? s.slice(0, 30) + '…' : s; }\n catch { return '[obj]'; }\n}\n\nfunction parseHex(h) {\n return [parseInt(h.slice(1, 3), 16), parseInt(h.slice(3, 5), 16), parseInt(h.slice(5, 7), 16)];\n}\nfunction pointInPolygon(px, py, poly) {\n let inside = false;\n for (let i = 0, j = poly.length - 1; i < poly.length; j = i++) {\n const xi = poly[i].x, yi = poly[i].y, xj = poly[j].x, yj = poly[j].y;\n const intersect = ((yi > py) !== (yj > py)) && (px < (xj - xi) * (py - yi) / (yj - yi) + xi);\n if (intersect) inside = !inside;\n }\n return inside;\n}\nfunction escapeHtml(s) {\n return String(s).replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/\"/g, '"');\n}\nfunction escapeXml(s) { return escapeHtml(s); }\n\n// ── Mermaid + DOT importers ───────────────────────────────────────────────\nexport function parseMermaid(text) {\n const nodes = new Map(), edges = [];\n const lines = text.split('\\n').map((l) => l.replace(/\\/\\/.*$/, '').trim()).filter(Boolean);\n let i0 = 0;\n if (lines[0] && /^(graph|flowchart)\\b/i.test(lines[0])) i0 = 1;\n const NODE_RE = /([A-Za-z_][A-Za-z0-9_]*)(?:(\\[\\[)([^\\]]+)\\]\\]|\\[([^\\]]+)\\]|\\(\\(([^)]+)\\)\\)|\\(([^)]+)\\)|\\{([^}]+)\\})?/;\n function consume(s, pos) {\n const sub = s.slice(pos);\n const m = sub.match(NODE_RE);\n if (!m || m.index !== 0) return null;\n const id = m[1];\n let shape = 'default', label = id;\n if (m[2]) { shape = 'subroutine'; label = m[3]; }\n else if (m[4]) { shape = 'rect'; label = m[4]; }\n else if (m[5]) { shape = 'circle'; label = m[5]; }\n else if (m[6]) { shape = 'round'; label = m[6]; }\n else if (m[7]) { shape = 'rhombus';label = m[7]; }\n if (!nodes.has(id) || nodes.get(id).shape === 'default') nodes.set(id, { label, shape });\n return { id, end: pos + m[0].length };\n }\n for (let li = i0; li < lines.length; li++) {\n const ln = lines[li];\n const a = consume(ln, 0); if (!a) continue;\n let rest = ln.slice(a.end).trim();\n const arrow = rest.match(/^([-=.~]+>?|---|===)\\s*(?:\\|([^|]+)\\|\\s*)?/);\n if (!arrow) continue;\n rest = rest.slice(arrow[0].length).trim();\n const offset = ln.length - rest.length;\n const b = consume(ln, offset); if (!b) continue;\n edges.push({ from: a.id, to: b.id, label: arrow[2] || null });\n }\n return { nodes, edges };\n}\nexport function parseDot(text) {\n const nodes = new Map(), edges = [];\n text = text.replace(/\\/\\*[\\s\\S]*?\\*\\//g, '').replace(/^\\s*#.*$/gm, '').replace(/\\/\\/.*$/gm, '');\n text = text.replace(/^\\s*(?:strict\\s+)?(?:di)?graph\\s+\\w*\\s*\\{/i, '').replace(/\\}\\s*$/, '');\n const stmts = []; let buf = '', depth = 0;\n for (const ch of text) {\n if (ch === '[') depth++;\n if (ch === ']') depth--;\n if ((ch === ';' || ch === '\\n') && depth === 0) {\n if (buf.trim()) stmts.push(buf.trim());\n buf = '';\n } else buf += ch;\n }\n if (buf.trim()) stmts.push(buf.trim());\n const ID_RE = /\"([^\"]+)\"|([A-Za-z_][A-Za-z0-9_]*)/;\n function takeId(s, p) {\n const m = s.slice(p).match(ID_RE);\n if (!m || m.index !== 0) return null;\n return { id: m[1] || m[2], end: p + m[0].length };\n }\n function takeAttrs(s, p) {\n const sub = s.slice(p).match(/^\\s*\\[([^\\]]*)\\]/);\n if (!sub) return null;\n const lm = sub[1].match(/label\\s*=\\s*\"([^\"]*)\"|label\\s*=\\s*([A-Za-z_][A-Za-z0-9_]*)/);\n return { label: lm ? (lm[1] || lm[2]) : null, end: p + sub[0].length };\n }\n for (const stmt of stmts) {\n let p = 0;\n const a = takeId(stmt, p); if (!a) continue;\n p = a.end;\n while (stmt[p] === ' ' || stmt[p] === '\\t') p++;\n const arrow = stmt.slice(p).match(/^(->|--)\\s*/);\n if (arrow) {\n p += arrow[0].length;\n const b = takeId(stmt, p); if (!b) continue;\n p = b.end;\n const attrs = takeAttrs(stmt, p);\n if (!nodes.has(a.id)) nodes.set(a.id, { label: a.id });\n if (!nodes.has(b.id)) nodes.set(b.id, { label: b.id });\n edges.push({ from: a.id, to: b.id, label: attrs ? attrs.label : null });\n } else {\n const attrs = takeAttrs(stmt, p);\n const label = attrs && attrs.label ? attrs.label : a.id;\n if (!nodes.has(a.id) || nodes.get(a.id).label === a.id) nodes.set(a.id, { label });\n }\n }\n return { nodes, edges };\n}\n","// zflow WebGL renderer — optimized path.\n//\n// Architecture:\n// • One shared static quad geometry (6 verts, never changes).\n// • Per-node attributes (center, size, color, sel) live in a persistent\n// instance buffer sized at nodeCap() at init time. We never allocate\n// per-frame — we update only the slots that the host marked dirty.\n// • Camera (pan/zoom) is uniform-only, so panning is FREE in buffer terms.\n// • ANGLE_instanced_arrays draws all nodes in a single drawCall.\n// • Edges keep a persistent buffer too with dirty tracking + bezier\n// tesselation regenerated only when an endpoint moves.\n//\n// Result: 100k nodes pan/zoom at 60 fps with zero GC. Adding/moving a\n// single node touches ~28 bytes of GPU memory, not 7 MB.\n\nconst VS = `\nattribute vec2 aQuad;\nattribute vec2 aCenter;\nattribute vec2 aSize;\nattribute vec3 aColor;\nattribute float aSelected;\nuniform vec2 uCam;\nuniform float uZoom;\nuniform vec2 uScreen;\nvarying vec3 vColor;\nvarying float vSelected;\nvarying vec2 vUv;\nvoid main() {\n vUv = aQuad;\n vSelected = aSelected;\n vColor = aColor;\n vec2 worldPos = aCenter + aQuad * aSize;\n vec2 screen = (worldPos + uCam) * uZoom;\n vec2 ndc = (screen / uScreen) * 2.0;\n gl_Position = vec4(ndc.x, -ndc.y, 0.0, 1.0);\n}`;\n\nconst FS = `\nprecision mediump float;\nvarying vec3 vColor;\nvarying float vSelected;\nvarying vec2 vUv;\nvoid main() {\n vec2 q = abs(vUv);\n float d = max(q.x, q.y);\n float alpha = smoothstep(1.0, 0.92, d);\n float header = step(0.7, vUv.y) * 0.18;\n vec3 col = vColor + vec3(header);\n if (vSelected > 0.5) col = mix(col, vec3(0.94, 0.73, 0.23), 0.55);\n gl_FragColor = vec4(col, alpha);\n}`;\n\nconst EDGE_VS = `\nattribute vec2 aPos;\nattribute vec3 aColor;\nuniform vec2 uCam;\nuniform float uZoom;\nuniform vec2 uScreen;\nvarying vec3 vColor;\nvoid main() {\n vColor = aColor;\n vec2 screen = (aPos + uCam) * uZoom;\n vec2 ndc = (screen / uScreen) * 2.0;\n gl_Position = vec4(ndc.x, -ndc.y, 0.0, 1.0);\n}`;\n\nconst EDGE_FS = `\nprecision mediump float;\nvarying vec3 vColor;\nvoid main() { gl_FragColor = vec4(vColor, 0.85); }`;\n\nconst NODE_STRIDE_F = 8; // cx, cy, sw, sh, r, g, b, sel\nconst EDGE_SEGS = 24;\nconst EDGE_VERTS_PER = (EDGE_SEGS) * 2;\nconst EDGE_STRIDE_F = 5; // x, y, r, g, b per vertex\n\nexport class WebGLRenderer {\n constructor(flow) {\n this.flow = flow;\n this.glCanvas = document.createElement('canvas');\n this.glCanvas.style.cssText = `position:absolute;inset:0;width:100%;height:100%;pointer-events:none;z-index:0;`;\n flow.container.insertBefore(this.glCanvas, flow.canvas);\n flow.canvas.style.background = 'transparent';\n flow.canvas.style.position = 'absolute';\n flow.canvas.style.zIndex = '1';\n this.gl = this.glCanvas.getContext('webgl', { antialias: true, alpha: true, premultipliedAlpha: false });\n if (!this.gl) { this.disabled = true; console.warn('zflow: WebGL unavailable'); return; }\n this.instExt = this.gl.getExtension('ANGLE_instanced_arrays');\n this.cap = flow.w.nodeCap();\n this.edgeCap = flow.w.edgeCap();\n this._resize();\n this._setupShaders();\n this._setupBuffers();\n this._hookDirty();\n this._resizeObs = new ResizeObserver(() => this._resize());\n this._resizeObs.observe(flow.container);\n this._dirty = new Set(); // node ids needing buffer upload\n this._dirtyEdges = new Set();\n this._fullRebuildNeeded = true;\n this._lastNodeCount = 0;\n this._lastEdgeCount = 0;\n }\n\n _hookDirty() {\n const f = this.flow;\n f.on('change', () => { this._fullRebuildNeeded = true; });\n // Hijack moveSelectedBy / moveNode so position changes only mark dirty.\n const origMove = f.w.moveSelectedBy;\n if (origMove) {\n f.w.moveSelectedBy = (dx, dy) => {\n origMove.call(f.w, dx, dy);\n for (let i = 0; i < f.w.nodeCount_(); i++) if (f.V.selected[i]) this._dirty.add(i);\n };\n }\n }\n\n _resize() {\n const dpr = window.devicePixelRatio || 1;\n const r = this.flow.container.getBoundingClientRect();\n this.glCanvas.width = r.width * dpr;\n this.glCanvas.height = r.height * dpr;\n this.gl?.viewport(0, 0, this.glCanvas.width, this.glCanvas.height);\n }\n\n _setupShaders() {\n const gl = this.gl;\n this.progNode = link(gl, VS, FS);\n this.progEdge = link(gl, EDGE_VS, EDGE_FS);\n // Cache uniform/attrib locations.\n this.locN = {\n aQuad: gl.getAttribLocation(this.progNode, 'aQuad'),\n aCenter: gl.getAttribLocation(this.progNode, 'aCenter'),\n aSize: gl.getAttribLocation(this.progNode, 'aSize'),\n aColor: gl.getAttribLocation(this.progNode, 'aColor'),\n aSel: gl.getAttribLocation(this.progNode, 'aSelected'),\n uCam: gl.getUniformLocation(this.progNode, 'uCam'),\n uZoom: gl.getUniformLocation(this.progNode, 'uZoom'),\n uScreen: gl.getUniformLocation(this.progNode, 'uScreen'),\n };\n this.locE = {\n aPos: gl.getAttribLocation(this.progEdge, 'aPos'),\n aColor: gl.getAttribLocation(this.progEdge, 'aColor'),\n uCam: gl.getUniformLocation(this.progEdge, 'uCam'),\n uZoom: gl.getUniformLocation(this.progEdge, 'uZoom'),\n uScreen: gl.getUniformLocation(this.progEdge, 'uScreen'),\n };\n }\n\n _setupBuffers() {\n const gl = this.gl;\n // Shared quad: 6 verts, 2 floats each, static.\n this.quadBuf = gl.createBuffer();\n gl.bindBuffer(gl.ARRAY_BUFFER, this.quadBuf);\n gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([\n -1, -1, 1, -1, -1, 1,\n 1, -1, 1, 1, -1, 1,\n ]), gl.STATIC_DRAW);\n\n // Per-instance node buffer pre-allocated at full cap.\n this.nodeData = new Float32Array(this.cap * NODE_STRIDE_F);\n this.nodeBuf = gl.createBuffer();\n gl.bindBuffer(gl.ARRAY_BUFFER, this.nodeBuf);\n gl.bufferData(gl.ARRAY_BUFFER, this.nodeData.byteLength, gl.DYNAMIC_DRAW);\n\n // Edge buffer pre-allocated.\n this.edgeData = new Float32Array(this.edgeCap * EDGE_VERTS_PER * EDGE_STRIDE_F);\n this.edgeBuf = gl.createBuffer();\n gl.bindBuffer(gl.ARRAY_BUFFER, this.edgeBuf);\n gl.bufferData(gl.ARRAY_BUFFER, this.edgeData.byteLength, gl.DYNAMIC_DRAW);\n }\n\n _writeNode(i) {\n const f = this.flow;\n const cat = f.kinds[f.V.kind[i]];\n const hex = f.colors.get(i) || cat.color;\n const off = i * NODE_STRIDE_F;\n this.nodeData[off ] = f.V.posX[i];\n this.nodeData[off + 1] = f.V.posY[i];\n this.nodeData[off + 2] = f.V.sizeW[i] * 0.5;\n this.nodeData[off + 3] = f.V.sizeH[i] * 0.5;\n const [r, g, b] = parseHex(hex);\n this.nodeData[off + 4] = r;\n this.nodeData[off + 5] = g;\n this.nodeData[off + 6] = b;\n this.nodeData[off + 7] = f.V.selected[i] !== 0 ? 1 : 0;\n }\n\n _writeEdge(i) {\n const f = this.flow;\n const a = f.V.edgeFromN[i], b = f.V.edgeToN[i];\n const ap = f._portWorld(a, 1, f.V.edgeFromP[i]);\n const bp = f._portWorld(b, 0, f.V.edgeToP[i]);\n const col = parseHex(f.colors.get(a) || f.kinds[f.V.kind[a]].color);\n const off = i * EDGE_VERTS_PER * EDGE_STRIDE_F;\n const ortho = f.options.edgeStyle === 'orthogonal';\n const offCv = Math.max(50, Math.abs(bp.x - ap.x) * 0.5 + Math.abs(bp.y - ap.y) * 0.4);\n let prev = { x: ap.x, y: ap.y };\n let o = off;\n for (let s = 1; s <= EDGE_SEGS; s++) {\n const t = s / EDGE_SEGS;\n let pt;\n if (ortho) {\n const mx = (ap.x + bp.x) * 0.5;\n pt = t < 0.33 ? lerp(ap, { x: mx, y: ap.y }, t / 0.33)\n : t < 0.67 ? lerp({ x: mx, y: ap.y }, { x: mx, y: bp.y }, (t - 0.33) / 0.34)\n : lerp({ x: mx, y: bp.y }, bp, (t - 0.67) / 0.33);\n } else {\n pt = bezPt(t, ap.x, ap.y, ap.x + offCv, ap.y, bp.x - offCv, bp.y, bp.x, bp.y);\n }\n this.edgeData[o++] = prev.x; this.edgeData[o++] = prev.y;\n this.edgeData[o++] = col[0]; this.edgeData[o++] = col[1]; this.edgeData[o++] = col[2];\n this.edgeData[o++] = pt.x; this.edgeData[o++] = pt.y;\n this.edgeData[o++] = col[0]; this.edgeData[o++] = col[1]; this.edgeData[o++] = col[2];\n prev = pt;\n }\n }\n\n render() {\n if (this.disabled) return;\n const gl = this.gl;\n const f = this.flow;\n const n = f.w.nodeCount_(), m = f.w.edgeCount_();\n const dpr = window.devicePixelRatio || 1;\n\n gl.clearColor(0.027, 0.035, 0.06, 1.0);\n gl.clear(gl.COLOR_BUFFER_BIT);\n gl.enable(gl.BLEND);\n gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);\n\n const camWX = f.cam.x + (this.glCanvas.width / (2 * dpr * f.cam.zoom));\n const camWY = f.cam.y + (this.glCanvas.height / (2 * dpr * f.cam.zoom));\n\n // ── Detect what needs upload ────────────────────────────────────\n if (this._fullRebuildNeeded || n !== this._lastNodeCount) {\n for (let i = 0; i < n; i++) this._writeNode(i);\n gl.bindBuffer(gl.ARRAY_BUFFER, this.nodeBuf);\n gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.nodeData.subarray(0, n * NODE_STRIDE_F));\n this._dirty.clear();\n } else if (this._dirty.size) {\n gl.bindBuffer(gl.ARRAY_BUFFER, this.nodeBuf);\n // Combine contiguous dirty ranges to minimize bufferSubData calls.\n const sorted = [...this._dirty].sort((a, b) => a - b);\n let runStart = sorted[0], runEnd = sorted[0];\n for (let k = 1; k < sorted.length; k++) {\n if (sorted[k] === runEnd + 1) runEnd = sorted[k];\n else {\n for (let i = runStart; i <= runEnd; i++) this._writeNode(i);\n gl.bufferSubData(gl.ARRAY_BUFFER, runStart * NODE_STRIDE_F * 4,\n this.nodeData.subarray(runStart * NODE_STRIDE_F, (runEnd + 1) * NODE_STRIDE_F));\n runStart = sorted[k]; runEnd = sorted[k];\n }\n }\n for (let i = runStart; i <= runEnd; i++) this._writeNode(i);\n gl.bufferSubData(gl.ARRAY_BUFFER, runStart * NODE_STRIDE_F * 4,\n this.nodeData.subarray(runStart * NODE_STRIDE_F, (runEnd + 1) * NODE_STRIDE_F));\n this._dirty.clear();\n }\n\n if (this._fullRebuildNeeded || m !== this._lastEdgeCount || this._dirty.size === 0) {\n // Edges depend on node positions, but only rebuild on full-rebuild path\n // since we keep no per-edge incremental delta yet.\n if (this._fullRebuildNeeded || m !== this._lastEdgeCount) {\n for (let i = 0; i < m; i++) this._writeEdge(i);\n gl.bindBuffer(gl.ARRAY_BUFFER, this.edgeBuf);\n gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.edgeData.subarray(0, m * EDGE_VERTS_PER * EDGE_STRIDE_F));\n }\n }\n\n this._lastNodeCount = n;\n this._lastEdgeCount = m;\n this._fullRebuildNeeded = false;\n\n // ── Draw edges (LINES, persistent buffer) ────────────────────────\n if (m > 0) {\n gl.useProgram(this.progEdge);\n gl.bindBuffer(gl.ARRAY_BUFFER, this.edgeBuf);\n gl.enableVertexAttribArray(this.locE.aPos);\n gl.vertexAttribPointer(this.locE.aPos, 2, gl.FLOAT, false, 5 * 4, 0);\n gl.enableVertexAttribArray(this.locE.aColor);\n gl.vertexAttribPointer(this.locE.aColor, 3, gl.FLOAT, false, 5 * 4, 2 * 4);\n gl.uniform2f(this.locE.uCam, camWX, camWY);\n gl.uniform1f(this.locE.uZoom, f.cam.zoom * dpr);\n gl.uniform2f(this.locE.uScreen, this.glCanvas.width, this.glCanvas.height);\n gl.lineWidth(1.6);\n gl.drawArrays(gl.LINES, 0, m * EDGE_VERTS_PER);\n }\n\n // ── Draw nodes ──────────────────────────────────────────────────\n if (n > 0) {\n gl.useProgram(this.progNode);\n // aQuad from static buffer.\n gl.bindBuffer(gl.ARRAY_BUFFER, this.quadBuf);\n gl.enableVertexAttribArray(this.locN.aQuad);\n gl.vertexAttribPointer(this.locN.aQuad, 2, gl.FLOAT, false, 0, 0);\n if (this.instExt) this.instExt.vertexAttribDivisorANGLE(this.locN.aQuad, 0);\n // per-instance attribs from node buffer.\n gl.bindBuffer(gl.ARRAY_BUFFER, this.nodeBuf);\n const s = NODE_STRIDE_F * 4;\n gl.enableVertexAttribArray(this.locN.aCenter);\n gl.vertexAttribPointer(this.locN.aCenter, 2, gl.FLOAT, false, s, 0);\n gl.enableVertexAttribArray(this.locN.aSize);\n gl.vertexAttribPointer(this.locN.aSize, 2, gl.FLOAT, false, s, 2 * 4);\n gl.enableVertexAttribArray(this.locN.aColor);\n gl.vertexAttribPointer(this.locN.aColor, 3, gl.FLOAT, false, s, 4 * 4);\n gl.enableVertexAttribArray(this.locN.aSel);\n gl.vertexAttribPointer(this.locN.aSel, 1, gl.FLOAT, false, s, 7 * 4);\n if (this.instExt) {\n this.instExt.vertexAttribDivisorANGLE(this.locN.aCenter, 1);\n this.instExt.vertexAttribDivisorANGLE(this.locN.aSize, 1);\n this.instExt.vertexAttribDivisorANGLE(this.locN.aColor, 1);\n this.instExt.vertexAttribDivisorANGLE(this.locN.aSel, 1);\n }\n gl.uniform2f(this.locN.uCam, camWX, camWY);\n gl.uniform1f(this.locN.uZoom, f.cam.zoom * dpr);\n gl.uniform2f(this.locN.uScreen, this.glCanvas.width, this.glCanvas.height);\n if (this.instExt) {\n this.instExt.drawArraysInstancedANGLE(gl.TRIANGLES, 0, 6, n);\n // Reset divisors so other passes (edges) work correctly.\n this.instExt.vertexAttribDivisorANGLE(this.locN.aCenter, 0);\n this.instExt.vertexAttribDivisorANGLE(this.locN.aSize, 0);\n this.instExt.vertexAttribDivisorANGLE(this.locN.aColor, 0);\n this.instExt.vertexAttribDivisorANGLE(this.locN.aSel, 0);\n } else {\n // Slow path fallback: 6 verts per node, no extension.\n // (rare; almost every browser since 2014 has the extension)\n for (let i = 0; i < n; i++) {\n const off = i * NODE_STRIDE_F;\n gl.vertexAttrib2f(this.locN.aCenter, this.nodeData[off], this.nodeData[off + 1]);\n gl.vertexAttrib2f(this.locN.aSize, this.nodeData[off + 2], this.nodeData[off + 3]);\n gl.vertexAttrib3f(this.locN.aColor, this.nodeData[off + 4], this.nodeData[off + 5], this.nodeData[off + 6]);\n gl.vertexAttrib1f(this.locN.aSel, this.nodeData[off + 7]);\n gl.drawArrays(gl.TRIANGLES, 0, 6);\n }\n }\n }\n }\n\n /** Mark a node as needing buffer update. Called from host on move/recolor. */\n markNodeDirty(i) { this._dirty.add(i); }\n markEdgeDirty(i) { this._dirtyEdges.add(i); this._fullRebuildNeeded = true; }\n markAllDirty() { this._fullRebuildNeeded = true; }\n\n dispose() {\n this._resizeObs?.disconnect();\n this.glCanvas?.remove();\n }\n}\n\n// ── helpers ───────────────────────────────────────────────────────────────\nfunction compile(gl, src, kind) {\n const s = gl.createShader(kind);\n gl.shaderSource(s, src); gl.compileShader(s);\n if (!gl.getShaderParameter(s, gl.COMPILE_STATUS)) throw new Error('GL compile: ' + gl.getShaderInfoLog(s));\n return s;\n}\nfunction link(gl, vs, fs) {\n const p = gl.createProgram();\n gl.attachShader(p, compile(gl, vs, gl.VERTEX_SHADER));\n gl.attachShader(p, compile(gl, fs, gl.FRAGMENT_SHADER));\n gl.linkProgram(p);\n if (!gl.getProgramParameter(p, gl.LINK_STATUS)) throw new Error('GL link: ' + gl.getProgramInfoLog(p));\n return p;\n}\nfunction parseHex(h) {\n return [parseInt(h.slice(1, 3), 16) / 255, parseInt(h.slice(3, 5), 16) / 255, parseInt(h.slice(5, 7), 16) / 255];\n}\nfunction bezPt(t, x1, y1, cx1, cy1, cx2, cy2, x2, y2) {\n const mt = 1 - t, mt2 = mt * mt, t2 = t * t;\n const a = mt2 * mt, b = 3 * mt2 * t, c = 3 * mt * t2, d = t2 * t;\n return { x: a*x1 + b*cx1 + c*cx2 + d*x2, y: a*y1 + b*cy1 + c*cy2 + d*y2 };\n}\nfunction lerp(a, b, t) { return { x: a.x + (b.x - a.x) * t, y: a.y + (b.y - a.y) * t }; }\n"],"names":["parseHex","bezPt"],"mappings":"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"}
|