@sebastianwessel/isostate 0.2.0 → 0.3.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.
Files changed (54) hide show
  1. package/dist/browser/isostate.runtime.js +4 -4
  2. package/dist/browser/isostate.runtime.js.map +7 -6
  3. package/dist/chunks/{index-DoyWxJDm.js → index-B6HlPnov.js} +6 -1145
  4. package/dist/chunks/index-B6HlPnov.js.map +1 -0
  5. package/dist/chunks/rendering-engine-BgHel7yX.js +1117 -0
  6. package/dist/chunks/rendering-engine-BgHel7yX.js.map +1 -0
  7. package/dist/chunks/scene-parser-xgVJh2FU.js +2676 -0
  8. package/dist/chunks/scene-parser-xgVJh2FU.js.map +1 -0
  9. package/dist/chunks/sha256-4JuurR-b.js +69 -0
  10. package/dist/chunks/sha256-4JuurR-b.js.map +1 -0
  11. package/dist/dsl/browser.d.ts +7 -0
  12. package/dist/dsl/browser.d.ts.map +1 -0
  13. package/dist/dsl/browser.js +5 -0
  14. package/dist/dsl/browser.js.map +1 -0
  15. package/dist/dsl/compiler.d.ts.map +1 -1
  16. package/dist/dsl/index.js +4 -2299
  17. package/dist/dsl/index.js.map +1 -1
  18. package/dist/dsl/scene-parser.d.ts.map +1 -1
  19. package/dist/dsl/scene-validator.d.ts.map +1 -1
  20. package/dist/editor-support/adapter.d.ts +46 -0
  21. package/dist/editor-support/adapter.d.ts.map +1 -0
  22. package/dist/editor-support/geometry.d.ts +32 -0
  23. package/dist/editor-support/geometry.d.ts.map +1 -0
  24. package/dist/editor-support/hit-test.d.ts +29 -0
  25. package/dist/editor-support/hit-test.d.ts.map +1 -0
  26. package/dist/editor-support/index.d.ts +7 -0
  27. package/dist/editor-support/index.d.ts.map +1 -0
  28. package/dist/editor-support/index.js +426 -0
  29. package/dist/editor-support/index.js.map +1 -0
  30. package/dist/index.js +3 -1
  31. package/dist/index.js.map +1 -1
  32. package/dist/rendering/asset-node.d.ts +2 -1
  33. package/dist/rendering/asset-node.d.ts.map +1 -1
  34. package/dist/rendering/rendering-engine.d.ts +13 -0
  35. package/dist/rendering/rendering-engine.d.ts.map +1 -1
  36. package/dist/runtime/index.js +3 -1
  37. package/dist/runtime/index.js.map +1 -1
  38. package/dist/runtime/mount-scene.d.ts.map +1 -1
  39. package/dist/types/assets.d.ts +27 -2
  40. package/dist/types/assets.d.ts.map +1 -1
  41. package/dist/types/index.d.ts +4 -4
  42. package/dist/types/index.d.ts.map +1 -1
  43. package/dist/types/node.d.ts +11 -2
  44. package/dist/types/node.d.ts.map +1 -1
  45. package/dist/types/runtime-bundle.d.ts +5 -0
  46. package/dist/types/runtime-bundle.d.ts.map +1 -1
  47. package/dist/types/scene.d.ts +25 -2
  48. package/dist/types/scene.d.ts.map +1 -1
  49. package/dist/types/validation.d.ts +6 -0
  50. package/dist/types/validation.d.ts.map +1 -1
  51. package/dist/utils/sha256.d.ts +3 -0
  52. package/dist/utils/sha256.d.ts.map +1 -0
  53. package/package.json +9 -1
  54. package/dist/chunks/index-DoyWxJDm.js.map +0 -1
