@sebastianwessel/isostate 0.3.0 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/animation/animation-engine.d.ts +1 -0
- package/dist/animation/animation-engine.d.ts.map +1 -1
- package/dist/animation/controller.d.ts +34 -2
- package/dist/animation/controller.d.ts.map +1 -1
- package/dist/browser/isostate.runtime.js +4 -4
- package/dist/browser/isostate.runtime.js.map +12 -11
- package/dist/chunks/{index-B6HlPnov.js → index-CB6XEsbY.js} +257 -43
- package/dist/chunks/index-CB6XEsbY.js.map +1 -0
- package/dist/chunks/{rendering-engine-BgHel7yX.js → rendering-engine-nkqYx0qc.js} +224 -38
- package/dist/chunks/rendering-engine-nkqYx0qc.js.map +1 -0
- package/dist/chunks/{scene-parser-xgVJh2FU.js → scene-parser-F69XGE0l.js} +100 -33
- package/dist/chunks/scene-parser-F69XGE0l.js.map +1 -0
- package/dist/dsl/browser.js +1 -1
- package/dist/dsl/index.js +1 -1
- package/dist/dsl/scene-parser.d.ts.map +1 -1
- package/dist/dsl/scene-validator.d.ts.map +1 -1
- package/dist/editor-support/adapter.d.ts +1 -0
- package/dist/editor-support/adapter.d.ts.map +1 -1
- package/dist/editor-support/index.js +6 -3
- package/dist/editor-support/index.js.map +1 -1
- package/dist/index.d.ts +4 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +470 -4
- package/dist/index.js.map +1 -1
- package/dist/rendering/animation-css.d.ts.map +1 -1
- package/dist/rendering/asset-node.d.ts.map +1 -1
- package/dist/rendering/rendering-engine.d.ts +9 -0
- package/dist/rendering/rendering-engine.d.ts.map +1 -1
- package/dist/rendering/theme.d.ts +4 -0
- package/dist/rendering/theme.d.ts.map +1 -1
- package/dist/runtime/diagnostics-overlay.d.ts +29 -0
- package/dist/runtime/diagnostics-overlay.d.ts.map +1 -0
- package/dist/runtime/export.d.ts +27 -0
- package/dist/runtime/export.d.ts.map +1 -0
- package/dist/runtime/index.d.ts +1 -0
- package/dist/runtime/index.d.ts.map +1 -1
- package/dist/runtime/index.js +2 -2
- package/dist/runtime/interactivity.d.ts +56 -0
- package/dist/runtime/interactivity.d.ts.map +1 -0
- package/dist/runtime/mount-scene.d.ts +11 -10
- package/dist/runtime/mount-scene.d.ts.map +1 -1
- package/dist/types/asset-registry.d.ts +1 -0
- package/dist/types/asset-registry.d.ts.map +1 -1
- package/dist/types/index.d.ts +1 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/node.d.ts +18 -0
- package/dist/types/node.d.ts.map +1 -1
- package/dist/types/runtime-bundle.d.ts +35 -0
- package/dist/types/runtime-bundle.d.ts.map +1 -1
- package/dist/types/scene.d.ts +2 -0
- package/dist/types/scene.d.ts.map +1 -1
- package/package.json +1 -1
- package/dist/chunks/index-B6HlPnov.js.map +0 -1
- package/dist/chunks/rendering-engine-BgHel7yX.js.map +0 -1
- package/dist/chunks/scene-parser-xgVJh2FU.js.map +0 -1
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { AmbientAnimation, PrimitiveContent, RuntimeConnectorState, RuntimeConnectorStyle, RuntimeElementState, TextContent } from "../types/node.ts";
|
|
2
2
|
import type { RuntimeBundle } from "../types/runtime-bundle.ts";
|
|
3
|
+
/** Lifecycle transition key used to look up entry/exit animation keyframes. */
|
|
3
4
|
export type LifecycleKey = "entering" | "present" | "exiting" | "removed";
|
|
4
5
|
/** Interpolation result for a frame update. */
|
|
5
6
|
export interface FrameUpdate {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"animation-engine.d.ts","sourceRoot":"","sources":["../../src/animation/animation-engine.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"animation-engine.d.ts","sourceRoot":"","sources":["../../src/animation/animation-engine.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,11 +2,17 @@ import { type ViewBoxRect } from "../rendering/rendering-engine.ts";
|
|
|
2
2
|
import type { CameraGridArea, CameraZoomOptions, RuntimeCameraTarget } from "../types/node.ts";
|
|
3
3
|
import type { RuntimeBundle } from "../types/runtime-bundle.ts";
|
|
4
4
|
import { AnimationEngine } from "./animation-engine.ts";
|
|
5
|
+
/** Events emitted by `AnimationController.on()`. */
|
|
5
6
|
export interface ControllerEvents {
|
|
7
|
+
/** Fired whenever resolved scroll/scene progress changes. */
|
|
6
8
|
"progress-change": (progress: number) => void;
|
|
9
|
+
/** Fired when the active scene index changes. */
|
|
7
10
|
"scene-change": (index: number) => void;
|
|
11
|
+
/** Fired after the camera viewBox or zoom target changes. */
|
|
8
12
|
"camera-change": (state: CameraState) => void;
|
|
13
|
+
/** Fired when scroll-driven progress tracking is paused. */
|
|
9
14
|
paused: () => void;
|
|
15
|
+
/** Fired when scroll-driven progress tracking resumes. */
|
|
10
16
|
resumed: () => void;
|
|
11
17
|
}
|
|
12
18
|
type EventKey = keyof ControllerEvents;
|
|
@@ -15,25 +21,38 @@ export interface ControllerConfig {
|
|
|
15
21
|
container?: HTMLElement;
|
|
16
22
|
/** SVG scene updated by this controller. Defaults to the first SVG in `container` for direct controller usage. */
|
|
17
23
|
sceneElement?: SVGSVGElement;
|
|
24
|
+
/** Scroll axis used to derive progress. Defaults to `vertical`. */
|
|
18
25
|
scrollDirection?: "vertical" | "horizontal";
|
|
26
|
+
/** Extra scroll offsets, in pixels, applied when deriving progress from `container`. */
|
|
19
27
|
scrollOffset?: {
|
|
20
28
|
top?: number;
|
|
21
29
|
bottom?: number;
|
|
22
30
|
left?: number;
|
|
23
31
|
right?: number;
|
|
24
32
|
};
|
|
33
|
+
/** Minimum resolved progress. Defaults to `0`. */
|
|
25
34
|
minProgress?: number;
|
|
35
|
+
/** Maximum resolved progress. Defaults to `1`. */
|
|
26
36
|
maxProgress?: number;
|
|
37
|
+
/** Enable arrow-key scene navigation. Defaults to `false`. */
|
|
27
38
|
keyboardControls?: boolean;
|
|
39
|
+
/** Enable touch swipe scene navigation. Defaults to `false`. */
|
|
28
40
|
touchControls?: boolean;
|
|
41
|
+
/** Multiplier applied to wheel/touch scroll deltas. Defaults to `1.0`. */
|
|
29
42
|
scrollSensitivity?: number;
|
|
43
|
+
/** Camera transition duration in milliseconds. Defaults to `600`. */
|
|
30
44
|
transitionDuration?: number;
|
|
45
|
+
/** Camera transition easing curve. Defaults to `ease-in-out`. */
|
|
31
46
|
transitionEasing?: "linear" | "ease-in-out" | "ease-out";
|
|
32
47
|
}
|
|
33
48
|
export type { CameraGridArea, CameraZoomOptions };
|
|
49
|
+
/** Current camera viewBox and zoom target, as reported by `AnimationController.getCameraState()`. */
|
|
34
50
|
export interface CameraState {
|
|
51
|
+
/** Current SVG viewBox. */
|
|
35
52
|
viewBox: ViewBoxRect;
|
|
53
|
+
/** Focus target that produced the current viewBox, if any. */
|
|
36
54
|
target?: RuntimeCameraTarget;
|
|
55
|
+
/** Whether the camera differs from the compiled full scene view. */
|
|
37
56
|
isZoomed: boolean;
|
|
38
57
|
}
|
|
39
58
|
interface ControllerRuntime {
|
|
@@ -62,8 +81,8 @@ export declare class AnimationController {
|
|
|
62
81
|
private _cameraState;
|
|
63
82
|
private _minScroll;
|
|
64
83
|
private _maxScroll;
|
|
65
|
-
private
|
|
66
|
-
private
|
|
84
|
+
private _lastTouchY;
|
|
85
|
+
private _lastTouchX;
|
|
67
86
|
private _isDragging;
|
|
68
87
|
private _transitionAnim;
|
|
69
88
|
get engine(): AnimationEngine;
|
|
@@ -123,6 +142,19 @@ export declare class AnimationController {
|
|
|
123
142
|
private _applyCameraForProgress;
|
|
124
143
|
private _effectiveCameraAt;
|
|
125
144
|
private _resolveCameraViewBox;
|
|
145
|
+
/**
|
|
146
|
+
* Resolve element bounds for scroll/setProgress camera interpolation.
|
|
147
|
+
*
|
|
148
|
+
* Unlike `getCurrentElementBounds()`, this tolerates an element whose
|
|
149
|
+
* resolved presence is transiently "removed" because progress has not yet
|
|
150
|
+
* reached the stop that introduces it (the engine still carries valid
|
|
151
|
+
* authored geometry for it via nearest-geometry fallback). It falls back to
|
|
152
|
+
* that geometry instead of reporting the target as missing so a scene that
|
|
153
|
+
* both adds an element and focuses the camera on it in the same stop can be
|
|
154
|
+
* interpolated into smoothly. A genuinely unknown element id still resolves
|
|
155
|
+
* to `undefined` so callers can throw `CAMERA_TARGET_NOT_FOUND`.
|
|
156
|
+
*/
|
|
157
|
+
private _resolveElementBoundsForInterpolation;
|
|
126
158
|
private _applyCameraDestination;
|
|
127
159
|
private _setCameraViewBox;
|
|
128
160
|
private _getSceneSvg;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"controller.d.ts","sourceRoot":"","sources":["../../src/animation/controller.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"controller.d.ts","sourceRoot":"","sources":["../../src/animation/controller.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
class b{_bundle=null;_progress=0;_paused=!1;_prevFrameMap=new Map;_elementFrameMap=new Map;_prevConnectorFrameMap=new Map;_connectorFrameMap=new Map;get bundle(){return this._bundle}get progress(){return this._progress}getProgress(){return this._progress}get paused(){return this._paused}isPaused(){return this._paused}get elementsCount(){return this._elementFrameMap.size}get connectorsCount(){return this._connectorFrameMap.size}init($){this._bundle=$,this._progress=0,this._paused=!1,this._prevFrameMap.clear(),this._elementFrameMap.clear(),this._prevConnectorFrameMap.clear(),this._connectorFrameMap.clear();let k=M0($,0);this._elementFrameMap=k,this._prevFrameMap=F0(k);let J=A0($,0);this._connectorFrameMap=J,this._prevConnectorFrameMap=N0(J)}setProgress($){let k=Math.max(0,Math.min(1,$));if(this._paused)return;if(this._progress=k,!this._bundle)return;this._prevFrameMap=F0(this._elementFrameMap),this._elementFrameMap=M0(this._bundle,k),this._prevConnectorFrameMap=N0(this._connectorFrameMap),this._connectorFrameMap=A0(this._bundle,k)}getElementUpdate($){let k=typeof $==="string"?$:$.id,J=this._elementFrameMap.get(k);if(!J)return{id:k,asset:"",lifecycle:"removed",ambient:[],pos:[0,0],size:1,layer:""};return w0(J)}getFrameUpdates(){return[...this._elementFrameMap.values()].map(w0)}getConnectorUpdate($){let k=typeof $==="string"?$:$.id,J=this._connectorFrameMap.get(k);if(!J)return d(T0(k));return d(J)}getConnectorFrameUpdates(){return[...this._connectorFrameMap.values()].map(d)}getLifecycleTransition($){let k=this._prevFrameMap.get($),J=this._elementFrameMap.get($),K=k?.lifecycle??"removed",Z=J?.lifecycle??"removed";if(K===Z)return null;return{from:K,to:Z}}getConnectorLifecycleTransition($){let k=this._prevConnectorFrameMap.get($),J=this._connectorFrameMap.get($),K=k?.lifecycle??"removed",Z=J?.lifecycle??"removed";if(K===Z)return null;return{from:K,to:Z}}getCurrentState(){let $=this._bundle;if(!$)return null;return o($.scenes,this._progress)?.nextStop??$.scenes[0]??null}pause(){this._paused=!0}resume(){this._paused=!1}destroy(){this._bundle=null,this._progress=0,this._paused=!1,this._elementFrameMap.clear(),this._prevFrameMap.clear(),this._connectorFrameMap.clear(),this._prevConnectorFrameMap.clear()}}function M0($,k){let J=o($.scenes,k),K=new Map;if(!J)return K;let Z=new Set;for(let q of $.scenes)for(let Q of q.elements??[])Z.add(Q.id);for(let q of J.prevStop.elements??[])Z.add(q.id);for(let q of J.nextStop.elements??[])Z.add(q.id);for(let q of Z){let Q=Y1(j1(q,J.prevStop,J.nextStop,J.t),$.scenes,q,k);K.set(q,Q)}return K}function A0($,k){let J=o($.scenes,k),K=new Map;if(!J)return K;let Z=new Set;for(let q of $.scenes)for(let Q of q.connectors??[])Z.add(Q.id);for(let q of J.prevStop.connectors??[])Z.add(q.id);for(let q of J.nextStop.connectors??[])Z.add(q.id);for(let q of Z){let Q=O1(q,J.prevStop,J.nextStop,J.t);K.set(q,Q)}return K}function o($,k){if($.length===0)return null;let J=[...$].sort((Z,q)=>Z.progress-q.progress);if(J.length===1||k<=J[0].progress)return{prevStop:J[0],nextStop:J[0],t:0,nextIndex:0};let K=J.length-1;if(k>=J[K].progress)return{prevStop:J[K-1]??J[K],nextStop:J[K],t:1,nextIndex:K};for(let Z=1;Z<J.length;Z++){let q=J[Z];if(q.progress>=k){let Q=J[Z-1],H=q.progress-Q.progress,G=H>0?(k-Q.progress)/H:0;return{prevStop:Q,nextStop:q,t:G,nextIndex:Z}}}return null}function j1($,k,J,K){let Z=X0(k,$),q=X0(J,$),Q=q??Z;if(!Q)return A1($);if(!Z||Z.presence==="removed")return h0(Q,Q.presence==="removed"||K<1?"removed":Q.presence);if(!q||q.presence==="removed")return h0(Z,K<1?Z.presence:"removed");let H=K<1?Z.presence:q.presence;return{id:$,asset:q.asset,pos:R0(Z.pos,q.pos,K),size:Z.size+(q.size-Z.size)*K,lifecycle:H,ambient:R(q.ambient),layer:K<1?Z.layer:q.layer,entry:q.enter??Z.enter,exit:q.exit??Z.exit,text:f(q.text??Z.text),primitive:v(q.primitive??Z.primitive)}}function O1($,k,J,K){let Z=P0(k,$),q=P0(J,$),Q=q??Z;if(!Q)return T0($);if(!Z||Z.presence==="removed")return _0(Q,Q.presence==="removed"||K<1?"removed":Q.presence);if(!q||q.presence==="removed")return _0(Z,K<1?Z.presence:"removed");let H=K<1?Z.presence:q.presence;return{id:$,route:X1(Z.route,q.route,K),layer:K<1?Z.layer:q.layer,lifecycle:H,style:p(K<1?Z.style:q.style),start:q.start,end:q.end,direction:q.direction,ambient:R(q.ambient),entry:q.enter??Z.enter,exit:q.exit??Z.exit}}function X0($,k){return($.elements??[]).find((J)=>J.id===k)}function P0($,k){return($.connectors??[]).find((J)=>J.id===k)}function Y1($,k,J,K){if($.lifecycle!=="removed")return $;let Z=M1(k,J,K);if(!Z)return $;return{...$,asset:Z.asset,pos:[...Z.pos],size:Z.size,ambient:R(Z.ambient),layer:Z.layer,entry:Z.enter,exit:Z.exit,text:f(Z.text),primitive:v(Z.primitive)}}function M1($,k,J){let K=[...$].sort((q,Q)=>q.progress-Q.progress),Z=K.filter((q)=>q.progress>=J).flatMap((q)=>q.elements??[]).find((q)=>q.id===k&&q.presence!=="removed");if(Z)return Z;for(let q=K.length-1;q>=0;q-=1){if(K[q].progress>J)continue;let Q=(K[q].elements??[]).find((H)=>H.id===k&&H.presence!=="removed");if(Q)return Q}return}function h0($,k=$.presence){return{id:$.id,asset:$.asset,pos:[...$.pos],size:$.size,lifecycle:k,ambient:R($.ambient),layer:$.layer,entry:$.enter,exit:$.exit,text:f($.text),primitive:v($.primitive)}}function _0($,k=$.presence){return{id:$.id,route:E($.route),layer:$.layer,lifecycle:k,style:p($.style),start:$.start,end:$.end,direction:$.direction,ambient:R($.ambient),entry:$.enter,exit:$.exit}}function A1($){return{id:$,asset:"",pos:[0,0],size:1,lifecycle:"removed",ambient:[],layer:""}}function T0($){return{id:$,route:[],layer:"",lifecycle:"removed",style:{variant:"line",pattern:"solid",stroke:"#2563eb",strokeWidth:3,opacity:1,outlineWidth:0,lane:"none"},start:"none",end:"none",direction:"route",ambient:[]}}function R0($,k,J){return[$[0]+(k[0]-$[0])*J,$[1]+(k[1]-$[1])*J]}function X1($,k,J){if($.length!==k.length)return E(J<1?$:k);return $.map((K,Z)=>R0(K,k[Z],J))}function E($){return $.map((k)=>[k[0],k[1]])}function p($){return{...$,...$.dash?{dash:[...$.dash]}:{}}}function R($){return($??[]).map((k)=>({...k}))}function w0($){return{id:$.id,asset:$.asset,lifecycle:$.lifecycle,ambient:R($.ambient),pos:[...$.pos],size:$.size,layer:$.layer,entry:$.entry,exit:$.exit,text:f($.text),primitive:v($.primitive)}}function d($){return{id:$.id,route:E($.route),layer:$.layer,lifecycle:$.lifecycle,style:p($.style),start:$.start,end:$.end,direction:$.direction,ambient:R($.ambient),entry:$.entry,exit:$.exit}}function F0($){let k=new Map;for(let[J,K]of $)k.set(J,{...K,pos:[...K.pos],ambient:R(K.ambient),text:f(K.text),primitive:v(K.primitive)});return k}function f($){return $?{...$}:void 0}function v($){if(!$)return;return{...$.rectangle?{rectangle:{...$.rectangle,dash:c($.rectangle.dash)}}:{},...$.circle?{circle:{...$.circle,dash:c($.circle.dash)}}:{},...$.polygon?{polygon:{...$.polygon,dash:c($.polygon.dash),points:E($.polygon.points)}}:{},...$.line?{line:{...$.line,dash:c($.line.dash),points:E($.line.points)}}:{}}}function c($){return $?[$[0],$[1]]:void 0}function N0($){let k=new Map;for(let[J,K]of $)k.set(J,{...K,route:E(K.route),style:p(K.style),ambient:R(K.ambient)});return k}var P1={light:{"--color-top":"#e2e8f0","--color-front":"#94a3b8","--color-side":"#64748b","--color-back":"#475569","--color-leaf":"#15803d","--color-trunk":"#78350f","--color-accent":"#3b82f6"},dark:{"--color-top":"#334155","--color-front":"#1e293b","--color-side":"#0f172a","--color-back":"#020617","--color-leaf":"#166534","--color-trunk":"#451a03","--color-accent":"#60a5fa"},brand:{"--color-top":"#c7d2fe","--color-front":"#818cf8","--color-side":"#6366f1","--color-back":"#4338ca","--color-leaf":"#22c55e","--color-trunk":"#854d0e","--color-accent":"#f59e0b"}};function u($){return P1[$]}class t extends Error{code;details;constructor($,k,J){super(k);this.code=$;this.details=J;this.name=this.constructor.name}}class j extends t{}class O extends t{}function C($,k,J){return{rawX:J*($-k)*0.5,rawY:J*($+k)*0.25}}function I($,k,J,K=0,Z=0,q=0,Q=0){let{rawX:H,rawY:G}=C($,k,J);return{screenX:H-K+q,screenY:G-Z+Q}}function s($,k){return k*$}function S0(){return["@keyframes iso-anim-fade-in{from{opacity:0}to{opacity:1}}","@keyframes iso-anim-fade-in-grow{from{opacity:0;scale:.01}to{opacity:1;scale:1}}","@keyframes iso-anim-fall-in{from{opacity:0;translate:0 -40px}to{opacity:1;translate:0 0}}","@keyframes iso-anim-rise-from-ground{from{opacity:0;translate:0 40px}to{opacity:1;translate:0 0}}","@keyframes iso-anim-slide-in-left{from{opacity:0;translate:-60px 0}to{opacity:1;translate:0 0}}","@keyframes iso-anim-slide-in-right{from{opacity:0;translate:60px 0}to{opacity:1;translate:0 0}}","@keyframes iso-anim-flip-in{from{opacity:1;scale:0 1}to{opacity:1;scale:1 1}}","@keyframes iso-anim-fade-out{from{opacity:1}to{opacity:0}}","@keyframes iso-anim-fade-out-shrink{from{opacity:1;scale:1}to{opacity:0;scale:.01}}","@keyframes iso-anim-fall-through-ground{from{opacity:1;translate:0 0}to{opacity:0;translate:0 40px}}","@keyframes iso-anim-rise-away{from{opacity:1;translate:0 0}to{opacity:0;translate:0 -40px}}","@keyframes iso-anim-slide-out-left{from{opacity:1;translate:0 0}to{opacity:0;translate:-60px 0}}","@keyframes iso-anim-slide-out-right{from{opacity:1;translate:0 0}to{opacity:0;translate:60px 0}}","@keyframes iso-anim-flip-out{from{opacity:1;scale:1 1}to{opacity:0;scale:0 1}}","@keyframes iso-anim-pulse{0%,100%{opacity:.7}50%{opacity:1}}","@keyframes iso-anim-float{0%,100%{translate:0 0}50%{translate:0 -6px}}","@keyframes iso-anim-shake{0%,25%,75%,100%{translate:0 0}50%{translate:3px 0}}","@keyframes iso-anim-glow{0%,100%{filter:drop-shadow(0 0 2px rgba(255,255,255,.5))}50%{filter:drop-shadow(0 0 8px rgba(255,255,255,.9))}}","@keyframes iso-anim-spin{from{rotate:0deg}to{rotate:360deg}}","@keyframes iso-anim-blink{0%,49%{opacity:1}50%,100%{opacity:0}}","@keyframes iso-connector-flow-route{from{stroke-dashoffset:0}to{stroke-dashoffset:calc(-1px * var(--iso-flow-distance,20))}}","@keyframes iso-connector-flow-reverse{from{stroke-dashoffset:0}to{stroke-dashoffset:calc(1px * var(--iso-flow-distance,20))}}",".iso-connector-pattern-dashed .iso-connector-shaft,.iso-connector-pattern-dotted .iso-connector-shaft{--iso-flow-distance:20}",".iso-connector-direction-route .iso-connector-shaft.iso-ambient-flow{animation:iso-connector-flow-route 900ms linear infinite}",".iso-connector-direction-reverse .iso-connector-shaft.iso-ambient-flow{animation:iso-connector-flow-reverse 900ms linear infinite}","@media (prefers-reduced-motion: reduce){.iso-element,.iso-connector{animation-duration:1ms!important}.iso-ambient-pulse,.iso-ambient-float,.iso-ambient-shake,.iso-ambient-glow,.iso-ambient-spin,.iso-ambient-blink,.iso-ambient-flow{animation:none!important}}"].join(`
|
|
2
|
-
`)}var
|
|
1
|
+
class s extends Error{code;details;constructor($,k,J){super(k);this.code=$;this.details=J;this.name=this.constructor.name}}class j extends s{}class k0 extends s{}class Y extends s{}class y{_bundle=null;_progress=0;_paused=!1;_prevFrameMap=new Map;_elementFrameMap=new Map;_prevConnectorFrameMap=new Map;_connectorFrameMap=new Map;get bundle(){return this._bundle}get progress(){return this._progress}getProgress(){return this._progress}get paused(){return this._paused}isPaused(){return this._paused}get elementsCount(){return this._elementFrameMap.size}get connectorsCount(){return this._connectorFrameMap.size}init($){this._bundle=$,this._progress=0,this._paused=!1,this._prevFrameMap.clear(),this._elementFrameMap.clear(),this._prevConnectorFrameMap.clear(),this._connectorFrameMap.clear();let k=F0($,0);this._elementFrameMap=k,this._prevFrameMap=R0(k);let J=_0($,0);this._connectorFrameMap=J,this._prevConnectorFrameMap=S0(J)}setProgress($){if(!Number.isFinite($))throw new k0("INVALID_PROGRESS","setProgress() requires a finite progress value");let k=Math.max(0,Math.min(1,$));if(this._paused)return;if(this._progress=k,!this._bundle)return;this._prevFrameMap=R0(this._elementFrameMap),this._elementFrameMap=F0(this._bundle,k),this._prevConnectorFrameMap=S0(this._connectorFrameMap),this._connectorFrameMap=_0(this._bundle,k)}getElementUpdate($){let k=typeof $==="string"?$:$.id,J=this._elementFrameMap.get(k);if(!J)return{id:k,asset:"",lifecycle:"removed",ambient:[],pos:[0,0],size:1,layer:""};return z0(J)}getFrameUpdates(){return[...this._elementFrameMap.values()].map(z0)}getConnectorUpdate($){let k=typeof $==="string"?$:$.id,J=this._connectorFrameMap.get(k);if(!J)return J0(B0(k));return J0(J)}getConnectorFrameUpdates(){return[...this._connectorFrameMap.values()].map(J0)}getLifecycleTransition($){let k=this._prevFrameMap.get($),J=this._elementFrameMap.get($),Q=k?.lifecycle??"removed",Z=J?.lifecycle??"removed";if(Q===Z)return null;return{from:Q,to:Z}}getConnectorLifecycleTransition($){let k=this._prevConnectorFrameMap.get($),J=this._connectorFrameMap.get($),Q=k?.lifecycle??"removed",Z=J?.lifecycle??"removed";if(Q===Z)return null;return{from:Q,to:Z}}getCurrentState(){let $=this._bundle;if(!$)return null;return Q0($.scenes,this._progress)?.nextStop??$.scenes[0]??null}pause(){this._paused=!0}resume(){this._paused=!1}destroy(){this._bundle=null,this._progress=0,this._paused=!1,this._elementFrameMap.clear(),this._prevFrameMap.clear(),this._connectorFrameMap.clear(),this._prevConnectorFrameMap.clear()}}function F0($,k){let J=Q0($.scenes,k),Q=new Map;if(!J)return Q;let Z=new Set;for(let K of $.scenes)for(let q of K.elements??[])Z.add(q.id);for(let K of J.prevStop.elements??[])Z.add(K.id);for(let K of J.nextStop.elements??[])Z.add(K.id);for(let K of Z){let q=F1(A1(K,J.prevStop,J.nextStop,J.t),$.scenes,K,k);Q.set(K,q)}return Q}function _0($,k){let J=Q0($.scenes,k),Q=new Map;if(!J)return Q;let Z=new Set;for(let K of $.scenes)for(let q of K.connectors??[])Z.add(q.id);for(let K of J.prevStop.connectors??[])Z.add(K.id);for(let K of J.nextStop.connectors??[])Z.add(K.id);for(let K of Z){let q=P1(K,J.prevStop,J.nextStop,J.t);Q.set(K,q)}return Q}function Q0($,k){if($.length===0)return null;let J=[...$].sort((Z,K)=>Z.progress-K.progress);if(J.length===1||k<=J[0].progress)return{prevStop:J[0],nextStop:J[0],t:0,nextIndex:0};let Q=J.length-1;if(k>=J[Q].progress)return{prevStop:J[Q-1]??J[Q],nextStop:J[Q],t:1,nextIndex:Q};for(let Z=1;Z<J.length;Z++){let K=J[Z];if(K.progress>=k){let q=J[Z-1],W=K.progress-q.progress,U=W>0?(k-q.progress)/W:0;return{prevStop:q,nextStop:K,t:U,nextIndex:Z}}}return null}function A1($,k,J,Q){let Z=N0(k,$),K=N0(J,$),q=K??Z;if(!q)return N1($);if(!Z||Z.presence==="removed")return D0(q,q.presence==="removed"||Q<1?"removed":q.presence);if(!K||K.presence==="removed")return D0(Z,Q<1?Z.presence:"removed");let W=Q<1?Z.presence:K.presence;return{id:$,asset:K.asset,pos:I0(Z.pos,K.pos,Q),size:Z.size+(K.size-Z.size)*Q,lifecycle:W,ambient:z(Q<1?Z.ambient:K.ambient),layer:Q<1?Z.layer:K.layer,entry:K.enter??Z.enter,exit:K.exit??Z.exit,text:v(K.text??Z.text),primitive:p(K.primitive??Z.primitive)}}function P1($,k,J,Q){let Z=h0(k,$),K=h0(J,$),q=K??Z;if(!q)return B0($);if(!Z||Z.presence==="removed")return T0(q,q.presence==="removed"||Q<1?"removed":q.presence);if(!K||K.presence==="removed")return T0(Z,Q<1?Z.presence:"removed");let W=Q<1?Z.presence:K.presence;return{id:$,route:h1(Z.route,K.route,Q),layer:Q<1?Z.layer:K.layer,lifecycle:W,style:a(Q<1?Z.style:K.style),start:Q<1?Z.start:K.start,end:Q<1?Z.end:K.end,direction:Q<1?Z.direction:K.direction,ambient:z(Q<1?Z.ambient:K.ambient),entry:K.enter??Z.enter,exit:K.exit??Z.exit}}function N0($,k){return($.elements??[]).find((J)=>J.id===k)}function h0($,k){return($.connectors??[]).find((J)=>J.id===k)}function F1($,k,J,Q){if($.lifecycle!=="removed")return $;let Z=_1(k,J,Q);if(!Z)return $;return{...$,asset:Z.asset,pos:[...Z.pos],size:Z.size,ambient:z(Z.ambient),layer:Z.layer,entry:Z.enter,exit:Z.exit,text:v(Z.text),primitive:p(Z.primitive)}}function _1($,k,J){let Q=[...$].sort((K,q)=>K.progress-q.progress),Z=Q.filter((K)=>K.progress>=J).flatMap((K)=>K.elements??[]).find((K)=>K.id===k&&K.presence!=="removed");if(Z)return Z;for(let K=Q.length-1;K>=0;K-=1){if(Q[K].progress>J)continue;let q=(Q[K].elements??[]).find((W)=>W.id===k&&W.presence!=="removed");if(q)return q}return}function D0($,k=$.presence){return{id:$.id,asset:$.asset,pos:[...$.pos],size:$.size,lifecycle:k,ambient:z($.ambient),layer:$.layer,entry:$.enter,exit:$.exit,text:v($.text),primitive:p($.primitive)}}function T0($,k=$.presence){return{id:$.id,route:b($.route),layer:$.layer,lifecycle:k,style:a($.style),start:$.start,end:$.end,direction:$.direction,ambient:z($.ambient),entry:$.enter,exit:$.exit}}function N1($){return{id:$,asset:"",pos:[0,0],size:1,lifecycle:"removed",ambient:[],layer:""}}function B0($){return{id:$,route:[],layer:"",lifecycle:"removed",style:{variant:"line",pattern:"solid",stroke:"#2563eb",strokeWidth:3,opacity:1,outlineWidth:0,lane:"none"},start:"none",end:"none",direction:"route",ambient:[]}}function I0($,k,J){return[$[0]+(k[0]-$[0])*J,$[1]+(k[1]-$[1])*J]}function h1($,k,J){if($.length!==k.length)return b(J<1?$:k);return $.map((Q,Z)=>I0(Q,k[Z],J))}function b($){return $.map((k)=>[k[0],k[1]])}function a($){return{...$,...$.dash?{dash:[...$.dash]}:{}}}function z($){return($??[]).map((k)=>({...k}))}function z0($){return{id:$.id,asset:$.asset,lifecycle:$.lifecycle,ambient:z($.ambient),pos:[...$.pos],size:$.size,layer:$.layer,entry:$.entry,exit:$.exit,text:v($.text),primitive:p($.primitive)}}function J0($){return{id:$.id,route:b($.route),layer:$.layer,lifecycle:$.lifecycle,style:a($.style),start:$.start,end:$.end,direction:$.direction,ambient:z($.ambient),entry:$.entry,exit:$.exit}}function R0($){let k=new Map;for(let[J,Q]of $)k.set(J,{...Q,pos:[...Q.pos],ambient:z(Q.ambient),text:v(Q.text),primitive:p(Q.primitive)});return k}function v($){return $?{...$}:void 0}function p($){if(!$)return;return{...$.rectangle?{rectangle:{...$.rectangle,dash:l($.rectangle.dash)}}:{},...$.circle?{circle:{...$.circle,dash:l($.circle.dash)}}:{},...$.polygon?{polygon:{...$.polygon,dash:l($.polygon.dash),points:b($.polygon.points)}}:{},...$.line?{line:{...$.line,dash:l($.line.dash),points:b($.line.points)}}:{}}}function l($){return $?[$[0],$[1]]:void 0}function S0($){let k=new Map;for(let[J,Q]of $)k.set(J,{...Q,route:b(Q.route),style:a(Q.style),ambient:z(Q.ambient)});return k}var C0={light:{"--color-top":"#e2e8f0","--color-front":"#94a3b8","--color-side":"#64748b","--color-back":"#475569","--color-leaf":"#15803d","--color-trunk":"#78350f","--color-accent":"#3b82f6"},dark:{"--color-top":"#334155","--color-front":"#1e293b","--color-side":"#0f172a","--color-back":"#020617","--color-leaf":"#166534","--color-trunk":"#451a03","--color-accent":"#60a5fa"},brand:{"--color-top":"#c7d2fe","--color-front":"#818cf8","--color-side":"#6366f1","--color-back":"#4338ca","--color-leaf":"#22c55e","--color-trunk":"#854d0e","--color-accent":"#f59e0b"}};function d($){return Object.hasOwn(C0,$)?C0[$]:void 0}function B($,k,J){return{rawX:J*($-k)*0.5,rawY:J*($+k)*0.25}}function R($,k,J,Q=0,Z=0,K=0,q=0){let{rawX:W,rawY:U}=B($,k,J);return{screenX:W-Q+K,screenY:U-Z+q}}function f($,k){return k*$}function x0(){return["@keyframes iso-anim-fade-in{from{opacity:0}to{opacity:1}}","@keyframes iso-anim-fade-in-grow{from{opacity:0;scale:.01}to{opacity:1;scale:1}}","@keyframes iso-anim-fall-in{from{opacity:0;translate:0 -40px}to{opacity:1;translate:0 0}}","@keyframes iso-anim-rise-from-ground{from{opacity:0;translate:0 40px}to{opacity:1;translate:0 0}}","@keyframes iso-anim-slide-in-left{from{opacity:0;translate:-60px 0}to{opacity:1;translate:0 0}}","@keyframes iso-anim-slide-in-right{from{opacity:0;translate:60px 0}to{opacity:1;translate:0 0}}","@keyframes iso-anim-flip-in{from{opacity:1;scale:0 1}to{opacity:1;scale:1 1}}","@keyframes iso-anim-fade-out{from{opacity:1}to{opacity:0}}","@keyframes iso-anim-fade-out-shrink{from{opacity:1;scale:1}to{opacity:0;scale:.01}}","@keyframes iso-anim-fall-through-ground{from{opacity:1;translate:0 0}to{opacity:0;translate:0 40px}}","@keyframes iso-anim-rise-away{from{opacity:1;translate:0 0}to{opacity:0;translate:0 -40px}}","@keyframes iso-anim-slide-out-left{from{opacity:1;translate:0 0}to{opacity:0;translate:-60px 0}}","@keyframes iso-anim-slide-out-right{from{opacity:1;translate:0 0}to{opacity:0;translate:60px 0}}","@keyframes iso-anim-flip-out{from{opacity:1;scale:1 1}to{opacity:0;scale:0 1}}","@keyframes iso-anim-pulse{0%,100%{opacity:.7}50%{opacity:1}}","@keyframes iso-anim-float{0%,100%{translate:0 0}50%{translate:0 -6px}}","@keyframes iso-anim-shake{0%,25%,75%,100%{translate:0 0}50%{translate:3px 0}}","@keyframes iso-anim-glow{0%,100%{filter:drop-shadow(0 0 2px rgba(255,255,255,.5))}50%{filter:drop-shadow(0 0 8px rgba(255,255,255,.9))}}","@keyframes iso-anim-spin{from{rotate:0deg}to{rotate:360deg}}","@keyframes iso-anim-blink{0%,49%{opacity:1}50%,100%{opacity:0}}",".iso-ambient-pulse{animation:iso-anim-pulse 2s ease-in-out infinite}",".iso-ambient-float{animation:iso-anim-float 3s ease-in-out infinite}",".iso-ambient-shake{animation:iso-anim-shake 0.5s ease-in-out infinite}",".iso-ambient-glow{animation:iso-anim-glow 2s ease-in-out infinite}",".iso-ambient-spin{animation:iso-anim-spin 4s linear infinite}",".iso-ambient-blink{animation:iso-anim-blink 1.5s step-end infinite}","@keyframes iso-connector-flow-route{from{stroke-dashoffset:0}to{stroke-dashoffset:calc(-1px * var(--iso-flow-distance,20))}}","@keyframes iso-connector-flow-reverse{from{stroke-dashoffset:0}to{stroke-dashoffset:calc(1px * var(--iso-flow-distance,20))}}",".iso-connector-pattern-dashed .iso-connector-shaft,.iso-connector-pattern-dotted .iso-connector-shaft{--iso-flow-distance:20}",".iso-connector-direction-route .iso-connector-shaft.iso-ambient-flow{animation:iso-connector-flow-route 900ms linear infinite}",".iso-connector-direction-reverse .iso-connector-shaft.iso-ambient-flow{animation:iso-connector-flow-reverse 900ms linear infinite}","@media (prefers-reduced-motion: reduce){.iso-element,.iso-connector{animation-duration:1ms!important}.iso-ambient-pulse,.iso-ambient-float,.iso-ambient-shake,.iso-ambient-glow,.iso-ambient-spin,.iso-ambient-blink,.iso-ambient-flow{animation:none!important}}",".iso-interactive g[data-id]{cursor:pointer}"].join(`
|
|
2
|
+
`)}var _="http://www.w3.org/2000/svg";function b0($){let k=new Map,J=$?.assets;if(J&&typeof J==="object"){for(let[Q,Z]of Object.entries(J))if(Z&&typeof Z==="object"&&typeof Z.url==="string")k.set(Q,{url:Z.url,anchor:Z.anchor,sprite:Z.sprite})}return(Q)=>k.get(Q)}function y0($,k,J){if($.sprite)return C1($.url,k,J,$.sprite,$.anchor);return I1($.url,k,J,$.anchor)}function Z0($,k,J){if(!$?.value)throw new j("TEXT_CONTENT_MISSING",`Text content is missing for built-in asset: ${k}`,{asset:k});let Q=document.createElementNS(_,"g"),Z=document.createElementNS(_,"text"),K=$.align??"middle",q=$.placement??"cell",W=$.fontSize??12,U=$.lineHeight??1.2,H=D1(K,J),V=T1(q,J);Z.setAttribute("x",String(H)),Z.setAttribute("y",String(V.y)),Z.setAttribute("text-anchor",K),Z.setAttribute("dominant-baseline",V.baseline),Z.setAttribute("font-family","Arial, Helvetica, sans-serif"),Z.setAttribute("font-size",String(W)),Z.setAttribute("font-weight",String($.fontWeight??700)),Z.setAttribute("fill",$.fill??"currentColor");let X=z1($.value);for(let[A,P]of X.entries()){let M=document.createElementNS(_,"tspan");M.setAttribute("x",String(H)),M.setAttribute("dy",A===0?"0":String(W*U)),M.textContent=P,Z.appendChild(M)}return Q.appendChild(Z),Q}function K0($,k,J){let Q=document.createElementNS(_,"g");switch($){case"rectangle":return E0(Q,R1(),k?.rectangle,J),Q;case"polygon":return E0(Q,k?.polygon?.points,k?.polygon,J),Q;case"line":return S1(Q,k?.line,k?.line,J),Q;case"circle":return B1(Q,k?.circle,J),Q;default:throw new j("PRIMITIVE_ASSET_UNKNOWN",`Unknown built-in primitive asset: ${$}`,{asset:$})}}function D1($,k){if($==="start")return-k/2;if($==="end")return k/2;return 0}function T1($,k){if($==="caption")return{y:-k,baseline:"text-before-edge"};return{y:-k/2,baseline:"middle"}}function z1($){return $.replace(/\r\n?/g,`
|
|
3
3
|
`).replace(/\n$/,"").split(`
|
|
4
|
-
`)}function w1(){return[[0,0],[1,0],[1,1],[0,1]]}function C0($,k,J,K){if(!k)return;let Z=document.createElementNS(h,"polygon");Z.setAttribute("points",k.map((q)=>$0(q,K)).join(" ")),k0(Z,J,{fill:"currentColor",stroke:"none"}),$.appendChild(Z)}function F1($,k,J,K){if(!k?.points)return;let Z=document.createElementNS(h,"polyline");Z.setAttribute("points",k.points.map((q)=>$0(q,K)).join(" ")),Z.setAttribute("fill","none"),Z.setAttribute("stroke-linecap",k.lineCap??"round"),Z.setAttribute("stroke-linejoin",k.lineJoin??"round"),k0(Z,J,{fill:"none",stroke:"currentColor"}),$.appendChild(Z)}function N1($,k,J){let K=$0([0.5,0.5],J),Z=document.createElementNS(h,"circle"),[q,Q]=K.split(",").map(Number);Z.setAttribute("cx",String(q)),Z.setAttribute("cy",String(Q)),Z.setAttribute("r",String(J*0.2)),k0(Z,k,{fill:"currentColor",stroke:"none"}),$.appendChild(Z)}function $0($,k){let J=C($[0],$[1],k),K=C(1,1,k);return`${J.rawX-K.rawX},${J.rawY-K.rawY}`}function k0($,k,J){if($.setAttribute("fill",k?.fill??J.fill),$.setAttribute("stroke",k?.stroke??J.stroke),$.setAttribute("stroke-width",String(k?.strokeWidth??0)),$.setAttribute("opacity",String(k?.opacity??1)),k?.dash)$.setAttribute("stroke-dasharray",k.dash.join(" "))}function T1($,k,J,K){if(!B0($))throw new j("INVALID_ASSET_URL",`Asset URL is unsafe: ${k}`,{asset:k});let Z=document.createElementNS(h,"g"),q=document.createElementNS(h,"image"),Q=I0($),[H,G]=K??[0.5,1];return q.setAttribute("href",Q),q.setAttributeNS("http://www.w3.org/1999/xlink","href",Q),q.setAttribute("x",String(-J*H)),q.setAttribute("y",String(-J*G)),q.setAttribute("width",String(J)),q.setAttribute("height",String(J)),q.setAttribute("preserveAspectRatio","xMidYMax meet"),Z.appendChild(q),Z}function R1($,k,J,K,Z){if(!B0($))throw new j("INVALID_ASSET_URL",`Asset URL is unsafe: ${k}`,{asset:k});let q=document.createElementNS(h,"g"),Q=document.createElementNS(h,"svg"),H=document.createElementNS(h,"image"),G=I0($),[V,U]=Z??[0.5,1],[Y,M,_,F]=K.rect;return Q.setAttribute("x",String(-J*V)),Q.setAttribute("y",String(-J*U)),Q.setAttribute("width",String(J)),Q.setAttribute("height",String(J)),Q.setAttribute("viewBox",`${Y} ${M} ${_} ${F}`),Q.setAttribute("preserveAspectRatio","xMidYMax meet"),H.setAttribute("href",G),H.setAttributeNS("http://www.w3.org/1999/xlink","href",G),H.setAttribute("x","0"),H.setAttribute("y","0"),H.setAttribute("width",String(K.sheetSize[0])),H.setAttribute("height",String(K.sheetSize[1])),Q.appendChild(H),q.appendChild(Q),q}function I0($){try{let k=document.baseURI;return typeof k==="string"?new URL($,k).href:$}catch{return $}}function B0($){let k=$.trim().toLowerCase();return k.length>0&&!k.startsWith("javascript:")}var S1=/^--[a-zA-Z0-9-_]+$/;function x0($,k){for(let[J,K]of Object.entries(k)){if(!S1.test(J))throw new j("INVALID_THEME_VAR",`Invalid CSS custom property name: ${J}`);$.style.setProperty(J,K)}}var A="http://www.w3.org/2000/svg",v0="text",C1=new Set(["rectangle","circle","polygon","line"]),z1={dashed:[12,8],dotted:[0,8]},q0=0.14,K0=0.35,D1=0.28,m0=0.4;function c0($,k,J){let K=V0(k),Z=k.scenes[0],q=u1(k),Q=s1(k),H=new Map((Z?.elements??[]).map((W)=>[W.id,W])),G=new Map((Z?.connectors??[]).map((W)=>[W.id,W])),V=g1(K,J?.label,k.className),U=z0(k);V.appendChild(f1()),x0(V,{...u(k.theme)??{},...k.themeVars??{},...J?.themeVars??{}});let Y=c1(k.layers),M=m1(Y);if(k.floor.visible)V.appendChild(v1(k,K));let _=new Map;for(let W of Q){let x=G.get(W.id)??{...W,presence:"removed"},P=a1(x,K);if(x.presence==="removed")P.isHidden=!0,S(P.node);$1(P,x.ambient??[]),V.appendChild(P.node),_.set(W.id,P)}let F=document.createElementNS(A,"g");F.classList.add("iso-depth-layer"),F.setAttribute("data-layer","depth"),V.appendChild(F);let L=document.createElementNS(A,"g");L.classList.add("iso-layer","iso-layer-labels"),L.setAttribute("data-layer","labels"),V.appendChild(L);let w=new Map,g=p1(q);for(let W of g){if(!M.get(W.layer))throw new j("MISSING_LAYER",`Unknown layer for "${W.id}": ${W.layer}`);let P=H.get(W.id)??{...W,presence:"removed"},N=i1(P,K,U);if(N.anchor=l0(k,P),N.node.classList.add(`iso-layer-${W.layer}`),N.node.setAttribute("data-layer",W.layer),P.presence==="removed")N.isHidden=!0,S(N.node);e0(N,P.ambient??[]),(i(W.asset)?L:F).appendChild(N.node),w.set(W.id,N)}return V._layerMap=M,V._elementMap=w,V._connectorMap=_,$.appendChild(V),V}function p0($,k,J=[]){let K=$._layout;if(!K)return;let Z=$._elementMap;if(Z)for(let Q of k){let H=Z.get(Q.id);if(!H)continue;H.current=Q,r1(H.node,Q,K),n0(H.node,Q,K),e0(H,Q.ambient??[])}let q=$._connectorMap;if(!q)return;for(let Q of J){let H=q.get(Q.id);if(!H)continue;d0(H,Q,K)}}function u0($,k){return $._elementMap?.get(k)}function s0($,k){return $._connectorMap?.get(k)}function z($){return V0($).viewBox}function Q0($,k){let J=$._layout,K=$._elementMap?.get(k);if(!J||!K||K.current.presence==="removed")return;return a0(x1(K.current,J,K.anchor))}function H0($,k){let J=V0($),[K,Z]=k.at,[q,Q]=k.size,H=l();for(let G of[[K,Z],[K+q,Z],[K,Z+Q],[K+q,Z+Q]]){let V=I(G[0],G[1],J.cellSize,J.selectedBounds.minX,J.selectedBounds.minY,J.padding.x,J.padding.y);H=G0(H,V.screenX,V.screenY)}return a0(H)}function i0($,k){$.setAttribute("viewBox",`${k.minX} ${k.minY} ${k.width} ${k.height}`)}function S($){$.style.visibility="hidden",$.style.pointerEvents="none"}function m($){$.style.visibility="visible",$.style.pointerEvents="auto"}function V0($){let k=$.grid.cellSize,J=$.layout.padding,K=I1($,k),Z=b1($,k),q=y1($.layout.bounds,K,Z),Q=q.maxX-q.minX+J.x*2,H=q.maxY-q.minY+J.y*2,G={minX:0,minY:0,width:y(Q||k),height:y(H||k)};return{cellSize:k,padding:J,contentBounds:K,floorBounds:Z,selectedBounds:q,viewBox:G}}function I1($,k){let J=l();for(let K of $.scenes){for(let Z of K.elements??[]){if(Z.presence==="removed")continue;J=Z0(J,B1($,Z,k))}for(let Z of K.connectors??[]){if(Z.presence==="removed")continue;J=Z0(J,E1(Z,k))}}return r0(J,k)}function B1($,k,J){let{rawX:K,rawY:Z}=C(k.pos[0]+k.size,k.pos[1]+k.size,J),q=s(k.size,J),[Q,H]=l0($,k);return{minX:K-q*Q,minY:Z-q*H,maxX:K+q*(1-Q),maxY:Z+q*(1-H)}}function x1($,k,J){let K=I($.pos[0]+$.size,$.pos[1]+$.size,k.cellSize,k.selectedBounds.minX,k.selectedBounds.minY,k.padding.x,k.padding.y),Z=s($.size,k.cellSize);return{minX:K.screenX-Z*J[0],minY:K.screenY-Z*J[1],maxX:K.screenX+Z*(1-J[0]),maxY:K.screenY+Z*(1-J[1])}}function l0($,k){return $.assets?.[k.asset]?.anchor??[0.5,1]}function E1($,k){let J=l();for(let[Q,H]of $.route){let{rawX:G,rawY:V}=C(Q,H,k);J=G0(J,G,V)}let K=Math.max(K0,m0,q0*2)*k,Z=$.style.strokeWidth/2+($.style.outlineWidth??0),q=K+Z;return{minX:J.minX-q,minY:J.minY-q,maxX:J.maxX+q,maxY:J.maxY+q}}function b1($,k){let J=$.floor.origin,[K,Z]=$.floor.size,q=[J,[J[0]+K,J[1]],[J[0],J[1]+Z],[J[0]+K,J[1]+Z]],Q=l();for(let[H,G]of q){let{rawX:V,rawY:U}=C(H,G,k);Q=G0(Q,V,U)}return r0(Q,k)}function y1($,k,J){if($==="content")return k;if($==="floor")return J;return Z0(k,J)}function l(){return{minX:Number.POSITIVE_INFINITY,minY:Number.POSITIVE_INFINITY,maxX:Number.NEGATIVE_INFINITY,maxY:Number.NEGATIVE_INFINITY}}function r0($,k){if(Number.isFinite($.minX))return $;return{minX:0,minY:0,maxX:k,maxY:k}}function a0($){let k=($.minX+$.maxX)/2,J=($.minY+$.maxY)/2,K=Math.max(1,$.maxX-$.minX),Z=Math.max(1,$.maxY-$.minY);return{minX:y(k-K/2),minY:y(J-Z/2),width:y(K),height:y(Z)}}function G0($,k,J){return{minX:Math.min($.minX,k),minY:Math.min($.minY,J),maxX:Math.max($.maxX,k),maxY:Math.max($.maxY,J)}}function Z0($,k){return{minX:Math.min($.minX,k.minX),minY:Math.min($.minY,k.minY),maxX:Math.max($.maxX,k.maxX),maxY:Math.max($.maxY,k.maxY)}}function y($){return Math.round($*1000)/1000}function g1($,k,J){let K=document.createElementNS(A,"svg");K.classList.add("iso-scene");for(let Z of J?.trim().split(/\s+/)??[])if(Z)K.classList.add(Z);if(K.setAttribute("width","100%"),K.setAttribute("height","100%"),K.setAttribute("viewBox",`${$.viewBox.minX} ${$.viewBox.minY} ${$.viewBox.width} ${$.viewBox.height}`),K.setAttribute("preserveAspectRatio","xMidYMid meet"),K.style.width="100%",K.style.height="100%",K.style.display="block",k)K.setAttribute("role","img"),K.setAttribute("aria-label",k);else K.setAttribute("aria-hidden","true");return K._layout=$,K._viewBoxW=$.viewBox.width,K._viewBoxH=$.viewBox.height,K}function f1(){let $=document.createElementNS(A,"style");return $.textContent=S0(),$}function v1($,k){let J=document.createElementNS(A,"g");J.classList.add("iso-floor-grid",`iso-layer-${$.floor.layer}`),J.setAttribute("data-layer",$.floor.layer);let[K,Z]=$.floor.origin,[q,Q]=$.floor.size,H=[X(K,Z,k),X(K+q,Z,k),X(K+q,Z+Q,k),X(K,Z+Q,k)],G=document.createElementNS(A,"polygon");G.classList.add("iso-floor-slab"),G.setAttribute("points",H.map(L0).join(" ")),G.setAttribute("fill","#dbe6f4"),G.setAttribute("fill-opacity","0.22"),G.setAttribute("stroke","#b9c9df"),G.setAttribute("stroke-width","1"),J.appendChild(G);for(let V=0;V<=q;V++)J.appendChild(E0(X(K+V,Z,k),X(K+V,Z+Q,k)));for(let V=0;V<=Q;V++)J.appendChild(E0(X(K,Z+V,k),X(K+q,Z+V,k)));return J}function E0($,k){let J=document.createElementNS(A,"line");return J.setAttribute("x1",String($.x)),J.setAttribute("y1",String($.y)),J.setAttribute("x2",String(k.x)),J.setAttribute("y2",String(k.y)),J.setAttribute("stroke","#2563eb"),J.setAttribute("stroke-width","1"),J.setAttribute("stroke-dasharray","5 5"),J.setAttribute("stroke-opacity","0.2"),J}function X($,k,J){let K=I($,k,J.cellSize,J.selectedBounds.minX,J.selectedBounds.minY,J.padding.x,J.padding.y);return{x:K.screenX,y:K.screenY}}function L0($){return`${$.x},${$.y}`}function m1($){return new Map($.map((k)=>[k.name,k]))}function c1($){return[...$].map((k,J)=>({name:k.name,order:k.order??J})).sort((k,J)=>k.order-J.order||k.name.localeCompare(J.name))}function p1($){return $.slice().sort((k,J)=>{let K=b0(k)-b0(J);if(K!==0)return K;let Z=k.pos[0]+k.pos[1]-(J.pos[0]+J.pos[1]);if(Z!==0)return Z;return k.id.localeCompare(J.id)})}function b0($){if(W0($.asset))return 0;if(i($.asset))return 2;return 1}function u1($){let k=new Map;for(let J of $.scenes)for(let K of J.elements??[])if(!k.has(K.id)||k.get(K.id)?.presence==="removed")k.set(K.id,K);return[...k.values()]}function s1($){let k=new Map;for(let J of $.scenes)for(let K of J.connectors??[])if(!k.has(K.id)||k.get(K.id)?.presence==="removed")k.set(K.id,K);return[...k.values()]}function i1($,k,J){let K=$.asset===v0?n($.text,$.asset,k.cellSize):W0($.asset)?e($.asset,$.primitive,k.cellSize):l1($,J,k.cellSize);K.classList.add("iso-element",`iso-element-${$.id}`),K.setAttribute("data-id",$.id),K.setAttribute("data-asset",$.asset),K.style.overflow="visible",K.style.pointerEvents="auto",n0(K,$,k);let Z=$.enter;if(Z&&Z!=="none"&&$.presence!=="removed"){let q=`iso-anim-${Z}`;return B(K,q,"enter"),K.addEventListener("animationend",()=>{K.style.animation=""},{once:!0}),{node:K,current:$,anchor:[0.5,1],isHidden:!1,entryKey:Z,ambient:new Set}}return{node:K,current:$,anchor:[0.5,1],isHidden:!1,ambient:new Set}}function i($){return $===v0}function W0($){return C1.has($)}function l1($,k,J){let K=k($.asset);if(!K)throw new j("ASSET_NOT_FOUND",`Asset not found: ${$.asset}`,{asset:$.asset,elementId:$.id});return D0(K,$.asset,J)}function r1($,k,J){if(!i(k.asset)&&!W0(k.asset))return;let K=i(k.asset)?n(k.text,k.asset,J.cellSize):e(k.asset,k.primitive,J.cellSize);o0($);while(K.firstChild){let Z=K.firstChild;K.removeChild(Z),$.appendChild(Z)}}function a1($,k){let J=document.createElementNS(A,"g"),K=document.createElementNS(A,"path"),Z={node:J,shaft:K,isHidden:!1,ambient:new Set};d0(Z,$,k);let q=$.enter;if(q&&q!=="none"&&$.presence!=="removed")B(J,`iso-anim-${q}`,"enter"),J.addEventListener("animationend",()=>{J.style.animation=""},{once:!0});return Z}function d0($,k,J){d1($.node,k),o0($.node);let K=t1(k.route,J);if(o1(k)){let Z=document.createElementNS(A,"path");Z.classList.add("iso-connector-outline"),J0(Z,k,K,{stroke:k.style.outline??k.style.stroke,strokeWidth:k.style.strokeWidth+k.style.outlineWidth*2,includeDash:!1}),$.node.appendChild(Z)}if($.shaft=document.createElementNS(A,"path"),$.shaft.classList.add("iso-connector-shaft"),J0($.shaft,k,K,{stroke:k.style.stroke,strokeWidth:k.style.strokeWidth,includeDash:!0}),$.node.appendChild($.shaft),k.style.variant==="road"&&k.style.lane==="center-dashed"){let Z=document.createElementNS(A,"path");Z.classList.add("iso-connector-lane"),J0(Z,k,K,{stroke:"#ffffff",strokeWidth:Math.max(1,k.style.strokeWidth*0.12),includeDash:!1}),Z.setAttribute("stroke-dasharray","8 8"),$.node.appendChild(Z)}y0($.node,k,"start",J),y0($.node,k,"end",J),$1($,k.ambient??[])}function o0($){while($.firstChild)$.removeChild($.firstChild)}function d1($,k){$.setAttribute("class",["iso-connector",`iso-connector-${k.id}`,`iso-connector-variant-${k.style.variant}`,`iso-connector-pattern-${k.style.pattern}`,`iso-connector-direction-${k.direction}`,`iso-layer-${k.layer}`].join(" ")),$.setAttribute("data-id",k.id),$.setAttribute("data-layer",k.layer),$.style.overflow="visible",$.style.pointerEvents="auto"}function o1($){return Boolean($.style.outline&&$.style.outlineWidth>0)}function J0($,k,J,K){if($.setAttribute("d",J),$.setAttribute("fill","none"),$.setAttribute("stroke",K.stroke),$.setAttribute("stroke-width",String(K.strokeWidth)),$.setAttribute("stroke-linecap","round"),$.setAttribute("stroke-linejoin","round"),$.setAttribute("opacity",String(k.style.opacity)),K.includeDash&&k.style.pattern!=="solid"){let Z=k.style.dash??z1[k.style.pattern];$.setAttribute("stroke-dasharray",Z.join(" "))}}function t1($,k){return $.map((J,K)=>{let Z=X(J[0],J[1],k);return`${K===0?"M":"L"} ${Z.x} ${Z.y}`}).join(" ")}function y0($,k,J,K){let Z=k[J];if(Z==="none"||k.route.length<2)return;let q=n1(Z,k,J,K);q.classList.add(`iso-connector-${J}`),$.appendChild(q)}function n1($,k,J,K){switch($){case"arrow":return e1(k,J,K);case"dot":return g0(k,J,K,!0);case"circle":return g0(k,J,K,!1);case"diamond":return $5(k,J,K);case"bar":return k5(k,J,K);case"none":throw new j("CONNECTOR_ENDPOINT_NONE","Cannot create geometry for endpoint none")}}function e1($,k,J){let K=r($,k),Z=t0($,k),q=[-Z[1],Z[0]],Q=[K[0]-Z[0]*K0,K[1]-Z[1]*K0],H=D1/2,G=[K,[Q[0]+q[0]*H,Q[1]+q[1]*H],[Q[0]-q[0]*H,Q[1]-q[1]*H]].map((U)=>X(U[0],U[1],J)),V=document.createElementNS(A,"polygon");return V.setAttribute("points",G.map(L0).join(" ")),V.setAttribute("fill",$.style.stroke),V.setAttribute("opacity",String($.style.opacity)),V}function g0($,k,J,K){let Z=r($,k),q=X(Z[0],Z[1],J),Q=document.createElementNS(A,"circle");return Q.setAttribute("cx",String(q.x)),Q.setAttribute("cy",String(q.y)),Q.setAttribute("r",String(q0*J.cellSize)),Q.setAttribute("stroke",$.style.stroke),Q.setAttribute("stroke-width",String(Math.max(1,$.style.strokeWidth))),Q.setAttribute("opacity",String($.style.opacity)),Q.setAttribute("fill",K?$.style.stroke:"none"),Q}function $5($,k,J){let K=r($,k),Z=q0,q=[[K[0],K[1]-Z],[K[0]+Z,K[1]],[K[0],K[1]+Z],[K[0]-Z,K[1]]],Q=document.createElementNS(A,"polygon");return Q.setAttribute("points",q.map((H)=>X(H[0],H[1],J)).map(L0).join(" ")),Q.setAttribute("fill",$.style.stroke),Q.setAttribute("opacity",String($.style.opacity)),Q}function k5($,k,J){let K=r($,k),Z=t0($,k),q=[-Z[1],Z[0]],Q=m0/2,H=X(K[0]+q[0]*Q,K[1]+q[1]*Q,J),G=X(K[0]-q[0]*Q,K[1]-q[1]*Q,J),V=document.createElementNS(A,"line");return V.setAttribute("x1",String(H.x)),V.setAttribute("y1",String(H.y)),V.setAttribute("x2",String(G.x)),V.setAttribute("y2",String(G.y)),V.setAttribute("stroke",$.style.stroke),V.setAttribute("stroke-width",String(Math.max(1,$.style.strokeWidth))),V.setAttribute("stroke-linecap","round"),V.setAttribute("opacity",String($.style.opacity)),V}function r($,k){return k==="start"?$.route[0]:$.route[$.route.length-1]}function t0($,k){let J=k==="start"?f0($.route[0],$.route[1]):f0($.route[$.route.length-2],$.route[$.route.length-1]),K=$.direction==="reverse"?[-J[0],-J[1]]:J;return J5(K)}function f0($,k){return[k[0]-$[0],k[1]-$[1]]}function J5($){let k=Math.hypot($[0],$[1]);if(k===0)return[1,0];return[$[0]/k,$[1]/k]}function n0($,k,J){let K=I(k.pos[0]+k.size,k.pos[1]+k.size,J.cellSize,J.selectedBounds.minX,J.selectedBounds.minY,J.padding.x,J.padding.y),q=s(k.size,J.cellSize)/J.cellSize;$.setAttribute("transform",`translate(${K.screenX} ${K.screenY}) scale(${q})`)}function e0($,k){let J=new Set((k??[]).map((K)=>K.name));for(let K of $.ambient)if(!J.has(K))$.node.classList.remove(`iso-ambient-${K}`);for(let K of J)if(!$.ambient.has(K))$.node.classList.add(`iso-ambient-${K}`);$.ambient=J}function $1($,k){let J=new Set((k??[]).map((K)=>K.name));for(let K of $.ambient)if(!J.has(K))$.shaft.classList.remove(`iso-ambient-${K}`);for(let K of J)$.shaft.classList.add(`iso-ambient-${K}`);$.ambient=J}function B($,k,J="enter"){$.style.opacity="1",$.style.animation="none",$.getBoundingClientRect();let K=J==="exit"?"var(--iso-anim-duration-exit, 300ms)":"var(--iso-anim-duration-enter, 400ms)",Z=J==="exit"?"var(--iso-anim-easing-exit, ease-in)":"var(--iso-anim-easing-enter, ease-out)";$.style.animation=`${k} ${K} ${Z} forwards`}function K5($){return $}function Z5($){return $*$*$}function q5($){return 1-(1-$)**3}function Q5($){return $<0.5?4*$*$*$:1-(-2*$+2)**3/2}function U0($){switch($){case"linear":return K5;case"easeInCubic":return Z5;case"easeOutCubic":return q5;case"easeInOutCubic":return Q5}}var k1={scrollDirection:"vertical",scrollOffset:{},minProgress:0,maxProgress:1,keyboardControls:!1,touchControls:!1,scrollSensitivity:1,transitionDuration:600,transitionEasing:"ease-in-out"};class j0{_engine=new b;_bundle=null;_sceneIndex=0;_progress=0;_paused=!1;_config=k1;_container=null;_sceneElement=null;_ownsEngine=!0;_rafId=null;_pendingProgress=null;_destroyed=!1;_listeners=new Map;_cameraAnim=null;_cameraState=null;_minScroll=0;_maxScroll=0;_touchStartY=0;_touchStartX=0;_isDragging=!1;_transitionAnim=null;get engine(){return this._engine}get progress(){return this._progress}getProgress(){return this._assertNotDestroyed(),this._progress}get sceneIndex(){return this._sceneIndex}getSceneIndex(){return this._assertNotDestroyed(),this._sceneIndex}get scenes(){return this._bundle?.scenes??[]}get paused(){return this._paused}get currentScene(){return this.scenes[this._sceneIndex]}init($,k={},J={}){if(this._assertNotDestroyed(),!$.scenes||$.scenes.length===0)throw new O("CONTROLLER_NO_SCENES","init() requires at least one compiled scene stop");this._cancelFrame(),this._bundle=$,this._engine=J.engine??new b,this._ownsEngine=!J.engine,this._sceneIndex=0,this._progress=0,this._paused=!1,this._config={...k1,...k},this._sceneElement=J.sceneElement??k.sceneElement??null,this._cameraState={viewBox:z($),target:{type:"reset"},isZoomed:!1},this._engine.init($),this._bindScroll()}setProgress($){if(this._assertNotDestroyed(),!Number.isFinite($))throw new O("CONTROLLER_PROGRESS_OUT_OF_RANGE","setProgress() requires a finite progress value");let k=Math.max(0,Math.min(1,$));if(k===this._progress&&!this._paused&&this._rafId!==null)return;if(this._progress=k,this._cancelCameraAnimation(),this._paused)return;this._scheduleProgressForward(k)}nextScene(){if(this._assertNotDestroyed(),this.scenes.length<=1)return;let $=(this._sceneIndex+1)%this.scenes.length;this._transitionToScene($)}prevScene(){if(this._assertNotDestroyed(),this.scenes.length<=1)return;let $=(this._sceneIndex-1+this.scenes.length)%this.scenes.length;this._transitionToScene($)}setSceneIndex($){if(this._assertNotDestroyed(),$<0||$>=this.scenes.length)throw new O("CONTROLLER_SCENE_INDEX_OUT_OF_RANGE",`Scene index ${$} is out of bounds [0, ${this.scenes.length-1}]`);this._transitionToScene($)}pause(){if(this._assertNotDestroyed(),this._paused)return;this._paused=!0,this._cancelFrame(),this._engine.pause(),this._applyPauseState(!0),this._emit("paused")}resume(){if(this._assertNotDestroyed(),!this._paused)return;this._paused=!1,this._engine.resume(),this._applyPauseState(!1),this._scheduleProgressForward(this._progress),this._emit("resumed")}isPaused(){return this._assertNotDestroyed(),this._paused}zoomToElement($,k={}){this._assertNotDestroyed();let J=this._getSceneSvg();if(!this._bundle||!J)throw new O("CAMERA_NOT_INITIALIZED","zoomToElement() requires an initialized scene SVG");let K=Q0(J,$);if(!K)throw new O("CAMERA_TARGET_NOT_FOUND",`Camera target element "${$}" was not found`,{elementId:$});this._applyCameraDestination(a(K,this._resolveCameraPadding(k)),{type:"element",id:$},k)}zoomToArea($,k={}){if(this._assertNotDestroyed(),!this._bundle||!this._getSceneSvg())throw new O("CAMERA_NOT_INITIALIZED","zoomToArea() requires an initialized scene SVG");this._assertValidCameraArea($);let J=H0(this._bundle,$);this._applyCameraDestination(a(J,this._resolveCameraPadding(k)),{type:"area",at:[...$.at],size:[...$.size]},k)}resetZoom($={}){if(this._assertNotDestroyed(),!this._bundle||!this._getSceneSvg())throw new O("CAMERA_NOT_INITIALIZED","resetZoom() requires an initialized scene SVG");this._applyCameraDestination(z(this._bundle),{type:"reset"},$)}getCameraState(){if(this._assertNotDestroyed(),!this._cameraState)throw new O("CAMERA_NOT_INITIALIZED","Camera state is not initialized");return L5(this._cameraState)}destroy(){if(this._assertNotDestroyed(),this._unbindScroll(),this._cancelFrame(),this._cancelTransition(),this._cancelCameraAnimation(),this._ownsEngine)this._engine.destroy();this._listeners.clear(),this._bundle=null,this._container=null,this._pendingProgress=null,this._cameraState=null,this._destroyed=!0}on($,k){this._assertNotDestroyed();let J=this._listeners.get($)??new Set;J.add(k),this._listeners.set($,J)}off($,k){this._assertNotDestroyed();let J=this._listeners.get($);if(J)J.delete(k)}_emit($,...k){let J=this._listeners.get($);if(J)for(let K of J)try{K(...k)}catch(Z){queueMicrotask(()=>{throw Z})}}_scheduleProgressForward($){if(this._pendingProgress=$,this._rafId!==null)return;this._rafId=requestAnimationFrame(()=>{this._rafId=null;let k=this._pendingProgress;if(this._pendingProgress=null,k===null||this._paused||this._destroyed)return;this._engine.setProgress(k),this._applyFrameUpdate(),this._emit("progress-change",k)})}_cancelFrame(){if(this._rafId!==null)cancelAnimationFrame(this._rafId),this._rafId=null;this._pendingProgress=null}_applyFrameUpdate(){if(!this._bundle)return;let $=this._sceneElement??this._container?.querySelector("svg")??null;if(!$)return;let k=this._engine.getFrameUpdates().map((K)=>({id:K.id,asset:K.asset,pos:K.pos,size:K.size,layer:K.layer,presence:K.lifecycle,enter:K.entry,exit:K.exit,ambient:K.ambient,text:K.text,primitive:K.primitive})),J=this._engine.getConnectorFrameUpdates().map((K)=>({id:K.id,route:K.route,layer:K.layer,presence:K.lifecycle,style:K.style,start:K.start,end:K.end,direction:K.direction,enter:K.entry,exit:K.exit,ambient:K.ambient}));p0($,k,J),this._applyLifecycleChanges(k),this._applyConnectorLifecycleChanges(J),this._applyCameraForProgress(this._progress)}_applyCameraForProgress($){let k=this._getSceneSvg();if(!this._bundle||!k)return;let J=this.scenes;if(J.length===0)return;let{previous:K,next:Z}=H5(J,$),q=this._effectiveCameraAt(K.index),Q=this._effectiveCameraAt(Z.index),H=this._resolveCameraViewBox(q),G=this._resolveCameraViewBox(Q),V=Z.scene.progress-K.scene.progress,U=V<=0?0:($-K.scene.progress)/V,Y=G1(Q.easing)(Math.max(0,Math.min(1,U))),M=V1(H,G,Y),_=Y<1?q.target:Q.target;this._setCameraViewBox(k,M,_)}_effectiveCameraAt($){for(let k=$;k>=0;k--){let J=this.scenes[k]?.camera;if(J)return{target:J.target,padding:J.padding,duration:J.duration,easing:J.easing}}return{target:{type:"reset"}}}_resolveCameraViewBox($){if(!this._bundle)throw new O("CAMERA_NOT_INITIALIZED","Camera requires an initialized bundle");if($.target.type==="reset")return z(this._bundle);if($.target.type==="area")return a(H0(this._bundle,{at:$.target.at,size:$.target.size}),$.padding??32);let k=this._getSceneSvg();if(!k)throw new O("CAMERA_NOT_INITIALIZED","Camera requires an initialized scene SVG");let J=Q0(k,$.target.id);if(!J)throw new O("CAMERA_TARGET_NOT_FOUND",`Camera target element "${$.target.id}" was not found`,{elementId:$.target.id});return a(J,$.padding??32)}_applyCameraDestination($,k,J){let K=this._getSceneSvg();if(!K)throw new O("CAMERA_NOT_INITIALIZED","Camera requires an initialized scene SVG");this._cancelCameraAnimation();let Z=this._resolveCameraDuration(J);if(Z===0){this._setCameraViewBox(K,$,k);return}let q=G5(K)??this._cameraState?.viewBox??$,Q=G1(J.easing??this._config.transitionEasing),H=performance.now(),G=(V)=>{let U=Math.min((V-H)/Z,1);if(this._setCameraViewBox(K,V1(q,$,Q(U)),k),U<1)this._cameraAnim=requestAnimationFrame(G);else this._cameraAnim=null};this._cameraAnim=requestAnimationFrame(G)}_setCameraViewBox($,k,J){i0($,k);let K=this._bundle?z(this._bundle):k;this._cameraState={viewBox:k,target:J,isZoomed:!V5(k,K)},this._emit("camera-change",this.getCameraState())}_getSceneSvg(){return this._sceneElement??this._container?.querySelector("svg")??null}_resolveCameraPadding($){let k=$.padding??32;if(!Number.isFinite(k)||k<0||k>2048)throw new O("INVALID_CAMERA_OPTIONS","Camera padding must be between 0 and 2048");return k}_resolveCameraDuration($){let k=$.duration??this._config.transitionDuration;if(!Number.isInteger(k)||k<0||k>1e4)throw new O("INVALID_CAMERA_OPTIONS","Camera duration must be an integer from 0 to 10000");return k}_assertValidCameraArea($){if(!Array.isArray($.at)||$.at.length!==2||!$.at.every((k)=>Number.isFinite(k)&&k>=0)||!Array.isArray($.size)||$.size.length!==2||!$.size.every((k)=>Number.isFinite(k)&&k>0))throw new O("INVALID_CAMERA_OPTIONS","Camera area must use non-negative at and positive size")}_applyLifecycleChanges($){for(let k of $){let J=this._engine.getLifecycleTransition(k.id);if(!J)continue;let K=this._sceneElement??this._container?.querySelector("svg");if(!K)continue;let Z=u0(K,k.id);if(!Z)continue;if(J.to==="entering"||J.to==="present")Z.isHidden=!1,m(Z.node);if(J1(J))this._applyEntryAnimation(k,Z);if(Z1(J)){this._applyExitAnimation({...k,exit:Q1(k.enter??"fade-in")},Z);continue}if(K1(J))this._applyExitAnimation(k,Z);if(q1(J)){Z.isHidden=!1,m(Z.node),this._applyEntryAnimation({...k,enter:H1(k.exit??"fade-out")},Z);continue}if(J.to==="removed")Z.isHidden=!0,S(Z.node)}}_applyConnectorLifecycleChanges($){for(let k of $){let J=this._engine.getConnectorLifecycleTransition(k.id);if(!J)continue;let K=this._sceneElement??this._container?.querySelector("svg");if(!K)continue;let Z=s0(K,k.id);if(!Z)continue;if(J.to==="entering"||J.to==="present")Z.isHidden=!1,m(Z.node);if(J1(J))this._applyConnectorEntryAnimation(k,Z);if(Z1(J)){this._applyConnectorExitAnimation({...k,exit:Q1(k.enter??"fade-in")},Z);continue}if(K1(J))this._applyConnectorExitAnimation(k,Z);if(q1(J)){Z.isHidden=!1,m(Z.node),this._applyConnectorEntryAnimation({...k,enter:H1(k.exit??"fade-out")},Z);continue}if(J.to==="removed")Z.isHidden=!0,S(Z.node)}}_applyEntryAnimation($,k){let J=$.enter??"fade-in";if(J==="none")return;B(k.node,`iso-anim-${J}`,"enter");let K=k.node.style.animation;k.node.addEventListener("animationend",()=>{if(k.node.style.animation===K)k.node.style.animation=""},{once:!0})}_applyExitAnimation($,k){let J=$.exit??"fade-out";if(J==="none"){S(k.node);return}B(k.node,`iso-anim-${J}`,"exit");let K=k.node.style.animation;k.node.addEventListener("animationend",()=>{if(k.node.style.animation===K)S(k.node)},{once:!0})}_applyConnectorEntryAnimation($,k){let J=$.enter??"fade-in";if(J==="none")return;B(k.node,`iso-anim-${J}`,"enter");let K=k.node.style.animation;k.node.addEventListener("animationend",()=>{if(k.node.style.animation===K)k.node.style.animation=""},{once:!0})}_applyConnectorExitAnimation($,k){let J=$.exit??"fade-out";if(J==="none"){S(k.node);return}B(k.node,`iso-anim-${J}`,"exit");let K=k.node.style.animation;k.node.addEventListener("animationend",()=>{if(k.node.style.animation===K)S(k.node)},{once:!0})}_transitionToScene($){if(this._cancelTransition(),$===this._sceneIndex)return;this._sceneIndex=$,this._emit("scene-change",$);let k=this.scenes[$],J=this._progress,K=k.progress,Z=this._config.transitionDuration;if(Z>0&&J!==K){this._animateProgress(J,K,Z);return}this._progress=K,this._scheduleProgressForward(K)}_animateProgress($,k,J){let K=U0(this._config.transitionEasing==="ease-in-out"?"easeInOutCubic":this._config.transitionEasing==="ease-out"?"easeOutCubic":"linear"),Z=performance.now(),q=(Q)=>{let H=Q-Z,G=Math.min(H/J,1),V=K(G),U=$+(k-$)*V;if(this.setProgress(U),G<1)this._transitionAnim=requestAnimationFrame(q);else this._transitionAnim=null};this._transitionAnim=requestAnimationFrame(q)}_cancelTransition(){if(this._transitionAnim!==null)cancelAnimationFrame(this._transitionAnim),this._transitionAnim=null}_cancelCameraAnimation(){if(this._cameraAnim!==null)cancelAnimationFrame(this._cameraAnim),this._cameraAnim=null}_bindScroll(){let $=this._config.container;if(!$)return;if(this._container=$,this._calculateScrollBounds(),$.addEventListener("scroll",this._onScroll,{passive:!0}),window.addEventListener("resize",this._onResize,{passive:!0}),this._config.keyboardControls)document.addEventListener("keydown",this._onKeyDown);if(this._config.touchControls)$.addEventListener("touchstart",this._onTouchStart,{passive:!0}),$.addEventListener("touchmove",this._onTouchMove,{passive:!1}),$.addEventListener("touchend",this._onTouchEnd)}_unbindScroll(){let $=this._config.container;if(!$)return;$.removeEventListener("scroll",this._onScroll),window.removeEventListener("resize",this._onResize),document.removeEventListener("keydown",this._onKeyDown),$.removeEventListener("touchstart",this._onTouchStart),$.removeEventListener("touchmove",this._onTouchMove),$.removeEventListener("touchend",this._onTouchEnd)}_calculateScrollBounds(){let $=this._config.container;if(!$)return;let k=this._config.scrollOffset??{};if(this._config.scrollDirection==="horizontal"){this._minScroll=k.left??0,this._maxScroll=$.scrollWidth-$.clientWidth-(k.right??0);return}this._minScroll=k.top??0,this._maxScroll=$.scrollHeight-$.clientHeight-(k.bottom??0)}_onScroll=()=>{if(this._paused||this._destroyed)return;let $=this._config.container;if(!$)return;let k=this._config.scrollDirection==="horizontal"?$.scrollLeft:$.scrollTop,J=this._maxScroll-this._minScroll;if(J<=0)return;let K=(k-this._minScroll)/J,Z=Math.max(this._config.minProgress??0,Math.min(this._config.maxProgress??1,K)),q=this._config.scrollSensitivity??1;if(Z!==this._progress)this.setProgress(Z*q)};_onResize=()=>{if(this._destroyed)return;this._calculateScrollBounds()};_onKeyDown=($)=>{if(this._destroyed)return;if($.key==="ArrowRight"||$.key==="ArrowDown"||$.key===" ")$.preventDefault(),this.nextScene();else if($.key==="ArrowLeft"||$.key==="ArrowUp")$.preventDefault(),this.prevScene()};_onTouchStart=($)=>{if(this._destroyed)return;this._isDragging=!0;let k=$.touches[0];if(this._config.scrollDirection==="horizontal")this._touchStartX=k.clientX;else this._touchStartY=k.clientY};_onTouchMove=($)=>{if(this._destroyed)return;if(!this._isDragging)return;let k=$.touches[0],J=this._config.scrollDirection==="horizontal"?this._touchStartX-k.clientX:this._touchStartY-k.clientY,K=this._config.scrollSensitivity??1,Z=J/300*K,q=Math.max(0,Math.min(1,this._progress+Z));this.setProgress(q)};_onTouchEnd=()=>{if(this._destroyed)return;this._isDragging=!1};_applyPauseState($){let k=this._config.container;if(!k)return;let J=k.querySelector("svg");if(!J)return;let K=$?"paused":"running",Z=J.querySelectorAll('[class*="iso-ambient-"]');for(let q=0;q<Z.length;q++){let Q=Z[q];Q.style.animationPlayState=K}}_assertNotDestroyed(){if(!this._destroyed)return;throw new O("CONTROLLER_DESTROYED","AnimationController has been destroyed")}}function J1($){return $.from==="removed"&&$.to==="entering"}function K1($){return $.to==="exiting"}function Z1($){return $.to==="removed"&&$.from!=="exiting"}function q1($){return $.from==="exiting"&&$.to!=="removed"}function Q1($){switch($){case"fade-in":return"fade-out";case"fade-in-grow":return"fade-out-shrink";case"fall-in":return"rise-away";case"rise-from-ground":return"fall-through-ground";case"slide-in-left":return"slide-out-left";case"slide-in-right":return"slide-out-right";case"flip-in":return"flip-out";case"none":return"none"}}function H1($){switch($){case"fade-out":return"fade-in";case"fade-out-shrink":return"fade-in-grow";case"fall-through-ground":return"rise-from-ground";case"rise-away":return"fall-in";case"slide-out-left":return"slide-in-left";case"slide-out-right":return"slide-in-right";case"flip-out":return"flip-in";case"none":return"none"}}function H5($,k){let J=0,K=$.length-1;for(let Z=0;Z<$.length;Z++){if($[Z].progress<=k)J=Z;if($[Z].progress>=k){K=Z;break}}return{previous:{scene:$[J],index:J},next:{scene:$[K],index:K}}}function a($,k){return{minX:D($.minX-k),minY:D($.minY-k),width:D(Math.max(1,$.width+k*2)),height:D(Math.max(1,$.height+k*2))}}function V1($,k,J){return{minX:D($.minX+(k.minX-$.minX)*J),minY:D($.minY+(k.minY-$.minY)*J),width:D($.width+(k.width-$.width)*J),height:D($.height+(k.height-$.height)*J)}}function V5($,k){return $.minX===k.minX&&$.minY===k.minY&&$.width===k.width&&$.height===k.height}function G5($){let k=$.getAttribute("viewBox");if(!k)return;let J=k.trim().split(/\s+/).map(Number);if(J.length!==4||J.some((K)=>!Number.isFinite(K)))return;return{minX:J[0],minY:J[1],width:J[2],height:J[3]}}function G1($){return U0($==="ease-in-out"?"easeInOutCubic":$==="ease-out"?"easeOutCubic":"linear")}function L5($){return{viewBox:{...$.viewBox},target:$.target?.type==="area"?{type:"area",at:[...$.target.at],size:[...$.target.size]}:$.target?{...$.target}:void 0,isZoomed:$.isZoomed}}function D($){return Math.round($*1000)/1000}function L1($){let k=W5($),J=k.length*8;k.push(128);while(k.length%64!==56)k.push(0);for(let Q=7;Q>=0;Q--)k.push(Math.floor(J/2**(Q*8))&255);let K=[1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225],Z=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298],q=Array(64);for(let Q=0;Q<k.length;Q+=64){for(let L=0;L<16;L++){let w=Q+L*4;q[L]=(k[w]<<24|k[w+1]<<16|k[w+2]<<8|k[w+3])>>>0}for(let L=16;L<64;L++){let w=T(q[L-15],7)^T(q[L-15],18)^q[L-15]>>>3,g=T(q[L-2],17)^T(q[L-2],19)^q[L-2]>>>10;q[L]=q[L-16]+w+q[L-7]+g>>>0}let[H,G,V,U,Y,M,_,F]=K;for(let L=0;L<64;L++){let w=T(Y,6)^T(Y,11)^T(Y,25),g=Y&M^~Y&_,W=F+w+g+Z[L]+q[L]>>>0,x=T(H,2)^T(H,13)^T(H,22),P=H&G^H&V^G&V,N=x+P>>>0;F=_,_=M,M=Y,Y=U+W>>>0,U=V,V=G,G=H,H=W+N>>>0}K[0]=K[0]+H>>>0,K[1]=K[1]+G>>>0,K[2]=K[2]+V>>>0,K[3]=K[3]+U>>>0,K[4]=K[4]+Y>>>0,K[5]=K[5]+M>>>0,K[6]=K[6]+_>>>0,K[7]=K[7]+F>>>0}return K.map((Q)=>Q.toString(16).padStart(8,"0")).join("")}function W5($){return Array.from(new TextEncoder().encode($))}function T($,k){return $>>>k|$<<32-k}var W1="isostate-runtime-bundle",O0="0.3.0",U5=/^[a-f0-9]{64}$/;function j5($,k,J={}){O5($),Y5(k);let K=new b;K.init(k);let Z=c0($,k,{label:J.label,themeVars:J.themeVars}),q;if(J.controller!==void 0&&J.controller!==!1)q=new j0,q.init(k,{...J.controller,container:J.controller.container??$,sceneElement:Z},{engine:K,sceneElement:Z});let Q=!1;return{svg:Z,engine:K,controller:q,getResolvedConfig:()=>M5(k,J),destroy:()=>{if(Q)return;if(Q=!0,q?.destroy(),K.destroy(),Z.parentNode===$)$.removeChild(Z);else Z.parentNode?.removeChild(Z)}}}function O5($){if(!$||typeof $.appendChild!=="function"||typeof $.removeChild!=="function")throw new j("INVALID_MOUNT_TARGET","mountScene() requires a DOM HTMLElement target")}function Y5($){if(!$||typeof $!=="object")throw new j("BUNDLE_FORMAT_MISSING","Runtime bundle must be a plain object");if($._format!==W1)throw new j("BUNDLE_FORMAT_MISSING","Runtime bundle format is missing or unsupported",{expected:W1});if(!Array.isArray($.scenes)||$.scenes.length===0)throw new j("BUNDLE_FORMAT_MISSING","Runtime bundle must include compiled scenes[]");if(U1($._version)!==U1(O0))throw new j("BUNDLE_VERSION_MISMATCH",`Runtime bundle version ${$._version} is not compatible with runtime ${O0}`,{bundleVersion:$._version,runtimeVersion:O0});if(!$._digest)throw new j("BUNDLE_DIGEST_MISSING","Runtime bundle digest is missing");if(typeof $._digest!=="string"||!U5.test($._digest))throw new j("BUNDLE_DIGEST_MISMATCH","Runtime bundle digest is malformed");let{_digest:k,...J}=$,K=L1(X5(J));if(K!==k)throw new j("BUNDLE_DIGEST_MISMATCH","Runtime bundle digest does not match bundle content",{expected:k,actual:K})}function M5($,k={}){return{grid:{cellSize:$.grid.cellSize},floor:{...$.floor},layout:{...$.layout,padding:{...$.layout.padding},align:[...$.layout.align]},viewBox:z($),camera:{viewBox:z($),isZoomed:!1},theme:$.theme,themeVars:A5($,k.themeVars),scenes:$.scenes.map((J)=>({id:J.id,progress:J.progress})),layerOrder:$.layers.map((J)=>({name:J.name,order:J.order})).sort((J,K)=>J.order-K.order||J.name.localeCompare(K.name))}}function A5($,k={}){return{...u($.theme)??{},...$.themeVars??{},...k}}function U1($){let k=Number.parseInt(String($).split(".")[0]??"",10);return Number.isFinite(k)?k:Number.NaN}function X5($){return JSON.stringify(Y0($))}function Y0($){if(Array.isArray($))return $.map((J)=>J===void 0?null:Y0(J));if(!P5($))return $;let k={};for(let J of Object.keys($).sort()){let K=$[J];if(K!==void 0)k[J]=Y0(K)}return k}function P5($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function $2($,k,J,K,Z,q,Q){return I($,k,J,K,Z,q,Q)}export{$2 as projectToScreen,j5 as mountScene};
|
|
4
|
+
`)}function R1(){return[[0,0],[1,0],[1,1],[0,1]]}function E0($,k,J,Q){if(!k)return;let Z=document.createElementNS(_,"polygon");Z.setAttribute("points",k.map((K)=>q0(K,Q)).join(" ")),W0(Z,J,{fill:"currentColor",stroke:"none"}),$.appendChild(Z)}function S1($,k,J,Q){if(!k?.points)return;let Z=document.createElementNS(_,"polyline");Z.setAttribute("points",k.points.map((K)=>q0(K,Q)).join(" ")),Z.setAttribute("fill","none"),Z.setAttribute("stroke-linecap",k.lineCap??"round"),Z.setAttribute("stroke-linejoin",k.lineJoin??"round"),W0(Z,J,{fill:"none",stroke:"currentColor"}),$.appendChild(Z)}function B1($,k,J){let Q=q0([0.5,0.5],J),Z=document.createElementNS(_,"circle"),[K,q]=Q.split(",").map(Number);Z.setAttribute("cx",String(K)),Z.setAttribute("cy",String(q)),Z.setAttribute("r",String(J*0.2)),W0(Z,k,{fill:"currentColor",stroke:"none"}),$.appendChild(Z)}function q0($,k){let J=B($[0],$[1],k),Q=B(1,1,k);return`${J.rawX-Q.rawX},${J.rawY-Q.rawY}`}function W0($,k,J){if($.setAttribute("fill",k?.fill??J.fill),$.setAttribute("stroke",k?.stroke??J.stroke),$.setAttribute("stroke-width",String(k?.strokeWidth??0)),$.setAttribute("opacity",String(k?.opacity??1)),k?.dash)$.setAttribute("stroke-dasharray",k.dash.join(" "))}function I1($,k,J,Q){if(!g0($))throw new j("INVALID_ASSET_URL",`Asset URL is unsafe: ${k}`,{asset:k});let Z=document.createElementNS(_,"g"),K=document.createElementNS(_,"image"),q=f0($),[W,U]=Q??[0.5,1];return K.setAttribute("href",q),K.setAttributeNS("http://www.w3.org/1999/xlink","href",q),K.setAttribute("x",String(-J*W)),K.setAttribute("y",String(-J*U)),K.setAttribute("width",String(J)),K.setAttribute("height",String(J)),K.setAttribute("preserveAspectRatio","xMidYMax meet"),Z.appendChild(K),Z}function C1($,k,J,Q,Z){if(!g0($))throw new j("INVALID_ASSET_URL",`Asset URL is unsafe: ${k}`,{asset:k});let K=document.createElementNS(_,"g"),q=document.createElementNS(_,"svg"),W=document.createElementNS(_,"image"),U=f0($),[H,V]=Z??[0.5,1],[X,A,P,M]=Q.rect;return q.setAttribute("x",String(-J*H)),q.setAttribute("y",String(-J*V)),q.setAttribute("width",String(J)),q.setAttribute("height",String(J)),q.setAttribute("viewBox",`${X} ${A} ${P} ${M}`),q.setAttribute("preserveAspectRatio","xMidYMax meet"),W.setAttribute("href",U),W.setAttributeNS("http://www.w3.org/1999/xlink","href",U),W.setAttribute("x","0"),W.setAttribute("y","0"),W.setAttribute("width",String(Q.sheetSize[0])),W.setAttribute("height",String(Q.sheetSize[1])),q.appendChild(W),K.appendChild(q),K}function f0($){try{let k=document.baseURI;return typeof k==="string"?new URL($,k).href:$}catch{return $}}function g0($){let k=$.trim().toLowerCase();return k.length>0&&!k.startsWith("javascript:")}var x1=/^--[a-zA-Z0-9-_]+$/;function m0($,k){for(let[J,Q]of Object.entries(k)){if(!x1.test(J))throw new j("INVALID_THEME_VAR",`Invalid CSS custom property name: ${J}`);$.style.setProperty(J,Q)}}var w="http://www.w3.org/2000/svg",s0="text",E1=new Set(["rectangle","circle","polygon","line"]),b1={dashed:[12,8],dotted:[0,8]},j0=0.14,U0=0.35,y1=0.28,l0=0.4;function a0($,k,J){let Q=n(k),Z=k.scenes[0],K=r1(k),q=o1(k),W=new Map((Z?.elements??[]).map((G)=>[G.id,G])),U=new Map((Z?.connectors??[]).map((G)=>[G.id,G])),H=u1(Q,J?.label,k.className),V=b0(k);H.appendChild(i1()),m0(H,{...d(k.theme)??{},...k.themeVars??{},...J?.themeVars??{}});let X=a1(k.layers),A=l1(X);if(k.floor.visible)H.appendChild(s1(k,Q));let P=new Map;for(let G of q){let E=U.get(G.id)??{...G,presence:"removed"},F=k5(E,Q);if(E.presence==="removed")F.isHidden=!0,S(F.node);q1(F,E.ambient??[]),H.appendChild(F.node),P.set(G.id,F)}let M=document.createElementNS(w,"g");M.classList.add("iso-depth-layer"),M.setAttribute("data-layer","depth"),H.appendChild(M);let L=document.createElementNS(w,"g");L.classList.add("iso-layer","iso-layer-labels"),L.setAttribute("data-layer","labels"),H.appendChild(L);let h=new Map,c=k1(K);for(let G of c){if(!A.get(G.layer))throw new j("MISSING_LAYER",`Unknown layer for "${G.id}": ${G.layer}`);let F=W.get(G.id)??{...G,presence:"removed"},D=n1(F,Q,V);if(D.anchor=t0(k,F),D.node.classList.add(`iso-layer-${G.layer}`),D.node.setAttribute("data-layer",G.layer),F.presence==="removed")D.isHidden=!0,S(D.node);K1(D,F.ambient??[]),(m(G.asset)?L:M).appendChild(D.node),h.set(G.id,D)}return H._layerMap=A,H._elementMap=h,H._connectorMap=P,H._depthGroup=M,$.appendChild(H),H}function d0($,k,J=[]){let Q=$._layout;if(!Q)return;let Z=$._elementMap;if(Z){for(let q of k){let W=Z.get(q.id);if(!W)continue;let U=W.current;if(W.current=q,!$5(U,q))e1(W.node,q,Q);Z1(W.node,q,Q),K1(W,q.ambient??[])}if($._depthGroup)d1($._depthGroup,Z)}let K=$._connectorMap;if(!K)return;for(let q of J){let W=K.get(q.id);if(!W)continue;J1(W,q,Q)}}function C($,k){return $._elementMap?.get(k)}function r0($,k){return $._connectorMap?.get(k)}function I($){return n($).viewBox}function o0($){let k=n($);return{cellSize:k.cellSize,padding:k.padding,selectedBounds:k.selectedBounds}}function o($,k){let J=$._layout,Q=$._elementMap?.get(k);if(!J||!Q||Q.current.presence==="removed")return;return $1(m1(Q.current,J,Q.anchor))}function V0($,k){let J=n($),[Q,Z]=k.at,[K,q]=k.size,W=t();for(let U of[[Q,Z],[Q+K,Z],[Q,Z+q],[Q+K,Z+q]]){let H=R(U[0],U[1],J.cellSize,J.selectedBounds.minX,J.selectedBounds.minY,J.padding.x,J.padding.y);W=G0(W,H.screenX,H.screenY)}return $1(W)}function n0($,k){$.setAttribute("viewBox",`${k.minX} ${k.minY} ${k.width} ${k.height}`)}function S($){$.style.visibility="hidden",$.style.pointerEvents="none"}function i($){$.style.visibility="visible",$.style.pointerEvents="auto"}function n($){let k=$.grid.cellSize,J=$.layout.padding,Q=f1($,k),Z=v1($,k),K=p1($.layout.bounds,Q,Z),q=K.maxX-K.minX+J.x*2,W=K.maxY-K.minY+J.y*2,U={minX:0,minY:0,width:g(q||k),height:g(W||k)};return{cellSize:k,padding:J,contentBounds:Q,floorBounds:Z,selectedBounds:K,viewBox:U}}function f1($,k){let J=t();for(let Q of $.scenes){for(let Z of Q.elements??[]){if(Z.presence==="removed")continue;J=L0(J,g1($,Z,k))}for(let Z of Q.connectors??[]){if(Z.presence==="removed")continue;J=L0(J,c1(Z,k))}}return e0(J,k)}function g1($,k,J){let{rawX:Q,rawY:Z}=B(k.pos[0]+k.size,k.pos[1]+k.size,J),K=f(k.size,J),[q,W]=t0($,k);return{minX:Q-K*q,minY:Z-K*W,maxX:Q+K*(1-q),maxY:Z+K*(1-W)}}function m1($,k,J){let Q=R($.pos[0]+$.size,$.pos[1]+$.size,k.cellSize,k.selectedBounds.minX,k.selectedBounds.minY,k.padding.x,k.padding.y),Z=f($.size,k.cellSize);return{minX:Q.screenX-Z*J[0],minY:Q.screenY-Z*J[1],maxX:Q.screenX+Z*(1-J[0]),maxY:Q.screenY+Z*(1-J[1])}}function t0($,k){return $.assets?.[k.asset]?.anchor??[0.5,1]}function c1($,k){let J=t();for(let[q,W]of $.route){let{rawX:U,rawY:H}=B(q,W,k);J=G0(J,U,H)}let Q=Math.max(U0,l0,j0*2)*k,Z=$.style.strokeWidth/2+($.style.outlineWidth??0),K=Q+Z;return{minX:J.minX-K,minY:J.minY-K,maxX:J.maxX+K,maxY:J.maxY+K}}function v1($,k){let J=$.floor.origin,[Q,Z]=$.floor.size,K=[J,[J[0]+Q,J[1]],[J[0],J[1]+Z],[J[0]+Q,J[1]+Z]],q=t();for(let[W,U]of K){let{rawX:H,rawY:V}=B(W,U,k);q=G0(q,H,V)}return e0(q,k)}function p1($,k,J){if($==="content")return k;if($==="floor")return J;return L0(k,J)}function t(){return{minX:Number.POSITIVE_INFINITY,minY:Number.POSITIVE_INFINITY,maxX:Number.NEGATIVE_INFINITY,maxY:Number.NEGATIVE_INFINITY}}function e0($,k){if(Number.isFinite($.minX))return $;return{minX:0,minY:0,maxX:k,maxY:k}}function $1($){let k=($.minX+$.maxX)/2,J=($.minY+$.maxY)/2,Q=Math.max(1,$.maxX-$.minX),Z=Math.max(1,$.maxY-$.minY);return{minX:g(k-Q/2),minY:g(J-Z/2),width:g(Q),height:g(Z)}}function G0($,k,J){return{minX:Math.min($.minX,k),minY:Math.min($.minY,J),maxX:Math.max($.maxX,k),maxY:Math.max($.maxY,J)}}function L0($,k){return{minX:Math.min($.minX,k.minX),minY:Math.min($.minY,k.minY),maxX:Math.max($.maxX,k.maxX),maxY:Math.max($.maxY,k.maxY)}}function g($){return Math.round($*1000)/1000}function u1($,k,J){let Q=document.createElementNS(w,"svg");Q.classList.add("iso-scene");for(let Z of J?.trim().split(/\s+/)??[])if(Z)Q.classList.add(Z);if(Q.setAttribute("width","100%"),Q.setAttribute("height","100%"),Q.setAttribute("viewBox",`${$.viewBox.minX} ${$.viewBox.minY} ${$.viewBox.width} ${$.viewBox.height}`),Q.setAttribute("preserveAspectRatio","xMidYMid meet"),Q.style.width="100%",Q.style.height="100%",Q.style.display="block",k)Q.setAttribute("role","img"),Q.setAttribute("aria-label",k);else Q.setAttribute("aria-hidden","true");return Q._layout=$,Q._viewBoxW=$.viewBox.width,Q._viewBoxH=$.viewBox.height,Q}function i1(){let $=document.createElementNS(w,"style");return $.textContent=x0(),$}function s1($,k){let J=document.createElementNS(w,"g");J.classList.add("iso-floor-grid",`iso-layer-${$.floor.layer}`),J.setAttribute("data-layer",$.floor.layer);let[Q,Z]=$.floor.origin,[K,q]=$.floor.size,W=[O(Q,Z,k),O(Q+K,Z,k),O(Q+K,Z+q,k),O(Q,Z+q,k)],U=document.createElementNS(w,"polygon");U.classList.add("iso-floor-slab"),U.setAttribute("points",W.map(Y0).join(" ")),U.setAttribute("fill","#dbe6f4"),U.setAttribute("fill-opacity","0.22"),U.setAttribute("stroke","#b9c9df"),U.setAttribute("stroke-width","1"),J.appendChild(U);for(let H=0;H<=K;H++)J.appendChild(c0(O(Q+H,Z,k),O(Q+H,Z+q,k)));for(let H=0;H<=q;H++)J.appendChild(c0(O(Q,Z+H,k),O(Q+K,Z+H,k)));return J}function c0($,k){let J=document.createElementNS(w,"line");return J.setAttribute("x1",String($.x)),J.setAttribute("y1",String($.y)),J.setAttribute("x2",String(k.x)),J.setAttribute("y2",String(k.y)),J.setAttribute("stroke","#2563eb"),J.setAttribute("stroke-width","1"),J.setAttribute("stroke-dasharray","5 5"),J.setAttribute("stroke-opacity","0.2"),J}function O($,k,J){let Q=R($,k,J.cellSize,J.selectedBounds.minX,J.selectedBounds.minY,J.padding.x,J.padding.y);return{x:Q.screenX,y:Q.screenY}}function Y0($){return`${$.x},${$.y}`}function l1($){return new Map($.map((k)=>[k.name,k]))}function a1($){return[...$].map((k,J)=>({name:k.name,order:k.order??J})).sort((k,J)=>k.order-J.order||k.name.localeCompare(J.name))}function k1($){return $.slice().sort((k,J)=>{let Q=v0(k)-v0(J);if(Q!==0)return Q;let Z=k.pos[0]+k.pos[1]-(J.pos[0]+J.pos[1]);if(Z!==0)return Z;return k.id.localeCompare(J.id)})}function v0($){if(m($.asset))return 1;return 0}function d1($,k){let J=[];for(let q of k.values()){if(q.node.parentElement!==$)continue;J.push(q.current)}if(J.length<2)return;let Q=k1(J),Z=[...$.childNodes],K=Z.length===Q.length;if(K)for(let q=0;q<Q.length;q++){let W=Q[q]?.id;if(Z[q]?.getAttribute("data-id")!==W){K=!1;break}}if(K)return;for(let q of Q){let W=k.get(q.id);if(W)$.appendChild(W.node)}}function r1($){let k=new Map;for(let J of $.scenes)for(let Q of J.elements??[])if(!k.has(Q.id)||k.get(Q.id)?.presence==="removed")k.set(Q.id,Q);return[...k.values()]}function o1($){let k=new Map;for(let J of $.scenes)for(let Q of J.connectors??[])if(!k.has(Q.id)||k.get(Q.id)?.presence==="removed")k.set(Q.id,Q);return[...k.values()]}function n1($,k,J){let Q=$.asset===s0?Z0($.text,$.asset,k.cellSize):X0($.asset)?K0($.asset,$.primitive,k.cellSize):t1($,J,k.cellSize);Q.classList.add("iso-element",`iso-element-${$.id}`),Q.setAttribute("data-id",$.id),Q.setAttribute("data-asset",$.asset),Q.style.overflow="visible",Q.style.pointerEvents="auto",Z1(Q,$,k);let Z=$.enter;if(Z&&Z!=="none"&&$.presence!=="removed"){let K=`iso-anim-${Z}`;return x(Q,K,"enter"),Q.addEventListener("animationend",()=>{Q.style.animation=""},{once:!0}),{node:Q,current:$,anchor:[0.5,1],isHidden:!1,entryKey:Z,ambient:new Set}}return{node:Q,current:$,anchor:[0.5,1],isHidden:!1,ambient:new Set}}function m($){return $===s0}function X0($){return E1.has($)}function t1($,k,J){let Q=k($.asset);if(!Q)throw new j("ASSET_NOT_FOUND",`Asset not found: ${$.asset}`,{asset:$.asset,elementId:$.id});return y0(Q,$.asset,J)}function e1($,k,J){if(!m(k.asset)&&!X0(k.asset))return;let Q=m(k.asset)?Z0(k.text,k.asset,J.cellSize):K0(k.asset,k.primitive,J.cellSize);J5($);while(Q.firstChild){let Z=Q.firstChild;Q.removeChild(Z),$.appendChild(Z)}}function $5($,k){if(!$)return!1;if($.asset!==k.asset)return!1;if(!m(k.asset)&&!X0(k.asset))return!0;if(m(k.asset))return r($.text,k.text);return r($.primitive,k.primitive)}function r($,k){if($===k)return!0;if(typeof $!==typeof k)return!1;if($===null||k===null||typeof $!=="object"||typeof k!=="object")return!1;if(Array.isArray($)||Array.isArray(k)){if(!Array.isArray($)||!Array.isArray(k)||$.length!==k.length)return!1;return $.every((Z,K)=>r(Z,k[K]))}let J=Object.keys($),Q=Object.keys(k);if(J.length!==Q.length)return!1;return J.every((Z)=>r($[Z],k[Z]))}function k5($,k){let J=document.createElementNS(w,"g"),Q=document.createElementNS(w,"path"),Z={node:J,shaft:Q,isHidden:!1,ambient:new Set};J1(Z,$,k);let K=$.enter;if(K&&K!=="none"&&$.presence!=="removed")x(J,`iso-anim-${K}`,"enter"),J.addEventListener("animationend",()=>{J.style.animation=""},{once:!0});return Z}function J1($,k,J){let Q=$.previous,Z=!Q||!Q5(Q.route,k.route),K=!Q||!Z5(Q.style,k.style),q=!Q||H0(Q)!==H0(k)||Q.style.variant!==k.style.variant||Q.style.lane!==k.style.lane||Q.start!==k.start||Q.end!==k.end||Q.route.length!==k.route.length;K5($.node,k,Q);let W=Z||q||K,U=W?q5(k.route,J):$.shaft.getAttribute("d")??"";if(q){if($.outline)$.node.removeChild($.outline);if($.outline=void 0,H0(k)){let H=document.createElementNS(w,"path");H.classList.add("iso-connector-outline"),u(H,k,U,{stroke:k.style.outline??k.style.stroke,strokeWidth:k.style.strokeWidth+k.style.outlineWidth*2,includeDash:!1}),$.node.insertBefore(H,$.shaft),$.outline=H}}else if($.outline&&W)u($.outline,k,U,{stroke:k.style.outline??k.style.stroke,strokeWidth:k.style.strokeWidth+k.style.outlineWidth*2,includeDash:!1});if(!$.shaft.parentNode)$.node.appendChild($.shaft);if($.shaft.classList.add("iso-connector-shaft"),W)u($.shaft,k,U,{stroke:k.style.stroke,strokeWidth:k.style.strokeWidth,includeDash:!0});if(q){if($.lane)$.node.removeChild($.lane);if($.lane=void 0,k.style.variant==="road"&&k.style.lane==="center-dashed"){let H=document.createElementNS(w,"path");H.classList.add("iso-connector-lane"),u(H,k,U,{stroke:"#ffffff",strokeWidth:Math.max(1,k.style.strokeWidth*0.12),includeDash:!1}),H.setAttribute("stroke-dasharray","8 8"),$.node.appendChild(H),$.lane=H}}else if($.lane&&W)u($.lane,k,U,{stroke:"#ffffff",strokeWidth:Math.max(1,k.style.strokeWidth*0.12),includeDash:!1}),$.lane.setAttribute("stroke-dasharray","8 8");if(W){if($.startEndpoint)$.node.removeChild($.startEndpoint);if($.endEndpoint)$.node.removeChild($.endEndpoint);$.startEndpoint=p0($.node,k,"start",J),$.endEndpoint=p0($.node,k,"end",J)}q1($,k.ambient??[]),$.previous=k}function J5($){while($.firstChild)$.removeChild($.firstChild)}function Q5($,k){if($===k)return!0;if($.length!==k.length)return!1;return $.every((J,Q)=>{let Z=k[Q];return Z!==void 0&&J[0]===Z[0]&&J[1]===Z[1]})}function Z5($,k){if($===k)return!0;return $.variant===k.variant&&$.pattern===k.pattern&&$.stroke===k.stroke&&$.strokeWidth===k.strokeWidth&&$.opacity===k.opacity&&$.outline===k.outline&&$.outlineWidth===k.outlineWidth&&$.lane===k.lane&&($.dash??[]).join(",")===(k.dash??[]).join(",")}function K5($,k,J){let Q=["iso-connector",`iso-connector-${k.id}`,`iso-connector-variant-${k.style.variant}`,`iso-connector-pattern-${k.style.pattern}`,`iso-connector-direction-${k.direction}`,`iso-layer-${k.layer}`];if(!J)$.classList.add(...Q);else{let Z=["iso-connector",`iso-connector-${J.id}`,`iso-connector-variant-${J.style.variant}`,`iso-connector-pattern-${J.style.pattern}`,`iso-connector-direction-${J.direction}`,`iso-layer-${J.layer}`];for(let K of Z)if(!Q.includes(K))$.classList.remove(K);for(let K of Q)if(!Z.includes(K))$.classList.add(K)}$.setAttribute("data-id",k.id),$.setAttribute("data-layer",k.layer),$.style.overflow="visible",$.style.pointerEvents="auto"}function H0($){return Boolean($.style.outline&&$.style.outlineWidth>0)}function u($,k,J,Q){if($.setAttribute("d",J),$.setAttribute("fill","none"),$.setAttribute("stroke",Q.stroke),$.setAttribute("stroke-width",String(Q.strokeWidth)),$.setAttribute("stroke-linecap","round"),$.setAttribute("stroke-linejoin","round"),$.setAttribute("opacity",String(k.style.opacity)),Q.includeDash&&k.style.pattern!=="solid"){let Z=k.style.dash??b1[k.style.pattern];$.setAttribute("stroke-dasharray",Z.join(" "))}}function q5($,k){return $.map((J,Q)=>{let Z=O(J[0],J[1],k);return`${Q===0?"M":"L"} ${Z.x} ${Z.y}`}).join(" ")}function p0($,k,J,Q){let Z=k[J];if(Z==="none"||k.route.length<2)return;let K=W5(Z,k,J,Q);return K.classList.add(`iso-connector-${J}`),$.appendChild(K),K}function W5($,k,J,Q){switch($){case"arrow":return H5(k,J,Q);case"dot":return u0(k,J,Q,!0);case"circle":return u0(k,J,Q,!1);case"diamond":return U5(k,J,Q);case"bar":return L5(k,J,Q);case"none":throw new j("CONNECTOR_ENDPOINT_NONE","Cannot create geometry for endpoint none")}}function H5($,k,J){let Q=e($,k),Z=Q1($,k),K=[-Z[1],Z[0]],q=[Q[0]-Z[0]*U0,Q[1]-Z[1]*U0],W=y1/2,U=[Q,[q[0]+K[0]*W,q[1]+K[1]*W],[q[0]-K[0]*W,q[1]-K[1]*W]].map((V)=>O(V[0],V[1],J)),H=document.createElementNS(w,"polygon");return H.setAttribute("points",U.map(Y0).join(" ")),H.setAttribute("fill",$.style.stroke),H.setAttribute("opacity",String($.style.opacity)),H}function u0($,k,J,Q){let Z=e($,k),K=O(Z[0],Z[1],J),q=document.createElementNS(w,"circle");return q.setAttribute("cx",String(K.x)),q.setAttribute("cy",String(K.y)),q.setAttribute("r",String(j0*J.cellSize)),q.setAttribute("stroke",$.style.stroke),q.setAttribute("stroke-width",String(Math.max(1,$.style.strokeWidth))),q.setAttribute("opacity",String($.style.opacity)),q.setAttribute("fill",Q?$.style.stroke:"none"),q}function U5($,k,J){let Q=e($,k),Z=j0,K=[[Q[0],Q[1]-Z],[Q[0]+Z,Q[1]],[Q[0],Q[1]+Z],[Q[0]-Z,Q[1]]],q=document.createElementNS(w,"polygon");return q.setAttribute("points",K.map((W)=>O(W[0],W[1],J)).map(Y0).join(" ")),q.setAttribute("fill",$.style.stroke),q.setAttribute("opacity",String($.style.opacity)),q}function L5($,k,J){let Q=e($,k),Z=Q1($,k),K=[-Z[1],Z[0]],q=l0/2,W=O(Q[0]+K[0]*q,Q[1]+K[1]*q,J),U=O(Q[0]-K[0]*q,Q[1]-K[1]*q,J),H=document.createElementNS(w,"line");return H.setAttribute("x1",String(W.x)),H.setAttribute("y1",String(W.y)),H.setAttribute("x2",String(U.x)),H.setAttribute("y2",String(U.y)),H.setAttribute("stroke",$.style.stroke),H.setAttribute("stroke-width",String(Math.max(1,$.style.strokeWidth))),H.setAttribute("stroke-linecap","round"),H.setAttribute("opacity",String($.style.opacity)),H}function e($,k){return k==="start"?$.route[0]:$.route[$.route.length-1]}function Q1($,k){let J=k==="start"?i0($.route[0],$.route[1]):i0($.route[$.route.length-2],$.route[$.route.length-1]),Q=$.direction==="reverse"?[-J[0],-J[1]]:J;return j5(Q)}function i0($,k){return[k[0]-$[0],k[1]-$[1]]}function j5($){let k=Math.hypot($[0],$[1]);if(k===0)return[1,0];return[$[0]/k,$[1]/k]}function Z1($,k,J){let Q=R(k.pos[0]+k.size,k.pos[1]+k.size,J.cellSize,J.selectedBounds.minX,J.selectedBounds.minY,J.padding.x,J.padding.y),K=f(k.size,J.cellSize)/J.cellSize;$.setAttribute("transform",`translate(${Q.screenX} ${Q.screenY}) scale(${K})`)}function K1($,k){let J=new Set((k??[]).map((Q)=>Q.name));for(let Q of $.ambient)if(!J.has(Q))$.node.classList.remove(`iso-ambient-${Q}`);for(let Q of J)if(!$.ambient.has(Q))$.node.classList.add(`iso-ambient-${Q}`);$.ambient=J}function q1($,k){let J=new Set((k??[]).map((Q)=>Q.name));for(let Q of $.ambient)if(!J.has(Q))$.shaft.classList.remove(`iso-ambient-${Q}`);for(let Q of J)$.shaft.classList.add(`iso-ambient-${Q}`);$.ambient=J}function x($,k,J="enter"){$.style.opacity="1",$.style.animation="none",$.getBoundingClientRect();let Q=J==="exit"?"var(--iso-anim-duration-exit, 300ms)":"var(--iso-anim-duration-enter, 400ms)",Z=J==="exit"?"var(--iso-anim-easing-exit, ease-in)":"var(--iso-anim-easing-enter, ease-out)";$.style.animation=`${k} ${Q} ${Z} forwards`}function V5($){return $}function G5($){return $*$*$}function Y5($){return 1-(1-$)**3}function X5($){return $<0.5?4*$*$*$:1-(-2*$+2)**3/2}function M0($){switch($){case"linear":return V5;case"easeInCubic":return G5;case"easeOutCubic":return Y5;case"easeInOutCubic":return X5}}var W1={scrollDirection:"vertical",scrollOffset:{},minProgress:0,maxProgress:1,keyboardControls:!1,touchControls:!1,scrollSensitivity:1,transitionDuration:600,transitionEasing:"ease-in-out"};class w0{_engine=new y;_bundle=null;_sceneIndex=0;_progress=0;_paused=!1;_config=W1;_container=null;_sceneElement=null;_ownsEngine=!0;_rafId=null;_pendingProgress=null;_destroyed=!1;_listeners=new Map;_cameraAnim=null;_cameraState=null;_minScroll=0;_maxScroll=0;_lastTouchY=0;_lastTouchX=0;_isDragging=!1;_transitionAnim=null;get engine(){return this._engine}get progress(){return this._progress}getProgress(){return this._assertNotDestroyed(),this._progress}get sceneIndex(){return this._sceneIndex}getSceneIndex(){return this._assertNotDestroyed(),this._sceneIndex}get scenes(){return this._bundle?.scenes??[]}get paused(){return this._paused}get currentScene(){return this.scenes[this._sceneIndex]}init($,k={},J={}){if(this._assertNotDestroyed(),!$.scenes||$.scenes.length===0)throw new Y("CONTROLLER_NO_SCENES","init() requires at least one compiled scene stop");this._cancelFrame(),this._bundle=$,this._engine=J.engine??new y,this._ownsEngine=!J.engine,this._sceneIndex=0,this._progress=0,this._paused=!1,this._config={...W1,...k},this._sceneElement=J.sceneElement??k.sceneElement??null,this._cameraState={viewBox:I($),target:{type:"reset"},isZoomed:!1},this._engine.init($),this._bindScroll()}setProgress($){if(this._assertNotDestroyed(),!Number.isFinite($))throw new Y("CONTROLLER_PROGRESS_OUT_OF_RANGE","setProgress() requires a finite progress value");let k=Math.max(0,Math.min(1,$));if(k===this._progress&&!this._paused&&this._rafId!==null)return;if(this._progress=k,this._cancelCameraAnimation(),this._paused)return;this._scheduleProgressForward(k)}nextScene(){if(this._assertNotDestroyed(),this.scenes.length<=1)return;let $=(this._sceneIndex+1)%this.scenes.length;this._transitionToScene($)}prevScene(){if(this._assertNotDestroyed(),this.scenes.length<=1)return;let $=(this._sceneIndex-1+this.scenes.length)%this.scenes.length;this._transitionToScene($)}setSceneIndex($){if(this._assertNotDestroyed(),$<0||$>=this.scenes.length)throw new Y("CONTROLLER_SCENE_INDEX_OUT_OF_RANGE",`Scene index ${$} is out of bounds [0, ${this.scenes.length-1}]`);this._transitionToScene($)}pause(){if(this._assertNotDestroyed(),this._paused)return;this._paused=!0,this._cancelFrame(),this._engine.pause(),this._applyPauseState(!0),this._emit("paused")}resume(){if(this._assertNotDestroyed(),!this._paused)return;this._paused=!1,this._engine.resume(),this._applyPauseState(!1),this._scheduleProgressForward(this._progress),this._emit("resumed")}isPaused(){return this._assertNotDestroyed(),this._paused}zoomToElement($,k={}){this._assertNotDestroyed();let J=this._getSceneSvg();if(!this._bundle||!J)throw new Y("CAMERA_NOT_INITIALIZED","zoomToElement() requires an initialized scene SVG");let Q=o(J,$);if(!Q){if(C(J,$))throw new Y("CAMERA_TARGET_NOT_VISIBLE",`Camera target element "${$}" is currently removed`,{elementId:$});throw new Y("CAMERA_TARGET_NOT_FOUND",`Camera target element "${$}" was not found`,{elementId:$})}this._applyCameraDestination($0(Q,this._resolveCameraPadding(k)),{type:"element",id:$},k)}zoomToArea($,k={}){if(this._assertNotDestroyed(),!this._bundle||!this._getSceneSvg())throw new Y("CAMERA_NOT_INITIALIZED","zoomToArea() requires an initialized scene SVG");this._assertValidCameraArea($);let J=V0(this._bundle,$);this._applyCameraDestination($0(J,this._resolveCameraPadding(k)),{type:"area",at:[...$.at],size:[...$.size]},k)}resetZoom($={}){if(this._assertNotDestroyed(),!this._bundle||!this._getSceneSvg())throw new Y("CAMERA_NOT_INITIALIZED","resetZoom() requires an initialized scene SVG");this._applyCameraDestination(I(this._bundle),{type:"reset"},$)}getCameraState(){if(this._assertNotDestroyed(),!this._cameraState)throw new Y("CAMERA_NOT_INITIALIZED","Camera state is not initialized");return A5(this._cameraState)}destroy(){if(this._assertNotDestroyed(),this._unbindScroll(),this._cancelFrame(),this._cancelTransition(),this._cancelCameraAnimation(),this._ownsEngine)this._engine.destroy();this._listeners.clear(),this._bundle=null,this._container=null,this._pendingProgress=null,this._cameraState=null,this._destroyed=!0}on($,k){this._assertNotDestroyed();let J=this._listeners.get($)??new Set;J.add(k),this._listeners.set($,J)}off($,k){this._assertNotDestroyed();let J=this._listeners.get($);if(J)J.delete(k)}_emit($,...k){let J=this._listeners.get($);if(J)for(let Q of J)try{Q(...k)}catch(Z){queueMicrotask(()=>{throw Z})}}_scheduleProgressForward($){if(this._pendingProgress=$,this._rafId!==null)return;this._rafId=requestAnimationFrame(()=>{this._rafId=null;let k=this._pendingProgress;if(this._pendingProgress=null,k===null||this._paused||this._destroyed)return;this._engine.setProgress(k),this._applyFrameUpdate(),this._emit("progress-change",k)})}_cancelFrame(){if(this._rafId!==null)cancelAnimationFrame(this._rafId),this._rafId=null;this._pendingProgress=null}_applyFrameUpdate(){if(!this._bundle)return;let $=this._sceneElement??this._container?.querySelector("svg")??null;if(!$)return;let k=this._engine.getFrameUpdates().map((Q)=>({id:Q.id,asset:Q.asset,pos:Q.pos,size:Q.size,layer:Q.layer,presence:Q.lifecycle,enter:Q.entry,exit:Q.exit,ambient:Q.ambient,text:Q.text,primitive:Q.primitive})),J=this._engine.getConnectorFrameUpdates().map((Q)=>({id:Q.id,route:Q.route,layer:Q.layer,presence:Q.lifecycle,style:Q.style,start:Q.start,end:Q.end,direction:Q.direction,enter:Q.entry,exit:Q.exit,ambient:Q.ambient}));d0($,k,J),this._applyLifecycleChanges(k),this._applyConnectorLifecycleChanges(J),this._applyCameraForProgress(this._progress)}_applyCameraForProgress($){let k=this._getSceneSvg();if(!this._bundle||!k)return;let J=this.scenes;if(J.length===0)return;let{previous:Q,next:Z}=M5(J,$),K=this._effectiveCameraAt(Q.index),q=this._effectiveCameraAt(Z.index),W=this._resolveCameraViewBox(K,{forInterpolation:!0}),U=this._resolveCameraViewBox(q,{forInterpolation:!0}),H=Z.scene.progress-Q.scene.progress,V=H<=0?0:($-Q.scene.progress)/H,X=X1(q.easing)(Math.max(0,Math.min(1,V))),A=Y1(W,U,X),P=X<1?K.target:q.target;this._setCameraViewBox(k,A,P)}_effectiveCameraAt($){for(let k=$;k>=0;k--){let J=this.scenes[k]?.camera;if(J)return{target:J.target,padding:J.padding,duration:J.duration,easing:J.easing}}return{target:{type:"reset"}}}_resolveCameraViewBox($,k={}){if(!this._bundle)throw new Y("CAMERA_NOT_INITIALIZED","Camera requires an initialized bundle");if($.target.type==="reset")return I(this._bundle);if($.target.type==="area")return $0(V0(this._bundle,{at:$.target.at,size:$.target.size}),$.padding??32);let J=this._getSceneSvg();if(!J)throw new Y("CAMERA_NOT_INITIALIZED","Camera requires an initialized scene SVG");let Q=k.forInterpolation?this._resolveElementBoundsForInterpolation(J,$.target.id):o(J,$.target.id);if(!Q)throw new Y("CAMERA_TARGET_NOT_FOUND",`Camera target element "${$.target.id}" was not found`,{elementId:$.target.id});return $0(Q,$.padding??32)}_resolveElementBoundsForInterpolation($,k){let J=o($,k);if(J)return J;let Q=C($,k);if(!Q||!this._bundle)return;let Z=o0(this._bundle),K=Q.current,q=R(K.pos[0]+K.size,K.pos[1]+K.size,Z.cellSize,Z.selectedBounds.minX,Z.selectedBounds.minY,Z.padding.x,Z.padding.y),W=f(K.size,Z.cellSize),[U,H]=Q.anchor;return{minX:N(q.screenX-W*U),minY:N(q.screenY-W*H),width:N(Math.max(1,W)),height:N(Math.max(1,W))}}_applyCameraDestination($,k,J){let Q=this._getSceneSvg();if(!Q)throw new Y("CAMERA_NOT_INITIALIZED","Camera requires an initialized scene SVG");this._cancelCameraAnimation();let Z=this._resolveCameraDuration(J);if(Z===0){this._setCameraViewBox(Q,$,k);return}let K=O5(Q)??this._cameraState?.viewBox??$,q=X1(J.easing??this._config.transitionEasing),W=performance.now(),U=(H)=>{let V=Math.min((H-W)/Z,1);if(this._setCameraViewBox(Q,Y1(K,$,q(V)),k),V<1)this._cameraAnim=requestAnimationFrame(U);else this._cameraAnim=null};this._cameraAnim=requestAnimationFrame(U)}_setCameraViewBox($,k,J){n0($,k);let Q=this._bundle?I(this._bundle):k;this._cameraState={viewBox:k,target:J,isZoomed:!w5(k,Q)},this._emit("camera-change",this.getCameraState())}_getSceneSvg(){return this._sceneElement??this._container?.querySelector("svg")??null}_resolveCameraPadding($){let k=$.padding??32;if(!Number.isFinite(k)||k<0||k>2048)throw new Y("INVALID_CAMERA_OPTIONS","Camera padding must be between 0 and 2048");return k}_resolveCameraDuration($){let k=$.duration??this._config.transitionDuration;if(!Number.isInteger(k)||k<0||k>1e4)throw new Y("INVALID_CAMERA_OPTIONS","Camera duration must be an integer from 0 to 10000");return k}_assertValidCameraArea($){if(!Array.isArray($.at)||$.at.length!==2||!$.at.every((k)=>Number.isFinite(k)&&k>=0)||!Array.isArray($.size)||$.size.length!==2||!$.size.every((k)=>Number.isFinite(k)&&k>0))throw new Y("INVALID_CAMERA_OPTIONS","Camera area must use non-negative at and positive size")}_applyLifecycleChanges($){for(let k of $){let J=this._engine.getLifecycleTransition(k.id);if(!J)continue;let Q=this._sceneElement??this._container?.querySelector("svg");if(!Q)continue;let Z=C(Q,k.id);if(!Z)continue;if(J.to==="entering"||J.to==="present")Z.isHidden=!1,i(Z.node);if(H1(J))this._applyEntryAnimation(k,Z);if(L1(J)){this._applyExitAnimation({...k,exit:V1(k.enter??"fade-in")},Z);continue}if(U1(J))this._applyExitAnimation(k,Z);if(j1(J)){Z.isHidden=!1,i(Z.node),this._applyEntryAnimation({...k,enter:G1(k.exit??"fade-out")},Z);continue}if(J.to==="removed")Z.isHidden=!0,S(Z.node)}}_applyConnectorLifecycleChanges($){for(let k of $){let J=this._engine.getConnectorLifecycleTransition(k.id);if(!J)continue;let Q=this._sceneElement??this._container?.querySelector("svg");if(!Q)continue;let Z=r0(Q,k.id);if(!Z)continue;if(J.to==="entering"||J.to==="present")Z.isHidden=!1,i(Z.node);if(H1(J))this._applyConnectorEntryAnimation(k,Z);if(L1(J)){this._applyConnectorExitAnimation({...k,exit:V1(k.enter??"fade-in")},Z);continue}if(U1(J))this._applyConnectorExitAnimation(k,Z);if(j1(J)){Z.isHidden=!1,i(Z.node),this._applyConnectorEntryAnimation({...k,enter:G1(k.exit??"fade-out")},Z);continue}if(J.to==="removed")Z.isHidden=!0,S(Z.node)}}_applyEntryAnimation($,k){let J=$.enter??"fade-in";if(J==="none")return;x(k.node,`iso-anim-${J}`,"enter");let Q=k.node.style.animation;k.node.addEventListener("animationend",()=>{if(k.node.style.animation===Q)k.node.style.animation=""},{once:!0})}_applyExitAnimation($,k){let J=$.exit??"fade-out";if(J==="none"){S(k.node);return}x(k.node,`iso-anim-${J}`,"exit");let Q=k.node.style.animation;k.node.addEventListener("animationend",()=>{if(k.node.style.animation===Q)S(k.node)},{once:!0})}_applyConnectorEntryAnimation($,k){let J=$.enter??"fade-in";if(J==="none")return;x(k.node,`iso-anim-${J}`,"enter");let Q=k.node.style.animation;k.node.addEventListener("animationend",()=>{if(k.node.style.animation===Q)k.node.style.animation=""},{once:!0})}_applyConnectorExitAnimation($,k){let J=$.exit??"fade-out";if(J==="none"){S(k.node);return}x(k.node,`iso-anim-${J}`,"exit");let Q=k.node.style.animation;k.node.addEventListener("animationend",()=>{if(k.node.style.animation===Q)S(k.node)},{once:!0})}_transitionToScene($){this._cancelTransition();let k=this.scenes[$],J=this._progress,Q=k.progress;if($===this._sceneIndex&&J===Q)return;this._sceneIndex=$,this._emit("scene-change",$);let Z=this._config.transitionDuration;if(Z>0&&J!==Q){this._animateProgress(J,Q,Z);return}this._progress=Q,this._cancelCameraAnimation(),this._scheduleProgressForward(Q)}_animateProgress($,k,J){let Q=M0(this._config.transitionEasing==="ease-in-out"?"easeInOutCubic":this._config.transitionEasing==="ease-out"?"easeOutCubic":"linear"),Z=performance.now(),K=(q)=>{let W=q-Z,U=Math.min(W/J,1),H=Q(U),V=$+(k-$)*H;if(this.setProgress(V),U<1)this._transitionAnim=requestAnimationFrame(K);else this._transitionAnim=null};this._transitionAnim=requestAnimationFrame(K)}_cancelTransition(){if(this._transitionAnim!==null)cancelAnimationFrame(this._transitionAnim),this._transitionAnim=null}_cancelCameraAnimation(){if(this._cameraAnim!==null)cancelAnimationFrame(this._cameraAnim),this._cameraAnim=null}_bindScroll(){if(this._config.keyboardControls)document.addEventListener("keydown",this._onKeyDown);let $=this._config.container;if(!$)return;if(this._container=$,this._calculateScrollBounds(),$.addEventListener("scroll",this._onScroll,{passive:!0}),window.addEventListener("resize",this._onResize,{passive:!0}),this._config.touchControls)$.addEventListener("touchstart",this._onTouchStart,{passive:!0}),$.addEventListener("touchmove",this._onTouchMove,{passive:!1}),$.addEventListener("touchend",this._onTouchEnd)}_unbindScroll(){document.removeEventListener("keydown",this._onKeyDown);let $=this._config.container;if(!$)return;$.removeEventListener("scroll",this._onScroll),window.removeEventListener("resize",this._onResize),$.removeEventListener("touchstart",this._onTouchStart),$.removeEventListener("touchmove",this._onTouchMove),$.removeEventListener("touchend",this._onTouchEnd)}_calculateScrollBounds(){let $=this._config.container;if(!$)return;let k=this._config.scrollOffset??{};if(this._config.scrollDirection==="horizontal"){this._minScroll=k.left??0,this._maxScroll=$.scrollWidth-$.clientWidth-(k.right??0);return}this._minScroll=k.top??0,this._maxScroll=$.scrollHeight-$.clientHeight-(k.bottom??0)}_onScroll=()=>{if(this._paused||this._destroyed)return;let $=this._config.container;if(!$)return;let k=this._config.scrollDirection==="horizontal"?$.scrollLeft:$.scrollTop,J=this._maxScroll-this._minScroll;if(J<=0)return;let Q=(k-this._minScroll)/J,Z=this._config.scrollSensitivity??1,K=Q*Z,q=Math.max(this._config.minProgress??0,Math.min(this._config.maxProgress??1,K));if(q!==this._progress)this.setProgress(q)};_onResize=()=>{if(this._destroyed)return;this._calculateScrollBounds()};_onKeyDown=($)=>{if(this._destroyed)return;if($.key==="ArrowRight"||$.key==="ArrowDown"||$.key===" ")$.preventDefault(),this.nextScene();else if($.key==="ArrowLeft"||$.key==="ArrowUp")$.preventDefault(),this.prevScene()};_onTouchStart=($)=>{if(this._destroyed)return;this._isDragging=!0;let k=$.touches[0];if(this._config.scrollDirection==="horizontal")this._lastTouchX=k.clientX;else this._lastTouchY=k.clientY};_onTouchMove=($)=>{if(this._destroyed)return;if(!this._isDragging)return;let k=$.touches[0],J=this._config.scrollDirection==="horizontal",Q=J?this._lastTouchX-k.clientX:this._lastTouchY-k.clientY;if(J)this._lastTouchX=k.clientX;else this._lastTouchY=k.clientY;let Z=this._config.scrollSensitivity??1,K=Q/300*Z,q=Math.max(0,Math.min(1,this._progress+K));this.setProgress(q)};_onTouchEnd=()=>{if(this._destroyed)return;this._isDragging=!1};_applyPauseState($){let k=this._getSceneSvg();if(!k)return;let J=$?"paused":"running",Q=k.querySelectorAll('[class*="iso-ambient-"]');for(let Z=0;Z<Q.length;Z++){let K=Q[Z];K.style.animationPlayState=J}}_assertNotDestroyed(){if(!this._destroyed)return;throw new Y("CONTROLLER_DESTROYED","AnimationController has been destroyed")}}function H1($){return $.from==="removed"&&$.to==="entering"}function U1($){return $.to==="exiting"}function L1($){return $.to==="removed"&&$.from!=="exiting"}function j1($){return $.from==="exiting"&&$.to!=="removed"}function V1($){switch($){case"fade-in":return"fade-out";case"fade-in-grow":return"fade-out-shrink";case"fall-in":return"rise-away";case"rise-from-ground":return"fall-through-ground";case"slide-in-left":return"slide-out-left";case"slide-in-right":return"slide-out-right";case"flip-in":return"flip-out";case"none":return"none"}}function G1($){switch($){case"fade-out":return"fade-in";case"fade-out-shrink":return"fade-in-grow";case"fall-through-ground":return"rise-from-ground";case"rise-away":return"fall-in";case"slide-out-left":return"slide-in-left";case"slide-out-right":return"slide-in-right";case"flip-out":return"flip-in";case"none":return"none"}}function M5($,k){let J=0,Q=$.length-1;for(let Z=0;Z<$.length;Z++){if($[Z].progress<=k)J=Z;if($[Z].progress>=k){Q=Z;break}}return{previous:{scene:$[J],index:J},next:{scene:$[Q],index:Q}}}function $0($,k){return{minX:N($.minX-k),minY:N($.minY-k),width:N(Math.max(1,$.width+k*2)),height:N(Math.max(1,$.height+k*2))}}function Y1($,k,J){return{minX:N($.minX+(k.minX-$.minX)*J),minY:N($.minY+(k.minY-$.minY)*J),width:N($.width+(k.width-$.width)*J),height:N($.height+(k.height-$.height)*J)}}function w5($,k){return $.minX===k.minX&&$.minY===k.minY&&$.width===k.width&&$.height===k.height}function O5($){let k=$.getAttribute("viewBox");if(!k)return;let J=k.trim().split(/\s+/).map(Number);if(J.length!==4||J.some((Q)=>!Number.isFinite(Q)))return;return{minX:J[0],minY:J[1],width:J[2],height:J[3]}}function X1($){return M0($==="ease-in-out"?"easeInOutCubic":$==="ease-out"?"easeOutCubic":"linear")}function A5($){return{viewBox:{...$.viewBox},target:$.target?.type==="area"?{type:"area",at:[...$.target.at],size:[...$.target.size]}:$.target?{...$.target}:void 0,isZoomed:$.isZoomed}}function N($){return Math.round($*1000)/1000}function M1($){let k=P5($),J=k.length*8;k.push(128);while(k.length%64!==56)k.push(0);for(let q=7;q>=0;q--)k.push(Math.floor(J/2**(q*8))&255);let Q=[1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225],Z=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298],K=Array(64);for(let q=0;q<k.length;q+=64){for(let L=0;L<16;L++){let h=q+L*4;K[L]=(k[h]<<24|k[h+1]<<16|k[h+2]<<8|k[h+3])>>>0}for(let L=16;L<64;L++){let h=T(K[L-15],7)^T(K[L-15],18)^K[L-15]>>>3,c=T(K[L-2],17)^T(K[L-2],19)^K[L-2]>>>10;K[L]=K[L-16]+h+K[L-7]+c>>>0}let[W,U,H,V,X,A,P,M]=Q;for(let L=0;L<64;L++){let h=T(X,6)^T(X,11)^T(X,25),c=X&A^~X&P,G=M+h+c+Z[L]+K[L]>>>0,E=T(W,2)^T(W,13)^T(W,22),F=W&U^W&H^U&H,D=E+F>>>0;M=P,P=A,A=X,X=V+G>>>0,V=H,H=U,U=W,W=G+D>>>0}Q[0]=Q[0]+W>>>0,Q[1]=Q[1]+U>>>0,Q[2]=Q[2]+H>>>0,Q[3]=Q[3]+V>>>0,Q[4]=Q[4]+X>>>0,Q[5]=Q[5]+A>>>0,Q[6]=Q[6]+P>>>0,Q[7]=Q[7]+M>>>0}return Q.map((q)=>q.toString(16).padStart(8,"0")).join("")}function P5($){return Array.from(new TextEncoder().encode($))}function T($,k){return $>>>k|$<<32-k}var F5="iso-interactive",_5="iso-hover";class O0{svg;listeners=new Map;destroyed=!1;attached=!1;onClick=($)=>this.handleClick($);onPointerOver=($)=>this.handlePointerOver($);onPointerOut=($)=>this.handlePointerOut($);constructor($,k){if(this.svg=$,k)$.classList.add(F5),$.addEventListener("click",this.onClick),$.addEventListener("pointerover",this.onPointerOver),$.addEventListener("pointerout",this.onPointerOut),this.attached=!0}on($,k){if(this.destroyed)throw new j("MOUNT_DESTROYED","Cannot call on() after destroy()");let J=this.listeners.get($)??new Set;return J.add(k),this.listeners.set($,J),()=>{J.delete(k)}}destroy(){if(this.destroyed)return;if(this.destroyed=!0,this.attached)this.svg.removeEventListener("click",this.onClick),this.svg.removeEventListener("pointerover",this.onPointerOver),this.svg.removeEventListener("pointerout",this.onPointerOut),this.attached=!1;this.listeners.clear()}handleClick($){let k=this.resolveVisibleElementId($.target);if(!k)return;this.emit("element-click",{id:k,originalEvent:$})}handlePointerOver($){let k=this.resolveVisibleElementId($.target);if(!k)return;let J=this.resolveVisibleElementId($.relatedTarget);if(k===J)return;this.toggleHoverClass(k,!0),this.emit("element-enter",{id:k,originalEvent:$})}handlePointerOut($){let k=this.resolveVisibleElementId($.target);if(!k)return;let J=this.resolveVisibleElementId($.relatedTarget);if(k===J)return;this.toggleHoverClass(k,!1),this.emit("element-leave",{id:k,originalEvent:$})}toggleHoverClass($,k){let J=C(this.svg,$);if(!J)return;J.node.classList.toggle(_5,k)}resolveVisibleElementId($){let k=$;while(k&&k!==this.svg){let J=k.getAttribute?.("data-id");if(J){let Q=C(this.svg,J);if(Q&&Q.current.presence!=="removed")return J;return}k=k.parentNode}return}emit($,k){let J=this.listeners.get($);if(!J)return;for(let Q of J)try{Q(k)}catch(Z){queueMicrotask(()=>{throw Z})}}}var w1="isostate-runtime-bundle",A0="0.5.0",N5=/^[a-f0-9]{64}$/;function h5($,k,J={}){T5($),z5(k);let Q=new y;Q.init(k);let Z=a0($,k,{label:J.label,themeVars:J.themeVars}),K;if(J.controller!==void 0&&J.controller!==!1)K=new w0,K.init(k,{...J.controller,container:J.controller.container??$,sceneElement:Z},{engine:Q,sceneElement:Z});let q=new O0(Z,J.interactive===!0),W=!1;return{svg:Z,engine:Q,controller:K,getResolvedConfig:()=>R5(k,J,K),on:(U,H)=>q.on(U,H),destroy:()=>{if(W)return;if(W=!0,q.destroy(),D5(K),Q.destroy(),Z.parentNode===$)$.removeChild(Z);else Z.parentNode?.removeChild(Z)}}}function D5($){if(!$)return;try{$.destroy()}catch(k){if(k instanceof Y&&k.code==="CONTROLLER_DESTROYED")return;throw k}}function T5($){if(!$||typeof $.appendChild!=="function"||typeof $.removeChild!=="function")throw new j("INVALID_MOUNT_TARGET","mountScene() requires a DOM HTMLElement target")}function z5($){if(!$||typeof $!=="object")throw new j("BUNDLE_FORMAT_MISSING","Runtime bundle must be a plain object");if($._format!==w1)throw new j("BUNDLE_FORMAT_MISSING","Runtime bundle format is missing or unsupported",{expected:w1});if(!Array.isArray($.scenes)||$.scenes.length===0)throw new j("BUNDLE_FORMAT_MISSING","Runtime bundle must include compiled scenes[]");if(O1($._version)!==O1(A0))throw new j("BUNDLE_VERSION_MISMATCH",`Runtime bundle version ${$._version} is not compatible with runtime ${A0}`,{bundleVersion:$._version,runtimeVersion:A0});if(!$._digest)throw new j("BUNDLE_DIGEST_MISSING","Runtime bundle digest is missing");if(typeof $._digest!=="string"||!N5.test($._digest))throw new j("BUNDLE_DIGEST_MISMATCH","Runtime bundle digest is malformed");let{_digest:k,...J}=$,Q=M1(C5(J));if(Q!==k)throw new j("BUNDLE_DIGEST_MISMATCH","Runtime bundle digest does not match bundle content",{expected:k,actual:Q})}function R5($,k={},J){return{grid:{cellSize:$.grid.cellSize},floor:{...$.floor,size:[...$.floor.size],origin:[...$.floor.origin]},layout:{...$.layout,padding:{...$.layout.padding},align:[...$.layout.align]},viewBox:I($),camera:S5($,J),theme:$.theme,themeVars:I5($,k.themeVars),scenes:$.scenes.map((Q)=>({id:Q.id,progress:Q.progress})),layerOrder:$.layers.map((Q)=>({name:Q.name,order:Q.order})).sort((Q,Z)=>Q.order-Z.order||B5(Q.name,Z.name))}}function S5($,k){if(k)try{return k.getCameraState()}catch(J){if(!(J instanceof Y))throw J}return{viewBox:I($),isZoomed:!1}}function B5($,k){return $<k?-1:$>k?1:0}function I5($,k={}){return{...d($.theme)??{},...$.themeVars??{},...k}}function O1($){let k=Number.parseInt(String($).split(".")[0]??"",10);return Number.isFinite(k)?k:Number.NaN}function C5($){return JSON.stringify(P0($))}function P0($){if(Array.isArray($))return $.map((J)=>J===void 0?null:P0(J));if(!x5($))return $;let k={};for(let J of Object.keys($).sort()){let Q=$[J];if(Q!==void 0)k[J]=P0(Q)}return k}function x5($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function P2($,k,J,Q,Z,K,q){return R($,k,J,Q,Z,K,q)}export{P2 as projectToScreen,h5 as mountScene};
|
|
5
5
|
|
|
6
|
-
//# debugId=
|
|
6
|
+
//# debugId=076F49BB617BA32164756E2164756E21
|