@luispm/zflow-graph 0.1.0 → 0.2.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.
@@ -1 +1 @@
1
- {"version":3,"file":"zflow.umd.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, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/\"/g, '&quot;');\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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"}
1
+ {"version":3,"file":"zflow.umd.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 // Free-form metadata bag, per-node. Consumers stash logical ids, business\n // domain refs, anything they want round-tripped through toJSON/loadJSON\n // without inventing their own Map<zid, ...> side table.\n this.data = 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.data !== undefined) this.data.set(id, spec.data);\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 ?? 'process');\n const cat = this.kinds[k];\n const id = this.w.addNode(\n s.x ?? 0, s.y ?? 0,\n s.w ?? cat.w, s.h ?? cat.h,\n k, s.nin ?? cat.nin, s.nout ?? cat.nout,\n );\n if (id < 0) { ids[i] = -1; continue; }\n if (s.title) this.titles.set(id, s.title);\n if (s.color) this.colors.set(id, s.color);\n if (s.data !== undefined) this.data.set(id, s.data);\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 // Build pre-compaction remaps so JS-side overlays (titles, data, etc.)\n // stay aligned with the new node ids after WASM slides survivors down.\n const nodeRemap = this._buildNodeRemap();\n const edgeRemap = this._buildEdgeRemap();\n const n = this.w.deleteSelected();\n if (n > 0) {\n this._applyNodeRemap(nodeRemap);\n this._applyEdgeRemap(edgeRemap);\n this.w.snapshot();\n this._emit('change');\n }\n return n;\n }\n /** Compute Map<oldId, newId|null> matching WASM's deleteSelected compaction. */\n _buildNodeRemap() {\n const n = this.w.nodeCount_();\n const m = new Map();\n let newId = 0;\n for (let i = 0; i < n; i++) {\n if (this.V.selected[i]) m.set(i, null);\n else m.set(i, newId++);\n }\n return m;\n }\n /** Same idea for edges: dropped if either endpoint is selected or edge itself. */\n _buildEdgeRemap() {\n const m = this.w.edgeCount_();\n const out = new Map();\n let newE = 0;\n for (let e = 0; e < m; e++) {\n const a = this.V.edgeFromN[e], b = this.V.edgeToN[e];\n if (this.V.selected[a] || this.V.selected[b] || this.V.edgeSel[e]) out.set(e, null);\n else out.set(e, newE++);\n }\n return out;\n }\n _applyNodeRemap(remap) {\n const nodeMaps = [this.titles, this.colors, this.descriptions, this.tags, this.status,\n this.progress, this.image, this.checked, this.tasks, this.icon,\n this.links, this.portIn, this.portOut, this.zOrder, this.data];\n for (const orig of nodeMaps) this._remapKeyedMap(orig, remap);\n this._remapKeyedSet(this.locked, remap);\n this._remapKeyedSet(this.breakpoints, remap);\n this._remapKeyedMap(this._values, remap);\n this._remapKeyedMap(this._memoKeys, remap);\n this._remapKeyedMap(this.metrics, remap);\n this._remapKeyedMap(this.metricMax, remap);\n // Bookmarks: slot -> nodeId reverse mapping.\n const newBookmarks = new Map();\n for (const [slot, oldId] of this.bookmarks) {\n const newId = remap.get(oldId);\n if (newId != null) newBookmarks.set(slot, newId);\n }\n this.bookmarks = newBookmarks;\n }\n _applyEdgeRemap(remap) {\n this._remapKeyedMap(this.edgeLabels, remap);\n this._remapKeyedSet(this.animatedEdges, remap);\n this._remapKeyedMap(this._edgeWaypoints, remap);\n this._remapKeyedMap(this._activeEdges, remap);\n }\n _remapKeyedMap(map, remap) {\n const next = new Map();\n for (const [oldKey, v] of map) {\n const newKey = remap.get(oldKey);\n if (newKey != null) next.set(newKey, v);\n }\n map.clear();\n for (const [k, v] of next) map.set(k, v);\n }\n _remapKeyedSet(set, remap) {\n const next = new Set();\n for (const oldKey of set) {\n const newKey = remap.get(oldKey);\n if (newKey != null) next.add(newKey);\n }\n set.clear();\n for (const k of next) set.add(k);\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 /** Replace the entire selection with the given ids (no shift-add semantics). */\n setSelection(ids) {\n this.w.clearSelection();\n if (Array.isArray(ids)) for (const id of ids) if (id >= 0 && id < this.w.nodeCount_()) this.w.setSelected(id, 1);\n this._emit('select', this.getSelection());\n }\n /** Delete a single node by id (does not depend on prior selection). */\n deleteNode(id) {\n if (this.readOnly) return 0;\n if (id < 0 || id >= this.w.nodeCount_()) return 0;\n const prevSel = this.getSelection();\n this.w.clearSelection();\n this.w.setSelected(id, 1);\n const removed = this.deleteSelection();\n // Restore the prior selection minus the deleted node, remapped to new ids.\n if (prevSel.length) {\n this.w.clearSelection();\n for (const old of prevSel) {\n if (old === id) continue;\n const remapped = old > id ? old - 1 : old;\n if (remapped < this.w.nodeCount_()) this.w.setSelected(remapped, 1);\n }\n this._emit('select', this.getSelection());\n }\n return removed;\n }\n /**\n * Run `fn` as an atomic mutation: suppresses intermediate 'change' events\n * and emits a single 'change' at the end. Snapshots once on success. Safe\n * to nest — only the outermost call commits.\n */\n transaction(fn) {\n if (typeof fn !== 'function') return;\n if (this._inTransaction) return fn();\n this._inTransaction = true;\n const prev = this._suspendEvents;\n this._suspendEvents = true;\n let result;\n try { result = fn(); }\n finally {\n this._suspendEvents = prev;\n this._inTransaction = false;\n }\n this.w.snapshot();\n this._emit('change');\n return result;\n }\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 /** Attach arbitrary data to a node. Round-trips through toJSON/loadJSON. */\n setNodeData(id, data) { data === undefined || data === null ? this.data.delete(id) : this.data.set(id, data); this._emit('change'); }\n getNodeData(id) { return this.data.get(id); }\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 if (this.data.has(i)) node.data = this.data.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 /**\n * Atomic load: wipes the current graph and inserts `nodes`/`edges` whose\n * `from`/`to` reference the caller's free-form ids (strings, numbers, refs).\n *\n * loadGraph({\n * nodes: [{ id: 'a', kind: 'process', x: 0, y: 0, title: 'A' }],\n * edges: [{ from: 'a', to: 'b', label: 'next' }],\n * })\n *\n * Returns Map<userId, zflowId> for the host to keep around if needed —\n * but you can also rely on `data.id` round-tripping through toJSON, since\n * each node's `id` (if provided) is also stored under `node.data.__id`.\n * Single 'change' event and a single undo snapshot, regardless of N.\n */\n loadGraph(spec = {}) {\n const nodes = Array.isArray(spec.nodes) ? spec.nodes : [];\n const edges = Array.isArray(spec.edges) ? spec.edges : [];\n const idMap = new Map();\n this.transaction(() => {\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(); this.data.clear();\n this.bookmarks.clear(); this.locked.clear(); this.breakpoints.clear();\n this._values.clear?.();\n for (const n of nodes) {\n const userId = n.id;\n const merged = userId !== undefined\n ? { ...n, data: { ...(n.data || {}), __id: userId } }\n : n;\n const zid = this.addNode(merged);\n if (zid < 0) continue;\n if (userId !== undefined) idMap.set(userId, zid);\n }\n for (const e of edges) {\n const a = typeof e.from === 'number' && e.from < this.w.nodeCount_() ? e.from : idMap.get(e.from);\n const b = typeof e.to === 'number' && e.to < this.w.nodeCount_() ? e.to : idMap.get(e.to);\n if (a === undefined || b === undefined) continue;\n this.addEdge({ from: a, to: b, fp: e.fp, tp: e.tp, label: e.label });\n }\n });\n if (this._gl) this._gl.markAllDirty();\n return idMap;\n }\n /** Lookup the zflow id that was assigned to a user-supplied id during loadGraph. */\n findNodeByUserId(userId) {\n const n = this.w.nodeCount_();\n for (let i = 0; i < n; i++) {\n const d = this.data.get(i);\n if (d && d.__id === userId) return i;\n }\n return -1;\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(); this.data.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 data: node.data,\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 && this.notes.length === 0 && this.frames.length === 0) {\n return '<svg xmlns=\"http://www.w3.org/2000/svg\"/>';\n }\n let mnx = Infinity, mxx = -Infinity, mny = Infinity, mxy = -Infinity;\n const expand = (x0, y0, x1, y1) => {\n if (x0 < mnx) mnx = x0; if (x1 > mxx) mxx = x1;\n if (y0 < mny) mny = y0; if (y1 > mxy) mxy = y1;\n };\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 expand(this.V.posX[i] - hw, this.V.posY[i] - hh, this.V.posX[i] + hw, this.V.posY[i] + hh);\n }\n for (const f of this.frames) expand(f.x, f.y, f.x + f.w, f.y + f.h);\n for (const nt of this.notes) expand(nt.x, nt.y, nt.x + nt.w, nt.y + nt.h);\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\n // Defs: gather all edge gradients up front so consumers can serialize cleanly.\n const defs = [];\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 defs.push(`<linearGradient id=\"zfg${i}\" 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>`);\n }\n if (defs.length) out.push(`<defs>${defs.join('')}</defs>`);\n\n // Frames (background layer): dashed border + translucent header strip + label.\n for (const f of this.frames) {\n const fillA = alphaize(f.color, 0.05);\n const strokeA = alphaize(f.color, 0.45);\n const headA = alphaize(f.color, 0.16);\n out.push(`<rect x=\"${f.x}\" y=\"${f.y}\" width=\"${f.w}\" height=\"${f.h}\" rx=\"12\" fill=\"${fillA}\" stroke=\"${strokeA}\" stroke-width=\"1.4\" stroke-dasharray=\"8 4\"/>`);\n out.push(`<rect x=\"${f.x}\" y=\"${f.y}\" width=\"${f.w}\" height=\"26\" rx=\"12\" fill=\"${headA}\"/>`);\n out.push(`<text x=\"${f.x + 10}\" y=\"${f.y + 17}\" font-family=\"Inter, system-ui, sans-serif\" font-size=\"12\" font-weight=\"600\" fill=\"${f.color}\">${escapeXml(f.label || '')}</text>`);\n }\n\n // Sticky notes.\n for (const nt of this.notes) {\n const fill = (nt.color && nt.color.fill) || '#fef9c3';\n const border = (nt.color && nt.color.border) || '#caa54a';\n const textCol = (nt.color && nt.color.text) || '#5b3d12';\n out.push(`<rect x=\"${nt.x}\" y=\"${nt.y}\" width=\"${nt.w}\" height=\"${nt.h}\" rx=\"4\" fill=\"${fill}\" stroke=\"${border}\" stroke-width=\"1\"/>`);\n if (nt.text) {\n const lines = wrapTextForSvg(nt.text, nt.w - 20, 7); // rough char-width estimate\n const startY = nt.y + 18;\n for (let li = 0; li < lines.length; li++) {\n out.push(`<text x=\"${nt.x + 10}\" y=\"${startY + li * 16}\" font-family=\"Inter, system-ui, sans-serif\" font-size=\"12\" fill=\"${textCol}\">${escapeXml(lines[li])}</text>`);\n }\n }\n }\n\n // Edges.\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 selected = this.V.edgeSel[i] !== 0;\n const stroke = selected ? '#f0b93a' : `url(#zfg${i})`;\n const sw = selected ? 2.4 : 1.7;\n let d;\n if (this.options.edgeStyle === 'orthogonal') {\n const path = this._orthoPath(ap, bp);\n d = `M ${path[0].x} ${path[0].y} ` + path.slice(1).map((p) => `L ${p.x} ${p.y}`).join(' ');\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 d = `M ${ap.x} ${ap.y} C ${ap.x + off} ${ap.y} ${bp.x - off} ${bp.y} ${bp.x} ${bp.y}`;\n }\n out.push(`<path d=\"${d}\" stroke=\"${stroke}\" stroke-width=\"${sw}\" fill=\"none\" stroke-linejoin=\"round\"/>`);\n const label = this.edgeLabels.get(i);\n if (label) {\n // Midpoint approximation: average of endpoints (close enough for export).\n const mx = (ap.x + bp.x) / 2, my = (ap.y + bp.y) / 2;\n const tw = Math.max(20, label.length * 6.5);\n out.push(`<rect x=\"${mx - tw / 2 - 5}\" y=\"${my - 9}\" width=\"${tw + 10}\" height=\"16\" rx=\"5\" fill=\"#0b0f17\" stroke=\"${selected ? '#f0b93a' : alphaize(this.colors.get(a) || this.kinds[this.V.kind[a]].color, 0.6)}\" stroke-width=\"1\"/>`);\n out.push(`<text x=\"${mx}\" y=\"${my + 3}\" font-family=\"ui-monospace, Consolas, monospace\" font-size=\"10.5\" font-weight=\"600\" fill=\"#e6edf3\" text-anchor=\"middle\">${escapeXml(label)}</text>`);\n }\n }\n\n // Nodes.\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 const sel = this.V.selected[i] !== 0;\n const borderColor = sel ? '#f0b93a' : color;\n const borderW = sel ? 2 : 1.4;\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=\"${borderColor}\" stroke-width=\"${borderW}\"/>`);\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=\"${borderColor}\" stroke-width=\"${borderW}\"/>`);\n } else if (cat.shape === 'hexagon') {\n const cx = this.V.posX[i], cy = this.V.posY[i];\n const hw = w / 2, a = hw * 0.45;\n out.push(`<polygon points=\"${cx - hw + a},${y} ${cx + hw - a},${y} ${x + w},${cy} ${cx + hw - a},${y + h} ${cx - hw + a},${y + h} ${x},${cy}\" fill=\"#161b27\" stroke=\"${borderColor}\" stroke-width=\"${borderW}\"/>`);\n } else {\n out.push(`<rect x=\"${x}\" y=\"${y}\" width=\"${w}\" height=\"${h}\" rx=\"8\" fill=\"#161b27\" stroke=\"${borderColor}\" stroke-width=\"${borderW}\"/>`);\n if (cat.shape === 'rect') {\n out.push(`<path d=\"M ${x + 8} ${y} L ${x + w - 8} ${y} Q ${x + w} ${y} ${x + w} ${y + 8} L ${x + w} ${y + 22} L ${x} ${y + 22} L ${x} ${y + 8} Q ${x} ${y} ${x + 8} ${y} Z\" fill=\"${color}\"/>`);\n }\n }\n const title = this.titles.get(i) || `${cat.name} #${i}`;\n const titleY = cat.shape === 'rect' ? y + 14 : y + h / 2;\n const titleFill = cat.shape === 'rect' ? '#0b0f17' : color;\n out.push(`<text x=\"${this.V.posX[i]}\" y=\"${titleY}\" font-family=\"Inter, system-ui, sans-serif\" font-size=\"11\" font-weight=\"600\" text-anchor=\"middle\" fill=\"${titleFill}\" dominant-baseline=\"middle\">${escapeXml(title)}</text>`);\n\n // Progress bar (bottom strip of rect bodies).\n const prog = this.progress.get(i);\n if (prog !== undefined && prog > 0 && cat.shape === 'rect') {\n const barY = y + h - 5;\n const barX = x + 8, barW = w - 16, barH = 3;\n const fillW = barW * Math.min(1, Math.max(0, prog));\n out.push(`<rect x=\"${barX}\" y=\"${barY}\" width=\"${barW}\" height=\"${barH}\" fill=\"rgba(255,255,255,0.06)\"/>`);\n out.push(`<rect x=\"${barX}\" y=\"${barY}\" width=\"${fillW}\" height=\"${barH}\" fill=\"${color}\"/>`);\n }\n\n // Status dot (top-right of header for rect shapes).\n const st = this.status.get(i);\n if (st && cat.shape === 'rect') {\n const sCol = STATUS_COLORS[st] || '#8b95a7';\n out.push(`<circle cx=\"${x + w - 12}\" cy=\"${y + 11}\" r=\"3.5\" fill=\"${sCol}\"/>`);\n }\n\n // Tags.\n const tags = this.tags.get(i);\n if (tags && tags.length) {\n let tx = x + 8;\n const ty = y + h - 24;\n const tagFill = alphaize(color, 0.18);\n for (const tag of tags) {\n const tw = tag.length * 6 + 12;\n if (tx + tw > x + w - 8) break;\n out.push(`<rect x=\"${tx}\" y=\"${ty}\" width=\"${tw}\" height=\"14\" rx=\"3\" fill=\"${tagFill}\"/>`);\n out.push(`<text x=\"${tx + tw / 2}\" y=\"${ty + 7}\" font-family=\"Inter, system-ui, sans-serif\" font-size=\"9\" text-anchor=\"middle\" fill=\"${color}\" dominant-baseline=\"middle\">${escapeXml(tag)}</text>`);\n tx += tw + 4;\n }\n }\n\n // Ports (circles on left/right edges).\n const ni = this.V.nIn[i], no = this.V.nOut[i];\n for (let p = 0; p < ni; p++) {\n const py = y + h * ((p + 1) / (ni + 1));\n out.push(`<circle cx=\"${x}\" cy=\"${py}\" r=\"4.5\" fill=\"${color}\" stroke=\"#07090f\" stroke-width=\"1.5\"/>`);\n }\n for (let p = 0; p < no; p++) {\n const py = y + h * ((p + 1) / (no + 1));\n out.push(`<circle cx=\"${x + w}\" cy=\"${py}\" r=\"4.5\" fill=\"${color}\" stroke=\"#07090f\" stroke-width=\"1.5\"/>`);\n }\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) 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 /** Public coordinate helpers. Internal `_w2s`/`_s2w` kept as aliases. */\n worldToScreen(wx, wy) { return this._w2s(wx, wy); }\n screenToWorld(cx, cy) { return this._s2w(cx, cy); }\n /** Read-only camera snapshot — preferred over reading `flow.cam` directly. */\n getCamera() { return { x: this.cam.x, y: this.cam.y, zoom: this.cam.zoom }; }\n /** Public node geometry accessor. Returns null if id is out of range. */\n getNodePosition(id) {\n if (id < 0 || id >= this.w.nodeCount_()) return null;\n return { x: this.V.posX[id], y: this.V.posY[id], w: this.V.sizeW[id], h: this.V.sizeH[id] };\n }\n /** Open the inline title editor for a node. */\n startEditTitle(id) { if (id >= 0 && id < this.w.nodeCount_()) this._startEditingTitle(id); }\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 data: this.data.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 data: n.data,\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, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/\"/g, '&quot;');\n}\nfunction escapeXml(s) { return escapeHtml(s); }\n// Rough word-wrap for SVG export. avgCharPx is a coarse estimate (~7 px per\n// char at 12px font) since SVG export has no live metrics to measure against.\nfunction wrapTextForSvg(text, maxWidth, avgCharPx = 7) {\n const lines = [];\n const maxChars = Math.max(4, Math.floor(maxWidth / avgCharPx));\n for (const para of String(text).split('\\n')) {\n if (para.length <= maxChars) { lines.push(para); continue; }\n let cur = '';\n for (const word of para.split(/\\s+/)) {\n const test = cur ? cur + ' ' + word : word;\n if (test.length > maxChars && cur) { lines.push(cur); cur = word; }\n else cur = test;\n }\n if (cur) lines.push(cur);\n }\n return lines;\n}\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 f._ensureAdj?.();\n const adj = f._nodeAdj;\n for (let i = 0; i < f.w.nodeCount_(); i++) {\n if (!f.V.selected[i]) continue;\n this._dirty.add(i);\n // Edges incident on a moved node need their geometry recomputed.\n if (adj && adj[i]) for (let k = 0; k < adj[i].length; k++) this._dirtyEdges.add(adj[i][k]);\n }\n };\n }\n const origMoveNode = f.w.moveNode;\n if (origMoveNode) {\n f.w.moveNode = (id, x, y) => {\n origMoveNode.call(f.w, id, x, y);\n this._dirty.add(id);\n f._ensureAdj?.();\n const adj = f._nodeAdj;\n if (adj && adj[id]) for (let k = 0; k < adj[id].length; k++) this._dirtyEdges.add(adj[id][k]);\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 const nodeStride = NODE_STRIDE_F;\n const edgeStride = EDGE_VERTS_PER * EDGE_STRIDE_F;\n const fullNodes = this._fullRebuildNeeded || n !== this._lastNodeCount;\n const fullEdges = this._fullRebuildNeeded || m !== this._lastEdgeCount;\n if (fullNodes) {\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 * nodeStride));\n this._dirty.clear();\n } else if (this._dirty.size) {\n this._uploadRuns(this._dirty, this.nodeBuf, this.nodeData, nodeStride, (i) => this._writeNode(i));\n }\n if (fullEdges) {\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 * edgeStride));\n this._dirtyEdges.clear();\n } else if (this._dirtyEdges.size) {\n // Filter out edges that no longer exist (deletes shift the buffer end).\n for (const e of this._dirtyEdges) if (e >= m) this._dirtyEdges.delete(e);\n this._uploadRuns(this._dirtyEdges, this.edgeBuf, this.edgeData, edgeStride, (i) => this._writeEdge(i));\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); }\n markAllDirty() { this._fullRebuildNeeded = true; }\n\n /** Upload a dirty Set by collapsing it into contiguous runs of `stride` floats. */\n _uploadRuns(set, buf, dataArr, stride, writeOne) {\n const gl = this.gl;\n gl.bindBuffer(gl.ARRAY_BUFFER, buf);\n const sorted = [...set].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]; continue; }\n for (let i = runStart; i <= runEnd; i++) writeOne(i);\n gl.bufferSubData(gl.ARRAY_BUFFER, runStart * stride * 4,\n dataArr.subarray(runStart * stride, (runEnd + 1) * stride));\n runStart = sorted[k]; runEnd = sorted[k];\n }\n for (let i = runStart; i <= runEnd; i++) writeOne(i);\n gl.bufferSubData(gl.ARRAY_BUFFER, runStart * stride * 4,\n dataArr.subarray(runStart * stride, (runEnd + 1) * stride));\n set.clear();\n }\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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"}