@@ -1,6 +1,6 @@
1
- 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 J=M0($,0);this._elementFrameMap=J,this._prevFrameMap=T0(J);let K=X0($,0);this._connectorFrameMap=K,this._prevConnectorFrameMap=w0(K)}setProgress($){let J=Math.max(0,Math.min(1,$));if(this._paused)return;if(this._progress=J,!this._bundle)return;this._prevFrameMap=T0(this._elementFrameMap),this._elementFrameMap=M0(this._bundle,J),this._prevConnectorFrameMap=w0(this._connectorFrameMap),this._connectorFrameMap=X0(this._bundle,J)}getElementUpdate($){let J=typeof $==="string"?$:$.id,K=this._elementFrameMap.get(J);if(!K)return{id:J,asset:"",lifecycle:"removed",ambient:[],pos:[0,0],size:1,layer:""};return N0(K)}getFrameUpdates(){return[...this._elementFrameMap.values()].map(N0)}getConnectorUpdate($){let J=typeof $==="string"?$:$.id,K=this._connectorFrameMap.get(J);if(!K)return d(R0(J));return d(K)}getConnectorFrameUpdates(){return[...this._connectorFrameMap.values()].map(d)}getLifecycleTransition($){let J=this._prevFrameMap.get($),K=this._elementFrameMap.get($),Z=J?.lifecycle??"removed",k=K?.lifecycle??"removed";if(Z===k)return null;return{from:Z,to:k}}getConnectorLifecycleTransition($){let J=this._prevConnectorFrameMap.get($),K=this._connectorFrameMap.get($),Z=J?.lifecycle??"removed",k=K?.lifecycle??"removed";if(Z===k)return null;return{from:Z,to:k}}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($,J){let K=o($.scenes,J),Z=new Map;if(!K)return Z;let k=new Set;for(let q of $.scenes)for(let Q of q.elements??[])k.add(Q.id);for(let q of K.prevStop.elements??[])k.add(q.id);for(let q of K.nextStop.elements??[])k.add(q.id);for(let q of k){let Q=G1(U1(q,K.prevStop,K.nextStop,K.t),$.scenes,q,J);Z.set(q,Q)}return Z}function X0($,J){let K=o($.scenes,J),Z=new Map;if(!K)return Z;let k=new Set;for(let q of $.scenes)for(let Q of q.connectors??[])k.add(Q.id);for(let q of K.prevStop.connectors??[])k.add(q.id);for(let q of K.nextStop.connectors??[])k.add(q.id);for(let q of k){let Q=V1(q,K.prevStop,K.nextStop,K.t);Z.set(q,Q)}return Z}function o($,J){if($.length===0)return null;let K=[...$].sort((k,q)=>k.progress-q.progress);if(K.length===1||J<=K[0].progress)return{prevStop:K[0],nextStop:K[0],t:0,nextIndex:0};let Z=K.length-1;if(J>=K[Z].progress)return{prevStop:K[Z-1]??K[Z],nextStop:K[Z],t:1,nextIndex:Z};for(let k=1;k<K.length;k++){let q=K[k];if(q.progress>=J){let Q=K[k-1],H=q.progress-Q.progress,L=H>0?(J-Q.progress)/H:0;return{prevStop:Q,nextStop:q,t:L,nextIndex:k}}}return null}function U1($,J,K,Z){let k=P0(J,$),q=P0(K,$),Q=q??k;if(!Q)return O1($);if(!k||k.presence==="removed")return F0(Q,Q.presence==="removed"||Z<1?"removed":Q.presence);if(!q||q.presence==="removed")return F0(k,Z<1?k.presence:"removed");let H=Z<1?k.presence:q.presence;return{id:$,asset:q.asset,pos:z0(k.pos,q.pos,Z),size:k.size+(q.size-k.size)*Z,lifecycle:H,ambient:w(q.ambient),layer:Z<1?k.layer:q.layer,entry:q.enter??k.enter,exit:q.exit??k.exit,text:f(q.text??k.text),primitive:v(q.primitive??k.primitive)}}function V1($,J,K,Z){let k=_0(J,$),q=_0(K,$),Q=q??k;if(!Q)return R0($);if(!k||k.presence==="removed")return A0(Q,Q.presence==="removed"||Z<1?"removed":Q.presence);if(!q||q.presence==="removed")return A0(k,Z<1?k.presence:"removed");let H=Z<1?k.presence:q.presence;return{id:$,route:Y1(k.route,q.route,Z),layer:Z<1?k.layer:q.layer,lifecycle:H,style:p(Z<1?k.style:q.style),start:q.start,end:q.end,direction:q.direction,ambient:w(q.ambient),entry:q.enter??k.enter,exit:q.exit??k.exit}}function P0($,J){return($.elements??[]).find((K)=>K.id===J)}function _0($,J){return($.connectors??[]).find((K)=>K.id===J)}function G1($,J,K,Z){if($.lifecycle!=="removed")return $;let k=j1(J,K,Z);if(!k)return $;return{...$,asset:k.asset,pos:[...k.pos],size:k.size,ambient:w(k.ambient),layer:k.layer,entry:k.enter,exit:k.exit,text:f(k.text),primitive:v(k.primitive)}}function j1($,J,K){let Z=[...$].sort((q,Q)=>q.progress-Q.progress),k=Z.filter((q)=>q.progress>=K).flatMap((q)=>q.elements??[]).find((q)=>q.id===J&&q.presence!=="removed");if(k)return k;for(let q=Z.length-1;q>=0;q-=1){if(Z[q].progress>K)continue;let Q=(Z[q].elements??[]).find((H)=>H.id===J&&H.presence!=="removed");if(Q)return Q}return}function F0($,J=$.presence){return{id:$.id,asset:$.asset,pos:[...$.pos],size:$.size,lifecycle:J,ambient:w($.ambient),layer:$.layer,entry:$.enter,exit:$.exit,text:f($.text),primitive:v($.primitive)}}function A0($,J=$.presence){return{id:$.id,route:x($.route),layer:$.layer,lifecycle:J,style:p($.style),start:$.start,end:$.end,direction:$.direction,ambient:w($.ambient),entry:$.enter,exit:$.exit}}function O1($){return{id:$,asset:"",pos:[0,0],size:1,lifecycle:"removed",ambient:[],layer:""}}function R0($){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 z0($,J,K){return[$[0]+(J[0]-$[0])*K,$[1]+(J[1]-$[1])*K]}function Y1($,J,K){if($.length!==J.length)return x(K<1?$:J);return $.map((Z,k)=>z0(Z,J[k],K))}function x($){return $.map((J)=>[J[0],J[1]])}function p($){return{...$,...$.dash?{dash:[...$.dash]}:{}}}function w($){return($??[]).map((J)=>({...J}))}function N0($){return{id:$.id,asset:$.asset,lifecycle:$.lifecycle,ambient:w($.ambient),pos:[...$.pos],size:$.size,layer:$.layer,entry:$.entry,exit:$.exit,text:f($.text),primitive:v($.primitive)}}function d($){return{id:$.id,route:x($.route),layer:$.layer,lifecycle:$.lifecycle,style:p($.style),start:$.start,end:$.end,direction:$.direction,ambient:w($.ambient),entry:$.entry,exit:$.exit}}function T0($){let J=new Map;for(let[K,Z]of $)J.set(K,{...Z,pos:[...Z.pos],ambient:w(Z.ambient),text:f(Z.text),primitive:v(Z.primitive)});return J}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:x($.polygon.points)}}:{},...$.line?{line:{...$.line,dash:c($.line.dash),points:x($.line.points)}}:{}}}function c($){return $?[$[0],$[1]]:void 0}function w0($){let J=new Map;for(let[K,Z]of $)J.set(K,{...Z,route:x(Z.route),style:p(Z.style),ambient:w(Z.ambient)});return J}var M1={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 M1[$]}class n extends Error{code;details;constructor($,J,K){super(J);this.code=$;this.details=K;this.name=this.constructor.name}}class G extends n{}class O extends n{}function D($,J,K){return{rawX:K*($-J)*0.5,rawY:K*($+J)*0.25}}function h($,J,K,Z=0,k=0,q=0,Q=0){let{rawX:H,rawY:L}=D($,J,K);return{screenX:H-Z+q,screenY:L-k+Q}}function s($,J){return J*$}function C0(){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 R="http://www.w3.org/2000/svg";function S0($){let J=new Map,K=$?.assets;if(K&&typeof K==="object"){for(let[Z,k]of Object.entries(K))if(k&&typeof k==="object"&&typeof k.url==="string")J.set(Z,{url:k.url,anchor:k.anchor})}return(Z)=>J.get(Z)}function I0($,J,K){return N1($.url,J,K,$.anchor)}function t($,J,K){if(!$?.value)throw new G("TEXT_CONTENT_MISSING",`Text content is missing for built-in asset: ${J}`,{asset:J});let Z=document.createElementNS(R,"g"),k=document.createElementNS(R,"text"),q=$.align??"middle",Q=$.fontSize??12,H=$.lineHeight??1.2,L=X1(q,K);k.setAttribute("x",String(L)),k.setAttribute("y",String(-K)),k.setAttribute("text-anchor",q),k.setAttribute("dominant-baseline","text-before-edge"),k.setAttribute("font-family","Arial, Helvetica, sans-serif"),k.setAttribute("font-size",String(Q)),k.setAttribute("font-weight",String($.fontWeight??700)),k.setAttribute("fill",$.fill??"currentColor");let W=P1($.value);for(let[j,M]of W.entries()){let X=document.createElementNS(R,"tspan");X.setAttribute("x",String(L)),X.setAttribute("dy",j===0?"0":String(Q*H)),X.textContent=M,k.appendChild(X)}return Z.appendChild(k),Z}function e($,J,K){let Z=document.createElementNS(R,"g");switch($){case"rectangle":return D0(Z,_1(),J?.rectangle,K),Z;case"polygon":return D0(Z,J?.polygon?.points,J?.polygon,K),Z;case"line":return F1(Z,J?.line,J?.line,K),Z;case"circle":return A1(Z,J?.circle,K),Z;default:throw new G("PRIMITIVE_ASSET_UNKNOWN",`Unknown built-in primitive asset: ${$}`,{asset:$})}}function X1($,J){if($==="start")return-J/2;if($==="end")return J/2;return 0}function P1($){return $.replace(/\r\n?/g,`
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 h="http://www.w3.org/2000/svg";function z0($){let k=new Map,J=$?.assets;if(J&&typeof J==="object"){for(let[K,Z]of Object.entries(J))if(Z&&typeof Z==="object"&&typeof Z.url==="string")k.set(K,{url:Z.url,anchor:Z.anchor,sprite:Z.sprite})}return(K)=>k.get(K)}function D0($,k,J){if($.sprite)return R1($.url,k,J,$.sprite,$.anchor);return T1($.url,k,J,$.anchor)}function n($,k,J){if(!$?.value)throw new j("TEXT_CONTENT_MISSING",`Text content is missing for built-in asset: ${k}`,{asset:k});let K=document.createElementNS(h,"g"),Z=document.createElementNS(h,"text"),q=$.align??"middle",Q=$.fontSize??12,H=$.lineHeight??1.2,G=h1(q,J);Z.setAttribute("x",String(G)),Z.setAttribute("y",String(-J)),Z.setAttribute("text-anchor",q),Z.setAttribute("dominant-baseline","text-before-edge"),Z.setAttribute("font-family","Arial, Helvetica, sans-serif"),Z.setAttribute("font-size",String(Q)),Z.setAttribute("font-weight",String($.fontWeight??700)),Z.setAttribute("fill",$.fill??"currentColor");let V=_1($.value);for(let[U,Y]of V.entries()){let M=document.createElementNS(h,"tspan");M.setAttribute("x",String(G)),M.setAttribute("dy",U===0?"0":String(Q*H)),M.textContent=Y,Z.appendChild(M)}return K.appendChild(Z),K}function e($,k,J){let K=document.createElementNS(h,"g");switch($){case"rectangle":return C0(K,w1(),k?.rectangle,J),K;case"polygon":return C0(K,k?.polygon?.points,k?.polygon,J),K;case"line":return F1(K,k?.line,k?.line,J),K;case"circle":return N1(K,k?.circle,J),K;default:throw new j("PRIMITIVE_ASSET_UNKNOWN",`Unknown built-in primitive asset: ${$}`,{asset:$})}}function h1($,k){if($==="start")return-k/2;if($==="end")return k/2;return 0}function _1($){return $.replace(/\r\n?/g,`
3
3
  `).replace(/\n$/,"").split(`
4
- `)}function _1(){return[[0,0],[1,0],[1,1],[0,1]]}function D0($,J,K,Z){if(!J)return;let k=document.createElementNS(R,"polygon");k.setAttribute("points",J.map((q)=>$0(q,Z)).join(" ")),J0(k,K,{fill:"currentColor",stroke:"none"}),$.appendChild(k)}function F1($,J,K,Z){if(!J?.points)return;let k=document.createElementNS(R,"polyline");k.setAttribute("points",J.points.map((q)=>$0(q,Z)).join(" ")),k.setAttribute("fill","none"),k.setAttribute("stroke-linecap",J.lineCap??"round"),k.setAttribute("stroke-linejoin",J.lineJoin??"round"),J0(k,K,{fill:"none",stroke:"currentColor"}),$.appendChild(k)}function A1($,J,K){let Z=$0([0.5,0.5],K),k=document.createElementNS(R,"circle"),[q,Q]=Z.split(",").map(Number);k.setAttribute("cx",String(q)),k.setAttribute("cy",String(Q)),k.setAttribute("r",String(K*0.2)),J0(k,J,{fill:"currentColor",stroke:"none"}),$.appendChild(k)}function $0($,J){let K=D($[0],$[1],J),Z=D(1,1,J);return`${K.rawX-Z.rawX},${K.rawY-Z.rawY}`}function J0($,J,K){if($.setAttribute("fill",J?.fill??K.fill),$.setAttribute("stroke",J?.stroke??K.stroke),$.setAttribute("stroke-width",String(J?.strokeWidth??0)),$.setAttribute("opacity",String(J?.opacity??1)),J?.dash)$.setAttribute("stroke-dasharray",J.dash.join(" "))}function N1($,J,K,Z){if(!w1($))throw new G("INVALID_ASSET_URL",`Asset URL is unsafe: ${J}`,{asset:J});let k=document.createElementNS(R,"g"),q=document.createElementNS(R,"image"),Q=T1($),[H,L]=Z??[0.5,1];return q.setAttribute("href",Q),q.setAttributeNS("http://www.w3.org/1999/xlink","href",Q),q.setAttribute("x",String(-K*H)),q.setAttribute("y",String(-K*L)),q.setAttribute("width",String(K)),q.setAttribute("height",String(K)),q.setAttribute("preserveAspectRatio","xMidYMax meet"),k.appendChild(q),k}function T1($){try{let J=document.baseURI;return typeof J==="string"?new URL($,J).href:$}catch{return $}}function w1($){let J=$.trim().toLowerCase();return J.length>0&&!J.startsWith("javascript:")}var R1=/^--[a-zA-Z0-9-_]+$/;function h0($,J){for(let[K,Z]of Object.entries(J)){if(!R1.test(K))throw new G("INVALID_THEME_VAR",`Invalid CSS custom property name: ${K}`);$.style.setProperty(K,Z)}}var Y="http://www.w3.org/2000/svg",b0="text",z1=new Set(["rectangle","circle","polygon","line"]),C1={dashed:[12,8],dotted:[0,8]},q0=0.14,Z0=0.35,D1=0.28,f0=0.4;function v0($,J,K){let Z=W0(J),k=J.scenes[0],q=c1(J),Q=p1(J),H=new Map((k?.elements??[]).map((V)=>[V.id,V])),L=new Map((k?.connectors??[]).map((V)=>[V.id,V])),W=y1(Z,K?.label,J.className),j=S0(J);W.appendChild(g1()),h0(W,{...u(J.theme)??{},...J.themeVars??{},...K?.themeVars??{}});let M=v1(J.layers),X=f1(M);if(J.floor.visible)W.appendChild(b1(J,Z));let T=new Map;for(let V of Q){let E=L.get(V.id)??{...V,presence:"removed"},_=i1(E,Z);if(E.presence==="removed")_.isHidden=!0,z(_.node);t0(_,E.ambient??[]),W.appendChild(_.node),T.set(V.id,_)}let C=document.createElementNS(Y,"g");C.classList.add("iso-depth-layer"),C.setAttribute("data-layer","depth"),W.appendChild(C);let U=document.createElementNS(Y,"g");U.classList.add("iso-layer","iso-layer-labels"),U.setAttribute("data-layer","labels"),W.appendChild(U);let F=new Map,b=m1(q);for(let V of b){if(!X.get(V.layer))throw new G("MISSING_LAYER",`Unknown layer for "${V.id}": ${V.layer}`);let _=H.get(V.id)??{...V,presence:"removed"},A=u1(_,Z,j);if(A.anchor=s0(J,_),A.node.classList.add(`iso-layer-${V.layer}`),A.node.setAttribute("data-layer",V.layer),_.presence==="removed")A.isHidden=!0,z(A.node);n0(A,_.ambient??[]),(l(V.asset)?U:C).appendChild(A.node),F.set(V.id,A)}return W._layerMap=X,W._elementMap=F,W._connectorMap=T,$.appendChild(W),W}function m0($,J,K=[]){let Z=$._layout;if(!Z)return;let k=$._elementMap;if(k)for(let Q of J){let H=k.get(Q.id);if(!H)continue;H.current=Q,l1(H.node,Q,Z),o0(H.node,Q,Z),n0(H,Q.ambient??[])}let q=$._connectorMap;if(!q)return;for(let Q of K){let H=q.get(Q.id);if(!H)continue;r0(H,Q,Z)}}function c0($,J){return $._elementMap?.get(J)}function p0($,J){return $._connectorMap?.get(J)}function S($){return W0($).viewBox}function Q0($,J){let K=$._layout,Z=$._elementMap?.get(J);if(!K||!Z||Z.current.presence==="removed")return;return i0(h1(Z.current,K,Z.anchor))}function H0($,J){let K=W0($),[Z,k]=J.at,[q,Q]=J.size,H=i();for(let L of[[Z,k],[Z+q,k],[Z,k+Q],[Z+q,k+Q]]){let W=h(L[0],L[1],K.cellSize,K.selectedBounds.minX,K.selectedBounds.minY,K.padding.x,K.padding.y);H=L0(H,W.screenX,W.screenY)}return i0(H)}function u0($,J){$.setAttribute("viewBox",`${J.minX} ${J.minY} ${J.width} ${J.height}`)}function z($){$.style.visibility="hidden",$.style.pointerEvents="none"}function m($){$.style.visibility="visible",$.style.pointerEvents="auto"}function W0($){let J=$.grid.cellSize,K=$.layout.padding,Z=S1($,J),k=E1($,J),q=x1($.layout.bounds,Z,k),Q=q.maxX-q.minX+K.x*2,H=q.maxY-q.minY+K.y*2,L={minX:0,minY:0,width:g(Q||J),height:g(H||J)};return{cellSize:J,padding:K,contentBounds:Z,floorBounds:k,selectedBounds:q,viewBox:L}}function S1($,J){let K=i();for(let Z of $.scenes){for(let k of Z.elements??[]){if(k.presence==="removed")continue;K=k0(K,I1($,k,J))}for(let k of Z.connectors??[]){if(k.presence==="removed")continue;K=k0(K,B1(k,J))}}return l0(K,J)}function I1($,J,K){let{rawX:Z,rawY:k}=D(J.pos[0]+J.size,J.pos[1]+J.size,K),q=s(J.size,K),[Q,H]=s0($,J);return{minX:Z-q*Q,minY:k-q*H,maxX:Z+q*(1-Q),maxY:k+q*(1-H)}}function h1($,J,K){let Z=h($.pos[0]+$.size,$.pos[1]+$.size,J.cellSize,J.selectedBounds.minX,J.selectedBounds.minY,J.padding.x,J.padding.y),k=s($.size,J.cellSize);return{minX:Z.screenX-k*K[0],minY:Z.screenY-k*K[1],maxX:Z.screenX+k*(1-K[0]),maxY:Z.screenY+k*(1-K[1])}}function s0($,J){return $.assets?.[J.asset]?.anchor??[0.5,1]}function B1($,J){let K=i();for(let[Q,H]of $.route){let{rawX:L,rawY:W}=D(Q,H,J);K=L0(K,L,W)}let Z=Math.max(Z0,f0,q0*2)*J,k=$.style.strokeWidth/2+($.style.outlineWidth??0),q=Z+k;return{minX:K.minX-q,minY:K.minY-q,maxX:K.maxX+q,maxY:K.maxY+q}}function E1($,J){let K=$.floor.origin,[Z,k]=$.floor.size,q=[K,[K[0]+Z,K[1]],[K[0],K[1]+k],[K[0]+Z,K[1]+k]],Q=i();for(let[H,L]of q){let{rawX:W,rawY:j}=D(H,L,J);Q=L0(Q,W,j)}return l0(Q,J)}function x1($,J,K){if($==="content")return J;if($==="floor")return K;return k0(J,K)}function i(){return{minX:Number.POSITIVE_INFINITY,minY:Number.POSITIVE_INFINITY,maxX:Number.NEGATIVE_INFINITY,maxY:Number.NEGATIVE_INFINITY}}function l0($,J){if(Number.isFinite($.minX))return $;return{minX:0,minY:0,maxX:J,maxY:J}}function i0($){let J=($.minX+$.maxX)/2,K=($.minY+$.maxY)/2,Z=Math.max(1,$.maxX-$.minX),k=Math.max(1,$.maxY-$.minY);return{minX:g(J-Z/2),minY:g(K-k/2),width:g(Z),height:g(k)}}function L0($,J,K){return{minX:Math.min($.minX,J),minY:Math.min($.minY,K),maxX:Math.max($.maxX,J),maxY:Math.max($.maxY,K)}}function k0($,J){return{minX:Math.min($.minX,J.minX),minY:Math.min($.minY,J.minY),maxX:Math.max($.maxX,J.maxX),maxY:Math.max($.maxY,J.maxY)}}function g($){return Math.round($*1000)/1000}function y1($,J,K){let Z=document.createElementNS(Y,"svg");Z.classList.add("iso-scene");for(let k of K?.trim().split(/\s+/)??[])if(k)Z.classList.add(k);if(Z.setAttribute("width","100%"),Z.setAttribute("height","100%"),Z.setAttribute("viewBox",`${$.viewBox.minX} ${$.viewBox.minY} ${$.viewBox.width} ${$.viewBox.height}`),Z.setAttribute("preserveAspectRatio","xMidYMid meet"),Z.style.width="100%",Z.style.height="100%",Z.style.display="block",J)Z.setAttribute("role","img"),Z.setAttribute("aria-label",J);else Z.setAttribute("aria-hidden","true");return Z._layout=$,Z._viewBoxW=$.viewBox.width,Z._viewBoxH=$.viewBox.height,Z}function g1(){let $=document.createElementNS(Y,"style");return $.textContent=C0(),$}function b1($,J){let K=document.createElementNS(Y,"g");K.classList.add("iso-floor-grid",`iso-layer-${$.floor.layer}`),K.setAttribute("data-layer",$.floor.layer);let[Z,k]=$.floor.origin,[q,Q]=$.floor.size,H=[P(Z,k,J),P(Z+q,k,J),P(Z+q,k+Q,J),P(Z,k+Q,J)],L=document.createElementNS(Y,"polygon");L.classList.add("iso-floor-slab"),L.setAttribute("points",H.map(U0).join(" ")),L.setAttribute("fill","#dbe6f4"),L.setAttribute("fill-opacity","0.22"),L.setAttribute("stroke","#b9c9df"),L.setAttribute("stroke-width","1"),K.appendChild(L);for(let W=0;W<=q;W++)K.appendChild(B0(P(Z+W,k,J),P(Z+W,k+Q,J)));for(let W=0;W<=Q;W++)K.appendChild(B0(P(Z,k+W,J),P(Z+q,k+W,J)));return K}function B0($,J){let K=document.createElementNS(Y,"line");return K.setAttribute("x1",String($.x)),K.setAttribute("y1",String($.y)),K.setAttribute("x2",String(J.x)),K.setAttribute("y2",String(J.y)),K.setAttribute("stroke","#2563eb"),K.setAttribute("stroke-width","1"),K.setAttribute("stroke-dasharray","5 5"),K.setAttribute("stroke-opacity","0.2"),K}function P($,J,K){let Z=h($,J,K.cellSize,K.selectedBounds.minX,K.selectedBounds.minY,K.padding.x,K.padding.y);return{x:Z.screenX,y:Z.screenY}}function U0($){return`${$.x},${$.y}`}function f1($){return new Map($.map((J)=>[J.name,J]))}function v1($){return[...$].map((J,K)=>({name:J.name,order:J.order??K})).sort((J,K)=>J.order-K.order||J.name.localeCompare(K.name))}function m1($){return $.slice().sort((J,K)=>{let Z=E0(J)-E0(K);if(Z!==0)return Z;let k=J.pos[0]+J.pos[1]-(K.pos[0]+K.pos[1]);if(k!==0)return k;return J.id.localeCompare(K.id)})}function E0($){if(V0($.asset))return 0;if(l($.asset))return 2;return 1}function c1($){let J=new Map;for(let K of $.scenes)for(let Z of K.elements??[])if(!J.has(Z.id)||J.get(Z.id)?.presence==="removed")J.set(Z.id,Z);return[...J.values()]}function p1($){let J=new Map;for(let K of $.scenes)for(let Z of K.connectors??[])if(!J.has(Z.id)||J.get(Z.id)?.presence==="removed")J.set(Z.id,Z);return[...J.values()]}function u1($,J,K){let Z=$.asset===b0?t($.text,$.asset,J.cellSize):V0($.asset)?e($.asset,$.primitive,J.cellSize):s1($,K,J.cellSize);Z.classList.add("iso-element",`iso-element-${$.id}`),Z.setAttribute("data-id",$.id),Z.setAttribute("data-asset",$.asset),Z.style.overflow="visible",Z.style.pointerEvents="auto",o0(Z,$,J);let k=$.enter;if(k&&k!=="none"&&$.presence!=="removed"){let q=`iso-anim-${k}`;return B(Z,q,"enter"),Z.addEventListener("animationend",()=>{Z.style.animation=""},{once:!0}),{node:Z,current:$,anchor:[0.5,1],isHidden:!1,entryKey:k,ambient:new Set}}return{node:Z,current:$,anchor:[0.5,1],isHidden:!1,ambient:new Set}}function l($){return $===b0}function V0($){return z1.has($)}function s1($,J,K){let Z=J($.asset);if(!Z)throw new G("ASSET_NOT_FOUND",`Asset not found: ${$.asset}`,{asset:$.asset,elementId:$.id});return I0(Z,$.asset,K)}function l1($,J,K){if(!l(J.asset)&&!V0(J.asset))return;let Z=l(J.asset)?t(J.text,J.asset,K.cellSize):e(J.asset,J.primitive,K.cellSize);a0($);while(Z.firstChild){let k=Z.firstChild;Z.removeChild(k),$.appendChild(k)}}function i1($,J){let K=document.createElementNS(Y,"g"),Z=document.createElementNS(Y,"path"),k={node:K,shaft:Z,isHidden:!1,ambient:new Set};r0(k,$,J);let q=$.enter;if(q&&q!=="none"&&$.presence!=="removed")B(K,`iso-anim-${q}`,"enter"),K.addEventListener("animationend",()=>{K.style.animation=""},{once:!0});return k}function r0($,J,K){r1($.node,J),a0($.node);let Z=d1(J.route,K);if(a1(J)){let k=document.createElementNS(Y,"path");k.classList.add("iso-connector-outline"),K0(k,J,Z,{stroke:J.style.outline??J.style.stroke,strokeWidth:J.style.strokeWidth+J.style.outlineWidth*2,includeDash:!1}),$.node.appendChild(k)}if($.shaft=document.createElementNS(Y,"path"),$.shaft.classList.add("iso-connector-shaft"),K0($.shaft,J,Z,{stroke:J.style.stroke,strokeWidth:J.style.strokeWidth,includeDash:!0}),$.node.appendChild($.shaft),J.style.variant==="road"&&J.style.lane==="center-dashed"){let k=document.createElementNS(Y,"path");k.classList.add("iso-connector-lane"),K0(k,J,Z,{stroke:"#ffffff",strokeWidth:Math.max(1,J.style.strokeWidth*0.12),includeDash:!1}),k.setAttribute("stroke-dasharray","8 8"),$.node.appendChild(k)}x0($.node,J,"start",K),x0($.node,J,"end",K),t0($,J.ambient??[])}function a0($){while($.firstChild)$.removeChild($.firstChild)}function r1($,J){$.setAttribute("class",["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}`].join(" ")),$.setAttribute("data-id",J.id),$.setAttribute("data-layer",J.layer),$.style.overflow="visible",$.style.pointerEvents="auto"}function a1($){return Boolean($.style.outline&&$.style.outlineWidth>0)}function K0($,J,K,Z){if($.setAttribute("d",K),$.setAttribute("fill","none"),$.setAttribute("stroke",Z.stroke),$.setAttribute("stroke-width",String(Z.strokeWidth)),$.setAttribute("stroke-linecap","round"),$.setAttribute("stroke-linejoin","round"),$.setAttribute("opacity",String(J.style.opacity)),Z.includeDash&&J.style.pattern!=="solid"){let k=J.style.dash??C1[J.style.pattern];$.setAttribute("stroke-dasharray",k.join(" "))}}function d1($,J){return $.map((K,Z)=>{let k=P(K[0],K[1],J);return`${Z===0?"M":"L"} ${k.x} ${k.y}`}).join(" ")}function x0($,J,K,Z){let k=J[K];if(k==="none"||J.route.length<2)return;let q=o1(k,J,K,Z);q.classList.add(`iso-connector-${K}`),$.appendChild(q)}function o1($,J,K,Z){switch($){case"arrow":return n1(J,K,Z);case"dot":return y0(J,K,Z,!0);case"circle":return y0(J,K,Z,!1);case"diamond":return t1(J,K,Z);case"bar":return e1(J,K,Z);case"none":throw new G("CONNECTOR_ENDPOINT_NONE","Cannot create geometry for endpoint none")}}function n1($,J,K){let Z=r($,J),k=d0($,J),q=[-k[1],k[0]],Q=[Z[0]-k[0]*Z0,Z[1]-k[1]*Z0],H=D1/2,L=[Z,[Q[0]+q[0]*H,Q[1]+q[1]*H],[Q[0]-q[0]*H,Q[1]-q[1]*H]].map((j)=>P(j[0],j[1],K)),W=document.createElementNS(Y,"polygon");return W.setAttribute("points",L.map(U0).join(" ")),W.setAttribute("fill",$.style.stroke),W.setAttribute("opacity",String($.style.opacity)),W}function y0($,J,K,Z){let k=r($,J),q=P(k[0],k[1],K),Q=document.createElementNS(Y,"circle");return Q.setAttribute("cx",String(q.x)),Q.setAttribute("cy",String(q.y)),Q.setAttribute("r",String(q0*K.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",Z?$.style.stroke:"none"),Q}function t1($,J,K){let Z=r($,J),k=q0,q=[[Z[0],Z[1]-k],[Z[0]+k,Z[1]],[Z[0],Z[1]+k],[Z[0]-k,Z[1]]],Q=document.createElementNS(Y,"polygon");return Q.setAttribute("points",q.map((H)=>P(H[0],H[1],K)).map(U0).join(" ")),Q.setAttribute("fill",$.style.stroke),Q.setAttribute("opacity",String($.style.opacity)),Q}function e1($,J,K){let Z=r($,J),k=d0($,J),q=[-k[1],k[0]],Q=f0/2,H=P(Z[0]+q[0]*Q,Z[1]+q[1]*Q,K),L=P(Z[0]-q[0]*Q,Z[1]-q[1]*Q,K),W=document.createElementNS(Y,"line");return W.setAttribute("x1",String(H.x)),W.setAttribute("y1",String(H.y)),W.setAttribute("x2",String(L.x)),W.setAttribute("y2",String(L.y)),W.setAttribute("stroke",$.style.stroke),W.setAttribute("stroke-width",String(Math.max(1,$.style.strokeWidth))),W.setAttribute("stroke-linecap","round"),W.setAttribute("opacity",String($.style.opacity)),W}function r($,J){return J==="start"?$.route[0]:$.route[$.route.length-1]}function d0($,J){let K=J==="start"?g0($.route[0],$.route[1]):g0($.route[$.route.length-2],$.route[$.route.length-1]),Z=$.direction==="reverse"?[-K[0],-K[1]]:K;return $5(Z)}function g0($,J){return[J[0]-$[0],J[1]-$[1]]}function $5($){let J=Math.hypot($[0],$[1]);if(J===0)return[1,0];return[$[0]/J,$[1]/J]}function o0($,J,K){let Z=h(J.pos[0]+J.size,J.pos[1]+J.size,K.cellSize,K.selectedBounds.minX,K.selectedBounds.minY,K.padding.x,K.padding.y),q=s(J.size,K.cellSize)/K.cellSize;$.setAttribute("transform",`translate(${Z.screenX} ${Z.screenY}) scale(${q})`)}function n0($,J){let K=new Set((J??[]).map((Z)=>Z.name));for(let Z of $.ambient)if(!K.has(Z))$.node.classList.remove(`iso-ambient-${Z}`);for(let Z of K)if(!$.ambient.has(Z))$.node.classList.add(`iso-ambient-${Z}`);$.ambient=K}function t0($,J){let K=new Set((J??[]).map((Z)=>Z.name));for(let Z of $.ambient)if(!K.has(Z))$.shaft.classList.remove(`iso-ambient-${Z}`);for(let Z of K)$.shaft.classList.add(`iso-ambient-${Z}`);$.ambient=K}function B($,J,K="enter"){$.style.opacity="1",$.style.animation="none",$.getBoundingClientRect();let Z=K==="exit"?"var(--iso-anim-duration-exit, 300ms)":"var(--iso-anim-duration-enter, 400ms)",k=K==="exit"?"var(--iso-anim-easing-exit, ease-in)":"var(--iso-anim-easing-enter, ease-out)";$.style.animation=`${J} ${Z} ${k} forwards`}function J5($){return $}function K5($){return $*$*$}function Z5($){return 1-(1-$)**3}function k5($){return $<0.5?4*$*$*$:1-(-2*$+2)**3/2}function G0($){switch($){case"linear":return J5;case"easeInCubic":return K5;case"easeOutCubic":return Z5;case"easeInOutCubic":return k5}}var e0={scrollDirection:"vertical",scrollOffset:{},minProgress:0,maxProgress:1,keyboardControls:!1,touchControls:!1,scrollSensitivity:1,transitionDuration:600,transitionEasing:"ease-in-out"};class j0{_engine=new y;_bundle=null;_sceneIndex=0;_progress=0;_paused=!1;_config=e0;_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($,J={},K={}){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=K.engine??new y,this._ownsEngine=!K.engine,this._sceneIndex=0,this._progress=0,this._paused=!1,this._config={...e0,...J},this._sceneElement=K.sceneElement??J.sceneElement??null,this._cameraState={viewBox:S($),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 J=Math.max(0,Math.min(1,$));if(J===this._progress&&!this._paused&&this._rafId!==null)return;if(this._progress=J,this._cancelCameraAnimation(),this._paused)return;this._scheduleProgressForward(J)}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($,J={}){this._assertNotDestroyed();let K=this._getSceneSvg();if(!this._bundle||!K)throw new O("CAMERA_NOT_INITIALIZED","zoomToElement() requires an initialized scene SVG");let Z=Q0(K,$);if(!Z)throw new O("CAMERA_TARGET_NOT_FOUND",`Camera target element "${$}" was not found`,{elementId:$});this._applyCameraDestination(a(Z,this._resolveCameraPadding(J)),{type:"element",id:$},J)}zoomToArea($,J={}){if(this._assertNotDestroyed(),!this._bundle||!this._getSceneSvg())throw new O("CAMERA_NOT_INITIALIZED","zoomToArea() requires an initialized scene SVG");this._assertValidCameraArea($);let K=H0(this._bundle,$);this._applyCameraDestination(a(K,this._resolveCameraPadding(J)),{type:"area",at:[...$.at],size:[...$.size]},J)}resetZoom($={}){if(this._assertNotDestroyed(),!this._bundle||!this._getSceneSvg())throw new O("CAMERA_NOT_INITIALIZED","resetZoom() requires an initialized scene SVG");this._applyCameraDestination(S(this._bundle),{type:"reset"},$)}getCameraState(){if(this._assertNotDestroyed(),!this._cameraState)throw new O("CAMERA_NOT_INITIALIZED","Camera state is not initialized");return W5(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($,J){this._assertNotDestroyed();let K=this._listeners.get($)??new Set;K.add(J),this._listeners.set($,K)}off($,J){this._assertNotDestroyed();let K=this._listeners.get($);if(K)K.delete(J)}_emit($,...J){let K=this._listeners.get($);if(K)for(let Z of K)try{Z(...J)}catch(k){queueMicrotask(()=>{throw k})}}_scheduleProgressForward($){if(this._pendingProgress=$,this._rafId!==null)return;this._rafId=requestAnimationFrame(()=>{this._rafId=null;let J=this._pendingProgress;if(this._pendingProgress=null,J===null||this._paused||this._destroyed)return;this._engine.setProgress(J),this._applyFrameUpdate(),this._emit("progress-change",J)})}_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 J=this._engine.getFrameUpdates().map((Z)=>({id:Z.id,asset:Z.asset,pos:Z.pos,size:Z.size,layer:Z.layer,presence:Z.lifecycle,enter:Z.entry,exit:Z.exit,ambient:Z.ambient,text:Z.text,primitive:Z.primitive})),K=this._engine.getConnectorFrameUpdates().map((Z)=>({id:Z.id,route:Z.route,layer:Z.layer,presence:Z.lifecycle,style:Z.style,start:Z.start,end:Z.end,direction:Z.direction,enter:Z.entry,exit:Z.exit,ambient:Z.ambient}));m0($,J,K),this._applyLifecycleChanges(J),this._applyConnectorLifecycleChanges(K),this._applyCameraForProgress(this._progress)}_applyCameraForProgress($){let J=this._getSceneSvg();if(!this._bundle||!J)return;let K=this.scenes;if(K.length===0)return;let{previous:Z,next:k}=q5(K,$),q=this._effectiveCameraAt(Z.index),Q=this._effectiveCameraAt(k.index),H=this._resolveCameraViewBox(q),L=this._resolveCameraViewBox(Q),W=k.scene.progress-Z.scene.progress,j=W<=0?0:($-Z.scene.progress)/W,M=H1(Q.easing)(Math.max(0,Math.min(1,j))),X=Q1(H,L,M),T=M<1?q.target:Q.target;this._setCameraViewBox(J,X,T)}_effectiveCameraAt($){for(let J=$;J>=0;J--){let K=this.scenes[J]?.camera;if(K)return{target:K.target,padding:K.padding,duration:K.duration,easing:K.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 S(this._bundle);if($.target.type==="area")return a(H0(this._bundle,{at:$.target.at,size:$.target.size}),$.padding??32);let J=this._getSceneSvg();if(!J)throw new O("CAMERA_NOT_INITIALIZED","Camera requires an initialized scene SVG");let K=Q0(J,$.target.id);if(!K)throw new O("CAMERA_TARGET_NOT_FOUND",`Camera target element "${$.target.id}" was not found`,{elementId:$.target.id});return a(K,$.padding??32)}_applyCameraDestination($,J,K){let Z=this._getSceneSvg();if(!Z)throw new O("CAMERA_NOT_INITIALIZED","Camera requires an initialized scene SVG");this._cancelCameraAnimation();let k=this._resolveCameraDuration(K);if(k===0){this._setCameraViewBox(Z,$,J);return}let q=H5(Z)??this._cameraState?.viewBox??$,Q=H1(K.easing??this._config.transitionEasing),H=performance.now(),L=(W)=>{let j=Math.min((W-H)/k,1);if(this._setCameraViewBox(Z,Q1(q,$,Q(j)),J),j<1)this._cameraAnim=requestAnimationFrame(L);else this._cameraAnim=null};this._cameraAnim=requestAnimationFrame(L)}_setCameraViewBox($,J,K){u0($,J);let Z=this._bundle?S(this._bundle):J;this._cameraState={viewBox:J,target:K,isZoomed:!Q5(J,Z)},this._emit("camera-change",this.getCameraState())}_getSceneSvg(){return this._sceneElement??this._container?.querySelector("svg")??null}_resolveCameraPadding($){let J=$.padding??32;if(!Number.isFinite(J)||J<0||J>2048)throw new O("INVALID_CAMERA_OPTIONS","Camera padding must be between 0 and 2048");return J}_resolveCameraDuration($){let J=$.duration??this._config.transitionDuration;if(!Number.isInteger(J)||J<0||J>1e4)throw new O("INVALID_CAMERA_OPTIONS","Camera duration must be an integer from 0 to 10000");return J}_assertValidCameraArea($){if(!Array.isArray($.at)||$.at.length!==2||!$.at.every((J)=>Number.isFinite(J)&&J>=0)||!Array.isArray($.size)||$.size.length!==2||!$.size.every((J)=>Number.isFinite(J)&&J>0))throw new O("INVALID_CAMERA_OPTIONS","Camera area must use non-negative at and positive size")}_applyLifecycleChanges($){for(let J of $){let K=this._engine.getLifecycleTransition(J.id);if(!K)continue;let Z=this._sceneElement??this._container?.querySelector("svg");if(!Z)continue;let k=c0(Z,J.id);if(!k)continue;if(K.to==="entering"||K.to==="present")k.isHidden=!1,m(k.node);if($1(K))this._applyEntryAnimation(J,k);if(K1(K)){this._applyExitAnimation({...J,exit:k1(J.enter??"fade-in")},k);continue}if(J1(K))this._applyExitAnimation(J,k);if(Z1(K)){k.isHidden=!1,m(k.node),this._applyEntryAnimation({...J,enter:q1(J.exit??"fade-out")},k);continue}if(K.to==="removed")k.isHidden=!0,z(k.node)}}_applyConnectorLifecycleChanges($){for(let J of $){let K=this._engine.getConnectorLifecycleTransition(J.id);if(!K)continue;let Z=this._sceneElement??this._container?.querySelector("svg");if(!Z)continue;let k=p0(Z,J.id);if(!k)continue;if(K.to==="entering"||K.to==="present")k.isHidden=!1,m(k.node);if($1(K))this._applyConnectorEntryAnimation(J,k);if(K1(K)){this._applyConnectorExitAnimation({...J,exit:k1(J.enter??"fade-in")},k);continue}if(J1(K))this._applyConnectorExitAnimation(J,k);if(Z1(K)){k.isHidden=!1,m(k.node),this._applyConnectorEntryAnimation({...J,enter:q1(J.exit??"fade-out")},k);continue}if(K.to==="removed")k.isHidden=!0,z(k.node)}}_applyEntryAnimation($,J){let K=$.enter??"fade-in";if(K==="none")return;B(J.node,`iso-anim-${K}`,"enter");let Z=J.node.style.animation;J.node.addEventListener("animationend",()=>{if(J.node.style.animation===Z)J.node.style.animation=""},{once:!0})}_applyExitAnimation($,J){let K=$.exit??"fade-out";if(K==="none"){z(J.node);return}B(J.node,`iso-anim-${K}`,"exit");let Z=J.node.style.animation;J.node.addEventListener("animationend",()=>{if(J.node.style.animation===Z)z(J.node)},{once:!0})}_applyConnectorEntryAnimation($,J){let K=$.enter??"fade-in";if(K==="none")return;B(J.node,`iso-anim-${K}`,"enter");let Z=J.node.style.animation;J.node.addEventListener("animationend",()=>{if(J.node.style.animation===Z)J.node.style.animation=""},{once:!0})}_applyConnectorExitAnimation($,J){let K=$.exit??"fade-out";if(K==="none"){z(J.node);return}B(J.node,`iso-anim-${K}`,"exit");let Z=J.node.style.animation;J.node.addEventListener("animationend",()=>{if(J.node.style.animation===Z)z(J.node)},{once:!0})}_transitionToScene($){if(this._cancelTransition(),$===this._sceneIndex)return;this._sceneIndex=$,this._emit("scene-change",$);let J=this.scenes[$],K=this._progress,Z=J.progress,k=this._config.transitionDuration;if(k>0&&K!==Z){this._animateProgress(K,Z,k);return}this._progress=Z,this._scheduleProgressForward(Z)}_animateProgress($,J,K){let Z=G0(this._config.transitionEasing==="ease-in-out"?"easeInOutCubic":this._config.transitionEasing==="ease-out"?"easeOutCubic":"linear"),k=performance.now(),q=(Q)=>{let H=Q-k,L=Math.min(H/K,1),W=Z(L),j=$+(J-$)*W;if(this.setProgress(j),L<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 J=this._config.scrollOffset??{};if(this._config.scrollDirection==="horizontal"){this._minScroll=J.left??0,this._maxScroll=$.scrollWidth-$.clientWidth-(J.right??0);return}this._minScroll=J.top??0,this._maxScroll=$.scrollHeight-$.clientHeight-(J.bottom??0)}_onScroll=()=>{if(this._paused||this._destroyed)return;let $=this._config.container;if(!$)return;let J=this._config.scrollDirection==="horizontal"?$.scrollLeft:$.scrollTop,K=this._maxScroll-this._minScroll;if(K<=0)return;let Z=(J-this._minScroll)/K,k=Math.max(this._config.minProgress??0,Math.min(this._config.maxProgress??1,Z)),q=this._config.scrollSensitivity??1;if(k!==this._progress)this.setProgress(k*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 J=$.touches[0];if(this._config.scrollDirection==="horizontal")this._touchStartX=J.clientX;else this._touchStartY=J.clientY};_onTouchMove=($)=>{if(this._destroyed)return;if(!this._isDragging)return;let J=$.touches[0],K=this._config.scrollDirection==="horizontal"?this._touchStartX-J.clientX:this._touchStartY-J.clientY,Z=this._config.scrollSensitivity??1,k=K/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 J=this._config.container;if(!J)return;let K=J.querySelector("svg");if(!K)return;let Z=$?"paused":"running",k=K.querySelectorAll('[class*="iso-ambient-"]');for(let q=0;q<k.length;q++){let Q=k[q];Q.style.animationPlayState=Z}}_assertNotDestroyed(){if(!this._destroyed)return;throw new O("CONTROLLER_DESTROYED","AnimationController has been destroyed")}}function $1($){return $.from==="removed"&&$.to==="entering"}function J1($){return $.to==="exiting"}function K1($){return $.to==="removed"&&$.from!=="exiting"}function Z1($){return $.from==="exiting"&&$.to!=="removed"}function k1($){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 q1($){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 q5($,J){let K=0,Z=$.length-1;for(let k=0;k<$.length;k++){if($[k].progress<=J)K=k;if($[k].progress>=J){Z=k;break}}return{previous:{scene:$[K],index:K},next:{scene:$[Z],index:Z}}}function a($,J){return{minX:I($.minX-J),minY:I($.minY-J),width:I(Math.max(1,$.width+J*2)),height:I(Math.max(1,$.height+J*2))}}function Q1($,J,K){return{minX:I($.minX+(J.minX-$.minX)*K),minY:I($.minY+(J.minY-$.minY)*K),width:I($.width+(J.width-$.width)*K),height:I($.height+(J.height-$.height)*K)}}function Q5($,J){return $.minX===J.minX&&$.minY===J.minY&&$.width===J.width&&$.height===J.height}function H5($){let J=$.getAttribute("viewBox");if(!J)return;let K=J.trim().split(/\s+/).map(Number);if(K.length!==4||K.some((Z)=>!Number.isFinite(Z)))return;return{minX:K[0],minY:K[1],width:K[2],height:K[3]}}function H1($){return G0($==="ease-in-out"?"easeInOutCubic":$==="ease-out"?"easeOutCubic":"linear")}function W5($){return{viewBox:{...$.viewBox},target:$.target?.type==="area"?{type:"area",at:[...$.target.at],size:[...$.target.size]}:$.target?{...$.target}:void 0,isZoomed:$.isZoomed}}function I($){return Math.round($*1000)/1000}var W1="isostate-runtime-bundle",O0="0.2.0",L5=/^[a-f0-9]{64}$/;function U5($,J,K={}){V5($),G5(J);let Z=new y;Z.init(J);let k=v0($,J,{label:K.label,themeVars:K.themeVars}),q;if(K.controller!==void 0&&K.controller!==!1)q=new j0,q.init(J,{...K.controller,container:K.controller.container??$,sceneElement:k},{engine:Z,sceneElement:k});let Q=!1;return{svg:k,engine:Z,controller:q,getResolvedConfig:()=>j5(J,K),destroy:()=>{if(Q)return;if(Q=!0,q?.destroy(),Z.destroy(),k.parentNode===$)$.removeChild(k);else k.parentNode?.removeChild(k)}}}function V5($){if(!$||typeof $.appendChild!=="function"||typeof $.removeChild!=="function")throw new G("INVALID_MOUNT_TARGET","mountScene() requires a DOM HTMLElement target")}function G5($){if(!$||typeof $!=="object")throw new G("BUNDLE_FORMAT_MISSING","Runtime bundle must be a plain object");if($._format!==W1)throw new G("BUNDLE_FORMAT_MISSING","Runtime bundle format is missing or unsupported",{expected:W1});if(!Array.isArray($.scenes)||$.scenes.length===0)throw new G("BUNDLE_FORMAT_MISSING","Runtime bundle must include compiled scenes[]");if(L1($._version)!==L1(O0))throw new G("BUNDLE_VERSION_MISMATCH",`Runtime bundle version ${$._version} is not compatible with runtime ${O0}`,{bundleVersion:$._version,runtimeVersion:O0});if(!$._digest)throw new G("BUNDLE_DIGEST_MISSING","Runtime bundle digest is missing");if(typeof $._digest!=="string"||!L5.test($._digest))throw new G("BUNDLE_DIGEST_MISMATCH","Runtime bundle digest is malformed");let{_digest:J,...K}=$,Z=X5(Y5(K));if(Z!==J)throw new G("BUNDLE_DIGEST_MISMATCH","Runtime bundle digest does not match bundle content",{expected:J,actual:Z})}function j5($,J={}){return{grid:{cellSize:$.grid.cellSize},floor:{...$.floor},layout:{...$.layout,padding:{...$.layout.padding},align:[...$.layout.align]},viewBox:S($),camera:{viewBox:S($),isZoomed:!1},theme:$.theme,themeVars:O5($,J.themeVars),scenes:$.scenes.map((K)=>({id:K.id,progress:K.progress})),layerOrder:$.layers.map((K)=>({name:K.name,order:K.order})).sort((K,Z)=>K.order-Z.order||K.name.localeCompare(Z.name))}}function O5($,J={}){return{...u($.theme)??{},...$.themeVars??{},...J}}function L1($){let J=Number.parseInt(String($).split(".")[0]??"",10);return Number.isFinite(J)?J:Number.NaN}function Y5($){return JSON.stringify(Y0($))}function Y0($){if(Array.isArray($))return $.map((K)=>K===void 0?null:Y0(K));if(!M5($))return $;let J={};for(let K of Object.keys($).sort()){let Z=$[K];if(Z!==void 0)J[K]=Y0(Z)}return J}function M5($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function X5($){let J=P5($),K=J.length*8;J.push(128);while(J.length%64!==56)J.push(0);for(let Q=7;Q>=0;Q--)J.push(Math.floor(K/2**(Q*8))&255);let Z=[1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225],k=[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<J.length;Q+=64){for(let U=0;U<16;U++){let F=Q+U*4;q[U]=(J[F]<<24|J[F+1]<<16|J[F+2]<<8|J[F+3])>>>0}for(let U=16;U<64;U++){let F=N(q[U-15],7)^N(q[U-15],18)^q[U-15]>>>3,b=N(q[U-2],17)^N(q[U-2],19)^q[U-2]>>>10;q[U]=q[U-16]+F+q[U-7]+b>>>0}let[H,L,W,j,M,X,T,C]=Z;for(let U=0;U<64;U++){let F=N(M,6)^N(M,11)^N(M,25),b=M&X^~M&T,V=C+F+b+k[U]+q[U]>>>0,E=N(H,2)^N(H,13)^N(H,22),_=H&L^H&W^L&W,A=E+_>>>0;C=T,T=X,X=M,M=j+V>>>0,j=W,W=L,L=H,H=V+A>>>0}Z[0]=Z[0]+H>>>0,Z[1]=Z[1]+L>>>0,Z[2]=Z[2]+W>>>0,Z[3]=Z[3]+j>>>0,Z[4]=Z[4]+M>>>0,Z[5]=Z[5]+X>>>0,Z[6]=Z[6]+T>>>0,Z[7]=Z[7]+C>>>0}return Z.map((Q)=>Q.toString(16).padStart(8,"0")).join("")}function P5($){return Array.from(new TextEncoder().encode($))}function N($,J){return $>>>J|$<<32-J}function n5($,J,K,Z,k,q,Q){return h($,J,K,Z,k,q,Q)}export{n5 as projectToScreen,U5 as mountScene};
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};
5
5
 
6
- //# debugId=00B086D81CE9D85E64756E2164756E21
6
+ //# debugId=319C46FE1DC41F6964756E2164756E21