@sebastianwessel/isostate 0.6.0 → 0.6.1
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/dist/animation/controller.d.ts +5 -0
- package/dist/animation/controller.d.ts.map +1 -1
- package/dist/browser/isostate.runtime.js +2 -2
- package/dist/browser/isostate.runtime.js.map +4 -4
- package/dist/chunks/{index-WmsNtuaZ.js → index-C_7KbR4v.js} +18 -2
- package/dist/chunks/index-C_7KbR4v.js.map +1 -0
- package/dist/chunks/{scene-parser-BNXXIAqj.js → scene-parser-D_0OCHLL.js} +2 -2
- package/dist/chunks/{scene-parser-BNXXIAqj.js.map → scene-parser-D_0OCHLL.js.map} +1 -1
- package/dist/dsl/browser.js +1 -1
- package/dist/dsl/index.js +1 -1
- package/dist/index.js +1 -1
- package/dist/runtime/index.js +1 -1
- package/package.json +2 -2
- package/dist/chunks/index-WmsNtuaZ.js.map +0 -1
|
@@ -12,13 +12,13 @@
|
|
|
12
12
|
"import { RenderError } from \"../types/errors.ts\";\n\nconst CSS_CUSTOM_PROPERTY_PATTERN = /^--[a-zA-Z0-9-_]+$/;\n\n/**\n * Apply theme CSS custom properties to an element's inline style.\n * Throws `RenderError` (`INVALID_THEME_VAR`) if a key is not a valid `--name` custom property.\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",
|
|
13
13
|
"import { resolveTheme } from \"../types/asset-registry.ts\";\nimport { RenderError } from \"../types/errors.ts\";\nimport type { CameraGridArea, 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 { roundedPath, updateActivity, updateMessages, updateTrackEffects } from \"./scene-effects.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\tcurrent: RuntimeElementState;\n\tanchor: [number, number];\n\tisHidden: boolean;\n\tentryKey?: string;\n\texitKey?: string;\n\tambient: Set<string>;\n}\n\nexport interface ViewBoxRect {\n\tminX: number;\n\tminY: number;\n\twidth: number;\n\theight: number;\n}\n\n/** Internal state tracked per connector node. */\ninterface ConnectorState {\n\tnode: SVGGElement;\n\tshaft: SVGPathElement;\n\toutline?: SVGPathElement;\n\tlane?: SVGPathElement;\n\tstartEndpoint?: SVGElement;\n\tendEndpoint?: SVGElement;\n\tisHidden: boolean;\n\tambient: Set<string>;\n\tprevious?: RuntimeConnectorState;\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\t_depthGroup: SVGGElement;\n\t_assetResolver: AssetResolver;\n}\n\n/** Options accepted by `buildSceneDOM()`. */\nexport interface RenderConfig {\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// ── 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\tsvg._assetResolver = assetResolver;\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.anchor = assetAnchorForBounds(bundle, initial);\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\tsvg._depthGroup = depthGroup;\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\t_depthGroup?: SVGGElement;\n\t\t_assetResolver?: AssetResolver;\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 as Map<string, ElementState> | undefined;\n\tif (map) {\n\t\tfor (const def of elements) {\n\t\t\tconst state = map.get(def.id);\n\t\t\tif (!state) continue;\n\t\t\tconst previous = state.current;\n\t\t\tstate.current = def;\n\t\t\tif (!hasEqualGeneratedContent(previous, def)) {\n\t\t\t\tupdateGeneratedElementContent(state.node, def, layout, svg._assetResolver);\n\t\t\t\tstate.anchor = svg._assetResolver?.(def.asset)?.anchor ?? [0.5, 1];\n\t\t\t}\n\t\t\tif (!hasEqualGeneratedContent(previous, def) || !deepEqual(previous.activity, def.activity)) {\n\t\t\t\tupdateActivity(state.node, def.activity, layout.cellSize);\n\t\t\t}\n\t\t\tapplyElementTransform(state.node, def, layout);\n\t\t\tapplyAmbientClasses(state, def.ambient ?? []);\n\t\t}\n\t\tif (svg._depthGroup) {\n\t\t\treconcileDepthOrder(svg._depthGroup, map);\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\nexport function getResolvedProjectionLayout(bundle: RuntimeBundle): {\n\tcellSize: number;\n\tpadding: { x: number; y: number };\n\tselectedBounds: { minX: number; minY: number; maxX: number; maxY: number };\n} {\n\tconst layout = resolveSceneLayout(bundle);\n\treturn {\n\t\tcellSize: layout.cellSize,\n\t\tpadding: layout.padding,\n\t\tselectedBounds: layout.selectedBounds,\n\t};\n}\n\nexport function getCurrentElementBounds(\n\tsvg: SVGSVGElement & { _elementMap?: Map<string, ElementState | unknown>; _layout?: ResolvedLayoutState },\n\tid: string,\n): ViewBoxRect | undefined {\n\tconst layout = svg._layout;\n\tconst state = svg._elementMap?.get(id) as ElementState | undefined;\n\tif (!layout || !state || state.current.presence === \"removed\") return undefined;\n\treturn boundsToViewBox(calculateElementBounds(state.current, layout, state.anchor));\n}\n\nexport function getGridAreaBounds(bundle: RuntimeBundle, area: CameraGridArea): ViewBoxRect {\n\tconst layout = resolveSceneLayout(bundle);\n\tconst [x, y] = area.at;\n\tconst [width, height] = area.size;\n\tlet bounds = emptyBounds();\n\tfor (const point of [\n\t\t[x, y],\n\t\t[x + width, y],\n\t\t[x, y + height],\n\t\t[x + width, y + height],\n\t] as Array<[number, number]>) {\n\t\tconst screen = projectToScreen(\n\t\t\tpoint[0],\n\t\t\tpoint[1],\n\t\t\tlayout.cellSize,\n\t\t\tlayout.selectedBounds.minX,\n\t\t\tlayout.selectedBounds.minY,\n\t\t\tlayout.padding.x,\n\t\t\tlayout.padding.y,\n\t\t);\n\t\tbounds = includePoint(bounds, screen.screenX, screen.screenY);\n\t}\n\treturn boundsToViewBox(bounds);\n}\n\nexport function applySceneViewBox(svg: SVGSVGElement, viewBox: ViewBoxRect): void {\n\tsvg.setAttribute(\"viewBox\", `${viewBox.minX} ${viewBox.minY} ${viewBox.width} ${viewBox.height}`);\n}\n\n// ── Lifecycle helpers ─────────────────────────────────────────────────────\n\n/** Hide an element after its exit animation completes. */\nexport function hideElementAfterExit(node: SVGElement): void {\n\tnode.classList.add(\"iso-motion-paused\");\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.classList.remove(\"iso-motion-paused\");\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\tbounds = includeBounds(bounds, calculateRawElementBounds(bundle, element, cellSize));\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 calculateRawElementBounds(bundle: RuntimeBundle, element: RuntimeElementState, cellSize: number): Bounds {\n\tconst { rawX, rawY } = projectToRaw(element.pos[0] + element.size, element.pos[1] + element.size, cellSize);\n\tconst visualSize = calculateVisualSize(element.size, cellSize);\n\tconst [anchorX, anchorY] = assetAnchorForBounds(bundle, element);\n\treturn activityBounds(\n\t\t{\n\t\t\tminX: rawX - visualSize * anchorX,\n\t\t\tminY: rawY - visualSize * anchorY,\n\t\t\tmaxX: rawX + visualSize * (1 - anchorX),\n\t\t\tmaxY: rawY + visualSize * (1 - anchorY),\n\t\t},\n\t\telement,\n\t\trawX,\n\t\trawY,\n\t\tvisualSize,\n\t);\n}\n\nfunction calculateElementBounds(\n\telement: RuntimeElementState,\n\tlayout: ResolvedLayoutState,\n\tanchor: [number, number],\n): Bounds {\n\tconst screen = projectToScreen(\n\t\telement.pos[0] + element.size,\n\t\telement.pos[1] + element.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(element.size, layout.cellSize);\n\treturn activityBounds(\n\t\t{\n\t\t\tminX: screen.screenX - visualSize * anchor[0],\n\t\t\tminY: screen.screenY - visualSize * anchor[1],\n\t\t\tmaxX: screen.screenX + visualSize * (1 - anchor[0]),\n\t\t\tmaxY: screen.screenY + visualSize * (1 - anchor[1]),\n\t\t},\n\t\telement,\n\t\tscreen.screenX,\n\t\tscreen.screenY,\n\t\tvisualSize,\n\t);\n}\n\nfunction activityBounds(bounds: Bounds, element: RuntimeElementState, x: number, y: number, size: number): Bounds {\n\tif (!element.activity || element.activity.state === \"idle\") return bounds;\n\treturn includeBounds(bounds, {\n\t\tminX: x - size * 0.4,\n\t\tmaxX: x + size * 0.4,\n\t\tminY: y - size * 0.72,\n\t\tmaxY: y + size * 0.18,\n\t});\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 =\n\t\tendpointPadding +\n\t\tstrokePadding +\n\t\t(connector.style.glow ? (connector.style.glowWidth ?? 8) / 2 : 0) +\n\t\t(connector.message?.size ?? 0) / 2;\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 boundsToViewBox(bounds: Bounds): ViewBoxRect {\n\tconst centerX = (bounds.minX + bounds.maxX) / 2;\n\tconst centerY = (bounds.minY + bounds.maxY) / 2;\n\tconst width = Math.max(1, bounds.maxX - bounds.minX);\n\tconst height = Math.max(1, bounds.maxY - bounds.minY);\n\treturn {\n\t\tminX: roundDimension(centerX - width / 2),\n\t\tminY: roundDimension(centerY - height / 2),\n\t\twidth: roundDimension(width),\n\t\theight: roundDimension(height),\n\t};\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 (isTextAsset(element.asset)) return 1;\n\treturn 0;\n}\n\n/**\n * Re-sort the depth group's live child nodes to match the current\n * `(x + y)` + id perspective order. Only elements whose relative order\n * changed are moved so in-flight CSS animation state on unaffected\n * elements is preserved. Text elements live in the label group and are\n * never part of this reconciliation.\n */\nfunction reconcileDepthOrder(depthGroup: SVGGElement, elementMap: Map<string, ElementState>): void {\n\tconst current: RuntimeElementState[] = [];\n\tfor (const state of elementMap.values()) {\n\t\tif ((state.node.parentElement as SVGGElement | null) !== depthGroup) continue;\n\t\tcurrent.push(state.current);\n\t}\n\tif (current.length < 2) return;\n\n\tconst desiredOrder = sortElementsForPerspective(current);\n\tconst existingOrder = [...depthGroup.childNodes] as unknown as SVGElement[];\n\n\tlet orderMatches = existingOrder.length === desiredOrder.length;\n\tif (orderMatches) {\n\t\tfor (let index = 0; index < desiredOrder.length; index++) {\n\t\t\tconst expectedId = desiredOrder[index]?.id;\n\t\t\tif (existingOrder[index]?.getAttribute(\"data-id\") !== expectedId) {\n\t\t\t\torderMatches = false;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\tif (orderMatches) return;\n\n\tfor (const def of desiredOrder) {\n\t\tconst state = elementMap.get(def.id);\n\t\tif (state) depthGroup.appendChild(state.node);\n\t}\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\tupdateActivity(node, def.activity, layout.cellSize);\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\tconst expectedAnimation = node.style.animation;\n\t\tnode.addEventListener(\n\t\t\t\"animationend\",\n\t\t\t() => {\n\t\t\t\tif (node.style.animation === expectedAnimation) node.style.animation = \"\";\n\t\t\t},\n\t\t\t{ once: true },\n\t\t);\n\t\treturn { node, current: def, anchor: [0.5, 1], isHidden: false, entryKey: entryAnim, ambient: new Set() };\n\t}\n\n\treturn { node, current: def, anchor: [0.5, 1], 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(\n\tnode: SVGGElement,\n\tdef: RuntimeElementState,\n\tlayout: ResolvedLayoutState,\n\tresolveAsset?: AssetResolver,\n): void {\n\tconst replacement = isTextAsset(def.asset)\n\t\t? createTextAssetNode(def.text, def.asset, layout.cellSize)\n\t\t: isPrimitiveAsset(def.asset)\n\t\t\t? createPrimitiveAssetNode(def.asset, def.primitive, layout.cellSize)\n\t\t\t: createResolvedAssetNode(def, resolveAsset ?? createAssetResolver(), layout.cellSize);\n\tnode.setAttribute(\"data-asset\", def.asset);\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\n/**\n * Compare the generated-content payload (`text` or `primitive`) of two\n * element states for structural equality. Used to skip destructive\n * regeneration of text/primitive DOM content on frame updates where the\n * asset, id, and content payload are unchanged from the previous frame.\n */\nfunction hasEqualGeneratedContent(previous: RuntimeElementState | undefined, next: RuntimeElementState): boolean {\n\tif (!previous) return false;\n\tif (previous.asset !== next.asset) return false;\n\tif (!isTextAsset(next.asset) && !isPrimitiveAsset(next.asset)) return true;\n\tif (isTextAsset(next.asset)) return deepEqual(previous.text, next.text);\n\treturn deepEqual(previous.primitive, next.primitive);\n}\n\nfunction deepEqual(a: unknown, b: unknown): boolean {\n\tif (a === b) return true;\n\tif (typeof a !== typeof b) return false;\n\tif (a === null || b === null || typeof a !== \"object\" || typeof b !== \"object\") return false;\n\tif (Array.isArray(a) || Array.isArray(b)) {\n\t\tif (!Array.isArray(a) || !Array.isArray(b) || a.length !== b.length) return false;\n\t\treturn a.every((item, index) => deepEqual(item, b[index]));\n\t}\n\tconst aKeys = Object.keys(a as Record<string, unknown>);\n\tconst bKeys = Object.keys(b as Record<string, unknown>);\n\tif (aKeys.length !== bKeys.length) return false;\n\treturn aKeys.every((key) => deepEqual((a as Record<string, unknown>)[key], (b as Record<string, unknown>)[key]));\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\tnode.appendChild(shaft);\n\tconst state: ConnectorState = { 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\tconst expectedAnimation = node.style.animation;\n\t\tnode.addEventListener(\n\t\t\t\"animationend\",\n\t\t\t() => {\n\t\t\t\tif (node.style.animation === expectedAnimation) node.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\tconst previous = state.previous;\n\tconst routeChanged = !previous || !routesEqual(previous.route, def.route);\n\tconst styleChanged = !previous || !connectorStylesEqual(previous.style, def.style);\n\tconst shapeChanged =\n\t\t!previous ||\n\t\tshouldRenderOutline(previous) !== shouldRenderOutline(def) ||\n\t\tprevious.style.variant !== def.style.variant ||\n\t\tprevious.style.lane !== def.style.lane ||\n\t\tprevious.start !== def.start ||\n\t\tprevious.end !== def.end ||\n\t\tprevious.route.length !== def.route.length;\n\n\tapplyConnectorGroupAttrs(state.node, def, previous);\n\n\tconst geometryChanged = routeChanged || shapeChanged || styleChanged;\n\tconst d = geometryChanged\n\t\t? routePath(def.route, layout, def.style.cornerRadius ?? 0)\n\t\t: (state.shaft.getAttribute(\"d\") ?? \"\");\n\n\tif (shapeChanged) {\n\t\tif (state.outline) state.node.removeChild(state.outline);\n\t\tstate.outline = undefined;\n\t\tif (shouldRenderOutline(def)) {\n\t\t\tconst outline = document.createElementNS(NS, \"path\") as SVGPathElement;\n\t\t\toutline.classList.add(\"iso-connector-outline\");\n\t\t\tapplyConnectorPathAttrs(outline, def, d, {\n\t\t\t\tstroke: def.style.outline ?? def.style.stroke,\n\t\t\t\tstrokeWidth: def.style.strokeWidth + def.style.outlineWidth * 2,\n\t\t\t\tincludeDash: false,\n\t\t\t});\n\t\t\tstate.node.insertBefore(outline, state.shaft);\n\t\t\tstate.outline = outline;\n\t\t}\n\t} else if (state.outline && geometryChanged) {\n\t\tapplyConnectorPathAttrs(state.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}\n\n\tif (!state.shaft.parentNode) state.node.appendChild(state.shaft);\n\tstate.shaft.classList.add(\"iso-connector-shaft\");\n\tif (geometryChanged) {\n\t\tapplyConnectorPathAttrs(state.shaft, def, d, {\n\t\t\tstroke: def.style.stroke,\n\t\t\tstrokeWidth: def.style.strokeWidth,\n\t\t\tincludeDash: true,\n\t\t});\n\t}\n\n\tif (shapeChanged) {\n\t\tif (state.lane) state.node.removeChild(state.lane);\n\t\tstate.lane = undefined;\n\t\tif (def.style.variant === \"road\" && def.style.lane === \"center-dashed\") {\n\t\t\tconst lane = document.createElementNS(NS, \"path\") as SVGPathElement;\n\t\t\tlane.classList.add(\"iso-connector-lane\");\n\t\t\tapplyConnectorPathAttrs(lane, def, d, {\n\t\t\t\tstroke: \"#ffffff\",\n\t\t\t\tstrokeWidth: Math.max(1, def.style.strokeWidth * 0.12),\n\t\t\t\tincludeDash: false,\n\t\t\t});\n\t\t\tlane.setAttribute(\"stroke-dasharray\", \"8 8\");\n\t\t\tstate.node.appendChild(lane);\n\t\t\tstate.lane = lane;\n\t\t}\n\t} else if (state.lane && geometryChanged) {\n\t\tapplyConnectorPathAttrs(state.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\tstate.lane.setAttribute(\"stroke-dasharray\", \"8 8\");\n\t}\n\n\tif (geometryChanged) {\n\t\tif (state.startEndpoint) state.node.removeChild(state.startEndpoint);\n\t\tif (state.endEndpoint) state.node.removeChild(state.endEndpoint);\n\t\tstate.startEndpoint = appendEndpoint(state.node, def, \"start\", layout);\n\t\tstate.endEndpoint = appendEndpoint(state.node, def, \"end\", layout);\n\t}\n\n\tif (geometryChanged) updateTrackEffects(state.node, state.shaft, def, d);\n\tupdateMessages(\n\t\tstate.node,\n\t\tdef,\n\t\td,\n\t\t!previous || !deepEqual(previous.message, def.message) || previous.style.stroke !== def.style.stroke,\n\t);\n\tapplyConnectorAmbientClasses(state, def.ambient ?? []);\n\tstate.previous = def;\n}\n\nfunction clearChildren(node: SVGElement): void {\n\twhile (node.firstChild) node.removeChild(node.firstChild);\n}\n\nfunction routesEqual(a: [number, number][], b: [number, number][]): boolean {\n\tif (a === b) return true;\n\tif (a.length !== b.length) return false;\n\treturn a.every((point, index) => {\n\t\tconst other = b[index];\n\t\treturn other !== undefined && point[0] === other[0] && point[1] === other[1];\n\t});\n}\n\nfunction connectorStylesEqual(a: RuntimeConnectorState[\"style\"], b: RuntimeConnectorState[\"style\"]): boolean {\n\tif (a === b) return true;\n\treturn (\n\t\ta.variant === b.variant &&\n\t\ta.pattern === b.pattern &&\n\t\ta.stroke === b.stroke &&\n\t\ta.strokeWidth === b.strokeWidth &&\n\t\ta.opacity === b.opacity &&\n\t\ta.outline === b.outline &&\n\t\ta.outlineWidth === b.outlineWidth &&\n\t\ta.lane === b.lane &&\n\t\ta.cornerRadius === b.cornerRadius &&\n\t\ta.glow === b.glow &&\n\t\ta.glowWidth === b.glowWidth &&\n\t\t(a.dash ?? []).join(\",\") === (b.dash ?? []).join(\",\")\n\t);\n}\n\nfunction applyConnectorGroupAttrs(\n\tnode: SVGGElement,\n\tdef: RuntimeConnectorState,\n\tprevious?: RuntimeConnectorState,\n): void {\n\tconst nextClasses = [\n\t\t\"iso-connector\",\n\t\t`iso-connector-${def.id}`,\n\t\t`iso-connector-variant-${def.style.variant}`,\n\t\t`iso-connector-pattern-${def.style.pattern}`,\n\t\t`iso-connector-direction-${def.direction}`,\n\t\t`iso-layer-${def.layer}`,\n\t];\n\tif (!previous) {\n\t\tnode.classList.add(...nextClasses);\n\t} else {\n\t\tconst previousClasses = [\n\t\t\t\"iso-connector\",\n\t\t\t`iso-connector-${previous.id}`,\n\t\t\t`iso-connector-variant-${previous.style.variant}`,\n\t\t\t`iso-connector-pattern-${previous.style.pattern}`,\n\t\t\t`iso-connector-direction-${previous.direction}`,\n\t\t\t`iso-layer-${previous.layer}`,\n\t\t];\n\t\tfor (const name of previousClasses) {\n\t\t\tif (!nextClasses.includes(name)) node.classList.remove(name);\n\t\t}\n\t\tfor (const name of nextClasses) {\n\t\t\tif (!previousClasses.includes(name)) node.classList.add(name);\n\t\t}\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} else {\n\t\tpath.setAttribute(\"stroke-dasharray\", \"none\");\n\t}\n}\n\nfunction routePath(route: [number, number][], layout: ResolvedLayoutState, radius: number): string {\n\treturn roundedPath(\n\t\troute.map(([x, y]) => projectGridPoint(x, y, layout)),\n\t\tradius,\n\t);\n}\n\nfunction appendEndpoint(\n\tgroup: SVGGElement,\n\tdef: RuntimeConnectorState,\n\tkind: \"start\" | \"end\",\n\tlayout: ResolvedLayoutState,\n): SVGElement | undefined {\n\tconst endpoint = def[kind];\n\tif (endpoint === \"none\" || def.route.length < 2) return undefined;\n\n\tconst node = createEndpointNode(endpoint, def, kind, layout);\n\tnode.classList.add(`iso-connector-${kind}`);\n\tgroup.appendChild(node);\n\treturn 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\tstate.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",
|
|
14
14
|
"/** 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",
|
|
15
|
-
"import {\n\tanimateElement,\n\tapplySceneViewBox,\n\tgetConnectorState,\n\tgetCurrentElementBounds,\n\tgetElementState,\n\tgetGridAreaBounds,\n\tgetResolvedProjectionLayout,\n\tgetResolvedViewBox,\n\thideElementAfterExit,\n\tunhideElementOnReadd,\n\tupdateElementTransforms,\n\ttype ViewBoxRect,\n} from \"../rendering/rendering-engine.ts\";\nimport { ControllerError } from \"../types/errors.ts\";\nimport type {\n\tCameraGridArea,\n\tCameraZoomOptions,\n\tEntryAnimation,\n\tExitAnimation,\n\tRuntimeCameraTarget,\n\tRuntimeConnectorState,\n\tRuntimeElementState,\n} from \"../types/node.ts\";\nimport type { RuntimeBundle } from \"../types/runtime-bundle.ts\";\nimport { type EasingType, resolveEasing } from \"../utils/easing.ts\";\nimport { calculateVisualSize, projectToScreen } from \"../utils/projection.ts\";\nimport { AnimationEngine } from \"./animation-engine.ts\";\n\n// ── Event types ────────────────────────────────────────────────────────────\n\n/** Events emitted by `AnimationController.on()`. */\nexport interface ControllerEvents {\n\t/** Fired whenever resolved scroll/scene progress changes. */\n\t\"progress-change\": (progress: number) => void;\n\t/** Fired when the active scene index changes. */\n\t\"scene-change\": (index: number) => void;\n\t/** Fired after the camera viewBox or zoom target changes. */\n\t\"camera-change\": (state: CameraState) => void;\n\t/** Fired when scroll-driven progress tracking is paused. */\n\tpaused: () => void;\n\t/** Fired when scroll-driven progress tracking resumes. */\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};\ntype RequiredCameraFocus = {\n\ttarget: RuntimeCameraTarget;\n\tpadding?: number;\n\tduration?: number;\n\teasing?: \"linear\" | \"ease-in-out\" | \"ease-out\";\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\t/** Scroll axis used to derive progress. Defaults to `vertical`. */\n\tscrollDirection?: \"vertical\" | \"horizontal\";\n\t/** Extra scroll offsets, in pixels, applied when deriving progress from `container`. */\n\tscrollOffset?: {\n\t\ttop?: number;\n\t\tbottom?: number;\n\t\tleft?: number;\n\t\tright?: number;\n\t};\n\t/** Minimum resolved progress. Defaults to `0`. */\n\tminProgress?: number;\n\t/** Maximum resolved progress. Defaults to `1`. */\n\tmaxProgress?: number;\n\t/** Enable arrow-key scene navigation. Defaults to `false`. */\n\tkeyboardControls?: boolean;\n\t/** Enable touch swipe scene navigation. Defaults to `false`. */\n\ttouchControls?: boolean;\n\t/** Multiplier applied to wheel/touch scroll deltas. Defaults to `1.0`. */\n\tscrollSensitivity?: number;\n\t/** Scene navigation and camera transition duration in milliseconds. Defaults to `600`. */\n\ttransitionDuration?: number;\n\t/** Scene navigation and camera transition easing curve. Defaults to `ease-in-out`. */\n\ttransitionEasing?: \"linear\" | \"ease-in-out\" | \"ease-out\";\n}\n\nexport type { CameraGridArea, CameraZoomOptions };\n\n/** Current camera viewBox and zoom target, as reported by `AnimationController.getCameraState()`. */\nexport interface CameraState {\n\t/** Current SVG viewBox. */\n\tviewBox: ViewBoxRect;\n\t/** Focus target that produced the current viewBox, if any. */\n\ttarget?: RuntimeCameraTarget;\n\t/** Whether the camera differs from the compiled full scene view. */\n\tisZoomed: boolean;\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\tprivate _cameraAnim: ReturnType<typeof requestAnimationFrame> | null = null;\n\tprivate _cameraState: CameraState | null = null;\n\n\t// Scroll tracking state\n\tprivate _minScroll = 0;\n\tprivate _maxScroll = 0;\n\tprivate _lastTouchY = 0;\n\tprivate _lastTouchX = 0;\n\tprivate _isDragging = false;\n\n\t// Transition animation state\n\tprivate _transitionAnim: ReturnType<typeof requestAnimationFrame> | null = null;\n\tprivate _backward = false;\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\t\tthis._cameraState = {\n\t\t\tviewBox: getResolvedViewBox(bundle),\n\t\t\ttarget: { type: \"reset\" },\n\t\t\tisZoomed: false,\n\t\t};\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\t\tthis._cancelTransition();\n\t\tthis._setProgress(progress);\n\t}\n\n\tprivate _setProgress(progress: number): void {\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\tthis._cancelCameraAnimation();\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._cancelTransition();\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\tzoomToElement(id: string, options: CameraZoomOptions = {}): void {\n\t\tthis._assertNotDestroyed();\n\t\tconst svg = this._getSceneSvg();\n\t\tif (!this._bundle || !svg) {\n\t\t\tthrow new ControllerError(\"CAMERA_NOT_INITIALIZED\", \"zoomToElement() requires an initialized scene SVG\");\n\t\t}\n\t\tconst elementBounds = getCurrentElementBounds(svg, id);\n\t\tif (!elementBounds) {\n\t\t\tif (getElementState(svg, id)) {\n\t\t\t\tthrow new ControllerError(\"CAMERA_TARGET_NOT_VISIBLE\", `Camera target element \"${id}\" is currently removed`, {\n\t\t\t\t\telementId: id,\n\t\t\t\t});\n\t\t\t}\n\t\t\tthrow new ControllerError(\"CAMERA_TARGET_NOT_FOUND\", `Camera target element \"${id}\" was not found`, {\n\t\t\t\telementId: id,\n\t\t\t});\n\t\t}\n\t\tthis._applyCameraDestination(\n\t\t\texpandViewBox(elementBounds, this._resolveCameraPadding(options)),\n\t\t\t{ type: \"element\", id },\n\t\t\toptions,\n\t\t);\n\t}\n\n\tzoomToArea(area: CameraGridArea, options: CameraZoomOptions = {}): void {\n\t\tthis._assertNotDestroyed();\n\t\tif (!this._bundle || !this._getSceneSvg()) {\n\t\t\tthrow new ControllerError(\"CAMERA_NOT_INITIALIZED\", \"zoomToArea() requires an initialized scene SVG\");\n\t\t}\n\t\tthis._assertValidCameraArea(area);\n\t\tconst bounds = getGridAreaBounds(this._bundle, area);\n\t\tthis._applyCameraDestination(\n\t\t\texpandViewBox(bounds, this._resolveCameraPadding(options)),\n\t\t\t{\n\t\t\t\ttype: \"area\",\n\t\t\t\tat: [...area.at],\n\t\t\t\tsize: [...area.size],\n\t\t\t},\n\t\t\toptions,\n\t\t);\n\t}\n\n\tresetZoom(options: CameraZoomOptions = {}): void {\n\t\tthis._assertNotDestroyed();\n\t\tif (!this._bundle || !this._getSceneSvg()) {\n\t\t\tthrow new ControllerError(\"CAMERA_NOT_INITIALIZED\", \"resetZoom() requires an initialized scene SVG\");\n\t\t}\n\t\tthis._applyCameraDestination(getResolvedViewBox(this._bundle), { type: \"reset\" }, options);\n\t}\n\n\tgetCameraState(): CameraState {\n\t\tthis._assertNotDestroyed();\n\t\tif (!this._cameraState) {\n\t\t\tthrow new ControllerError(\"CAMERA_NOT_INITIALIZED\", \"Camera state is not initialized\");\n\t\t}\n\t\treturn copyCameraState(this._cameraState);\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\tthis._cancelCameraAnimation();\n\t\tthis._getSceneSvg()?.classList.add(\"iso-motion-stopped\");\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._cameraState = 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._backward = pending < this._engine.getProgress();\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\tactivity: update.activity,\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\tmessage: update.message,\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\tthis._applyCameraForProgress(this._progress);\n\t}\n\n\tprivate _applyCameraForProgress(progress: number): void {\n\t\tconst svg = this._getSceneSvg();\n\t\tif (!this._bundle || !svg) return;\n\t\tconst sceneStops = this.scenes;\n\t\tif (sceneStops.length === 0) return;\n\t\tconst { previous, next } = surroundingStops(sceneStops, progress);\n\t\tconst previousCamera = this._effectiveCameraAt(previous.index);\n\t\tconst nextCamera = this._effectiveCameraAt(next.index);\n\t\tconst previousViewBox = this._resolveCameraViewBox(previousCamera, { forInterpolation: true });\n\t\tconst nextViewBox = this._resolveCameraViewBox(nextCamera, { forInterpolation: true });\n\t\tconst range = next.scene.progress - previous.scene.progress;\n\t\tconst rawT = range <= 0 ? 0 : (progress - previous.scene.progress) / range;\n\t\tconst t = resolveCameraEasing(nextCamera.easing)(Math.max(0, Math.min(1, rawT)));\n\t\tconst viewBox = lerpViewBox(previousViewBox, nextViewBox, t);\n\t\tconst target = t < 1 ? previousCamera.target : nextCamera.target;\n\t\tthis._setCameraViewBox(svg, viewBox, target);\n\t}\n\n\tprivate _effectiveCameraAt(index: number): RequiredCameraFocus {\n\t\tfor (let i = index; i >= 0; i--) {\n\t\t\tconst camera = this.scenes[i]?.camera;\n\t\t\tif (camera) {\n\t\t\t\treturn {\n\t\t\t\t\ttarget: camera.target,\n\t\t\t\t\tpadding: camera.padding,\n\t\t\t\t\tduration: camera.duration,\n\t\t\t\t\teasing: camera.easing,\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t\treturn { target: { type: \"reset\" } };\n\t}\n\n\tprivate _resolveCameraViewBox(\n\t\tcamera: RequiredCameraFocus,\n\t\toptions: { forInterpolation?: boolean } = {},\n\t): ViewBoxRect {\n\t\tif (!this._bundle) throw new ControllerError(\"CAMERA_NOT_INITIALIZED\", \"Camera requires an initialized bundle\");\n\t\tif (camera.target.type === \"reset\") return getResolvedViewBox(this._bundle);\n\t\tif (camera.target.type === \"area\") {\n\t\t\treturn expandViewBox(\n\t\t\t\tgetGridAreaBounds(this._bundle, { at: camera.target.at, size: camera.target.size }),\n\t\t\t\tcamera.padding ?? 32,\n\t\t\t);\n\t\t}\n\t\tconst svg = this._getSceneSvg();\n\t\tif (!svg) throw new ControllerError(\"CAMERA_NOT_INITIALIZED\", \"Camera requires an initialized scene SVG\");\n\t\tconst bounds = options.forInterpolation\n\t\t\t? this._resolveElementBoundsForInterpolation(svg, camera.target.id)\n\t\t\t: getCurrentElementBounds(svg, camera.target.id);\n\t\tif (!bounds) {\n\t\t\tthrow new ControllerError(\n\t\t\t\t\"CAMERA_TARGET_NOT_FOUND\",\n\t\t\t\t`Camera target element \"${camera.target.id}\" was not found`,\n\t\t\t\t{\n\t\t\t\t\telementId: camera.target.id,\n\t\t\t\t},\n\t\t\t);\n\t\t}\n\t\treturn expandViewBox(bounds, camera.padding ?? 32);\n\t}\n\n\t/**\n\t * Resolve element bounds for scroll/setProgress camera interpolation.\n\t *\n\t * Unlike `getCurrentElementBounds()`, this tolerates an element whose\n\t * resolved presence is transiently \"removed\" because progress has not yet\n\t * reached the stop that introduces it (the engine still carries valid\n\t * authored geometry for it via nearest-geometry fallback). It falls back to\n\t * that geometry instead of reporting the target as missing so a scene that\n\t * both adds an element and focuses the camera on it in the same stop can be\n\t * interpolated into smoothly. A genuinely unknown element id still resolves\n\t * to `undefined` so callers can throw `CAMERA_TARGET_NOT_FOUND`.\n\t */\n\tprivate _resolveElementBoundsForInterpolation(svg: SVGSVGElement, id: string): ViewBoxRect | undefined {\n\t\tconst direct = getCurrentElementBounds(svg, id);\n\t\tif (direct) return direct;\n\n\t\tconst state = getElementState(svg, id);\n\t\tif (!state || !this._bundle) return undefined;\n\n\t\tconst layout = getResolvedProjectionLayout(this._bundle);\n\t\tconst element = state.current;\n\t\tconst screen = projectToScreen(\n\t\t\telement.pos[0] + element.size,\n\t\t\telement.pos[1] + element.size,\n\t\t\tlayout.cellSize,\n\t\t\tlayout.selectedBounds.minX,\n\t\t\tlayout.selectedBounds.minY,\n\t\t\tlayout.padding.x,\n\t\t\tlayout.padding.y,\n\t\t);\n\t\tconst visualSize = calculateVisualSize(element.size, layout.cellSize);\n\t\tconst [anchorX, anchorY] = state.anchor;\n\t\treturn {\n\t\t\tminX: roundCameraNumber(screen.screenX - visualSize * anchorX),\n\t\t\tminY: roundCameraNumber(screen.screenY - visualSize * anchorY),\n\t\t\twidth: roundCameraNumber(Math.max(1, visualSize)),\n\t\t\theight: roundCameraNumber(Math.max(1, visualSize)),\n\t\t};\n\t}\n\n\tprivate _applyCameraDestination(viewBox: ViewBoxRect, target: RuntimeCameraTarget, options: CameraZoomOptions): void {\n\t\tconst svg = this._getSceneSvg();\n\t\tif (!svg) throw new ControllerError(\"CAMERA_NOT_INITIALIZED\", \"Camera requires an initialized scene SVG\");\n\t\tthis._cancelCameraAnimation();\n\t\tconst duration = this._resolveCameraDuration(options);\n\t\tif (duration === 0) {\n\t\t\tthis._setCameraViewBox(svg, viewBox, target);\n\t\t\treturn;\n\t\t}\n\t\tconst from = currentSvgViewBox(svg) ?? this._cameraState?.viewBox ?? viewBox;\n\t\tconst easing = resolveCameraEasing(options.easing ?? this._config.transitionEasing);\n\t\tconst start = performance.now();\n\t\tconst step = (now: number) => {\n\t\t\tconst t = Math.min((now - start) / duration, 1);\n\t\t\tthis._setCameraViewBox(svg, lerpViewBox(from, viewBox, easing(t)), target);\n\t\t\tif (t < 1) {\n\t\t\t\tthis._cameraAnim = requestAnimationFrame(step);\n\t\t\t} else {\n\t\t\t\tthis._cameraAnim = null;\n\t\t\t}\n\t\t};\n\t\tthis._cameraAnim = requestAnimationFrame(step);\n\t}\n\n\tprivate _setCameraViewBox(svg: SVGSVGElement, viewBox: ViewBoxRect, target?: RuntimeCameraTarget): void {\n\t\tapplySceneViewBox(svg, viewBox);\n\t\tconst full = this._bundle ? getResolvedViewBox(this._bundle) : viewBox;\n\t\tthis._cameraState = {\n\t\t\tviewBox,\n\t\t\ttarget,\n\t\t\tisZoomed: !sameViewBox(viewBox, full),\n\t\t};\n\t\tthis._emit(\"camera-change\", this.getCameraState());\n\t}\n\n\tprivate _getSceneSvg(): SVGSVGElement | null {\n\t\treturn (this._sceneElement ?? this._container?.querySelector(\"svg\") ?? null) as SVGSVGElement | null;\n\t}\n\n\tprivate _resolveCameraPadding(options: CameraZoomOptions): number {\n\t\tconst padding = options.padding ?? 32;\n\t\tif (!Number.isFinite(padding) || padding < 0 || padding > 2048) {\n\t\t\tthrow new ControllerError(\"INVALID_CAMERA_OPTIONS\", \"Camera padding must be between 0 and 2048\");\n\t\t}\n\t\treturn padding;\n\t}\n\n\tprivate _resolveCameraDuration(options: CameraZoomOptions): number {\n\t\tconst duration = options.duration ?? this._config.transitionDuration;\n\t\tif (!Number.isInteger(duration) || duration < 0 || duration > 10000) {\n\t\t\tthrow new ControllerError(\"INVALID_CAMERA_OPTIONS\", \"Camera duration must be an integer from 0 to 10000\");\n\t\t}\n\t\treturn duration;\n\t}\n\n\tprivate _assertValidCameraArea(area: CameraGridArea): void {\n\t\tif (\n\t\t\t!Array.isArray(area.at) ||\n\t\t\tarea.at.length !== 2 ||\n\t\t\t!area.at.every((value) => Number.isFinite(value) && value >= 0) ||\n\t\t\t!Array.isArray(area.size) ||\n\t\t\tarea.size.length !== 2 ||\n\t\t\t!area.size.every((value) => Number.isFinite(value) && value > 0)\n\t\t) {\n\t\t\tthrow new ControllerError(\"INVALID_CAMERA_OPTIONS\", \"Camera area must use non-negative at and positive size\");\n\t\t}\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, this._backward)) {\n\t\t\t\tthis._applyEntryAnimation(elDef, state);\n\t\t\t}\n\n\t\t\tif (isReverseExitTransition(transition, this._backward)) {\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, this._backward)) {\n\t\t\t\tthis._applyExitAnimation(elDef, state);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (isReverseEntryTransition(transition, this._backward)) {\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, this._backward)) {\n\t\t\t\tthis._applyConnectorEntryAnimation(connectorDef, state);\n\t\t\t}\n\n\t\t\tif (isReverseExitTransition(transition, this._backward)) {\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, this._backward)) {\n\t\t\t\tthis._applyConnectorExitAnimation(connectorDef, state);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (isReverseEntryTransition(transition, this._backward)) {\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\t\tconst expectedAnimation = state.node.style.animation;\n\n\t\tstate.node.addEventListener(\n\t\t\t\"animationend\",\n\t\t\t() => {\n\t\t\t\tif (state.node.style.animation === expectedAnimation) {\n\t\t\t\t\tstate.node.style.animation = \"\";\n\t\t\t\t}\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\t\tconst expectedAnimation = state.node.style.animation;\n\n\t\tstate.node.addEventListener(\n\t\t\t\"animationend\",\n\t\t\t() => {\n\t\t\t\tif (state.node.style.animation === expectedAnimation) {\n\t\t\t\t\thideElementAfterExit(state.node);\n\t\t\t\t}\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\t\tconst expectedAnimation = state.node.style.animation;\n\n\t\tstate.node.addEventListener(\n\t\t\t\"animationend\",\n\t\t\t() => {\n\t\t\t\tif (state.node.style.animation === expectedAnimation) {\n\t\t\t\t\tstate.node.style.animation = \"\";\n\t\t\t\t}\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\t\tconst expectedAnimation = state.node.style.animation;\n\n\t\tstate.node.addEventListener(\n\t\t\t\"animationend\",\n\t\t\t() => {\n\t\t\t\tif (state.node.style.animation === expectedAnimation) {\n\t\t\t\t\thideElementAfterExit(state.node);\n\t\t\t\t}\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\tconst stop = this.scenes[index];\n\t\tconst from = this._progress;\n\t\tconst to = stop.progress;\n\n\t\tif (index === this._sceneIndex && from === to) return;\n\n\t\tthis._sceneIndex = index;\n\t\tthis._emit(\"scene-change\", index);\n\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._cancelCameraAnimation();\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\tprivate _cancelCameraAnimation(): void {\n\t\tif (this._cameraAnim !== null) {\n\t\t\tcancelAnimationFrame(this._cameraAnim);\n\t\t\tthis._cameraAnim = null;\n\t\t}\n\t}\n\n\t// ── Scroll binding ─────────────────────────────────────────────────────\n\n\tprivate _bindScroll(): void {\n\t\tif (this._config.keyboardControls) {\n\t\t\tdocument.addEventListener(\"keydown\", this._onKeyDown);\n\t\t}\n\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.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\tdocument.removeEventListener(\"keydown\", this._onKeyDown);\n\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\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 sensitivity = this._config.scrollSensitivity ?? 1;\n\t\tconst scaledProgress = rawProgress * sensitivity;\n\t\tconst clampedProgress = Math.max(\n\t\t\tthis._config.minProgress ?? 0,\n\t\t\tMath.min(this._config.maxProgress ?? 1, scaledProgress),\n\t\t);\n\n\t\tif (clampedProgress !== this._progress) {\n\t\t\tthis.setProgress(clampedProgress);\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._lastTouchX = touch.clientX;\n\t\t} else {\n\t\t\tthis._lastTouchY = 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 isHorizontal = this._config.scrollDirection === \"horizontal\";\n\t\tconst delta = isHorizontal ? this._lastTouchX - touch.clientX : this._lastTouchY - touch.clientY;\n\t\tif (isHorizontal) {\n\t\t\tthis._lastTouchX = touch.clientX;\n\t\t} else {\n\t\t\tthis._lastTouchY = touch.clientY;\n\t\t}\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 svg = this._getSceneSvg();\n\t\tif (!svg) return;\n\n\t\tif (pause) svg.classList.add(\"iso-motion-paused\");\n\t\telse svg.classList.remove(\"iso-motion-paused\");\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, backward: boolean): boolean {\n\treturn (\n\t\t!backward &&\n\t\t(transition.from === \"removed\" || transition.from === \"exiting\") &&\n\t\t(transition.to === \"entering\" || transition.to === \"present\")\n\t);\n}\n\nfunction isForwardExitTransition(transition: LifecycleTransition, backward: boolean): boolean {\n\treturn !backward && (transition.to === \"exiting\" || (transition.to === \"removed\" && transition.from !== \"exiting\"));\n}\n\nfunction isReverseExitTransition(transition: LifecycleTransition, backward: boolean): boolean {\n\treturn (\n\t\tbackward &&\n\t\t(transition.to === \"removed\" || transition.to === \"exiting\") &&\n\t\t(transition.from === \"entering\" || transition.from === \"present\")\n\t);\n}\n\nfunction isReverseEntryTransition(transition: LifecycleTransition, backward: boolean): boolean {\n\treturn (\n\t\tbackward &&\n\t\t(transition.from === \"exiting\" || transition.from === \"removed\") &&\n\t\t(transition.to === \"present\" || transition.to === \"entering\")\n\t);\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\nfunction surroundingStops(\n\tscenes: RuntimeBundle[\"scenes\"],\n\tprogress: number,\n): {\n\tprevious: { scene: RuntimeBundle[\"scenes\"][number]; index: number };\n\tnext: { scene: RuntimeBundle[\"scenes\"][number]; index: number };\n} {\n\tlet previousIndex = 0;\n\tlet nextIndex = scenes.length - 1;\n\tfor (let i = 0; i < scenes.length; i++) {\n\t\tif (scenes[i].progress <= progress) previousIndex = i;\n\t\tif (scenes[i].progress >= progress) {\n\t\t\tnextIndex = i;\n\t\t\tbreak;\n\t\t}\n\t}\n\treturn {\n\t\tprevious: { scene: scenes[previousIndex], index: previousIndex },\n\t\tnext: { scene: scenes[nextIndex], index: nextIndex },\n\t};\n}\n\nfunction expandViewBox(viewBox: ViewBoxRect, padding: number): ViewBoxRect {\n\treturn {\n\t\tminX: roundCameraNumber(viewBox.minX - padding),\n\t\tminY: roundCameraNumber(viewBox.minY - padding),\n\t\twidth: roundCameraNumber(Math.max(1, viewBox.width + padding * 2)),\n\t\theight: roundCameraNumber(Math.max(1, viewBox.height + padding * 2)),\n\t};\n}\n\nfunction lerpViewBox(from: ViewBoxRect, to: ViewBoxRect, t: number): ViewBoxRect {\n\treturn {\n\t\tminX: roundCameraNumber(from.minX + (to.minX - from.minX) * t),\n\t\tminY: roundCameraNumber(from.minY + (to.minY - from.minY) * t),\n\t\twidth: roundCameraNumber(from.width + (to.width - from.width) * t),\n\t\theight: roundCameraNumber(from.height + (to.height - from.height) * t),\n\t};\n}\n\nfunction sameViewBox(a: ViewBoxRect, b: ViewBoxRect): boolean {\n\treturn a.minX === b.minX && a.minY === b.minY && a.width === b.width && a.height === b.height;\n}\n\nfunction currentSvgViewBox(svg: SVGSVGElement): ViewBoxRect | undefined {\n\tconst raw = svg.getAttribute(\"viewBox\");\n\tif (!raw) return undefined;\n\tconst parts = raw.trim().split(/\\s+/).map(Number);\n\tif (parts.length !== 4 || parts.some((part) => !Number.isFinite(part))) return undefined;\n\treturn { minX: parts[0], minY: parts[1], width: parts[2], height: parts[3] };\n}\n\nfunction resolveCameraEasing(easing: \"linear\" | \"ease-in-out\" | \"ease-out\" | undefined): (t: number) => number {\n\treturn resolveEasing(easing === \"ease-in-out\" ? \"easeInOutCubic\" : easing === \"ease-out\" ? \"easeOutCubic\" : \"linear\");\n}\n\nfunction copyCameraState(state: CameraState): CameraState {\n\treturn {\n\t\tviewBox: { ...state.viewBox },\n\t\ttarget:\n\t\t\tstate.target?.type === \"area\"\n\t\t\t\t? { type: \"area\", at: [...state.target.at], size: [...state.target.size] }\n\t\t\t\t: state.target\n\t\t\t\t\t? { ...state.target }\n\t\t\t\t\t: undefined,\n\t\tisZoomed: state.isZoomed,\n\t};\n}\n\nfunction roundCameraNumber(value: number): number {\n\treturn Math.round(value * 1000) / 1000;\n}\n",
|
|
15
|
+
"import {\n\tanimateElement,\n\tapplySceneViewBox,\n\tgetConnectorState,\n\tgetCurrentElementBounds,\n\tgetElementState,\n\tgetGridAreaBounds,\n\tgetResolvedProjectionLayout,\n\tgetResolvedViewBox,\n\thideElementAfterExit,\n\tunhideElementOnReadd,\n\tupdateElementTransforms,\n\ttype ViewBoxRect,\n} from \"../rendering/rendering-engine.ts\";\nimport { ControllerError } from \"../types/errors.ts\";\nimport type {\n\tCameraGridArea,\n\tCameraZoomOptions,\n\tEntryAnimation,\n\tExitAnimation,\n\tRuntimeCameraTarget,\n\tRuntimeConnectorState,\n\tRuntimeElementState,\n} from \"../types/node.ts\";\nimport type { RuntimeBundle } from \"../types/runtime-bundle.ts\";\nimport { type EasingType, resolveEasing } from \"../utils/easing.ts\";\nimport { calculateVisualSize, projectToScreen } from \"../utils/projection.ts\";\nimport { AnimationEngine } from \"./animation-engine.ts\";\n\n// ── Event types ────────────────────────────────────────────────────────────\n\n/** Events emitted by `AnimationController.on()`. */\nexport interface ControllerEvents {\n\t/** Fired whenever resolved scroll/scene progress changes. */\n\t\"progress-change\": (progress: number) => void;\n\t/** Fired when the active scene index changes. */\n\t\"scene-change\": (index: number) => void;\n\t/** Fired after the camera viewBox or zoom target changes. */\n\t\"camera-change\": (state: CameraState) => void;\n\t/** Fired when scroll-driven progress tracking is paused. */\n\tpaused: () => void;\n\t/** Fired when scroll-driven progress tracking resumes. */\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};\ntype RequiredCameraFocus = {\n\ttarget: RuntimeCameraTarget;\n\tpadding?: number;\n\tduration?: number;\n\teasing?: \"linear\" | \"ease-in-out\" | \"ease-out\";\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\t/** Scroll axis used to derive progress. Defaults to `vertical`. */\n\tscrollDirection?: \"vertical\" | \"horizontal\";\n\t/** Extra scroll offsets, in pixels, applied when deriving progress from `container`. */\n\tscrollOffset?: {\n\t\ttop?: number;\n\t\tbottom?: number;\n\t\tleft?: number;\n\t\tright?: number;\n\t};\n\t/** Minimum resolved progress. Defaults to `0`. */\n\tminProgress?: number;\n\t/** Maximum resolved progress. Defaults to `1`. */\n\tmaxProgress?: number;\n\t/** Enable arrow-key scene navigation. Defaults to `false`. */\n\tkeyboardControls?: boolean;\n\t/** Enable touch swipe scene navigation. Defaults to `false`. */\n\ttouchControls?: boolean;\n\t/** Multiplier applied to wheel/touch scroll deltas. Defaults to `1.0`. */\n\tscrollSensitivity?: number;\n\t/** Scene navigation and camera transition duration in milliseconds. Defaults to `600`. */\n\ttransitionDuration?: number;\n\t/** Scene navigation and camera transition easing curve. Defaults to `ease-in-out`. */\n\ttransitionEasing?: \"linear\" | \"ease-in-out\" | \"ease-out\";\n}\n\nexport type { CameraGridArea, CameraZoomOptions };\n\n/** Current camera viewBox and zoom target, as reported by `AnimationController.getCameraState()`. */\nexport interface CameraState {\n\t/** Current SVG viewBox. */\n\tviewBox: ViewBoxRect;\n\t/** Focus target that produced the current viewBox, if any. */\n\ttarget?: RuntimeCameraTarget;\n\t/** Whether the camera differs from the compiled full scene view. */\n\tisZoomed: boolean;\n}\n\ntype ResolvedControllerConfig = Required<Omit<ControllerConfig, \"container\" | \"sceneElement\">> & {\n\tcontainer?: HTMLElement;\n\tsceneElement?: SVGSVGElement;\n};\n\n/** Tolerance when matching a progress value to a compiled scene stop. */\nconst SCENE_PROGRESS_EPSILON = 1e-9;\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\tprivate _cameraAnim: ReturnType<typeof requestAnimationFrame> | null = null;\n\tprivate _cameraState: CameraState | null = null;\n\n\t// Scroll tracking state\n\tprivate _minScroll = 0;\n\tprivate _maxScroll = 0;\n\tprivate _lastTouchY = 0;\n\tprivate _lastTouchX = 0;\n\tprivate _isDragging = false;\n\n\t// Transition animation state\n\tprivate _transitionAnim: ReturnType<typeof requestAnimationFrame> | null = null;\n\tprivate _backward = false;\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\t\tthis._cameraState = {\n\t\t\tviewBox: getResolvedViewBox(bundle),\n\t\t\ttarget: { type: \"reset\" },\n\t\t\tisZoomed: false,\n\t\t};\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\t * The current scene index follows the seek: it becomes the last scene stop\n\t * at or before the new progress, so `nextScene()`/`prevScene()` continue\n\t * from where scroll or a slider left the timeline.\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\t\tthis._cancelTransition();\n\t\tthis._setProgress(progress);\n\t\tthis._syncSceneIndex(this._progress);\n\t}\n\n\tprivate _syncSceneIndex(progress: number): void {\n\t\tconst scenes = this.scenes;\n\t\tlet index = 0;\n\t\tfor (let i = 0; i < scenes.length; i++) {\n\t\t\tif (scenes[i].progress <= progress + SCENE_PROGRESS_EPSILON) index = i;\n\t\t}\n\t\tif (index === this._sceneIndex) return;\n\t\tthis._sceneIndex = index;\n\t\tthis._emit(\"scene-change\", index);\n\t}\n\n\tprivate _setProgress(progress: number): void {\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\tthis._cancelCameraAnimation();\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._cancelTransition();\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\tzoomToElement(id: string, options: CameraZoomOptions = {}): void {\n\t\tthis._assertNotDestroyed();\n\t\tconst svg = this._getSceneSvg();\n\t\tif (!this._bundle || !svg) {\n\t\t\tthrow new ControllerError(\"CAMERA_NOT_INITIALIZED\", \"zoomToElement() requires an initialized scene SVG\");\n\t\t}\n\t\tconst elementBounds = getCurrentElementBounds(svg, id);\n\t\tif (!elementBounds) {\n\t\t\tif (getElementState(svg, id)) {\n\t\t\t\tthrow new ControllerError(\"CAMERA_TARGET_NOT_VISIBLE\", `Camera target element \"${id}\" is currently removed`, {\n\t\t\t\t\telementId: id,\n\t\t\t\t});\n\t\t\t}\n\t\t\tthrow new ControllerError(\"CAMERA_TARGET_NOT_FOUND\", `Camera target element \"${id}\" was not found`, {\n\t\t\t\telementId: id,\n\t\t\t});\n\t\t}\n\t\tthis._applyCameraDestination(\n\t\t\texpandViewBox(elementBounds, this._resolveCameraPadding(options)),\n\t\t\t{ type: \"element\", id },\n\t\t\toptions,\n\t\t);\n\t}\n\n\tzoomToArea(area: CameraGridArea, options: CameraZoomOptions = {}): void {\n\t\tthis._assertNotDestroyed();\n\t\tif (!this._bundle || !this._getSceneSvg()) {\n\t\t\tthrow new ControllerError(\"CAMERA_NOT_INITIALIZED\", \"zoomToArea() requires an initialized scene SVG\");\n\t\t}\n\t\tthis._assertValidCameraArea(area);\n\t\tconst bounds = getGridAreaBounds(this._bundle, area);\n\t\tthis._applyCameraDestination(\n\t\t\texpandViewBox(bounds, this._resolveCameraPadding(options)),\n\t\t\t{\n\t\t\t\ttype: \"area\",\n\t\t\t\tat: [...area.at],\n\t\t\t\tsize: [...area.size],\n\t\t\t},\n\t\t\toptions,\n\t\t);\n\t}\n\n\tresetZoom(options: CameraZoomOptions = {}): void {\n\t\tthis._assertNotDestroyed();\n\t\tif (!this._bundle || !this._getSceneSvg()) {\n\t\t\tthrow new ControllerError(\"CAMERA_NOT_INITIALIZED\", \"resetZoom() requires an initialized scene SVG\");\n\t\t}\n\t\tthis._applyCameraDestination(getResolvedViewBox(this._bundle), { type: \"reset\" }, options);\n\t}\n\n\tgetCameraState(): CameraState {\n\t\tthis._assertNotDestroyed();\n\t\tif (!this._cameraState) {\n\t\t\tthrow new ControllerError(\"CAMERA_NOT_INITIALIZED\", \"Camera state is not initialized\");\n\t\t}\n\t\treturn copyCameraState(this._cameraState);\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\tthis._cancelCameraAnimation();\n\t\tthis._getSceneSvg()?.classList.add(\"iso-motion-stopped\");\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._cameraState = 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._backward = pending < this._engine.getProgress();\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\tactivity: update.activity,\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\tmessage: update.message,\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\tthis._applyCameraForProgress(this._progress);\n\t}\n\n\tprivate _applyCameraForProgress(progress: number): void {\n\t\tconst svg = this._getSceneSvg();\n\t\tif (!this._bundle || !svg) return;\n\t\tconst sceneStops = this.scenes;\n\t\tif (sceneStops.length === 0) return;\n\t\tconst { previous, next } = surroundingStops(sceneStops, progress);\n\t\tconst previousCamera = this._effectiveCameraAt(previous.index);\n\t\tconst nextCamera = this._effectiveCameraAt(next.index);\n\t\tconst previousViewBox = this._resolveCameraViewBox(previousCamera, { forInterpolation: true });\n\t\tconst nextViewBox = this._resolveCameraViewBox(nextCamera, { forInterpolation: true });\n\t\tconst range = next.scene.progress - previous.scene.progress;\n\t\tconst rawT = range <= 0 ? 0 : (progress - previous.scene.progress) / range;\n\t\tconst t = resolveCameraEasing(nextCamera.easing)(Math.max(0, Math.min(1, rawT)));\n\t\tconst viewBox = lerpViewBox(previousViewBox, nextViewBox, t);\n\t\tconst target = t < 1 ? previousCamera.target : nextCamera.target;\n\t\tthis._setCameraViewBox(svg, viewBox, target);\n\t}\n\n\tprivate _effectiveCameraAt(index: number): RequiredCameraFocus {\n\t\tfor (let i = index; i >= 0; i--) {\n\t\t\tconst camera = this.scenes[i]?.camera;\n\t\t\tif (camera) {\n\t\t\t\treturn {\n\t\t\t\t\ttarget: camera.target,\n\t\t\t\t\tpadding: camera.padding,\n\t\t\t\t\tduration: camera.duration,\n\t\t\t\t\teasing: camera.easing,\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t\treturn { target: { type: \"reset\" } };\n\t}\n\n\tprivate _resolveCameraViewBox(\n\t\tcamera: RequiredCameraFocus,\n\t\toptions: { forInterpolation?: boolean } = {},\n\t): ViewBoxRect {\n\t\tif (!this._bundle) throw new ControllerError(\"CAMERA_NOT_INITIALIZED\", \"Camera requires an initialized bundle\");\n\t\tif (camera.target.type === \"reset\") return getResolvedViewBox(this._bundle);\n\t\tif (camera.target.type === \"area\") {\n\t\t\treturn expandViewBox(\n\t\t\t\tgetGridAreaBounds(this._bundle, { at: camera.target.at, size: camera.target.size }),\n\t\t\t\tcamera.padding ?? 32,\n\t\t\t);\n\t\t}\n\t\tconst svg = this._getSceneSvg();\n\t\tif (!svg) throw new ControllerError(\"CAMERA_NOT_INITIALIZED\", \"Camera requires an initialized scene SVG\");\n\t\tconst bounds = options.forInterpolation\n\t\t\t? this._resolveElementBoundsForInterpolation(svg, camera.target.id)\n\t\t\t: getCurrentElementBounds(svg, camera.target.id);\n\t\tif (!bounds) {\n\t\t\tthrow new ControllerError(\n\t\t\t\t\"CAMERA_TARGET_NOT_FOUND\",\n\t\t\t\t`Camera target element \"${camera.target.id}\" was not found`,\n\t\t\t\t{\n\t\t\t\t\telementId: camera.target.id,\n\t\t\t\t},\n\t\t\t);\n\t\t}\n\t\treturn expandViewBox(bounds, camera.padding ?? 32);\n\t}\n\n\t/**\n\t * Resolve element bounds for scroll/setProgress camera interpolation.\n\t *\n\t * Unlike `getCurrentElementBounds()`, this tolerates an element whose\n\t * resolved presence is transiently \"removed\" because progress has not yet\n\t * reached the stop that introduces it (the engine still carries valid\n\t * authored geometry for it via nearest-geometry fallback). It falls back to\n\t * that geometry instead of reporting the target as missing so a scene that\n\t * both adds an element and focuses the camera on it in the same stop can be\n\t * interpolated into smoothly. A genuinely unknown element id still resolves\n\t * to `undefined` so callers can throw `CAMERA_TARGET_NOT_FOUND`.\n\t */\n\tprivate _resolveElementBoundsForInterpolation(svg: SVGSVGElement, id: string): ViewBoxRect | undefined {\n\t\tconst direct = getCurrentElementBounds(svg, id);\n\t\tif (direct) return direct;\n\n\t\tconst state = getElementState(svg, id);\n\t\tif (!state || !this._bundle) return undefined;\n\n\t\tconst layout = getResolvedProjectionLayout(this._bundle);\n\t\tconst element = state.current;\n\t\tconst screen = projectToScreen(\n\t\t\telement.pos[0] + element.size,\n\t\t\telement.pos[1] + element.size,\n\t\t\tlayout.cellSize,\n\t\t\tlayout.selectedBounds.minX,\n\t\t\tlayout.selectedBounds.minY,\n\t\t\tlayout.padding.x,\n\t\t\tlayout.padding.y,\n\t\t);\n\t\tconst visualSize = calculateVisualSize(element.size, layout.cellSize);\n\t\tconst [anchorX, anchorY] = state.anchor;\n\t\treturn {\n\t\t\tminX: roundCameraNumber(screen.screenX - visualSize * anchorX),\n\t\t\tminY: roundCameraNumber(screen.screenY - visualSize * anchorY),\n\t\t\twidth: roundCameraNumber(Math.max(1, visualSize)),\n\t\t\theight: roundCameraNumber(Math.max(1, visualSize)),\n\t\t};\n\t}\n\n\tprivate _applyCameraDestination(viewBox: ViewBoxRect, target: RuntimeCameraTarget, options: CameraZoomOptions): void {\n\t\tconst svg = this._getSceneSvg();\n\t\tif (!svg) throw new ControllerError(\"CAMERA_NOT_INITIALIZED\", \"Camera requires an initialized scene SVG\");\n\t\tthis._cancelCameraAnimation();\n\t\tconst duration = this._resolveCameraDuration(options);\n\t\tif (duration === 0) {\n\t\t\tthis._setCameraViewBox(svg, viewBox, target);\n\t\t\treturn;\n\t\t}\n\t\tconst from = currentSvgViewBox(svg) ?? this._cameraState?.viewBox ?? viewBox;\n\t\tconst easing = resolveCameraEasing(options.easing ?? this._config.transitionEasing);\n\t\tconst start = performance.now();\n\t\tconst step = (now: number) => {\n\t\t\tconst t = Math.min((now - start) / duration, 1);\n\t\t\tthis._setCameraViewBox(svg, lerpViewBox(from, viewBox, easing(t)), target);\n\t\t\tif (t < 1) {\n\t\t\t\tthis._cameraAnim = requestAnimationFrame(step);\n\t\t\t} else {\n\t\t\t\tthis._cameraAnim = null;\n\t\t\t}\n\t\t};\n\t\tthis._cameraAnim = requestAnimationFrame(step);\n\t}\n\n\tprivate _setCameraViewBox(svg: SVGSVGElement, viewBox: ViewBoxRect, target?: RuntimeCameraTarget): void {\n\t\tapplySceneViewBox(svg, viewBox);\n\t\tconst full = this._bundle ? getResolvedViewBox(this._bundle) : viewBox;\n\t\tthis._cameraState = {\n\t\t\tviewBox,\n\t\t\ttarget,\n\t\t\tisZoomed: !sameViewBox(viewBox, full),\n\t\t};\n\t\tthis._emit(\"camera-change\", this.getCameraState());\n\t}\n\n\tprivate _getSceneSvg(): SVGSVGElement | null {\n\t\treturn (this._sceneElement ?? this._container?.querySelector(\"svg\") ?? null) as SVGSVGElement | null;\n\t}\n\n\tprivate _resolveCameraPadding(options: CameraZoomOptions): number {\n\t\tconst padding = options.padding ?? 32;\n\t\tif (!Number.isFinite(padding) || padding < 0 || padding > 2048) {\n\t\t\tthrow new ControllerError(\"INVALID_CAMERA_OPTIONS\", \"Camera padding must be between 0 and 2048\");\n\t\t}\n\t\treturn padding;\n\t}\n\n\tprivate _resolveCameraDuration(options: CameraZoomOptions): number {\n\t\tconst duration = options.duration ?? this._config.transitionDuration;\n\t\tif (!Number.isInteger(duration) || duration < 0 || duration > 10000) {\n\t\t\tthrow new ControllerError(\"INVALID_CAMERA_OPTIONS\", \"Camera duration must be an integer from 0 to 10000\");\n\t\t}\n\t\treturn duration;\n\t}\n\n\tprivate _assertValidCameraArea(area: CameraGridArea): void {\n\t\tif (\n\t\t\t!Array.isArray(area.at) ||\n\t\t\tarea.at.length !== 2 ||\n\t\t\t!area.at.every((value) => Number.isFinite(value) && value >= 0) ||\n\t\t\t!Array.isArray(area.size) ||\n\t\t\tarea.size.length !== 2 ||\n\t\t\t!area.size.every((value) => Number.isFinite(value) && value > 0)\n\t\t) {\n\t\t\tthrow new ControllerError(\"INVALID_CAMERA_OPTIONS\", \"Camera area must use non-negative at and positive size\");\n\t\t}\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, this._backward)) {\n\t\t\t\tthis._applyEntryAnimation(elDef, state);\n\t\t\t}\n\n\t\t\tif (isReverseExitTransition(transition, this._backward)) {\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, this._backward)) {\n\t\t\t\tthis._applyExitAnimation(elDef, state);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (isReverseEntryTransition(transition, this._backward)) {\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, this._backward)) {\n\t\t\t\tthis._applyConnectorEntryAnimation(connectorDef, state);\n\t\t\t}\n\n\t\t\tif (isReverseExitTransition(transition, this._backward)) {\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, this._backward)) {\n\t\t\t\tthis._applyConnectorExitAnimation(connectorDef, state);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (isReverseEntryTransition(transition, this._backward)) {\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\t\tconst expectedAnimation = state.node.style.animation;\n\n\t\tstate.node.addEventListener(\n\t\t\t\"animationend\",\n\t\t\t() => {\n\t\t\t\tif (state.node.style.animation === expectedAnimation) {\n\t\t\t\t\tstate.node.style.animation = \"\";\n\t\t\t\t}\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\t\tconst expectedAnimation = state.node.style.animation;\n\n\t\tstate.node.addEventListener(\n\t\t\t\"animationend\",\n\t\t\t() => {\n\t\t\t\tif (state.node.style.animation === expectedAnimation) {\n\t\t\t\t\thideElementAfterExit(state.node);\n\t\t\t\t}\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\t\tconst expectedAnimation = state.node.style.animation;\n\n\t\tstate.node.addEventListener(\n\t\t\t\"animationend\",\n\t\t\t() => {\n\t\t\t\tif (state.node.style.animation === expectedAnimation) {\n\t\t\t\t\tstate.node.style.animation = \"\";\n\t\t\t\t}\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\t\tconst expectedAnimation = state.node.style.animation;\n\n\t\tstate.node.addEventListener(\n\t\t\t\"animationend\",\n\t\t\t() => {\n\t\t\t\tif (state.node.style.animation === expectedAnimation) {\n\t\t\t\t\thideElementAfterExit(state.node);\n\t\t\t\t}\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\tconst stop = this.scenes[index];\n\t\tconst from = this._progress;\n\t\tconst to = stop.progress;\n\n\t\tif (index === this._sceneIndex && from === to) return;\n\n\t\tthis._sceneIndex = index;\n\t\tthis._emit(\"scene-change\", index);\n\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._cancelCameraAnimation();\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\tprivate _cancelCameraAnimation(): void {\n\t\tif (this._cameraAnim !== null) {\n\t\t\tcancelAnimationFrame(this._cameraAnim);\n\t\t\tthis._cameraAnim = null;\n\t\t}\n\t}\n\n\t// ── Scroll binding ─────────────────────────────────────────────────────\n\n\tprivate _bindScroll(): void {\n\t\tif (this._config.keyboardControls) {\n\t\t\tdocument.addEventListener(\"keydown\", this._onKeyDown);\n\t\t}\n\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.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\tdocument.removeEventListener(\"keydown\", this._onKeyDown);\n\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\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 sensitivity = this._config.scrollSensitivity ?? 1;\n\t\tconst scaledProgress = rawProgress * sensitivity;\n\t\tconst clampedProgress = Math.max(\n\t\t\tthis._config.minProgress ?? 0,\n\t\t\tMath.min(this._config.maxProgress ?? 1, scaledProgress),\n\t\t);\n\n\t\tif (clampedProgress !== this._progress) {\n\t\t\tthis.setProgress(clampedProgress);\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._lastTouchX = touch.clientX;\n\t\t} else {\n\t\t\tthis._lastTouchY = 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 isHorizontal = this._config.scrollDirection === \"horizontal\";\n\t\tconst delta = isHorizontal ? this._lastTouchX - touch.clientX : this._lastTouchY - touch.clientY;\n\t\tif (isHorizontal) {\n\t\t\tthis._lastTouchX = touch.clientX;\n\t\t} else {\n\t\t\tthis._lastTouchY = touch.clientY;\n\t\t}\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 svg = this._getSceneSvg();\n\t\tif (!svg) return;\n\n\t\tif (pause) svg.classList.add(\"iso-motion-paused\");\n\t\telse svg.classList.remove(\"iso-motion-paused\");\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, backward: boolean): boolean {\n\treturn (\n\t\t!backward &&\n\t\t(transition.from === \"removed\" || transition.from === \"exiting\") &&\n\t\t(transition.to === \"entering\" || transition.to === \"present\")\n\t);\n}\n\nfunction isForwardExitTransition(transition: LifecycleTransition, backward: boolean): boolean {\n\treturn !backward && (transition.to === \"exiting\" || (transition.to === \"removed\" && transition.from !== \"exiting\"));\n}\n\nfunction isReverseExitTransition(transition: LifecycleTransition, backward: boolean): boolean {\n\treturn (\n\t\tbackward &&\n\t\t(transition.to === \"removed\" || transition.to === \"exiting\") &&\n\t\t(transition.from === \"entering\" || transition.from === \"present\")\n\t);\n}\n\nfunction isReverseEntryTransition(transition: LifecycleTransition, backward: boolean): boolean {\n\treturn (\n\t\tbackward &&\n\t\t(transition.from === \"exiting\" || transition.from === \"removed\") &&\n\t\t(transition.to === \"present\" || transition.to === \"entering\")\n\t);\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\nfunction surroundingStops(\n\tscenes: RuntimeBundle[\"scenes\"],\n\tprogress: number,\n): {\n\tprevious: { scene: RuntimeBundle[\"scenes\"][number]; index: number };\n\tnext: { scene: RuntimeBundle[\"scenes\"][number]; index: number };\n} {\n\tlet previousIndex = 0;\n\tlet nextIndex = scenes.length - 1;\n\tfor (let i = 0; i < scenes.length; i++) {\n\t\tif (scenes[i].progress <= progress) previousIndex = i;\n\t\tif (scenes[i].progress >= progress) {\n\t\t\tnextIndex = i;\n\t\t\tbreak;\n\t\t}\n\t}\n\treturn {\n\t\tprevious: { scene: scenes[previousIndex], index: previousIndex },\n\t\tnext: { scene: scenes[nextIndex], index: nextIndex },\n\t};\n}\n\nfunction expandViewBox(viewBox: ViewBoxRect, padding: number): ViewBoxRect {\n\treturn {\n\t\tminX: roundCameraNumber(viewBox.minX - padding),\n\t\tminY: roundCameraNumber(viewBox.minY - padding),\n\t\twidth: roundCameraNumber(Math.max(1, viewBox.width + padding * 2)),\n\t\theight: roundCameraNumber(Math.max(1, viewBox.height + padding * 2)),\n\t};\n}\n\nfunction lerpViewBox(from: ViewBoxRect, to: ViewBoxRect, t: number): ViewBoxRect {\n\treturn {\n\t\tminX: roundCameraNumber(from.minX + (to.minX - from.minX) * t),\n\t\tminY: roundCameraNumber(from.minY + (to.minY - from.minY) * t),\n\t\twidth: roundCameraNumber(from.width + (to.width - from.width) * t),\n\t\theight: roundCameraNumber(from.height + (to.height - from.height) * t),\n\t};\n}\n\nfunction sameViewBox(a: ViewBoxRect, b: ViewBoxRect): boolean {\n\treturn a.minX === b.minX && a.minY === b.minY && a.width === b.width && a.height === b.height;\n}\n\nfunction currentSvgViewBox(svg: SVGSVGElement): ViewBoxRect | undefined {\n\tconst raw = svg.getAttribute(\"viewBox\");\n\tif (!raw) return undefined;\n\tconst parts = raw.trim().split(/\\s+/).map(Number);\n\tif (parts.length !== 4 || parts.some((part) => !Number.isFinite(part))) return undefined;\n\treturn { minX: parts[0], minY: parts[1], width: parts[2], height: parts[3] };\n}\n\nfunction resolveCameraEasing(easing: \"linear\" | \"ease-in-out\" | \"ease-out\" | undefined): (t: number) => number {\n\treturn resolveEasing(easing === \"ease-in-out\" ? \"easeInOutCubic\" : easing === \"ease-out\" ? \"easeOutCubic\" : \"linear\");\n}\n\nfunction copyCameraState(state: CameraState): CameraState {\n\treturn {\n\t\tviewBox: { ...state.viewBox },\n\t\ttarget:\n\t\t\tstate.target?.type === \"area\"\n\t\t\t\t? { type: \"area\", at: [...state.target.at], size: [...state.target.size] }\n\t\t\t\t: state.target\n\t\t\t\t\t? { ...state.target }\n\t\t\t\t\t: undefined,\n\t\tisZoomed: state.isZoomed,\n\t};\n}\n\nfunction roundCameraNumber(value: number): number {\n\treturn Math.round(value * 1000) / 1000;\n}\n",
|
|
16
16
|
"/** Pure-JS SHA-256 digest (no Node crypto). */\nexport function 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",
|
|
17
17
|
"import { getElementState } from \"../rendering/rendering-engine.ts\";\nimport { RenderError } from \"../types/errors.ts\";\n\n/** Payload for element pointer events. */\nexport interface ElementPointerEvent {\n\t/** Element id from the scene definition. */\n\tid: string;\n\t/** The native DOM event that triggered this notification. */\n\toriginalEvent: Event;\n}\n\n/** Events emitted by `MountedScene.on()`. */\nexport interface MountedSceneEvents {\n\t\"element-click\": (event: ElementPointerEvent) => void;\n\t\"element-enter\": (event: ElementPointerEvent) => void;\n\t\"element-leave\": (event: ElementPointerEvent) => void;\n}\n\ntype EventKey = keyof MountedSceneEvents;\ntype AnyEventListener = (event: ElementPointerEvent) => void;\n\nconst CSS_CLASS_INTERACTIVE_ROOT = \"iso-interactive\";\nconst CSS_CLASS_HOVER = \"iso-hover\";\n\n/**\n * Owns delegated pointer listeners and event subscriptions for one mounted\n * scene. Created unconditionally by `mountScene()`; the three DOM listeners\n * are only attached when `interactive: true`.\n */\nexport class SceneInteractivity {\n\tprivate readonly svg: SVGSVGElement;\n\tprivate readonly listeners = new Map<EventKey, Set<AnyEventListener>>();\n\tprivate destroyed = false;\n\tprivate attached = false;\n\tprivate readonly onClick = (event: Event): void => this.handleClick(event);\n\tprivate readonly onPointerOver = (event: Event): void => this.handlePointerOver(event as PointerEvent);\n\tprivate readonly onPointerOut = (event: Event): void => this.handlePointerOut(event as PointerEvent);\n\n\tconstructor(svg: SVGSVGElement, interactive: boolean) {\n\t\tthis.svg = svg;\n\t\tif (interactive) {\n\t\t\tsvg.classList.add(CSS_CLASS_INTERACTIVE_ROOT);\n\t\t\tsvg.addEventListener(\"click\", this.onClick);\n\t\t\tsvg.addEventListener(\"pointerover\", this.onPointerOver);\n\t\t\tsvg.addEventListener(\"pointerout\", this.onPointerOut);\n\t\t\tthis.attached = true;\n\t\t}\n\t}\n\n\t/** Subscribe to interactivity events. Returns an unsubscribe function. */\n\ton<K extends EventKey>(event: K, listener: MountedSceneEvents[K]): () => void {\n\t\tif (this.destroyed) {\n\t\t\tthrow new RenderError(\"MOUNT_DESTROYED\", \"Cannot call on() after destroy()\");\n\t\t}\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\treturn () => {\n\t\t\tset.delete(listener as AnyEventListener);\n\t\t};\n\t}\n\n\t/** Remove the three delegated listeners and all subscriptions. Safe to call more than once. */\n\tdestroy(): void {\n\t\tif (this.destroyed) return;\n\t\tthis.destroyed = true;\n\t\tif (this.attached) {\n\t\t\tthis.svg.removeEventListener(\"click\", this.onClick);\n\t\t\tthis.svg.removeEventListener(\"pointerover\", this.onPointerOver);\n\t\t\tthis.svg.removeEventListener(\"pointerout\", this.onPointerOut);\n\t\t\tthis.attached = false;\n\t\t}\n\t\tthis.listeners.clear();\n\t}\n\n\tprivate handleClick(event: Event): void {\n\t\tconst id = this.resolveVisibleElementId(event.target);\n\t\tif (!id) return;\n\t\tthis.emit(\"element-click\", { id, originalEvent: event });\n\t}\n\n\tprivate handlePointerOver(event: PointerEvent): void {\n\t\tconst enteredId = this.resolveVisibleElementId(event.target);\n\t\tif (!enteredId) return;\n\t\tconst previousId = this.resolveVisibleElementId(event.relatedTarget);\n\t\tif (enteredId === previousId) return;\n\t\tthis.toggleHoverClass(enteredId, true);\n\t\tthis.emit(\"element-enter\", { id: enteredId, originalEvent: event });\n\t}\n\n\tprivate handlePointerOut(event: PointerEvent): void {\n\t\tconst leftId = this.resolveVisibleElementId(event.target);\n\t\tif (!leftId) return;\n\t\tconst nextId = this.resolveVisibleElementId(event.relatedTarget);\n\t\tif (leftId === nextId) return;\n\t\tthis.toggleHoverClass(leftId, false);\n\t\tthis.emit(\"element-leave\", { id: leftId, originalEvent: event });\n\t}\n\n\tprivate toggleHoverClass(id: string, hovered: boolean): void {\n\t\tconst state = getElementState(this.svg, id);\n\t\tif (!state) return;\n\t\tstate.node.classList.toggle(CSS_CLASS_HOVER, hovered);\n\t}\n\n\t/**\n\t * Resolve the scene element id for a pointer event target: walk up\n\t * `parentNode` from the event target until the root SVG, looking for the\n\t * first ancestor `<g>` that is a member of the engine's element state map\n\t * (connector groups also carry `data-id` but are never members of this\n\t * map, and floor/defs/diagnostics nodes carry no `data-id` at all). An\n\t * element whose current presence is `removed` never resolves.\n\t */\n\tprivate resolveVisibleElementId(target: EventTarget | null): string | undefined {\n\t\tlet node = target as Node | null;\n\t\twhile (node && node !== this.svg) {\n\t\t\tconst id = (node as Element).getAttribute?.(\"data-id\");\n\t\t\tif (id) {\n\t\t\t\tconst state = getElementState(this.svg, id);\n\t\t\t\tif (state && state.current.presence !== \"removed\") return id;\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\tnode = node.parentNode;\n\t\t}\n\t\treturn undefined;\n\t}\n\n\t/**\n\t * Invoke every listener for `event`. Exceptions are not caught: consistent\n\t * with `AnimationController`'s event system, a throwing listener is\n\t * rethrown asynchronously (via `queueMicrotask`) rather than swallowed, so\n\t * it surfaces as an unhandled error without breaking delivery to sibling\n\t * listeners in the same `Set`.\n\t */\n\tprivate emit<K extends EventKey>(event: K, payload: ElementPointerEvent): void {\n\t\tconst set = this.listeners.get(event);\n\t\tif (!set) return;\n\t\tfor (const listener of set) {\n\t\t\ttry {\n\t\t\t\tlistener(payload);\n\t\t\t} catch (error) {\n\t\t\t\tqueueMicrotask(() => {\n\t\t\t\t\tthrow error;\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n}\n",
|
|
18
|
-
"import { AnimationEngine } from \"../animation/animation-engine.ts\";\nimport type { CameraState, 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 { ControllerError, RenderError } from \"../types/errors.ts\";\nimport type { CompiledFloor, CompiledLayout, RuntimeBundle } from \"../types/runtime-bundle.ts\";\nimport { sha256 } from \"../utils/sha256.ts\";\nimport { type MountedSceneEvents, SceneInteractivity } from \"./interactivity.ts\";\n\nconst RUNTIME_BUNDLE_FORMAT = \"isostate-runtime-bundle\";\nconst RUNTIME_VERSION = \"0.6.
|
|
18
|
+
"import { AnimationEngine } from \"../animation/animation-engine.ts\";\nimport type { CameraState, 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 { ControllerError, RenderError } from \"../types/errors.ts\";\nimport type { CompiledFloor, CompiledLayout, RuntimeBundle } from \"../types/runtime-bundle.ts\";\nimport { sha256 } from \"../utils/sha256.ts\";\nimport { type MountedSceneEvents, SceneInteractivity } from \"./interactivity.ts\";\n\nconst RUNTIME_BUNDLE_FORMAT = \"isostate-runtime-bundle\";\nconst RUNTIME_VERSION = \"0.6.1\";\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\t/** Enable pointer interactivity on scene elements. Default: false. */\n\tinteractive?: boolean;\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\tcamera: CameraState;\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/**\n\t * Subscribe to interactivity events. Returns an unsubscribe function.\n\t * Callable regardless of the `interactive` option; without it no events\n\t * fire.\n\t */\n\ton<K extends keyof MountedSceneEvents>(event: K, listener: MountedSceneEvents[K]): () => void;\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\tconst interactivity = new SceneInteractivity(svg, options.interactive === true);\n\n\tlet destroyed = false;\n\n\treturn {\n\t\tsvg,\n\t\tengine,\n\t\tcontroller,\n\t\tgetResolvedConfig: () => getResolvedConfig(bundle, options, controller),\n\t\ton: (event, listener) => interactivity.on(event, listener),\n\t\tdestroy: () => {\n\t\t\tif (destroyed) return;\n\t\t\tdestroyed = true;\n\t\t\tinteractivity.destroy();\n\t\t\tdestroyControllerSafely(controller);\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\n/**\n * Destroy the controller, tolerating a controller that was already destroyed\n * independently (e.g. by application code calling `controller.destroy()`\n * before `mountScene().destroy()`). Keeps `mountScene().destroy()` idempotent\n * and defensive so engine cleanup and SVG removal always run.\n */\nfunction destroyControllerSafely(controller: AnimationController | undefined): void {\n\tif (!controller) return;\n\ttry {\n\t\tcontroller.destroy();\n\t} catch (error) {\n\t\tif (error instanceof ControllerError && error.code === \"CONTROLLER_DESTROYED\") return;\n\t\tthrow error;\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(\n\tbundle: RuntimeBundle,\n\toptions: MountSceneOptions = {},\n\tcontroller?: AnimationController,\n): ResolvedRuntimeConfig {\n\treturn {\n\t\tgrid: { cellSize: bundle.grid.cellSize },\n\t\tfloor: { ...bundle.floor, size: [...bundle.floor.size], origin: [...bundle.floor.origin] },\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\tcamera: resolveCameraState(bundle, controller),\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 || compareCodePointOrder(a.name, b.name)),\n\t};\n}\n\n/**\n * Live camera state from the controller when one is attached and alive;\n * otherwise the static bundle-derived default.\n */\nfunction resolveCameraState(bundle: RuntimeBundle, controller?: AnimationController): CameraState {\n\tif (controller) {\n\t\ttry {\n\t\t\treturn controller.getCameraState();\n\t\t} catch (error) {\n\t\t\tif (!(error instanceof ControllerError)) throw error;\n\t\t}\n\t}\n\treturn {\n\t\tviewBox: getResolvedViewBox(bundle),\n\t\tisZoomed: false,\n\t};\n}\n\n/** Locale-independent string comparator so tie-break order is byte-deterministic across hosts. */\nfunction compareCodePointOrder(a: string, b: string): number {\n\treturn a < b ? -1 : a > b ? 1 : 0;\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",
|
|
19
19
|
"import { mountScene } from \"./runtime/mount-scene.ts\";\nimport { projectToScreen as projectGridToScreen } from \"./utils/projection.ts\";\n\nexport { mountScene };\n\nexport function projectToScreen(\n\tx: number,\n\ty: number,\n\tcellSize: number,\n\toffsetX?: number,\n\toffsetY?: number,\n\tpaddingX?: number,\n\tpaddingY?: number,\n): ReturnType<typeof projectGridToScreen> {\n\treturn projectGridToScreen(x, y, cellSize, offsetX, offsetY, paddingX, paddingY);\n}\n"
|
|
20
20
|
],
|
|
21
|
-
"mappings": "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",
|
|
22
|
-
"debugId": "
|
|
21
|
+
"mappings": "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",
|
|
22
|
+
"debugId": "62F8965A168E73D264756E2164756E21",
|
|
23
23
|
"names": []
|
|
24
24
|
}
|