@sebastianwessel/isostate 0.1.0 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +62 -0
- package/dist/animation/controller.d.ts.map +1 -1
- package/dist/browser/isostate.runtime.js +19 -8
- package/dist/browser/isostate.runtime.js.map +1 -1
- package/dist/chunks/{index-CDQt8CfR.js → index-DEv2-G9F.js} +20 -9
- package/dist/chunks/index-DEv2-G9F.js.map +1 -0
- package/dist/dsl/index.js +1 -1
- package/dist/dsl/index.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/runtime/index.js +1 -1
- package/package.json +13 -1
- package/dist/chunks/index-CDQt8CfR.js.map +0 -1
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { A as AnimationController, a as AnimationEngine, b as AssetRegistryImpl, D as DEFAULT_CELL_SIZE, c as applyThemeToElement, d as buildSceneDOM, e as calculateTransform, f as calculateVisualSize, g as composeTheme, h as createAssetRegistry, i as createDefaultRegistry, j as easeInCubic, k as easeInOutCubic, l as easeOutCubic, m as linear, n as mountScene, p as projectToScreen, r as resolveEasing, o as resolveTheme } from './chunks/index-
|
|
1
|
+
export { A as AnimationController, a as AnimationEngine, b as AssetRegistryImpl, D as DEFAULT_CELL_SIZE, c as applyThemeToElement, d as buildSceneDOM, e as calculateTransform, f as calculateVisualSize, g as composeTheme, h as createAssetRegistry, i as createDefaultRegistry, j as easeInCubic, k as easeInOutCubic, l as easeOutCubic, m as linear, n as mountScene, p as projectToScreen, r as resolveEasing, o as resolveTheme } from './chunks/index-DEv2-G9F.js';
|
|
2
2
|
export { A as AnimationError, C as ControllerError, P as ParseError, R as RenderError, V as ValidationErrorClass } from './chunks/errors-DyqEkrm5.js';
|
|
3
3
|
|
|
4
4
|
/** Runtime set of valid entry animation strings */
|
package/dist/runtime/index.js
CHANGED
package/package.json
CHANGED
|
@@ -1,7 +1,15 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sebastianwessel/isostate",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.2",
|
|
4
4
|
"description": "Isometric scene engine — SVG rendering, animation, and YAML DSL for browser-based isometric scenes.",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"isostate",
|
|
7
|
+
"isometric",
|
|
8
|
+
"svg",
|
|
9
|
+
"animation",
|
|
10
|
+
"yaml",
|
|
11
|
+
"scrollytelling"
|
|
12
|
+
],
|
|
5
13
|
"type": "module",
|
|
6
14
|
"main": "./dist/index.js",
|
|
7
15
|
"types": "./dist/index.d.ts",
|
|
@@ -55,6 +63,10 @@
|
|
|
55
63
|
},
|
|
56
64
|
"author": "Sebastian Wessel",
|
|
57
65
|
"license": "MIT",
|
|
66
|
+
"homepage": "https://sebastianwessel.github.io/isostate",
|
|
67
|
+
"bugs": {
|
|
68
|
+
"url": "https://github.com/sebastianwessel/isostate/issues"
|
|
69
|
+
},
|
|
58
70
|
"repository": {
|
|
59
71
|
"type": "git",
|
|
60
72
|
"url": "git+ssh://git@github.com/sebastianwessel/isostate.git",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index-CDQt8CfR.js","sources":["../../src/animation/animation-engine.ts","../../src/types/asset-registry.ts","../../src/utils/projection.ts","../../src/rendering/animation-css.ts","../../src/rendering/asset-node.ts","../../src/rendering/theme.ts","../../src/rendering/rendering-engine.ts","../../src/utils/easing.ts","../../src/animation/controller.ts","../../src/runtime/mount-scene.ts"],"sourcesContent":["import type {\n\tAmbientAnimation,\n\tLifecycleStatus,\n\tPrimitiveContent,\n\tRuntimeConnectorState,\n\tRuntimeConnectorStyle,\n\tRuntimeElementState,\n\tTextContent,\n} from \"../types/node.ts\";\nimport type { RuntimeBundle } from \"../types/runtime-bundle.ts\";\n\nexport type LifecycleKey = \"entering\" | \"present\" | \"exiting\" | \"removed\";\n\n/** Internal state tracked per element across frames. */\ninterface ElementFrame {\n\tid: string;\n\tasset: string;\n\tpos: [number, number];\n\tsize: number;\n\tlifecycle: LifecycleStatus;\n\tambient: AmbientAnimation[];\n\tlayer: string;\n\tentry?: string;\n\texit?: string;\n\ttext?: TextContent;\n\tprimitive?: PrimitiveContent;\n}\n\n/** Internal state tracked per connector across frames. */\ninterface ConnectorFrame {\n\tid: string;\n\troute: [number, number][];\n\tlayer: string;\n\tlifecycle: LifecycleStatus;\n\tstyle: RuntimeConnectorStyle;\n\tstart: RuntimeConnectorState[\"start\"];\n\tend: RuntimeConnectorState[\"end\"];\n\tdirection: RuntimeConnectorState[\"direction\"];\n\tambient: AmbientAnimation[];\n\tentry?: string;\n\texit?: string;\n}\n\n/** Interpolation result for a frame update. */\nexport interface FrameUpdate {\n\tid: string;\n\tasset: string;\n\tlifecycle: LifecycleKey;\n\tambient: AmbientAnimation[];\n\tpos: [number, number];\n\tsize: number;\n\tlayer: string;\n\tentry?: string;\n\texit?: string;\n\ttext?: TextContent;\n\tprimitive?: PrimitiveContent;\n}\n\n/** Interpolation result for a connector frame update. */\nexport interface ConnectorFrameUpdate {\n\tid: string;\n\troute: [number, number][];\n\tlayer: string;\n\tlifecycle: LifecycleKey;\n\tstyle: RuntimeConnectorStyle;\n\tstart: RuntimeConnectorState[\"start\"];\n\tend: RuntimeConnectorState[\"end\"];\n\tdirection: RuntimeConnectorState[\"direction\"];\n\tambient: AmbientAnimation[];\n\tentry?: string;\n\texit?: string;\n}\n\n/**\n * Animation engine — resolves progress against compiled RuntimeBundle scene stops.\n *\n * The engine does not manipulate DOM. It computes interpolation data and lifecycle\n * transitions that the controller applies to the rendering engine.\n */\nexport class AnimationEngine {\n\tprivate _bundle: RuntimeBundle | null = null;\n\tprivate _progress = 0;\n\tprivate _paused = false;\n\tprivate _prevFrameMap = new Map<string, ElementFrame>();\n\tprivate _elementFrameMap = new Map<string, ElementFrame>();\n\tprivate _prevConnectorFrameMap = new Map<string, ConnectorFrame>();\n\tprivate _connectorFrameMap = new Map<string, ConnectorFrame>();\n\n\tget bundle(): RuntimeBundle | null {\n\t\treturn this._bundle;\n\t}\n\n\tget progress(): number {\n\t\treturn this._progress;\n\t}\n\n\tgetProgress(): number {\n\t\treturn this._progress;\n\t}\n\n\tget paused(): boolean {\n\t\treturn this._paused;\n\t}\n\n\tisPaused(): boolean {\n\t\treturn this._paused;\n\t}\n\n\tget elementsCount(): number {\n\t\treturn this._elementFrameMap.size;\n\t}\n\n\tget connectorsCount(): number {\n\t\treturn this._connectorFrameMap.size;\n\t}\n\n\t/** Initialize with a compiled runtime bundle. */\n\tinit(bundle: RuntimeBundle): void {\n\t\tthis._bundle = bundle;\n\t\tthis._progress = 0;\n\t\tthis._paused = false;\n\t\tthis._prevFrameMap.clear();\n\t\tthis._elementFrameMap.clear();\n\t\tthis._prevConnectorFrameMap.clear();\n\t\tthis._connectorFrameMap.clear();\n\n\t\tconst initial = resolveFrameMap(bundle, 0);\n\t\tthis._elementFrameMap = initial;\n\t\tthis._prevFrameMap = cloneFrameMap(initial);\n\t\tconst initialConnectors = resolveConnectorFrameMap(bundle, 0);\n\t\tthis._connectorFrameMap = initialConnectors;\n\t\tthis._prevConnectorFrameMap = cloneConnectorFrameMap(initialConnectors);\n\t}\n\n\t/** Set current scroll progress (0-1) and compute frame update. */\n\tsetProgress(progress: number): void {\n\t\tconst clamped = Math.max(0, Math.min(1, progress));\n\t\tif (this._paused) return;\n\t\tthis._progress = clamped;\n\t\tif (!this._bundle) return;\n\n\t\tthis._prevFrameMap = cloneFrameMap(this._elementFrameMap);\n\t\tthis._elementFrameMap = resolveFrameMap(this._bundle, clamped);\n\t\tthis._prevConnectorFrameMap = cloneConnectorFrameMap(this._connectorFrameMap);\n\t\tthis._connectorFrameMap = resolveConnectorFrameMap(this._bundle, clamped);\n\t}\n\n\t/** Get interpolated FrameUpdate for an element id or runtime element. */\n\tgetElementUpdate(element: string | Pick<RuntimeElementState, \"id\">): FrameUpdate {\n\t\tconst id = typeof element === \"string\" ? element : element.id;\n\t\tconst frame = this._elementFrameMap.get(id);\n\t\tif (!frame) {\n\t\t\treturn {\n\t\t\t\tid,\n\t\t\t\tasset: \"\",\n\t\t\t\tlifecycle: \"removed\",\n\t\t\t\tambient: [],\n\t\t\t\tpos: [0, 0],\n\t\t\t\tsize: 1,\n\t\t\t\tlayer: \"\",\n\t\t\t};\n\t\t}\n\t\treturn frameToUpdate(frame);\n\t}\n\n\tgetFrameUpdates(): FrameUpdate[] {\n\t\treturn [...this._elementFrameMap.values()].map(frameToUpdate);\n\t}\n\n\t/** Get interpolated ConnectorFrameUpdate for a connector id or runtime connector. */\n\tgetConnectorUpdate(connector: string | Pick<RuntimeConnectorState, \"id\">): ConnectorFrameUpdate {\n\t\tconst id = typeof connector === \"string\" ? connector : connector.id;\n\t\tconst frame = this._connectorFrameMap.get(id);\n\t\tif (!frame) return connectorFrameToUpdate(removedConnectorFrame(id));\n\t\treturn connectorFrameToUpdate(frame);\n\t}\n\n\tgetConnectorFrameUpdates(): ConnectorFrameUpdate[] {\n\t\treturn [...this._connectorFrameMap.values()].map(connectorFrameToUpdate);\n\t}\n\n\t/** Compute lifecycle transition between previous and current frame. */\n\tgetLifecycleTransition(elId: string): {\n\t\tfrom: LifecycleKey;\n\t\tto: LifecycleKey;\n\t} | null {\n\t\tconst prev = this._prevFrameMap.get(elId);\n\t\tconst current = this._elementFrameMap.get(elId);\n\t\tconst from = (prev?.lifecycle ?? \"removed\") as LifecycleKey;\n\t\tconst to = (current?.lifecycle ?? \"removed\") as LifecycleKey;\n\t\tif (from === to) return null;\n\t\treturn {\n\t\t\tfrom,\n\t\t\tto,\n\t\t};\n\t}\n\n\t/** Compute lifecycle transition between previous and current connector frame. */\n\tgetConnectorLifecycleTransition(connectorId: string): {\n\t\tfrom: LifecycleKey;\n\t\tto: LifecycleKey;\n\t} | null {\n\t\tconst prev = this._prevConnectorFrameMap.get(connectorId);\n\t\tconst current = this._connectorFrameMap.get(connectorId);\n\t\tconst from = (prev?.lifecycle ?? \"removed\") as LifecycleKey;\n\t\tconst to = (current?.lifecycle ?? \"removed\") as LifecycleKey;\n\t\tif (from === to) return null;\n\t\treturn {\n\t\t\tfrom,\n\t\t\tto,\n\t\t};\n\t}\n\n\tgetCurrentState(): RuntimeBundle[\"scenes\"][number] | null {\n\t\tconst bundle = this._bundle;\n\t\tif (!bundle) return null;\n\t\tconst pair = findSurroundingStops(bundle.scenes, this._progress);\n\t\treturn pair?.nextStop ?? bundle.scenes[0] ?? null;\n\t}\n\n\tpause(): void {\n\t\tthis._paused = true;\n\t}\n\n\tresume(): void {\n\t\tthis._paused = false;\n\t}\n\n\tdestroy(): void {\n\t\tthis._bundle = null;\n\t\tthis._progress = 0;\n\t\tthis._paused = false;\n\t\tthis._elementFrameMap.clear();\n\t\tthis._prevFrameMap.clear();\n\t\tthis._connectorFrameMap.clear();\n\t\tthis._prevConnectorFrameMap.clear();\n\t}\n}\n\n// ── Interpolation helpers ──────────────────────────────────────────────────\n\nfunction resolveFrameMap(bundle: RuntimeBundle, progress: number): Map<string, ElementFrame> {\n\tconst pair = findSurroundingStops(bundle.scenes, progress);\n\tconst result = new Map<string, ElementFrame>();\n\tif (!pair) return result;\n\n\tconst ids = new Set<string>();\n\tfor (const stop of bundle.scenes) {\n\t\tfor (const element of stop.elements ?? []) ids.add(element.id);\n\t}\n\tfor (const element of pair.prevStop.elements ?? []) ids.add(element.id);\n\tfor (const element of pair.nextStop.elements ?? []) ids.add(element.id);\n\n\tfor (const id of ids) {\n\t\tconst frame = withRemovedElementGeometry(\n\t\t\tinterpolateElement(id, pair.prevStop, pair.nextStop, pair.t),\n\t\t\tbundle.scenes,\n\t\t\tid,\n\t\t\tprogress,\n\t\t);\n\t\tresult.set(id, frame);\n\t}\n\n\treturn result;\n}\n\nfunction resolveConnectorFrameMap(bundle: RuntimeBundle, progress: number): Map<string, ConnectorFrame> {\n\tconst pair = findSurroundingStops(bundle.scenes, progress);\n\tconst result = new Map<string, ConnectorFrame>();\n\tif (!pair) return result;\n\n\tconst ids = new Set<string>();\n\tfor (const stop of bundle.scenes) {\n\t\tfor (const connector of stop.connectors ?? []) ids.add(connector.id);\n\t}\n\tfor (const connector of pair.prevStop.connectors ?? []) ids.add(connector.id);\n\tfor (const connector of pair.nextStop.connectors ?? []) ids.add(connector.id);\n\n\tfor (const id of ids) {\n\t\tconst frame = interpolateConnector(id, pair.prevStop, pair.nextStop, pair.t);\n\t\tresult.set(id, frame);\n\t}\n\n\treturn result;\n}\n\nfunction findSurroundingStops(\n\tstops: RuntimeBundle[\"scenes\"],\n\tprogress: number,\n): {\n\tprevStop: RuntimeBundle[\"scenes\"][number];\n\tnextStop: RuntimeBundle[\"scenes\"][number];\n\tt: number;\n\tnextIndex: number;\n} | null {\n\tif (stops.length === 0) return null;\n\tconst sorted = [...stops].sort((a, b) => a.progress - b.progress);\n\tif (sorted.length === 1 || progress <= sorted[0].progress) {\n\t\treturn { prevStop: sorted[0], nextStop: sorted[0], t: 0, nextIndex: 0 };\n\t}\n\n\tconst lastIndex = sorted.length - 1;\n\tif (progress >= sorted[lastIndex].progress) {\n\t\treturn {\n\t\t\tprevStop: sorted[lastIndex - 1] ?? sorted[lastIndex],\n\t\t\tnextStop: sorted[lastIndex],\n\t\t\tt: 1,\n\t\t\tnextIndex: lastIndex,\n\t\t};\n\t}\n\n\tfor (let i = 1; i < sorted.length; i++) {\n\t\tconst nextStop = sorted[i];\n\t\tif (nextStop.progress >= progress) {\n\t\t\tconst prevStop = sorted[i - 1];\n\t\t\tconst range = nextStop.progress - prevStop.progress;\n\t\t\tconst t = range > 0 ? (progress - prevStop.progress) / range : 0;\n\t\t\treturn { prevStop, nextStop, t, nextIndex: i };\n\t\t}\n\t}\n\n\treturn null;\n}\n\nfunction interpolateElement(\n\tid: string,\n\tprevStop: RuntimeBundle[\"scenes\"][number],\n\tnextStop: RuntimeBundle[\"scenes\"][number],\n\tt: number,\n): ElementFrame {\n\tconst prev = findElement(prevStop, id);\n\tconst next = findElement(nextStop, id);\n\tconst source = next ?? prev;\n\tif (!source) {\n\t\treturn removedFrame(id);\n\t}\n\n\tif (!prev || prev.presence === \"removed\") {\n\t\treturn frameFromElement(source, source.presence === \"removed\" || t < 1 ? \"removed\" : source.presence);\n\t}\n\n\tif (!next || next.presence === \"removed\") {\n\t\treturn frameFromElement(prev, t < 1 ? prev.presence : \"removed\");\n\t}\n\n\tconst lifecycle = t < 1 ? prev.presence : next.presence;\n\treturn {\n\t\tid,\n\t\tasset: next.asset,\n\t\tpos: interpolatePos(prev.pos, next.pos, t),\n\t\tsize: prev.size + (next.size - prev.size) * t,\n\t\tlifecycle,\n\t\tambient: cloneAmbient(next.ambient),\n\t\tlayer: t < 1 ? prev.layer : next.layer,\n\t\tentry: next.enter ?? prev.enter,\n\t\texit: next.exit ?? prev.exit,\n\t\ttext: cloneText(next.text ?? prev.text),\n\t\tprimitive: clonePrimitive(next.primitive ?? prev.primitive),\n\t};\n}\n\nfunction interpolateConnector(\n\tid: string,\n\tprevStop: RuntimeBundle[\"scenes\"][number],\n\tnextStop: RuntimeBundle[\"scenes\"][number],\n\tt: number,\n): ConnectorFrame {\n\tconst prev = findConnector(prevStop, id);\n\tconst next = findConnector(nextStop, id);\n\tconst source = next ?? prev;\n\tif (!source) return removedConnectorFrame(id);\n\n\tif (!prev || prev.presence === \"removed\") {\n\t\treturn frameFromConnector(source, source.presence === \"removed\" || t < 1 ? \"removed\" : source.presence);\n\t}\n\n\tif (!next || next.presence === \"removed\") {\n\t\treturn frameFromConnector(prev, t < 1 ? prev.presence : \"removed\");\n\t}\n\n\tconst lifecycle = t < 1 ? prev.presence : next.presence;\n\treturn {\n\t\tid,\n\t\troute: interpolateRoute(prev.route, next.route, t),\n\t\tlayer: t < 1 ? prev.layer : next.layer,\n\t\tlifecycle,\n\t\tstyle: cloneConnectorStyle(next.style),\n\t\tstart: next.start,\n\t\tend: next.end,\n\t\tdirection: next.direction,\n\t\tambient: cloneAmbient(next.ambient),\n\t\tentry: next.enter ?? prev.enter,\n\t\texit: next.exit ?? prev.exit,\n\t};\n}\n\nfunction findElement(stop: RuntimeBundle[\"scenes\"][number], id: string): RuntimeElementState | undefined {\n\treturn (stop.elements ?? []).find((element) => element.id === id);\n}\n\nfunction findConnector(stop: RuntimeBundle[\"scenes\"][number], id: string): RuntimeConnectorState | undefined {\n\treturn (stop.connectors ?? []).find((connector) => connector.id === id);\n}\n\nfunction withRemovedElementGeometry(\n\tframe: ElementFrame,\n\tstops: RuntimeBundle[\"scenes\"],\n\tid: string,\n\tprogress: number,\n): ElementFrame {\n\tif (frame.lifecycle !== \"removed\") return frame;\n\tconst reference = findNearestElementGeometry(stops, id, progress);\n\tif (!reference) return frame;\n\treturn {\n\t\t...frame,\n\t\tasset: reference.asset,\n\t\tpos: [...reference.pos],\n\t\tsize: reference.size,\n\t\tambient: cloneAmbient(reference.ambient),\n\t\tlayer: reference.layer,\n\t\tentry: reference.enter,\n\t\texit: reference.exit,\n\t\ttext: cloneText(reference.text),\n\t\tprimitive: clonePrimitive(reference.primitive),\n\t};\n}\n\nfunction findNearestElementGeometry(\n\tstops: RuntimeBundle[\"scenes\"],\n\tid: string,\n\tprogress: number,\n): RuntimeElementState | undefined {\n\tconst sorted = [...stops].sort((a, b) => a.progress - b.progress);\n\tconst next = sorted\n\t\t.filter((stop) => stop.progress >= progress)\n\t\t.flatMap((stop) => stop.elements ?? [])\n\t\t.find((element) => element.id === id && element.presence !== \"removed\");\n\tif (next) return next;\n\n\tfor (let index = sorted.length - 1; index >= 0; index -= 1) {\n\t\tif (sorted[index].progress > progress) continue;\n\t\tconst previous = (sorted[index].elements ?? []).find(\n\t\t\t(element) => element.id === id && element.presence !== \"removed\",\n\t\t);\n\t\tif (previous) return previous;\n\t}\n\treturn undefined;\n}\n\nfunction frameFromElement(element: RuntimeElementState, lifecycle: LifecycleStatus = element.presence): ElementFrame {\n\treturn {\n\t\tid: element.id,\n\t\tasset: element.asset,\n\t\tpos: [...element.pos],\n\t\tsize: element.size,\n\t\tlifecycle,\n\t\tambient: cloneAmbient(element.ambient),\n\t\tlayer: element.layer,\n\t\tentry: element.enter,\n\t\texit: element.exit,\n\t\ttext: cloneText(element.text),\n\t\tprimitive: clonePrimitive(element.primitive),\n\t};\n}\n\nfunction frameFromConnector(\n\tconnector: RuntimeConnectorState,\n\tlifecycle: LifecycleStatus = connector.presence,\n): ConnectorFrame {\n\treturn {\n\t\tid: connector.id,\n\t\troute: cloneRoute(connector.route),\n\t\tlayer: connector.layer,\n\t\tlifecycle,\n\t\tstyle: cloneConnectorStyle(connector.style),\n\t\tstart: connector.start,\n\t\tend: connector.end,\n\t\tdirection: connector.direction,\n\t\tambient: cloneAmbient(connector.ambient),\n\t\tentry: connector.enter,\n\t\texit: connector.exit,\n\t};\n}\n\nfunction removedFrame(id: string): ElementFrame {\n\treturn {\n\t\tid,\n\t\tasset: \"\",\n\t\tpos: [0, 0],\n\t\tsize: 1,\n\t\tlifecycle: \"removed\",\n\t\tambient: [],\n\t\tlayer: \"\",\n\t};\n}\n\nfunction removedConnectorFrame(id: string): ConnectorFrame {\n\treturn {\n\t\tid,\n\t\troute: [],\n\t\tlayer: \"\",\n\t\tlifecycle: \"removed\",\n\t\tstyle: {\n\t\t\tvariant: \"line\",\n\t\t\tpattern: \"solid\",\n\t\t\tstroke: \"#2563eb\",\n\t\t\tstrokeWidth: 3,\n\t\t\topacity: 1,\n\t\t\toutlineWidth: 0,\n\t\t\tlane: \"none\",\n\t\t},\n\t\tstart: \"none\",\n\t\tend: \"none\",\n\t\tdirection: \"route\",\n\t\tambient: [],\n\t};\n}\n\nfunction interpolatePos(prev: [number, number], next: [number, number], t: number): [number, number] {\n\treturn [prev[0] + (next[0] - prev[0]) * t, prev[1] + (next[1] - prev[1]) * t];\n}\n\nfunction interpolateRoute(prev: [number, number][], next: [number, number][], t: number): [number, number][] {\n\tif (prev.length !== next.length) return cloneRoute(t < 1 ? prev : next);\n\treturn prev.map((point, index) => interpolatePos(point, next[index], t));\n}\n\nfunction cloneRoute(route: [number, number][]): [number, number][] {\n\treturn route.map((point) => [point[0], point[1]]);\n}\n\nfunction cloneConnectorStyle(style: RuntimeConnectorStyle): RuntimeConnectorStyle {\n\treturn {\n\t\t...style,\n\t\t...(style.dash ? { dash: [...style.dash] as [number, number] } : {}),\n\t};\n}\n\nfunction cloneAmbient(ambient: AmbientAnimation[] | undefined): AmbientAnimation[] {\n\treturn (ambient ?? []).map((item) => ({ ...item }));\n}\n\nfunction frameToUpdate(frame: ElementFrame): FrameUpdate {\n\treturn {\n\t\tid: frame.id,\n\t\tasset: frame.asset,\n\t\tlifecycle: frame.lifecycle as LifecycleKey,\n\t\tambient: cloneAmbient(frame.ambient),\n\t\tpos: [...frame.pos],\n\t\tsize: frame.size,\n\t\tlayer: frame.layer,\n\t\tentry: frame.entry,\n\t\texit: frame.exit,\n\t\ttext: cloneText(frame.text),\n\t\tprimitive: clonePrimitive(frame.primitive),\n\t};\n}\n\nfunction connectorFrameToUpdate(frame: ConnectorFrame): ConnectorFrameUpdate {\n\treturn {\n\t\tid: frame.id,\n\t\troute: cloneRoute(frame.route),\n\t\tlayer: frame.layer,\n\t\tlifecycle: frame.lifecycle as LifecycleKey,\n\t\tstyle: cloneConnectorStyle(frame.style),\n\t\tstart: frame.start,\n\t\tend: frame.end,\n\t\tdirection: frame.direction,\n\t\tambient: cloneAmbient(frame.ambient),\n\t\tentry: frame.entry,\n\t\texit: frame.exit,\n\t};\n}\n\nfunction cloneFrameMap(map: Map<string, ElementFrame>): Map<string, ElementFrame> {\n\tconst clone = new Map<string, ElementFrame>();\n\tfor (const [id, frame] of map) {\n\t\tclone.set(id, {\n\t\t\t...frame,\n\t\t\tpos: [...frame.pos],\n\t\t\tambient: cloneAmbient(frame.ambient),\n\t\t\ttext: cloneText(frame.text),\n\t\t\tprimitive: clonePrimitive(frame.primitive),\n\t\t});\n\t}\n\treturn clone;\n}\n\nfunction cloneText(text: TextContent | undefined): TextContent | undefined {\n\treturn text ? { ...text } : undefined;\n}\n\nfunction clonePrimitive(primitive: PrimitiveContent | undefined): PrimitiveContent | undefined {\n\tif (!primitive) return undefined;\n\treturn {\n\t\t...(primitive.rectangle\n\t\t\t? {\n\t\t\t\t\trectangle: {\n\t\t\t\t\t\t...primitive.rectangle,\n\t\t\t\t\t\tdash: cloneDash(primitive.rectangle.dash),\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t: {}),\n\t\t...(primitive.circle\n\t\t\t? {\n\t\t\t\t\tcircle: {\n\t\t\t\t\t\t...primitive.circle,\n\t\t\t\t\t\tdash: cloneDash(primitive.circle.dash),\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t: {}),\n\t\t...(primitive.polygon\n\t\t\t? {\n\t\t\t\t\tpolygon: {\n\t\t\t\t\t\t...primitive.polygon,\n\t\t\t\t\t\tdash: cloneDash(primitive.polygon.dash),\n\t\t\t\t\t\tpoints: cloneRoute(primitive.polygon.points),\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t: {}),\n\t\t...(primitive.line\n\t\t\t? {\n\t\t\t\t\tline: {\n\t\t\t\t\t\t...primitive.line,\n\t\t\t\t\t\tdash: cloneDash(primitive.line.dash),\n\t\t\t\t\t\tpoints: cloneRoute(primitive.line.points),\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t: {}),\n\t};\n}\n\nfunction cloneDash(dash: [number, number] | undefined): [number, number] | undefined {\n\treturn dash ? [dash[0], dash[1]] : undefined;\n}\n\nfunction cloneConnectorFrameMap(map: Map<string, ConnectorFrame>): Map<string, ConnectorFrame> {\n\tconst clone = new Map<string, ConnectorFrame>();\n\tfor (const [id, frame] of map) {\n\t\tclone.set(id, {\n\t\t\t...frame,\n\t\t\troute: cloneRoute(frame.route),\n\t\t\tstyle: cloneConnectorStyle(frame.style),\n\t\t\tambient: cloneAmbient(frame.ambient),\n\t\t});\n\t}\n\treturn clone;\n}\n","import type { AssetCategory, AssetDefinition, AssetRegistry, Theme } from \"./assets.ts\";\n\n// ── Built-in themes ────────────────────────────────────────────────────────\n\nconst BUILTIN_THEMES: Record<string, Record<string, string>> = {\n\tlight: {\n\t\t\"--color-top\": \"#e2e8f0\",\n\t\t\"--color-front\": \"#94a3b8\",\n\t\t\"--color-side\": \"#64748b\",\n\t\t\"--color-back\": \"#475569\",\n\t\t\"--color-leaf\": \"#15803d\",\n\t\t\"--color-trunk\": \"#78350f\",\n\t\t\"--color-accent\": \"#3b82f6\",\n\t},\n\tdark: {\n\t\t\"--color-top\": \"#334155\",\n\t\t\"--color-front\": \"#1e293b\",\n\t\t\"--color-side\": \"#0f172a\",\n\t\t\"--color-back\": \"#020617\",\n\t\t\"--color-leaf\": \"#166534\",\n\t\t\"--color-trunk\": \"#451a03\",\n\t\t\"--color-accent\": \"#60a5fa\",\n\t},\n\tbrand: {\n\t\t\"--color-top\": \"#c7d2fe\",\n\t\t\"--color-front\": \"#818cf8\",\n\t\t\"--color-side\": \"#6366f1\",\n\t\t\"--color-back\": \"#4338ca\",\n\t\t\"--color-leaf\": \"#22c55e\",\n\t\t\"--color-trunk\": \"#854d0e\",\n\t\t\"--color-accent\": \"#f59e0b\",\n\t},\n};\n\n/**\n * Resolve a theme name to its CSS variable map.\n * Returns undefined if the theme is not found.\n */\nexport function resolveTheme(name: string): Record<string, string> | undefined {\n\treturn BUILTIN_THEMES[name];\n}\n\n/**\n * Compose a new theme by extending an existing one with overrides.\n */\nexport function composeTheme(baseName: string, overrides: Record<string, string>): Theme {\n\tconst base = BUILTIN_THEMES[baseName];\n\tif (!base) {\n\t\treturn { name: baseName, vars: { ...overrides } };\n\t}\n\treturn { name: baseName, vars: { ...base, ...overrides } };\n}\n\n// ── Asset registry implementation ──────────────────────────────────────────\n\n/**\n * Default asset registry implementation.\n * Maps asset ids to definitions and supports category filtering.\n */\nexport class AssetRegistryImpl implements AssetRegistry {\n\tprivate _assets = new Map<string, AssetDefinition>();\n\n\tregister(asset: AssetDefinition): void {\n\t\tthis._assets.set(asset.id, asset);\n\t}\n\n\tget(id: string): AssetDefinition | undefined {\n\t\treturn this._assets.get(id);\n\t}\n\n\tgetAll(category?: AssetCategory): AssetDefinition[] {\n\t\tif (category) {\n\t\t\treturn [...this._assets.values()].filter((a) => a.category === category);\n\t\t}\n\t\treturn [...this._assets.values()];\n\t}\n\n\thas(id: string): boolean {\n\t\treturn this._assets.has(id);\n\t}\n\n\tremove(id: string): void {\n\t\tthis._assets.delete(id);\n\t}\n}\n\nexport function createAssetRegistry(assets: AssetDefinition[] = []): AssetRegistryImpl {\n\tconst registry = new AssetRegistryImpl();\n\tfor (const asset of assets) {\n\t\tregistry.register(asset);\n\t}\n\treturn registry;\n}\n\n/** Create a fresh registry populated with the built-in demo assets. */\nexport function createDefaultRegistry(): AssetRegistryImpl {\n\treturn createAssetRegistry([\n\t\t{\n\t\t\tid: \"iso-platform\",\n\t\t\tcategory: \"infrastructure\",\n\t\t},\n\t\t{\n\t\t\tid: \"iso-server\",\n\t\t\tcategory: \"equipment\",\n\t\t},\n\t\t{\n\t\t\tid: \"iso-database\",\n\t\t\tcategory: \"equipment\",\n\t\t},\n\t\t{\n\t\t\tid: \"iso-connector\",\n\t\t\tcategory: \"decoration\",\n\t\t},\n\t\t{\n\t\t\tid: \"iso-cloud\",\n\t\t\tcategory: \"decoration\",\n\t\t},\n\t]);\n}\n","/** Default cell size in pixels */\nexport const DEFAULT_CELL_SIZE = 64;\n\n/**\n * Calculate raw scene-space coordinates from isometric grid position.\n * Layout is applied separately by subtracting resolved bounds and adding padding.\n */\nexport function projectToRaw(gridX: number, gridY: number, cellSize: number): { rawX: number; rawY: number } {\n\treturn {\n\t\trawX: cellSize * (gridX - gridY) * 0.5,\n\t\trawY: cellSize * (gridX + gridY) * 0.25,\n\t};\n}\n\n/**\n * Calculate screen coordinates from raw isometric projection and resolved bounds.\n */\nexport function projectToScreen(\n\tgridX: number,\n\tgridY: number,\n\tcellSize: number,\n\tboundsMinX = 0,\n\tboundsMinY = 0,\n\tpaddingX = 0,\n\tpaddingY = 0,\n): { screenX: number; screenY: number } {\n\tconst { rawX, rawY } = projectToRaw(gridX, gridY, cellSize);\n\treturn {\n\t\tscreenX: rawX - boundsMinX + paddingX,\n\t\tscreenY: rawY - boundsMinY + paddingY,\n\t};\n}\n\n/** Calculate the screen size for an element based on its grid size. */\nexport function calculateVisualSize(gridSize: number, cellSize: number): number {\n\treturn cellSize * gridSize;\n}\n\n/** Calculate the element transform string for positioning and scaling. */\nexport function calculateTransform(screenX: number, screenY: number, visualSize: number, cellSize: number): string {\n\tconst scale = visualSize / cellSize;\n\treturn `translate(${screenX}px, ${screenY}px) scale(${scale})`;\n}\n","/** Build built-in entry, exit, ambient, and reduced-motion CSS keyframes. */\nexport function buildKeyframeCSS(): string {\n\treturn [\n\t\t\"@keyframes iso-anim-fade-in{from{opacity:0}to{opacity:1}}\",\n\t\t\"@keyframes iso-anim-fade-in-grow{from{opacity:0;scale:.01}to{opacity:1;scale:1}}\",\n\t\t\"@keyframes iso-anim-fall-in{from{opacity:0;translate:0 -40px}to{opacity:1;translate:0 0}}\",\n\t\t\"@keyframes iso-anim-rise-from-ground{from{opacity:0;translate:0 40px}to{opacity:1;translate:0 0}}\",\n\t\t\"@keyframes iso-anim-slide-in-left{from{opacity:0;translate:-60px 0}to{opacity:1;translate:0 0}}\",\n\t\t\"@keyframes iso-anim-slide-in-right{from{opacity:0;translate:60px 0}to{opacity:1;translate:0 0}}\",\n\t\t\"@keyframes iso-anim-flip-in{from{opacity:1;scale:0 1}to{opacity:1;scale:1 1}}\",\n\t\t\"@keyframes iso-anim-fade-out{from{opacity:1}to{opacity:0}}\",\n\t\t\"@keyframes iso-anim-fade-out-shrink{from{opacity:1;scale:1}to{opacity:0;scale:.01}}\",\n\t\t\"@keyframes iso-anim-fall-through-ground{from{opacity:1;translate:0 0}to{opacity:0;translate:0 40px}}\",\n\t\t\"@keyframes iso-anim-rise-away{from{opacity:1;translate:0 0}to{opacity:0;translate:0 -40px}}\",\n\t\t\"@keyframes iso-anim-slide-out-left{from{opacity:1;translate:0 0}to{opacity:0;translate:-60px 0}}\",\n\t\t\"@keyframes iso-anim-slide-out-right{from{opacity:1;translate:0 0}to{opacity:0;translate:60px 0}}\",\n\t\t\"@keyframes iso-anim-flip-out{from{opacity:1;scale:1 1}to{opacity:0;scale:0 1}}\",\n\t\t\"@keyframes iso-anim-pulse{0%,100%{opacity:.7}50%{opacity:1}}\",\n\t\t\"@keyframes iso-anim-float{0%,100%{translate:0 0}50%{translate:0 -6px}}\",\n\t\t\"@keyframes iso-anim-shake{0%,25%,75%,100%{translate:0 0}50%{translate:3px 0}}\",\n\t\t\"@keyframes iso-anim-glow{0%,100%{filter:drop-shadow(0 0 2px rgba(255,255,255,.5))}50%{filter:drop-shadow(0 0 8px rgba(255,255,255,.9))}}\",\n\t\t\"@keyframes iso-anim-spin{from{rotate:0deg}to{rotate:360deg}}\",\n\t\t\"@keyframes iso-anim-blink{0%,49%{opacity:1}50%,100%{opacity:0}}\",\n\t\t\"@keyframes iso-connector-flow-route{from{stroke-dashoffset:0}to{stroke-dashoffset:calc(-1px * var(--iso-flow-distance,20))}}\",\n\t\t\"@keyframes iso-connector-flow-reverse{from{stroke-dashoffset:0}to{stroke-dashoffset:calc(1px * var(--iso-flow-distance,20))}}\",\n\t\t\".iso-connector-pattern-dashed .iso-connector-shaft,.iso-connector-pattern-dotted .iso-connector-shaft{--iso-flow-distance:20}\",\n\t\t\".iso-connector-direction-route .iso-connector-shaft.iso-ambient-flow{animation:iso-connector-flow-route 900ms linear infinite}\",\n\t\t\".iso-connector-direction-reverse .iso-connector-shaft.iso-ambient-flow{animation:iso-connector-flow-reverse 900ms linear infinite}\",\n\t\t\"@media (prefers-reduced-motion: reduce){.iso-element,.iso-connector{animation-duration:1ms!important}.iso-ambient-pulse,.iso-ambient-float,.iso-ambient-shake,.iso-ambient-glow,.iso-ambient-spin,.iso-ambient-blink,.iso-ambient-flow{animation:none!important}}\",\n\t].join(\"\\n\");\n}\n","import { RenderError } from \"../types/errors.ts\";\nimport type { LinePrimitive, PrimitiveContent, PrimitiveStyle, TextAlign, TextContent } from \"../types/node.ts\";\nimport type { RuntimeBundle } from \"../types/runtime-bundle.ts\";\nimport { projectToRaw } from \"../utils/projection.ts\";\n\nconst NS = \"http://www.w3.org/2000/svg\";\n\ntype ResolvedAsset = { url: string; anchor?: [number, number] };\n\nexport type AssetResolver = (name: string) => ResolvedAsset | undefined;\n\nexport function createAssetResolver(bundle?: RuntimeBundle): AssetResolver {\n\tconst embedded = new Map<string, ResolvedAsset>();\n\tconst bundleAssets = bundle?.assets;\n\n\tif (bundleAssets && typeof bundleAssets === \"object\") {\n\t\tfor (const [name, asset] of Object.entries(bundleAssets)) {\n\t\t\tif (asset && typeof asset === \"object\" && typeof asset.url === \"string\") {\n\t\t\t\tembedded.set(name, { url: asset.url, anchor: asset.anchor });\n\t\t\t}\n\t\t}\n\t}\n\n\treturn (name: string) => embedded.get(name);\n}\n\nexport function createAssetNode(asset: ResolvedAsset, assetName: string, cellSize: number): SVGGElement {\n\treturn createUrlAssetNode(asset.url, assetName, cellSize, asset.anchor);\n}\n\nexport function createTextAssetNode(\n\ttextContent: TextContent | undefined,\n\tassetName: string,\n\tcellSize: number,\n): SVGGElement {\n\tif (!textContent?.value) {\n\t\tthrow new RenderError(\"TEXT_CONTENT_MISSING\", `Text content is missing for built-in asset: ${assetName}`, {\n\t\t\tasset: assetName,\n\t\t});\n\t}\n\n\tconst group = document.createElementNS(NS, \"g\") as SVGGElement;\n\tconst text = document.createElementNS(NS, \"text\") as SVGTextElement;\n\tconst align = textContent.align ?? \"middle\";\n\tconst fontSize = textContent.fontSize ?? 12;\n\tconst lineHeight = textContent.lineHeight ?? 1.2;\n\tconst anchorX = textAnchorX(align, cellSize);\n\n\ttext.setAttribute(\"x\", String(anchorX));\n\ttext.setAttribute(\"y\", String(-cellSize));\n\ttext.setAttribute(\"text-anchor\", align);\n\ttext.setAttribute(\"dominant-baseline\", \"text-before-edge\");\n\ttext.setAttribute(\"font-family\", \"Arial, Helvetica, sans-serif\");\n\ttext.setAttribute(\"font-size\", String(fontSize));\n\ttext.setAttribute(\"font-weight\", String(textContent.fontWeight ?? 700));\n\ttext.setAttribute(\"fill\", textContent.fill ?? \"currentColor\");\n\n\tconst lines = normalizeTextLines(textContent.value);\n\tfor (const [index, line] of lines.entries()) {\n\t\tconst tspan = document.createElementNS(NS, \"tspan\") as SVGTSpanElement;\n\t\ttspan.setAttribute(\"x\", String(anchorX));\n\t\ttspan.setAttribute(\"dy\", index === 0 ? \"0\" : String(fontSize * lineHeight));\n\t\ttspan.textContent = line;\n\t\ttext.appendChild(tspan);\n\t}\n\n\tgroup.appendChild(text);\n\treturn group;\n}\n\nexport function createPrimitiveAssetNode(\n\tassetName: string,\n\tprimitive: PrimitiveContent | undefined,\n\tcellSize: number,\n): SVGGElement {\n\tconst group = document.createElementNS(NS, \"g\") as SVGGElement;\n\tswitch (assetName) {\n\t\tcase \"rectangle\":\n\t\t\tappendProjectedPolygon(group, rectanglePoints(), primitive?.rectangle, cellSize);\n\t\t\treturn group;\n\t\tcase \"polygon\":\n\t\t\tappendProjectedPolygon(group, primitive?.polygon?.points, primitive?.polygon, cellSize);\n\t\t\treturn group;\n\t\tcase \"line\":\n\t\t\tappendProjectedPolyline(group, primitive?.line, primitive?.line, cellSize);\n\t\t\treturn group;\n\t\tcase \"circle\":\n\t\t\tappendCircle(group, primitive?.circle, cellSize);\n\t\t\treturn group;\n\t\tdefault:\n\t\t\tthrow new RenderError(\"PRIMITIVE_ASSET_UNKNOWN\", `Unknown built-in primitive asset: ${assetName}`, {\n\t\t\t\tasset: assetName,\n\t\t\t});\n\t}\n}\n\nfunction textAnchorX(align: TextAlign, cellSize: number): number {\n\tif (align === \"start\") return -cellSize / 2;\n\tif (align === \"end\") return cellSize / 2;\n\treturn 0;\n}\n\nfunction normalizeTextLines(value: string): string[] {\n\tconst normalized = value.replace(/\\r\\n?/g, \"\\n\").replace(/\\n$/, \"\");\n\treturn normalized.split(\"\\n\");\n}\n\nfunction rectanglePoints(): [number, number][] {\n\treturn [\n\t\t[0, 0],\n\t\t[1, 0],\n\t\t[1, 1],\n\t\t[0, 1],\n\t];\n}\n\nfunction appendProjectedPolygon(\n\tgroup: SVGGElement,\n\tpoints: [number, number][] | undefined,\n\tstyle: PrimitiveStyle | undefined,\n\tcellSize: number,\n): void {\n\tif (!points) return;\n\tconst polygon = document.createElementNS(NS, \"polygon\") as SVGPolygonElement;\n\tpolygon.setAttribute(\"points\", points.map((point) => projectLocalPoint(point, cellSize)).join(\" \"));\n\tapplyPrimitiveStyle(polygon, style, { fill: \"currentColor\", stroke: \"none\" });\n\tgroup.appendChild(polygon);\n}\n\nfunction appendProjectedPolyline(\n\tgroup: SVGGElement,\n\tline: LinePrimitive | undefined,\n\tstyle: PrimitiveStyle | undefined,\n\tcellSize: number,\n): void {\n\tif (!line?.points) return;\n\tconst polyline = document.createElementNS(NS, \"polyline\") as SVGPolylineElement;\n\tpolyline.setAttribute(\"points\", line.points.map((point) => projectLocalPoint(point, cellSize)).join(\" \"));\n\tpolyline.setAttribute(\"fill\", \"none\");\n\tpolyline.setAttribute(\"stroke-linecap\", line.lineCap ?? \"round\");\n\tpolyline.setAttribute(\"stroke-linejoin\", line.lineJoin ?? \"round\");\n\tapplyPrimitiveStyle(polyline, style, {\n\t\tfill: \"none\",\n\t\tstroke: \"currentColor\",\n\t});\n\tgroup.appendChild(polyline);\n}\n\nfunction appendCircle(group: SVGGElement, style: PrimitiveStyle | undefined, cellSize: number): void {\n\tconst center = projectLocalPoint([0.5, 0.5], cellSize);\n\tconst circle = document.createElementNS(NS, \"circle\") as SVGCircleElement;\n\tconst [cx, cy] = center.split(\",\").map(Number);\n\tcircle.setAttribute(\"cx\", String(cx));\n\tcircle.setAttribute(\"cy\", String(cy));\n\tcircle.setAttribute(\"r\", String(cellSize * 0.2));\n\tapplyPrimitiveStyle(circle, style, {\n\t\tfill: \"currentColor\",\n\t\tstroke: \"none\",\n\t});\n\tgroup.appendChild(circle);\n}\n\nfunction projectLocalPoint(point: [number, number], cellSize: number): string {\n\tconst projected = projectToRaw(point[0], point[1], cellSize);\n\tconst anchor = projectToRaw(1, 1, cellSize);\n\treturn `${projected.rawX - anchor.rawX},${projected.rawY - anchor.rawY}`;\n}\n\nfunction applyPrimitiveStyle(\n\tnode: SVGElement,\n\tstyle: PrimitiveStyle | undefined,\n\tdefaults: { fill: string; stroke: string },\n): void {\n\tnode.setAttribute(\"fill\", style?.fill ?? defaults.fill);\n\tnode.setAttribute(\"stroke\", style?.stroke ?? defaults.stroke);\n\tnode.setAttribute(\"stroke-width\", String(style?.strokeWidth ?? 0));\n\tnode.setAttribute(\"opacity\", String(style?.opacity ?? 1));\n\tif (style?.dash) node.setAttribute(\"stroke-dasharray\", style.dash.join(\" \"));\n}\n\nfunction createUrlAssetNode(url: string, assetName: string, cellSize: number, anchor?: [number, number]): SVGGElement {\n\tif (!isSafeAssetUrl(url)) {\n\t\tthrow new RenderError(\"INVALID_ASSET_URL\", `Asset URL is unsafe: ${assetName}`, { asset: assetName });\n\t}\n\tconst group = document.createElementNS(NS, \"g\") as SVGGElement;\n\tconst image = document.createElementNS(NS, \"image\") as SVGImageElement;\n\tconst resolvedUrl = resolveBrowserAssetUrl(url);\n\tconst [anchorX, anchorY] = anchor ?? [0.5, 1];\n\timage.setAttribute(\"href\", resolvedUrl);\n\timage.setAttributeNS(\"http://www.w3.org/1999/xlink\", \"href\", resolvedUrl);\n\timage.setAttribute(\"x\", String(-cellSize * anchorX));\n\timage.setAttribute(\"y\", String(-cellSize * anchorY));\n\timage.setAttribute(\"width\", String(cellSize));\n\timage.setAttribute(\"height\", String(cellSize));\n\timage.setAttribute(\"preserveAspectRatio\", \"xMidYMax meet\");\n\tgroup.appendChild(image);\n\treturn group;\n}\n\nfunction resolveBrowserAssetUrl(url: string): string {\n\ttry {\n\t\tconst baseURI = document.baseURI;\n\t\treturn typeof baseURI === \"string\" ? new URL(url, baseURI).href : url;\n\t} catch {\n\t\treturn url;\n\t}\n}\n\nfunction isSafeAssetUrl(url: string): boolean {\n\tconst normalized = url.trim().toLowerCase();\n\treturn normalized.length > 0 && !normalized.startsWith(\"javascript:\");\n}\n","import { RenderError } from \"../types/errors.ts\";\n\nconst CSS_CUSTOM_PROPERTY_PATTERN = /^--[a-zA-Z0-9-_]+$/;\n\nexport function applyThemeToElement(element: SVGElement | HTMLElement, themeVars: Record<string, string>): void {\n\tfor (const [name, value] of Object.entries(themeVars)) {\n\t\tif (!CSS_CUSTOM_PROPERTY_PATTERN.test(name)) {\n\t\t\tthrow new RenderError(\"INVALID_THEME_VAR\", `Invalid CSS custom property name: ${name}`);\n\t\t}\n\t\telement.style.setProperty(name, value);\n\t}\n}\n","import { resolveTheme } from \"../types/asset-registry.ts\";\nimport { RenderError } from \"../types/errors.ts\";\nimport type { ConnectorEndpoint, RuntimeConnectorState, RuntimeElementState } from \"../types/node.ts\";\nimport type { RuntimeBundle } from \"../types/runtime-bundle.ts\";\nimport type { LayerDefinition } from \"../types/scene.ts\";\nimport { calculateVisualSize, projectToRaw, projectToScreen } from \"../utils/projection.ts\";\nimport { buildKeyframeCSS } from \"./animation-css.ts\";\nimport type { AssetResolver } from \"./asset-node.ts\";\nimport { createAssetNode, createAssetResolver, createPrimitiveAssetNode, createTextAssetNode } from \"./asset-node.ts\";\nimport { applyThemeToElement } from \"./theme.ts\";\n\nconst NS = \"http://www.w3.org/2000/svg\";\nconst BUILT_IN_TEXT_ASSET_ID = \"text\";\nconst BUILT_IN_PRIMITIVE_ASSET_IDS = new Set([\"rectangle\", \"circle\", \"polygon\", \"line\"]);\nconst DEFAULT_CONNECTOR_DASH: Record<\"dashed\" | \"dotted\", [number, number]> = {\n\tdashed: [12, 8],\n\tdotted: [0, 8],\n};\nconst ENDPOINT_RADIUS_GRID = 0.14;\nconst ARROW_LENGTH_GRID = 0.35;\nconst ARROW_WIDTH_GRID = 0.28;\nconst BAR_WIDTH_GRID = 0.4;\n\ninterface Bounds {\n\tminX: number;\n\tminY: number;\n\tmaxX: number;\n\tmaxY: number;\n}\n\ninterface ResolvedLayoutState {\n\tcellSize: number;\n\tpadding: { x: number; y: number };\n\tcontentBounds: Bounds;\n\tfloorBounds: Bounds;\n\tselectedBounds: Bounds;\n\tviewBox: { minX: number; minY: number; width: number; height: number };\n}\n\n/** Internal state tracked per element node. */\ninterface ElementState {\n\tnode: SVGGElement;\n\tisHidden: boolean;\n\tentryKey?: string;\n\texitKey?: string;\n\tambient: Set<string>;\n}\n\n/** Internal state tracked per connector node. */\ninterface ConnectorState {\n\tnode: SVGGElement;\n\tshaft: SVGPathElement;\n\tisHidden: boolean;\n\tambient: Set<string>;\n}\n\n/** Extended SVG with engine internals stored on it. */\ninterface SceneSVG extends SVGSVGElement {\n\t_layerMap: Map<string, Required<LayerDefinition>>;\n\t_elementMap: Map<string, ElementState>;\n\t_connectorMap: Map<string, ConnectorState>;\n\t_layout: ResolvedLayoutState;\n\t_viewBoxW: number;\n\t_viewBoxH: number;\n}\n\nexport interface RenderConfig {\n\tlabel?: string;\n\tthemeVars?: Record<string, string>;\n}\n\n// ── Public API ────────────────────────────────────────────────────────────\n\n/** Build the SVG DOM for a compiled runtime bundle and mount it into a container. */\nexport function buildSceneDOM(container: HTMLElement, bundle: RuntimeBundle, config?: RenderConfig): SVGSVGElement {\n\tconst layout = resolveSceneLayout(bundle);\n\tconst initialStop = bundle.scenes[0];\n\tconst allElements = collectElementDefinitions(bundle);\n\tconst allConnectors = collectConnectorDefinitions(bundle);\n\tconst initialById = new Map((initialStop?.elements ?? []).map((element) => [element.id, element]));\n\tconst initialConnectorsById = new Map((initialStop?.connectors ?? []).map((connector) => [connector.id, connector]));\n\n\tconst svg = createRootSvg(layout, config?.label, bundle.className);\n\tconst assetResolver = createAssetResolver(bundle);\n\n\tsvg.appendChild(createCssDefs());\n\n\tapplyThemeToElement(svg, {\n\t\t...(resolveTheme(bundle.theme) ?? {}),\n\t\t...(bundle.themeVars ?? {}),\n\t\t...(config?.themeVars ?? {}),\n\t});\n\n\tconst sortedLayers = sortLayers(bundle.layers);\n\tconst layerMap = createLayerMap(sortedLayers);\n\tif (bundle.floor.visible) {\n\t\tsvg.appendChild(createFloorGrid(bundle, layout));\n\t}\n\n\tconst connectorMap = new Map<string, ConnectorState>();\n\tfor (const def of allConnectors) {\n\t\tconst initial = initialConnectorsById.get(def.id) ?? {\n\t\t\t...def,\n\t\t\tpresence: \"removed\",\n\t\t};\n\t\tconst state = createConnectorInstance(initial, layout);\n\t\tif (initial.presence === \"removed\") {\n\t\t\tstate.isHidden = true;\n\t\t\thideElementAfterExit(state.node);\n\t\t}\n\t\tapplyConnectorAmbientClasses(state, initial.ambient ?? []);\n\t\tsvg.appendChild(state.node);\n\t\tconnectorMap.set(def.id, state);\n\t}\n\n\tconst depthGroup = document.createElementNS(NS, \"g\") as SVGGElement;\n\tdepthGroup.classList.add(\"iso-depth-layer\");\n\tdepthGroup.setAttribute(\"data-layer\", \"depth\");\n\tsvg.appendChild(depthGroup);\n\n\tconst labelGroup = document.createElementNS(NS, \"g\") as SVGGElement;\n\tlabelGroup.classList.add(\"iso-layer\", \"iso-layer-labels\");\n\tlabelGroup.setAttribute(\"data-layer\", \"labels\");\n\tsvg.appendChild(labelGroup);\n\n\tconst elementMap = new Map<string, ElementState>();\n\tconst sortedElements = sortElementsForPerspective(allElements);\n\tfor (const def of sortedElements) {\n\t\tconst declaredLayer = layerMap.get(def.layer);\n\t\tif (!declaredLayer) {\n\t\t\tthrow new RenderError(\"MISSING_LAYER\", `Unknown layer for \"${def.id}\": ${def.layer}`);\n\t\t}\n\n\t\tconst initial = initialById.get(def.id) ?? {\n\t\t\t...def,\n\t\t\tpresence: \"removed\",\n\t\t};\n\t\tconst instance = createElementInstance(initial, layout, assetResolver);\n\t\tinstance.node.classList.add(`iso-layer-${def.layer}`);\n\t\tinstance.node.setAttribute(\"data-layer\", def.layer);\n\t\tif (initial.presence === \"removed\") {\n\t\t\tinstance.isHidden = true;\n\t\t\thideElementAfterExit(instance.node);\n\t\t}\n\t\tapplyAmbientClasses(instance, initial.ambient ?? []);\n\t\tconst parent = isTextAsset(def.asset) ? labelGroup : depthGroup;\n\t\tparent.appendChild(instance.node);\n\t\telementMap.set(def.id, instance);\n\t}\n\n\tsvg._layerMap = layerMap;\n\tsvg._elementMap = elementMap;\n\tsvg._connectorMap = connectorMap;\n\tcontainer.appendChild(svg);\n\treturn svg;\n}\n\n/** Update transforms and ambient classes for a live set of interpolated runtime values. */\nexport function updateElementTransforms(\n\tsvg: SVGSVGElement & {\n\t\t_elementMap?: Map<string, ElementState | unknown>;\n\t\t_connectorMap?: Map<string, ConnectorState | unknown>;\n\t\t_layout?: ResolvedLayoutState;\n\t},\n\telements: RuntimeElementState[],\n\tconnectors: RuntimeConnectorState[] = [],\n): void {\n\tconst layout = svg._layout;\n\tif (!layout) return;\n\n\tconst map = svg._elementMap;\n\tif (map) {\n\t\tfor (const def of elements) {\n\t\t\tconst state = map.get(def.id) as ElementState | undefined;\n\t\t\tif (!state) continue;\n\t\t\tupdateGeneratedElementContent(state.node, def, layout);\n\t\t\tapplyElementTransform(state.node, def, layout);\n\t\t\tapplyAmbientClasses(state, def.ambient ?? []);\n\t\t}\n\t}\n\n\tconst connectorMap = svg._connectorMap;\n\tif (!connectorMap) return;\n\tfor (const def of connectors) {\n\t\tconst state = connectorMap.get(def.id) as ConnectorState | undefined;\n\t\tif (!state) continue;\n\t\tapplyConnectorState(state, def, layout);\n\t}\n}\n\n/** Read the internal ElementState for an element by its id. */\nexport function getElementState(\n\tsvg: SVGSVGElement & { _elementMap?: Map<string, ElementState | unknown> },\n\tid: string,\n): ElementState | undefined {\n\treturn svg._elementMap?.get(id) as ElementState | undefined;\n}\n\n/** Read the internal ConnectorState for a connector by its id. */\nexport function getConnectorState(\n\tsvg: SVGSVGElement & {\n\t\t_connectorMap?: Map<string, ConnectorState | unknown>;\n\t},\n\tid: string,\n): ConnectorState | undefined {\n\treturn svg._connectorMap?.get(id) as ConnectorState | undefined;\n}\n\nexport function getResolvedViewBox(bundle: RuntimeBundle): {\n\tminX: number;\n\tminY: number;\n\twidth: number;\n\theight: number;\n} {\n\treturn resolveSceneLayout(bundle).viewBox;\n}\n\n// ── Lifecycle helpers ─────────────────────────────────────────────────────\n\n/** Hide an element after its exit animation completes. */\nexport function hideElementAfterExit(node: SVGElement): void {\n\tnode.style.visibility = \"hidden\";\n\tnode.style.pointerEvents = \"none\";\n}\n\n/** Show an element on re-addition. */\nexport function unhideElementOnReadd(node: SVGElement): void {\n\tnode.style.visibility = \"visible\";\n\tnode.style.pointerEvents = \"auto\";\n}\n\n/** Create a new element SVG instance for lifecycle re-instantiation. */\nexport function createNewElementInstance(def: RuntimeElementState, parent?: SVGGElement | null): SVGGElement {\n\tconst layout: ResolvedLayoutState = {\n\t\tcellSize: 64,\n\t\tpadding: { x: 0, y: 0 },\n\t\tcontentBounds: emptyBounds(),\n\t\tfloorBounds: emptyBounds(),\n\t\tselectedBounds: { minX: 0, minY: 0, maxX: 64, maxY: 64 },\n\t\tviewBox: { minX: 0, minY: 0, width: 64, height: 64 },\n\t};\n\tconst instance = createElementInstance(def, layout, createAssetResolver());\n\tparent?.appendChild(instance.node);\n\treturn instance.node;\n}\n\n/** Remove an element node from the DOM. */\nexport function removeElementNode(node: SVGElement): void {\n\tnode.parentElement?.removeChild(node);\n}\n\n// ── Layout helpers ────────────────────────────────────────────────────────\n\nfunction resolveSceneLayout(bundle: RuntimeBundle): ResolvedLayoutState {\n\tconst cellSize = bundle.grid.cellSize;\n\tconst padding = bundle.layout.padding;\n\tconst contentBounds = calculateContentBounds(bundle, cellSize);\n\tconst floorBounds = calculateFloorBounds(bundle, cellSize);\n\tconst selectedBounds = selectBounds(bundle.layout.bounds, contentBounds, floorBounds);\n\tconst width = selectedBounds.maxX - selectedBounds.minX + padding.x * 2;\n\tconst height = selectedBounds.maxY - selectedBounds.minY + padding.y * 2;\n\tconst viewBox = {\n\t\tminX: 0,\n\t\tminY: 0,\n\t\twidth: roundDimension(width || cellSize),\n\t\theight: roundDimension(height || cellSize),\n\t};\n\n\treturn {\n\t\tcellSize,\n\t\tpadding,\n\t\tcontentBounds,\n\t\tfloorBounds,\n\t\tselectedBounds,\n\t\tviewBox,\n\t};\n}\n\nfunction calculateContentBounds(bundle: RuntimeBundle, cellSize: number): Bounds {\n\tlet bounds = emptyBounds();\n\tfor (const stop of bundle.scenes) {\n\t\tfor (const element of stop.elements ?? []) {\n\t\t\tif (element.presence === \"removed\") continue;\n\t\t\tconst { rawX, rawY } = projectToRaw(element.pos[0] + element.size, element.pos[1] + element.size, cellSize);\n\t\t\tconst visualSize = calculateVisualSize(element.size, cellSize);\n\t\t\tconst [anchorX, anchorY] = assetAnchorForBounds(bundle, element);\n\t\t\tbounds = includeBounds(bounds, {\n\t\t\t\tminX: rawX - visualSize * anchorX,\n\t\t\t\tminY: rawY - visualSize * anchorY,\n\t\t\t\tmaxX: rawX + visualSize * (1 - anchorX),\n\t\t\t\tmaxY: rawY + visualSize * (1 - anchorY),\n\t\t\t});\n\t\t}\n\t\tfor (const connector of stop.connectors ?? []) {\n\t\t\tif (connector.presence === \"removed\") continue;\n\t\t\tbounds = includeBounds(bounds, calculateConnectorBounds(connector, cellSize));\n\t\t}\n\t}\n\treturn normalizeBounds(bounds, cellSize);\n}\n\nfunction assetAnchorForBounds(bundle: RuntimeBundle, element: RuntimeElementState): [number, number] {\n\treturn bundle.assets?.[element.asset]?.anchor ?? [0.5, 1];\n}\n\nfunction calculateConnectorBounds(connector: RuntimeConnectorState, cellSize: number): Bounds {\n\tlet bounds = emptyBounds();\n\tfor (const [x, y] of connector.route) {\n\t\tconst { rawX, rawY } = projectToRaw(x, y, cellSize);\n\t\tbounds = includePoint(bounds, rawX, rawY);\n\t}\n\tconst endpointPadding = Math.max(ARROW_LENGTH_GRID, BAR_WIDTH_GRID, ENDPOINT_RADIUS_GRID * 2) * cellSize;\n\tconst strokePadding = connector.style.strokeWidth / 2 + (connector.style.outlineWidth ?? 0);\n\tconst padding = endpointPadding + strokePadding;\n\treturn {\n\t\tminX: bounds.minX - padding,\n\t\tminY: bounds.minY - padding,\n\t\tmaxX: bounds.maxX + padding,\n\t\tmaxY: bounds.maxY + padding,\n\t};\n}\n\nfunction calculateFloorBounds(bundle: RuntimeBundle, cellSize: number): Bounds {\n\tconst origin = bundle.floor.origin;\n\tconst [width, height] = bundle.floor.size;\n\tconst points: Array<[number, number]> = [\n\t\torigin,\n\t\t[origin[0] + width, origin[1]],\n\t\t[origin[0], origin[1] + height],\n\t\t[origin[0] + width, origin[1] + height],\n\t];\n\tlet bounds = emptyBounds();\n\tfor (const [x, y] of points) {\n\t\tconst { rawX, rawY } = projectToRaw(x, y, cellSize);\n\t\tbounds = includePoint(bounds, rawX, rawY);\n\t}\n\treturn normalizeBounds(bounds, cellSize);\n}\n\nfunction selectBounds(mode: RuntimeBundle[\"layout\"][\"bounds\"], content: Bounds, floor: Bounds): Bounds {\n\tif (mode === \"content\") return content;\n\tif (mode === \"floor\") return floor;\n\treturn includeBounds(content, floor);\n}\n\nfunction emptyBounds(): Bounds {\n\treturn {\n\t\tminX: Number.POSITIVE_INFINITY,\n\t\tminY: Number.POSITIVE_INFINITY,\n\t\tmaxX: Number.NEGATIVE_INFINITY,\n\t\tmaxY: Number.NEGATIVE_INFINITY,\n\t};\n}\n\nfunction normalizeBounds(bounds: Bounds, cellSize: number): Bounds {\n\tif (Number.isFinite(bounds.minX)) return bounds;\n\treturn { minX: 0, minY: 0, maxX: cellSize, maxY: cellSize };\n}\n\nfunction includePoint(bounds: Bounds, x: number, y: number): Bounds {\n\treturn {\n\t\tminX: Math.min(bounds.minX, x),\n\t\tminY: Math.min(bounds.minY, y),\n\t\tmaxX: Math.max(bounds.maxX, x),\n\t\tmaxY: Math.max(bounds.maxY, y),\n\t};\n}\n\nfunction includeBounds(bounds: Bounds, next: Bounds): Bounds {\n\treturn {\n\t\tminX: Math.min(bounds.minX, next.minX),\n\t\tminY: Math.min(bounds.minY, next.minY),\n\t\tmaxX: Math.max(bounds.maxX, next.maxX),\n\t\tmaxY: Math.max(bounds.maxY, next.maxY),\n\t};\n}\n\nfunction roundDimension(value: number): number {\n\treturn Math.round(value * 1000) / 1000;\n}\n\n// ── Private helpers ───────────────────────────────────────────────────────\n\nfunction createRootSvg(layout: ResolvedLayoutState, label?: string, className?: string): SceneSVG {\n\tconst svg = document.createElementNS(NS, \"svg\") as SceneSVG;\n\tsvg.classList.add(\"iso-scene\");\n\tfor (const token of className?.trim().split(/\\s+/) ?? []) {\n\t\tif (token) svg.classList.add(token);\n\t}\n\tsvg.setAttribute(\"width\", \"100%\");\n\tsvg.setAttribute(\"height\", \"100%\");\n\tsvg.setAttribute(\n\t\t\"viewBox\",\n\t\t`${layout.viewBox.minX} ${layout.viewBox.minY} ${layout.viewBox.width} ${layout.viewBox.height}`,\n\t);\n\tsvg.setAttribute(\"preserveAspectRatio\", \"xMidYMid meet\");\n\tsvg.style.width = \"100%\";\n\tsvg.style.height = \"100%\";\n\tsvg.style.display = \"block\";\n\tif (label) {\n\t\tsvg.setAttribute(\"role\", \"img\");\n\t\tsvg.setAttribute(\"aria-label\", label);\n\t} else {\n\t\tsvg.setAttribute(\"aria-hidden\", \"true\");\n\t}\n\tsvg._layout = layout;\n\tsvg._viewBoxW = layout.viewBox.width;\n\tsvg._viewBoxH = layout.viewBox.height;\n\treturn svg;\n}\n\nfunction createCssDefs(): SVGStyleElement {\n\tconst styleEl = document.createElementNS(NS, \"style\") as SVGStyleElement;\n\tstyleEl.textContent = buildKeyframeCSS();\n\treturn styleEl;\n}\n\nfunction createFloorGrid(bundle: RuntimeBundle, layout: ResolvedLayoutState): SVGGElement {\n\tconst group = document.createElementNS(NS, \"g\") as SVGGElement;\n\tgroup.classList.add(\"iso-floor-grid\", `iso-layer-${bundle.floor.layer}`);\n\tgroup.setAttribute(\"data-layer\", bundle.floor.layer);\n\n\tconst [originX, originY] = bundle.floor.origin;\n\tconst [columns, rows] = bundle.floor.size;\n\tconst corners = [\n\t\tprojectGridPoint(originX, originY, layout),\n\t\tprojectGridPoint(originX + columns, originY, layout),\n\t\tprojectGridPoint(originX + columns, originY + rows, layout),\n\t\tprojectGridPoint(originX, originY + rows, layout),\n\t];\n\n\tconst slab = document.createElementNS(NS, \"polygon\");\n\tslab.classList.add(\"iso-floor-slab\");\n\tslab.setAttribute(\"points\", corners.map(pointToString).join(\" \"));\n\tslab.setAttribute(\"fill\", \"#dbe6f4\");\n\tslab.setAttribute(\"fill-opacity\", \"0.22\");\n\tslab.setAttribute(\"stroke\", \"#b9c9df\");\n\tslab.setAttribute(\"stroke-width\", \"1\");\n\tgroup.appendChild(slab);\n\n\tfor (let x = 0; x <= columns; x++) {\n\t\tgroup.appendChild(\n\t\t\tcreateFloorLine(\n\t\t\t\tprojectGridPoint(originX + x, originY, layout),\n\t\t\t\tprojectGridPoint(originX + x, originY + rows, layout),\n\t\t\t),\n\t\t);\n\t}\n\n\tfor (let y = 0; y <= rows; y++) {\n\t\tgroup.appendChild(\n\t\t\tcreateFloorLine(\n\t\t\t\tprojectGridPoint(originX, originY + y, layout),\n\t\t\t\tprojectGridPoint(originX + columns, originY + y, layout),\n\t\t\t),\n\t\t);\n\t}\n\n\treturn group;\n}\n\nfunction createFloorLine(start: { x: number; y: number }, end: { x: number; y: number }): SVGLineElement {\n\tconst line = document.createElementNS(NS, \"line\") as SVGLineElement;\n\tline.setAttribute(\"x1\", String(start.x));\n\tline.setAttribute(\"y1\", String(start.y));\n\tline.setAttribute(\"x2\", String(end.x));\n\tline.setAttribute(\"y2\", String(end.y));\n\tline.setAttribute(\"stroke\", \"#2563eb\");\n\tline.setAttribute(\"stroke-width\", \"1\");\n\tline.setAttribute(\"stroke-dasharray\", \"5 5\");\n\tline.setAttribute(\"stroke-opacity\", \"0.2\");\n\treturn line;\n}\n\nfunction projectGridPoint(x: number, y: number, layout: ResolvedLayoutState): { x: number; y: number } {\n\tconst screen = projectToScreen(\n\t\tx,\n\t\ty,\n\t\tlayout.cellSize,\n\t\tlayout.selectedBounds.minX,\n\t\tlayout.selectedBounds.minY,\n\t\tlayout.padding.x,\n\t\tlayout.padding.y,\n\t);\n\treturn { x: screen.screenX, y: screen.screenY };\n}\n\nfunction pointToString(point: { x: number; y: number }): string {\n\treturn `${point.x},${point.y}`;\n}\n\nfunction createLayerMap(layers: Required<LayerDefinition>[]): Map<string, Required<LayerDefinition>> {\n\treturn new Map(layers.map((layer) => [layer.name, layer]));\n}\n\nfunction sortLayers(layers: LayerDefinition[]): Required<LayerDefinition>[] {\n\treturn [...layers]\n\t\t.map((layer, index) => ({ name: layer.name, order: layer.order ?? index }))\n\t\t.sort((a, b) => a.order - b.order || a.name.localeCompare(b.name));\n}\n\nfunction sortElementsForPerspective(elements: RuntimeElementState[]): RuntimeElementState[] {\n\treturn elements.slice().sort((a, b) => {\n\t\tconst bucket = renderBucket(a) - renderBucket(b);\n\t\tif (bucket !== 0) return bucket;\n\t\tconst depth = a.pos[0] + a.pos[1] - (b.pos[0] + b.pos[1]);\n\t\tif (depth !== 0) return depth;\n\t\treturn a.id.localeCompare(b.id);\n\t});\n}\n\nfunction renderBucket(element: RuntimeElementState): number {\n\tif (isPrimitiveAsset(element.asset)) return 0;\n\tif (isTextAsset(element.asset)) return 2;\n\treturn 1;\n}\n\nfunction collectElementDefinitions(bundle: RuntimeBundle): RuntimeElementState[] {\n\tconst byId = new Map<string, RuntimeElementState>();\n\tfor (const stop of bundle.scenes) {\n\t\tfor (const element of stop.elements ?? []) {\n\t\t\tif (!byId.has(element.id) || byId.get(element.id)?.presence === \"removed\") {\n\t\t\t\tbyId.set(element.id, element);\n\t\t\t}\n\t\t}\n\t}\n\treturn [...byId.values()];\n}\n\nfunction collectConnectorDefinitions(bundle: RuntimeBundle): RuntimeConnectorState[] {\n\tconst byId = new Map<string, RuntimeConnectorState>();\n\tfor (const stop of bundle.scenes) {\n\t\tfor (const connector of stop.connectors ?? []) {\n\t\t\tif (!byId.has(connector.id) || byId.get(connector.id)?.presence === \"removed\") {\n\t\t\t\tbyId.set(connector.id, connector);\n\t\t\t}\n\t\t}\n\t}\n\treturn [...byId.values()];\n}\n\n/** Create a single element SVG instance applying entry animation. */\nfunction createElementInstance(\n\tdef: RuntimeElementState,\n\tlayout: ResolvedLayoutState,\n\tresolveAsset: AssetResolver,\n): ElementState {\n\tconst node =\n\t\tdef.asset === BUILT_IN_TEXT_ASSET_ID\n\t\t\t? createTextAssetNode(def.text, def.asset, layout.cellSize)\n\t\t\t: isPrimitiveAsset(def.asset)\n\t\t\t\t? createPrimitiveAssetNode(def.asset, def.primitive, layout.cellSize)\n\t\t\t\t: createResolvedAssetNode(def, resolveAsset, layout.cellSize);\n\tnode.classList.add(\"iso-element\", `iso-element-${def.id}`);\n\tnode.setAttribute(\"data-id\", def.id);\n\tnode.setAttribute(\"data-asset\", def.asset);\n\tnode.style.overflow = \"visible\";\n\tnode.style.pointerEvents = \"auto\";\n\tapplyElementTransform(node, def, layout);\n\n\tconst entryAnim = def.enter;\n\tif (entryAnim && entryAnim !== \"none\" && def.presence !== \"removed\") {\n\t\tconst keyName = `iso-anim-${entryAnim}`;\n\t\tanimateElement(node, keyName, \"enter\");\n\t\tnode.addEventListener(\n\t\t\t\"animationend\",\n\t\t\t() => {\n\t\t\t\tnode.style.animation = \"\";\n\t\t\t},\n\t\t\t{ once: true },\n\t\t);\n\t\treturn { node, isHidden: false, entryKey: entryAnim, ambient: new Set() };\n\t}\n\n\treturn { node, isHidden: false, ambient: new Set() };\n}\n\nfunction isTextAsset(assetId: string): boolean {\n\treturn assetId === BUILT_IN_TEXT_ASSET_ID;\n}\n\nfunction isPrimitiveAsset(assetId: string): boolean {\n\treturn BUILT_IN_PRIMITIVE_ASSET_IDS.has(assetId);\n}\n\nfunction createResolvedAssetNode(def: RuntimeElementState, resolveAsset: AssetResolver, cellSize: number): SVGGElement {\n\tconst asset = resolveAsset(def.asset);\n\tif (!asset) {\n\t\tthrow new RenderError(\"ASSET_NOT_FOUND\", `Asset not found: ${def.asset}`, {\n\t\t\tasset: def.asset,\n\t\t\telementId: def.id,\n\t\t});\n\t}\n\treturn createAssetNode(asset, def.asset, cellSize);\n}\n\nfunction updateGeneratedElementContent(node: SVGGElement, def: RuntimeElementState, layout: ResolvedLayoutState): void {\n\tif (!isTextAsset(def.asset) && !isPrimitiveAsset(def.asset)) return;\n\tconst replacement = isTextAsset(def.asset)\n\t\t? createTextAssetNode(def.text, def.asset, layout.cellSize)\n\t\t: createPrimitiveAssetNode(def.asset, def.primitive, layout.cellSize);\n\tclearChildren(node);\n\twhile (replacement.firstChild) {\n\t\tconst child = replacement.firstChild;\n\t\treplacement.removeChild(child);\n\t\tnode.appendChild(child);\n\t}\n}\n\nfunction createConnectorInstance(def: RuntimeConnectorState, layout: ResolvedLayoutState): ConnectorState {\n\tconst node = document.createElementNS(NS, \"g\") as SVGGElement;\n\tconst shaft = document.createElementNS(NS, \"path\") as SVGPathElement;\n\tconst state = { node, shaft, isHidden: false, ambient: new Set<string>() };\n\tapplyConnectorState(state, def, layout);\n\n\tconst entryAnim = def.enter;\n\tif (entryAnim && entryAnim !== \"none\" && def.presence !== \"removed\") {\n\t\tanimateElement(node, `iso-anim-${entryAnim}`, \"enter\");\n\t\tnode.addEventListener(\n\t\t\t\"animationend\",\n\t\t\t() => {\n\t\t\t\tnode.style.animation = \"\";\n\t\t\t},\n\t\t\t{ once: true },\n\t\t);\n\t}\n\n\treturn state;\n}\n\nfunction applyConnectorState(state: ConnectorState, def: RuntimeConnectorState, layout: ResolvedLayoutState): void {\n\tapplyConnectorGroupAttrs(state.node, def);\n\tclearChildren(state.node);\n\n\tconst d = routePath(def.route, layout);\n\tif (shouldRenderOutline(def)) {\n\t\tconst outline = document.createElementNS(NS, \"path\") as SVGPathElement;\n\t\toutline.classList.add(\"iso-connector-outline\");\n\t\tapplyConnectorPathAttrs(outline, def, d, {\n\t\t\tstroke: def.style.outline ?? def.style.stroke,\n\t\t\tstrokeWidth: def.style.strokeWidth + def.style.outlineWidth * 2,\n\t\t\tincludeDash: false,\n\t\t});\n\t\tstate.node.appendChild(outline);\n\t}\n\n\tstate.shaft = document.createElementNS(NS, \"path\") as SVGPathElement;\n\tstate.shaft.classList.add(\"iso-connector-shaft\");\n\tapplyConnectorPathAttrs(state.shaft, def, d, {\n\t\tstroke: def.style.stroke,\n\t\tstrokeWidth: def.style.strokeWidth,\n\t\tincludeDash: true,\n\t});\n\tstate.node.appendChild(state.shaft);\n\n\tif (def.style.variant === \"road\" && def.style.lane === \"center-dashed\") {\n\t\tconst lane = document.createElementNS(NS, \"path\") as SVGPathElement;\n\t\tlane.classList.add(\"iso-connector-lane\");\n\t\tapplyConnectorPathAttrs(lane, def, d, {\n\t\t\tstroke: \"#ffffff\",\n\t\t\tstrokeWidth: Math.max(1, def.style.strokeWidth * 0.12),\n\t\t\tincludeDash: false,\n\t\t});\n\t\tlane.setAttribute(\"stroke-dasharray\", \"8 8\");\n\t\tstate.node.appendChild(lane);\n\t}\n\n\tappendEndpoint(state.node, def, \"start\", layout);\n\tappendEndpoint(state.node, def, \"end\", layout);\n\tapplyConnectorAmbientClasses(state, def.ambient ?? []);\n}\n\nfunction clearChildren(node: SVGElement): void {\n\twhile (node.firstChild) node.removeChild(node.firstChild);\n}\n\nfunction applyConnectorGroupAttrs(node: SVGGElement, def: RuntimeConnectorState): void {\n\tnode.setAttribute(\n\t\t\"class\",\n\t\t[\n\t\t\t\"iso-connector\",\n\t\t\t`iso-connector-${def.id}`,\n\t\t\t`iso-connector-variant-${def.style.variant}`,\n\t\t\t`iso-connector-pattern-${def.style.pattern}`,\n\t\t\t`iso-connector-direction-${def.direction}`,\n\t\t\t`iso-layer-${def.layer}`,\n\t\t].join(\" \"),\n\t);\n\tnode.setAttribute(\"data-id\", def.id);\n\tnode.setAttribute(\"data-layer\", def.layer);\n\tnode.style.overflow = \"visible\";\n\tnode.style.pointerEvents = \"auto\";\n}\n\nfunction shouldRenderOutline(def: RuntimeConnectorState): boolean {\n\treturn Boolean(def.style.outline && def.style.outlineWidth > 0);\n}\n\nfunction applyConnectorPathAttrs(\n\tpath: SVGPathElement,\n\tdef: RuntimeConnectorState,\n\td: string,\n\toptions: { stroke: string; strokeWidth: number; includeDash: boolean },\n): void {\n\tpath.setAttribute(\"d\", d);\n\tpath.setAttribute(\"fill\", \"none\");\n\tpath.setAttribute(\"stroke\", options.stroke);\n\tpath.setAttribute(\"stroke-width\", String(options.strokeWidth));\n\tpath.setAttribute(\"stroke-linecap\", \"round\");\n\tpath.setAttribute(\"stroke-linejoin\", \"round\");\n\tpath.setAttribute(\"opacity\", String(def.style.opacity));\n\tif (options.includeDash && def.style.pattern !== \"solid\") {\n\t\tconst dash = def.style.dash ?? DEFAULT_CONNECTOR_DASH[def.style.pattern];\n\t\tpath.setAttribute(\"stroke-dasharray\", dash.join(\" \"));\n\t}\n}\n\nfunction routePath(route: [number, number][], layout: ResolvedLayoutState): string {\n\treturn route\n\t\t.map((point, index) => {\n\t\t\tconst projected = projectGridPoint(point[0], point[1], layout);\n\t\t\treturn `${index === 0 ? \"M\" : \"L\"} ${projected.x} ${projected.y}`;\n\t\t})\n\t\t.join(\" \");\n}\n\nfunction appendEndpoint(\n\tgroup: SVGGElement,\n\tdef: RuntimeConnectorState,\n\tkind: \"start\" | \"end\",\n\tlayout: ResolvedLayoutState,\n): void {\n\tconst endpoint = def[kind];\n\tif (endpoint === \"none\" || def.route.length < 2) return;\n\n\tconst node = createEndpointNode(endpoint, def, kind, layout);\n\tnode.classList.add(`iso-connector-${kind}`);\n\tgroup.appendChild(node);\n}\n\nfunction createEndpointNode(\n\tendpoint: ConnectorEndpoint,\n\tdef: RuntimeConnectorState,\n\tkind: \"start\" | \"end\",\n\tlayout: ResolvedLayoutState,\n): SVGElement {\n\tswitch (endpoint) {\n\t\tcase \"arrow\":\n\t\t\treturn createArrowEndpoint(def, kind, layout);\n\t\tcase \"dot\":\n\t\t\treturn createCircleEndpoint(def, kind, layout, true);\n\t\tcase \"circle\":\n\t\t\treturn createCircleEndpoint(def, kind, layout, false);\n\t\tcase \"diamond\":\n\t\t\treturn createDiamondEndpoint(def, kind, layout);\n\t\tcase \"bar\":\n\t\t\treturn createBarEndpoint(def, kind, layout);\n\t\tcase \"none\":\n\t\t\tthrow new RenderError(\"CONNECTOR_ENDPOINT_NONE\", \"Cannot create geometry for endpoint none\");\n\t}\n}\n\nfunction createArrowEndpoint(\n\tdef: RuntimeConnectorState,\n\tkind: \"start\" | \"end\",\n\tlayout: ResolvedLayoutState,\n): SVGPolygonElement {\n\tconst tip = endpointPoint(def, kind);\n\tconst direction = endpointDirection(def, kind);\n\tconst perpendicular: [number, number] = [-direction[1], direction[0]];\n\tconst base: [number, number] = [tip[0] - direction[0] * ARROW_LENGTH_GRID, tip[1] - direction[1] * ARROW_LENGTH_GRID];\n\tconst halfWidth = ARROW_WIDTH_GRID / 2;\n\tconst points = [\n\t\ttip,\n\t\t[base[0] + perpendicular[0] * halfWidth, base[1] + perpendicular[1] * halfWidth] as [number, number],\n\t\t[base[0] - perpendicular[0] * halfWidth, base[1] - perpendicular[1] * halfWidth] as [number, number],\n\t].map((point) => projectGridPoint(point[0], point[1], layout));\n\n\tconst polygon = document.createElementNS(NS, \"polygon\") as SVGPolygonElement;\n\tpolygon.setAttribute(\"points\", points.map(pointToString).join(\" \"));\n\tpolygon.setAttribute(\"fill\", def.style.stroke);\n\tpolygon.setAttribute(\"opacity\", String(def.style.opacity));\n\treturn polygon;\n}\n\nfunction createCircleEndpoint(\n\tdef: RuntimeConnectorState,\n\tkind: \"start\" | \"end\",\n\tlayout: ResolvedLayoutState,\n\tfilled: boolean,\n): SVGCircleElement {\n\tconst point = endpointPoint(def, kind);\n\tconst projected = projectGridPoint(point[0], point[1], layout);\n\tconst circle = document.createElementNS(NS, \"circle\") as SVGCircleElement;\n\tcircle.setAttribute(\"cx\", String(projected.x));\n\tcircle.setAttribute(\"cy\", String(projected.y));\n\tcircle.setAttribute(\"r\", String(ENDPOINT_RADIUS_GRID * layout.cellSize));\n\tcircle.setAttribute(\"stroke\", def.style.stroke);\n\tcircle.setAttribute(\"stroke-width\", String(Math.max(1, def.style.strokeWidth)));\n\tcircle.setAttribute(\"opacity\", String(def.style.opacity));\n\tcircle.setAttribute(\"fill\", filled ? def.style.stroke : \"none\");\n\treturn circle;\n}\n\nfunction createDiamondEndpoint(\n\tdef: RuntimeConnectorState,\n\tkind: \"start\" | \"end\",\n\tlayout: ResolvedLayoutState,\n): SVGPolygonElement {\n\tconst center = endpointPoint(def, kind);\n\tconst radius = ENDPOINT_RADIUS_GRID;\n\tconst points: [number, number][] = [\n\t\t[center[0], center[1] - radius],\n\t\t[center[0] + radius, center[1]],\n\t\t[center[0], center[1] + radius],\n\t\t[center[0] - radius, center[1]],\n\t];\n\tconst polygon = document.createElementNS(NS, \"polygon\") as SVGPolygonElement;\n\tpolygon.setAttribute(\n\t\t\"points\",\n\t\tpoints\n\t\t\t.map((point) => projectGridPoint(point[0], point[1], layout))\n\t\t\t.map(pointToString)\n\t\t\t.join(\" \"),\n\t);\n\tpolygon.setAttribute(\"fill\", def.style.stroke);\n\tpolygon.setAttribute(\"opacity\", String(def.style.opacity));\n\treturn polygon;\n}\n\nfunction createBarEndpoint(\n\tdef: RuntimeConnectorState,\n\tkind: \"start\" | \"end\",\n\tlayout: ResolvedLayoutState,\n): SVGLineElement {\n\tconst center = endpointPoint(def, kind);\n\tconst direction = endpointDirection(def, kind);\n\tconst perpendicular: [number, number] = [-direction[1], direction[0]];\n\tconst half = BAR_WIDTH_GRID / 2;\n\tconst a = projectGridPoint(center[0] + perpendicular[0] * half, center[1] + perpendicular[1] * half, layout);\n\tconst b = projectGridPoint(center[0] - perpendicular[0] * half, center[1] - perpendicular[1] * half, layout);\n\tconst line = document.createElementNS(NS, \"line\") as SVGLineElement;\n\tline.setAttribute(\"x1\", String(a.x));\n\tline.setAttribute(\"y1\", String(a.y));\n\tline.setAttribute(\"x2\", String(b.x));\n\tline.setAttribute(\"y2\", String(b.y));\n\tline.setAttribute(\"stroke\", def.style.stroke);\n\tline.setAttribute(\"stroke-width\", String(Math.max(1, def.style.strokeWidth)));\n\tline.setAttribute(\"stroke-linecap\", \"round\");\n\tline.setAttribute(\"opacity\", String(def.style.opacity));\n\treturn line;\n}\n\nfunction endpointPoint(def: RuntimeConnectorState, kind: \"start\" | \"end\"): [number, number] {\n\treturn kind === \"start\" ? def.route[0] : def.route[def.route.length - 1];\n}\n\nfunction endpointDirection(def: RuntimeConnectorState, kind: \"start\" | \"end\"): [number, number] {\n\tconst point =\n\t\tkind === \"start\"\n\t\t\t? vectorBetween(def.route[0], def.route[1])\n\t\t\t: vectorBetween(def.route[def.route.length - 2], def.route[def.route.length - 1]);\n\tconst effective = def.direction === \"reverse\" ? ([-point[0], -point[1]] as [number, number]) : point;\n\treturn normalizeVector(effective);\n}\n\nfunction vectorBetween(start: [number, number], end: [number, number]): [number, number] {\n\treturn [end[0] - start[0], end[1] - start[1]];\n}\n\nfunction normalizeVector(vector: [number, number]): [number, number] {\n\tconst length = Math.hypot(vector[0], vector[1]);\n\tif (length === 0) return [1, 0];\n\treturn [vector[0] / length, vector[1] / length];\n}\n\nfunction applyElementTransform(node: SVGGElement, def: RuntimeElementState, layout: ResolvedLayoutState): void {\n\tconst screen = projectToScreen(\n\t\tdef.pos[0] + def.size,\n\t\tdef.pos[1] + def.size,\n\t\tlayout.cellSize,\n\t\tlayout.selectedBounds.minX,\n\t\tlayout.selectedBounds.minY,\n\t\tlayout.padding.x,\n\t\tlayout.padding.y,\n\t);\n\tconst visualSize = calculateVisualSize(def.size, layout.cellSize);\n\tconst scale = visualSize / layout.cellSize;\n\tnode.setAttribute(\"transform\", `translate(${screen.screenX} ${screen.screenY}) scale(${scale})`);\n}\n\nfunction applyAmbientClasses(state: ElementState, ambient: RuntimeElementState[\"ambient\"]): void {\n\tconst next = new Set((ambient ?? []).map((item) => item.name));\n\tfor (const name of state.ambient) {\n\t\tif (!next.has(name)) state.node.classList.remove(`iso-ambient-${name}`);\n\t}\n\tfor (const name of next) {\n\t\tif (!state.ambient.has(name)) state.node.classList.add(`iso-ambient-${name}`);\n\t}\n\tstate.ambient = next;\n}\n\nfunction applyConnectorAmbientClasses(state: ConnectorState, ambient: RuntimeConnectorState[\"ambient\"]): void {\n\tconst next = new Set((ambient ?? []).map((item) => item.name));\n\tfor (const name of state.ambient) {\n\t\tif (!next.has(name)) state.shaft.classList.remove(`iso-ambient-${name}`);\n\t}\n\tfor (const name of next) {\n\t\tif (!state.ambient.has(name)) state.shaft.classList.add(`iso-ambient-${name}`);\n\t}\n\tstate.ambient = next;\n}\n\n/** Apply a CSS keyframe animation to an element. */\nexport function animateElement(node: SVGElement, keyframeName: string, type: \"enter\" | \"exit\" = \"enter\"): void {\n\tnode.style.opacity = \"1\";\n\tnode.style.animation = \"none\";\n\tnode.getBoundingClientRect();\n\tconst duration = type === \"exit\" ? \"var(--iso-anim-duration-exit, 300ms)\" : \"var(--iso-anim-duration-enter, 400ms)\";\n\tconst easing = type === \"exit\" ? \"var(--iso-anim-easing-exit, ease-in)\" : \"var(--iso-anim-easing-enter, ease-out)\";\n\tnode.style.animation = `${keyframeName} ${duration} ${easing} forwards`;\n}\n","/** Easing function type */\nexport type EasingFn = (t: number) => number;\n\n/** Easing configuration type */\nexport type EasingType = \"linear\" | \"easeInCubic\" | \"easeInOutCubic\" | \"easeOutCubic\";\n\n/**\n * Linear easing (no interpolation).\n */\nexport function linear(t: number): number {\n\treturn t;\n}\n\n/**\n * Cubic ease-in: starts slowly, accelerates.\n */\nexport function easeInCubic(t: number): number {\n\treturn t * t * t;\n}\n\n/**\n * Cubic ease-out: starts fast, decelerates.\n */\nexport function easeOutCubic(t: number): number {\n\treturn 1 - (1 - t) ** 3;\n}\n\n/**\n * Cubic ease-in-out: slow start, fast middle, slow end.\n */\nexport function easeInOutCubic(t: number): number {\n\treturn t < 0.5 ? 4 * t * t * t : 1 - (-2 * t + 2) ** 3 / 2;\n}\n\n/**\n * Resolve an easing type string to a function.\n */\nexport function resolveEasing(type: EasingType): EasingFn {\n\tswitch (type) {\n\t\tcase \"linear\":\n\t\t\treturn linear;\n\t\tcase \"easeInCubic\":\n\t\t\treturn easeInCubic;\n\t\tcase \"easeOutCubic\":\n\t\t\treturn easeOutCubic;\n\t\tcase \"easeInOutCubic\":\n\t\t\treturn easeInOutCubic;\n\t}\n}\n","import {\n\tanimateElement,\n\tgetConnectorState,\n\tgetElementState,\n\thideElementAfterExit,\n\tunhideElementOnReadd,\n\tupdateElementTransforms,\n} from \"../rendering/rendering-engine.ts\";\nimport { ControllerError } from \"../types/errors.ts\";\nimport type { EntryAnimation, ExitAnimation, RuntimeConnectorState, RuntimeElementState } from \"../types/node.ts\";\nimport type { RuntimeBundle } from \"../types/runtime-bundle.ts\";\nimport { type EasingType, resolveEasing } from \"../utils/easing.ts\";\nimport { AnimationEngine } from \"./animation-engine.ts\";\n\n// ── Event types ────────────────────────────────────────────────────────────\n\nexport interface ControllerEvents {\n\t\"progress-change\": (progress: number) => void;\n\t\"scene-change\": (index: number) => void;\n\tpaused: () => void;\n\tresumed: () => void;\n}\n\ntype EventKey = keyof ControllerEvents;\ntype AnyEventListener = (...args: unknown[]) => void;\ntype LifecycleTransition = {\n\tfrom: RuntimeElementState[\"presence\"];\n\tto: RuntimeElementState[\"presence\"];\n};\n\n// ── Controller config ──────────────────────────────────────────────────────\n\nexport interface ControllerConfig {\n\t/** Scroll container used to derive progress. Defaults to the mount target in `mountScene()`. */\n\tcontainer?: HTMLElement;\n\t/** SVG scene updated by this controller. Defaults to the first SVG in `container` for direct controller usage. */\n\tsceneElement?: SVGSVGElement;\n\tscrollDirection?: \"vertical\" | \"horizontal\";\n\tscrollOffset?: {\n\t\ttop?: number;\n\t\tbottom?: number;\n\t\tleft?: number;\n\t\tright?: number;\n\t};\n\tminProgress?: number;\n\tmaxProgress?: number;\n\tkeyboardControls?: boolean;\n\ttouchControls?: boolean;\n\tscrollSensitivity?: number;\n\ttransitionDuration?: number;\n\ttransitionEasing?: \"linear\" | \"ease-in-out\" | \"ease-out\";\n}\n\ntype ResolvedControllerConfig = Required<Omit<ControllerConfig, \"container\" | \"sceneElement\">> & {\n\tcontainer?: HTMLElement;\n\tsceneElement?: SVGSVGElement;\n};\n\nconst DEFAULT_CONFIG: Required<Omit<ControllerConfig, \"container\" | \"sceneElement\">> = {\n\tscrollDirection: \"vertical\",\n\tscrollOffset: {},\n\tminProgress: 0,\n\tmaxProgress: 1,\n\tkeyboardControls: false,\n\ttouchControls: false,\n\tscrollSensitivity: 1.0,\n\ttransitionDuration: 600,\n\ttransitionEasing: \"ease-in-out\",\n};\n\ninterface ControllerRuntime {\n\tengine?: AnimationEngine;\n\tsceneElement?: SVGSVGElement;\n}\n\n// ── Controller implementation ──────────────────────────────────────────────\n\n/**\n * Animation controller — manages scroll progress, scene navigation,\n * and delegates to the animation engine for frame updates.\n */\nexport class AnimationController {\n\tprivate _engine = new AnimationEngine();\n\tprivate _bundle: RuntimeBundle | null = null;\n\tprivate _sceneIndex = 0;\n\tprivate _progress = 0;\n\tprivate _paused = false;\n\tprivate _config: ResolvedControllerConfig = DEFAULT_CONFIG;\n\tprivate _container: HTMLElement | null = null;\n\tprivate _sceneElement: SVGSVGElement | null = null;\n\tprivate _ownsEngine = true;\n\tprivate _rafId: number | null = null;\n\tprivate _pendingProgress: number | null = null;\n\tprivate _destroyed = false;\n\tprivate _listeners: Map<EventKey, Set<AnyEventListener>> = new Map();\n\n\t// Scroll tracking state\n\tprivate _minScroll = 0;\n\tprivate _maxScroll = 0;\n\tprivate _touchStartY = 0;\n\tprivate _touchStartX = 0;\n\tprivate _isDragging = false;\n\n\t// Transition animation state\n\tprivate _transitionAnim: ReturnType<typeof requestAnimationFrame> | null = null;\n\n\tget engine(): AnimationEngine {\n\t\treturn this._engine;\n\t}\n\n\tget progress(): number {\n\t\treturn this._progress;\n\t}\n\n\tgetProgress(): number {\n\t\tthis._assertNotDestroyed();\n\t\treturn this._progress;\n\t}\n\n\tget sceneIndex(): number {\n\t\treturn this._sceneIndex;\n\t}\n\n\tgetSceneIndex(): number {\n\t\tthis._assertNotDestroyed();\n\t\treturn this._sceneIndex;\n\t}\n\n\tget scenes(): RuntimeBundle[\"scenes\"] {\n\t\treturn this._bundle?.scenes ?? [];\n\t}\n\n\tget paused(): boolean {\n\t\treturn this._paused;\n\t}\n\n\tget currentScene(): RuntimeBundle[\"scenes\"][number] | undefined {\n\t\treturn this.scenes[this._sceneIndex];\n\t}\n\n\t/**\n\t * Initialize the controller with a compiled bundle and optional runtime resources.\n\t */\n\tinit(bundle: RuntimeBundle, config: ControllerConfig = {}, runtime: ControllerRuntime = {}): void {\n\t\tthis._assertNotDestroyed();\n\t\tif (!bundle.scenes || bundle.scenes.length === 0) {\n\t\t\tthrow new ControllerError(\"CONTROLLER_NO_SCENES\", \"init() requires at least one compiled scene stop\");\n\t\t}\n\n\t\tthis._cancelFrame();\n\t\tthis._bundle = bundle;\n\t\tthis._engine = runtime.engine ?? new AnimationEngine();\n\t\tthis._ownsEngine = !runtime.engine;\n\t\tthis._sceneIndex = 0;\n\t\tthis._progress = 0;\n\t\tthis._paused = false;\n\t\tthis._config = { ...DEFAULT_CONFIG, ...config };\n\t\tthis._sceneElement = runtime.sceneElement ?? config.sceneElement ?? null;\n\n\t\tthis._engine.init(bundle);\n\t\tthis._bindScroll();\n\t}\n\n\t/**\n\t * Set scroll progress (0–1, clamped) and trigger frame update.\n\t */\n\tsetProgress(progress: number): void {\n\t\tthis._assertNotDestroyed();\n\t\tif (!Number.isFinite(progress)) {\n\t\t\tthrow new ControllerError(\"CONTROLLER_PROGRESS_OUT_OF_RANGE\", \"setProgress() requires a finite progress value\");\n\t\t}\n\n\t\tconst clamped = Math.max(0, Math.min(1, progress));\n\t\tif (clamped === this._progress && !this._paused && this._rafId !== null) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._progress = clamped;\n\t\tif (this._paused) return;\n\t\tthis._scheduleProgressForward(clamped);\n\t}\n\n\t/**\n\t * Navigate to next scene (wraps to 0 if at end).\n\t */\n\tnextScene(): void {\n\t\tthis._assertNotDestroyed();\n\t\tif (this.scenes.length <= 1) return;\n\n\t\tconst nextIndex = (this._sceneIndex + 1) % this.scenes.length;\n\t\tthis._transitionToScene(nextIndex);\n\t}\n\n\t/**\n\t * Navigate to previous scene (wraps to last if at beginning).\n\t */\n\tprevScene(): void {\n\t\tthis._assertNotDestroyed();\n\t\tif (this.scenes.length <= 1) return;\n\n\t\tconst prevIndex = (this._sceneIndex - 1 + this.scenes.length) % this.scenes.length;\n\t\tthis._transitionToScene(prevIndex);\n\t}\n\n\t/**\n\t * Set scene index directly.\n\t */\n\tsetSceneIndex(index: number): void {\n\t\tthis._assertNotDestroyed();\n\t\tif (index < 0 || index >= this.scenes.length) {\n\t\t\tthrow new ControllerError(\n\t\t\t\t\"CONTROLLER_SCENE_INDEX_OUT_OF_RANGE\",\n\t\t\t\t`Scene index ${index} is out of bounds [0, ${this.scenes.length - 1}]`,\n\t\t\t);\n\t\t}\n\t\tthis._transitionToScene(index);\n\t}\n\n\t/**\n\t * Pause all animations.\n\t */\n\tpause(): void {\n\t\tthis._assertNotDestroyed();\n\t\tif (this._paused) return;\n\t\tthis._paused = true;\n\t\tthis._cancelFrame();\n\t\tthis._engine.pause();\n\t\tthis._applyPauseState(true);\n\t\tthis._emit(\"paused\");\n\t}\n\n\t/**\n\t * Resume from paused state.\n\t */\n\tresume(): void {\n\t\tthis._assertNotDestroyed();\n\t\tif (!this._paused) return;\n\t\tthis._paused = false;\n\t\tthis._engine.resume();\n\t\tthis._applyPauseState(false);\n\t\tthis._scheduleProgressForward(this._progress);\n\t\tthis._emit(\"resumed\");\n\t}\n\n\t/**\n\t * Check if controller is paused.\n\t */\n\tisPaused(): boolean {\n\t\tthis._assertNotDestroyed();\n\t\treturn this._paused;\n\t}\n\n\t/**\n\t * Destroy controller and clean up all listeners and resources.\n\t */\n\tdestroy(): void {\n\t\tthis._assertNotDestroyed();\n\t\tthis._unbindScroll();\n\t\tthis._cancelFrame();\n\t\tthis._cancelTransition();\n\t\tif (this._ownsEngine) this._engine.destroy();\n\t\tthis._listeners.clear();\n\t\tthis._bundle = null;\n\t\tthis._container = null;\n\t\tthis._pendingProgress = null;\n\t\tthis._destroyed = true;\n\t}\n\n\t// ── Event system ───────────────────────────────────────────────────────\n\n\ton<K extends EventKey>(event: K, listener: ControllerEvents[K]): void {\n\t\tthis._assertNotDestroyed();\n\t\tconst set = this._listeners.get(event) ?? new Set();\n\t\tset.add(listener as AnyEventListener);\n\t\tthis._listeners.set(event, set);\n\t}\n\n\toff<K extends EventKey>(event: K, listener: ControllerEvents[K]): void {\n\t\tthis._assertNotDestroyed();\n\t\tconst set = this._listeners.get(event);\n\t\tif (set) {\n\t\t\tset.delete(listener as AnyEventListener);\n\t\t}\n\t}\n\n\tprivate _emit<K extends EventKey>(event: K, ...args: Parameters<ControllerEvents[K]>): void {\n\t\tconst set = this._listeners.get(event);\n\t\tif (set) {\n\t\t\tfor (const listener of set) {\n\t\t\t\ttry {\n\t\t\t\t\t(listener as AnyEventListener)(...args);\n\t\t\t\t} catch (error) {\n\t\t\t\t\tqueueMicrotask(() => {\n\t\t\t\t\t\tthrow error;\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// ── Frame update ───────────────────────────────────────────────────────\n\n\tprivate _scheduleProgressForward(progress: number): void {\n\t\tthis._pendingProgress = progress;\n\t\tif (this._rafId !== null) return;\n\n\t\tthis._rafId = requestAnimationFrame(() => {\n\t\t\tthis._rafId = null;\n\t\t\tconst pending = this._pendingProgress;\n\t\t\tthis._pendingProgress = null;\n\t\t\tif (pending === null || this._paused || this._destroyed) return;\n\t\t\tthis._engine.setProgress(pending);\n\t\t\tthis._applyFrameUpdate();\n\t\t\tthis._emit(\"progress-change\", pending);\n\t\t});\n\t}\n\n\tprivate _cancelFrame(): void {\n\t\tif (this._rafId !== null) {\n\t\t\tcancelAnimationFrame(this._rafId);\n\t\t\tthis._rafId = null;\n\t\t}\n\t\tthis._pendingProgress = null;\n\t}\n\n\tprivate _applyFrameUpdate(): void {\n\t\tif (!this._bundle) return;\n\n\t\tconst svg = (this._sceneElement ?? this._container?.querySelector(\"svg\") ?? null) as SVGSVGElement & {\n\t\t\t_elementMap?: Map<string, unknown>;\n\t\t\t_connectorMap?: Map<string, unknown>;\n\t\t};\n\t\tif (!svg) return;\n\n\t\tconst updates = this._engine.getFrameUpdates().map((update) => ({\n\t\t\tid: update.id,\n\t\t\tasset: update.asset,\n\t\t\tpos: update.pos,\n\t\t\tsize: update.size,\n\t\t\tlayer: update.layer,\n\t\t\tpresence: update.lifecycle,\n\t\t\tenter: update.entry as RuntimeElementState[\"enter\"],\n\t\t\texit: update.exit as RuntimeElementState[\"exit\"],\n\t\t\tambient: update.ambient,\n\t\t\ttext: update.text,\n\t\t\tprimitive: update.primitive,\n\t\t}));\n\t\tconst connectors = this._engine.getConnectorFrameUpdates().map((update) => ({\n\t\t\tid: update.id,\n\t\t\troute: update.route,\n\t\t\tlayer: update.layer,\n\t\t\tpresence: update.lifecycle,\n\t\t\tstyle: update.style,\n\t\t\tstart: update.start,\n\t\t\tend: update.end,\n\t\t\tdirection: update.direction,\n\t\t\tenter: update.entry as RuntimeConnectorState[\"enter\"],\n\t\t\texit: update.exit as RuntimeConnectorState[\"exit\"],\n\t\t\tambient: update.ambient,\n\t\t}));\n\n\t\tupdateElementTransforms(svg, updates, connectors);\n\t\tthis._applyLifecycleChanges(updates);\n\t\tthis._applyConnectorLifecycleChanges(connectors);\n\t}\n\n\tprivate _applyLifecycleChanges(elements: RuntimeElementState[]): void {\n\t\tfor (const elDef of elements) {\n\t\t\tconst transition = this._engine.getLifecycleTransition(elDef.id);\n\t\t\tif (!transition) continue;\n\n\t\t\tconst svgForState = (this._sceneElement ?? this._container?.querySelector(\"svg\")) as SVGSVGElement | null;\n\t\t\tif (!svgForState) continue;\n\t\t\tconst state = getElementState(svgForState, elDef.id);\n\t\t\tif (!state) continue;\n\n\t\t\tif (transition.to === \"entering\" || transition.to === \"present\") {\n\t\t\t\tstate.isHidden = false;\n\t\t\t\tunhideElementOnReadd(state.node);\n\t\t\t}\n\n\t\t\tif (isForwardEntryTransition(transition)) {\n\t\t\t\tthis._applyEntryAnimation(elDef, state);\n\t\t\t}\n\n\t\t\tif (isReverseExitTransition(transition)) {\n\t\t\t\tthis._applyExitAnimation({ ...elDef, exit: oppositeExitAnimation(elDef.enter ?? \"fade-in\") }, state);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (isForwardExitTransition(transition)) {\n\t\t\t\tthis._applyExitAnimation(elDef, state);\n\t\t\t}\n\n\t\t\tif (isReverseEntryTransition(transition)) {\n\t\t\t\tstate.isHidden = false;\n\t\t\t\tunhideElementOnReadd(state.node);\n\t\t\t\tthis._applyEntryAnimation({ ...elDef, enter: oppositeEntryAnimation(elDef.exit ?? \"fade-out\") }, state);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (transition.to === \"removed\") {\n\t\t\t\tstate.isHidden = true;\n\t\t\t\thideElementAfterExit(state.node);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate _applyConnectorLifecycleChanges(connectors: RuntimeConnectorState[]): void {\n\t\tfor (const connectorDef of connectors) {\n\t\t\tconst transition = this._engine.getConnectorLifecycleTransition(connectorDef.id);\n\t\t\tif (!transition) continue;\n\n\t\t\tconst svgForState = (this._sceneElement ?? this._container?.querySelector(\"svg\")) as SVGSVGElement | null;\n\t\t\tif (!svgForState) continue;\n\t\t\tconst state = getConnectorState(svgForState, connectorDef.id);\n\t\t\tif (!state) continue;\n\n\t\t\tif (transition.to === \"entering\" || transition.to === \"present\") {\n\t\t\t\tstate.isHidden = false;\n\t\t\t\tunhideElementOnReadd(state.node);\n\t\t\t}\n\n\t\t\tif (isForwardEntryTransition(transition)) {\n\t\t\t\tthis._applyConnectorEntryAnimation(connectorDef, state);\n\t\t\t}\n\n\t\t\tif (isReverseExitTransition(transition)) {\n\t\t\t\tthis._applyConnectorExitAnimation(\n\t\t\t\t\t{\n\t\t\t\t\t\t...connectorDef,\n\t\t\t\t\t\texit: oppositeExitAnimation(connectorDef.enter ?? \"fade-in\"),\n\t\t\t\t\t},\n\t\t\t\t\tstate,\n\t\t\t\t);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (isForwardExitTransition(transition)) {\n\t\t\t\tthis._applyConnectorExitAnimation(connectorDef, state);\n\t\t\t}\n\n\t\t\tif (isReverseEntryTransition(transition)) {\n\t\t\t\tstate.isHidden = false;\n\t\t\t\tunhideElementOnReadd(state.node);\n\t\t\t\tthis._applyConnectorEntryAnimation(\n\t\t\t\t\t{\n\t\t\t\t\t\t...connectorDef,\n\t\t\t\t\t\tenter: oppositeEntryAnimation(connectorDef.exit ?? \"fade-out\"),\n\t\t\t\t\t},\n\t\t\t\t\tstate,\n\t\t\t\t);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (transition.to === \"removed\") {\n\t\t\t\tstate.isHidden = true;\n\t\t\t\thideElementAfterExit(state.node);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate _applyEntryAnimation(elDef: RuntimeElementState, state: { node: SVGElement; isHidden: boolean }): void {\n\t\tconst entryAnim = elDef.enter ?? \"fade-in\";\n\t\tif (entryAnim === \"none\") return;\n\n\t\tanimateElement(state.node, `iso-anim-${entryAnim}`, \"enter\");\n\n\t\tstate.node.addEventListener(\n\t\t\t\"animationend\",\n\t\t\t() => {\n\t\t\t\tstate.node.style.animation = \"\";\n\t\t\t},\n\t\t\t{ once: true },\n\t\t);\n\t}\n\n\tprivate _applyExitAnimation(elDef: RuntimeElementState, state: { node: SVGElement; isHidden: boolean }): void {\n\t\tconst exitAnim = elDef.exit ?? \"fade-out\";\n\t\tif (exitAnim === \"none\") {\n\t\t\thideElementAfterExit(state.node);\n\t\t\treturn;\n\t\t}\n\n\t\tanimateElement(state.node, `iso-anim-${exitAnim}`, \"exit\");\n\n\t\tstate.node.addEventListener(\n\t\t\t\"animationend\",\n\t\t\t() => {\n\t\t\t\thideElementAfterExit(state.node);\n\t\t\t},\n\t\t\t{ once: true },\n\t\t);\n\t}\n\n\tprivate _applyConnectorEntryAnimation(\n\t\tconnectorDef: RuntimeConnectorState,\n\t\tstate: { node: SVGElement; isHidden: boolean },\n\t): void {\n\t\tconst entryAnim = connectorDef.enter ?? \"fade-in\";\n\t\tif (entryAnim === \"none\") return;\n\n\t\tanimateElement(state.node, `iso-anim-${entryAnim}`, \"enter\");\n\n\t\tstate.node.addEventListener(\n\t\t\t\"animationend\",\n\t\t\t() => {\n\t\t\t\tstate.node.style.animation = \"\";\n\t\t\t},\n\t\t\t{ once: true },\n\t\t);\n\t}\n\n\tprivate _applyConnectorExitAnimation(\n\t\tconnectorDef: RuntimeConnectorState,\n\t\tstate: { node: SVGElement; isHidden: boolean },\n\t): void {\n\t\tconst exitAnim = connectorDef.exit ?? \"fade-out\";\n\t\tif (exitAnim === \"none\") {\n\t\t\thideElementAfterExit(state.node);\n\t\t\treturn;\n\t\t}\n\n\t\tanimateElement(state.node, `iso-anim-${exitAnim}`, \"exit\");\n\n\t\tstate.node.addEventListener(\n\t\t\t\"animationend\",\n\t\t\t() => {\n\t\t\t\thideElementAfterExit(state.node);\n\t\t\t},\n\t\t\t{ once: true },\n\t\t);\n\t}\n\n\t// ── Scene transitions ──────────────────────────────────────────────────\n\n\tprivate _transitionToScene(index: number): void {\n\t\tthis._cancelTransition();\n\n\t\tif (index === this._sceneIndex) return;\n\n\t\tthis._sceneIndex = index;\n\t\tthis._emit(\"scene-change\", index);\n\n\t\tconst stop = this.scenes[index];\n\t\tconst from = this._progress;\n\t\tconst to = stop.progress;\n\t\tconst duration = this._config.transitionDuration;\n\t\tif (duration > 0 && from !== to) {\n\t\t\tthis._animateProgress(from, to, duration);\n\t\t\treturn;\n\t\t}\n\n\t\tthis._progress = to;\n\t\tthis._scheduleProgressForward(to);\n\t}\n\n\tprivate _animateProgress(from: number, to: number, duration: number): void {\n\t\tconst easing = resolveEasing(\n\t\t\t(this._config.transitionEasing === \"ease-in-out\"\n\t\t\t\t? \"easeInOutCubic\"\n\t\t\t\t: this._config.transitionEasing === \"ease-out\"\n\t\t\t\t\t? \"easeOutCubic\"\n\t\t\t\t\t: \"linear\") as EasingType,\n\t\t);\n\t\tconst start = performance.now();\n\n\t\tconst step = (now: number) => {\n\t\t\tconst elapsed = now - start;\n\t\t\tconst t = Math.min(elapsed / duration, 1);\n\t\t\tconst easedT = easing(t);\n\t\t\tconst currentProgress = from + (to - from) * easedT;\n\n\t\t\tthis.setProgress(currentProgress);\n\n\t\t\tif (t < 1) {\n\t\t\t\tthis._transitionAnim = requestAnimationFrame(step);\n\t\t\t} else {\n\t\t\t\tthis._transitionAnim = null;\n\t\t\t}\n\t\t};\n\n\t\tthis._transitionAnim = requestAnimationFrame(step);\n\t}\n\n\tprivate _cancelTransition(): void {\n\t\tif (this._transitionAnim !== null) {\n\t\t\tcancelAnimationFrame(this._transitionAnim);\n\t\t\tthis._transitionAnim = null;\n\t\t}\n\t}\n\n\t// ── Scroll binding ─────────────────────────────────────────────────────\n\n\tprivate _bindScroll(): void {\n\t\tconst container = this._config.container;\n\t\tif (!container) return;\n\n\t\tthis._container = container;\n\t\tthis._calculateScrollBounds();\n\n\t\tcontainer.addEventListener(\"scroll\", this._onScroll, { passive: true });\n\t\twindow.addEventListener(\"resize\", this._onResize, { passive: true });\n\n\t\tif (this._config.keyboardControls) {\n\t\t\tdocument.addEventListener(\"keydown\", this._onKeyDown);\n\t\t}\n\n\t\tif (this._config.touchControls) {\n\t\t\tcontainer.addEventListener(\"touchstart\", this._onTouchStart, {\n\t\t\t\tpassive: true,\n\t\t\t});\n\t\t\tcontainer.addEventListener(\"touchmove\", this._onTouchMove, {\n\t\t\t\tpassive: false,\n\t\t\t});\n\t\t\tcontainer.addEventListener(\"touchend\", this._onTouchEnd);\n\t\t}\n\t}\n\n\tprivate _unbindScroll(): void {\n\t\tconst container = this._config.container;\n\t\tif (!container) return;\n\n\t\tcontainer.removeEventListener(\"scroll\", this._onScroll);\n\t\twindow.removeEventListener(\"resize\", this._onResize);\n\t\tdocument.removeEventListener(\"keydown\", this._onKeyDown);\n\t\tcontainer.removeEventListener(\"touchstart\", this._onTouchStart);\n\t\tcontainer.removeEventListener(\"touchmove\", this._onTouchMove);\n\t\tcontainer.removeEventListener(\"touchend\", this._onTouchEnd);\n\t}\n\n\tprivate _calculateScrollBounds(): void {\n\t\tconst container = this._config.container;\n\t\tif (!container) return;\n\n\t\tconst offset = this._config.scrollOffset ?? {};\n\t\tif (this._config.scrollDirection === \"horizontal\") {\n\t\t\tthis._minScroll = offset.left ?? 0;\n\t\t\tthis._maxScroll = container.scrollWidth - container.clientWidth - (offset.right ?? 0);\n\t\t\treturn;\n\t\t}\n\n\t\tthis._minScroll = offset.top ?? 0;\n\t\tthis._maxScroll = container.scrollHeight - container.clientHeight - (offset.bottom ?? 0);\n\t}\n\n\tprivate _onScroll = (): void => {\n\t\tif (this._paused || this._destroyed) return;\n\n\t\tconst container = this._config.container;\n\t\tif (!container) return;\n\n\t\tconst currentScroll = this._config.scrollDirection === \"horizontal\" ? container.scrollLeft : container.scrollTop;\n\n\t\tconst range = this._maxScroll - this._minScroll;\n\t\tif (range <= 0) return;\n\n\t\tconst rawProgress = (currentScroll - this._minScroll) / range;\n\t\tconst clampedProgress = Math.max(\n\t\t\tthis._config.minProgress ?? 0,\n\t\t\tMath.min(this._config.maxProgress ?? 1, rawProgress),\n\t\t);\n\n\t\tconst sensitivity = this._config.scrollSensitivity ?? 1;\n\t\tif (clampedProgress !== this._progress) {\n\t\t\tthis.setProgress(clampedProgress * sensitivity);\n\t\t}\n\t};\n\n\tprivate _onResize = (): void => {\n\t\tif (this._destroyed) return;\n\t\tthis._calculateScrollBounds();\n\t};\n\n\tprivate _onKeyDown = (e: KeyboardEvent): void => {\n\t\tif (this._destroyed) return;\n\t\tif (e.key === \"ArrowRight\" || e.key === \"ArrowDown\" || e.key === \" \") {\n\t\t\te.preventDefault();\n\t\t\tthis.nextScene();\n\t\t} else if (e.key === \"ArrowLeft\" || e.key === \"ArrowUp\") {\n\t\t\te.preventDefault();\n\t\t\tthis.prevScene();\n\t\t}\n\t};\n\n\tprivate _onTouchStart = (e: TouchEvent): void => {\n\t\tif (this._destroyed) return;\n\t\tthis._isDragging = true;\n\t\tconst touch = e.touches[0];\n\t\tif (this._config.scrollDirection === \"horizontal\") {\n\t\t\tthis._touchStartX = touch.clientX;\n\t\t} else {\n\t\t\tthis._touchStartY = touch.clientY;\n\t\t}\n\t};\n\n\tprivate _onTouchMove = (e: TouchEvent): void => {\n\t\tif (this._destroyed) return;\n\t\tif (!this._isDragging) return;\n\n\t\tconst touch = e.touches[0];\n\t\tconst delta =\n\t\t\tthis._config.scrollDirection === \"horizontal\"\n\t\t\t\t? this._touchStartX - touch.clientX\n\t\t\t\t: this._touchStartY - touch.clientY;\n\n\t\tconst sensitivity = this._config.scrollSensitivity ?? 1.0;\n\t\tconst progressDelta = (delta / 300) * sensitivity;\n\t\tconst newProgress = Math.max(0, Math.min(1, this._progress + progressDelta));\n\n\t\tthis.setProgress(newProgress);\n\t};\n\n\tprivate _onTouchEnd = (): void => {\n\t\tif (this._destroyed) return;\n\t\tthis._isDragging = false;\n\t};\n\n\t// ── Pause state ────────────────────────────────────────────────────────\n\n\tprivate _applyPauseState(pause: boolean): void {\n\t\tconst container = this._config.container;\n\t\tif (!container) return;\n\n\t\tconst svg = container.querySelector(\"svg\");\n\t\tif (!svg) return;\n\n\t\tconst playState = pause ? \"paused\" : \"running\";\n\t\tconst ambientElements = svg.querySelectorAll('[class*=\"iso-ambient-\"]');\n\t\tfor (let i = 0; i < ambientElements.length; i++) {\n\t\t\tconst el = ambientElements[i] as HTMLElement;\n\t\t\tel.style.animationPlayState = playState;\n\t\t}\n\t}\n\n\tprivate _assertNotDestroyed(): void {\n\t\tif (!this._destroyed) return;\n\t\tthrow new ControllerError(\"CONTROLLER_DESTROYED\", \"AnimationController has been destroyed\");\n\t}\n}\n\nfunction isForwardEntryTransition(transition: LifecycleTransition): boolean {\n\treturn transition.from === \"removed\" && transition.to === \"entering\";\n}\n\nfunction isForwardExitTransition(transition: LifecycleTransition): boolean {\n\treturn transition.to === \"exiting\";\n}\n\nfunction isReverseExitTransition(transition: LifecycleTransition): boolean {\n\treturn transition.to === \"removed\" && transition.from !== \"exiting\";\n}\n\nfunction isReverseEntryTransition(transition: LifecycleTransition): boolean {\n\treturn transition.from === \"exiting\" && transition.to !== \"removed\";\n}\n\nfunction oppositeExitAnimation(entry: EntryAnimation): ExitAnimation {\n\tswitch (entry) {\n\t\tcase \"fade-in\":\n\t\t\treturn \"fade-out\";\n\t\tcase \"fade-in-grow\":\n\t\t\treturn \"fade-out-shrink\";\n\t\tcase \"fall-in\":\n\t\t\treturn \"rise-away\";\n\t\tcase \"rise-from-ground\":\n\t\t\treturn \"fall-through-ground\";\n\t\tcase \"slide-in-left\":\n\t\t\treturn \"slide-out-left\";\n\t\tcase \"slide-in-right\":\n\t\t\treturn \"slide-out-right\";\n\t\tcase \"flip-in\":\n\t\t\treturn \"flip-out\";\n\t\tcase \"none\":\n\t\t\treturn \"none\";\n\t}\n}\n\nfunction oppositeEntryAnimation(exit: ExitAnimation): EntryAnimation {\n\tswitch (exit) {\n\t\tcase \"fade-out\":\n\t\t\treturn \"fade-in\";\n\t\tcase \"fade-out-shrink\":\n\t\t\treturn \"fade-in-grow\";\n\t\tcase \"fall-through-ground\":\n\t\t\treturn \"rise-from-ground\";\n\t\tcase \"rise-away\":\n\t\t\treturn \"fall-in\";\n\t\tcase \"slide-out-left\":\n\t\t\treturn \"slide-in-left\";\n\t\tcase \"slide-out-right\":\n\t\t\treturn \"slide-in-right\";\n\t\tcase \"flip-out\":\n\t\t\treturn \"flip-in\";\n\t\tcase \"none\":\n\t\t\treturn \"none\";\n\t}\n}\n","import { AnimationEngine } from \"../animation/animation-engine.ts\";\nimport type { ControllerConfig } from \"../animation/controller.ts\";\nimport { AnimationController } from \"../animation/controller.ts\";\nimport { buildSceneDOM, getResolvedViewBox } from \"../rendering/rendering-engine.ts\";\nimport { resolveTheme } from \"../types/asset-registry.ts\";\nimport { RenderError } from \"../types/errors.ts\";\nimport type { CompiledFloor, CompiledLayout, RuntimeBundle } from \"../types/runtime-bundle.ts\";\n\nconst RUNTIME_BUNDLE_FORMAT = \"isostate-runtime-bundle\";\nconst RUNTIME_VERSION = \"0.1.0\";\nconst HEX_DIGEST_PATTERN = /^[a-f0-9]{64}$/;\n\nexport interface MountSceneOptions {\n\t/** Controller options, `false` to disable, or omitted to leave controller uninitialized. */\n\tcontroller?: ControllerConfig | false;\n\t/** Accessible label for the mounted SVG root. */\n\tlabel?: string;\n\t/** CSS custom properties applied on top of the bundle theme. */\n\tthemeVars?: Record<string, string>;\n}\n\n/** Runtime configuration resolved from a mounted scene bundle. */\nexport interface ResolvedRuntimeConfig {\n\tgrid: { cellSize: number };\n\tfloor: CompiledFloor;\n\tlayout: CompiledLayout;\n\tviewBox: { minX: number; minY: number; width: number; height: number };\n\ttheme: string;\n\tthemeVars: Record<string, string>;\n\tscenes: Array<{ id: string; progress: number }>;\n\tlayerOrder: Array<{ name: string; order: number }>;\n}\n\n/** Handles returned by `mountScene()` for controlling and disposing a scene. */\nexport interface MountedScene {\n\t/** Root SVG element appended to the mount target. */\n\tsvg: SVGSVGElement;\n\t/** Animation engine used by the mounted scene and controller. */\n\tengine: AnimationEngine;\n\t/** Optional controller created when `options.controller` is provided. */\n\tcontroller?: AnimationController;\n\t/** Inspect effective runtime settings after defaults and bundle metadata are applied. */\n\tgetResolvedConfig(): ResolvedRuntimeConfig;\n\t/** Remove DOM and event listeners owned by this mount. Safe to call more than once. */\n\tdestroy(): void;\n}\n\n/** Mount a compiled runtime bundle into an HTML element. */\nexport function mountScene(target: HTMLElement, bundle: RuntimeBundle, options: MountSceneOptions = {}): MountedScene {\n\tassertMountTarget(target);\n\tvalidateRuntimeBundle(bundle);\n\n\tconst engine = new AnimationEngine();\n\tengine.init(bundle);\n\n\tconst svg = buildSceneDOM(target, bundle, {\n\t\tlabel: options.label,\n\t\tthemeVars: options.themeVars,\n\t});\n\n\tlet controller: AnimationController | undefined;\n\tif (options.controller !== undefined && options.controller !== false) {\n\t\tcontroller = new AnimationController();\n\t\tcontroller.init(\n\t\t\tbundle,\n\t\t\t{\n\t\t\t\t...options.controller,\n\t\t\t\tcontainer: options.controller.container ?? target,\n\t\t\t\tsceneElement: svg,\n\t\t\t},\n\t\t\t{\n\t\t\t\tengine,\n\t\t\t\tsceneElement: svg,\n\t\t\t},\n\t\t);\n\t}\n\n\tlet destroyed = false;\n\n\treturn {\n\t\tsvg,\n\t\tengine,\n\t\tcontroller,\n\t\tgetResolvedConfig: () => getResolvedConfig(bundle, options),\n\t\tdestroy: () => {\n\t\t\tif (destroyed) return;\n\t\t\tdestroyed = true;\n\t\t\tcontroller?.destroy();\n\t\t\tengine.destroy();\n\t\t\tif (svg.parentNode === target) {\n\t\t\t\ttarget.removeChild(svg);\n\t\t\t} else {\n\t\t\t\tsvg.parentNode?.removeChild(svg);\n\t\t\t}\n\t\t},\n\t};\n}\n\nfunction assertMountTarget(target: HTMLElement): void {\n\tif (!target || typeof target.appendChild !== \"function\" || typeof target.removeChild !== \"function\") {\n\t\tthrow new RenderError(\"INVALID_MOUNT_TARGET\", \"mountScene() requires a DOM HTMLElement target\");\n\t}\n}\n\nfunction validateRuntimeBundle(bundle: RuntimeBundle): void {\n\tif (!bundle || typeof bundle !== \"object\") {\n\t\tthrow new RenderError(\"BUNDLE_FORMAT_MISSING\", \"Runtime bundle must be a plain object\");\n\t}\n\n\tif (bundle._format !== RUNTIME_BUNDLE_FORMAT) {\n\t\tthrow new RenderError(\"BUNDLE_FORMAT_MISSING\", \"Runtime bundle format is missing or unsupported\", {\n\t\t\texpected: RUNTIME_BUNDLE_FORMAT,\n\t\t});\n\t}\n\n\tif (!Array.isArray(bundle.scenes) || bundle.scenes.length === 0) {\n\t\tthrow new RenderError(\"BUNDLE_FORMAT_MISSING\", \"Runtime bundle must include compiled scenes[]\");\n\t}\n\n\tif (majorVersion(bundle._version) !== majorVersion(RUNTIME_VERSION)) {\n\t\tthrow new RenderError(\n\t\t\t\"BUNDLE_VERSION_MISMATCH\",\n\t\t\t`Runtime bundle version ${bundle._version} is not compatible with runtime ${RUNTIME_VERSION}`,\n\t\t\t{ bundleVersion: bundle._version, runtimeVersion: RUNTIME_VERSION },\n\t\t);\n\t}\n\n\tif (!bundle._digest) {\n\t\tthrow new RenderError(\"BUNDLE_DIGEST_MISSING\", \"Runtime bundle digest is missing\");\n\t}\n\n\tif (typeof bundle._digest !== \"string\" || !HEX_DIGEST_PATTERN.test(bundle._digest)) {\n\t\tthrow new RenderError(\"BUNDLE_DIGEST_MISMATCH\", \"Runtime bundle digest is malformed\");\n\t}\n\n\tconst { _digest, ...bundleWithoutDigest } = bundle;\n\tconst actualDigest = sha256(canonicalStringify(bundleWithoutDigest));\n\tif (actualDigest !== _digest) {\n\t\tthrow new RenderError(\"BUNDLE_DIGEST_MISMATCH\", \"Runtime bundle digest does not match bundle content\", {\n\t\t\texpected: _digest,\n\t\t\tactual: actualDigest,\n\t\t});\n\t}\n}\n\nfunction getResolvedConfig(bundle: RuntimeBundle, options: MountSceneOptions = {}): ResolvedRuntimeConfig {\n\treturn {\n\t\tgrid: { cellSize: bundle.grid.cellSize },\n\t\tfloor: { ...bundle.floor },\n\t\tlayout: {\n\t\t\t...bundle.layout,\n\t\t\tpadding: { ...bundle.layout.padding },\n\t\t\talign: [...bundle.layout.align],\n\t\t},\n\t\tviewBox: getResolvedViewBox(bundle),\n\t\ttheme: bundle.theme,\n\t\tthemeVars: getResolvedThemeVars(bundle, options.themeVars),\n\t\tscenes: bundle.scenes.map((scene) => ({\n\t\t\tid: scene.id,\n\t\t\tprogress: scene.progress,\n\t\t})),\n\t\tlayerOrder: bundle.layers\n\t\t\t.map((layer) => ({ name: layer.name, order: layer.order }))\n\t\t\t.sort((a, b) => a.order - b.order || a.name.localeCompare(b.name)),\n\t};\n}\n\nfunction getResolvedThemeVars(bundle: RuntimeBundle, overrides: Record<string, string> = {}): Record<string, string> {\n\treturn {\n\t\t...(resolveTheme(bundle.theme) ?? {}),\n\t\t...(bundle.themeVars ?? {}),\n\t\t...overrides,\n\t};\n}\n\nfunction majorVersion(version: string): number {\n\tconst major = Number.parseInt(String(version).split(\".\")[0] ?? \"\", 10);\n\treturn Number.isFinite(major) ? major : Number.NaN;\n}\n\ntype JsonPrimitive = string | number | boolean | null;\ntype JsonValue = JsonPrimitive | JsonValue[] | { [key: string]: JsonValue };\n\nfunction canonicalStringify(value: unknown): string {\n\treturn JSON.stringify(normalizeValue(value));\n}\n\nfunction normalizeValue<T>(value: T): T {\n\tif (Array.isArray(value)) {\n\t\treturn value.map((item) => (item === undefined ? null : normalizeValue(item))) as T;\n\t}\n\n\tif (!isPlainObject(value)) return value;\n\n\tconst normalized: Record<string, JsonValue> = {};\n\tfor (const key of Object.keys(value).sort()) {\n\t\tconst child = (value as Record<string, unknown>)[key];\n\t\tif (child !== undefined) {\n\t\t\tnormalized[key] = normalizeValue(child) as JsonValue;\n\t\t}\n\t}\n\n\treturn normalized as T;\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction sha256(input: string): string {\n\tconst bytes = utf8Bytes(input);\n\tconst bitLength = bytes.length * 8;\n\tbytes.push(0x80);\n\twhile (bytes.length % 64 !== 56) bytes.push(0);\n\tfor (let i = 7; i >= 0; i--) {\n\t\tbytes.push(Math.floor(bitLength / 2 ** (i * 8)) & 0xff);\n\t}\n\n\tconst h = [0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19];\n\tconst k = [\n\t\t0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98,\n\t\t0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, 0xe49b69c1, 0xefbe4786,\n\t\t0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152, 0xa831c66d, 0xb00327c8,\n\t\t0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,\n\t\t0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819,\n\t\t0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a,\n\t\t0x5b9cca4f, 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7,\n\t\t0xc67178f2,\n\t];\n\n\tconst w = new Array<number>(64);\n\tfor (let offset = 0; offset < bytes.length; offset += 64) {\n\t\tfor (let i = 0; i < 16; i++) {\n\t\t\tconst j = offset + i * 4;\n\t\t\tw[i] = ((bytes[j] << 24) | (bytes[j + 1] << 16) | (bytes[j + 2] << 8) | bytes[j + 3]) >>> 0;\n\t\t}\n\t\tfor (let i = 16; i < 64; i++) {\n\t\t\tconst s0 = rotr(w[i - 15], 7) ^ rotr(w[i - 15], 18) ^ (w[i - 15] >>> 3);\n\t\t\tconst s1 = rotr(w[i - 2], 17) ^ rotr(w[i - 2], 19) ^ (w[i - 2] >>> 10);\n\t\t\tw[i] = (w[i - 16] + s0 + w[i - 7] + s1) >>> 0;\n\t\t}\n\n\t\tlet [a, b, c, d, e, f, g, hh] = h;\n\t\tfor (let i = 0; i < 64; i++) {\n\t\t\tconst s1 = rotr(e, 6) ^ rotr(e, 11) ^ rotr(e, 25);\n\t\t\tconst ch = (e & f) ^ (~e & g);\n\t\t\tconst temp1 = (hh + s1 + ch + k[i] + w[i]) >>> 0;\n\t\t\tconst s0 = rotr(a, 2) ^ rotr(a, 13) ^ rotr(a, 22);\n\t\t\tconst maj = (a & b) ^ (a & c) ^ (b & c);\n\t\t\tconst temp2 = (s0 + maj) >>> 0;\n\t\t\thh = g;\n\t\t\tg = f;\n\t\t\tf = e;\n\t\t\te = (d + temp1) >>> 0;\n\t\t\td = c;\n\t\t\tc = b;\n\t\t\tb = a;\n\t\t\ta = (temp1 + temp2) >>> 0;\n\t\t}\n\n\t\th[0] = (h[0] + a) >>> 0;\n\t\th[1] = (h[1] + b) >>> 0;\n\t\th[2] = (h[2] + c) >>> 0;\n\t\th[3] = (h[3] + d) >>> 0;\n\t\th[4] = (h[4] + e) >>> 0;\n\t\th[5] = (h[5] + f) >>> 0;\n\t\th[6] = (h[6] + g) >>> 0;\n\t\th[7] = (h[7] + hh) >>> 0;\n\t}\n\n\treturn h.map((value) => value.toString(16).padStart(8, \"0\")).join(\"\");\n}\n\nfunction utf8Bytes(input: string): number[] {\n\treturn Array.from(new TextEncoder().encode(input));\n}\n\nfunction rotr(value: number, bits: number): number {\n\treturn (value >>> bits) | (value << (32 - bits));\n}\n"],"names":["NS"],"mappings":"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"}
|