exodeui 6.4.1 → 6.4.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,19 +1,19 @@
1
- (function(Kt,Qt){typeof exports=="object"&&typeof module<"u"?Qt(exports,require("react/jsx-runtime"),require("react"),require("@chenglou/pretext"),require("@dimforge/rapier2d-compat"),require("lz-string")):typeof define=="function"&&define.amd?define(["exports","react/jsx-runtime","react","@chenglou/pretext","@dimforge/rapier2d-compat","lz-string"],Qt):(Kt=typeof globalThis<"u"?globalThis:Kt||self,Qt(Kt.ExodeUIReact={},Kt.jsxRuntime,Kt.React,Kt.pretext,Kt.Rapier,Kt.LZString))})(this,(function(Kt,Qt,$t,He,ae,ys){"use strict";var hi=Object.defineProperty;var fi=(Kt,Qt,$t)=>Qt in Kt?hi(Kt,Qt,{enumerable:!0,configurable:!0,writable:!0,value:$t}):Kt[Qt]=$t;var ht=(Kt,Qt,$t)=>fi(Kt,typeof Qt!="symbol"?Qt+"":Qt,$t);function bs(y){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(y){for(const s in y)if(s!=="default"){const o=Object.getOwnPropertyDescriptor(y,s);Object.defineProperty(t,s,o.get?o:{enumerable:!0,get:()=>y[s]})}}return t.default=y,Object.freeze(t)}const vs=bs(ys);var tt=(y=>(y.Proximity="Proximity",y.Magnetic="Magnetic",y.Repel="Repel",y.Orbit="Orbit",y.Vortex="Vortex",y.Fluid="Fluid",y.Elastic="Elastic",y.Holographic="Holographic",y.Sticky="Sticky",y.Dilation="Dilation",y.Parallax="Parallax",y.Noise="Noise",y.Float="Float",y.Pulse="Pulse",y.Draggable="Draggable",y.Scroll="Scroll",y.LookAt="LookAt",y.Glint="Glint",y.Scan="Scan",y.Ratchet="Ratchet",y.Jitter="Jitter",y.Follower="Follower",y.Wrap="Wrap",y.Typewriter="Typewriter",y.Scramble="Scramble",y.Wave="Wave",y.Bounce="Bounce",y.TextTrail="TextTrail",y.Reveal3D="Reveal3D",y.RevealSlide="RevealSlide",y.RevealBlur="RevealBlur",y.TextLiquid="TextLiquid",y.TextVortex="TextVortex",y.TextExplosion="TextExplosion",y.TextRain="TextRain",y.TextGravity="TextGravity",y.TextMatrix="TextMatrix",y.TextNeon="TextNeon",y.TextDissolve="TextDissolve",y.TextOrganic="TextOrganic",y.TextBreathe="TextBreathe",y.TextSpin="TextSpin",y.TextMagnet="TextMagnet",y.TextPerspective="TextPerspective",y.TextMirror="TextMirror",y.TextFloral="TextFloral",y.TextSmoke="TextSmoke",y.TextVariable="TextVariable",y.TextZing="TextZing",y.TextElastic="TextElastic",y.TextGlitch3D="TextGlitch3D",y.GlitchText="GlitchText",y.TextCounter="TextCounter",y.Squash="Squash",y.Spotlight="Spotlight",y.Lens="Lens",y.Gravity="Gravity",y.Velocity="Velocity",y.Shear="Shear",y.LayoutAnimation="LayoutAnimation",y.SpringChain="SpringChain",y.ParticleEmitter="ParticleEmitter",y.StateReactive="StateReactive",y.Fold="Fold",y.Crumple="Crumple",y))(tt||{}),re=(y=>(y.Scale="Scale",y.Opacity="Opacity",y.RotateZ="RotateZ",y.RotateX="RotateX",y.RotateY="RotateY",y.PositionX="PositionX",y.PositionY="PositionY",y.SkewX="SkewX",y.Blur="Blur",y.Exposure="Exposure",y.HueShift="HueShift",y.Negative="Negative",y.CornerRadius="CornerRadius",y.StrokeWidth="StrokeWidth",y.BoxShadow="BoxShadow",y.FontSize="FontSize",y.LetterSpacing="LetterSpacing",y))(re||{}),je=(y=>(y.Equal="Equal",y.NotEqual="NotEqual",y.GreaterThan="GreaterThan",y.LessThan="LessThan",y.GreaterEqual="GreaterEqual",y.LessEqual="LessEqual",y.IsTrue="IsTrue",y.IsFalse="IsFalse",y))(je||{}),_t=(y=>(y.AND="AND",y.OR="OR",y.NOT="NOT",y.XOR="XOR",y.OBJECT="OBJECT",y.PROPERTY="PROPERTY",y.GET_PROPERTY="GET_PROPERTY",y.SET_PROPERTY="SET_PROPERTY",y.ADD="ADD",y.SUB="SUB",y.MUL="MUL",y.DIV="DIV",y.MOD="MOD",y.POW="POW",y.ABS="ABS",y.ROUND="ROUND",y.FLOOR="FLOOR",y.CEIL="CEIL",y.SIN="SIN",y.COS="COS",y.TAN="TAN",y.CLAMP="CLAMP",y.REMAP="REMAP",y.EQ="EQ",y.NEQ="NEQ",y.GT="GT",y.LT="LT",y.GTE="GTE",y.LTE="LTE",y.IF_ELSE="IF_ELSE",y.VALUE="VALUE",y.INPUT="INPUT",y.LOG="LOG",y.SCROLL_X="SCROLL_X",y.SCROLL_Y="SCROLL_Y",y.MOUSE_X="MOUSE_X",y.MOUSE_Y="MOUSE_Y",y.IS_MOUSE_DOWN="IS_MOUSE_DOWN",y.EFFECTOR="EFFECTOR",y.MONITOR="MONITOR",y.DELAY="DELAY",y.SPRING_PULL="SPRING_PULL",y.SPRING_SETTLE="SPRING_SETTLE",y.EMIT="EMIT",y))(_t||{});function Ss(y){if(y.length<5)return y;const t=new Set("aeiouyAEIOUY".split(""));if(/[\u4E00-\u9FFF\u3400-\u4DBF]/.test(y))return y;let o="";for(let e=0;e<y.length;e++){if(o+=y[e],e>=y.length-2)continue;const n=t.has(y[e]),i=t.has(y[e+1]),a=t.has(y[e+2]);n&&!i&&a&&(o+="­"),n&&!i&&!a&&e>=1&&(o+="­")}return o}function Cs(y){return y.replace(/\b([a-zA-Z]{4,})\b/g,(t,s)=>Ss(s))}function ws(y,t,s){return y}function Ms(y,t,s){return y}const Ve=new Map;function ts(y){var I;const{text:t,fontFamily:s="Inter",fontSize:o=16,fontWeight:e=400,fontStyle:n="normal",lineHeight:i=1.2,width:a=200,letterSpacing:r=0,paragraphSpacing:c=0,paragraphIndent:d=0,textCase:p="none",segments:u=[],enableSegments:g=!1}=y;let h=String(t||"");p==="uppercase"?h=h.toUpperCase():p==="lowercase"?h=h.toLowerCase():p==="capitalize"&&(h=h.replace(/\b\w/g,_=>_.toUpperCase())),y.hyphenation===!0&&(h=Cs(h));const f=`${n} ${e} ${o}px "${s}", sans-serif`,v=`${h}|${f}|${r}|${c}|${d}|${g}|${JSON.stringify(u)}|hyp:${!!y.hyphenation}|comp:${y.composer}|bal:${!!y.balanceRaggedLines}`;let m=Ve.get(v);const l=typeof CanvasRenderingContext2D<"u"?CanvasRenderingContext2D.prototype.measureText:null,b=function(_){if(!l)return{width:0,fontBoundingBoxAscent:0,fontBoundingBoxDescent:0};const E=l.call(this,_);return r!==0&&_&&_.length>0?{...E,width:E.width+(_.length-1)*r}:E};if(!m){try{if(r!==0&&typeof CanvasRenderingContext2D<"u"&&(CanvasRenderingContext2D.prototype.measureText=b),g&&u&&u.length>0){const _=u.map(E=>{let P=E.text||"";const L=E.textCase||p||"none";return L==="uppercase"?P.toUpperCase():L==="lowercase"?P.toLowerCase():L==="capitalize"?P.replace(/\b\w/g,k=>k.toUpperCase()):P}).join("");if(m=He.prepareWithSegments(_,f),m){let E=0,P=o;for(const L of u){let k=L.text||"";if(!k)continue;const A=L.textCase||p||"none";A==="uppercase"?k=k.toUpperCase():A==="lowercase"?k=k.toLowerCase():A==="capitalize"&&(k=k.replace(/\b\w/g,O=>O.toUpperCase()));const T=L.fontSize||o;T>P&&(P=T);const R=`${L.fontStyle||n} ${L.fontWeight||e} ${T}px "${L.fontFamily||s}", sans-serif`,F=He.prepareWithSegments(k,R);if(F&&F.widths)for(let O=0;O<F.widths.length;O++){const W=E+O;if(W<m.widths.length){m.widths[W]=F.widths[O];const V=F.kinds[O];if(V===2){const U=k[O];U===`
2
- `||U==="\r"?m.kinds[W]=2:m.kinds[W]=0}else m.kinds[W]=V}}E+=k.length}m.fullText=_,m.maxFontSize=P}}else m=He.prepareWithSegments(h,f);m&&Ve.set(v,m)}catch(_){return console.error("[ExodeUI] Pretext prepare failed:",_),{width:a,height:0,lineCount:0,lines:[]}}finally{r!==0&&typeof CanvasRenderingContext2D<"u"&&l&&(CanvasRenderingContext2D.prototype.measureText=l)}if(Ve.size>500){const _=Ve.keys().next().value;_&&Ve.delete(_)}}if(d>0&&m&&m.widths&&!m.indentApplied){const _=[...m.widths],E=m.fullText||h;let P=!0;for(let L=0;L<E.length;L++)P&&_[L]!==void 0&&(_[L]+=d,P=!1),(E[L]===`
1
+ (function(Kt,Qt){typeof exports=="object"&&typeof module<"u"?Qt(exports,require("react/jsx-runtime"),require("react"),require("@chenglou/pretext"),require("@dimforge/rapier2d-compat"),require("lz-string")):typeof define=="function"&&define.amd?define(["exports","react/jsx-runtime","react","@chenglou/pretext","@dimforge/rapier2d-compat","lz-string"],Qt):(Kt=typeof globalThis<"u"?globalThis:Kt||self,Qt(Kt.ExodeUIReact={},Kt.jsxRuntime,Kt.React,Kt.pretext,Kt.Rapier,Kt.LZString))})(this,(function(Kt,Qt,_t,He,ae,ys){"use strict";var hi=Object.defineProperty;var fi=(Kt,Qt,_t)=>Qt in Kt?hi(Kt,Qt,{enumerable:!0,configurable:!0,writable:!0,value:_t}):Kt[Qt]=_t;var ht=(Kt,Qt,_t)=>fi(Kt,typeof Qt!="symbol"?Qt+"":Qt,_t);function bs(y){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(y){for(const s in y)if(s!=="default"){const o=Object.getOwnPropertyDescriptor(y,s);Object.defineProperty(t,s,o.get?o:{enumerable:!0,get:()=>y[s]})}}return t.default=y,Object.freeze(t)}const vs=bs(ys);var tt=(y=>(y.Proximity="Proximity",y.Magnetic="Magnetic",y.Repel="Repel",y.Orbit="Orbit",y.Vortex="Vortex",y.Fluid="Fluid",y.Elastic="Elastic",y.Holographic="Holographic",y.Sticky="Sticky",y.Dilation="Dilation",y.Parallax="Parallax",y.Noise="Noise",y.Float="Float",y.Pulse="Pulse",y.Draggable="Draggable",y.Scroll="Scroll",y.LookAt="LookAt",y.Glint="Glint",y.Scan="Scan",y.Ratchet="Ratchet",y.Jitter="Jitter",y.Follower="Follower",y.Wrap="Wrap",y.Typewriter="Typewriter",y.Scramble="Scramble",y.Wave="Wave",y.Bounce="Bounce",y.TextTrail="TextTrail",y.Reveal3D="Reveal3D",y.RevealSlide="RevealSlide",y.RevealBlur="RevealBlur",y.TextLiquid="TextLiquid",y.TextVortex="TextVortex",y.TextExplosion="TextExplosion",y.TextRain="TextRain",y.TextGravity="TextGravity",y.TextMatrix="TextMatrix",y.TextNeon="TextNeon",y.TextDissolve="TextDissolve",y.TextOrganic="TextOrganic",y.TextBreathe="TextBreathe",y.TextSpin="TextSpin",y.TextMagnet="TextMagnet",y.TextPerspective="TextPerspective",y.TextMirror="TextMirror",y.TextFloral="TextFloral",y.TextSmoke="TextSmoke",y.TextVariable="TextVariable",y.TextZing="TextZing",y.TextElastic="TextElastic",y.TextGlitch3D="TextGlitch3D",y.GlitchText="GlitchText",y.TextCounter="TextCounter",y.Squash="Squash",y.Spotlight="Spotlight",y.Lens="Lens",y.Gravity="Gravity",y.Velocity="Velocity",y.Shear="Shear",y.LayoutAnimation="LayoutAnimation",y.SpringChain="SpringChain",y.ParticleEmitter="ParticleEmitter",y.StateReactive="StateReactive",y.Fold="Fold",y.Crumple="Crumple",y))(tt||{}),re=(y=>(y.Scale="Scale",y.Opacity="Opacity",y.RotateZ="RotateZ",y.RotateX="RotateX",y.RotateY="RotateY",y.PositionX="PositionX",y.PositionY="PositionY",y.SkewX="SkewX",y.Blur="Blur",y.Exposure="Exposure",y.HueShift="HueShift",y.Negative="Negative",y.CornerRadius="CornerRadius",y.StrokeWidth="StrokeWidth",y.BoxShadow="BoxShadow",y.FontSize="FontSize",y.LetterSpacing="LetterSpacing",y))(re||{}),je=(y=>(y.Equal="Equal",y.NotEqual="NotEqual",y.GreaterThan="GreaterThan",y.LessThan="LessThan",y.GreaterEqual="GreaterEqual",y.LessEqual="LessEqual",y.IsTrue="IsTrue",y.IsFalse="IsFalse",y))(je||{}),Et=(y=>(y.AND="AND",y.OR="OR",y.NOT="NOT",y.XOR="XOR",y.OBJECT="OBJECT",y.PROPERTY="PROPERTY",y.GET_PROPERTY="GET_PROPERTY",y.SET_PROPERTY="SET_PROPERTY",y.ADD="ADD",y.SUB="SUB",y.MUL="MUL",y.DIV="DIV",y.MOD="MOD",y.POW="POW",y.ABS="ABS",y.ROUND="ROUND",y.FLOOR="FLOOR",y.CEIL="CEIL",y.SIN="SIN",y.COS="COS",y.TAN="TAN",y.CLAMP="CLAMP",y.REMAP="REMAP",y.EQ="EQ",y.NEQ="NEQ",y.GT="GT",y.LT="LT",y.GTE="GTE",y.LTE="LTE",y.IF_ELSE="IF_ELSE",y.VALUE="VALUE",y.INPUT="INPUT",y.LOG="LOG",y.SCROLL_X="SCROLL_X",y.SCROLL_Y="SCROLL_Y",y.MOUSE_X="MOUSE_X",y.MOUSE_Y="MOUSE_Y",y.IS_MOUSE_DOWN="IS_MOUSE_DOWN",y.EFFECTOR="EFFECTOR",y.MONITOR="MONITOR",y.DELAY="DELAY",y.SPRING_PULL="SPRING_PULL",y.SPRING_SETTLE="SPRING_SETTLE",y.EMIT="EMIT",y))(Et||{});function Ss(y){if(y.length<5)return y;const t=new Set("aeiouyAEIOUY".split(""));if(/[\u4E00-\u9FFF\u3400-\u4DBF]/.test(y))return y;let o="";for(let e=0;e<y.length;e++){if(o+=y[e],e>=y.length-2)continue;const n=t.has(y[e]),i=t.has(y[e+1]),a=t.has(y[e+2]);n&&!i&&a&&(o+="­"),n&&!i&&!a&&e>=1&&(o+="­")}return o}function Cs(y){return y.replace(/\b([a-zA-Z]{4,})\b/g,(t,s)=>Ss(s))}function ws(y,t,s){return y}function Ms(y,t,s){return y}const Ve=new Map;function ts(y){var I;const{text:t,fontFamily:s="Inter",fontSize:o=16,fontWeight:e=400,fontStyle:n="normal",lineHeight:i=1.2,width:a=200,letterSpacing:r=0,paragraphSpacing:l=0,paragraphIndent:d=0,textCase:p="none",segments:u=[],enableSegments:m=!1}=y;let h=String(t||"");p==="uppercase"?h=h.toUpperCase():p==="lowercase"?h=h.toLowerCase():p==="capitalize"&&(h=h.replace(/\b\w/g,_=>_.toUpperCase())),y.hyphenation===!0&&(h=Cs(h));const f=`${n} ${e} ${o}px "${s}", sans-serif`,v=`${h}|${f}|${r}|${l}|${d}|${m}|${JSON.stringify(u)}|hyp:${!!y.hyphenation}|comp:${y.composer}|bal:${!!y.balanceRaggedLines}`;let g=Ve.get(v);const c=typeof CanvasRenderingContext2D<"u"?CanvasRenderingContext2D.prototype.measureText:null,b=function(_){if(!c)return{width:0,fontBoundingBoxAscent:0,fontBoundingBoxDescent:0};const E=c.call(this,_);return r!==0&&_&&_.length>0?{...E,width:E.width+(_.length-1)*r}:E};if(!g){try{if(r!==0&&typeof CanvasRenderingContext2D<"u"&&(CanvasRenderingContext2D.prototype.measureText=b),m&&u&&u.length>0){const _=u.map(E=>{let P=E.text||"";const L=E.textCase||p||"none";return L==="uppercase"?P.toUpperCase():L==="lowercase"?P.toLowerCase():L==="capitalize"?P.replace(/\b\w/g,k=>k.toUpperCase()):P}).join("");if(g=He.prepareWithSegments(_,f),g){let E=0,P=o;for(const L of u){let k=L.text||"";if(!k)continue;const A=L.textCase||p||"none";A==="uppercase"?k=k.toUpperCase():A==="lowercase"?k=k.toLowerCase():A==="capitalize"&&(k=k.replace(/\b\w/g,O=>O.toUpperCase()));const T=L.fontSize||o;T>P&&(P=T);const R=`${L.fontStyle||n} ${L.fontWeight||e} ${T}px "${L.fontFamily||s}", sans-serif`,F=He.prepareWithSegments(k,R);if(F&&F.widths)for(let O=0;O<F.widths.length;O++){const W=E+O;if(W<g.widths.length){g.widths[W]=F.widths[O];const V=F.kinds[O];if(V===2){const U=k[O];U===`
2
+ `||U==="\r"?g.kinds[W]=2:g.kinds[W]=0}else g.kinds[W]=V}}E+=k.length}g.fullText=_,g.maxFontSize=P}}else g=He.prepareWithSegments(h,f);g&&Ve.set(v,g)}catch(_){return console.error("[ExodeUI] Pretext prepare failed:",_),{width:a,height:0,lineCount:0,lines:[]}}finally{r!==0&&typeof CanvasRenderingContext2D<"u"&&c&&(CanvasRenderingContext2D.prototype.measureText=c)}if(Ve.size>500){const _=Ve.keys().next().value;_&&Ve.delete(_)}}if(d>0&&g&&g.widths&&!g.indentApplied){const _=[...g.widths],E=g.fullText||h;let P=!0;for(let L=0;L<E.length;L++)P&&_[L]!==void 0&&(_[L]+=d,P=!1),(E[L]===`
3
3
  `||E[L]==="\r")&&(P=!0,E[L]==="\r"&&E[L+1]===`
4
- `&&L++);m={...m,widths:_,indentApplied:!0}}if(!m)return{width:a,height:0,lineCount:0,lines:[]};let S=i;typeof S=="string"&&(S=parseFloat(S)),S>5&&o>0&&(S=S/o),r!==0&&(CanvasRenderingContext2D.prototype.measureText=b);let w;try{const _=m.maxFontSize||o;if(a>=1e5){const E=h.split(/\r\n|\r|\n/);w={lines:E.map(P=>({text:P,width:0})),height:E.length*(S*_),lineCount:E.length}}else w=He.layoutWithLines(m,a,S*_)}finally{r!==0&&l&&(CanvasRenderingContext2D.prototype.measureText=l)}let C=(w==null?void 0:w.height)!==void 0&&w.height>0?w.height:(((I=w==null?void 0:w.lines)==null?void 0:I.length)||0)*S*o;if(c>0&&w&&w.lines&&w.lines.length>1){let _=0;const E=m.fullText||t;for(let P=0;P<w.lines.length-1;P++)_+=w.lines[P].text.length,(E[_]===`
5
- `||E[_]==="\r")&&(C+=c,_++,E[_-1]==="\r"&&E[_]===`
6
- `&&_++)}let M=(w==null?void 0:w.lines)||[];return y.composer==="every-line"&&M.length>1&&(M=ws(M)),y.balanceRaggedLines===!0&&M.length>1&&(M=Ms(M)),{width:a,height:C,lineCount:M.length,lines:M}}function es(y,t,s){let o=String(y||"").trim();if(o&&!isNaN(Number(o))&&!o.includes(" ")&&!o.endsWith("fr")&&!o.endsWith("px")&&!o.endsWith("%")){const r=Math.max(1,parseInt(o));o=new Array(r).fill("1fr").join(" ")}const e=o.split(/\s+/).filter(Boolean),n=new Array(e.length).fill(0);let i=t-(e.length-1)*s,a=0;if(e.forEach((r,c)=>{if(r.endsWith("px")){const d=parseFloat(r);n[c]=d,i-=d}else r.endsWith("fr")?a+=parseFloat(r):r==="auto"&&(n[c]=100,i-=100)}),a>0&&i>0){const r=i/a;e.forEach((c,d)=>{c.endsWith("fr")&&(n[d]=r*parseFloat(c))})}return n}function ss(y,t,s){try{const o=y.autoLayout;return!o||!o.enabled?{childUpdates:[]}:(o.mode||"linear")==="grid"?ks(y,t,s):Is(y,t,s)}catch(o){return console.error("Layout Engine Error:",o),{childUpdates:[]}}}function Is(y,t,s){var k,A;const o=y.autoLayout,{direction:e,spacing:n,padding:i,align:a,wrap:r}=o,c=e==="vertical",d=t.map(T=>{const R=s(T.id),F=T.geometry;let O=(R==null?void 0:R.width)??F.width??100,W=(R==null?void 0:R.height)??F.height??100;if(F.type==="Ellipse"||F.type==="Polygon"||F.type==="Star"){const V=(R==null?void 0:R.radius)??F.radius??(R==null?void 0:R.outer_radius)??F.outer_radius??50;O=V*2,W=V*2}else if(F.type==="Text"){const V=ts({text:(R==null?void 0:R.text)??F.text??"",fontFamily:F.fontFamily,fontSize:F.fontSize,fontWeight:F.fontWeight,fontStyle:F.fontStyle,lineHeight:F.lineHeight,width:F.width||200,letterSpacing:F.letterSpacing,paragraphSpacing:F.paragraphSpacing,paragraphIndent:F.paragraphIndent,textCase:F.textCase,segments:F.segments,enableSegments:F.enableSegments});W=V.height,F.width||(O=V.width)}return O*=T.transform.scale_x||1,W*=T.transform.scale_y||1,{id:T.id,w:O,h:W,original:T}});let p=y.width,u=y.height;const g=((k=y.layoutProps)==null?void 0:k.width)==="hug",h=((A=y.layoutProps)==null?void 0:A.height)==="hug",f=[];let v=[],m=0,l=0;const b=p-i.left-i.right,S=u-i.top-i.bottom;d.forEach(T=>{r&&v.length>0&&(c?l+n+T.h>S:m+n+T.w>b)?(f.push({children:v,width:m,height:l}),v=[T],m=T.w,l=T.h):(v.push(T),c?(m=Math.max(m,T.w),l+=(v.length>1?n:0)+T.h):(m+=(v.length>1?n:0)+T.w,l=Math.max(l,T.h)))}),v.length>0&&f.push({children:v,width:m,height:l}),g&&!c&&(p=Math.max(...f.map(T=>T.width),0)+i.left+i.right),h&&c&&(u=Math.max(...f.map(T=>T.height),0)+i.top+i.bottom);const w=[];let C=i.left,M=i.top;const I=a.toLowerCase(),_=I==="center"||I.endsWith("-center"),E=I.endsWith("-right"),P=I==="center"||I.startsWith("center-"),L=I.startsWith("bottom-");return f.forEach(T=>{let R=C,F=M;c?P?F=i.top+(u-i.top-i.bottom-T.height)/2:L&&(F=u-i.bottom-T.height):_?R=i.left+(p-i.left-i.right-T.width)/2:E&&(R=p-i.right-T.width),T.children.forEach(O=>{var X,ot;let W=R,V=F;c?_?W+=(T.width-O.w)/2:E&&(W+=T.width-O.w):P?V+=(T.height-O.h)/2:L&&(V+=T.height-O.h);const U=((X=O.original.layoutProps)==null?void 0:X.width)==="fill",Y=((ot=O.original.layoutProps)==null?void 0:ot.height)==="fill";w.push({id:O.id,x:W+O.w/2-p/2,y:V+O.h/2-u/2,width:U&&c?T.width:void 0,height:Y?c?void 0:T.height:void 0}),c?F+=O.h+n:R+=O.w+n}),c?C+=T.width+n:M+=T.height+n}),{frameWidth:g?p:void 0,frameHeight:h?u:void 0,childUpdates:w}}function ks(y,t,s){const o=y.autoLayout;if(!o)return{childUpdates:[]};const{gridColumns:e,gridRows:n,columnGap:i=0,rowGap:a=0,padding:r,align:c}=o;let d=y.width,p=y.height;const u=d-r.left-r.right,g=p-r.top-r.bottom,h=es(e||"1fr",u,i),f=es(n||"auto",g,a),v=h.length>0?h.reduce((E,P)=>E+P,0)+(h.length-1)*i:0,m=f.length>0?f.reduce((E,P)=>E+P,0)+(f.length-1)*a:0,l=c.toLowerCase(),b=l==="center"||l.endsWith("-center"),S=l.endsWith("-right"),w=l==="center"||l.startsWith("center-"),C=l.startsWith("bottom-");let M=0,I=0;b?M=(u-v)/2:S&&(M=u-v),w?I=(g-m)/2:C&&(I=g-m);const _=[];return t.forEach((E,P)=>{var ot,J;const L=P%h.length||0,k=Math.floor(P/h.length)||0;k>=f.length&&f.push(100);const A=h[L],T=f[k];let R=r.left+M+h.slice(0,L).reduce((at,j)=>at+j+i,0),F=r.top+I+f.slice(0,k).reduce((at,j)=>at+j+a,0);const O=s(E.id),W=E.geometry;let V=(O==null?void 0:O.width)??W.width??100,U=(O==null?void 0:O.height)??W.height??100;if(W.type==="Ellipse"||W.type==="Polygon"||W.type==="Star"){const at=(O==null?void 0:O.radius)??W.radius??(O==null?void 0:O.outer_radius)??W.outer_radius??50;V=at*2,U=at*2}V*=E.transform.scale_x||1,U*=E.transform.scale_y||1;let Y=R,X=F;b?Y+=(A-V)/2:S&&(Y+=A-V),w?X+=(T-U)/2:C&&(X+=T-U),_.push({id:E.id,x:Y+V/2-d/2,y:X+U/2-p/2,width:((ot=E.layoutProps)==null?void 0:ot.width)==="fill"?A:void 0,height:((J=E.layoutProps)==null?void 0:J.height)==="fill"?T:void 0})}),{childUpdates:_}}class is{constructor(){ht(this,"world",null);ht(this,"bodies",new Map);ht(this,"colliders",new Map);ht(this,"joints",new Map);ht(this,"initialized",!1);ht(this,"bodyIdByCollider",new Map);ht(this,"onCollisionCB",null);ht(this,"eventQueue",null)}setCollisionCallback(t){this.onCollisionCB=t}async init(t){this.initialized||(await ae.init(),this.world=new ae.World(new ae.Vector2(t.x*100,t.y*100)),this.eventQueue=new ae.EventQueue(!0),this.initialized=!0)}destroy(){this.bodies.clear(),this.colliders.clear(),this.joints.clear(),this.world&&(this.world.free(),this.world=null),this.initialized=!1}setGravity(t){this.world&&(this.world.gravity=new ae.Vector2(t.x*100,t.y*100))}createBody(t){if(!this.world){console.warn("[RapierPhysics] World not initialized");return}this.bodies.has(t.id)&&this.removeBody(t.id);const s=t.isStatic?ae.RigidBodyDesc.fixed():ae.RigidBodyDesc.dynamic();s.setTranslation(t.x,t.y),t.rotation!==void 0&&s.setRotation(t.rotation);const o=this.world.createRigidBody(s);let e;switch(t.type){case"Rectangle":e=ae.ColliderDesc.cuboid(t.width/2,t.height/2);break;case"Ellipse":e=ae.ColliderDesc.ball(Math.max(t.width,t.height)/2);break;case"Triangle":case"Star":case"Polygon":e=ae.ColliderDesc.cuboid(t.width/2,t.height/2);break;default:e=ae.ColliderDesc.cuboid(t.width/2,t.height/2)}if(t.friction!==void 0&&e.setFriction(t.friction),t.restitution!==void 0&&e.setRestitution(t.restitution),t.density!==void 0)e.setDensity(t.density);else if(t.mass!==void 0&&!t.isStatic){const i=t.width*t.height;e.setDensity(t.mass/i)}t.isSensor&&e.setSensor(!0);const n=this.world.createCollider(e,o);this.bodyIdByCollider.set(n.handle,t.id),t.frictionAir!==void 0&&o.setLinearDamping(t.frictionAir*10),this.bodies.set(t.id,o),this.colliders.set(t.id,n)}removeBody(t){const s=this.bodies.get(t),o=this.colliders.get(t);o&&this.bodyIdByCollider.delete(o.handle),s&&this.world&&(this.world.removeRigidBody(s),this.bodies.delete(t),this.colliders.delete(t))}step(t){if(!this.world)return;this.world.step(this.eventQueue);const s=this.onCollisionCB,o=this.eventQueue;s&&o&&o.drainContactEvents((e,n,i)=>{const a=this.bodyIdByCollider.get(e),r=this.bodyIdByCollider.get(n);a&&r&&s(a,r,i)})}getPosition(t){const s=this.bodies.get(t);if(!s)return null;const o=s.translation();return{x:o.x,y:o.y}}getRotation(t){const s=this.bodies.get(t);return s?s.rotation():null}getVelocity(t){const s=this.bodies.get(t);if(!s)return null;const o=s.linvel();return{x:o.x,y:o.y}}setPosition(t,s,o){const e=this.bodies.get(t);e&&e.setTranslation(new ae.Vector2(s,o),!0)}setRotation(t,s){const o=this.bodies.get(t);o&&o.setRotation(s,!0)}setVelocity(t,s,o){const e=this.bodies.get(t);e&&e.setLinvel(new ae.Vector2(s,o),!0)}setAngularVelocity(t,s){const o=this.bodies.get(t);o&&o.setAngvel(s,!0)}applyForce(t,s,o){const e=this.bodies.get(t);e&&e.addForce(new ae.Vector2(s,o),!0)}applyImpulse(t,s,o){const e=this.bodies.get(t);e&&e.applyImpulse(new ae.Vector2(s,o),!0)}createJoint(t){if(!this.world){console.warn("[RapierPhysics] World not initialized");return}this.joints.has(t.id)&&this.removeJoint(t.id);const s=this.bodies.get(t.bodyA),o=this.bodies.get(t.bodyB);if(!s||!o){console.warn(`[RapierPhysics] Cannot create joint ${t.id}: bodyA (${t.bodyA}) or bodyB (${t.bodyB}) not found`);return}const e=new ae.Vector2(t.anchorA.x,t.anchorA.y),n=new ae.Vector2(t.anchorB.x,t.anchorB.y);let i;if(t.type==="Distance"){const a=t.length??100,r=t.stiffness??100,c=t.damping??10;i=ae.JointData.spring(a,r,c,e,n)}else i=ae.JointData.revolute(e,n);try{const a=this.world.createImpulseJoint(i,s,o,!0);this.joints.set(t.id,a)}catch(a){console.error(`[RapierPhysics] Failed to create joint ${t.id}:`,a)}}removeJoint(t){const s=this.joints.get(t);if(s&&this.world){try{this.world.removeImpulseJoint(s,!0)}catch(o){console.error(`[RapierPhysics] Failed to remove joint ${t}:`,o)}this.joints.delete(t)}}}const ns=y=>y,Ts=y=>y>0?1:0,Ps=y=>y<1?0:1,os=y=>y*y,as=y=>y*(2-y),rs=y=>y<.5?2*y*y:-1+(4-2*y)*y,_s=y=>y*y*y,Es=y=>--y*y*y+1,As=y=>y<.5?4*y*y*y:(y-1)*(2*y-2)*(2*y-2)+1,Os=y=>y*y*y*y,Ls=y=>1- --y*y*y*y,Rs=y=>y<.5?8*y*y*y*y:1-8*--y*y*y*y,Fs=y=>y*y*y*y*y,$s=y=>1+--y*y*y*y*y,xs=y=>y<.5?16*y*y*y*y*y:1+16*--y*y*y*y*y,Bs=y=>1-Math.cos(y*Math.PI/2),Ws=y=>Math.sin(y*Math.PI/2),Ys=y=>-(Math.cos(Math.PI*y)-1)/2,Xs=y=>y===0?0:Math.pow(2,10*(y-1)),Ds=y=>y===1?1:1-Math.pow(2,-10*y),Ns=y=>y===0?0:y===1?1:y<.5?Math.pow(2,20*y-10)/2:(2-Math.pow(2,-20*y+10))/2,Vs=y=>1-Math.sqrt(1-y*y),zs=y=>Math.sqrt(1- --y*y),Gs=y=>y<.5?(1-Math.sqrt(1-4*y*y))/2:(Math.sqrt(1-(-2*y+2)*(-2*y+2))+1)/2,Ue=1.70158,qe=Ue*1.525,ls=Ue+1,Hs=y=>ls*y*y*y-Ue*y*y,Us=y=>1+ls*Math.pow(y-1,3)+Ue*Math.pow(y-1,2),qs=y=>y<.5?Math.pow(2*y,2)*((qe+1)*2*y-qe)/2:(Math.pow(2*y-2,2)*((qe+1)*(y*2-2)+qe)+2)/2,cs=2*Math.PI/3,hs=2*Math.PI/4.5,Js=y=>y===0?0:y===1?1:-Math.pow(2,10*y-10)*Math.sin((y*10-10.75)*cs),Ks=y=>y===0?0:y===1?1:Math.pow(2,-10*y)*Math.sin((y*10-.75)*cs)+1,Qs=y=>y===0?0:y===1?1:y<.5?-(Math.pow(2,20*y-10)*Math.sin((20*y-11.125)*hs))/2:Math.pow(2,-20*y+10)*Math.sin((20*y-11.125)*hs)/2+1,Je=y=>y<1/2.75?7.5625*y*y:y<2/2.75?7.5625*(y-=1.5/2.75)*y+.75:y<2.5/2.75?7.5625*(y-=2.25/2.75)*y+.9375:7.5625*(y-=2.625/2.75)*y+.984375,Zs=y=>1-Je(1-y),js=Je,ti=y=>y<.5?(1-Je(1-2*y))/2:(1+Je(2*y-1))/2,Ze=new Map,ze=(y,t,s,o)=>{const e=`${y},${t},${s},${o}`;if(Ze.has(e))return Ze.get(e);const n=d=>(1-3*s+3*y)*d*d*d+(3*s-6*y)*d*d+3*y*d,i=d=>(1-3*o+3*t)*d*d*d+(3*o-6*t)*d*d+3*t*d,a=d=>3*(1-3*s+3*y)*d*d+2*(3*s-6*y)*d+3*y,r=d=>{let p=d;for(let u=0;u<8;u++){const g=n(p)-d;if(Math.abs(g)<1e-6)return p;const h=a(p);if(Math.abs(h)<1e-6)break;p=p-g/h}return p},c=d=>d===0?0:d===1?1:i(r(d));return Ze.set(e,c),c},fs=y=>{const t=y.match(/cubic-bezier\s*\(\s*([-?\d.]+)\s*,\s*([-?\d.]+)\s*,\s*([-?\d.]+)\s*,\s*([-?\d.]+)\s*\)/);if(!t)return null;const[,s,o,e,n]=t.map(Number);return ze(s,o,e,n)},ds={ease:ze(.25,.1,.25,1),"ease-in":ze(.42,0,1,1),"ease-out":ze(0,0,.58,1),"ease-in-out":ze(.42,0,.58,1)},Ke={Linear:ns,EaseInQuad:os,EaseOutQuad:as,EaseInOutQuad:rs,EaseInCubic:_s,EaseOutCubic:Es,EaseInOutCubic:As,EaseInQuart:Os,EaseOutQuart:Ls,EaseInOutQuart:Rs,EaseInQuint:Fs,EaseOutQuint:$s,EaseInOutQuint:xs,EaseInSine:Bs,EaseOutSine:Ws,EaseInOutSine:Ys,EaseInExpo:Xs,EaseOutExpo:Ds,EaseInOutExpo:Ns,EaseInCirc:Vs,EaseOutCirc:zs,EaseInOutCirc:Gs,EaseInBack:Hs,EaseOutBack:Us,EaseInOutBack:qs,EaseInElastic:Js,EaseOutElastic:Ks,EaseInOutElastic:Qs,EaseInBounce:Zs,EaseOutBounce:js,EaseInOutBounce:ti,EaseIn:os,EaseOut:as,EaseInOut:rs,StepStart:Ts,StepEnd:Ps},ei=y=>{const t=y.trim(),s=t.toLowerCase();if(Ke[t])return Ke[t];const o=Object.keys(Ke).find(n=>n.toLowerCase()===s);if(o)return Ke[o];const e=Object.keys(ps).find(n=>n.toLowerCase()===s);if(e){const n=fs(ps[e].value);if(n)return n}if(ds[s])return ds[s];if(s.startsWith("cubic-bezier")){const n=fs(t);if(n)return n}return ns},ps={Snappy:{label:"Snappy",description:"High energy, quick arrival.",value:"cubic-bezier(0.2, 1, 0.2, 1)"},Bouncy:{label:"Bouncy",description:"Springy with an overshoot.",value:"cubic-bezier(0.2, 0.9, 0.4, 1.3)"},Gentle:{label:"Gentle",description:"Smooth and organic flow.",value:"cubic-bezier(0.4, 0, 0.6, 1)"},Stiff:{label:"Stiff",description:"Solid and reliable movement.",value:"cubic-bezier(0.3, 1, 0.7, 1)"},Floating:{label:"Floating",description:"Weightless and airy transition.",value:"cubic-bezier(0.5, 0, 0.5, 1)"},Sudden:{label:"Sudden",description:"Instant, direct movement.",value:"cubic-bezier(1, 0, 1, 1)"},Elastic:{label:"Elastic",description:"Extreme overshoot and spring.",value:"cubic-bezier(0.5, 1.5, 0.5, 1.5)"},Sharp:{label:"Sharp",description:"Fast start, very hard stop.",value:"cubic-bezier(0.1, 0.9, 0.1, 1)"},Fluid:{label:"Fluid",description:"Natural high-end flow.",value:"cubic-bezier(0.4, 0, 0.2, 1)"},Heavy:{label:"Heavy",description:"Slow start, massive impact.",value:"cubic-bezier(0.6, 0, 1, 1)"}},si=(y,t,s,o,e)=>{if(!y||!t||!s)return y;const n=o.scale_x??1,i=o.scale_y??1,a=(r,c,d)=>{let p=0,u=0;const g=o.rotation*Math.PI/180,h=Math.cos(g),f=Math.sin(g),v=r*n*h-c*i*f+o.x,m=r*n*f+c*i*h+o.y;d.forEach(I=>{const _=e(I.boneId);if(!_)return;const E={x:_.x,y:_.y,rotation:_.rotation,scaleX:_.scale_x??1,scaleY:_.scale_y??1},P=s[I.boneId]||[1,0,0,1,0,0],L=v*P[0]+m*P[2]+P[4],k=v*P[1]+m*P[3]+P[5],A=E.rotation*Math.PI/180,T=Math.cos(A),R=Math.sin(A),F=L*E.scaleX*T-k*E.scaleY*R+E.x,O=L*E.scaleX*R+k*E.scaleY*T+E.y;p+=F*I.amount,u+=O*I.amount});const l=[...d].sort((I,_)=>_.amount-I.amount);if(l.length>=2&&l[0].amount>0&&l[1].amount>0){const I=e(l[0].boneId),_=e(l[1].boneId);if(I&&_&&I.length!==void 0&&_.length!==void 0){const E=I.length*(I.scale_y??1),P=I.rotation*Math.PI/180,L=I.x-E*Math.sin(P),k=I.y+E*Math.cos(P),A=_.length*(_.scale_y??1),T=_.rotation*Math.PI/180,R=_.x-A*Math.sin(T),F=_.y+A*Math.cos(T);let O=null,W=null,V=!1;const U=1;if(Math.hypot(I.x-_.x,I.y-_.y)<U||Math.hypot(I.x-R,I.y-F)<U?(O=I.x,W=I.y):(Math.hypot(L-_.x,k-_.y)<U||Math.hypot(L-R,k-F)<U)&&(O=L,W=k,V=!0),O!==null&&W!==null){const Y=s[l[0].boneId]||[1,0,0,1,0,0],X=Y[0]*Y[3]-Y[1]*Y[2];let ot=0,J=0;if(X!==0){const at=(Y[2]*Y[5]-Y[3]*Y[4])/X,j=(Y[1]*Y[4]-Y[0]*Y[5])/X,it=Math.atan2(-Y[1],Y[3]);if(!V)ot=at,J=j;else{const N=-Y[2]/X,ct=Y[0]/X,Mt=Math.hypot(N,ct),bt=I.length*Mt;ot=at-bt*Math.sin(it),J=j+bt*Math.cos(it)}const x=Math.hypot(v-ot,m-J),D=Math.hypot(p-O,u-W);if(D>0&&x>0){const N=Math.max(D,.01),ct=Math.min(x/N,3),Mt=O+(p-O)*ct,bt=W+(u-W)*ct,wt=l[0].amount,gt=l[1].amount,It=Math.min(wt,gt)*2,ut=1-Math.pow(1-It,4);p=p*(1-ut)+Mt*ut,u=u*(1-ut)+bt*ut}}}}}const b=o.rotation*Math.PI/180,S=Math.cos(b),w=Math.sin(b),C=p-o.x,M=u-o.y;return{x:(C*S+M*w)/n,y:(-C*w+M*S)/i}};return y.map((r,c)=>{const d=t[c];if(!d||d.length===0)return{...r};const p={...r,...a(r.x,r.y,d)};if(r.in_x!==void 0&&r.in_y!==void 0){const u=a(r.in_x,r.in_y,d);p.in_x=u.x,p.in_y=u.y}if(r.out_x!==void 0&&r.out_y!==void 0){const u=a(r.out_x,r.out_y,d);p.out_x=u.x,p.out_y=u.y}return p})};function ii(y,t,s,o,e){const n=y*s*.01,i=t*s*.01,a=Math.sin(e*12.9898)*43758.5453%(Math.PI*2),r=Math.cos(e*78.233)*43758.5453%(Math.PI*2);return(Math.sin(n+a)*Math.cos(i+r)+.5*Math.sin(n*2.1-r)*Math.cos(i*2.3+a)+.25*Math.sin(n*4.5+a)*Math.cos(i*4.2-r))/1.75*o}function ni(y,t,s,o,e,n,i=0,a=0){const r=[];if(!y)return[];const c=y.type;if(c==="Rectangle"||c==="Image"||c==="Frame"){const h=Math.max(20,Math.floor((t+s)/10)),f=Math.max(2,Math.floor(h*(t/(t+s)))),v=Math.max(2,Math.floor(h*(s/(t+s))));for(let m=0;m<f;m++)r.push({x:-t/2+t/f*m,y:-s/2,nx:0,ny:-1});for(let m=0;m<v;m++)r.push({x:t/2,y:-s/2+s/v*m,nx:1,ny:0});for(let m=0;m<f;m++)r.push({x:t/2-t/f*m,y:s/2,nx:0,ny:1});for(let m=0;m<v;m++)r.push({x:-t/2,y:s/2-s/v*m,nx:-1,ny:0})}else if(c==="Ellipse"){const h=Math.max(60,Math.floor(Math.PI*Math.max(t,s)/5));for(let f=0;f<h;f++){const v=f/h*Math.PI*2,m=Math.cos(v),l=Math.sin(v);r.push({x:m*t/2,y:l*s/2,nx:m,ny:l})}}else if(c==="Triangle"){const h={x:0,y:-s/2},f={x:t/2,y:s/2},v={x:-t/2,y:s/2},m=20;let l=f.x-h.x,b=f.y-h.y,S=Math.hypot(l,b),w=-b/S,C=l/S;for(let M=0;M<m;M++)r.push({x:h.x+l*(M/m),y:h.y+b*(M/m),nx:w,ny:C});l=v.x-f.x,b=v.y-f.y,S=Math.hypot(l,b),w=-b/S,C=l/S;for(let M=0;M<m;M++)r.push({x:f.x+l*(M/m),y:f.y+b*(M/m),nx:w,ny:C});l=h.x-v.x,b=h.y-v.y,S=Math.hypot(l,b),w=-b/S,C=l/S;for(let M=0;M<m;M++)r.push({x:v.x+l*(M/m),y:v.y+b*(M/m),nx:w,ny:C})}else for(let f=0;f<80;f++){const v=f/80*Math.PI*2,m=Math.cos(v),l=Math.sin(v);r.push({x:m*t/2,y:l*s/2,nx:m,ny:l})}const d=i*Math.PI/180,p=Math.cos(d),u=Math.sin(d);return r.map(h=>{const f=ii(h.x,h.y,e,o,n),v=h.nx*(1-a)+p*a,m=h.ny*(1-a)+u*a;let l=Math.hypot(v,m);return l===0&&(l=1),{x:h.x+v/l*f,y:h.y+m/l*f}})}const oi={default:{label:"Default",colors:["#6366f1","#f59e0b"],cardBackground:"rgba(255,255,255,0.04)",cardBorderColor:"rgba(255,255,255,0.08)",gridColor:"rgba(255,255,255,0.06)",axisLabelColor:"rgba(255,255,255,0.5)",legendColor:"rgba(255,255,255,0.7)",barGradient:!0},neon:{label:"Neon",colors:["#00f5ff","#ff00e5"],cardBackground:"rgba(0,0,0,0.5)",cardBorderColor:"rgba(0,245,255,0.2)",gridColor:"rgba(0,245,255,0.08)",axisLabelColor:"rgba(0,245,255,0.6)",legendColor:"rgba(0,245,255,0.8)",barGradient:!0},pastel:{label:"Pastel",colors:["#a5b4fc","#fcd34d"],cardBackground:"rgba(255,255,255,0.06)",cardBorderColor:"rgba(255,255,255,0.12)",gridColor:"rgba(255,255,255,0.08)",axisLabelColor:"rgba(255,255,255,0.45)",legendColor:"rgba(255,255,255,0.65)",barGradient:!1},warm:{label:"Warm",colors:["#f97316","#ef4444"],cardBackground:"rgba(30,10,0,0.4)",cardBorderColor:"rgba(249,115,22,0.2)",gridColor:"rgba(249,115,22,0.08)",axisLabelColor:"rgba(253,186,116,0.7)",legendColor:"rgba(253,186,116,0.85)",barGradient:!0},ocean:{label:"Ocean",colors:["#06b6d4","#0ea5e9"],cardBackground:"rgba(0,20,40,0.5)",cardBorderColor:"rgba(6,182,212,0.2)",gridColor:"rgba(6,182,212,0.06)",axisLabelColor:"rgba(125,211,252,0.6)",legendColor:"rgba(125,211,252,0.8)",barGradient:!0},mono:{label:"Mono",colors:["rgba(255,255,255,0.9)","rgba(255,255,255,0.4)"],cardBackground:"rgba(255,255,255,0.03)",cardBorderColor:"rgba(255,255,255,0.1)",gridColor:"rgba(255,255,255,0.05)",axisLabelColor:"rgba(255,255,255,0.4)",legendColor:"rgba(255,255,255,0.6)",barGradient:!1}},us={vibrant:["#6366f1","#22d3ee","#f59e0b","#ec4899","#34d399","#a855f7","#f87171"],pastel:["#a5b4fc","#67e8f9","#fcd34d","#f9a8d4","#6ee7b7","#c4b5fd","#fca5a5"],neon:["#00f5ff","#ff00e5","#00ff9f","#ff6b00","#b400ff","#ffe600","#00c3ff"],warm:["#f97316","#ef4444","#f59e0b","#dc2626","#fb923c","#e11d48","#ea580c"],ocean:["#06b6d4","#0ea5e9","#38bdf8","#7dd3fc","#0284c7","#0369a1","#bae6fd"]};class gs{constructor(){ht(this,"artboard",null);ht(this,"objectStates",new Map);ht(this,"physicsEngine",null);ht(this,"activeStateMachine",null);ht(this,"inputs",new Map);ht(this,"inputNameMap",new Map);ht(this,"layerStates",new Map);ht(this,"pretextCache",new Map);ht(this,"pointerHistory",[]);ht(this,"MAX_HISTORY",200);ht(this,"imageCache",new Map);ht(this,"lastValidSvgImgMap",new Map);ht(this,"maskBuffer",null);ht(this,"maskCtx",null);ht(this,"lumaBuffer",null);ht(this,"lumaCtx",null);ht(this,"_noiseTileCanvas",null);ht(this,"layout",{fit:"Contain",alignment:"Center"});ht(this,"onTrigger");ht(this,"onInputUpdate");ht(this,"onComponentChange");ht(this,"onToggle");ht(this,"onInputChange");ht(this,"onInputFocus");ht(this,"onInputBlur");ht(this,"onLog");ht(this,"onButtonClick");ht(this,"onGraphPointClick");ht(this,"justFiredTriggers",new Set);ht(this,"rootTransform",null);ht(this,"canvasWidth",0);ht(this,"canvasHeight",0);ht(this,"lastHoveredObjectId",null);ht(this,"_lastPointerPos",null);ht(this,"_prevPointerPos",null);ht(this,"_mouseDelta",{dx:0,dy:0});ht(this,"focusedId",null);ht(this,"draggingSliderId",null);ht(this,"draggingJoystickId",null);ht(this,"activeDropdownId",null);ht(this,"activeObjectId",null);ht(this,"draggingListViewId",null);ht(this,"draggingListViewIsScrollbar",!1);ht(this,"scrollOffset",{x:0,y:0});ht(this,"_totalScroll",{x:0,y:0});ht(this,"draggingBehaviors",new Set);ht(this,"dragStartPointer",null);ht(this,"dragStartPositions",new Map);ht(this,"isMouseDown",!1);ht(this,"activeKeys",new Set);ht(this,"_layoutAnimCache",new Map);ht(this,"_springChainState",new Map);ht(this,"_emitterPools",new Map);ht(this,"objectVelocities",new Map);ht(this,"currentTime",0);ht(this,"frameCount",0);ht(this,"fontLeadingFactors",{Inter:.35,Roboto:.45,Montserrat:.4,Outfit:.35,"Open Sans":.4,Poppins:.45,"Playfair Display":.35,Lora:.4,Lato:.35,"Bebas Neue":.45,Oswald:.4});ht(this,"onLogicUpdate");ht(this,"logicNodeValues",new Map);ht(this,"logicNodeState",new Map);ht(this,"pointerDownTimes",new Map);ht(this,"activeHoverIds",new Set);ht(this,"onNavigation");ht(this,"periodicTriggerTimes",new Map);ht(this,"wasInView",new Set);ht(this,"scrollProgressLastValue",new Map);ht(this,"debug_objectsRendered",0);ht(this,"debug_objectsTotal",0);ht(this,"lastRenderTime",0);ht(this,"debugMode",!1);ht(this,"activeTriggers",new Map);console.info("%c[ExodeUI Engine] Pixel-Perfect Parity Active (v6.3.10) - SVG Fill & Gradient Parity Active","color: #3b82f6; font-weight: bold; padding: 2px 4px; border-radius: 4px; background: rgba(59, 130, 246, 0.1)")}getInputValue(t){if(this.inputs.has(t))return this.inputs.get(t);const s=this.inputNameMap.get(t);if(s&&s.length>0)return this.inputs.get(s[0])}setTriggerCallback(t){this.onTrigger=t}setInputUpdateCallback(t){this.onInputUpdate=t}setComponentChangeCallback(t){this.onComponentChange=t}setToggleCallback(t){this.onToggle=t}setLogicUpdateCallback(t){this.onLogicUpdate=t}setInputChangeCallback(t){this.onInputChange=t}setButtonClickCallback(t){this.onButtonClick=t}setGraphPointClickCallback(t){this.onGraphPointClick=t}setNavigationCallback(t){this.onNavigation=t}ensurePathPoints(t){if(!t||t.type!=="Path"&&t.type!=="Subtract"&&t.type!=="Union"&&t.type!=="Intersect"&&t.type!=="Exclude"&&t.type!=="BooleanOperation")return;if(t.points&&t.points.length>0){if(t.is_closed===void 0&&t.isClosed===void 0&&t.data){const{isClosed:e}=this.svgPathToPoints(t.data);t.is_closed=e}return}if(!t.data)return;const{points:s,isClosed:o}=this.svgPathToPoints(t.data);t.points=s,t.is_closed===void 0&&(t.is_closed=o)}svgPathToPoints(t){const s=/([MLHVCSQTAZmlhvcsqtaz])([^MLHVCSQTAZmlhvcsqtaz]*)/g,o=/[-+]?(?:\d*\.\d+|\d+)(?:[eE][-+]?\d+)?/g,e=[];let n=!1,i=0,a=0,r=0,c=0,d=0,p=0,u;for(;(u=s.exec(t))!==null;){const g=u[1],h=(u[2].match(o)||[]).map(parseFloat),f=g===g.toLowerCase(),v=g.toUpperCase();let m=0;const l=S=>{let w=h[m++];return f&&(w+=S?i:a),w},b=()=>({x:l(!0),y:l(!1)});switch(v){case"M":{const S=b();for(d=i=S.x,p=a=S.y,e.push({x:i,y:a,in_x:i,in_y:a,out_x:i,out_y:a,moveTo:!0});m<h.length;){const w=b();i=w.x,a=w.y,e.push({x:i,y:a,in_x:i,in_y:a,out_x:i,out_y:a})}break}case"L":for(;m<h.length;){const S=b();i=S.x,a=S.y,e.push({x:i,y:a,in_x:i,in_y:a,out_x:i,out_y:a})}break;case"H":for(;m<h.length;)i=l(!0),e.push({x:i,y:a,in_x:i,in_y:a,out_x:i,out_y:a});break;case"V":for(;m<h.length;)a=l(!1),e.push({x:i,y:a,in_x:i,in_y:a,out_x:i,out_y:a});break;case"C":for(;m<h.length;){const S=b(),w=b(),C=b();if(e.length>0){const M=e[e.length-1];M.out_x=S.x,M.out_y=S.y}i=C.x,a=C.y,e.push({x:i,y:a,in_x:w.x,in_y:w.y,out_x:i,out_y:a}),r=w.x,c=w.y}break;case"S":for(;m<h.length;){const S={x:2*i-r,y:2*a-c},w=b(),C=b();if(e.length>0){const M=e[e.length-1];M.out_x=S.x,M.out_y=S.y}i=C.x,a=C.y,e.push({x:i,y:a,in_x:w.x,in_y:w.y,out_x:i,out_y:a}),r=w.x,c=w.y}break;case"Q":for(;m<h.length;){const S=b(),w=b();if(e.length>0){const C=e[e.length-1];C.out_x=C.x+2/3*(S.x-C.x),C.out_y=C.y+2/3*(S.y-C.y)}i=w.x,a=w.y,e.push({x:i,y:a,in_x:i+2/3*(S.x-i),in_y:a+2/3*(S.y-a),out_x:i,out_y:a}),r=S.x,c=S.y}break;case"T":for(;m<h.length;){const S={x:2*i-r,y:2*a-c},w=b();if(e.length>0){const C=e[e.length-1];C.out_x=C.x+2/3*(S.x-C.x),C.out_y=C.y+2/3*(S.y-C.y)}i=w.x,a=w.y,e.push({x:i,y:a,in_x:i+2/3*(S.x-i),in_y:a+2/3*(S.y-a),out_x:i,out_y:a}),r=S.x,c=S.y}break;case"Z":if(n=!0,e.length>0){const S=e[e.length-1];S.closePath=!0;const w=[...e].reverse().find(C=>C.moveTo)||e[0];w&&Math.hypot(w.x-S.x,w.y-S.y)<.1&&(w.in_x=S.in_x,w.in_y=S.in_y,e.pop(),e.length>0&&(e[e.length-1].closePath=!0))}i=d,a=p;break;default:if(h.length>=2){const S=b();i=S.x,a=S.y,e.push({x:i,y:a,in_x:i,in_y:a,out_x:i,out_y:a})}break}}return{points:e,isClosed:n}}setOnLogCallback(t){this.onLog=t}debugLog(t){this.onLog&&this.onLog(t)}setInputFocusCallback(t){this.onInputFocus=t}setInputBlurCallback(t){this.onInputBlur=t}updateConstraint(t,s,o){var n;const e=(n=this.artboard)==null?void 0:n.objects.find(i=>i.id===t);e&&e.constraints&&e.constraints[s]&&(e.constraints[s]={...e.constraints[s],...o},o.useSpring===!1&&this.objectVelocities.delete(t))}log(...t){this.debugMode&&console.log(...t)}warn(...t){this.debugMode&&console.warn(...t)}setInternalInput(t,s){this.inputs.set(t,s),this.onInputUpdate&&this.onInputUpdate(t,s)}setLayout(t,s){this.layout={fit:t,alignment:s}}getActiveStateIds(t="Base Layer"){const s=this.layerStates.get(t);return s?s.currentStateIds:[]}getObjectState(t){return this.objectStates.get(t)}updateObjectOptions(t,s){const o=this.objectStates.get(t);o&&(o.options={...o.options,...s})}updateGraphData(t,s){var e,n;if(!this.artboard)return;const o=this.artboard.objects.find(i=>i.id===t||i.name===t);if(o&&((e=o.geometry)==null?void 0:e.type)==="LineGraph"){const i=o.geometry;!i.datasets||i.datasets.length===0?i.datasets=[{id:"default",label:"Runtime Data",data:s,lineColor:"#3b82f6",lineWidth:2,showArea:!1}]:i.datasets[0].data=s;const a=this.objectStates.get(o.id);a&&((n=a.geometry)==null?void 0:n.type)==="LineGraph"&&(!a.geometry.datasets||a.geometry.datasets.length===0?a.geometry.datasets=JSON.parse(JSON.stringify(i.datasets)):a.geometry.datasets[0].data=[...s]),i.datasets[0].inputId&&this.updateInput(i.datasets[0].inputId,s)}else this.updateInput(t,s)}load(t){var i,a;if(!t)return;let s=this.decompressStrings(t);const o=[],e=new Set,n=r=>{r&&r.forEach(c=>{if(e.has(c.id))return;const d={...c},p=d.childrenObjects||[];e.add(d.id),o.push(d),n(p)})};if(n(s.objects||[]),o.length>(s.objects||[]).length&&this.log(`[Engine] Flattened artboard from ${(s.objects||[]).length} to ${o.length} objects.`),s.objects=o,this.artboard=s,this.currentTime=0,this.objectStates.clear(),this.log(`[ExodeUIEngine] Loading artboard: "${(i=this.artboard)==null?void 0:i.name}" with ${(a=this.artboard)==null?void 0:a.objects.length} objects`),this.artboard&&this.artboard.objects){const r=new Map;this.artboard.objects.forEach(c=>{r.set(c.id,c),c.children||(c.children=[])}),this.artboard.objects.forEach(c=>{if(c.parentId){const d=r.get(c.parentId);d&&(d.children||(d.children=[]),d.children.includes(c.id)||d.children.push(c.id))}})}this.loadFonts(),this.preloadImages(this.artboard),this.reset(),this.advance(0)}preloadImages(t){if(!t||!t.objects)return;const s=o=>{if(!o||this.imageCache.has(o))return;const e=new Image;e.onload=()=>{this.log(`[ExodeUI Preload] loaded ${e.naturalWidth}x${e.naturalHeight}`)},e.onerror=n=>{console.error("[ExodeUI Preload] failed:",n,`Src: ${o.substring(0,80)}...`)},e.src=o,this.imageCache.set(o,e)};t.objects.forEach(o=>{var e,n,i;(e=o.geometry)!=null&&e.src&&s(o.geometry.src),(i=(n=o.style)==null?void 0:n.fill)!=null&&i.src&&s(o.style.fill.src)})}decompressStrings(t){if(t&&typeof t=="object"&&!Array.isArray(t)){if(t._compressed&&t._data)try{const o=vs.decompressFromBase64(t._data);if(o)return o}catch(o){return console.error("[ExodeUI] Failed to decompress string:",o),t._data}const s={};for(const[o,e]of Object.entries(t))s[o]=this.decompressStrings(e);return s}return Array.isArray(t)?t.map(s=>this.decompressStrings(s)):t}reset(){if(!this.artboard)return;if(this.objectStates.clear(),this.objectVelocities.clear(),this.currentTime=0,this.inputs.clear(),this.inputNameMap.clear(),this.layerStates.clear(),this.logicNodeValues.clear(),this.justFiredTriggers.clear(),this.inputs.set("mouseX",0),this.inputs.set("mouseY",0),this.inputs.set("scrollX",0),this.inputs.set("scrollY",0),this.inputs.set("isMouseDown",!1),this.physicsEngine&&(this.physicsEngine.destroy(),this.physicsEngine=null),this._layoutAnimCache.clear(),this._springChainState.clear(),this._emitterPools.clear(),this.artboard.objects.forEach(s=>{var i,a,r,c,d,p,u;const o=s.width??((i=s.geometry)==null?void 0:i.width)??0,e=s.height??((a=s.geometry)==null?void 0:a.height)??0,n=s.cornerRadius??s.corner_radius??((r=s.geometry)==null?void 0:r.corner_radius)??((c=s.geometry)==null?void 0:c.cornerRadius)??0;this.objectStates.set(s.id,{...s.transform||{},x:((d=s.transform)==null?void 0:d.x)??s.x??0,y:((p=s.transform)==null?void 0:p.y)??s.y??0,width:o,height:e,cornerRadius:n,corner_radius:n,clipContent:s.clipContent??!1,autoLayout:s.autoLayout?JSON.parse(JSON.stringify(s.autoLayout)):void 0,layoutProps:s.layoutProps?JSON.parse(JSON.stringify(s.layoutProps)):void 0,opacity:((u=s.transform)==null?void 0:u.opacity)!==void 0?s.transform.opacity:s.opacity!==void 0?s.opacity:100,visible:s.visible!==void 0?s.visible:s.isVisible!==void 0?s.isVisible:!0,blendMode:s.blendMode||"Normal",style:JSON.parse(JSON.stringify(s.style||{})),geometry:JSON.parse(JSON.stringify(s.geometry||{})),options:s.options?JSON.parse(JSON.stringify(s.options)):{},masks:s.masks?JSON.parse(JSON.stringify(s.masks)):[],zIndex:s.zIndex!==void 0?s.zIndex:void 0})}),this.artboard.objects.some(s=>{var o;return(o=s.physics)==null?void 0:o.enabled})){this.physicsEngine=new is;const s=this.artboard.physics?{x:this.artboard.physics.gravity.x,y:this.artboard.physics.gravity.y}:{x:0,y:1};this.physicsEngine.init(s).then(()=>{var o;this.physicsEngine&&((o=this.artboard)==null||o.objects.forEach(e=>{var n,i;if((n=e.physics)!=null&&n.enabled&&e.type==="Shape"){const a=this.objectStates.get(e.id);if(!a)return;const r=e.geometry.width||100,c=e.geometry.height||100;this.physicsEngine.createBody({id:e.id,type:((i=e.geometry)==null?void 0:i.type)||"Rectangle",x:a.x,y:a.y,width:r,height:c,rotation:a.rotation*(Math.PI/180),isStatic:e.physics.bodyType==="Static",mass:e.physics.mass,friction:e.physics.friction,restitution:e.physics.restitution,frictionAir:e.physics.frictionAir,density:e.physics.density,isSensor:e.physics.isSensor})}}))})}this.artboard.stateVariables&&this.artboard.stateVariables.forEach(s=>{var n,i;let o=s.value;if(s.type==="RandomNumber"||s.type==="random_number"||s.min!==void 0&&s.max!==void 0&&((n=s.type)!=null&&n.toLowerCase().includes("random"))){const a=s.min??0,r=s.max??100;o=Math.random()*(r-a)+a}else if(s.type==="RandomColor"||s.type==="random_color"||s.minAlpha!==void 0&&((i=s.type)!=null&&i.toLowerCase().includes("random"))){const a=Math.floor(Math.random()*256),r=Math.floor(Math.random()*256),c=Math.floor(Math.random()*256),d=s.minAlpha??0,p=s.maxAlpha??1,u=(Math.random()*(p-d)+d).toFixed(2);o=`rgba(${a}, ${r}, ${c}, ${u})`}this.inputs.set(s.id,o);const e=this.inputNameMap.get(s.name)||[];e.includes(s.id)||e.push(s.id),this.inputNameMap.set(s.name,e)}),this.artboard.stateMachine&&(this.activeStateMachine=this.artboard.stateMachine,this.activeStateMachine.inputs.forEach(s=>{this.inputs.set(s.id,s.value.value);const o=this.inputNameMap.get(s.name)||[];o.push(s.id),this.inputNameMap.set(s.name,o)}),this.activeStateMachine.layers.forEach(s=>{let o=s.states.find(e=>e.id===s.entryStateId);!o&&s.states.length>0&&(console.warn(`[ExodeUI] Invalid entryStateId "${s.entryStateId}" in layer "${s.name}". Falling back to first state.`),o=s.states[0]),o&&this.enterStates(s.name,[o.id])}),this.evaluateTransitions()),this.initGlobalAnimationTriggers(),this.updateAutoLayout(!0),this.loadFonts()}updateAutoLayout(t=!1){var n;if(!this.artboard)return;const s=new Map;this.artboard.objects.forEach(i=>s.set(i.id,i));const o=.15,e=i=>{i.forEach(a=>{const r=this.objectStates.get(a.id);if(r){const c=Math.abs(r.x-a.x),d=Math.abs(r.y-a.y);!t&&(c>20||d>20)?(r.x+=(a.x-r.x)*o,r.y+=(a.y-r.y)*o):(r.x=a.x,r.y=a.y),a.width!==void 0&&(r.width=a.width),a.height!==void 0&&(r.height=a.height)}})};if((n=this.artboard.autoLayout)!=null&&n.enabled){const i=this.artboard.objects.filter(r=>!r.parentId),a=ss(this.artboard,i,r=>this.objectStates.get(r));e(a.childUpdates)}this.artboard.objects.forEach(i=>{var a;if(i.type==="Frame"&&((a=i.autoLayout)!=null&&a.enabled)&&i.children&&i.children.length>0){const r=i.children.map(p=>s.get(p)).filter(p=>!!p),c=this.objectStates.get(i.id);if(!c)return;const d=ss(c,r,p=>this.objectStates.get(p));d.frameWidth!==void 0&&(c.width=d.frameWidth),d.frameHeight!==void 0&&(c.height=d.frameHeight),e(d.childUpdates)}})}loadFonts(){if(!this.artboard)return;const t=new Set;if(this.artboard.objects.forEach(i=>{i.geometry&&i.geometry.type==="Text"&&i.geometry.fontFamily&&t.add(i.geometry.fontFamily)}),this.artboard.animations.forEach(i=>{i.tracks.forEach(a=>{(a.property==="geometry.fontFamily"||a.property==="fontFamily")&&a.keyframes.forEach(r=>{r.value&&typeof r.value=="string"&&t.add(r.value)})})}),t.size===0)return;let s="";t.forEach(i=>{const a=i.replace(/ /g,"+");s+=`&family=${a}:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900`});const o="exodeui-google-fonts",e="exodeui-fontshare-fonts";if(s.length>0){const i=`https://fonts.googleapis.com/css2?display=swap${s}`;let a=document.getElementById(o);a||(a=document.createElement("link"),a.id=o,a.rel="stylesheet",document.head.appendChild(a)),a.href!==i&&(a.href=i)}const n=[];if(t.forEach(i=>{i.toLowerCase().includes("clash display")&&n.push("clash-display@200,300,400,500,600,700")}),n.length>0){const i=`https://api.fontshare.com/v2/css?f[]=${n.join("&f[]=")}&display=swap`;let a=document.getElementById(e);a||(a=document.createElement("link"),a.id=e,a.rel="stylesheet",document.head.appendChild(a)),a.href!==i&&(a.href=i)}document.fonts&&document.fonts.ready&&document.fonts.ready.then(()=>{this.pretextCache.clear(),this.advance(0)})}enterStates(t,s){var i;if(s.length===0)return;const o=this.layerStates.get(t);if(o&&o.currentStateIds.length===s.length&&s.every(r=>o.currentStateIds.includes(r))&&this.justFiredTriggers.size===0)return;const e=[];let n=0;if(this.artboard&&this.activeStateMachine){const a=this.activeStateMachine.layers.find(r=>r.name===t);if(a)for(const r of s){const c=a.states.find(d=>d.id===r);if(c)if(c.isBlendState&&c.blendAnimations&&c.blendAnimations.length>0)e.push({animation:null,state:c}),c.blendAnimations.forEach(d=>{const p=this.artboard.animations.find(u=>u.id===d.animationId);p&&(n=Math.max(n,this.getAnimationDuration(p)))});else{let d=null;c.animationId&&(d=this.artboard.animations.find(p=>p.id===c.animationId)||null),d||(d=this.artboard.animations.find(p=>{var u,g;return p.name===c.name||p.id===c.name||(c.name==="Entry"||c.id==="entry")&&(((u=p.name)==null?void 0:u.toLowerCase())==="onload"||((g=p.name)==null?void 0:g.toLowerCase())==="intro")})||null),d&&((i=this.artboard.animationFlow)!=null&&i.some(u=>(u.trigger==="on_load"||u.trigger==="after_delay")&&u.targetAnimationId===(d==null?void 0:d.id))||(e.push({animation:d,state:c}),n=Math.max(n,this.getAnimationDuration(d))))}}}this.layerStates.set(t,{currentStateIds:s,animations:e,time:0,duration:n})}setInputBool(t,s){this.updateInput(t,s)}setInputNumber(t,s){this.updateInput(t,s)}fireTrigger(t){this.updateInput(t,!0)}setInputText(t,s){this.updateInput(t,s)}setInputNumberArray(t,s){this.updateInput(t,s)}setInputStringArray(t,s){this.updateInput(t,s)}updateObjectProperty(t,s,o){const e=this.objectStates.get(t);if(e)if(s.includes(".")||s.includes("[")){const n=s.replace(/\[(\d+)\]/g,".$1").split(".");let i=e;for(let a=0;a<n.length-1;a++){if(typeof i[n[a]]!="object"||i[n[a]]===null){const r=n[a+1],c=!isNaN(Number(r));i[n[a]]=c?[]:{}}i=i[n[a]]}i[n[n.length-1]]=o}else e[s]=o}updateInput(t,s){var c,d,p,u,g;let o;if(this.inputs.has(t)){const h=(c=this.activeStateMachine)==null?void 0:c.inputs.find(f=>f.id===t);h&&typeof h.value=="object"&&(o=h.value.type)}else{const h=this.inputNameMap.get(t);if(h&&h.length>0){const f=(d=this.activeStateMachine)==null?void 0:d.inputs.find(v=>v.id===h[0]);f&&typeof f.value=="object"&&(o=f.value.type)}}let e=s;o==="Trigger"&&(s===1?e=!0:s===0&&(e=!1));const n=(u=(p=this.artboard)==null?void 0:p.stateVariables)==null?void 0:u.find(h=>h.id===t||h.name===t);if(n&&(n.type==="RandomNumber"||n.type==="RandomColor"||n.type&&String(n.type).toLowerCase().includes("random"))){if(n.type==="RandomNumber"||n.type==="random_number"||n.min!==void 0&&n.max!==void 0){const h=n.min??0,f=n.max??100;e=Math.random()*(f-h)+h}else if(n.type==="RandomColor"||n.type==="random_color"||n.minAlpha!==void 0){const h=Math.floor(Math.random()*256),f=Math.floor(Math.random()*256),v=Math.floor(Math.random()*256),m=n.minAlpha??0,l=n.maxAlpha??1,b=(Math.random()*(l-m)+m).toFixed(2);e=`rgba(${h}, ${f}, ${v}, ${b})`}}let i=!1;this.inputs.has(t)&&(this.setInternalInput(t,e),i=!0);const a=this.inputNameMap.get(t);a&&a.length>0&&(a.forEach(h=>this.setInternalInput(h,e)),i=!0),i||this.setInternalInput(t,e),o==="Trigger"&&e===!0&&(this.justFiredTriggers.add(t),a&&a.forEach(h=>this.justFiredTriggers.add(h)));let r=null;if(Array.isArray(e))r=e;else if(typeof e=="string"&&e.trim().startsWith("[")&&e.trim().endsWith("]"))try{const h=JSON.parse(e);Array.isArray(h)&&(r=h)}catch{}r&&((g=this.artboard)==null||g.objects.forEach(h=>{var m;const f=(m=h.options)==null?void 0:m.dataInputId;if(h.inputId===t||h.name===t||f===t||a&&(a.includes(h.inputId)||f&&a.includes(f))){let l=this.objectStates.get(h.id);l&&!l.options&&(l.options=JSON.parse(JSON.stringify(h.options||{}))),l&&l.options&&(this.isListViewObject(h)?l.options.items=r:(h.type==="Dropdown"||h.variant==="dropdown")&&(l.options.optionsList=r)),h.options&&(this.isListViewObject(h)?h.options.items=r:(h.type==="Dropdown"||h.variant==="dropdown")&&(h.options.optionsList=r))}})),this.evaluateTransitions(),this.evaluateVariableTriggers(t,e)}evaluateVariableTriggers(t,s){if(!this.artboard)return;const o=this.artboard.animationFlow||[],e=this.inputNameMap.get(t);o.forEach(n=>{if(n.trigger==="variable"&&n.conditionVariableId&&n.targetAnimationId&&(n.conditionVariableId===t||e&&e.includes(n.conditionVariableId))){const a=n.conditionOperator||"IsTrue",r=n.conditionValue;let c=!1;switch(a){case"Equal":case"==":c=s==r;break;case"NotEqual":case"!=":c=s!=r;break;case"GreaterThan":case">":c=s>r;break;case"LessThan":case"<":c=s<r;break;case"GreaterEqual":case">=":c=s>=r;break;case"LessEqual":case"<=":c=s<=r;break;case"IsTrue":c=!!s;break;case"IsFalse":c=!s;break}if(c){const d=n.delay||0;d<=0?this.triggerGlobalAnimation(n.targetAnimationId,n.subAnimationIds,n.loop,n.id):setTimeout(()=>this.triggerGlobalAnimation(n.targetAnimationId,n.subAnimationIds,n.loop,n.id),d)}}})}evaluateTransitions(){this.activeStateMachine&&(this.activeStateMachine.layers.forEach(t=>{const s=this.layerStates.get(t.name);if(!s||s.currentStateIds.length===0)return;const o=[];let e=!1;for(const n of s.currentStateIds){const i=t.states.find(r=>r.id===n);if(!i)continue;let a=!1;for(const r of i.transitions||[])this.checkConditions(r.conditions)&&(o.push(r.targetStateId),a=!0,e=!0);a||o.push(n)}if(!e){const n=this.findGlobalTransition(t,s.currentStateIds);n&&(o.length=0,o.push(n.targetStateId),e=!0,n.conditions&&(n.conditions||[]).forEach(i=>{var r;const a=(r=this.activeStateMachine)==null?void 0:r.inputs.find(c=>c.id===i.inputId);a&&typeof a.value=="object"&&a.value.type==="Trigger"&&this.setInternalInput(i.inputId,!1)}))}if(e){const n=Array.from(new Set(o));this.enterStates(t.name,n)}}),this.justFiredTriggers.size>0&&(this.justFiredTriggers.forEach(t=>{var o,e;this.setInternalInput(t,!1);const s=(o=this.activeStateMachine)==null?void 0:o.inputs.find(n=>n.id===t);s&&this.inputNameMap.has(s.name)&&((e=this.inputNameMap.get(s.name))==null||e.forEach(n=>this.setInternalInput(n,!1)))}),this.justFiredTriggers.clear()))}findGlobalTransition(t,s){for(const o of t.states)if(!(s.includes(o.id)&&this.justFiredTriggers.size===0)){for(const n of o.transitions||[])if(!(s.includes(n.targetStateId)&&this.justFiredTriggers.size===0)&&this.checkConditions(n.conditions))return n}return null}checkConditions(t){return!t||t.length===0?!0:t.every(s=>{const o=s.inputId,e=s.op;let n=s.value;const i=this.evaluateLogicTree(o);if(i===void 0)return this.log(`[Engine] Condition Check Failed: Input ${o} is undefined`),!1;typeof i=="boolean"?n==="true"||n==="1"||n===1?n=!0:(n==="false"||n==="0"||n===0)&&(n=!1):typeof i=="number"&&typeof n=="string"&&(n=parseFloat(n));let a=!1;switch(e){case"Equal":case"==":a=i==n;break;case"NotEqual":case"!=":a=i!=n;break;case"GreaterThan":case">":a=i>n;break;case"LessThan":case"<":a=i<n;break;case"GreaterEqual":case">=":a=i>=n;break;case"LessEqual":case"<=":a=i<=n;break;case"IsTrue":a=!!i;break;case"IsFalse":a=!i;break;default:a=!1}return a||this.justFiredTriggers.has(o),a})}evaluateLogicTree(t,s=null,o=new Set){var a,r,c,d,p,u;if(o.has(t))return this.inputs.get(t)??this.logicNodeValues.get(t)??0;o.add(t);const e=(r=(a=this.activeStateMachine)==null?void 0:a.logicNodes)==null?void 0:r.find(g=>g.id===t);if(e){const g=(f,v)=>{const m=e.inputs.find(l=>l.id===f);return m?m.sourceId?this.evaluateLogicTree(m.sourceId,m.sourceHandleId,o):m.value!==void 0?m.value:v:v};let h=0;switch(e.op){case _t.AND:h=g("a",!1)&&g("b",!1);break;case _t.OR:h=g("a",!1)||g("b",!1);break;case _t.NOT:h=!g("in",!1);break;case _t.XOR:h=!!g("a",!1)!=!!g("b",!1);break;case _t.OBJECT:h=e.name;break;case _t.PROPERTY:case _t.GET_PROPERTY:{const f=g("id","");if(!f){h=0;break}const v=e.name;if(!v||v==="GET_PROPERTY"||v==="PROPERTY"){h=0;break}const m=this.objectStates.get(f);if(!m){h=0;break}v in m?h=m[v]:h=this.resolvePath(m,v);break}case _t.SET_PROPERTY:{const f=g("id",""),v=g("value",void 0);if(!f||v===void 0){h=0;break}const m=e.name;if(!m||m==="SET_PROPERTY"){h=0;break}const l=this.objectStates.get(f);if(!l){h=0;break}if(["x","y","rotation","scale_x","scale_y","opacity","width","height","cornerRadius","visible","zIndex"].includes(m))l[m]=v,h=v;else{const S=m.replace(/\[(\d+)\]/g,".$1").split(".");let w=l;for(let M=0;M<S.length-1;M++){const I=S[M],_=S[M+1];w[I]===void 0&&(w[I]=isNaN(Number(_))?{}:[]),w=w[I]}const C=S[S.length-1];w[C]=v,h=v}break}case _t.ADD:h=g("a",0)+g("b",0);break;case _t.SUB:h=g("a",0)-g("b",0);break;case _t.MUL:h=g("a",0)*g("b",0);break;case _t.DIV:{const f=g("b",1);h=f===0?0:g("a",0)/f;break}case _t.MOD:h=g("a",0)%g("b",1);break;case _t.POW:h=Math.pow(g("a",0),g("b",1));break;case _t.ABS:h=Math.abs(g("in",0));break;case _t.ROUND:h=Math.round(g("in",0));break;case _t.FLOOR:h=Math.floor(g("in",0));break;case _t.CEIL:h=Math.ceil(g("in",0));break;case _t.SIN:h=Math.sin(g("in",0));break;case _t.COS:h=Math.cos(g("in",0));break;case _t.TAN:h=Math.tan(g("in",0));break;case _t.CLAMP:{const f=g("in",0),v=g("min",0),m=g("max",1);h=Math.max(v,Math.min(m,f));break}case _t.REMAP:{const f=g("in",0),v=g("inMin",0),m=g("inMax",100),l=g("outMin",0),b=g("outMax",1);h=m===v?l:l+(f-v)*(b-l)/(m-v);break}case _t.EQ:h=g("a",0)==g("b",0);break;case _t.NEQ:h=g("a",0)!=g("b",0);break;case _t.GT:h=g("a",0)>g("b",0);break;case _t.LT:h=g("a",0)<g("b",0);break;case _t.GTE:h=g("a",0)>=g("b",0);break;case _t.LTE:h=g("a",0)<=g("b",0);break;case _t.IF_ELSE:h=g("cond",!1)?g("then",0):g("else",0);break;case _t.VALUE:h=e.value!==void 0?e.value:0;break;case _t.INPUT:h=this.inputs.get(e.name)??0;break;case _t.LOG:{const f=g("in","");this.debugLog(`[User Logic] ${f}`),h=f;break}case _t.SCROLL_X:h=this.inputs.get("scrollX")??0;break;case _t.SCROLL_Y:h=this.inputs.get("scrollY")??0;break;case _t.MOUSE_X:h=this.inputs.get("mouseX")??0;break;case _t.MOUSE_Y:h=this.inputs.get("mouseY")??0;break;case _t.IS_MOUSE_DOWN:h=this.inputs.get("isMouseDown")??!1;break;case _t.EFFECTOR:{const f=g("id",""),v=g("intensity",1),m=g("trigger",!0);if(!f||!m){h=0;break}const l=e.name;if(!l){h=0;break}const b=this.objectStates.get(f);if(!b){h=0;break}if(["glitch","halftone","pixelate","noise","acid_gradient","acid_rave","shimmer"].includes(l))b.style||(b.style={}),b.style.artEffect={enabled:!0,type:l,intensity:v},h=1;else{b.behaviors||(b.behaviors=[]);let w=b.behaviors.find(C=>C.type===l);w?(w.enabled=!0,w.settings||(w.settings={}),w.settings.intensity=v):(w={id:`eff_${Date.now()}_${l}`,type:l,enabled:!0,sensors:[],settings:{intensity:v}},b.behaviors.push(w)),h=1}break}case _t.MONITOR:{h=g("in",0);break}case _t.SPRING_PULL:{const f=g("objectId",""),v=g("forceX",0),m=g("forceY",0);f&&((c=this.artboard)==null||c.objects.forEach(l=>{l.behaviors&&l.behaviors.forEach(b=>{var S;if(b.type===tt.SpringChain&&((S=b.settings)!=null&&S.connections)&&(b.settings.connections.some(C=>C.targetId===f)||l.id===f)){this._springChainState.has(l.id)||this._springChainState.set(l.id,new Map);const C=this._springChainState.get(l.id);if(!C.has(f)){const I=this.objectStates.get(f);C.set(f,{x:(I==null?void 0:I.x)??0,y:(I==null?void 0:I.y)??0,vx:0,vy:0})}const M=C.get(f);M&&(M.vx+=v,M.vy+=m)}})})),h=1;break}case _t.SPRING_SETTLE:{const f=g("objectId","");let v=!0;if(f){const m=g("threshold",1);this._springChainState.forEach(l=>{const b=l.get(f);b&&(Math.abs(b.vx)>m||Math.abs(b.vy)>m)&&(v=!1)})}h=v;break}case _t.EMIT:{const f=g("objectId",""),v=g("count",20);f&&((d=this.artboard)==null||d.objects.forEach(m=>{m.behaviors&&m.behaviors.forEach(l=>{l.type===tt.ParticleEmitter&&m.id===f&&(l._pendingBurst=(l._pendingBurst||0)+v)})})),h=1;break}default:h=0;break}if(this.logicNodeValues.set(t,h),e.op===_t.DELAY){const f=g("delay",0),v=g("in",0);let m=this.logicNodeState.get(t);for(m||(m={queue:[]},this.logicNodeState.set(t,m)),m.queue.push({time:this.currentTime+f,value:v});m.queue.length>0&&m.queue[0].time<=this.currentTime;)m.lastValue=m.queue.shift().value;h=m.lastValue??0}return h}const n=(p=this.activeStateMachine)==null?void 0:p.inputs.find(g=>g.id===t||g.name===t);if(n&&n.sourceId&&!o.has(n.sourceId)){const g=this.evaluateLogicTree(n.sourceId,n.sourceHandleId,o);return this.inputs.set(n.id,g),g}let i=this.inputs.get(t)??(n?this.inputs.get(n.id):void 0);if((this.justFiredTriggers.has(t)||n&&this.justFiredTriggers.has(n.id))&&(i=!0),s&&i!==void 0){const g=(u=this.activeStateMachine)==null?void 0:u.inputs.find(h=>h.id===t);if(g&&g.value.type==="Number"&&typeof i=="number"){const h=g.value.defaultValue??g.value.value;if(s==="source-greater")return i>h;if(s==="source-less")return i<h;if(s==="source-equal")return i===h}if(s==="source-true")return i===!0;if(s==="source-false")return i===!1;if(s==="source-fire")return this.justFiredTriggers.has(t)}return i!==void 0?i:0}runLogicNodes(){!this.activeStateMachine||!this.activeStateMachine.logicNodes||this.activeStateMachine.logicNodes.forEach(t=>{(t.op===_t.SET_PROPERTY||t.op===_t.EFFECTOR)&&this.evaluateLogicTree(t.id)})}resolvePath(t,s){const o=s.replace(/\[(\d+)\]/g,".$1").split(".");let e=t;for(const n of o)if(e&&typeof e=="object"&&n in e)e=e[n];else return;return e}processLogicProperties(){!this.artboard||!this.artboard.objects||this.artboard.objects.forEach(t=>{const s=t.logicProperties;if(s&&s.length>0){const o=this.objectStates.get(t.id);if(!o)return;s.forEach(e=>{let n;if(e.valueType==="variable"?n=this.getInputValue(e.variableId):e.valueType==="constant"&&(n=e.value),n!==void 0){const i=e.name;if(["x","y","rotation","scale_x","scale_y","opacity","width","height","cornerRadius","visible","zIndex"].includes(i))o[i]=n;else{const r=i.replace(/\[(\d+)\]/g,".$1").split(".");let c=o;for(let p=0;p<r.length-1;p++){const u=r[p],g=r[p+1];c[u]===void 0&&(c[u]=isNaN(Number(g))?{}:[]),c=c[u]}const d=r[r.length-1];c[d]=n}}})}})}seek(t){this.artboard&&(this.currentTime=t,this.layerStates.forEach(s=>{s.time=t,s.time>(s.duration||0)&&(s.animations.some(e=>{var n;return((n=e.state)==null?void 0:n.loop)===!0})?s.time%=s.duration||1:s.time=s.duration)}),this.advance(0))}advance(t){if(!this.artboard)return;this.currentTime+=t,this.isMouseDown&&this.pointerDownTimes.forEach((o,e)=>{e&&this.currentTime-o>=.5&&(this.log(`[Engine] onHold detected for ${e}`),this.fireEventForObject(e,"onHold"),this.pointerDownTimes.delete(e))}),this.frameCount++,this.physicsEngine&&(this.physicsEngine.step(t),this.artboard.objects.forEach(o=>{var e;if((e=o.physics)!=null&&e.enabled){const n=this.physicsEngine.getPosition(o.id),i=this.physicsEngine.getRotation(o.id),a=this.objectStates.get(o.id);a&&n!==null&&i!==null&&(a.x=n.x,a.y=n.y,a.rotation=i*(180/Math.PI))}})),this.activeStateMachine&&(this.runLogicNodes(),this.evaluateTransitions()),this.processLogicProperties();const s=[];this.layerStates.forEach((o,e)=>{if(o.animations.length>0){if(o.time+=t,this.frameCount%240===0&&this.debugLog(`Advancing Layer time: ${o.time.toFixed(3)} / ${o.duration.toFixed(3)}`),o.time>o.duration)if(o.animations.some(i=>{var a;return((a=i.state)==null?void 0:a.loop)===!0}))o.time%=o.duration;else{const i=o.time<o.duration+.1;o.time=o.duration,i&&(e.startsWith("global_")&&console.log(`[Engine] GLOBAL layer done: ${e}, duration=${o.duration}, currentStateIds=${JSON.stringify(o.currentStateIds)}, ruleId=${o.ruleId}`),o.currentStateIds.length>0&&this.handleAnimationFinished(o.currentStateIds[0],o.ruleId),e.startsWith("global_")&&s.push(e))}o.animations.forEach(n=>{var i;(i=n.state)!=null&&i.isBlendState&&n.state.blendAnimations?this.applyBlendState(n.state,o.time):n.animation&&this.applyAnimation(n.animation,o.time,n.filterObjectIds)})}}),s.forEach(o=>{this.layerStates.delete(o),this.debugLog(`[Engine] Cleaned up completed global layer: ${o}`)}),this.solveConstraints(t),this.solveBehaviors(t),this.activeTriggers.forEach((o,e)=>{var n,i,a,r,c,d,p;if(o.phase==="entry")o.time+=t,o.time>=this.getAnimationDuration(o.animation)&&((a=(i=(n=this.artboard)==null?void 0:n.objects.find(u=>u.id===e))==null?void 0:i.triggers)==null||a.find(u=>u.id===o.triggerId),o.phase="hold",o.elapsedHold=0,o.time=this.getAnimationDuration(o.animation)),this.applyAnimation(o.animation,o.time,o.filterObjectIds||o.filterObjectId||void 0);else if(o.phase==="hold"){const u=(d=(c=(r=this.artboard)==null?void 0:r.objects.find(f=>f.id===e))==null?void 0:c.triggers)==null?void 0:d.find(f=>f.id===o.triggerId),g=(u==null?void 0:u.duration)||0;o.elapsedHold+=t*1e3;let h=o.elapsedHold>=g;if((u==null?void 0:u.eventType)==="hover"&&!this.activeHoverIds.has(e)&&(h=!0),((u==null?void 0:u.eventType)==="onHold"||(u==null?void 0:u.eventType)==="pointerDown")&&!this.isMouseDown&&(h=!0),h)if(u!=null&&u.exitAnimationId){const f=(p=this.artboard)==null?void 0:p.animations.find(v=>v.id===u.exitAnimationId);f?(o.phase="exit",o.animation=f,o.time=0):this.activeTriggers.delete(e)}else this.activeTriggers.delete(e)}else o.phase==="exit"&&(o.time+=t,o.time>=this.getAnimationDuration(o.animation)?this.activeTriggers.delete(e):this.applyAnimation(o.animation,o.time,o.filterObjectIds||o.filterObjectId||void 0))}),this.evaluateContinuousInteractions(t),this.processJoysticks(t),this.activeStateMachine&&this.onLogicUpdate&&this.logicNodeValues.size>0&&this.onLogicUpdate(Object.fromEntries(this.logicNodeValues))}evaluateContinuousInteractions(t){this.artboard&&(this.artboard.objects.forEach(s=>{var e,n,i;const o=(e=s.style)==null?void 0:e.analytics;if(o&&o.isEnabled&&o.triggerType==="visible"){const a=this.objectStates.get(s.id);if(a&&a.visible!==!1){const r=this.getGlobalTransform(s.id),c=(((n=s.geometry)==null?void 0:n.width)||100)*(r.scale_x||1),d=(((i=s.geometry)==null?void 0:i.height)||100)*(r.scale_y||1),p=50,u=r.x+c/2>=-this.canvasWidth/2-p&&r.x-c/2<=this.canvasWidth/2+p&&r.y+d/2>=-this.canvasHeight/2-p&&r.y-d/2<=this.canvasHeight/2+p,g=`analytics_${s.id}`,h=this.wasInView.has(g);u&&!h&&this.fireAnalyticsEvent(s.id,"visible"),u?this.wasInView.add(g):this.wasInView.delete(g)}}}),this.artboard.objects.forEach(s=>{const o=s.interactions||[];o.length!==0&&o.forEach(e=>{const n=e.triggers||[e.event||e.trigger];n&&n.forEach(i=>{var r,c,d;const a=i.toLowerCase();if(a==="on interval"||a==="oninterval"){const p=e.intervalValue||2e3,u=this.periodicTriggerTimes.get(e.id)||0;this.currentTime*1e3-u>=p&&(!e.conditions||this.checkConditions(e.conditions))&&(this.fireEventForObject(s.id,"On Interval"),this.periodicTriggerTimes.set(e.id,this.currentTime*1e3))}if(a==="on delay"||a==="ondelay"){const p=e.delayValue||1e3;!this.periodicTriggerTimes.has(e.id)&&this.currentTime*1e3>=p&&(!e.conditions||this.checkConditions(e.conditions))&&(this.fireEventForObject(s.id,"On Delay"),this.periodicTriggerTimes.set(e.id,this.currentTime*1e3))}if(a==="scroll into view"||a==="scrollintoview"){const p=this.objectStates.get(s.id);if(p&&p.visible!==!1){const u=this.getGlobalTransform(s.id),g=(((r=s.geometry)==null?void 0:r.width)||100)*(u.scale_x||1),h=(((c=s.geometry)==null?void 0:c.height)||100)*(u.scale_y||1),f=50,v=u.x+g/2>=-this.canvasWidth/2-f&&u.x-g/2<=this.canvasWidth/2+f&&u.y+h/2>=-this.canvasHeight/2-f&&u.y-h/2<=this.canvasHeight/2+f,m=this.wasInView.has(s.id);v&&!m&&(!e.conditions||this.checkConditions(e.conditions))&&this.fireEventForObject(s.id,"Scroll Into View"),v?this.wasInView.add(s.id):this.wasInView.delete(s.id)}}if(a==="scroll progress"||a==="scrollprogress"){const p=Math.abs(this.scrollOffset.y)/(((d=this.artboard)==null?void 0:d.height)||1e3),u=this.scrollProgressLastValue.get(e.id)||0;Math.abs(p-u)>.001&&(this.scrollProgressLastValue.set(e.id,p),(e.action==="Set Input"||e.action==="setInput")&&this.updateInput(e.targetInputId,p))}})})}))}solveConstraints(t){this.artboard&&this.artboard.objects.forEach(s=>{if(!s.constraints||s.constraints.length===0)return;const o=this.objectStates.get(s.id);if(!o)return;const e=this.getGlobalTransform(s.id);if(s.constraints.forEach((n,i)=>{var d,p,u,g,h,f,v,m,l;const a=((d=o.constraints)==null?void 0:d[i])||{},r={...n,...a},c=r.strength??1;if(r.type==="Translation"){const b=this.getGlobalTransform(r.targetId);if(b){const S=r.offsetX||0,w=r.offsetY||0,C=b.x+S,M=b.y+w,I=r.useSpring;if(I){const P=this.objectVelocities.get(s.id)||{vx:0,vy:0},L=Math.max(0,Math.min(t,.05)),k=r.copyX!==!1,A=r.copyY!==!1,T=k?e.x+(C-e.x)*c:e.x,R=A?e.y+(M-e.y)*c:e.y,{x:F,y:O,vx:W,vy:V}=this.computeSpring(e.x,e.y,P.vx,P.vy,T,R,r,L);k&&(e.x=F),A&&(e.y=O),this.objectVelocities.set(s.id,{vx:k?W:0,vy:A?V:0})}else r.copyX!==!1&&(e.x=e.x+(C-e.x)*c),r.copyY!==!1&&(e.y=e.y+(M-e.y)*c);let _=!1,E=!1;if((p=r.limitX)!=null&&p.enabled){const P=e.x;e.x=Math.max(r.limitX.min,Math.min(r.limitX.max,e.x)),e.x!==P&&(_=!0)}if((u=r.limitY)!=null&&u.enabled){const P=e.y;e.y=Math.max(r.limitY.min,Math.min(r.limitY.max,e.y)),e.y!==P&&(E=!0)}if((_||E)&&I){const P=this.objectVelocities.get(s.id)||{vx:0,vy:0};this.objectVelocities.set(s.id,{vx:_?0:P.vx,vy:E?0:P.vy})}}}else if(r.type==="Rotation"){const b=this.getGlobalTransform(r.targetId);if(b){let w=(b.rotation+(r.offset||0)-e.rotation)%360;w>180&&(w-=360),w<-180&&(w+=360),e.rotation=e.rotation+w*c}}else if(r.type==="Scale"){const b=this.getGlobalTransform(r.targetId);b&&(r.copyX&&(e.scale_x=e.scale_x+(b.scale_x-e.scale_x)*c),r.copyY&&(e.scale_y=e.scale_y+(b.scale_y-e.scale_y)*c))}else if(r.type==="Transform"){const b=this.getGlobalTransform(r.targetId);if(b){e.x=e.x+(b.x-e.x)*c,e.y=e.y+(b.y-e.y)*c;let S=(b.rotation-e.rotation)%360;S>180&&(S-=360),S<-180&&(S+=360),e.rotation=e.rotation+S*c,e.scale_x=e.scale_x+(b.scale_x-e.scale_x)*c,e.scale_y=e.scale_y+(b.scale_y-e.scale_y)*c}}else if(r.type==="FollowPointer"){const b=((g=this._lastPointerPos)==null?void 0:g.x)??e.x,S=((h=this._lastPointerPos)==null?void 0:h.y)??e.y,w=r.useSpring;if(w){const M=this.objectVelocities.get(s.id)||{vx:0,vy:0},{x:I,y:_,vx:E,vy:P}=this.computeSpring(e.x,e.y,M.vx,M.vy,b,S,r,t);e.x=I,e.y=_,this.objectVelocities.set(s.id,{vx:E,vy:P})}else e.x=e.x+(b-e.x)*c,e.y=e.y+(S-e.y)*c;let C=!1;if((f=r.limitX)!=null&&f.enabled){const M=e.x;e.x=Math.max(r.limitX.min,Math.min(r.limitX.max,e.x)),e.x!==M&&(C=!0)}if((v=r.limitY)!=null&&v.enabled){const M=e.y;e.y=Math.max(r.limitY.min,Math.min(r.limitY.max,e.y)),e.y!==M&&(C=!0)}C&&w&&this.objectVelocities.set(s.id,{vx:0,vy:0})}else if(r.type==="Distance"){const b=this.getGlobalTransform(r.targetId);if(b){const S=e.x-b.x,w=e.y-b.y,C=Math.sqrt(S*S+w*w),M=r.distance||0;let I=C;switch(r.mode){case"exact":I=M;break;case"minimum":I=Math.max(M,C);break;case"maximum":I=Math.min(M,C);break;case"clamped":I=Math.max(0,Math.min(M,C));break}if(C>0){const _=e.x===b.x&&e.y===b.y?1:I/C;e.x=e.x+(b.x+S*_-e.x)*c,e.y=e.y+(b.y+w*_-e.y)*c}}}else if(r.type==="FollowPath"){const b=(m=this.artboard)==null?void 0:m.objects.find(S=>S.id===r.targetId);if(b){const S=this.getGlobalTransform(b.id);if(S){let w=b.geometry;if(b.type==="Frame"||b.type==="Group"||!w||w.type!=="Path"&&w.type!=="Ellipse"&&w.type!=="Rectangle"){const X=(l=this.artboard)==null?void 0:l.objects.find(ot=>ot.parentId===b.id&&ot.type==="Shape"&&ot.geometry&&(ot.geometry.type==="Path"||ot.geometry.type==="Ellipse"||ot.geometry.type==="Rectangle"));X&&(w=X.geometry)}if(!w)return;const C=Math.max(0,Math.min(1,(r.distance||0)/100)),M=S.width||w.width||0,I=S.height||w.height||0,_=this.getPointOnPath(w,M,I,C),E=S.rotation*Math.PI/180,P=Math.cos(E),L=Math.sin(E),k=_.x*S.scale_x*P-_.y*S.scale_y*L,A=_.x*S.scale_x*L+_.y*S.scale_y*P;let T=S.rotation+(r.offsetRotation||0);if(r.orient){const X=Math.cos(_.angle),ot=Math.sin(_.angle),J=X*S.scale_x*P-ot*S.scale_y*L,at=X*S.scale_x*L+ot*S.scale_y*P;T=Math.atan2(at,J)*180/Math.PI+(r.offsetRotation||0)}const R=T*Math.PI/180,F=Math.cos(R),O=Math.sin(R),W=(r.offsetX||0)*F-(r.offsetY||0)*O,V=(r.offsetX||0)*O+(r.offsetY||0)*F,U=S.x+k+W,Y=S.y+A+V;if(e.x=e.x+(U-e.x)*c,e.y=e.y+(Y-e.y)*c,r.orient){let X=(T-e.rotation)%360;X>180&&(X-=360),X<-180&&(X+=360),e.rotation=e.rotation+X*c}}}}else if(r.type==="IK"){const b=this.getGlobalTransform(r.targetId);b&&this.solveIK(s,b,r.boneCount||2,c)}}),s.constraints.some(n=>n.type!=="IK")){const n=this.globalToLocal(s.parentId,e);o.x=n.x,o.y=n.y,o.rotation=n.rotation,o.flip_x=n.scale_x<0,o.scale_x=Math.abs(n.scale_x),o.flip_y=n.scale_y<0,o.scale_y=Math.abs(n.scale_y)}})}getGlobalTransform(t){var p,u;const s=this.objectStates.get(t);if(!s)return{x:0,y:0,rotation:0,scale_x:1,scale_y:1};const o=(p=this.artboard)==null?void 0:p.objects.find(g=>g.id===t),e=(o==null?void 0:o.type)==="Bone"?(u=o.geometry)==null?void 0:u.length:void 0;if(!o||!o.parentId)return{x:s.x,y:s.y,rotation:s.rotation,scale_x:(s.scale_x??1)*(s.flip_x?-1:1),scale_y:(s.scale_y??1)*(s.flip_y?-1:1),length:e};const n=this.getGlobalTransform(o.parentId),i=n.rotation*Math.PI/180,a=Math.cos(i),r=Math.sin(i),c=n.x+(s.x*n.scale_x*a-s.y*n.scale_y*r),d=n.y+(s.x*n.scale_x*r+s.y*n.scale_y*a);return{x:c,y:d,rotation:n.rotation+s.rotation,scale_x:n.scale_x*(s.scale_x??1)*(s.flip_x?-1:1),scale_y:n.scale_y*(s.scale_y??1)*(s.flip_y?-1:1),length:e}}globalToLocal(t,s){if(!t)return s;const o=this.getGlobalTransform(t),e=o.scale_x===0?0:1/o.scale_x,n=o.scale_y===0?0:1/o.scale_y,i=-o.rotation*Math.PI/180,a=Math.cos(i),r=Math.sin(i),c=s.x-o.x,d=s.y-o.y,p=(c*a-d*r)*e,u=(c*r+d*a)*n;return{x:p,y:u,rotation:s.rotation-o.rotation,scale_x:s.scale_x/(o.scale_x||1),scale_y:s.scale_y/(o.scale_y||1)}}solveIK(t,s,o,e){var c;const n=[];let i=t.id;for(let d=0;d<o&&i;d++){const p=(c=this.artboard)==null?void 0:c.objects.find(u=>u.id===i);if(!p)break;n.push({id:i,local:this.objectStates.get(i),global:this.getGlobalTransform(i)}),i=p.parentId}if(n.length<2)return;const a=n.reverse(),r=5;for(let d=0;d<r;d++){const p=this.getGlobalTransform(t.id);for(let u=a.length-2;u>=0;u--){const g=a[u],h=this.getGlobalTransform(g.id),f=p.x-h.x,v=p.y-h.y,m=s.x-h.x,l=s.y-h.y,b=Math.sqrt(f*f+v*v),S=Math.sqrt(m*m+l*l);if(b>.001&&S>.001){const w=Math.atan2(v,f);let M=(Math.atan2(l,m)-w)*180/Math.PI;M*=e;const I=this.objectStates.get(g.id);I&&(I.rotation+=M)}}}}computeSpring(t,s,o,e,n,i,a,r){const c=a.stiffness??100,d=a.damping??10,p=a.mass??1,u=-c*(t-n),g=-c*(s-i),h=-d*o,f=-d*e,v=(u+h)/p,m=(g+f)/p,l=o+v*r,b=e+m*r,S=t+l*r,w=s+b*r;return{x:S,y:w,vx:l,vy:b}}handlePointerInput(t,s,o,e,n){if(!this.artboard)return;const i=this.calculateTransform(e,n,this.artboard.width,this.artboard.height,this.layout.fit,this.layout.alignment),a=(s-i.tx)/i.scaleX,r=(o-i.ty)/i.scaleY;this._prevPointerPos=this._lastPointerPos,this._lastPointerPos={x:a,y:r},this._prevPointerPos&&(this._mouseDelta.dx+=a-this._prevPointerPos.x,this._mouseDelta.dy+=r-this._prevPointerPos.y),this.updateInput("mouseX",a),this.updateInput("mouseY",r),this.handlePointerEvent(t,a,r)}handleScroll(t,s){const o=this.scrollOffset.x,e=this.scrollOffset.y;this.scrollOffset={x:t,y:s},this._totalScroll.x+=t-o,this._totalScroll.y+=s-e,this.updateInput("scrollX",this._totalScroll.x),this.updateInput("scrollY",this._totalScroll.y)}isListViewObject(t){var n;if(!t)return!1;const s=(t.type||"").toLowerCase(),o=(t.variant||"").toLowerCase(),e=(((n=t.geometry)==null?void 0:n.type)||"").toLowerCase();return s==="listview"||o==="listview"||e==="listview"}getResolvedListViewItems(t,s){const o=this.objectStates.get(t==null?void 0:t.id),e=s||(o==null?void 0:o.options)||(t==null?void 0:t.options)||{};let n=Array.isArray(e.items)?e.items:typeof e.items=="string"?e.items.split(",").map(i=>i.trim()):[];if(e.isDataVarEnabled&&e.dataInputId){let i=this.inputs.get(e.dataInputId);if(i===void 0){const a=this.inputNameMap.get(e.dataInputId);a&&a.length>0&&(i=this.inputs.get(a[0]))}if(i&&Array.isArray(i))n=i.map(a=>typeof a=="string"?a:String(a));else if(typeof i=="string")try{n=JSON.parse(i).map(a=>String(a))}catch{}}return n}handleWheel(t,s,o,e,n,i){var a,r,c,d;if(o!==void 0&&e!==void 0&&n&&i&&this.artboard){const p=this.calculateTransform(n,i,this.artboard.width,this.artboard.height,this.layout.fit,this.layout.alignment),u=(o-p.tx)/p.scaleX,g=(e-p.ty)/p.scaleY;this._lastPointerPos={x:u,y:g}}if(this._lastPointerPos&&this.artboard){let p=!1;for(let u=this.artboard.objects.length-1;u>=0;u--){const g=this.artboard.objects[u];if(this.isListViewObject(g)){const h=this.objectStates.get(g.id),f=(h==null?void 0:h.options)||g.options||{},v=(h==null?void 0:h.width)??(((a=g.geometry)==null?void 0:a.width)||200),m=(h==null?void 0:h.height)??(((r=g.geometry)==null?void 0:r.height)||300),l=this.getWorldTransform(g.id),b=this._lastPointerPos.x-l.x,S=this._lastPointerPos.y-l.y,w=-l.rotation*(Math.PI/180),C=Math.cos(w),M=Math.sin(w),I=b*C-S*M,_=b*M+S*C,E=l.scaleX||1,P=l.scaleY||1,L=v*Math.abs(E),k=m*Math.abs(P);if(Math.abs(I)<=L/2&&Math.abs(_)<=k/2){const A=f.orientation||"vertical";let T=f.scrollOffset||0;if(A==="vertical"?T-=s:T-=Math.abs(t)>Math.abs(s)?t:s,(f.listLayout||"linear")==="circular")f.scrollOffset=T,h&&h.options&&(h.options.scrollOffset=T),g.options&&(g.options.scrollOffset=T);else{const F=this.getResolvedListViewItems(g,f),O=f.itemGap??10,W=f.itemHeight??50,V=f.itemWidth??200,U=typeof f.padding=="number"?f.padding:A==="vertical"?((c=f.padding)==null?void 0:c[0])||0:((d=f.padding)==null?void 0:d[3])||0,X=(F.length||0)*(A==="vertical"?W:V)+Math.max(0,(F.length||0)-1)*O+U*2,J=Math.max(0,X-(A==="vertical"?m:v));T>0&&(T=0),T<-J&&(T=-J),f.scrollOffset=T,h&&h.options&&(h.options.scrollOffset=T),g.options&&(g.options.scrollOffset=T)}p=!0;break}}}if(p)return}this._totalScroll.x+=t,this._totalScroll.y+=s,this.scrollOffset={x:this._totalScroll.x,y:this._totalScroll.y},this.updateInput("scrollX",this._totalScroll.x),this.updateInput("scrollY",this._totalScroll.y)}handlePointerEvent(t,s,o){var r,c,d,p,u,g,h,f,v,m;if(!this.artboard)return;t==="down"?(this.isMouseDown=!0,this.updateInput("isMouseDown",!0)):(t==="up"||t==="blur")&&(this.isMouseDown=!1,this.updateInput("isMouseDown",!1));let e=null;const n=(l,b)=>{var _;let S=b;b==="click"?S="onClick":b==="down"?S="onPointerDown":b==="up"?S="onPointerUp":b==="blur"&&(S="onPointerLeave");const w=new Set([S]);b==="move"&&(w.add("onPointerEnter").add("hover").add("onPointerLeave").add("blur"),w.add("Drag").add("drag").add("ondrag")),S==="onClick"&&w.add("click"),S==="onPointerDown"&&w.add("pointerDown"),S==="onPointerUp"&&w.add("pointerUp");const C=["button","toggle","toggle_button","dropdown","listview","inputbox","slider","checkbox","radiogroup","joystick"];if(this.isListViewObject(l)||l.type==="Component"&&l.variant&&C.includes(String(l.variant).toLowerCase())||l.type==="Joystick"||C.includes((_=l.type)==null?void 0:_.toLowerCase()))return!0;const M=l.interactions||[];return!!(M.some(E=>w.has(E.event))||M.some(E=>Array.isArray(E.triggers)&&E.triggers.some(P=>w.has(String(P))))||(l.triggers||[]).some(E=>w.has(E.eventType)))};let i=null;for(let l=this.artboard.objects.length-1;l>=0;l--){const b=this.artboard.objects[l],S=this.objectStates.get(b.id);if(S&&S.visible!==!1&&S.opacity>0&&this.hitTest(b,s,o)&&(i||(i=b),n(b,t))){e=b;break}}!e&&i&&(e=i),this.pointerHistory.push({x:s,y:o,time:Date.now()}),this.pointerHistory.length>this.MAX_HISTORY&&this.pointerHistory.shift();const a=(e==null?void 0:e.id)||null;if(t==="move"){if(this.draggingSliderId){const l=this.artboard.objects.find(b=>b.id===this.draggingSliderId);l&&this.updateSliderValueFromPointer(l,s,o);return}if(this.draggingJoystickId){const l=this.artboard.objects.find(b=>b.id===this.draggingJoystickId);l&&this.updateJoystickValueFromPointer(l,s,o);return}if(this.draggingListViewId){const l=this.artboard.objects.find(b=>b.id===this.draggingListViewId);l&&this.updateListViewScrollFromPointer(l);return}if(e&&this.isListViewObject(e)&&this.updateListViewHoverFromPointer(e,s,o),this.isMouseDown&&this.dragStartPointer&&this.draggingBehaviors.size>0){const l=s-this.dragStartPointer.x,b=o-this.dragStartPointer.y;this.draggingBehaviors.forEach(S=>{const w=this.dragStartPositions.get(S);if(!w)return;const C=this.artboard.objects.find(I=>I.id===S);if(!C||C.parentId)return;const M=this.objectStates.get(S);M&&(M.x=w.x+l,M.y=w.y+b)})}if(this.isMouseDown){const l=this.activeObjectId&&this.artboard.objects.some(S=>S.id===this.activeObjectId)?this.activeObjectId:a,b=l?this.artboard.objects.find(S=>S.id===l):null;b&&n(b,"move")&&this.fireEventForObject(b.id,"Drag")}!this.isMouseDown&&a!==this.lastHoveredObjectId&&(this.log(`[Engine] HOVER CHANGE: ${this.lastHoveredObjectId} -> ${a}`),this.lastHoveredObjectId&&this.fireEventForObject(this.lastHoveredObjectId,"onPointerLeave"),a&&this.fireEventForObject(a,"onPointerEnter"),this.lastHoveredObjectId=a);return}if((t==="up"||t==="blur")&&(this.draggingSliderId=null,this.draggingJoystickId=null,this.draggingListViewId=null,this.draggingListViewIsScrollbar=!1,this.draggingBehaviors.clear(),this.dragStartPointer=null,this.dragStartPositions.clear(),this.pointerDownTimes.delete(a),this.activeObjectId=null),t==="down"&&(this.pointerDownTimes.set(a,this.currentTime),this.activeObjectId=a,e&&((r=e.behaviors)!=null&&r.some(l=>l.type===tt.Draggable)||this.hasDragInteraction(e)))){this.draggingBehaviors.add(a);const l=this.objectStates.get(a);l&&(this.dragStartPointer={x:s,y:o},this.dragStartPositions.set(a,{x:l.x??0,y:l.y??0}))}if(t==="move"?(a&&!this.activeHoverIds.has(a)&&this.activeHoverIds.add(a),this.activeHoverIds.forEach(l=>{l!==a&&this.activeHoverIds.delete(l)})):t==="blur"&&this.activeHoverIds.clear(),this.activeDropdownId&&t==="down"){const l=this.artboard.objects.find(b=>b.id===this.activeDropdownId);if(l&&(l.type==="Dropdown"||l.variant==="dropdown")){const b=this.objectStates.get(l.id),S=(b==null?void 0:b.options)||l.options||{},w=l.geometry||{},C=w.width??l.width??200,M=w.height??l.height??40,I=S.optionsList||[],_=S.itemHeight||32,E=S.listPadding??4,P=I.length*_+E*2,L=this.getWorldTransform(l.id),k=C*Math.abs(L.scaleX),A=M*Math.abs(L.scaleY),T=L.y+A/2+4,R=Math.abs(s-L.x)<=k/2,F=o>=T&&o<=T+P*Math.abs(L.scaleY);if(R&&F){const O=Math.abs(L.scaleY),W=o-(T+E*O),V=Math.floor(W/(_*O));if(V>=0&&V<I.length){const U=I[V];S.selectedOption=U,S.isOpen=!1,this.activeDropdownId=null,l.inputId&&this.setInternalInput(l.inputId,U),this.onComponentChange&&this.onComponentChange({objectId:l.id,componentName:l.name,variant:"dropdown",property:"selectedOption",value:U})}return}else a!==this.activeDropdownId&&(S.isOpen=!1,this.activeDropdownId=null)}}if(e){let l=e,b=e;for(;b&&b.parentId;){const C=this.artboard.objects.find(M=>M.id===b.parentId);if(C&&C.type==="Component"){l=C;break}b=C}let S=t;if(t==="click"?S="onClick":t==="down"?S="onPointerDown":t==="up"?S="onPointerUp":t==="blur"&&(S="onPointerLeave"),this.fireEventForObject(e.id,S),l!==e&&this.fireEventForObject(l.id,S),l.type==="Component"&&l.variant==="toggle_button"&&t==="down"){const C=this.objectStates.get(l.id),M=(C==null?void 0:C.options)||l.options||{};M.checked=!M.checked,l.inputId&&this.setInternalInput(l.inputId,M.checked),this.onComponentChange&&this.onComponentChange({objectId:l.id,componentName:l.name,variant:"toggle_button",property:"checked",value:M.checked}),this.fireEventForObject(l.id,"Toggle"),this.fireEventForObject(l.id,M.checked?"Toggle True":"Toggle False")}if(l.type==="Component"&&l.variant==="toggle"&&t==="down"){const C=this.objectStates.get(l.id),M=(C==null?void 0:C.options)||l.options||{};M.checked=!M.checked,l.inputId&&this.setInternalInput(l.inputId,M.checked),this.onComponentChange&&this.onComponentChange({objectId:l.id,componentName:l.name,variant:"toggle",property:"checked",value:M.checked}),this.onToggle&&this.onToggle(l.name,M.checked),this.fireEventForObject(l.id,"Toggle"),this.fireEventForObject(l.id,M.checked?"Toggle True":"Toggle False")}if(l.type==="Component"&&l.variant==="dropdown"&&t==="down"){const C=this.objectStates.get(l.id),M=(C==null?void 0:C.options)||l.options||{},I=!M.isOpen;if(I&&this.activeDropdownId&&this.activeDropdownId!==l.id){const _=this.artboard.objects.find(E=>E.id===this.activeDropdownId);_&&_.options&&(_.options.isOpen=!1)}M.isOpen=I,this.activeDropdownId=I?l.id:null}if((l.type==="Button"||l.type==="Component"&&(l.variant==="button"||(l.name||"").toLowerCase().includes("button")||(l.name||"").toLowerCase().includes("cta")))&&t==="down"&&(this.onButtonClick&&this.onButtonClick(l.name,l.id),this.onComponentChange&&this.onComponentChange({objectId:l.id,componentName:l.name,variant:"button",property:"click",value:!0})),this.isListViewObject(l)&&t==="down"){this.draggingListViewId=l.id;const C=this.objectStates.get(l.id),M=(C==null?void 0:C.options)||l.options||{},I=(C==null?void 0:C.width)??(((c=l.geometry)==null?void 0:c.width)||200),_=(C==null?void 0:C.height)??(((d=l.geometry)==null?void 0:d.height)||300),E=M.orientation||"vertical",P=M.scrollbarWidth||4,L=M.showScrollbar!==!1;let k=!1;if(L&&M.listLayout!=="circular"){const T=this.getWorldTransform(l.id),R=-T.rotation*(Math.PI/180),F=Math.cos(R),O=Math.sin(R),W=s-T.x,V=o-T.y,U=W*F-V*O,Y=W*O+V*F,X=T.scaleX||1,ot=T.scaleY||1,J=U/X,at=Y/ot,j=12;E==="vertical"?J>=I/2-P-j&&J<=I/2+j&&(k=!0):at>=_/2-P-j&&at<=_/2+j&&(k=!0)}this.draggingListViewIsScrollbar=k;const A=this.getListViewItemIndexAtPointer(l,s,o);if(A!==null){const T=l.options||{};T.activeItemIndex=A;const R=this.objectStates.get(l.id);R&&R.options&&(R.options.activeItemIndex=A);const O=this.getResolvedListViewItems(l,T)[A],W=typeof O=="string"?O:(O==null?void 0:O.label)||(O==null?void 0:O.value)||A;R&&R.options&&(R.options.selectedValue=W),l.inputId&&this.setInternalInput(l.inputId,W),this.onComponentChange&&(this.onComponentChange({objectId:l.id,componentName:l.name,variant:"listview",property:"activeItemIndex",value:A}),this.onComponentChange({objectId:l.id,componentName:l.name,variant:"listview",property:"selected",value:W}))}}if(l.type==="Component"&&l.variant==="slider"&&t==="down"&&(this.draggingSliderId=l.id,this.updateSliderValueFromPointer(l,s,o)),l.type==="Joystick"||l.type==="Component"&&l.variant==="joystick"){if(t==="down")this.draggingJoystickId=l.id,this.updateJoystickValueFromPointer(l,s,o);else if(t==="up"||t==="blur"){const C=this.objectStates.get(l.id);C&&l.isSpringReturn!==!1&&(C.handleX=0,C.handleY=0),l.isSpringReturn!==!1&&(l.handleX=0,l.handleY=0)}}if(l.type==="Component"&&l.variant==="checkbox"&&t==="down"){const C=this.objectStates.get(l.id),M=(C==null?void 0:C.options)||l.options||{};M.checked=!M.checked,l.inputId&&this.setInternalInput(l.inputId,M.checked),this.onComponentChange&&this.onComponentChange({objectId:l.id,componentName:l.name,variant:"checkbox",property:"checked",value:M.checked}),this.fireEventForObject(l.id,"Click"),this.fireEventForObject(l.id,M.checked?"Checked":"Unchecked")}if(l.type==="Component"&&l.variant==="radiogroup"&&t==="down"){const C=this.objectStates.get(l.id),M=(C==null?void 0:C.options)||l.options||{},I=M.optionsList||[],_=this.getRadioGroupItemIndexAtPointer(l,s,o);if(_!==null&&_>=0&&_<I.length){const E=I[_];M.selectedValue=E,l.inputId&&this.setInternalInput(l.inputId,E),this.onComponentChange&&this.onComponentChange({objectId:l.id,componentName:l.name,variant:"radiogroup",property:"selectedValue",value:E}),this.fireEventForObject(l.id,"Click"),this.fireEventForObject(l.id,`Selected: ${E}`)}}if(l.type==="LineGraph"&&(t==="down"||t==="click")){const C=l.geometry,M=(C==null?void 0:C.datasets)||[],I=this.objectStates.get(l.id),_=(I==null?void 0:I.width)||(C==null?void 0:C.width)||200,E=(I==null?void 0:I.height)||(C==null?void 0:C.height)||150,P=this.getWorldTransform(l.id),L=30,k=20,A=_-L,T=E-k;let R=1;M.forEach(W=>{const V=Math.max(...W.data||[0]);V>R&&(R=V)});let F=1/0,O=null;M.forEach((W,V)=>{const U=W.data||[],Y=A/Math.max(U.length-1,1);U.forEach((X,ot)=>{const J=P.x-_/2+L+ot*Y,at=P.y+E/2-k-X/R*T,j=Math.sqrt((s-J)**2+(o-at)**2);j<F&&(F=j,O={dIdx:V,pIdx:ot,val:X,label:W.label||`Dataset ${V+1}`})})}),O&&F<20&&this.onGraphPointClick&&this.onGraphPointClick({objectId:l.id,componentName:l.name,datasetIndex:O.dIdx,pointIndex:O.pIdx,value:O.val,label:O.label}),this.onComponentChange&&this.onComponentChange({objectId:l.id,componentName:l.name,variant:"linegraph",property:"click",value:(O==null?void 0:O.val)??null})}if((l==null?void 0:l.type)==="InputBox"||(l==null?void 0:l.type)==="Component"&&(l.variant==="inputbox"||l.name==="InputBox")){if(t==="down"||t==="click"){const C=this.focusedId;if(this.focusedId=l.id,this.log(`[Engine] Focus set to: ${l.id}`),C!==this.focusedId){if(C){const ot=(p=this.artboard)==null?void 0:p.objects.find(J=>J.id===C);ot&&this.onInputBlur&&this.onInputBlur(ot.name)}this.onInputFocus&&this.onInputFocus(l.name)}const M=this.objectStates.get(l.id),I=(M==null?void 0:M.options)||l.options||{},_=l.geometry||{},E=(M==null?void 0:M.width)||(_==null?void 0:_.width)||250,P=(M==null?void 0:M.height)||(_==null?void 0:_.height)||45,L=this.getWorldTransform(l.id),k=-L.rotation*(Math.PI/180),A=Math.cos(k),T=Math.sin(k),R=s-L.x,F=o-L.y,O=(R*A-F*T)/(L.scaleX||1),W=(R*T+F*A)/(L.scaleY||1);if(I.inputType==="number"&&((u=I.number)==null?void 0:u.showSteppers)!==!1){const J=E/2-4,at=J-24;if(O>=at&&O<=J&&Math.abs(W)<=P/2){const j=Number(((g=I.number)==null?void 0:g.step)??1),it=((h=I.number)==null?void 0:h.min)!==void 0?Number(I.number.min):-1/0,x=((f=I.number)==null?void 0:f.max)!==void 0?Number(I.number.max):1/0;let D=parseFloat(I.text??I.value??"0");isNaN(D)&&(D=0),W<0?D=Math.min(x,D+j):D=Math.max(it,D-j);const N=String(D);I.text=N,I.value=N,l.options&&(l.options.text=N,l.options.value=N),M&&M.options&&(M.options.text=N,M.options.value=N),this.onComponentChange&&this.onComponentChange({objectId:l.id,componentName:l.name,variant:"inputbox",property:"value",value:N}),this.onInputChange&&this.onInputChange(l.name,N),this.onInputUpdate&&this.onInputUpdate(l.id,N);return}}const V=I.rightIcon||{},U=I.inputType==="password",Y=V.mode==="clear"||I.inputType==="search"&&(I.text||I.value),X=V.mode==="password-toggle"||U&&V.visible!==!1;if(V.visible||X||Y){const ot=V.offset??16,J=V.size??16,at=E/2-ot;if(Math.abs(O-at)<=J&&Math.abs(W)<=P/2){if(X){I.passwordVisible=!I.passwordVisible,M&&M.options&&(M.options.passwordVisible=I.passwordVisible),l.options&&(l.options.passwordVisible=I.passwordVisible);return}else if(Y){I.text="",I.value="",M&&M.options&&(M.options.text="",M.options.value=""),l.options&&(l.options.text="",l.options.value=""),this.onInputChange&&this.onInputChange(l.name,""),this.onInputUpdate&&this.onInputUpdate(l.id,"");return}}}}}else if((t==="click"||t==="down")&&this.focusedId){const C=this.focusedId;this.focusedId=null;const M=(v=this.artboard)==null?void 0:v.objects.find(I=>I.id===C);M&&this.onInputBlur&&this.onInputBlur(M.name)}}else if(t==="click"||t==="down"){const l=this.focusedId;if(this.focusedId=null,l){const b=(m=this.artboard)==null?void 0:m.objects.find(S=>S.id===l);b&&this.onInputBlur&&this.onInputBlur(b.name)}}}handleKeyDown(t){var c,d,p,u;if(!this.artboard||(this.activeKeys.add(t.key.toLowerCase()),this.activeKeys.add(t.code),!this.focusedId))return;const s=this.artboard.objects.find(g=>g.id===this.focusedId),o=(s==null?void 0:s.type)==="InputBox"||(s==null?void 0:s.type)==="Component"&&(s.variant==="inputbox"||s.name==="InputBox");if(!s||!o)return;const e=this.objectStates.get(s.id),n=(e==null?void 0:e.options)||s.options||{};let i=String(n.text??n.value??"");const a=n.inputType==="textarea"||n.multiline===!0;if(t.key==="Backspace")i=i.slice(0,-1),t.preventDefault();else if(t.key==="Escape"){this.focusedId=null,this.onInputBlur&&this.onInputBlur(s.name);return}else if(t.key==="Enter")if(a)i+=`
7
- `,t.preventDefault();else{this.focusedId=null,this.onInputBlur&&this.onInputBlur(s.name);return}else if(t.key==="ArrowUp"&&n.inputType==="number"){const g=Number(((c=n.number)==null?void 0:c.step)??1),h=((d=n.number)==null?void 0:d.max)!==void 0?Number(n.number.max):1/0;let f=parseFloat(i)||0;f=Math.min(h,f+g),i=String(f),t.preventDefault()}else if(t.key==="ArrowDown"&&n.inputType==="number"){const g=Number(((p=n.number)==null?void 0:p.step)??1),h=((u=n.number)==null?void 0:u.min)!==void 0?Number(n.number.min):-1/0;let f=parseFloat(i)||0;f=Math.max(h,f-g),i=String(f),t.preventDefault()}else if(t.key.length===1&&!t.ctrlKey&&!t.metaKey&&!t.altKey){if(n.maxLength>0&&i.length>=n.maxLength||n.inputType==="number"&&(!/[\d.\-]/.test(t.key)||t.key==="-"&&i.includes("-")||t.key==="."&&i.includes(".")))return;i+=t.key,t.preventDefault()}else return;n.text=i,n.value=i,s.options&&(s.options.text=i,s.options.value=i),e&&e.options&&(e.options.text=i,e.options.value=i);const r=s.geometry;r!=null&&r.textInputId&&this.updateInput(r.textInputId,i),this.onComponentChange&&(this.onComponentChange({objectId:s.id,componentName:s.name,variant:"inputbox",property:"text",value:i}),this.onComponentChange({objectId:s.id,componentName:s.name,variant:"inputbox",property:"value",value:i})),this.onInputChange&&this.onInputChange(s.name,i),this.onInputUpdate&&this.onInputUpdate(this.focusedId,i)}handleKeyUp(t){this.artboard&&(this.activeKeys.delete(t.key.toLowerCase()),this.activeKeys.delete(t.code))}hasDragInteraction(t){return t?(t.interactions||[]).some(o=>{const e=o.triggers||[o.event||o.trigger];return Array.isArray(e)&&e.some(n=>String(n).toLowerCase()==="drag")}):!1}fireEventForObject(t,s){var d,p,u,g,h;const o=(d=this.artboard)==null?void 0:d.objects.find(f=>f.id===t);if(!o)return;const e=new Set([s,s.toLowerCase()]),n=s.toLowerCase();n==="onclick"||n==="click"||n==="onpointerdown"||n==="pointerdown"?this.fireAnalyticsEvent(t,"click"):(n==="onpointerenter"||n==="hover"||n==="move")&&this.fireAnalyticsEvent(t,"hover"),n==="onclick"||n==="click"?(e.add("click"),e.add("onclick")):n==="onpointerdown"||n==="pointerdown"?(e.add("pointerdown"),e.add("onpointerdown")):n==="onpointerup"||n==="pointerup"?(e.add("pointerup"),e.add("onpointerup")):n==="onpointerenter"||n==="hover"||n==="move"?(e.add("hover"),e.add("onpointerenter")):n==="onpointerleave"||n==="blur"?(e.add("onpointerleave"),e.add("blur")):n==="drag"||n==="ondrag"?(e.add("drag"),e.add("ondrag")):n==="toggle"||n==="ontoggle"?(e.add("toggle"),e.add("ontoggle")):n==="toggle true"||n==="toggle_true"||n==="toggletrue"?(e.add("toggle true"),e.add("toggle_true"),e.add("toggletrue")):(n==="toggle false"||n==="toggle_false"||n==="togglefalse")&&(e.add("toggle false"),e.add("toggle_false"),e.add("togglefalse"));const a=(o.interactions||[]).find(f=>{const v=f.triggers||[f.event||f.trigger||"click"];return((f.triggerLogic||"OR")==="AND"?v.every(b=>e.has(b.toLowerCase())):v.some(b=>e.has(b.toLowerCase())))?f.conditions&&f.conditions.length>0?this.checkConditions(f.conditions):!0:!1});if(a){if(this.log(`[Engine] Interaction matched: ${s} -> Action: ${a.action}`),a.action==="setInput"||a.action==="Set Input"){let f=a.value||a.inputValue;f==="toggle"&&(f=!this.inputs.get(a.targetInputId)),this.updateInput(a.targetInputId,f)}else if(a.action==="Toggle Boolean"){const f=this.inputs.get(a.targetInputId);this.updateInput(a.targetInputId,!f)}else if(a.action==="fireTrigger")this.updateInput(a.targetInputId,!0);else if(a.action==="setProperty"){const f=a.targetObjectId||o.id,v=a.targetProperty;v&&this.updateObjectProperty(f,v,a.value)}else if(a.action==="Navigate Artboard"||a.action==="navigate")this.onNavigation&&this.onNavigation({type:"artboard",value:a.targetArtboard||a.value});else if(a.action==="Navigate URL")this.onNavigation&&this.onNavigation({type:"url",value:a.navigateUrl});else if(a.action==="Play Animation"){const f=a.targetAnimationId,v=!a.playMode||a.playMode==="all"?void 0:a.subAnimationIds;f==="__all__"?(u=(p=this.artboard)==null?void 0:p.animations)==null||u.forEach(m=>{this.triggerGlobalAnimation(m.id,v)}):f&&this.triggerGlobalAnimation(f,v)}else if(a.action==="setState"||a.action==="Set State"){const f=a.targetObjectId||o.id,m={...this.objectStates.get(f)||{},...a.value||{}};this.objectStates.set(f,m),this.log(`[Engine] State updated for ${f}:`,m)}else if(a.action==="Stop Animation"||a.action==="Pause Animation"){const f=a.targetAnimationId;f==="__all__"?this.layerStates.forEach((v,m)=>{m.startsWith("global_")&&this.layerStates.delete(m)}):f&&this.layerStates.forEach((v,m)=>{m.startsWith(`global_${f}_`)&&this.layerStates.delete(m)})}else if(a.action==="Switch to State"&&this.activeStateMachine){const f=a.targetState,v=this.activeStateMachine.layers.find(m=>m.states.some(l=>l.id===f||l.name===f));v&&(this.log(`[Engine] Switching Layer ${v.name} to State ${f}`),this.enterStates(v.name,[f]))}this.onTrigger&&this.onTrigger(s,a.action)}const c=(o.triggers||[]).find(f=>{const v=f.eventType.toLowerCase();let m=!1;return(e.has(v)||v==="click"&&e.has("onclick")||v==="hover"&&(e.has("onpointerenter")||e.has("hover"))||v==="pointerdown"&&e.has("onpointerdown")||v==="pointerup"&&e.has("onpointerup"))&&(m=!0),m&&f.conditions&&f.conditions.length>0?this.checkConditions(f.conditions):m});if(c&&c.entryAnimationId){this.log(`[Engine] Trigger matched: ${s} (as ${c.eventType}) -> Animation ${c.entryAnimationId}`);const f=(h=(g=this.artboard)==null?void 0:g.animations)==null?void 0:h.find(v=>v.id===c.entryAnimationId);f&&(this.activeTriggers.set(o.id,{triggerId:c.id,animation:f,time:0,phase:"entry",elapsedHold:0,filterObjectId:c.targetObjectId}),this.onTrigger&&this.onTrigger(c.name,f.name))}}fireAnalyticsEvent(t,s){var r,c;const o=(r=this.artboard)==null?void 0:r.objects.find(d=>d.id===t);if(!o)return;const e=(c=o.style)==null?void 0:c.analytics;if(!e||!e.isEnabled||e.triggerType!==s)return;const n=e.eventName||`${o.name.toLowerCase().replace(/\s+/g,"_")}_interacted`,i={};e.parameters&&Array.isArray(e.parameters)&&e.parameters.forEach(d=>{if(d.type==="literal")i[d.key]=d.value;else if(d.type==="variable"){const p=this.inputs.get(d.value);i[d.key]=p!==void 0?p:""}}),this.log(`[ExodeUI Analytics] Dispatching event "${n}" via ${s} trigger:`,i);const a=e.platforms||{ga4:!0,meta:!0,mixpanel:!1};if(a.ga4){const d=window;typeof d.gtag=="function"?(d.gtag("event",n,i),this.log(`[ExodeUI Analytics] GA4: Event "${n}" sent successfully.`)):this.warn(`[ExodeUI Analytics] GA4: window.gtag is not a function. Event "${n}" skipped.`)}if(a.meta){const d=window;typeof d.fbq=="function"?(d.fbq("track",n,i),this.log(`[ExodeUI Analytics] Meta Pixel: Event "${n}" sent successfully.`)):this.warn(`[ExodeUI Analytics] Meta Pixel: window.fbq is not a function. Event "${n}" skipped.`)}if(a.mixpanel){const d=window;d.mixpanel&&typeof d.mixpanel.track=="function"?(d.mixpanel.track(n,i),this.log(`[ExodeUI Analytics] Mixpanel: Event "${n}" sent successfully.`)):this.warn(`[ExodeUI Analytics] Mixpanel: window.mixpanel.track is not a function. Event "${n}" skipped.`)}}getAnimationDuration(t){var o;if(!t)return 0;let s=t.duration||0;return s<=0&&((o=t.tracks)==null||o.forEach(e=>{var n;(n=e.keyframes)==null||n.forEach(i=>{i.time>s&&(s=i.time)})})),s>0?s:1}initGlobalAnimationTriggers(){if(!this.artboard)return;const t=this.artboard.animationFlow||[];let s=!1;t.forEach(o=>{if((o.trigger==="on_load"||o.trigger==="after_delay")&&o.targetAnimationId){s=!0;const e=o.delay||0;e<=0?this.triggerGlobalAnimation(o.targetAnimationId,o.subAnimationIds,o.loop,o.id):setTimeout(()=>this.triggerGlobalAnimation(o.targetAnimationId,o.subAnimationIds,o.loop,o.id),e)}}),!s&&this.artboard.startupAnimationId&&this.triggerGlobalAnimation(this.artboard.startupAnimationId,this.artboard.startupSubAnimationIds)}triggerGlobalAnimation(t,s,o=!1,e){var r;if(!this.artboard)return;const n=this.artboard.animations.find(c=>c.id===t);if(!n)return;let i=this.getAnimationDuration(n);const a=`global_${t}_${Math.random().toString(36).substr(2,5)}`;this.layerStates.set(a,{currentStateIds:[t],animations:[{animation:n,state:{loop:o},filterObjectIds:s}],time:0,duration:i,ruleId:e}),console.log(`[Engine] Triggered global animation: ${n.name} (AnimID: ${t}, RuleID: ${e}, Loop: ${o}, StoredDuration: ${i}, anim.duration: ${n.duration}, Tracks: ${((r=n.tracks)==null?void 0:r.length)||0})`),this.debugLog(`[Engine] Triggered global animation: ${n.name} (Loop: ${o}, Sub-Anims: ${(s==null?void 0:s.length)||"All"})`)}handleAnimationFinished(t,s){if(!this.artboard)return;console.log(`[Engine] Animation finished! AnimID: ${t}, RuleID: ${s}`);const o=this.artboard.animationFlow||[];o.forEach((e,n)=>{if(e.trigger==="after_anim"&&e.targetAnimationId){let i=e.afterAnim;!i&&n>0&&(i=o[n-1].id);const a=i===t||s&&i===s;if(console.log(`[Engine] Checking rule ${e.id} (Trigger: ${e.trigger}). ExpectedParent: ${i}. isMatch? ${a}`),a){const r=e.delay||0;console.log(`[Engine] Match found! Triggering target animation: ${e.targetAnimationId} after delay: ${r}`),r<=0?this.triggerGlobalAnimation(e.targetAnimationId,e.subAnimationIds,e.loop,e.id):setTimeout(()=>this.triggerGlobalAnimation(e.targetAnimationId,e.subAnimationIds,e.loop,e.id),r)}}})}getWorldTransform(t){var u;const s=this.objectStates.get(t);if(!s)return{x:0,y:0,scaleX:1,scaleY:1,rotation:0};const o=(u=this.artboard)==null?void 0:u.objects.find(g=>g.id===t);if(!o||!o.parentId)return{x:s.x,y:s.y,scaleX:s.scale_x??1,scaleY:s.scale_y??1,rotation:s.rotation??0};const e=this.getWorldTransform(o.parentId),n=e.rotation*(Math.PI/180),i=Math.cos(n),a=Math.sin(n),r=s.x*e.scaleX,c=s.y*e.scaleY,d=e.x+(r*i-c*a),p=e.y+(r*a+c*i);return{x:d,y:p,scaleX:(s.scale_x??1)*e.scaleX,scaleY:(s.scale_y??1)*e.scaleY,rotation:e.rotation+(s.rotation??0)}}hitTest(t,s,o){var b,S;if(!this.objectStates.get(t.id))return!1;const n=((b=t.geometry)==null?void 0:b.width)??t.width??100,i=((S=t.geometry)==null?void 0:S.height)??t.height??100,a=this.getWorldTransform(t.id),r=s-a.x,c=o-a.y,d=-a.rotation*(Math.PI/180),p=Math.cos(d),u=Math.sin(d),g=r*p-c*u,h=r*u+c*p,f=a.scaleX,v=a.scaleY,m=n*Math.abs(f),l=i*Math.abs(v);return Math.abs(g)<=m/2&&Math.abs(h)<=l/2}updateSliderValueFromPointer(t,s,o){var M;const e=this.objectStates.get(t.id);if(!e)return;const n=t.options||{},i=((M=t.geometry)==null?void 0:M.width)??t.width??200,a=this.getWorldTransform(t.id),r=s-a.x,c=o-a.y,d=-a.rotation*(Math.PI/180),p=Math.cos(d),u=Math.sin(d),g=r*p-c*u,h=n.thumbWidth??16,f=i-h;let m=(g+f/2)/f;m=Math.max(0,Math.min(1,m));const l=n.min??0,b=n.max??100,S=n.step||1;let w=l+m*(b-l);S>0&&(w=Math.round(w/S)*S),w=Math.max(l,Math.min(b,w));const C=e.options||{};C.value!==w&&(e.options={...C,value:w},t.inputId&&this.setInternalInput(t.inputId,w),this.onComponentChange&&this.onComponentChange({objectId:t.id,componentName:t.name,variant:"slider",property:"value",value:w}))}updateJoystickValueFromPointer(t,s,o){var M,I;const e=this.objectStates.get(t.id);if(!e)return;const n=(e==null?void 0:e.width)!==void 0?e.width:((M=t.geometry)==null?void 0:M.width)??t.width??100,i=(e==null?void 0:e.height)!==void 0?e.height:((I=t.geometry)==null?void 0:I.height)??t.height??100,a=this.getWorldTransform(t.id),r=s-a.x,c=o-a.y,d=-a.rotation*(Math.PI/180),p=Math.cos(d),u=Math.sin(d);let g=(r*p-c*u)/Math.max(.001,Math.abs(a.scaleX||1)),h=(r*u+c*p)/Math.max(.001,Math.abs(a.scaleY||1));t.handleOrigin==="top-left"?(g-=n/2,h-=i/2):t.handleOrigin==="bottom-right"&&(g+=n/2,h+=i/2);const f=Math.min(n,i)*.45,v=Math.min(n,i)*.15,m=f-v;let l=g/m,b=h/m;const S=Math.sqrt(l*l+b*b);t.boundsShape==="square"?(l=Math.max(-1,Math.min(1,l)),b=Math.max(-1,Math.min(1,b))):S>1&&(l/=S,b/=S),t.deadzone!==void 0&&S<t.deadzone?(l=0,b=0):(t.stepX!==void 0&&t.stepX>0&&(l=Math.round(l/t.stepX)*t.stepX),t.stepY!==void 0&&t.stepY>0&&(b=Math.round(b/t.stepY)*t.stepY)),t.joystickType==="1D_X"?b=0:t.joystickType==="1D_Y"&&(l=0);const w=e.handleX,C=e.handleY;(w!==l||C!==b)&&(e.handleX=l,e.handleY=b,t.handleX=l,t.handleY=b)}processJoysticks(t){this.artboard&&(this.artboard.objects.forEach(s=>{var c,d,p,u;if(s.type!=="Joystick"&&!(s.type==="Component"&&s.variant==="joystick"))return;const o=s,e=this.objectStates.get(o.id);if(!e)return;let n=e.handleX??o.handleX??0,i=e.handleY??o.handleY??0;const r=(o.globalInput??!1)||this.lastHoveredObjectId===o.id;if(r&&((c=o.inputBinding)==null?void 0:c.type)==="keyboard"&&o.inputBinding.keyboardConfig){const g=o.inputBinding.keyboardConfig;let h=n,f=i;const m=(g.speed||5)*t;let l=!1;this.activeKeys.has(g.upKey.toLowerCase())&&(f-=m,l=!0),this.activeKeys.has(g.downKey.toLowerCase())&&(f+=m,l=!0),this.activeKeys.has(g.leftKey.toLowerCase())&&(h-=m,l=!0),this.activeKeys.has(g.rightKey.toLowerCase())&&(h+=m,l=!0),o.joystickType==="1D_X"&&(f=0),o.joystickType==="1D_Y"&&(h=0);const b=Math.sqrt(h*h+f*f);b>1&&(h/=b,f/=b),!l&&o.isSpringReturn!==!1&&(h+=(0-h)*(10*t),f+=(0-f)*(10*t),Math.abs(h)<.01&&(h=0),Math.abs(f)<.01&&(f=0)),n=h,i=f}else if(r&&((d=o.inputBinding)==null?void 0:d.type)==="mouse"&&o.inputBinding.mouseConfig){const g=o.inputBinding.mouseConfig;let h=e._mouseTargetX??n,f=e._mouseTargetY??i;const v=g.sensitivity||.01;if(g.mode==="absolute"){const b=((p=this.artboard)==null?void 0:p.width)||window.innerWidth,S=((u=this.artboard)==null?void 0:u.height)||window.innerHeight,w=this.inputs.get("mouseX")||0,C=this.inputs.get("mouseY")||0;g.axisX&&(h=w/b*2-1),g.axisY&&(f=C/S*2-1)}else g.axisX&&(h+=this._mouseDelta.dx*v),g.axisY&&(f+=this._mouseDelta.dy*v);o.joystickType==="1D_X"&&(f=0),o.joystickType==="1D_Y"&&(h=0);const m=Math.sqrt(h*h+f*f);m>1&&(h/=m,f/=m),o.isSpringReturn!==!1&&(h+=(0-h)*(5*t),f+=(0-f)*(5*t),Math.abs(h)<.01&&(h=0),Math.abs(f)<.01&&(f=0)),e._mouseTargetX=h,e._mouseTargetY=f;const l=15*t;n+=(h-n)*Math.min(l,1),i+=(f-i)*Math.min(l,1)}if(e.handleX=n,e.handleY=i,o.handleX=n,o.handleY=i,o.bindings&&o.bindings.length>0){const g=Math.sqrt(n*n+i*i);let h=Math.atan2(i,n)*(180/Math.PI);h<0&&(h+=360),o.bindings.forEach(f=>{var l,b,S,w,C,M,I,_;let v=0;f.sourceAxis==="x"?v=o.invertX?-n:n:f.sourceAxis==="y"?v=o.invertY?-i:i:f.sourceAxis==="distance"?v=g:f.sourceAxis==="angle"&&(v=h);const m=(l=this.artboard)==null?void 0:l.objects.find(E=>E.id===f.targetObjectId);if(m){if(f.actionType==="bind"&&f.targetProperty&&f.isContinuous!==!1){const E=f.sourceMin??-1,P=f.sourceMax??1,L=f.targetMin??0,k=f.targetMax??100;let A=!!f.isContinuous,T=0,R=0;if(A){if((f.sourceAxis==="x"||f.sourceAxis==="y")&&L>=0){const O=Math.max(Math.abs(E),Math.abs(P))||1;R=v/O*k}else{let O=(v-E)/(P-E);O=Math.max(0,Math.min(1,O)),R=L+O*(k-L)}Math.abs(v)<.05&&(R=0)}else{const O=(v-E)/(P-E),W=Math.max(0,Math.min(1,O));T=L+W*(k-L),f.step&&f.step>0&&(T=Math.round(T/f.step)*f.step)}const F=this.objectStates.get(m.id);if(F){const O=f.isRelative!==!1,W=O?((b=m.transform)==null?void 0:b.x)??0:0,V=O?((S=m.transform)==null?void 0:S.y)??0:0,U=O?((w=m.transform)==null?void 0:w.rotation)??0:0,Y=O?((C=m.transform)==null?void 0:C.scale_x)??1:0,X=O?((M=m.transform)==null?void 0:M.scale_y)??1:0,ot=O?((I=m.style)==null?void 0:I.opacity)??100:0,J=Math.min(t*60,3),at=(j,it)=>{let x=T;if(A){const D=`_internal_${j}_${f.id}`;let N=F[D];N===void 0&&(N=F[j]??it),x=N+R*J,F[D]=x,f.step&&f.step>0&&(x=Math.round(x/f.step)*f.step)}else{x=it+T;const D=`_internal_smooth_${j}_${f.id}`;let N=F[D];if(N===void 0)N=x;else{const ct=Math.min(15*t,1);N+=(x-N)*ct}F[D]=N,x=N}F[j]=x};f.targetProperty==="x"||f.targetProperty==="transform.x"?at("x",W):f.targetProperty==="y"||f.targetProperty==="transform.y"?at("y",V):f.targetProperty==="rotation"||f.targetProperty==="r"||f.targetProperty==="transform.rotation"?at("rotation",U):f.targetProperty==="scaleX"||f.targetProperty==="transform.scale_x"?at("scale_x",Y):f.targetProperty==="scaleY"||f.targetProperty==="transform.scale_y"?at("scale_y",X):(f.targetProperty==="opacity"||f.targetProperty==="transform.opacity")&&at("opacity",ot)}(_=m.physics)!=null&&_.enabled&&this.physicsEngine&&(f.targetProperty==="x"||f.targetProperty==="transform.x"||f.targetProperty==="y"||f.targetProperty==="transform.y")&&(f.targetProperty==="x"||f.targetProperty==="transform.x"?this.physicsEngine.applyForce(m.id,(T-((F==null?void 0:F.x)||0))*10,0):(f.targetProperty==="y"||f.targetProperty==="transform.y")&&this.physicsEngine.applyForce(m.id,0,(T-((F==null?void 0:F.y)||0))*10))}else if(f.actionType==="playAnimation"||f.actionType==="stopAnimation"||f.actionType==="pauseAnimation"){let E=!1;const P=f.threshold??0;f.condition==="always"?E=!0:f.condition===">"?E=v>P:f.condition==="<"?E=v<P:f.condition==="=="&&(E=Math.abs(v-P)<.01);const L=e[`_prev_src_${f.id}`]??v;let k=!1;f.condition==="always"?k=!0:f.condition===">"?k=L>P:f.condition==="<"?k=L<P:f.condition==="=="&&(k=Math.abs(L-P)<.01),e[`_prev_src_${f.id}`]=v,E&&!k&&f.targetAnimationId&&(f.actionType==="playAnimation"||f.actionType)}}})}}),this._mouseDelta.dx=0,this._mouseDelta.dy=0)}applyBlendState(t,s){var c,d,p,u,g,h,f,v;if(!t.blendAnimations||t.blendAnimations.length===0)return;let o=0,e=0;t.blendInputX&&(o=this.inputs.get(t.blendInputX)??0),t.blendInputY&&(e=this.inputs.get(t.blendInputY)??0);const n=[];let i=0;if(t.blendType==="1D"){const m=[...t.blendAnimations].sort((l,b)=>l.position[0]-b.position[0]);if(m.length===1){const l=(d=(c=this.artboard)==null?void 0:c.animations)==null?void 0:d.find(b=>b.id===m[0].animationId);l&&(n.push({anim:l,weight:1}),i=1)}else{let l=0;for(;l<m.length-1&&m[l+1].position[0]<o;)l++;if(l===m.length-1&&o>m[l].position[0]){const b=(u=(p=this.artboard)==null?void 0:p.animations)==null?void 0:u.find(S=>S.id===m[l].animationId);b&&(n.push({anim:b,weight:1}),i=1)}else{const b=m[l].position[0],S=m[l+1].position[0],w=(h=(g=this.artboard)==null?void 0:g.animations)==null?void 0:h.find(E=>E.id===m[l].animationId),C=(v=(f=this.artboard)==null?void 0:f.animations)==null?void 0:v.find(E=>E.id===m[l+1].animationId),M=Math.max(.001,S-b);let I=(o-b)/M;I=Math.max(0,Math.min(1,I));const _=1-I;w&&(n.push({anim:w,weight:_}),i+=_),C&&(n.push({anim:C,weight:I}),i+=I)}}}else t.blendAnimations.forEach(m=>{var C,M;const l=(M=(C=this.artboard)==null?void 0:C.animations)==null?void 0:M.find(I=>I.id===m.animationId);if(!l)return;const b=m.position[0]-o,S=m.position[1]-e,w=b*b+S*S;if(w<1e-4)n.push({anim:l,weight:1e4}),i+=1e4;else{const I=1/w;n.push({anim:l,weight:I}),i+=I}});if(i===0)return;n.forEach(m=>m.weight/=i);const a=new Map,r=m=>{let l=m.startsWith("#")?m.substring(1):m;return l.length===3&&(l=[l[0],l[0],l[1],l[1],l[2],l[2]].join("")),l="0x"+l,{r:l>>16&255,g:l>>8&255,b:l&255,a:1}};n.forEach(({anim:m,weight:l})=>{m.tracks&&m.tracks.forEach(b=>{var P,L;const S=b.object_id||b.objectId,w=b.property,C=(P=this.artboard)==null?void 0:P.objects.find(k=>k.id===S);if(((L=C==null?void 0:C.physics)==null?void 0:L.enabled)&&C.physics.bodyType!=="Static"&&(w==="x"||w==="y"||w==="rotation"))return;const I=this.interpolate(b.keyframes,s);if(I===void 0)return;let _=a.get(S);_||(_=new Map,a.set(S,_));let E=_.get(w);if(!E){if(typeof I=="number")E={type:"number",value:0};else if(typeof I=="string"&&I.startsWith("#"))E={type:"color",value:I,colorAcc:{r:0,g:0,b:0,a:0}};else if(E={type:"number",value:I},l<.5)return;_.set(w,E)}if(E.type==="number"&&typeof I=="number")E.value+=I*l;else if(E.type==="color"&&typeof I=="string"&&E.colorAcc){const k=r(I);k&&(E.colorAcc.r+=k.r*l,E.colorAcc.g+=k.g*l,E.colorAcc.b+=k.b*l,E.colorAcc.a+=k.a*l)}else l>.5&&(E.value=I)})}),a.forEach((m,l)=>{var w;const b=this.objectStates.get(l),S=(w=this.artboard)==null?void 0:w.objects.find(C=>C.id===l);!b||!S||m.forEach((C,M)=>{let I=C.value;if(C.type==="color"&&C.colorAcc){const _=Math.round(C.colorAcc.r).toString(16).padStart(2,"0"),E=Math.round(C.colorAcc.g).toString(16).padStart(2,"0"),P=Math.round(C.colorAcc.b).toString(16).padStart(2,"0");I=`#${_}${E}${P}`}if(M.includes(".")||M.includes("[")){const _=(M||"").replace(/\[(\d+)\]/g,".$1").split(".");let E=b;for(let P=0;P<_.length-1;P++){if(typeof E[_[P]]!="object"||E[_[P]]===null){let L=S;for(let k=0;k<=P;k++)L=L?L[_[k]]:null;if(_[P]==="corner_radius"||_[P]==="cornerRadius"){const k=typeof E[_[P]]=="number"?E[_[P]]:typeof L=="number"?L:0;E[_[P]]={tl:k,tr:k,bl:k,br:k}}else{const k=_[P+1],A=!isNaN(Number(k));E[_[P]]=L?JSON.parse(JSON.stringify(L)):A?[]:{}}}E=E[_[P]]}E[_[_.length-1]]=I,_[_.length-1]==="color"&&(_[_.length-2]==="fill"||_[_.length-2]==="stroke")&&(E.type="Solid")}else M==="fill"?(b.style||(b.style={}),b.style.fill=I):M==="stroke"?(b.style||(b.style={}),b.style.stroke=I):b[M]=I})})}applyAnimation(t,s,o){!t||!t.tracks||t.tracks.forEach(e=>{var p,u,g;const n=e.object_id||e.objectId;if(o){if(Array.isArray(o)){if(!o.includes(n))return}else if(n!==o)return}const i=(p=this.artboard)==null?void 0:p.objects.find(h=>h.id===n),a=((u=i==null?void 0:i.physics)==null?void 0:u.enabled)&&i.physics.bodyType!=="Static";let r=e.property;if(a&&(r==="x"||r==="y"||r==="rotation"))return;const c=this.objectStates.get(n);if(!c){this.frameCount%600===0&&this.debugLog(`Skipping track: Object ${n} not found in state`);return}const d=this.interpolate(e.keyframes,s);if(d!==void 0){if(this.frameCount%240===0){const h=(i==null?void 0:i.name)||n,f=typeof d=="object"?JSON.stringify(d).slice(0,50):d;this.debugLog(`[Anim] Applying ${r} = ${f} to ${h}`)}if(r.includes(".")||r.includes("[")){const h=(r||"").replace(/\[(\d+)\]/g,".$1").split(".");let f=c;for(let v=0;v<h.length-1;v++){if(typeof f[h[v]]!="object"||f[h[v]]===null){let m=i;for(let l=0;l<=v;l++)m=m?m[h[l]]:null;if(h[v]==="corner_radius"||h[v]==="cornerRadius"){let l=0,b=0,S=0,w=0;const C=f[h[v]]??m;typeof C=="number"?l=b=S=w=C:Array.isArray(C)?C.length===1?l=b=S=w=C[0]:C.length===2?(l=S=C[0],b=w=C[1]):C.length===3?(l=C[0],b=w=C[1],S=C[2]):C.length>=4&&(l=C[0],b=C[1],S=C[2],w=C[3]):C&&typeof C=="object"&&(l=C[0]??C.tl??C.corner_radius??C.cornerRadius??0,b=C[1]??C.tr??C.corner_radius??C.cornerRadius??0,S=C[2]??C.br??C.corner_radius??C.cornerRadius??0,w=C[3]??C.bl??C.corner_radius??C.cornerRadius??0),f[h[v]]={tl:l,tr:b,bl:w,br:S,0:l,1:b,2:S,3:w}}else{const l=h[v+1],b=!isNaN(Number(l));f[h[v]]=m?JSON.parse(JSON.stringify(m)):b?[]:{}}}f=f[h[v]]}f[h[h.length-1]]=d,h[h.length-1]==="color"&&(h[h.length-2]==="fill"||h[h.length-2]==="stroke")&&(f.type="Solid")}else r==="fill"?(c.style||(c.style={}),c.style.fill=d):r==="stroke"?(c.style||(c.style={}),c.style.stroke=d):c[r]=d;if(this.physicsEngine&&((g=i==null?void 0:i.physics)!=null&&g.enabled)&&i.physics.bodyType==="Static")if(r==="x"){const h=this.physicsEngine.getPosition(n);h&&this.physicsEngine.setPosition(n,d,h.y)}else if(r==="y"){const h=this.physicsEngine.getPosition(n);h&&this.physicsEngine.setPosition(n,h.x,d)}else r==="rotation"&&this.physicsEngine.setRotation(n,d*(Math.PI/180))}})}interpolate(t,s){if(t.length===0)return;let o=t[0],e=t[t.length-1];if(s<=o.time)return o.value;if(s>=e.time)return e.value;for(let a=0;a<t.length-1;a++)if(s>=t[a].time&&s<t[a+1].time){o=t[a],e=t[a+1];break}const n=e.time-o.time;let i=(s-o.time)/n;return o.easing&&(i=ei(o.easing)(i)),this.interpolateValue(o.value,e.value,i)}interpolateValue(t,s,o){if(t===void 0)return s;if(s===void 0)return t;if(typeof t=="string"&&typeof s=="string"){if(t.startsWith("#"))return this.interpolateColor(t,s,o);const e=parseFloat(t),n=parseFloat(s);return!isNaN(e)&&!isNaN(n)?Math.round(e+(n-e)*o).toString():o<.5?t:s}if(Array.isArray(t)&&Array.isArray(s))return t.length===s.length?t.map((e,n)=>this.interpolateValue(e,s[n],o)):o<.5?t:s;if(typeof t=="object"&&typeof s=="object"&&t!==null&&s!==null){if(t.width!==void 0&&t.color!==void 0&&typeof t.width=="number")return this.interpolateStroke(t,s,o);if(t.type&&s.type&&(t.type==="Solid"||t.type==="LinearGradient"||t.type==="RadialGradient"||t.type==="Image"))return this.interpolateFill(t,s,o);const e={};return new Set([...Object.keys(t),...Object.keys(s)]).forEach(i=>{e[i]=this.interpolateValue(t[i],s[i],o)}),e}return typeof t=="number"&&typeof s=="number"?t+(s-t)*o:o<.5?t:s}interpolateColor(t,s,o){var h,f;const e=((f=(h=this.artboard)==null?void 0:h.tokens)==null?void 0:f.colors)||{},n=e[t]||t,i=e[s]||s,a=v=>{if(!v)return{r:0,g:0,b:0};const m=v.startsWith("#")?v.replace("#",""):"000000";return m.length===3?{r:parseInt(m[0]+m[0],16),g:parseInt(m[1]+m[1],16),b:parseInt(m[2]+m[2],16)}:{r:parseInt(m.substring(0,2),16),g:parseInt(m.substring(2,4),16),b:parseInt(m.substring(4,6),16)}},r=a(n),c=a(i),d=Math.round(r.r+(c.r-r.r)*o),p=Math.round(r.g+(c.g-r.g)*o),u=Math.round(r.b+(c.b-r.b)*o),g=v=>{const m=Math.max(0,Math.min(255,v)).toString(16);return m.length===1?"0"+m:m};return`#${g(d)}${g(p)}${g(u)}`}interpolateStops(t,s,o){return!t||!s||t.length!==s.length?o<.5?t:s:t.map((e,n)=>{const i=s[n];return{offset:e.offset+(i.offset-e.offset)*o,color:this.interpolateColor(e.color,i.color,o),opacity:(e.opacity??1)+((i.opacity??1)-(e.opacity??1))*o}})}interpolateFill(t,s,o){if(!t||!s||t.type!==s.type)return o<.5?t:s;const e={...t,opacity:(t.opacity??1)+((s.opacity??1)-(t.opacity??1))*o};return t.type==="Solid"?e.color=this.interpolateColor(t.color,s.color,o):(t.type==="LinearGradient"||t.type==="RadialGradient")&&(t.start&&s.start&&(e.start=[t.start[0]+(s.start[0]-t.start[0])*o,t.start[1]+(s.start[1]-t.start[1])*o]),t.end&&s.end&&(e.end=[t.end[0]+(s.end[0]-t.end[0])*o,t.end[1]+(s.end[1]-t.end[1])*o]),t.center&&s.center&&(e.center=[t.center[0]+(s.center[0]-t.center[0])*o,t.center[1]+(s.center[1]-t.center[1])*o]),t.radius!==void 0&&s.radius!==void 0&&(e.radius=t.radius+(s.radius-t.radius)*o),e.stops=this.interpolateStops(t.stops,s.stops,o)),e}interpolateStroke(t,s,o){if(!t||!s)return o<.5?t:s;const e={...t};return e.width=(t.width??0)+((s.width??0)-(t.width??0))*o,e.opacity=(t.opacity??1)+((s.opacity??1)-(t.opacity??1))*o,t.fill&&s.fill?e.fill=this.interpolateFill(t.fill,s.fill,o):t.color&&s.color&&t.color.startsWith("#")&&s.color.startsWith("#")&&(e.color=this.interpolateColor(t.color,s.color,o)),e.trimStart=(t.trimStart??0)+((s.trimStart??0)-(t.trimStart??0))*o,e.trimEnd=(t.trimEnd??1)+((s.trimEnd??1)-(t.trimEnd??1))*o,e.trimOffset=(t.trimOffset??0)+((s.trimOffset??0)-(t.trimOffset??0))*o,e.dashOffset=(t.dashOffset??0)+((s.dashOffset??0)-(t.dashOffset??0))*o,e}render(t,s,o){var p;this.debug_objectsTotal=((p=this.artboard)==null?void 0:p.objects.length)||0,this.debug_objectsRendered=0;const e=performance.now();if(this.canvasWidth=s,this.canvasHeight=o,!this.artboard)return;t.clearRect(0,0,s,o);const n=this.artboard.width,i=this.artboard.height,a=this.calculateTransform(s,o,n,i,this.layout.fit,this.layout.alignment);if(t.save(),t.translate(Math.round(a.tx),Math.round(a.ty)),t.scale(a.scaleX,a.scaleY),this.rootTransform=t.getTransform(),this.artboard.backgroundVisible!==!1&&(t.fillStyle=this.artboard.backgroundColor||"#000000",t.fillRect(0,0,n,i)),this.artboard.backgroundImage){const u=this.artboard.backgroundImage;let g=this.imageCache.get(u);if(g||(g=new Image,g.src=u,this.imageCache.set(u,g)),g.complete&&g.naturalWidth>0){t.save(),t.globalAlpha=this.normalizeOpacity(this.artboard.backgroundOpacity??100);const h=g.naturalWidth/g.naturalHeight,f=n/i;let v,m,l,b;f>h?(v=n,m=n/h):(m=i,v=i*h),l=(n-v)/2,b=(i-m)/2,t.drawImage(g,l,b,v,m),t.restore()}}this.artboard.clipContent!==!1&&this.artboard.clip_content!==!1&&(t.beginPath(),t.rect(0,0,n,i),t.clip());const c=new Map;this.artboard.objects.forEach(u=>c.set(u.id,u)),this.artboard.objects.filter(u=>!u.parentId).map((u,g)=>{const h=this.objectStates.get(u.id),f=(h==null?void 0:h.zIndex)??g;return{obj:u,zIndex:f}}).sort((u,g)=>u.zIndex-g.zIndex).forEach(({obj:u})=>{this.renderObject(t,u,c)}),this._emitterPools.forEach((u,g)=>{if(!(u.length===0||!c.get(g)))for(const f of u)t.save(),t.globalAlpha=f.opacity,t.fillStyle=f.color,t.beginPath(),t.arc(f.x,f.y,Math.max(1,f.size*f.opacity),0,Math.PI*2),t.fill(),t.restore()}),this.lastRenderTime=performance.now()-e,this.debugMode&&this.frameCount%60===0&&this.log(`[Engine Debug] Rendered ${this.debug_objectsRendered}/${this.debug_objectsTotal} objects in ${this.lastRenderTime.toFixed(2)}ms`),t.restore()}isObjectInView(t,s,o,e,n,i=0){const a=t.getTransform(),r=s*a.a+o*a.c+a.e,c=s*a.b+o*a.d+a.f,d=Math.sqrt(a.a*a.a+a.b*a.b),p=Math.sqrt(a.c*a.c+a.d*a.d),u=(e/2+i)*d,g=(n/2+i)*p;return r+u>=0&&r-u<=this.canvasWidth&&c+g>=0&&c-g<=this.canvasHeight}calculateTransform(t,s,o,e,n,i){let a=1,r=1,c=1;const d=o/e,p=t/s;switch(n){case"Contain":p>d?c=s/e:c=t/o,a=r=c;break;case"Cover":p>d?c=t/o:c=s/e,a=r=c;break;case"Fill":a=t/o,r=s/e;break;case"FitWidth":c=t/o,a=r=c;break;case"FitHeight":c=s/e,a=r=c;break;case"None":a=r=1;break;case"ScaleDown":c=Math.min(t/o,s/e),c>1&&(c=1),a=r=c;break;default:a=r=1;break}const u=o*a,g=e*r;let h=0,f=0;return i.includes("Left")?h=0:i.includes("Right")?h=t-u:h=(t-u)/2,i.includes("Top")?f=0:i.includes("Bottom")?f=s-g:f=(s-g)/2,{scaleX:a,scaleY:r,tx:h,ty:f}}mapFontWeight(t){const s=t.toLowerCase();return s==="thin"||s==="100"?"100":s==="extralight"||s==="200"?"200":s==="light"||s==="300"?"300":s==="regular"||s==="normal"||s==="400"?"400":s==="medium"||s==="500"?"500":s==="semibold"||s==="600"?"600":s==="bold"||s==="700"?"700":s==="extrabold"||s==="800"?"800":s==="black"||s==="900"?"900":t}drawTextDecoration(t,s,o,e,n,i){t.beginPath();const a=Math.max(1,i/14);let r=e;s==="underline"?r=e+i*.12:s==="line-through"&&(r=e-i*.3),t.lineWidth=a,t.strokeStyle=t.fillStyle,t.moveTo(o-n/2,r),t.lineTo(o+n/2,r),t.stroke()}renderObject(t,s,o,e=!1,n=!1){var b,S,w,C,M,I,_,E,P,L,k,A,T,R,F,O,W,V,U,Y,X,ot,J,at,j,it,x,D,N,ct,Mt,bt,wt,gt,It;const i=this.objectStates.get(s.id);if(!i){this.warn("No state for object:",s.id);return}this.frameCount%60,t.roundRect||(t.roundRect=(ut,Ot,Wt,q,ft)=>(this.drawRoundRect(t,ut,Ot,Wt,q,ft),t));const a=i.geometry?this.deepMerge(s.geometry,i.geometry):s.geometry;let r=i.style?this.deepMerge(s.style,i.style):s.style,c=(a==null?void 0:a.width)||((b=s.geometry)==null?void 0:b.width)||s.width||0,d=(a==null?void 0:a.height)||((S=s.geometry)==null?void 0:S.height)||s.height||0;if((c===0||d===0)&&(a!=null&&a.points)&&Array.isArray(a.points)&&a.points.length>0){let ut=1/0,Ot=-1/0,Wt=1/0,q=-1/0;a.points.forEach(ft=>{ut=Math.min(ut,ft.x),Ot=Math.max(Ot,ft.x),Wt=Math.min(Wt,ft.y),q=Math.max(q,ft.y)}),c===0&&(c=Ot-ut),d===0&&(d=q-Wt)}const p=ut=>{if(ut)return ut.corner_radius??ut.cornerRadius},u=p(a)??p(i)??p(r)??p(s.geometry)??p(s.style)??p(s)??0;let g={...a,width:c,height:d};if(delete g.cornerRadius,g.corner_radius=u,!g.type&&(s.type==="Frame"||s.type==="Component"||s.type==="Group")&&(g.type="Rectangle"),s.type==="Text"&&(g.type="Text"),g.type==="Path"&&s.weights&&s.bindMatrices&&g.points){const ut=this.getGlobalTransform(s.id);if(ut){const Ot=si(g.points,s.weights,s.bindMatrices,ut,Wt=>this.getGlobalTransform(Wt));g={...g,points:Ot}}}if(i.visible===!1)return;const f=(r.effects||((w=s.style)==null?void 0:w.effects)||[]).find(ut=>ut.isEnabled!==!1&&ut.type==="PathDistortion");if(f){const ut=ni(g,c,d,f.amplitude||5,f.frequency||10,f.seed||0,f.direction||0,f.directionStrength||0);g={...g,type:"Path",points:ut}}const v=s.repeaterConfig,m=v&&v.isEnabled&&v.count>1,l=m?v.count:1;for(let ut=0;ut<l;ut++){let Ot=i.x!==void 0?i.x:((C=i.transform)==null?void 0:C.x)??0,Wt=i.y!==void 0?i.y:((M=i.transform)==null?void 0:M.y)??0,q=i.rotation!==void 0?i.rotation:((I=i.transform)==null?void 0:I.rotation)??0,ft=i.scale_x!==void 0?i.scale_x:((_=i.transform)==null?void 0:_.scale_x)??1,xt=i.scale_y!==void 0?i.scale_y:((E=i.transform)==null?void 0:E.scale_y)??1;if(m&&ut>0){if(v.type==="Linear"){const z=v.offsetX||0,K=v.offsetY||0,G=v.rotation||0,B=v.scale!==void 0?v.scale:1;Ot+=ut*z,Wt+=ut*K,q+=ut*G,ft*=Math.pow(B,ut),xt*=Math.pow(B,ut)}else if(v.type==="Grid"){const z=v.cols||Math.ceil(Math.sqrt(v.count)),K=v.gapX||0,G=v.gapY||0,B=Math.floor(ut/z),Q=ut%z,H=c+K,lt=d+G;Ot+=Q*H,Wt+=B*lt}else if(v.type==="Radial"){const z=v.radius||100,K=v.startAngle||0,B=(v.endAngle||360)-K,Q=v.count>1?B/(B===360?v.count:v.count-1):0,H=K+ut*Q,lt=H*Math.PI/180;Ot=i.x+z*Math.cos(lt),Wt=i.y+z*Math.sin(lt),q+=H}}const At=s.type==="Group"||s.type==="Frame"||s.type==="Component",Pt=c>0&&d>0;if(!At&&Pt&&!e){const z=(((P=r.shadow)==null?void 0:P.isEnabled)!==!1?(((L=r.shadow)==null?void 0:L.blur)||0)+10:0)+(((k=r.blur)==null?void 0:k.isEnabled)!==!1&&((A=r.blur)==null?void 0:A.radius)||0)+20;if(!this.isObjectInView(t,Ot,Wt,c,d,z))continue}this.debug_objectsRendered++,t.save();const vt=[],Xt=r.blur||((T=s.style)==null?void 0:T.blur);Xt&&Xt.amount>0&&vt.push(`blur(${Xt.amount}px)`);const zt=r.effects||((R=s.style)==null?void 0:R.effects)||[];let Gt=zt.find(z=>z.isEnabled!==!1&&(z.type==="BackgroundBlur"||z.type==="LayerBlur"));Gt||(Gt=r.effect||((F=s.style)==null?void 0:F.effect)||zt.find(z=>z.isEnabled!==!1));const Yt=Gt,te=(Yt==null?void 0:Yt.isEnabled)!==!1,ie=Yt==null?void 0:Yt.type,ce=(Yt==null?void 0:Yt.radius)??10;te&&ie==="LayerBlur"?vt.push(`blur(${ce}px)`):te&&ie==="BackgroundBlur"&&(r===s.style&&(r={...r}),r.fill={type:"None"});const ve=(g==null?void 0:g.adjustments)||(a==null?void 0:a.adjustments)||((O=s.geometry)==null?void 0:O.adjustments),_e=(r==null?void 0:r.adjustments)||((W=s.style)==null?void 0:W.adjustments),ge=((V=r==null?void 0:r.fill)==null?void 0:V.adjustments)||((Y=(U=s.style)==null?void 0:U.fill)==null?void 0:Y.adjustments),Ee=s==null?void 0:s.adjustments,Zt=ve||_e||ge||Ee;if(i&&Zt&&(i.geometry=i.geometry||{},i.geometry.adjustments={...Zt}),Zt){const z=(Zt.exposure||0)/100,K=(Zt.contrast||0)/100,G=(Zt.saturation||0)/100,B=(Zt.temperature||0)/200,Q=(Zt.tint||0)/200,H=(Zt.highlights||0)/500,lt=(Zt.shadows||0)/500,kt=Zt.hue||0,Et=(Zt.negative||0)/100,Ht=Zt.blur||0;if(z!==0&&vt.push(`brightness(${1+z})`),K!==0){const qt=K>0?1+K*2:1+K;vt.push(`contrast(${Number(qt.toFixed(2))})`)}if(G!==0){const qt=G>0?1+G*1.5:1+G;vt.push(`saturate(${Number(qt.toFixed(2))})`)}const Ut=kt+Q*30-B*20;Ut!==0&&vt.push(`hue-rotate(${Math.round(Ut)}deg)`),B>0&&vt.push(`sepia(${Math.round(B*40)}%)`),Et!==0&&vt.push(`invert(${Math.abs(Et)})`),H!==0&&vt.push(`brightness(${1+H})`),lt!==0&&vt.push(`contrast(${1+lt})`),Ht>0&&vt.push(`blur(${Ht}px)`)}vt.length>0?(t.filter=vt.join(" "),(!this._lastLoggedAdjustments||this._lastLoggedAdjustments!==t.filter)&&(this._lastLoggedAdjustments=t.filter,this.log(`[ExodeUI Engine] Applied Canvas Filter for (${s.name||s.id}): "${t.filter}" (Adjustments: ${JSON.stringify(Zt)})`),console.log(`[ExodeUI Engine Log] Applied Canvas Filter for (${s.name||s.id}):`,{filter:t.filter,adjustments:Zt}))):t.filter="none",t.imageSmoothingEnabled=!0,t.imageSmoothingQuality="high";const Me=t.globalAlpha,Re=this.normalizeOpacity(i.opacity!==void 0?i.opacity:100);t.globalAlpha=Me*Re;const Ie=i.compositeOperation||i.blendMode;if(Ie&&Ie!=="Normal"){const z=Ie.toLowerCase();["multiply","screen","overlay","darken","lighten","color-dodge","color-burn","hard-light","soft-light","difference","exclusion","hue","saturation","color","luminosity","source-over","source-in","source-out","source-atop","destination-over","destination-in","destination-out","destination-atop","lighter","copy","xor","multiply","screen"].includes(z)&&(t.globalCompositeOperation=z)}const de=t,me=i.masks||(s.maskedBy?[{maskId:s.maskedBy,inverted:s.maskInverted===!0,type:s.maskType||"alpha",opacity:s.maskOpacity!==void 0?s.maskOpacity/100:1,feather:s.maskFeather||0,isVisible:!0}]:[]);let Ae=!1;const he=me.filter(z=>z.isVisible!==!1&&o.has(z.maskId));if(he.length>0){const z=he[0],K=o.get(z.maskId),G=this.objectStates.get(K.id);G&&G.visible!==!1&&(Ae=!0,(!this.maskBuffer||this.maskBuffer.width!==this.canvasWidth||this.maskBuffer.height!==this.canvasHeight)&&(this.maskBuffer=document.createElement("canvas"),this.maskBuffer.width=this.canvasWidth,this.maskBuffer.height=this.canvasHeight,this.maskCtx=this.maskBuffer.getContext("2d",{willReadFrequently:!0}),this.maskCtx&&(this.maskCtx.imageSmoothingEnabled=!0,this.maskCtx.imageSmoothingQuality="high")),this.maskCtx.setTransform(1,0,0,1,0,0),this.maskCtx.globalCompositeOperation="source-over",this.maskCtx.globalAlpha=1,this.maskCtx.filter="none",this.maskCtx.clearRect(0,0,this.maskBuffer.width,this.maskBuffer.height),this.rootTransform&&this.maskCtx.setTransform(this.rootTransform),s.parentId&&this.applyAbsoluteTransform(this.maskCtx,s.parentId,o),this.maskCtx.save(),this.maskCtx.globalAlpha=1,t=this.maskCtx,t.filter=de.filter)}if(!n){t.translate(Ot,Wt),t.rotate(q*Math.PI/180);const z=i.skew_x||0,K=i.skew_y||0;if(z!==0||K!==0){const Et=Math.tan(z*Math.PI/180),Ht=Math.tan(K*Math.PI/180);t.transform(1+Et*Ht,Ht,Et,1,0,0)}const G=i.rotate_x!==void 0?i.rotate_x:((X=i.transform)==null?void 0:X.rotate_x)??0,B=i.rotate_y!==void 0?i.rotate_y:((ot=i.transform)==null?void 0:ot.rotate_y)??0,H=1+(i.translate_z!==void 0?i.translate_z:((J=i.transform)==null?void 0:J.translate_z)??0)/1e3,lt=(i.flip_x===!0?-1:1)*Math.cos(B*Math.PI/180)*H,kt=(i.flip_y===!0?-1:1)*Math.cos(G*Math.PI/180)*H;t.scale(ft*lt,xt*kt)}r.shadow&&r.shadow.isEnabled===void 0&&((r.shadow.blur||0)>0||Math.abs(r.shadow.offsetX||0)>0||Math.abs(r.shadow.offsetY||0)>0)&&(r.shadow.isEnabled=!0);const mt=r.shadow;if(mt&&mt.isEnabled!==!1&&!e){let z=mt.color||"#000000";(j=(at=this.artboard)==null?void 0:at.tokens)!=null&&j.colors&&this.artboard.tokens.colors[z]&&(z=this.artboard.tokens.colors[z]);const K=this.normalizeOpacity(mt.opacity??100)*.75,G=mt.spread||0,Q=(mt.blur||0)+G*1.5;let H=z;if(z.startsWith("#")){const Et=z.replace("#",""),Ht=parseInt(Et.substring(0,2),16),Ut=parseInt(Et.substring(2,4),16),qt=parseInt(Et.substring(4,6),16);H=`rgba(${Ht}, ${Ut}, ${qt}, ${K})`}else if(z.startsWith("rgba")){const Et=z.match(/[\d.]+/g);if(Et&&Et.length>=4){const Ht=Et[0],Ut=Et[1],qt=Et[2],$=Et[3];H=`rgba(${Ht}, ${Ut}, ${qt}, ${parseFloat($)*K})`}}const lt=t.getTransform(),kt=Math.sqrt(lt.a*lt.a+lt.b*lt.b)||1;t.shadowColor=H,t.shadowBlur=Q*kt,t.shadowOffsetX=(mt.offsetX||0)*kt,t.shadowOffsetY=(mt.offsetY||0)*kt}const rt=s.liquidFill||((it=s.style)==null?void 0:it.liquidFill);if(rt&&rt.enabled){t.save();const z=rt.fillLevel??.5;t.beginPath();const K=d/2-d*z;t.rect(-c/2,K,c,d*z),t.clip(),t.fillStyle=rt.color||"#3b82f6",t.globalAlpha=t.globalAlpha*(rt.opacity??1)}if(e||this.applyOuterGlowUnderlay(t,s,g,c,d,u,r,o),(a==null?void 0:a.type)==="Text"||s.type==="Text")this._renderText(t,s,g,r,i,c,d,!1,!1);else if((a==null?void 0:a.type)==="Image"||((x=r.fill)==null?void 0:x.type)==="Image"||s.type==="Image"&&(a!=null&&a.src||(D=r.fill)!=null&&D.src)){const z=(a==null?void 0:a.originalSrc)||(a==null?void 0:a.src)||((N=r.fill)==null?void 0:N.originalSrc)||((ct=r.fill)==null?void 0:ct.src)||(s==null?void 0:s.src);if(z){let K=this.imageCache.get(z);K||(K=new Image,K.onload=()=>{this.log(`[ExodeUI] Image loaded successfully, size: ${K.naturalWidth}x${K.naturalHeight}`)},K.onerror=Q=>{console.error("[ExodeUI] Image load failed:",Q,`Src preview: ${z.substring(0,100)}...`)},K.src=z,this.imageCache.set(z,K));const G=r.stroke&&r.stroke.width>0&&r.stroke.isEnabled!==!1,B=(((Mt=r.stroke)==null?void 0:Mt.alignment)||"center").toLowerCase();if(G&&B==="outside"&&this.applyStrokeAlignment(t,r,g,c,d,u),r.fill&&r.fill.type!=="None"){t.save();const Q=t.globalAlpha,H=this.createCanvasFill(t,r.fill,c,d);t.fillStyle=H||r.fill.color||"transparent",t.globalAlpha=Q*this.normalizeOpacity(r.fill.opacity??100),u!==0?(this.drawRoundRect(t,-c/2,-d/2,c,d,u),t.fill()):t.fillRect(-c/2,-d/2,c,d),t.globalAlpha=Q,t.restore()}if(K.complete&&K.naturalWidth>0){const Q=Zt?this.processFabricAdjustmentsCanvas(K,c,d,Zt):K;u!==0?(t.save(),this.drawRoundRect(t,-c/2,-d/2,c,d,u),t.clip(),t.drawImage(Q,-c/2,-d/2,c,d),t.restore()):t.drawImage(Q,-c/2,-d/2,c,d),G&&(B==="inside"||B==="center")&&this.applyStrokeAlignment(t,r,g,c,d,u)}else G&&(B==="inside"||B==="center")&&this.applyStrokeAlignment(t,r,g,c,d,u)}}else if(a.type==="SVG"){const z=a.svgContent;if(z){const K=r.palette||[],G=r.fill,B=r.stroke,Q=G?this.normalizeOpacity(G.opacity??100):1,H=B&&B.isEnabled!==!1?this.normalizeOpacity(B.opacity??100):1,lt=(G==null?void 0:G.type)==="Solid"&&(!B||B.isEnabled===!1||B.type==="Solid"&&B.color===G.color&&H===Q),kt=G&&G.type!=="None"?lt?"monochrome":G.type==="Solid"?(G.color||"")+"|opacity:"+Q:JSON.stringify(G.stops||[])+"|opacity:"+Q:"",Et=B&&B.isEnabled!==!1&&(B.width||0)>0?lt?["monochrome",B.width||0,B.trimStart??0,B.trimEnd??1,B.trimOffset??0,B.dashOffset??0].join("|"):[B.width||0,B.fill?B.fill.type==="Solid"?B.fill.color||"":JSON.stringify(B.fill.stops||[]):B.color||"",B.opacity??1,B.lineCap||"",B.lineJoin||"",(B.dashArray||[]).join(","),B.trimStart??0,B.trimEnd??1,B.trimOffset??0,B.dashOffset??0].join("|"):"nostroke",Ht=[s.id,K.join("_"),kt,Et,i.opacity??100,i.visible!==!1?"v":"h"].join("_");let Ut=this.imageCache.get(Ht);if(!Ut){Ut=new Image,Ut.crossOrigin="anonymous";let $=z;$.match(/xmlns=["']http:\/\/www\.w3\.org\/2000\/svg["']/i)||($=$.replace(/<svg([^>]*)>/i,(Ct,Vt)=>`<svg xmlns="http://www.w3.org/2000/svg"${Vt}>`));let dt=a.width||c||100,Lt=a.height||d||100;const Nt=$.match(/viewBox=["']\s*0\s+0\s+([\d.]+)\s+([\d.]+)\s*["']/i);if(Nt&&(dt=parseFloat(Nt[1]),Lt=parseFloat(Nt[2])),$=$.replace(/<svg([^>]*)>/i,(Ct,Vt)=>{let Tt=Vt.replace(/\b(?:width|height)=["'][^"']*["']/gi," ");return Tt.match(/\bviewBox=/i)||(Tt+=` viewBox="0 0 ${dt} ${Lt}"`),Tt.match(/\bpreserveAspectRatio=/i)||(Tt+=' preserveAspectRatio="none"'),Tt+=' width="100%" height="100%"',`<svg${Tt}>`}),a.colors&&a.colors.length>0&&K.length>0&&a.colors.forEach((Ct,Vt)=>{if(K[Vt]){const Tt=Ct.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&"),Dt=new RegExp(Tt,"gi");$=$.replace(Dt,K[Vt])}}),G&&G.type&&G.type!=="None"){if(G.type==="Solid"&&G.color){const Ct=lt?"#FFFFFF":G.color,Vt=lt?1:this.normalizeOpacity(G.opacity??100);$=$.replace(/\bfill\s*=\s*["'][^"']*["']/gi,Tt=>/fill\s*=\s*["']\s*(none|transparent)\s*["']/i.test(Tt)?Tt:`fill="${Ct}"`),$=$.replace(/fill\s*:\s*[^;"')]+/gi,Tt=>/fill\s*:\s*(none|transparent)/i.test(Tt)?Tt:`fill:${Ct}`),Vt<1&&($=$.replace(/\bfill-opacity\s*=\s*["'][^"']*["']/gi,`fill-opacity="${Vt}"`),$=$.replace(/fill-opacity\s*:\s*[^;"')]+/gi,`fill-opacity:${Vt}`),$.match(/\bfill-opacity\s*=/i)||($=$.replace(/(<svg[^>]*>)/i,`$1<g fill-opacity="${Vt}">`),$=$.replace(/<\/svg>/i,"</g></svg>")))}else if(G.type==="LinearGradient"||G.type==="RadialGradient"||G.type==="Linear"||G.type==="Radial"){const Ct="exode-fill",Vt=this.normalizeOpacity(G.opacity??100),Tt=(G.stops||[]).map(Rt=>{const le=Rt.offset!==void 0?Rt.offset:Rt.pos??0,fe=this.normalizeOpacity(Rt.opacity??100)*Vt;return`<stop offset="${le*100}%" stop-color="${Rt.color||"#000"}" stop-opacity="${fe}"/>`}).join("");let Dt="";if(G.type==="LinearGradient"||G.type==="Linear"){const Rt=(oe,ne)=>Array.isArray(oe)?oe[ne]??(ne===0?0:1):oe&&typeof oe=="object"?oe[ne===0?"x":"y"]??(ne===0?0:1):ne===0?0:1,le=Rt(G.start,0)*100,fe=Rt(G.start,1)*100,Oe=Rt(G.end,0)*100,jt=Rt(G.end,1)*100;Dt=`<linearGradient id="${Ct}" x1="${le}%" y1="${fe}%" x2="${Oe}%" y2="${jt}%" gradientUnits="objectBoundingBox">${Tt}</linearGradient>`}else{const Rt=(jt,oe)=>Array.isArray(jt)?jt[oe]??.5:jt&&typeof jt=="object"?jt[oe===0?"x":"y"]??.5:.5,le=Rt(G.center,0)*100,fe=Rt(G.center,1)*100,Oe=(G.radius??.5)*100;Dt=`<radialGradient id="${Ct}" cx="${le}%" cy="${fe}%" r="${Oe}%" gradientUnits="objectBoundingBox">${Tt}</radialGradient>`}/<defs>/i.test($)?$=$.replace(/<defs>/i,`<defs>${Dt}`):$=$.replace(/<svg([^>]*)>/i,`<svg$1><defs>${Dt}</defs>`),$=$.replace(/\bfill\s*=\s*["'][^"']*["']/gi,Rt=>/fill\s*=\s*["']\s*(none|transparent)\s*["']/i.test(Rt)?Rt:`fill="url(#${Ct})"`),$=$.replace(/fill\s*:\s*[^;"')]+/gi,Rt=>/fill\s*:\s*(none|transparent)/i.test(Rt)?Rt:`fill:url(#${Ct})`)}}const st=(Ct,Vt,Tt=1)=>{const Dt=(Ct.stops||[]).map(jt=>{const oe=jt.offset!==void 0?jt.offset:jt.pos??0,ne=this.normalizeOpacity(jt.opacity??100)*Tt;return`<stop offset="${oe*100}%" stop-color="${jt.color||"#000"}" stop-opacity="${ne}"/>`}).join(""),Rt=(jt,oe,ne=.5)=>Array.isArray(jt)?jt[oe]??ne:jt&&typeof jt=="object"?jt[oe===0?"x":"y"]??ne:ne;if(Ct.type==="LinearGradient"||Ct.type==="Linear"){const jt=Rt(Ct.start,0,0)*100,oe=Rt(Ct.start,1,0)*100,ne=Rt(Ct.end,0,1)*100,Fe=Rt(Ct.end,1,1)*100;return`<linearGradient id="${Vt}" x1="${jt}%" y1="${oe}%" x2="${ne}%" y2="${Fe}%" gradientUnits="objectBoundingBox">${Dt}</linearGradient>`}const le=Rt(Ct.center,0,.5)*100,fe=Rt(Ct.center,1,.5)*100,Oe=(Ct.radius??.5)*100;return`<radialGradient id="${Vt}" cx="${le}%" cy="${fe}%" r="${Oe}%" gradientUnits="objectBoundingBox">${Dt}</radialGradient>`},yt=(Ct,Vt)=>/<defs>/i.test(Ct)?Ct.replace(/<defs>/i,`<defs>${Vt}`):Ct.replace(/(<svg[^>]*>)/i,`$1<defs>${Vt}</defs>`);if(B&&B.isEnabled!==!1&&(B.width||0)>0){const Ct=lt?1:this.normalizeOpacity(B.opacity??100),Vt=lt?"#FFFFFF":B.color||(G==null?void 0:G.color)||"#000000";let Tt="";const Dt=B.fill;if(Dt&&Dt.type){if(Dt.type==="Solid")Tt=Dt.color||B.color||"#000000";else if(Dt.type==="LinearGradient"||Dt.type==="RadialGradient"||Dt.type==="Linear"||Dt.type==="Radial"){const se="exode-stroke";$=yt($,st(Dt,se,Ct)),Tt=`url(#${se})`}}Tt||(Tt=Vt),$.match(/\bstroke\s*=\s*["']/i)?$=$.replace(/\bstroke\s*=\s*["'][^"']*["']/gi,se=>/stroke\s*=\s*["']\s*(none|transparent)\s*["']/i.test(se)?se:`stroke="${Tt}"`):$=$.replace(/<(path|circle|rect|ellipse|polygon|polyline)/gi,`<$1 stroke="${Tt}"`),$=$.replace(new RegExp(`(?<![a-z-])stroke\\s*:\\s*(?!none|transparent)[^;"')]+`,"gi"),`stroke:${Tt}`);let Rt=a.width||c||100,le=a.height||d||100;const fe=z.match(/viewBox=["']\s*0\s+0\s+([\d.]+)\s+([\d.]+)\s*["']/i);if(fe){const se=parseFloat(fe[1]),ue=parseFloat(fe[2]);!isNaN(se)&&!isNaN(ue)&&(Rt=se,le=ue)}const Oe=Math.max(.001,c/Rt),jt=Math.max(.001,d/le),oe=(Oe+jt)/2,ne=(B.width||1)/oe;$.match(/\bstroke-width\s*=\s*["']/i)?$=$.replace(/\bstroke-width\s*=\s*["'][^"']*["']/gi,`stroke-width="${ne}"`):$=$.replace(/<(path|circle|rect|ellipse|polygon|polyline)/gi,`<$1 stroke-width="${ne}"`),$=$.replace(/stroke-width\s*:\s*[^;"')]+/gi,`stroke-width:${ne}`),$.match(/\bstroke-opacity\s*=\s*["']/i)?$=$.replace(/\bstroke-opacity\s*=\s*["'][^"']*["']/gi,`stroke-opacity="${Ct}"`):$=$.replace(/<(path|circle|rect|ellipse|polygon|polyline)/gi,`<$1 stroke-opacity="${Ct}"`),$=$.replace(/stroke-opacity\s*:\s*[^;"')]+/gi,`stroke-opacity:${Ct}`);const Fe=B.lineCap||"round";$.match(/\bstroke-linecap\s*=\s*["']/i)?$=$.replace(/\bstroke-linecap\s*=\s*["'][^"']*["']/gi,`stroke-linecap="${Fe}"`):$=$.replace(/<(path|circle|rect|ellipse|polygon|polyline)/gi,`<$1 stroke-linecap="${Fe}"`),$=$.replace(/stroke-linecap\s*:\s*[^;"')]+/gi,`stroke-linecap:${Fe}`);const xe=B.lineJoin||"round";$.match(/\bstroke-linejoin\s*=\s*["']/i)?$=$.replace(/\bstroke-linejoin\s*=\s*["'][^"']*["']/gi,`stroke-linejoin="${xe}"`):$=$.replace(/<(path|circle|rect|ellipse|polygon|polyline)/gi,`<$1 stroke-linejoin="${xe}"`),$=$.replace(/stroke-linejoin\s*:\s*[^;"')]+/gi,`stroke-linejoin:${xe}`);const Be=B.trimStart??0,We=B.trimEnd??1,Ye=B.trimOffset??0,Xe=B.dashOffset??0,Ge=Be!==0||We!==1||Ye!==0||Xe!==0;if(Ge){const se=Math.max(0,Math.min(1,Be)),ue=Math.max(0,Math.min(1,We));this.frameCount%600===0&&this.debugLog(`SVG Trim - Object: ${s.name||s.id}, Start: ${se}, End: ${ue}`);const Se=(Rt+le)*2,De=(Ye%1+1)%1,Ne=(Xe%1+1)%1;let ke="",Ce=0;if(se>=ue)ke=`0 ${Se}`,Ce=0;else{const we=Se*(ue-se),Z=Se-we;Ce=-(Se*(se+De+Ne)),ke=`${we} ${Z}`}$.match(/\bstroke-dasharray\s*=/i)?$=$.replace(/\bstroke-dasharray\s*=\s*["'][^"']*["']/gi,`stroke-dasharray="${ke}"`):$=$.replace(/<(path|circle|rect|ellipse|polygon|polyline)/gi,`<$1 stroke-dasharray="${ke}"`),$=$.replace(/stroke-dasharray\s*:\s*[^;"')]+/gi,`stroke-dasharray:${ke}`),$.match(/\bstroke-dashoffset\s*=/i)?$=$.replace(/\bstroke-dashoffset\s*=\s*["'][^"']*["']/gi,`stroke-dashoffset="${Ce}"`):$=$.replace(/<(path|circle|rect|ellipse|polygon|polyline)/gi,`<$1 stroke-dashoffset="${Ce}"`),$=$.replace(/stroke-dashoffset\s*:\s*[^;"')]+/gi,`stroke-dashoffset:${Ce}`)}else if(B.dashArray&&B.dashArray.length>0){const se=B.dashArray.join(" ");if($=$.replace(/\bstroke-dasharray\s*=\s*["'][^"']*["']/gi,`stroke-dasharray="${se}"`),$=$.replace(/stroke-dasharray\s*:\s*[^;"')]+/gi,`stroke-dasharray:${se}`),B.dashOffset){const ue=(Rt+le)*2,Se=-(B.dashOffset*ue);$=$.replace(/\bstroke-dashoffset\s*=\s*["'][^"']*["']/gi,`stroke-dashoffset="${Se}"`),$=$.replace(/stroke-dashoffset\s*:\s*[^;"')]+/gi,`stroke-dashoffset:${Se}`)}}if(!/\bstroke\s*=\s*["']/i.test(z)&&!new RegExp("(?<![a-z-])stroke\\s*:","i").test(z)){let se="",ue="";if(Ge){const ke=a.width||c||100,Ce=a.height||d||100,we=(ke+Ce)*2,Z=Math.max(0,Math.min(1,Be)),nt=Math.max(0,Math.min(1,We)),et=(Ye%1+1)%1,pt=(Xe%1+1)%1;if(Z>=nt)se=` stroke-dasharray="0 ${we}"`,ue=' stroke-dashoffset="0"';else{const Ft=we*(nt-Z),Bt=we-Ft,Jt=-(we*(Z+et+pt));se=` stroke-dasharray="${Ft} ${Bt}"`,ue=` stroke-dashoffset="${Jt}"`}}else(bt=B.dashArray)!=null&&bt.length&&(se=` stroke-dasharray="${B.dashArray.join(" ")}"`,B.dashOffset&&(ue=` stroke-dashoffset="${B.dashOffset}"`));const Se=` stroke-linecap="${B.lineCap||"round"}"`,De=` stroke-linejoin="${B.lineJoin||"round"}"`,Ne=`stroke="${Tt}" stroke-width="${ne}" stroke-opacity="${Ct}"${Se}${De}${se}${ue}`;$=$.replace(/(<svg[^>]*>)(\s*(?:<defs>[\s\S]*?<\/defs>)?)/i,(ke,Ce,we)=>`${Ce}${we}<g ${Ne}>`),$=$.replace(/<\/svg>/i,"</g></svg>")}}else B&&B.isEnabled===!1&&($=$.replace(/\bstroke\s*=\s*["'][^"']*["']/gi,'stroke="none"'),$=$.replace(new RegExp(`(?<![a-z-])stroke\\s*:\\s*(?!none|transparent)[^;"')]+`,"gi"),"stroke:none"));const St=new Blob([$],{type:"image/svg+xml"}),ee=URL.createObjectURL(St);Ut.onload=()=>{if(URL.revokeObjectURL(ee),this.frameCount%900===0){const Ct=this.imageCache.get(Ht);Ct&&this.debugLog(`SVG Payload Ready: ${s.name||s.id} (${Ct.naturalWidth}x${Ct.naturalHeight})`)}},Ut.onerror=()=>{URL.revokeObjectURL(ee),this.debugLog(`SVG Error: Failed to load payload for ${s.name||s.id}`)},Ut.src=ee,this.imageCache.set(Ht,Ut)}let qt=null;if(Ut.complete&&Ut.naturalWidth>0?(qt=Ut,this.lastValidSvgImgMap.set(s.id,Ut)):qt=this.lastValidSvgImgMap.get(s.id)||null,qt&&qt.complete&&qt.naturalWidth>0){const $=Math.max(1,c),dt=Math.max(1,d);if(lt&&(G==null?void 0:G.type)==="Solid"){this.maskBuffer||(this.maskBuffer=document.createElement("canvas"),this.maskCtx=this.maskBuffer.getContext("2d")),this.maskBuffer.width=$,this.maskBuffer.height=dt,this.maskCtx.setTransform(1,0,0,1,0,0),this.maskCtx.globalCompositeOperation="source-over",this.maskCtx.globalAlpha=1,this.maskCtx.filter="none",this.maskCtx.clearRect(0,0,$,dt),this.maskCtx.drawImage(qt,0,0,$,dt),this.maskCtx.globalCompositeOperation="source-in";const Lt=G.color||"#000000",Nt=this.normalizeOpacity(G.opacity??100);this.maskCtx.fillStyle=Lt,this.maskCtx.globalAlpha=Nt,this.maskCtx.fillRect(0,0,$,dt),t.drawImage(this.maskBuffer,-$/2,-dt/2,$,dt)}else u!==0?(t.save(),this.drawRoundRect(t,-$/2,-dt/2,$,dt,u),t.clip(),t.drawImage(qt,-$/2,-dt/2,$,dt),t.restore()):t.drawImage(qt,-$/2,-dt/2,$,dt)}}}else if(g.type==="LineGraph")this.renderLineGraph(t,g,c,d);else if(s.type==="Shape"){if(this.applyPath(t,g,c,d,u),t.save(),r.blur&&r.blur.amount>0&&(t.filter=`blur(${r.blur.amount}px)`),te&&ie==="BackgroundBlur")if(e)t.fillStyle="#000000",t.globalAlpha=1,this.applyPath(t,g,c,d,u),t.fill();else{if(t.shadowColor&&t.shadowColor!=="rgba(0, 0, 0, 0)"&&t.shadowColor!=="transparent"){const G=t.getTransform(),B=t.shadowOffsetX,Q=t.shadowOffsetY;t.shadowOffsetX=B+1e4*G.a,t.shadowOffsetY=Q+1e4*G.b,t.save(),t.translate(-1e4,0),this.applyPath(t,g,c,d,u),t.fillStyle="white",t.fill(),t.restore(),t.shadowOffsetX=B,t.shadowOffsetY=Q,t.shadowColor="transparent"}this.applyBackgroundBlurGlass(t,g,c,d,u,Yt,r)}else if(r.fill){const K=t.globalAlpha;if(((wt=r.fill)==null?void 0:wt.type)==="Image"&&(r.fill.originalSrc||r.fill.src)){const G=r.fill.originalSrc||r.fill.src;let B=this.imageCache.get(G);B||(B=new Image,B.src=G,this.imageCache.set(G,B)),B.complete&&B.naturalWidth>0&&(t.save(),this.applyPath(t,g,c,d,u),t.clip(),this.renderFittedImage(t,B,-c/2,-d/2,c,d,r.fill.fillMode),t.restore())}else{const G=this.createCanvasFill(t,r.fill,c,d);t.fillStyle=G||(typeof r.fill=="string"?r.fill:r.fill.color||"transparent"),t.globalAlpha=K*this.normalizeOpacity(r.fill.opacity??100),this.applyPath(t,g,c,d,u),t.fill()}t.globalAlpha=K}t.restore(),r.stroke&&r.stroke.width>0&&(this.applyPath(t,g,c,d,u),this.applyStrokeAlignment(t,r,g,c,d,u))}else if(s.type==="Frame"||s.type==="Component"&&!s.variant||s.type==="Group"&&!s.isStructuralGroup){const z=i.width??a.width??s.width??c,K=i.height??a.height??s.height??d,G=u;if(t.save(),t.beginPath(),this.drawRoundRect(t,-z/2,-K/2,z,K,G),te&&ie==="BackgroundBlur")if(e)t.fillStyle="#000000",t.globalAlpha=1,t.beginPath(),this.drawRoundRect(t,-z/2,-K/2,z,K,G),t.fill();else{if(t.shadowColor&&t.shadowColor!=="rgba(0, 0, 0, 0)"&&t.shadowColor!=="transparent"){const H=t.getTransform(),lt=t.shadowOffsetX,kt=t.shadowOffsetY;t.shadowOffsetX=lt+1e4*H.a,t.shadowOffsetY=kt+1e4*H.b,t.save(),t.translate(-1e4,0),t.beginPath(),this.drawRoundRect(t,-z/2,-K/2,z,K,G),t.fillStyle="white",t.fill(),t.restore(),t.shadowOffsetX=lt,t.shadowOffsetY=kt,t.shadowColor="transparent"}this.applyBackgroundBlurGlass(t,g,z,K,G,Yt,r)}else if(r.fill&&r.fill.type!=="None"){const Q=t.globalAlpha;if(((gt=r.fill)==null?void 0:gt.type)==="Image"&&(r.fill.originalSrc||r.fill.src)){const H=r.fill.originalSrc||r.fill.src;let lt=this.imageCache.get(H);lt||(lt=new Image,lt.src=H,this.imageCache.set(H,lt)),lt.complete&&lt.naturalWidth>0&&(t.save(),t.beginPath(),this.drawRoundRect(t,-z/2,-K/2,z,K,G),t.clip(),this.renderFittedImage(t,lt,-z/2,-K/2,z,K,r.fill.fillMode),t.restore())}else{const H=this.createCanvasFill(t,r.fill,z,K);t.fillStyle=H||r.fill.color||"transparent",t.globalAlpha=Q*this.normalizeOpacity(r.fill.opacity??100),t.beginPath(),this.drawRoundRect(t,-z/2,-K/2,z,K,G),t.fill(),t.globalAlpha=Q}}if(t.restore(),!e&&(te&&ie==="BackgroundBlur"||r.fill&&r.fill.type!=="None")&&(t.shadowColor="transparent"),r.stroke&&r.stroke.width>0&&r.stroke.isEnabled!==!1){const Q={type:"Rectangle"};t.beginPath(),this.drawRoundRect(t,-z/2,-K/2,z,K,G),this.applyStrokeAlignment(t,r,Q,z,K,G)}}else s.type==="Group"&&s.isStructuralGroup||(s.type==="Component"&&s.variant==="inputbox"?this.renderInputBox(t,s):s.type==="Button"||s.type==="Component"&&(s.variant==="button"||(s.name||"").toLowerCase().includes("button")||(s.name||"").toLowerCase().includes("cta"))?this.renderButton(t,s):s.type==="Component"&&s.variant==="toggle_button"?this.renderToggleButton(t,s):s.type==="Toggle"||s.type==="Component"&&s.variant==="toggle"?this.renderToggle(t,s):s.type==="Slider"||s.type==="Component"&&s.variant==="slider"?this.renderSlider(t,s):s.type==="Dropdown"||s.type==="Component"&&s.variant==="dropdown"?this.renderDropdown(t,s):s.type==="ListView"||s.type==="Component"&&s.variant==="listview"?this.renderListView(t,s):s.type==="Checkbox"||s.type==="Component"&&s.variant==="checkbox"?this.renderCheckbox(t,s):s.type==="RadioGroup"||s.type==="Component"&&s.variant==="radiogroup"?this.renderRadioGroup(t,s):s.type==="BarChart"||s.type==="Component"&&s.variant==="barchart"?this.renderBarChart(t,s):s.type==="PieChart"||s.type==="Component"&&s.variant==="piechart"?this.renderPieChart(t,s):s.type==="Joystick"||s.type==="Component"&&s.variant==="joystick"?this.renderJoystick(t,s):this.frameCount%300===0&&this.warn("[Engine] Unhandled object type in renderObject:",s.type,"Geo:",(It=s.geometry)==null?void 0:It.type));if(e||(this.applyInnerGlowOverlay(t,s,g,c,d,u,r),this.applyArtEffectOverlay(t,s,g,c,d,u)),rt&&rt.enabled&&t.restore(),s.children&&s.children.length>0){const K=s.type==="Frame",G=s.clipsContent!==void 0?s.clipsContent:s.clipContent!==void 0?s.clipContent:K;if(t.save(),G){t.beginPath();const Q=i.width??(a==null?void 0:a.width)??s.width??0,H=i.height??(a==null?void 0:a.height)??s.height??0,lt=i.cornerRadius??(a==null?void 0:a.corner_radius)??s.cornerRadius??0;this.drawRoundRect(t,-Q/2,-H/2,Q,H,lt),t.clip()}let B=0;for(s.children.forEach(Q=>{const H=o.get(Q);if(!H)return;const lt=this.objectStates.get(Q),kt=(lt==null?void 0:lt.geometry)||H.geometry;if(kt&&kt.isMask&&(lt==null?void 0:lt.visible)!==!1){const Et=kt.width||0,Ht=kt.height||0;this.applyObjectTransform(t,Q);const Ut=(lt==null?void 0:lt.corner_radius)??(kt==null?void 0:kt.corner_radius)??0;this.applyPath(t,kt,Et,Ht,Ut),t.clip(),B++}else this.renderObject(t,H,o,e)});B>0;)t.restore(),B--;t.restore()}if(Ae){this.maskCtx.restore(),(i.masks||(s.maskedBy?[{maskId:s.maskedBy,inverted:s.maskInverted===!0,type:s.maskType||"alpha",opacity:s.maskOpacity!==void 0?s.maskOpacity/100:1,feather:s.maskFeather||0,isVisible:!0}]:[])).filter(B=>B.isVisible!==!1&&o.has(B.maskId)).forEach(B=>{var Ut,qt,$,dt,Lt,Nt;const Q=o.get(B.maskId),H=this.objectStates.get(Q.id),lt=B.feather||0,kt=B.inverted===!0,Et=B.opacity!==void 0?typeof B.opacity=="number"?B.opacity:B.opacity/100:1;if((B.type||"alpha")==="luma"){(!this.lumaBuffer||this.lumaBuffer.width!==this.maskBuffer.width||this.lumaBuffer.height!==this.maskBuffer.height)&&(this.lumaBuffer=document.createElement("canvas"),this.lumaBuffer.width=this.maskBuffer.width,this.lumaBuffer.height=this.maskBuffer.height,this.lumaCtx=this.lumaBuffer.getContext("2d",{willReadFrequently:!0}),this.lumaCtx&&(this.lumaCtx.imageSmoothingEnabled=!0,this.lumaCtx.imageSmoothingQuality="high")),this.lumaCtx.setTransform(1,0,0,1,0,0),this.lumaCtx.globalCompositeOperation="source-over",this.lumaCtx.globalAlpha=1,this.lumaCtx.filter="none",this.lumaCtx.clearRect(0,0,this.lumaBuffer.width,this.lumaBuffer.height),this.lumaCtx.save(),this.rootTransform&&this.lumaCtx.setTransform(this.rootTransform),this.applyAbsoluteTransform(this.lumaCtx,Q.id,o),lt>0&&(this.lumaCtx.filter=`blur(${lt}px)`),this.lumaCtx.globalAlpha=Et;const st=(H==null?void 0:H.width)||Q.geometry.width||0,yt=(H==null?void 0:H.height)||Q.geometry.height||0,St=(H==null?void 0:H.corner_radius)??Q.corner_radius??0;if(((Ut=Q.geometry)==null?void 0:Ut.type)==="Text"){const Tt=H!=null&&H.geometry?this.deepMerge(Q.geometry,H.geometry):Q.geometry,Dt=H!=null&&H.style?this.deepMerge(Q.style,H.style):Q.style;this._renderText(this.lumaCtx,Q,{...Tt,width:st,height:yt,corner_radius:St},Dt,H,st,yt,!0,!1)}else if(((qt=Q.geometry)==null?void 0:qt.type)==="Image"){const Tt=Q.geometry.src;if(Tt){let Dt=this.imageCache.get(Tt);Dt||(Dt=new Image,Dt.src=Tt,this.imageCache.set(Tt,Dt)),Dt.complete&&Dt.naturalWidth>0?this.lumaCtx.drawImage(Dt,-st/2,-yt/2,st,yt):(this.applyPath(this.lumaCtx,Q.geometry,st,yt,St),this.lumaCtx.fillStyle="#ffffff",this.lumaCtx.fill())}}else if((($=Q.geometry)==null?void 0:$.type)==="SVG"){const Tt=Q.geometry.svgContent;if(Tt){const Dt=`__lumamask_${Q.id}`;let Rt=this.imageCache.get(Dt);if(!Rt){Rt=new Image;const le=new Blob([Tt],{type:"image/svg+xml"});Rt.src=URL.createObjectURL(le),Rt.onload=()=>{this.artboard&&this.reset()},this.imageCache.set(Dt,Rt)}Rt.complete&&Rt.naturalWidth>0?this.lumaCtx.drawImage(Rt,-st/2,-yt/2,st,yt):(this.applyPath(this.lumaCtx,Q.geometry,st,yt,St),this.lumaCtx.fillStyle="#ffffff",this.lumaCtx.fill())}}else this.applyPath(this.lumaCtx,Q.geometry,st,yt,St),this.lumaCtx.fillStyle="#ffffff",this.lumaCtx.fill();this.lumaCtx.restore();const ee=this.maskCtx.getImageData(0,0,this.canvasWidth,this.canvasHeight),Ct=this.lumaCtx.getImageData(0,0,this.canvasWidth,this.canvasHeight).data,Vt=ee.data;for(let Tt=0;Tt<Vt.length;Tt+=4){const Dt=Ct[Tt],Rt=Ct[Tt+1],le=Ct[Tt+2];let fe=(.299*Dt+.587*Rt+.114*le)/255;kt&&(fe=1-fe),Vt[Tt+3]*=fe}this.maskCtx.putImageData(ee,0,0)}else{this.maskCtx.save(),this.rootTransform&&this.maskCtx.setTransform(this.rootTransform),this.maskCtx.globalCompositeOperation=kt?"destination-out":"destination-in",lt>0&&(this.maskCtx.filter=`blur(${lt}px)`),this.maskCtx.globalAlpha=Et,this.applyAbsoluteTransform(this.maskCtx,Q.id,o);const st=(H==null?void 0:H.width)||Q.geometry.width||0,yt=(H==null?void 0:H.height)||Q.geometry.height||0,St=(H==null?void 0:H.corner_radius)??Q.corner_radius??0;if(((dt=Q.geometry)==null?void 0:dt.type)==="Text"){const ee=H!=null&&H.geometry?this.deepMerge(Q.geometry,H.geometry):Q.geometry,Ct=H!=null&&H.style?this.deepMerge(Q.style,H.style):Q.style;this._renderText(this.maskCtx,Q,{...ee,width:st,height:yt,corner_radius:St},Ct,H,st,yt,!0,!1)}else if(((Lt=Q.geometry)==null?void 0:Lt.type)==="Image"){const ee=Q.geometry.src;if(ee){let Ct=this.imageCache.get(ee);Ct||(Ct=new Image,Ct.src=ee,this.imageCache.set(ee,Ct)),Ct.complete&&Ct.naturalWidth>0?this.maskCtx.drawImage(Ct,-st/2,-yt/2,st,yt):(this.applyPath(this.maskCtx,Q.geometry,st,yt,St),this.maskCtx.fillStyle="#ffffff",this.maskCtx.fill())}}else if(((Nt=Q.geometry)==null?void 0:Nt.type)==="SVG"){const ee=Q.geometry.svgContent;if(ee){const Ct=`__alphamask_${Q.id}`;let Vt=this.imageCache.get(Ct);if(!Vt){Vt=new Image;const Tt=new Blob([ee],{type:"image/svg+xml"});Vt.src=URL.createObjectURL(Tt),Vt.onload=()=>{this.artboard&&this.reset()},this.imageCache.set(Ct,Vt)}Vt.complete&&Vt.naturalWidth>0?this.maskCtx.drawImage(Vt,-st/2,-yt/2,st,yt):(this.applyPath(this.maskCtx,Q.geometry,st,yt,St),this.maskCtx.fillStyle="#ffffff",this.maskCtx.fill())}}else this.applyPath(this.maskCtx,Q.geometry,st,yt,St),this.maskCtx.fillStyle="#ffffff",this.maskCtx.fill();this.maskCtx.restore()}}),de.save(),de.setTransform(1,0,0,1,0,0);const G=s.maskBlendMode||s.blendMode;G&&G!=="Normal"&&(de.globalCompositeOperation=G.toLowerCase()),de.drawImage(this.maskBuffer,0,0),de.restore(),de.restore()}else t.restore()}}applyOuterGlowUnderlay(t,s,o,e,n,i,a,r){var I,_,E;const c=a||s.style||{},d=c.effect,p=c.effects||(d?[d]:[]),u=p.find(P=>P.isEnabled!==!1&&P.type==="Glow"&&(P.mode==="outer"||P.mode==="Outer Glow"||!P.mode));if(!u)return;const g=u.blur||10,h=1e4;let f=u.color||"white";(_=(I=this.artboard)==null?void 0:I.tokens)!=null&&_.colors&&this.artboard.tokens.colors[f]&&(f=this.artboard.tokens.colors[f]),t.save();const v=c.fill&&c.fill.type!=="None",m=p.some(P=>P.isEnabled!==!1&&P.type==="BackgroundBlur"),l=s.type==="Text",b=s.type==="Group";!l&&!b&&(v||m)&&(t.beginPath(),t.rect(-1e6,-1e6,2e6,2e6),s.type==="Frame"||s.type==="Component"?this.drawRoundRect(t,-e/2,-n/2,e,n,i):this._tracePath(t,o,e,n,i),t.clip("evenodd"));const S=t.getTransform();t.shadowColor=f,t.shadowBlur=g,t.shadowOffsetX=h*S.a,t.shadowOffsetY=h*S.b,t.translate(-h,0);let w="black";c.fill&&c.fill.type!=="None"&&(w=this.createCanvasFill(t,c.fill,e,n)||c.fill.color||"black");let C="black";c.stroke&&c.stroke.width>0&&(C=this.createCanvasFill(t,c.stroke.fill||{type:"Solid",color:c.stroke.color},e,n)||c.stroke.color||"black"),t.fillStyle=w,t.strokeStyle=C,t.lineWidth=((E=c.stroke)==null?void 0:E.width)||0;const M=Math.min(u.intensity||1,10);for(let P=0;P<M;P++)if(r)this.renderObject(t,s,r,!0,!0);else if(o.type==="Text")c.fill&&c.fill.type!=="None"&&t.fillText(s.text||"",0,0),c.stroke&&c.stroke.width>0&&t.strokeText(s.text||"",0,0);else if(o.points&&o.type==="Path")this.applyPath(t,o,e,n,i),c.fill&&c.fill.type!=="None"&&t.fill(),c.stroke&&c.stroke.width>0&&t.stroke();else{if(t.beginPath(),o.type==="circle"||o.type==="Ellipse"){const A=e/2,T=n/2;t.ellipse(0,0,A,T,0,0,Math.PI*2)}else i!==0?this.drawRoundRect(t,-e/2,-n/2,e,n,i):t.rect(-e/2,-n/2,e,n);const L=c.fill&&c.fill.type!=="None",k=c.stroke&&c.stroke.width>0;(L||!L&&!k)&&t.fill(),k&&t.stroke()}t.restore()}_renderText(t,s,o,e,n,i,a,r=!1,c=!1){var ct,Mt,bt,wt,gt,It,ut,Ot,Wt;let d=(o==null?void 0:o.text)||(s==null?void 0:s.text)||(s==null?void 0:s.name)||"";if(o.textInputId&&!r){const q=this.inputs.get(o.textInputId);q!==void 0&&(d=String(q),n.geometry&&n.geometry.type==="Text"&&(n.geometry.text=d))}if(o.svgPath){const q=o.svgPath;t.save();const ft=((ct=e==null?void 0:e.fill)==null?void 0:ct.color)||"#000000",xt=((Mt=e==null?void 0:e.fill)==null?void 0:Mt.opacity)!==void 0?(bt=e==null?void 0:e.fill)==null?void 0:bt.opacity:1;t.fillStyle=ft,t.globalAlpha*=xt;const At=new Path2D(q);t.fill(At),t.restore();return}let p=d||"";o.enableSegments===!0&&o.segments&&Array.isArray(o.segments)&&(p=o.segments.map(q=>q&&q.text?q.text:"").join(""));const u=o.textCase||"none";u==="uppercase"?p=p.toUpperCase():u==="lowercase"?p=p.toLowerCase():u==="capitalize"&&(p=p.replace(/\b\w/g,q=>q.toUpperCase()));let g=((wt=o.fontWeight)==null?void 0:wt.toString())||"400",h=o.fontStyle||"normal";g.toLowerCase().includes("italic")&&(h="italic",g=g.replace(/italic/gi,"").trim()||"400");const f=this.mapFontWeight(g),v=Math.max(1,o.fontSize||32);let m=o.fontFamily||"Inter";const l=["Bold","SemiBold","Medium","Regular","Light","Thin","ExtraBold","Black","Italic"];l.forEach(q=>{const ft=new RegExp(`[\\s-]${q}$`,"i");ft.test(m)&&(m=m.replace(ft,"").trim())});const b=o.smallCaps===!0,w=`${b?"small-caps ":""}${h} ${f} ${v}px "${m}", sans-serif`;t.font=w;const C=o.textVerticalAlign||"top";t.textBaseline="top";const M=o.textAlign||"left";t.textAlign=M;let I=0;if(typeof o.letterSpacing=="number")I=o.letterSpacing;else if(typeof o.letterSpacing=="object"&&o.letterSpacing.value!==void 0){const q=o.letterSpacing;I=q.unit==="PERCENT"?q.value/100*v:q.value}t.letterSpacing!==void 0&&(t.letterSpacing=`${I}px`);const _=o.kerning||"auto",E=o.kerningValue||0;_==="manual"&&E!==0&&(t.letterSpacing=`${I+E}px`);const P=o.paragraphSpacing||0;let L=o.lineHeight??1.2;typeof L=="string"&&(L=parseFloat(L)),L>5&&v>0&&(L=L/v);const k=(L||1.2)*v,A=o.isPointText===!0||!o.width||o.width<=0,T=((gt=o.padding)==null?void 0:gt.left)||((It=o.padding)==null?void 0:It.right)||0,R=A?1e5:o.width&&o.width>0?Math.ceil(o.width)-T*2:1e5;o.autoHeight;const F=ts({text:p,fontFamily:m,fontSize:v,fontWeight:f,fontStyle:h,lineHeight:L,width:R,letterSpacing:I,paragraphSpacing:P,paragraphIndent:o.paragraphIndent||0,segments:o.segments,enableSegments:o.enableSegments,textCase:u,hyphenation:o.hyphenation,composer:o.composer,balanceRaggedLines:o.balanceRaggedLines}),O=F.lines||[],W=F.maxFontSize||v,V=this.fontLeadingFactors[m]??.5,U=(k-v)*V;let Y=F.height,X=i,ot=a;if(X===0||ot===0||X>=1e5||A){let q=0,ft=0;const xt=F.fullText||p;(O||[]).forEach(At=>{const Pt=At.text||"",vt=t.measureText(Pt).width+(Pt.length>0?(Pt.length-1)*I:0);vt>q&&(q=vt),ft+=Pt.length,ft<xt.length&&(xt[ft]===`
8
- `||xt[ft]==="\r")&&(ft++,xt[ft-1]==="\r"&&xt[ft]===`
9
- `&&ft++)}),(X===0||X>=1e5)&&(X=q),ot===0&&(ot=Y||0)}let J=-Y/2;a>0&&a>Y&&(C==="top"?J=-a/2:C==="middle"||C==="center"?J=-Y/2:C==="bottom"&&(J=a/2-Y));const at=C==="top"&&a>0?0:U;let j=J+at+U,it=null,x=0;if(o.pathId&&this.artboard){const q=this.artboard.objects.find(ft=>ft.id===o.pathId);if(q&&q.type==="Shape"&&((ut=q.geometry)==null?void 0:ut.type)==="Path"){const ft=this.objectStates.get(q.id),xt=ft!=null&&ft.geometry?this.deepMerge(q.geometry,ft.geometry):q.geometry,At=(ft==null?void 0:ft.scale_x)!==void 0?(q.width||0)*ft.scale_x:q.width||0,Pt=(ft==null?void 0:ft.scale_y)!==void 0?(q.height||0)*ft.scale_y:q.height||0;it={geo:xt,obj:q,w:At,h:Pt},x=this.getPerimeter(xt,At,Pt)}}const D=(q,ft)=>{var At,Pt;if(!I&&!b&&!r&&(!o.enableSegments||!((At=o.segments)!=null&&At.length)))return t.measureText(q).width;let xt=0;for(let vt=0;vt<q.length;vt++){const Xt=ft+vt;let zt=0;if(o.enableSegments===!0&&((Pt=o.segments)==null?void 0:Pt.length)>0){let Gt=0,Yt=null;for(const te of o.segments){if(Xt<Gt+(te.text||"").length){Yt=te;break}Gt+=(te.text||"").length}if(Yt){t.save();let te=Yt.fontFamily||o.fontFamily||"Inter";const ie=this.mapFontWeight((Yt.fontWeight||o.fontWeight||"400").toString()),ce=Yt.fontStyle||h,ve=Yt.fontSize||v;t.font=`${ce} ${ie} ${ve}px "${te}", sans-serif`,zt=t.measureText(q[vt]).width,t.restore()}else zt=t.measureText(q[vt]).width}else zt=t.measureText(q[vt]).width;xt+=zt+I}return xt-(q.length>0?I:0)},N=(q,ft,xt,At,Pt)=>{var ve,_e;const Xt=(Pt===0||p[Pt-1]===`
10
- `||p[Pt-1]==="\r")&&o.paragraphIndent?o.paragraphIndent:0,zt=(!r||c)&&(s.behaviors||[]).some(ge=>ge.enabled&&(ge.type.toString().includes("Text")||["Typewriter","Scramble","Wave","Bounce","GlitchText","Reveal3D","RevealSlide","RevealBlur"].includes(ge.type))),Gt=!o.pathId&&!zt&&(o.enableSegments!==!0||!o.segments||o.segments.length===0),Yt=o.baselineShift||0,te=xt+Yt,ie=D(q,Pt);let ce=ft+Xt;if(M==="center"?ce-=ie/2:M==="right"&&(ce-=ie),Gt){t.font=w;const ge=t.textAlign;t.textAlign="left",At?t.strokeText(q,ce,te):t.fillText(q,ce,te),t.textAlign=ge}else{const ge=t.textAlign;t.textAlign="left";const Ee=Pt+q.length>=p.length||p[Pt+q.length]===`
11
- `||p[Pt+q.length]==="\r";let Zt=0,Me=0;const Re=o.justifyMinWordSpacing,Ie=o.justifyMaxWordSpacing;if(M==="justify"&&!Ee&&ie>0&&!o.pathId){const he=A?ie:R-T*2+0,mt=Math.max(0,he-ie);for(let rt=0;rt<q.length;rt++)q[rt]===" "&&Me++;if(Me>0){const rt=t.measureText(" ").width;let z=Re||rt*.5,K=Ie||rt*2.5;Zt=Math.max(0,Math.min(mt/Me,K-z))}}let de=o.pathOffset||0;o.pathId&&x>0&&it&&(M==="center"?de+=x/2-ie/2:M==="right"&&(de+=x-ie));let me=ce;const Ae=r&&!c?[]:((ve=s.behaviors)==null?void 0:ve.filter(he=>[tt.Typewriter,tt.Scramble,tt.Wave,tt.Bounce,tt.GlitchText,tt.TextTrail,tt.Reveal3D,tt.RevealSlide,tt.RevealBlur,tt.TextLiquid,tt.TextVortex,tt.TextExplosion,tt.TextRain,tt.TextGravity,tt.TextElastic,tt.TextMatrix,tt.TextNeon,tt.TextGlitch3D,tt.TextDissolve,tt.TextOrganic,tt.TextBreathe,tt.TextFloral,tt.TextSmoke,tt.TextVariable,tt.TextMagnet,tt.TextSpin,tt.TextZing,tt.TextPerspective,tt.TextMirror].includes(he.type)&&he.enabled))||[];for(let he=0;he<q.length;he++){let mt=q[he];const rt=Pt+he;let z=0,K=0,G=1,B=1,Q=0,H=1,lt=mt;Ae.forEach($=>{const dt=$.settings||{},Lt=dt.strength||1,Nt=Date.now();if($.type===tt.Typewriter)this.currentTime*(dt.speed||1)-rt*(dt.stagger||.05)<0&&(H=0);else if($.type===tt.Scramble)Math.max(0,Math.min(1,this.currentTime/(dt.duration||1.5))-rt*.02)<1&&Math.random()<.3&&(lt="$%#@!*&"[Math.floor(Math.random()*7)]);else if($.type===tt.Wave)K+=Math.sin(this.currentTime*5*(dt.speed||1)+rt*(dt.frequency||1))*(dt.amplitude||20)*Lt;else if($.type===tt.Bounce){const st=Math.max(0,this.currentTime%2-rt*(dt.stagger||.1));st<1&&(K-=Math.abs(Math.sin(st*Math.PI))*(dt.height||50)*Lt)}else if($.type===tt.TextTrail){const st=this.pointerHistory[Math.max(0,this.pointerHistory.length-1-rt*(dt.delay||5))];st&&(z+=(st.x-(n.x+me))*Lt*.2,K+=(st.y-(n.y+xt+K))*Lt*.2)}else if($.type===tt.Reveal3D){const st=Math.max(0,Math.min(1,this.currentTime*(dt.speed||1)-rt*(dt.stagger||.1)));G*=st,B*=st,H=st}else if($.type===tt.RevealSlide){const st=Math.max(0,Math.min(1,this.currentTime*1.5-rt*.05)),yt=(1-st)*(dt.distance||40)*Lt,St=dt.direction||"up";St==="up"?K-=yt:St==="down"?K+=yt:St==="left"?z-=yt:St==="right"&&(z+=yt),H=st}else if($.type===tt.RevealBlur){const st=Math.max(0,Math.min(1,this.currentTime*1.2-rt*.1));H=st,z+=(1-st)*5}else if($.type===tt.TextLiquid){const st=Math.max(0,Math.sin(Nt*.001*(dt.speed||1)+rt*.5));K+=st*(dt.amplitude||10)*Lt,B*=1+st*.2}else if($.type===tt.TextVortex){const st=Nt*.002*(dt.speed||1)+rt*.2,yt=(1-(Math.sin(Nt*.001)*.5+.5))*(dt.radius||50);z+=Math.cos(st)*yt*Lt,K+=Math.sin(st)*yt*Lt}else if($.type===tt.TextExplosion){const st=dt.force||1,yt=this.currentTime%2;if(yt<1){const St=(rt/q.length-.5)*Math.PI*2,ee=yt*100*st;z+=Math.cos(St)*ee*Lt,K+=Math.sin(St)*ee*Lt,H=1-yt}}else if($.type===tt.TextRain){const st=dt.speed||1,yt=dt.height||100,St=(Nt*.001*st+rt*.1)%1;K-=(1-St)*yt*Lt,H=St>.1?1:St*10}else if($.type===tt.TextGravity){const st=dt.gravity||9.8,yt=this.currentTime%3/3,St=.5*st*Math.pow(yt*10,2);St<100?K+=St*Lt:K+=100*Lt}else if($.type===tt.TextMatrix){const st=dt.speed||1;if(Math.random()<.1*st){const St="0123456789ABCDEF!@#$%^&*";lt=St[Math.floor(Math.random()*St.length)]}H=.3+(Math.sin(Nt*.01*st+rt)+1)/2*.7}else if($.type===tt.TextNeon){const st=Math.random()>.95?.5:1;H=(.7+(Math.sin(Nt*.005)+1)/2*.3)*st}else if($.type===tt.TextDissolve)Math.sin(rt*1.5+Nt*.002*(dt.speed||1))>.5&&(H=0);else if($.type===tt.TextOrganic){const st=dt.speed||1,yt=dt.amplitude||10;z+=Math.sin(Nt*.002*st+rt)*yt*Lt,K+=Math.cos(Nt*.0015*st+rt*.7)*yt*Lt}else if($.type===tt.TextBreathe){const yt=1+(Math.sin(Nt*.003+rt*.2)+1)/2*.2*Lt;G*=yt,B*=yt}else if($.type===tt.TextSpin){const st=dt.speed||1;Q+=Nt*.01*st+rt}else if($.type===tt.TextMagnet){const st=this.pointerHistory[this.pointerHistory.length-1];if(st){const yt=st.x-(n.x+me),St=st.y-(n.y+xt);Q=Math.atan2(St,yt)}}else if($.type===tt.TextPerspective){const st=q.length/2,yt=(rt-st)/st,St=1-Math.abs(yt)*.3*Lt;G*=St,B*=St,z+=yt*20*Lt}else if($.type===tt.TextMirror)H*=.8;else if($.type===tt.TextFloral){const st=dt.speed||1,yt=dt.stagger||.1,St=(Nt*.001*st+rt*yt)%2;St<1&&(G*=St,B*=St,Q+=St*Math.PI)}else if($.type===tt.TextSmoke){const st=dt.speed||1,yt=dt.height||50,St=(Nt*5e-4*st+rt*.2)%1;K-=St*yt*Lt,z+=Math.sin(Nt*.002+rt)*5*Lt,H=1-St}else if($.type===tt.TextVariable){const st=dt.speed||1,yt=dt.intensity||1.5,St=(Math.sin(Nt*.004*st+rt*.3)+1)/2;G*=1+St*(yt-1)*Lt}else if($.type===tt.TextZing){const st=dt.speed||2,yt=dt.distance||100,St=(Nt*.002*st+rt*.05)%1;z+=(1-St)*yt*Lt,H=St}else if($.type===tt.TextElastic){const st=dt.stiffness||.2,yt=dt.damping||.1,St=Math.sin(Nt*.01)*Math.exp(-Nt*.001*yt);B*=1+St*st*Lt}else if($.type===tt.TextGlitch3D){const st=dt.intensity||5;Math.random()<.2&&(z+=(Math.random()-.5)*st,K+=(Math.random()-.5)*st,H=.8)}else if($.type===tt.GlitchText){const st=dt.intensity||5;Math.random()<.1&&(z+=(Math.random()-.5)*st,K+=(Math.random()-.5)*st,Math.random()<.05&&(H=.5))}});let kt=null,Et=o.textDecoration||"none",Ht=v;if(o.enableSegments===!0&&((_e=o.segments)==null?void 0:_e.length)>0){let $=0,dt=null;for(const Lt of o.segments){if(rt<$+(Lt.text||"").length){dt=Lt;break}$+=(Lt.text||"").length}if(dt){let Lt=dt.fontFamily||o.fontFamily||"Inter";l.forEach(yt=>{const St=new RegExp(`[\\s-]${yt}$`,"i");St.test(Lt)&&(Lt=Lt.replace(St,"").trim())});const Nt=this.mapFontWeight((dt.fontWeight||o.fontWeight||"400").toString()),st=dt.fontStyle||h;Ht=dt.fontSize||v,t.font=`${st} ${Nt} ${Ht}px "${Lt}", sans-serif`,dt.fill&&(kt=dt.fill),dt.textDecoration&&(Et=dt.textDecoration),Ht<W&&(K+=(W-Ht)*.85)}}else t.font=w;const Ut=t.globalAlpha;t.globalAlpha*=H,t.save();const qt=t.measureText(lt).width;if(it&&x>0){const $=me-ce+qt/2,Lt=(de+$)/x,Nt=this.getPointOnPath(it.geo,it.w,it.h,Math.abs(Lt%1)),st=Nt.angle,yt=xt+K+(o.pathOffsetY||0),St=o.pathSide==="right"?-1:1,ee=Math.cos(st+Math.PI/2)*yt*St,Ct=Math.sin(st+Math.PI/2)*yt*St;t.translate(Nt.x+ee+z,Nt.y+Ct),t.rotate(st+Q+(St===-1?Math.PI:0))}else t.translate(me+z+qt/2,xt+K),Q!==0&&t.rotate(Q);if(t.scale(G,B),kt&&!r&&!c){const $=this.createCanvasFill(t,kt,X,ot);t.fillStyle=$||kt.color||"#000000"}else if(!r&&!c){const $=this.createCanvasFill(t,e.fill,X,ot);t.fillStyle=$||e.fill.color||"#000000"}if(H>0)if(r||c){const $=c?"#000000":this.createCanvasFill(t,e.fill,X,ot);t.fillStyle=$||e.fill.color||"#ffffff",t.fillText(lt,-qt/2,0)}else At?t.strokeText(lt,-qt/2,0):t.fillText(lt,-qt/2,0);Et!=="none"&&!r&&this.drawTextDecoration(t,Et,0,0,qt,Ht),t.restore(),t.globalAlpha=Ut,M==="justify"&&Zt>0&&lt===" "&&!Ee?me+=qt+I+Zt:me+=qt+I}t.textAlign=ge}};if(r){let q=0,ft=j;(O||[]).forEach(xt=>{const At=xt.text||"",Pt=p.indexOf(At,q);Pt!==-1&&(q=Pt);let vt=-X/2;M==="center"?vt=0:M==="right"&&(vt=X/2),N(At,vt,ft,!1,q),q+=At.length,ft+=k})}else if(c){let q=0,ft=j;(O||[]).forEach(xt=>{const At=xt.text||"";let Pt=-X/2;M==="center"?Pt=0:M==="right"&&(Pt=X/2),N(At,Pt,ft,!1,q),q+=At.length,q<p.length&&(p[q]===`
4
+ `&&L++);g={...g,widths:_,indentApplied:!0}}if(!g)return{width:a,height:0,lineCount:0,lines:[]};let S=i;typeof S=="string"&&(S=parseFloat(S)),S>5&&o>0&&(S=S/o),r!==0&&(CanvasRenderingContext2D.prototype.measureText=b);let w;try{const _=g.maxFontSize||o;if(a>=1e5){const E=h.split(/\r\n|\r|\n/);w={lines:E.map(P=>({text:P,width:0})),height:E.length*(S*_),lineCount:E.length}}else w=He.layoutWithLines(g,a,S*_)}finally{r!==0&&c&&(CanvasRenderingContext2D.prototype.measureText=c)}let C=(w==null?void 0:w.height)!==void 0&&w.height>0?w.height:(((I=w==null?void 0:w.lines)==null?void 0:I.length)||0)*S*o;if(l>0&&w&&w.lines&&w.lines.length>1){let _=0;const E=g.fullText||t;for(let P=0;P<w.lines.length-1;P++)_+=w.lines[P].text.length,(E[_]===`
5
+ `||E[_]==="\r")&&(C+=l,_++,E[_-1]==="\r"&&E[_]===`
6
+ `&&_++)}let M=(w==null?void 0:w.lines)||[];return y.composer==="every-line"&&M.length>1&&(M=ws(M)),y.balanceRaggedLines===!0&&M.length>1&&(M=Ms(M)),{width:a,height:C,lineCount:M.length,lines:M}}function es(y,t,s){let o=String(y||"").trim();if(o&&!isNaN(Number(o))&&!o.includes(" ")&&!o.endsWith("fr")&&!o.endsWith("px")&&!o.endsWith("%")){const r=Math.max(1,parseInt(o));o=new Array(r).fill("1fr").join(" ")}const e=o.split(/\s+/).filter(Boolean),n=new Array(e.length).fill(0);let i=t-(e.length-1)*s,a=0;if(e.forEach((r,l)=>{if(r.endsWith("px")){const d=parseFloat(r);n[l]=d,i-=d}else r.endsWith("fr")?a+=parseFloat(r):r==="auto"&&(n[l]=100,i-=100)}),a>0&&i>0){const r=i/a;e.forEach((l,d)=>{l.endsWith("fr")&&(n[d]=r*parseFloat(l))})}return n}function ss(y,t,s){try{const o=y.autoLayout;return!o||!o.enabled?{childUpdates:[]}:(o.mode||"linear")==="grid"?ks(y,t,s):Is(y,t,s)}catch(o){return console.error("Layout Engine Error:",o),{childUpdates:[]}}}function Is(y,t,s){var k,A;const o=y.autoLayout,{direction:e,spacing:n,padding:i,align:a,wrap:r}=o,l=e==="vertical",d=t.map(T=>{const R=s(T.id),F=T.geometry;let O=(R==null?void 0:R.width)??F.width??100,W=(R==null?void 0:R.height)??F.height??100;if(F.type==="Ellipse"||F.type==="Polygon"||F.type==="Star"){const V=(R==null?void 0:R.radius)??F.radius??(R==null?void 0:R.outer_radius)??F.outer_radius??50;O=V*2,W=V*2}else if(F.type==="Text"){const V=ts({text:(R==null?void 0:R.text)??F.text??"",fontFamily:F.fontFamily,fontSize:F.fontSize,fontWeight:F.fontWeight,fontStyle:F.fontStyle,lineHeight:F.lineHeight,width:F.width||200,letterSpacing:F.letterSpacing,paragraphSpacing:F.paragraphSpacing,paragraphIndent:F.paragraphIndent,textCase:F.textCase,segments:F.segments,enableSegments:F.enableSegments});W=V.height,F.width||(O=V.width)}return O*=T.transform.scale_x||1,W*=T.transform.scale_y||1,{id:T.id,w:O,h:W,original:T}});let p=y.width,u=y.height;const m=((k=y.layoutProps)==null?void 0:k.width)==="hug",h=((A=y.layoutProps)==null?void 0:A.height)==="hug",f=[];let v=[],g=0,c=0;const b=p-i.left-i.right,S=u-i.top-i.bottom;d.forEach(T=>{r&&v.length>0&&(l?c+n+T.h>S:g+n+T.w>b)?(f.push({children:v,width:g,height:c}),v=[T],g=T.w,c=T.h):(v.push(T),l?(g=Math.max(g,T.w),c+=(v.length>1?n:0)+T.h):(g+=(v.length>1?n:0)+T.w,c=Math.max(c,T.h)))}),v.length>0&&f.push({children:v,width:g,height:c}),m&&!l&&(p=Math.max(...f.map(T=>T.width),0)+i.left+i.right),h&&l&&(u=Math.max(...f.map(T=>T.height),0)+i.top+i.bottom);const w=[];let C=i.left,M=i.top;const I=a.toLowerCase(),_=I==="center"||I.endsWith("-center"),E=I.endsWith("-right"),P=I==="center"||I.startsWith("center-"),L=I.startsWith("bottom-");return f.forEach(T=>{let R=C,F=M;l?P?F=i.top+(u-i.top-i.bottom-T.height)/2:L&&(F=u-i.bottom-T.height):_?R=i.left+(p-i.left-i.right-T.width)/2:E&&(R=p-i.right-T.width),T.children.forEach(O=>{var Y,ot;let W=R,V=F;l?_?W+=(T.width-O.w)/2:E&&(W+=T.width-O.w):P?V+=(T.height-O.h)/2:L&&(V+=T.height-O.h);const U=((Y=O.original.layoutProps)==null?void 0:Y.width)==="fill",D=((ot=O.original.layoutProps)==null?void 0:ot.height)==="fill";w.push({id:O.id,x:W+O.w/2-p/2,y:V+O.h/2-u/2,width:U&&l?T.width:void 0,height:D?l?void 0:T.height:void 0}),l?F+=O.h+n:R+=O.w+n}),l?C+=T.width+n:M+=T.height+n}),{frameWidth:m?p:void 0,frameHeight:h?u:void 0,childUpdates:w}}function ks(y,t,s){const o=y.autoLayout;if(!o)return{childUpdates:[]};const{gridColumns:e,gridRows:n,columnGap:i=0,rowGap:a=0,padding:r,align:l}=o;let d=y.width,p=y.height;const u=d-r.left-r.right,m=p-r.top-r.bottom,h=es(e||"1fr",u,i),f=es(n||"auto",m,a),v=h.length>0?h.reduce((E,P)=>E+P,0)+(h.length-1)*i:0,g=f.length>0?f.reduce((E,P)=>E+P,0)+(f.length-1)*a:0,c=l.toLowerCase(),b=c==="center"||c.endsWith("-center"),S=c.endsWith("-right"),w=c==="center"||c.startsWith("center-"),C=c.startsWith("bottom-");let M=0,I=0;b?M=(u-v)/2:S&&(M=u-v),w?I=(m-g)/2:C&&(I=m-g);const _=[];return t.forEach((E,P)=>{var ot,J;const L=P%h.length||0,k=Math.floor(P/h.length)||0;k>=f.length&&f.push(100);const A=h[L],T=f[k];let R=r.left+M+h.slice(0,L).reduce((at,j)=>at+j+i,0),F=r.top+I+f.slice(0,k).reduce((at,j)=>at+j+a,0);const O=s(E.id),W=E.geometry;let V=(O==null?void 0:O.width)??W.width??100,U=(O==null?void 0:O.height)??W.height??100;if(W.type==="Ellipse"||W.type==="Polygon"||W.type==="Star"){const at=(O==null?void 0:O.radius)??W.radius??(O==null?void 0:O.outer_radius)??W.outer_radius??50;V=at*2,U=at*2}V*=E.transform.scale_x||1,U*=E.transform.scale_y||1;let D=R,Y=F;b?D+=(A-V)/2:S&&(D+=A-V),w?Y+=(T-U)/2:C&&(Y+=T-U),_.push({id:E.id,x:D+V/2-d/2,y:Y+U/2-p/2,width:((ot=E.layoutProps)==null?void 0:ot.width)==="fill"?A:void 0,height:((J=E.layoutProps)==null?void 0:J.height)==="fill"?T:void 0})}),{childUpdates:_}}class is{constructor(){ht(this,"world",null);ht(this,"bodies",new Map);ht(this,"colliders",new Map);ht(this,"joints",new Map);ht(this,"initialized",!1);ht(this,"bodyIdByCollider",new Map);ht(this,"onCollisionCB",null);ht(this,"eventQueue",null)}setCollisionCallback(t){this.onCollisionCB=t}async init(t){this.initialized||(await ae.init(),this.world=new ae.World(new ae.Vector2(t.x*100,t.y*100)),this.eventQueue=new ae.EventQueue(!0),this.initialized=!0)}destroy(){this.bodies.clear(),this.colliders.clear(),this.joints.clear(),this.world&&(this.world.free(),this.world=null),this.initialized=!1}setGravity(t){this.world&&(this.world.gravity=new ae.Vector2(t.x*100,t.y*100))}createBody(t){if(!this.world){console.warn("[RapierPhysics] World not initialized");return}this.bodies.has(t.id)&&this.removeBody(t.id);const s=t.isStatic?ae.RigidBodyDesc.fixed():ae.RigidBodyDesc.dynamic();s.setTranslation(t.x,t.y),t.rotation!==void 0&&s.setRotation(t.rotation);const o=this.world.createRigidBody(s);let e;switch(t.type){case"Rectangle":e=ae.ColliderDesc.cuboid(t.width/2,t.height/2);break;case"Ellipse":e=ae.ColliderDesc.ball(Math.max(t.width,t.height)/2);break;case"Triangle":case"Star":case"Polygon":e=ae.ColliderDesc.cuboid(t.width/2,t.height/2);break;default:e=ae.ColliderDesc.cuboid(t.width/2,t.height/2)}if(t.friction!==void 0&&e.setFriction(t.friction),t.restitution!==void 0&&e.setRestitution(t.restitution),t.density!==void 0)e.setDensity(t.density);else if(t.mass!==void 0&&!t.isStatic){const i=t.width*t.height;e.setDensity(t.mass/i)}t.isSensor&&e.setSensor(!0);const n=this.world.createCollider(e,o);this.bodyIdByCollider.set(n.handle,t.id),t.frictionAir!==void 0&&o.setLinearDamping(t.frictionAir*10),this.bodies.set(t.id,o),this.colliders.set(t.id,n)}removeBody(t){const s=this.bodies.get(t),o=this.colliders.get(t);o&&this.bodyIdByCollider.delete(o.handle),s&&this.world&&(this.world.removeRigidBody(s),this.bodies.delete(t),this.colliders.delete(t))}step(t){if(!this.world)return;this.world.step(this.eventQueue);const s=this.onCollisionCB,o=this.eventQueue;s&&o&&o.drainContactEvents((e,n,i)=>{const a=this.bodyIdByCollider.get(e),r=this.bodyIdByCollider.get(n);a&&r&&s(a,r,i)})}getPosition(t){const s=this.bodies.get(t);if(!s)return null;const o=s.translation();return{x:o.x,y:o.y}}getRotation(t){const s=this.bodies.get(t);return s?s.rotation():null}getVelocity(t){const s=this.bodies.get(t);if(!s)return null;const o=s.linvel();return{x:o.x,y:o.y}}setPosition(t,s,o){const e=this.bodies.get(t);e&&e.setTranslation(new ae.Vector2(s,o),!0)}setRotation(t,s){const o=this.bodies.get(t);o&&o.setRotation(s,!0)}setVelocity(t,s,o){const e=this.bodies.get(t);e&&e.setLinvel(new ae.Vector2(s,o),!0)}setAngularVelocity(t,s){const o=this.bodies.get(t);o&&o.setAngvel(s,!0)}applyForce(t,s,o){const e=this.bodies.get(t);e&&e.addForce(new ae.Vector2(s,o),!0)}applyImpulse(t,s,o){const e=this.bodies.get(t);e&&e.applyImpulse(new ae.Vector2(s,o),!0)}createJoint(t){if(!this.world){console.warn("[RapierPhysics] World not initialized");return}this.joints.has(t.id)&&this.removeJoint(t.id);const s=this.bodies.get(t.bodyA),o=this.bodies.get(t.bodyB);if(!s||!o){console.warn(`[RapierPhysics] Cannot create joint ${t.id}: bodyA (${t.bodyA}) or bodyB (${t.bodyB}) not found`);return}const e=new ae.Vector2(t.anchorA.x,t.anchorA.y),n=new ae.Vector2(t.anchorB.x,t.anchorB.y);let i;if(t.type==="Distance"){const a=t.length??100,r=t.stiffness??100,l=t.damping??10;i=ae.JointData.spring(a,r,l,e,n)}else i=ae.JointData.revolute(e,n);try{const a=this.world.createImpulseJoint(i,s,o,!0);this.joints.set(t.id,a)}catch(a){console.error(`[RapierPhysics] Failed to create joint ${t.id}:`,a)}}removeJoint(t){const s=this.joints.get(t);if(s&&this.world){try{this.world.removeImpulseJoint(s,!0)}catch(o){console.error(`[RapierPhysics] Failed to remove joint ${t}:`,o)}this.joints.delete(t)}}}const ns=y=>y,Ts=y=>y>0?1:0,Ps=y=>y<1?0:1,os=y=>y*y,as=y=>y*(2-y),rs=y=>y<.5?2*y*y:-1+(4-2*y)*y,_s=y=>y*y*y,Es=y=>--y*y*y+1,As=y=>y<.5?4*y*y*y:(y-1)*(2*y-2)*(2*y-2)+1,Os=y=>y*y*y*y,Ls=y=>1- --y*y*y*y,Rs=y=>y<.5?8*y*y*y*y:1-8*--y*y*y*y,Fs=y=>y*y*y*y*y,$s=y=>1+--y*y*y*y*y,Bs=y=>y<.5?16*y*y*y*y*y:1+16*--y*y*y*y*y,xs=y=>1-Math.cos(y*Math.PI/2),Ws=y=>Math.sin(y*Math.PI/2),Ds=y=>-(Math.cos(Math.PI*y)-1)/2,Ys=y=>y===0?0:Math.pow(2,10*(y-1)),Xs=y=>y===1?1:1-Math.pow(2,-10*y),Ns=y=>y===0?0:y===1?1:y<.5?Math.pow(2,20*y-10)/2:(2-Math.pow(2,-20*y+10))/2,Vs=y=>1-Math.sqrt(1-y*y),zs=y=>Math.sqrt(1- --y*y),Gs=y=>y<.5?(1-Math.sqrt(1-4*y*y))/2:(Math.sqrt(1-(-2*y+2)*(-2*y+2))+1)/2,Ue=1.70158,qe=Ue*1.525,ls=Ue+1,Hs=y=>ls*y*y*y-Ue*y*y,Us=y=>1+ls*Math.pow(y-1,3)+Ue*Math.pow(y-1,2),qs=y=>y<.5?Math.pow(2*y,2)*((qe+1)*2*y-qe)/2:(Math.pow(2*y-2,2)*((qe+1)*(y*2-2)+qe)+2)/2,cs=2*Math.PI/3,hs=2*Math.PI/4.5,Js=y=>y===0?0:y===1?1:-Math.pow(2,10*y-10)*Math.sin((y*10-10.75)*cs),Ks=y=>y===0?0:y===1?1:Math.pow(2,-10*y)*Math.sin((y*10-.75)*cs)+1,Qs=y=>y===0?0:y===1?1:y<.5?-(Math.pow(2,20*y-10)*Math.sin((20*y-11.125)*hs))/2:Math.pow(2,-20*y+10)*Math.sin((20*y-11.125)*hs)/2+1,Je=y=>y<1/2.75?7.5625*y*y:y<2/2.75?7.5625*(y-=1.5/2.75)*y+.75:y<2.5/2.75?7.5625*(y-=2.25/2.75)*y+.9375:7.5625*(y-=2.625/2.75)*y+.984375,Zs=y=>1-Je(1-y),js=Je,ti=y=>y<.5?(1-Je(1-2*y))/2:(1+Je(2*y-1))/2,Ze=new Map,ze=(y,t,s,o)=>{const e=`${y},${t},${s},${o}`;if(Ze.has(e))return Ze.get(e);const n=d=>(1-3*s+3*y)*d*d*d+(3*s-6*y)*d*d+3*y*d,i=d=>(1-3*o+3*t)*d*d*d+(3*o-6*t)*d*d+3*t*d,a=d=>3*(1-3*s+3*y)*d*d+2*(3*s-6*y)*d+3*y,r=d=>{let p=d;for(let u=0;u<8;u++){const m=n(p)-d;if(Math.abs(m)<1e-6)return p;const h=a(p);if(Math.abs(h)<1e-6)break;p=p-m/h}return p},l=d=>d===0?0:d===1?1:i(r(d));return Ze.set(e,l),l},fs=y=>{const t=y.match(/cubic-bezier\s*\(\s*([-?\d.]+)\s*,\s*([-?\d.]+)\s*,\s*([-?\d.]+)\s*,\s*([-?\d.]+)\s*\)/);if(!t)return null;const[,s,o,e,n]=t.map(Number);return ze(s,o,e,n)},ds={ease:ze(.25,.1,.25,1),"ease-in":ze(.42,0,1,1),"ease-out":ze(0,0,.58,1),"ease-in-out":ze(.42,0,.58,1)},Ke={Linear:ns,EaseInQuad:os,EaseOutQuad:as,EaseInOutQuad:rs,EaseInCubic:_s,EaseOutCubic:Es,EaseInOutCubic:As,EaseInQuart:Os,EaseOutQuart:Ls,EaseInOutQuart:Rs,EaseInQuint:Fs,EaseOutQuint:$s,EaseInOutQuint:Bs,EaseInSine:xs,EaseOutSine:Ws,EaseInOutSine:Ds,EaseInExpo:Ys,EaseOutExpo:Xs,EaseInOutExpo:Ns,EaseInCirc:Vs,EaseOutCirc:zs,EaseInOutCirc:Gs,EaseInBack:Hs,EaseOutBack:Us,EaseInOutBack:qs,EaseInElastic:Js,EaseOutElastic:Ks,EaseInOutElastic:Qs,EaseInBounce:Zs,EaseOutBounce:js,EaseInOutBounce:ti,EaseIn:os,EaseOut:as,EaseInOut:rs,StepStart:Ts,StepEnd:Ps},ei=y=>{const t=y.trim(),s=t.toLowerCase();if(Ke[t])return Ke[t];const o=Object.keys(Ke).find(n=>n.toLowerCase()===s);if(o)return Ke[o];const e=Object.keys(ps).find(n=>n.toLowerCase()===s);if(e){const n=fs(ps[e].value);if(n)return n}if(ds[s])return ds[s];if(s.startsWith("cubic-bezier")){const n=fs(t);if(n)return n}return ns},ps={Snappy:{label:"Snappy",description:"High energy, quick arrival.",value:"cubic-bezier(0.2, 1, 0.2, 1)"},Bouncy:{label:"Bouncy",description:"Springy with an overshoot.",value:"cubic-bezier(0.2, 0.9, 0.4, 1.3)"},Gentle:{label:"Gentle",description:"Smooth and organic flow.",value:"cubic-bezier(0.4, 0, 0.6, 1)"},Stiff:{label:"Stiff",description:"Solid and reliable movement.",value:"cubic-bezier(0.3, 1, 0.7, 1)"},Floating:{label:"Floating",description:"Weightless and airy transition.",value:"cubic-bezier(0.5, 0, 0.5, 1)"},Sudden:{label:"Sudden",description:"Instant, direct movement.",value:"cubic-bezier(1, 0, 1, 1)"},Elastic:{label:"Elastic",description:"Extreme overshoot and spring.",value:"cubic-bezier(0.5, 1.5, 0.5, 1.5)"},Sharp:{label:"Sharp",description:"Fast start, very hard stop.",value:"cubic-bezier(0.1, 0.9, 0.1, 1)"},Fluid:{label:"Fluid",description:"Natural high-end flow.",value:"cubic-bezier(0.4, 0, 0.2, 1)"},Heavy:{label:"Heavy",description:"Slow start, massive impact.",value:"cubic-bezier(0.6, 0, 1, 1)"}},si=(y,t,s,o,e)=>{if(!y||!t||!s)return y;const n=o.scale_x??1,i=o.scale_y??1,a=(r,l,d)=>{let p=0,u=0;const m=o.rotation*Math.PI/180,h=Math.cos(m),f=Math.sin(m),v=r*n*h-l*i*f+o.x,g=r*n*f+l*i*h+o.y;d.forEach(I=>{const _=e(I.boneId);if(!_)return;const E={x:_.x,y:_.y,rotation:_.rotation,scaleX:_.scale_x??1,scaleY:_.scale_y??1},P=s[I.boneId]||[1,0,0,1,0,0],L=v*P[0]+g*P[2]+P[4],k=v*P[1]+g*P[3]+P[5],A=E.rotation*Math.PI/180,T=Math.cos(A),R=Math.sin(A),F=L*E.scaleX*T-k*E.scaleY*R+E.x,O=L*E.scaleX*R+k*E.scaleY*T+E.y;p+=F*I.amount,u+=O*I.amount});const c=[...d].sort((I,_)=>_.amount-I.amount);if(c.length>=2&&c[0].amount>0&&c[1].amount>0){const I=e(c[0].boneId),_=e(c[1].boneId);if(I&&_&&I.length!==void 0&&_.length!==void 0){const E=I.length*(I.scale_y??1),P=I.rotation*Math.PI/180,L=I.x-E*Math.sin(P),k=I.y+E*Math.cos(P),A=_.length*(_.scale_y??1),T=_.rotation*Math.PI/180,R=_.x-A*Math.sin(T),F=_.y+A*Math.cos(T);let O=null,W=null,V=!1;const U=1;if(Math.hypot(I.x-_.x,I.y-_.y)<U||Math.hypot(I.x-R,I.y-F)<U?(O=I.x,W=I.y):(Math.hypot(L-_.x,k-_.y)<U||Math.hypot(L-R,k-F)<U)&&(O=L,W=k,V=!0),O!==null&&W!==null){const D=s[c[0].boneId]||[1,0,0,1,0,0],Y=D[0]*D[3]-D[1]*D[2];let ot=0,J=0;if(Y!==0){const at=(D[2]*D[5]-D[3]*D[4])/Y,j=(D[1]*D[4]-D[0]*D[5])/Y,it=Math.atan2(-D[1],D[3]);if(!V)ot=at,J=j;else{const N=-D[2]/Y,ct=D[0]/Y,Mt=Math.hypot(N,ct),bt=I.length*Mt;ot=at-bt*Math.sin(it),J=j+bt*Math.cos(it)}const B=Math.hypot(v-ot,g-J),X=Math.hypot(p-O,u-W);if(X>0&&B>0){const N=Math.max(X,.01),ct=Math.min(B/N,3),Mt=O+(p-O)*ct,bt=W+(u-W)*ct,wt=c[0].amount,gt=c[1].amount,It=Math.min(wt,gt)*2,ut=1-Math.pow(1-It,4);p=p*(1-ut)+Mt*ut,u=u*(1-ut)+bt*ut}}}}}const b=o.rotation*Math.PI/180,S=Math.cos(b),w=Math.sin(b),C=p-o.x,M=u-o.y;return{x:(C*S+M*w)/n,y:(-C*w+M*S)/i}};return y.map((r,l)=>{const d=t[l];if(!d||d.length===0)return{...r};const p={...r,...a(r.x,r.y,d)};if(r.in_x!==void 0&&r.in_y!==void 0){const u=a(r.in_x,r.in_y,d);p.in_x=u.x,p.in_y=u.y}if(r.out_x!==void 0&&r.out_y!==void 0){const u=a(r.out_x,r.out_y,d);p.out_x=u.x,p.out_y=u.y}return p})};function ii(y,t,s,o,e){const n=y*s*.01,i=t*s*.01,a=Math.sin(e*12.9898)*43758.5453%(Math.PI*2),r=Math.cos(e*78.233)*43758.5453%(Math.PI*2);return(Math.sin(n+a)*Math.cos(i+r)+.5*Math.sin(n*2.1-r)*Math.cos(i*2.3+a)+.25*Math.sin(n*4.5+a)*Math.cos(i*4.2-r))/1.75*o}function ni(y,t,s,o,e,n,i=0,a=0){const r=[];if(!y)return[];const l=y.type;if(l==="Rectangle"||l==="Image"||l==="Frame"){const h=Math.max(20,Math.floor((t+s)/10)),f=Math.max(2,Math.floor(h*(t/(t+s)))),v=Math.max(2,Math.floor(h*(s/(t+s))));for(let g=0;g<f;g++)r.push({x:-t/2+t/f*g,y:-s/2,nx:0,ny:-1});for(let g=0;g<v;g++)r.push({x:t/2,y:-s/2+s/v*g,nx:1,ny:0});for(let g=0;g<f;g++)r.push({x:t/2-t/f*g,y:s/2,nx:0,ny:1});for(let g=0;g<v;g++)r.push({x:-t/2,y:s/2-s/v*g,nx:-1,ny:0})}else if(l==="Ellipse"){const h=Math.max(60,Math.floor(Math.PI*Math.max(t,s)/5));for(let f=0;f<h;f++){const v=f/h*Math.PI*2,g=Math.cos(v),c=Math.sin(v);r.push({x:g*t/2,y:c*s/2,nx:g,ny:c})}}else if(l==="Triangle"){const h={x:0,y:-s/2},f={x:t/2,y:s/2},v={x:-t/2,y:s/2},g=20;let c=f.x-h.x,b=f.y-h.y,S=Math.hypot(c,b),w=-b/S,C=c/S;for(let M=0;M<g;M++)r.push({x:h.x+c*(M/g),y:h.y+b*(M/g),nx:w,ny:C});c=v.x-f.x,b=v.y-f.y,S=Math.hypot(c,b),w=-b/S,C=c/S;for(let M=0;M<g;M++)r.push({x:f.x+c*(M/g),y:f.y+b*(M/g),nx:w,ny:C});c=h.x-v.x,b=h.y-v.y,S=Math.hypot(c,b),w=-b/S,C=c/S;for(let M=0;M<g;M++)r.push({x:v.x+c*(M/g),y:v.y+b*(M/g),nx:w,ny:C})}else for(let f=0;f<80;f++){const v=f/80*Math.PI*2,g=Math.cos(v),c=Math.sin(v);r.push({x:g*t/2,y:c*s/2,nx:g,ny:c})}const d=i*Math.PI/180,p=Math.cos(d),u=Math.sin(d);return r.map(h=>{const f=ii(h.x,h.y,e,o,n),v=h.nx*(1-a)+p*a,g=h.ny*(1-a)+u*a;let c=Math.hypot(v,g);return c===0&&(c=1),{x:h.x+v/c*f,y:h.y+g/c*f}})}const oi={default:{label:"Default",colors:["#6366f1","#f59e0b"],cardBackground:"rgba(255,255,255,0.04)",cardBorderColor:"rgba(255,255,255,0.08)",gridColor:"rgba(255,255,255,0.06)",axisLabelColor:"rgba(255,255,255,0.5)",legendColor:"rgba(255,255,255,0.7)",barGradient:!0},neon:{label:"Neon",colors:["#00f5ff","#ff00e5"],cardBackground:"rgba(0,0,0,0.5)",cardBorderColor:"rgba(0,245,255,0.2)",gridColor:"rgba(0,245,255,0.08)",axisLabelColor:"rgba(0,245,255,0.6)",legendColor:"rgba(0,245,255,0.8)",barGradient:!0},pastel:{label:"Pastel",colors:["#a5b4fc","#fcd34d"],cardBackground:"rgba(255,255,255,0.06)",cardBorderColor:"rgba(255,255,255,0.12)",gridColor:"rgba(255,255,255,0.08)",axisLabelColor:"rgba(255,255,255,0.45)",legendColor:"rgba(255,255,255,0.65)",barGradient:!1},warm:{label:"Warm",colors:["#f97316","#ef4444"],cardBackground:"rgba(30,10,0,0.4)",cardBorderColor:"rgba(249,115,22,0.2)",gridColor:"rgba(249,115,22,0.08)",axisLabelColor:"rgba(253,186,116,0.7)",legendColor:"rgba(253,186,116,0.85)",barGradient:!0},ocean:{label:"Ocean",colors:["#06b6d4","#0ea5e9"],cardBackground:"rgba(0,20,40,0.5)",cardBorderColor:"rgba(6,182,212,0.2)",gridColor:"rgba(6,182,212,0.06)",axisLabelColor:"rgba(125,211,252,0.6)",legendColor:"rgba(125,211,252,0.8)",barGradient:!0},mono:{label:"Mono",colors:["rgba(255,255,255,0.9)","rgba(255,255,255,0.4)"],cardBackground:"rgba(255,255,255,0.03)",cardBorderColor:"rgba(255,255,255,0.1)",gridColor:"rgba(255,255,255,0.05)",axisLabelColor:"rgba(255,255,255,0.4)",legendColor:"rgba(255,255,255,0.6)",barGradient:!1}},us={vibrant:["#6366f1","#22d3ee","#f59e0b","#ec4899","#34d399","#a855f7","#f87171"],pastel:["#a5b4fc","#67e8f9","#fcd34d","#f9a8d4","#6ee7b7","#c4b5fd","#fca5a5"],neon:["#00f5ff","#ff00e5","#00ff9f","#ff6b00","#b400ff","#ffe600","#00c3ff"],warm:["#f97316","#ef4444","#f59e0b","#dc2626","#fb923c","#e11d48","#ea580c"],ocean:["#06b6d4","#0ea5e9","#38bdf8","#7dd3fc","#0284c7","#0369a1","#bae6fd"]};class gs{constructor(){ht(this,"artboard",null);ht(this,"objectStates",new Map);ht(this,"physicsEngine",null);ht(this,"activeStateMachine",null);ht(this,"inputs",new Map);ht(this,"inputNameMap",new Map);ht(this,"layerStates",new Map);ht(this,"pretextCache",new Map);ht(this,"pointerHistory",[]);ht(this,"MAX_HISTORY",200);ht(this,"imageCache",new Map);ht(this,"lastValidSvgImgMap",new Map);ht(this,"maskBuffer",null);ht(this,"maskCtx",null);ht(this,"lumaBuffer",null);ht(this,"lumaCtx",null);ht(this,"_noiseTileCanvas",null);ht(this,"layout",{fit:"Contain",alignment:"Center"});ht(this,"onTrigger");ht(this,"onInputUpdate");ht(this,"onComponentChange");ht(this,"onToggle");ht(this,"onInputChange");ht(this,"onInputFocus");ht(this,"onInputBlur");ht(this,"onLog");ht(this,"onButtonClick");ht(this,"onGraphPointClick");ht(this,"justFiredTriggers",new Set);ht(this,"rootTransform",null);ht(this,"canvasWidth",0);ht(this,"canvasHeight",0);ht(this,"lastHoveredObjectId",null);ht(this,"_lastPointerPos",null);ht(this,"_prevPointerPos",null);ht(this,"_mouseDelta",{dx:0,dy:0});ht(this,"focusedId",null);ht(this,"draggingSliderId",null);ht(this,"draggingJoystickId",null);ht(this,"activeDropdownId",null);ht(this,"activeObjectId",null);ht(this,"draggingListViewId",null);ht(this,"draggingListViewIsScrollbar",!1);ht(this,"scrollOffset",{x:0,y:0});ht(this,"_totalScroll",{x:0,y:0});ht(this,"draggingBehaviors",new Set);ht(this,"dragStartPointer",null);ht(this,"dragStartPositions",new Map);ht(this,"isMouseDown",!1);ht(this,"activeKeys",new Set);ht(this,"_layoutAnimCache",new Map);ht(this,"_springChainState",new Map);ht(this,"_emitterPools",new Map);ht(this,"objectVelocities",new Map);ht(this,"currentTime",0);ht(this,"frameCount",0);ht(this,"fontLeadingFactors",{Inter:.35,Roboto:.45,Montserrat:.4,Outfit:.35,"Open Sans":.4,Poppins:.45,"Playfair Display":.35,Lora:.4,Lato:.35,"Bebas Neue":.45,Oswald:.4});ht(this,"onLogicUpdate");ht(this,"logicNodeValues",new Map);ht(this,"logicNodeState",new Map);ht(this,"pointerDownTimes",new Map);ht(this,"activeHoverIds",new Set);ht(this,"onNavigation");ht(this,"periodicTriggerTimes",new Map);ht(this,"wasInView",new Set);ht(this,"scrollProgressLastValue",new Map);ht(this,"debug_objectsRendered",0);ht(this,"debug_objectsTotal",0);ht(this,"lastRenderTime",0);ht(this,"debugMode",!1);ht(this,"activeTriggers",new Map);console.info("%c[ExodeUI Engine] Pixel-Perfect Parity Active (v6.3.10) - SVG Fill & Gradient Parity Active","color: #3b82f6; font-weight: bold; padding: 2px 4px; border-radius: 4px; background: rgba(59, 130, 246, 0.1)")}getInputValue(t){if(this.inputs.has(t))return this.inputs.get(t);const s=this.inputNameMap.get(t);if(s&&s.length>0)return this.inputs.get(s[0])}setTriggerCallback(t){this.onTrigger=t}setInputUpdateCallback(t){this.onInputUpdate=t}setComponentChangeCallback(t){this.onComponentChange=t}setToggleCallback(t){this.onToggle=t}setLogicUpdateCallback(t){this.onLogicUpdate=t}setInputChangeCallback(t){this.onInputChange=t}setButtonClickCallback(t){this.onButtonClick=t}setGraphPointClickCallback(t){this.onGraphPointClick=t}setNavigationCallback(t){this.onNavigation=t}ensurePathPoints(t){if(!t||t.type!=="Path"&&t.type!=="Subtract"&&t.type!=="Union"&&t.type!=="Intersect"&&t.type!=="Exclude"&&t.type!=="BooleanOperation")return;if(t.points&&t.points.length>0){if(t.is_closed===void 0&&t.isClosed===void 0&&t.data){const{isClosed:e}=this.svgPathToPoints(t.data);t.is_closed=e}return}if(!t.data)return;const{points:s,isClosed:o}=this.svgPathToPoints(t.data);t.points=s,t.is_closed===void 0&&(t.is_closed=o)}svgPathToPoints(t){const s=/([MLHVCSQTAZmlhvcsqtaz])([^MLHVCSQTAZmlhvcsqtaz]*)/g,o=/[-+]?(?:\d*\.\d+|\d+)(?:[eE][-+]?\d+)?/g,e=[];let n=!1,i=0,a=0,r=0,l=0,d=0,p=0,u;for(;(u=s.exec(t))!==null;){const m=u[1],h=(u[2].match(o)||[]).map(parseFloat),f=m===m.toLowerCase(),v=m.toUpperCase();let g=0;const c=S=>{let w=h[g++];return f&&(w+=S?i:a),w},b=()=>({x:c(!0),y:c(!1)});switch(v){case"M":{const S=b();for(d=i=S.x,p=a=S.y,e.push({x:i,y:a,in_x:i,in_y:a,out_x:i,out_y:a,moveTo:!0});g<h.length;){const w=b();i=w.x,a=w.y,e.push({x:i,y:a,in_x:i,in_y:a,out_x:i,out_y:a})}break}case"L":for(;g<h.length;){const S=b();i=S.x,a=S.y,e.push({x:i,y:a,in_x:i,in_y:a,out_x:i,out_y:a})}break;case"H":for(;g<h.length;)i=c(!0),e.push({x:i,y:a,in_x:i,in_y:a,out_x:i,out_y:a});break;case"V":for(;g<h.length;)a=c(!1),e.push({x:i,y:a,in_x:i,in_y:a,out_x:i,out_y:a});break;case"C":for(;g<h.length;){const S=b(),w=b(),C=b();if(e.length>0){const M=e[e.length-1];M.out_x=S.x,M.out_y=S.y}i=C.x,a=C.y,e.push({x:i,y:a,in_x:w.x,in_y:w.y,out_x:i,out_y:a}),r=w.x,l=w.y}break;case"S":for(;g<h.length;){const S={x:2*i-r,y:2*a-l},w=b(),C=b();if(e.length>0){const M=e[e.length-1];M.out_x=S.x,M.out_y=S.y}i=C.x,a=C.y,e.push({x:i,y:a,in_x:w.x,in_y:w.y,out_x:i,out_y:a}),r=w.x,l=w.y}break;case"Q":for(;g<h.length;){const S=b(),w=b();if(e.length>0){const C=e[e.length-1];C.out_x=C.x+2/3*(S.x-C.x),C.out_y=C.y+2/3*(S.y-C.y)}i=w.x,a=w.y,e.push({x:i,y:a,in_x:i+2/3*(S.x-i),in_y:a+2/3*(S.y-a),out_x:i,out_y:a}),r=S.x,l=S.y}break;case"T":for(;g<h.length;){const S={x:2*i-r,y:2*a-l},w=b();if(e.length>0){const C=e[e.length-1];C.out_x=C.x+2/3*(S.x-C.x),C.out_y=C.y+2/3*(S.y-C.y)}i=w.x,a=w.y,e.push({x:i,y:a,in_x:i+2/3*(S.x-i),in_y:a+2/3*(S.y-a),out_x:i,out_y:a}),r=S.x,l=S.y}break;case"Z":if(n=!0,e.length>0){const S=e[e.length-1];S.closePath=!0;const w=[...e].reverse().find(C=>C.moveTo)||e[0];w&&Math.hypot(w.x-S.x,w.y-S.y)<.1&&(w.in_x=S.in_x,w.in_y=S.in_y,e.pop(),e.length>0&&(e[e.length-1].closePath=!0))}i=d,a=p;break;default:if(h.length>=2){const S=b();i=S.x,a=S.y,e.push({x:i,y:a,in_x:i,in_y:a,out_x:i,out_y:a})}break}}return{points:e,isClosed:n}}setOnLogCallback(t){this.onLog=t}debugLog(t){this.onLog&&this.onLog(t)}setInputFocusCallback(t){this.onInputFocus=t}setInputBlurCallback(t){this.onInputBlur=t}updateConstraint(t,s,o){var n;const e=(n=this.artboard)==null?void 0:n.objects.find(i=>i.id===t);e&&e.constraints&&e.constraints[s]&&(e.constraints[s]={...e.constraints[s],...o},o.useSpring===!1&&this.objectVelocities.delete(t))}log(...t){this.debugMode&&console.log(...t)}warn(...t){this.debugMode&&console.warn(...t)}setInternalInput(t,s){this.inputs.set(t,s),this.onInputUpdate&&this.onInputUpdate(t,s)}setLayout(t,s){this.layout={fit:t,alignment:s}}getActiveStateIds(t="Base Layer"){const s=this.layerStates.get(t);return s?s.currentStateIds:[]}getObjectState(t){return this.objectStates.get(t)}updateObjectOptions(t,s){const o=this.objectStates.get(t);o&&(o.options={...o.options,...s})}updateGraphData(t,s,o){var n,i,a;if(!this.artboard)return;const e=this.artboard.objects.find(r=>r.id===t||r.name===t);if(e){const r=((n=e.geometry)==null?void 0:n.type)==="LineGraph",l=e.type==="BarChart"||e.type==="Component"&&e.variant==="barchart",d=e.type==="PieChart"||e.type==="Component"&&e.variant==="piechart";if(r){const p=e.geometry,u=Array.isArray(s[0])?s[0]:s;!p.datasets||p.datasets.length===0?p.datasets=[{id:"default",label:"Runtime Data",data:u,lineColor:"#3b82f6",lineWidth:2,showArea:!1}]:p.datasets[0].data=u;const m=this.objectStates.get(e.id);m&&((i=m.geometry)==null?void 0:i.type)==="LineGraph"&&(!m.geometry.datasets||m.geometry.datasets.length===0?m.geometry.datasets=JSON.parse(JSON.stringify(p.datasets)):m.geometry.datasets[0].data=[...u]),(a=p.datasets[0])!=null&&a.inputId&&this.updateInput(p.datasets[0].inputId,u);return}else if(l){this.updateBarChartData(e.id,Array.isArray(s[0])?s:[s],o);return}else if(d){this.updatePieChartData(e.id,Array.isArray(s[0])?s[0]:s);return}}this.updateInput(t,s)}updateBarChartData(t,s,o){if(!this.artboard)return;const e=this.artboard.objects.find(l=>l.id===t||l.name===t);if(!e){this.updateInput(t,s);return}const n=this.objectStates.get(e.id),i=(n==null?void 0:n.options)||e.options||{},a=s.map((l,d)=>{var u;const p=((u=i.datasets)==null?void 0:u[d])||{};return Array.isArray(l)?{id:p.id||`ds-${d}`,label:p.label||`Series ${d+1}`,color:p.color||"#6366f1",data:l}:{id:l.id||p.id||`ds-${d}`,label:l.label||p.label||`Series ${d+1}`,color:l.color||p.color||"#6366f1",data:l.data||[]}}),r={...i,datasets:a};o&&Array.isArray(o)&&(r.categories=o),e.options=r,n&&(n.options=r),i.datasetInputIds&&Array.isArray(i.datasetInputIds)&&i.datasetInputIds.forEach((l,d)=>{a[d]&&this.updateInput(l,a[d].data)}),o&&i.dataInputId&&this.updateInput(i.dataInputId,o)}updatePieChartData(t,s){if(!this.artboard)return;const o=this.artboard.objects.find(l=>l.id===t||l.name===t);if(!o){this.updateInput(t,s);return}const e=this.objectStates.get(o.id),n=(e==null?void 0:e.options)||o.options||{},i=n.slices||[],a=s.map((l,d)=>{const p=i[d]||{};return typeof l=="number"?{id:p.id||`slice-${d}`,label:p.label||`Item ${d+1}`,color:p.color||"",value:l}:{id:l.id||p.id||`slice-${d}`,label:l.label||p.label||`Item ${d+1}`,color:l.color||p.color||"",value:typeof l.value=="number"?l.value:parseFloat(l.value)||0}}),r={...n,slices:a};o.options=r,e&&(e.options=r),n.dataInputId&&this.updateInput(n.dataInputId,a.map(l=>l.value))}setDropdownOptions(t,s){if(!this.artboard)return;const o=this.artboard.objects.find(a=>a.id===t||a.name===t);if(!o){this.updateInput(t,s);return}const e=this.objectStates.get(o.id),n=(e==null?void 0:e.options)||o.options||{},i={...n,optionsList:s};o.options=i,e&&(e.options=i),n.dataInputId&&this.updateInput(n.dataInputId,s)}load(t){var i,a;if(!t)return;let s=this.decompressStrings(t);const o=[],e=new Set,n=r=>{r&&r.forEach(l=>{if(e.has(l.id))return;const d={...l},p=d.childrenObjects||[];e.add(d.id),o.push(d),n(p)})};if(n(s.objects||[]),o.length>(s.objects||[]).length&&this.log(`[Engine] Flattened artboard from ${(s.objects||[]).length} to ${o.length} objects.`),s.objects=o,this.artboard=s,this.currentTime=0,this.objectStates.clear(),this.log(`[ExodeUIEngine] Loading artboard: "${(i=this.artboard)==null?void 0:i.name}" with ${(a=this.artboard)==null?void 0:a.objects.length} objects`),this.artboard&&this.artboard.objects){const r=new Map;this.artboard.objects.forEach(l=>{r.set(l.id,l),l.children||(l.children=[])}),this.artboard.objects.forEach(l=>{if(l.parentId){const d=r.get(l.parentId);d&&(d.children||(d.children=[]),d.children.includes(l.id)||d.children.push(l.id))}})}this.loadFonts(),this.preloadImages(this.artboard),this.reset(),this.advance(0)}preloadImages(t){if(!t||!t.objects)return;const s=o=>{if(!o||this.imageCache.has(o))return;const e=new Image;e.onload=()=>{this.log(`[ExodeUI Preload] loaded ${e.naturalWidth}x${e.naturalHeight}`)},e.onerror=n=>{console.error("[ExodeUI Preload] failed:",n,`Src: ${o.substring(0,80)}...`)},e.src=o,this.imageCache.set(o,e)};t.objects.forEach(o=>{var e,n,i;(e=o.geometry)!=null&&e.src&&s(o.geometry.src),(i=(n=o.style)==null?void 0:n.fill)!=null&&i.src&&s(o.style.fill.src)})}decompressStrings(t){if(t&&typeof t=="object"&&!Array.isArray(t)){if(t._compressed&&t._data)try{const o=vs.decompressFromBase64(t._data);if(o)return o}catch(o){return console.error("[ExodeUI] Failed to decompress string:",o),t._data}const s={};for(const[o,e]of Object.entries(t))s[o]=this.decompressStrings(e);return s}return Array.isArray(t)?t.map(s=>this.decompressStrings(s)):t}reset(){if(!this.artboard)return;if(this.objectStates.clear(),this.objectVelocities.clear(),this.currentTime=0,this.inputs.clear(),this.inputNameMap.clear(),this.layerStates.clear(),this.logicNodeValues.clear(),this.justFiredTriggers.clear(),this.inputs.set("mouseX",0),this.inputs.set("mouseY",0),this.inputs.set("scrollX",0),this.inputs.set("scrollY",0),this.inputs.set("isMouseDown",!1),this.physicsEngine&&(this.physicsEngine.destroy(),this.physicsEngine=null),this._layoutAnimCache.clear(),this._springChainState.clear(),this._emitterPools.clear(),this.artboard.objects.forEach(s=>{var i,a,r,l,d,p,u;const o=s.width??((i=s.geometry)==null?void 0:i.width)??0,e=s.height??((a=s.geometry)==null?void 0:a.height)??0,n=s.cornerRadius??s.corner_radius??((r=s.geometry)==null?void 0:r.corner_radius)??((l=s.geometry)==null?void 0:l.cornerRadius)??0;this.objectStates.set(s.id,{...s.transform||{},x:((d=s.transform)==null?void 0:d.x)??s.x??0,y:((p=s.transform)==null?void 0:p.y)??s.y??0,width:o,height:e,cornerRadius:n,corner_radius:n,clipContent:s.clipContent??!1,autoLayout:s.autoLayout?JSON.parse(JSON.stringify(s.autoLayout)):void 0,layoutProps:s.layoutProps?JSON.parse(JSON.stringify(s.layoutProps)):void 0,opacity:((u=s.transform)==null?void 0:u.opacity)!==void 0?s.transform.opacity:s.opacity!==void 0?s.opacity:100,visible:s.visible!==void 0?s.visible:s.isVisible!==void 0?s.isVisible:!0,blendMode:s.blendMode||"Normal",style:JSON.parse(JSON.stringify(s.style||{})),geometry:JSON.parse(JSON.stringify(s.geometry||{})),options:s.options?JSON.parse(JSON.stringify(s.options)):{},masks:s.masks?JSON.parse(JSON.stringify(s.masks)):[],zIndex:s.zIndex!==void 0?s.zIndex:void 0})}),this.artboard.objects.some(s=>{var o;return(o=s.physics)==null?void 0:o.enabled})){this.physicsEngine=new is;const s=this.artboard.physics?{x:this.artboard.physics.gravity.x,y:this.artboard.physics.gravity.y}:{x:0,y:1};this.physicsEngine.init(s).then(()=>{var o;this.physicsEngine&&((o=this.artboard)==null||o.objects.forEach(e=>{var n,i;if((n=e.physics)!=null&&n.enabled&&e.type==="Shape"){const a=this.objectStates.get(e.id);if(!a)return;const r=e.geometry.width||100,l=e.geometry.height||100;this.physicsEngine.createBody({id:e.id,type:((i=e.geometry)==null?void 0:i.type)||"Rectangle",x:a.x,y:a.y,width:r,height:l,rotation:a.rotation*(Math.PI/180),isStatic:e.physics.bodyType==="Static",mass:e.physics.mass,friction:e.physics.friction,restitution:e.physics.restitution,frictionAir:e.physics.frictionAir,density:e.physics.density,isSensor:e.physics.isSensor})}}))})}this.artboard.stateVariables&&this.artboard.stateVariables.forEach(s=>{var n,i;let o=s.value;if(s.type==="RandomNumber"||s.type==="random_number"||s.min!==void 0&&s.max!==void 0&&((n=s.type)!=null&&n.toLowerCase().includes("random"))){const a=s.min??0,r=s.max??100;o=Math.random()*(r-a)+a}else if(s.type==="RandomColor"||s.type==="random_color"||s.minAlpha!==void 0&&((i=s.type)!=null&&i.toLowerCase().includes("random"))){const a=Math.floor(Math.random()*256),r=Math.floor(Math.random()*256),l=Math.floor(Math.random()*256),d=s.minAlpha??0,p=s.maxAlpha??1,u=(Math.random()*(p-d)+d).toFixed(2);o=`rgba(${a}, ${r}, ${l}, ${u})`}this.inputs.set(s.id,o);const e=this.inputNameMap.get(s.name)||[];e.includes(s.id)||e.push(s.id),this.inputNameMap.set(s.name,e)}),this.artboard.stateMachine&&(this.activeStateMachine=this.artboard.stateMachine,this.activeStateMachine.inputs.forEach(s=>{this.inputs.set(s.id,s.value.value);const o=this.inputNameMap.get(s.name)||[];o.push(s.id),this.inputNameMap.set(s.name,o)}),this.activeStateMachine.layers.forEach(s=>{let o=s.states.find(e=>e.id===s.entryStateId);!o&&s.states.length>0&&(console.warn(`[ExodeUI] Invalid entryStateId "${s.entryStateId}" in layer "${s.name}". Falling back to first state.`),o=s.states[0]),o&&this.enterStates(s.name,[o.id])}),this.evaluateTransitions()),this.initGlobalAnimationTriggers(),this.updateAutoLayout(!0),this.loadFonts()}updateAutoLayout(t=!1){var n;if(!this.artboard)return;const s=new Map;this.artboard.objects.forEach(i=>s.set(i.id,i));const o=.15,e=i=>{i.forEach(a=>{const r=this.objectStates.get(a.id);if(r){const l=Math.abs(r.x-a.x),d=Math.abs(r.y-a.y);!t&&(l>20||d>20)?(r.x+=(a.x-r.x)*o,r.y+=(a.y-r.y)*o):(r.x=a.x,r.y=a.y),a.width!==void 0&&(r.width=a.width),a.height!==void 0&&(r.height=a.height)}})};if((n=this.artboard.autoLayout)!=null&&n.enabled){const i=this.artboard.objects.filter(r=>!r.parentId),a=ss(this.artboard,i,r=>this.objectStates.get(r));e(a.childUpdates)}this.artboard.objects.forEach(i=>{var a;if(i.type==="Frame"&&((a=i.autoLayout)!=null&&a.enabled)&&i.children&&i.children.length>0){const r=i.children.map(p=>s.get(p)).filter(p=>!!p),l=this.objectStates.get(i.id);if(!l)return;const d=ss(l,r,p=>this.objectStates.get(p));d.frameWidth!==void 0&&(l.width=d.frameWidth),d.frameHeight!==void 0&&(l.height=d.frameHeight),e(d.childUpdates)}})}loadFonts(){if(!this.artboard)return;const t=new Set;if(this.artboard.objects.forEach(i=>{i.geometry&&i.geometry.type==="Text"&&i.geometry.fontFamily&&t.add(i.geometry.fontFamily)}),this.artboard.animations.forEach(i=>{i.tracks.forEach(a=>{(a.property==="geometry.fontFamily"||a.property==="fontFamily")&&a.keyframes.forEach(r=>{r.value&&typeof r.value=="string"&&t.add(r.value)})})}),t.size===0)return;let s="";t.forEach(i=>{const a=i.replace(/ /g,"+");s+=`&family=${a}:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900`});const o="exodeui-google-fonts",e="exodeui-fontshare-fonts";if(s.length>0){const i=`https://fonts.googleapis.com/css2?display=swap${s}`;let a=document.getElementById(o);a||(a=document.createElement("link"),a.id=o,a.rel="stylesheet",document.head.appendChild(a)),a.href!==i&&(a.href=i)}const n=[];if(t.forEach(i=>{i.toLowerCase().includes("clash display")&&n.push("clash-display@200,300,400,500,600,700")}),n.length>0){const i=`https://api.fontshare.com/v2/css?f[]=${n.join("&f[]=")}&display=swap`;let a=document.getElementById(e);a||(a=document.createElement("link"),a.id=e,a.rel="stylesheet",document.head.appendChild(a)),a.href!==i&&(a.href=i)}document.fonts&&document.fonts.ready&&document.fonts.ready.then(()=>{this.pretextCache.clear(),this.advance(0)})}enterStates(t,s){var i;if(s.length===0)return;const o=this.layerStates.get(t);if(o&&o.currentStateIds.length===s.length&&s.every(r=>o.currentStateIds.includes(r))&&this.justFiredTriggers.size===0)return;const e=[];let n=0;if(this.artboard&&this.activeStateMachine){const a=this.activeStateMachine.layers.find(r=>r.name===t);if(a)for(const r of s){const l=a.states.find(d=>d.id===r);if(l)if(l.isBlendState&&l.blendAnimations&&l.blendAnimations.length>0)e.push({animation:null,state:l}),l.blendAnimations.forEach(d=>{const p=this.artboard.animations.find(u=>u.id===d.animationId);p&&(n=Math.max(n,this.getAnimationDuration(p)))});else{let d=null;l.animationId&&(d=this.artboard.animations.find(p=>p.id===l.animationId)||null),d||(d=this.artboard.animations.find(p=>{var u,m;return p.name===l.name||p.id===l.name||(l.name==="Entry"||l.id==="entry")&&(((u=p.name)==null?void 0:u.toLowerCase())==="onload"||((m=p.name)==null?void 0:m.toLowerCase())==="intro")})||null),d&&((i=this.artboard.animationFlow)!=null&&i.some(u=>(u.trigger==="on_load"||u.trigger==="after_delay")&&u.targetAnimationId===(d==null?void 0:d.id))||(e.push({animation:d,state:l}),n=Math.max(n,this.getAnimationDuration(d))))}}}this.layerStates.set(t,{currentStateIds:s,animations:e,time:0,duration:n})}setInputBool(t,s){this.updateInput(t,s)}setInputNumber(t,s){this.updateInput(t,s)}fireTrigger(t){this.updateInput(t,!0)}setInputText(t,s){this.updateInput(t,s)}setInputNumberArray(t,s){this.updateInput(t,s)}setInputStringArray(t,s){this.updateInput(t,s)}updateObjectProperty(t,s,o){const e=this.objectStates.get(t);if(e)if(s.includes(".")||s.includes("[")){const n=s.replace(/\[(\d+)\]/g,".$1").split(".");let i=e;for(let a=0;a<n.length-1;a++){if(typeof i[n[a]]!="object"||i[n[a]]===null){const r=n[a+1],l=!isNaN(Number(r));i[n[a]]=l?[]:{}}i=i[n[a]]}i[n[n.length-1]]=o}else e[s]=o}updateInput(t,s){var l,d,p,u,m;let o;if(this.inputs.has(t)){const h=(l=this.activeStateMachine)==null?void 0:l.inputs.find(f=>f.id===t);h&&typeof h.value=="object"&&(o=h.value.type)}else{const h=this.inputNameMap.get(t);if(h&&h.length>0){const f=(d=this.activeStateMachine)==null?void 0:d.inputs.find(v=>v.id===h[0]);f&&typeof f.value=="object"&&(o=f.value.type)}}let e=s;o==="Trigger"&&(s===1?e=!0:s===0&&(e=!1));const n=(u=(p=this.artboard)==null?void 0:p.stateVariables)==null?void 0:u.find(h=>h.id===t||h.name===t);if(n&&(n.type==="RandomNumber"||n.type==="RandomColor"||n.type&&String(n.type).toLowerCase().includes("random"))){if(n.type==="RandomNumber"||n.type==="random_number"||n.min!==void 0&&n.max!==void 0){const h=n.min??0,f=n.max??100;e=Math.random()*(f-h)+h}else if(n.type==="RandomColor"||n.type==="random_color"||n.minAlpha!==void 0){const h=Math.floor(Math.random()*256),f=Math.floor(Math.random()*256),v=Math.floor(Math.random()*256),g=n.minAlpha??0,c=n.maxAlpha??1,b=(Math.random()*(c-g)+g).toFixed(2);e=`rgba(${h}, ${f}, ${v}, ${b})`}}let i=!1;this.inputs.has(t)&&(this.setInternalInput(t,e),i=!0);const a=this.inputNameMap.get(t);a&&a.length>0&&(a.forEach(h=>this.setInternalInput(h,e)),i=!0),i||this.setInternalInput(t,e),o==="Trigger"&&e===!0&&(this.justFiredTriggers.add(t),a&&a.forEach(h=>this.justFiredTriggers.add(h)));let r=null;if(Array.isArray(e))r=e;else if(typeof e=="string"&&e.trim().startsWith("[")&&e.trim().endsWith("]"))try{const h=JSON.parse(e);Array.isArray(h)&&(r=h)}catch{}r&&((m=this.artboard)==null||m.objects.forEach(h=>{var g;const f=(g=h.options)==null?void 0:g.dataInputId;if(h.inputId===t||h.name===t||f===t||a&&(a.includes(h.inputId)||f&&a.includes(f))){let c=this.objectStates.get(h.id);c&&!c.options&&(c.options=JSON.parse(JSON.stringify(h.options||{}))),c&&c.options&&(this.isListViewObject(h)?c.options.items=r:(h.type==="Dropdown"||h.variant==="dropdown")&&(c.options.optionsList=r)),h.options&&(this.isListViewObject(h)?h.options.items=r:(h.type==="Dropdown"||h.variant==="dropdown")&&(h.options.optionsList=r))}})),this.evaluateTransitions(),this.evaluateVariableTriggers(t,e)}evaluateVariableTriggers(t,s){if(!this.artboard)return;const o=this.artboard.animationFlow||[],e=this.inputNameMap.get(t);o.forEach(n=>{if(n.trigger==="variable"&&n.conditionVariableId&&n.targetAnimationId&&(n.conditionVariableId===t||e&&e.includes(n.conditionVariableId))){const a=n.conditionOperator||"IsTrue",r=n.conditionValue;let l=!1;switch(a){case"Equal":case"==":l=s==r;break;case"NotEqual":case"!=":l=s!=r;break;case"GreaterThan":case">":l=s>r;break;case"LessThan":case"<":l=s<r;break;case"GreaterEqual":case">=":l=s>=r;break;case"LessEqual":case"<=":l=s<=r;break;case"IsTrue":l=!!s;break;case"IsFalse":l=!s;break}if(l){const d=n.delay||0;d<=0?this.triggerGlobalAnimation(n.targetAnimationId,n.subAnimationIds,n.loop,n.id):setTimeout(()=>this.triggerGlobalAnimation(n.targetAnimationId,n.subAnimationIds,n.loop,n.id),d)}}})}evaluateTransitions(){this.activeStateMachine&&(this.activeStateMachine.layers.forEach(t=>{const s=this.layerStates.get(t.name);if(!s||s.currentStateIds.length===0)return;const o=[];let e=!1;for(const n of s.currentStateIds){const i=t.states.find(r=>r.id===n);if(!i)continue;let a=!1;for(const r of i.transitions||[])this.checkConditions(r.conditions)&&(o.push(r.targetStateId),a=!0,e=!0);a||o.push(n)}if(!e){const n=this.findGlobalTransition(t,s.currentStateIds);n&&(o.length=0,o.push(n.targetStateId),e=!0,n.conditions&&(n.conditions||[]).forEach(i=>{var r;const a=(r=this.activeStateMachine)==null?void 0:r.inputs.find(l=>l.id===i.inputId);a&&typeof a.value=="object"&&a.value.type==="Trigger"&&this.setInternalInput(i.inputId,!1)}))}if(e){const n=Array.from(new Set(o));this.enterStates(t.name,n)}}),this.justFiredTriggers.size>0&&(this.justFiredTriggers.forEach(t=>{var o,e;this.setInternalInput(t,!1);const s=(o=this.activeStateMachine)==null?void 0:o.inputs.find(n=>n.id===t);s&&this.inputNameMap.has(s.name)&&((e=this.inputNameMap.get(s.name))==null||e.forEach(n=>this.setInternalInput(n,!1)))}),this.justFiredTriggers.clear()))}findGlobalTransition(t,s){for(const o of t.states)if(!(s.includes(o.id)&&this.justFiredTriggers.size===0)){for(const n of o.transitions||[])if(!(s.includes(n.targetStateId)&&this.justFiredTriggers.size===0)&&this.checkConditions(n.conditions))return n}return null}checkConditions(t){return!t||t.length===0?!0:t.every(s=>{const o=s.inputId,e=s.op;let n=s.value;const i=this.evaluateLogicTree(o);if(i===void 0)return this.log(`[Engine] Condition Check Failed: Input ${o} is undefined`),!1;typeof i=="boolean"?n==="true"||n==="1"||n===1?n=!0:(n==="false"||n==="0"||n===0)&&(n=!1):typeof i=="number"&&typeof n=="string"&&(n=parseFloat(n));let a=!1;switch(e){case"Equal":case"==":a=i==n;break;case"NotEqual":case"!=":a=i!=n;break;case"GreaterThan":case">":a=i>n;break;case"LessThan":case"<":a=i<n;break;case"GreaterEqual":case">=":a=i>=n;break;case"LessEqual":case"<=":a=i<=n;break;case"IsTrue":a=!!i;break;case"IsFalse":a=!i;break;default:a=!1}return a||this.justFiredTriggers.has(o),a})}evaluateLogicTree(t,s=null,o=new Set){var a,r,l,d,p,u;if(o.has(t))return this.inputs.get(t)??this.logicNodeValues.get(t)??0;o.add(t);const e=(r=(a=this.activeStateMachine)==null?void 0:a.logicNodes)==null?void 0:r.find(m=>m.id===t);if(e){const m=(f,v)=>{const g=e.inputs.find(c=>c.id===f);return g?g.sourceId?this.evaluateLogicTree(g.sourceId,g.sourceHandleId,o):g.value!==void 0?g.value:v:v};let h=0;switch(e.op){case Et.AND:h=m("a",!1)&&m("b",!1);break;case Et.OR:h=m("a",!1)||m("b",!1);break;case Et.NOT:h=!m("in",!1);break;case Et.XOR:h=!!m("a",!1)!=!!m("b",!1);break;case Et.OBJECT:h=e.name;break;case Et.PROPERTY:case Et.GET_PROPERTY:{const f=m("id","");if(!f){h=0;break}const v=e.name;if(!v||v==="GET_PROPERTY"||v==="PROPERTY"){h=0;break}const g=this.objectStates.get(f);if(!g){h=0;break}v in g?h=g[v]:h=this.resolvePath(g,v);break}case Et.SET_PROPERTY:{const f=m("id",""),v=m("value",void 0);if(!f||v===void 0){h=0;break}const g=e.name;if(!g||g==="SET_PROPERTY"){h=0;break}const c=this.objectStates.get(f);if(!c){h=0;break}if(["x","y","rotation","scale_x","scale_y","opacity","width","height","cornerRadius","visible","zIndex"].includes(g))c[g]=v,h=v;else{const S=g.replace(/\[(\d+)\]/g,".$1").split(".");let w=c;for(let M=0;M<S.length-1;M++){const I=S[M],_=S[M+1];w[I]===void 0&&(w[I]=isNaN(Number(_))?{}:[]),w=w[I]}const C=S[S.length-1];w[C]=v,h=v}break}case Et.ADD:h=m("a",0)+m("b",0);break;case Et.SUB:h=m("a",0)-m("b",0);break;case Et.MUL:h=m("a",0)*m("b",0);break;case Et.DIV:{const f=m("b",1);h=f===0?0:m("a",0)/f;break}case Et.MOD:h=m("a",0)%m("b",1);break;case Et.POW:h=Math.pow(m("a",0),m("b",1));break;case Et.ABS:h=Math.abs(m("in",0));break;case Et.ROUND:h=Math.round(m("in",0));break;case Et.FLOOR:h=Math.floor(m("in",0));break;case Et.CEIL:h=Math.ceil(m("in",0));break;case Et.SIN:h=Math.sin(m("in",0));break;case Et.COS:h=Math.cos(m("in",0));break;case Et.TAN:h=Math.tan(m("in",0));break;case Et.CLAMP:{const f=m("in",0),v=m("min",0),g=m("max",1);h=Math.max(v,Math.min(g,f));break}case Et.REMAP:{const f=m("in",0),v=m("inMin",0),g=m("inMax",100),c=m("outMin",0),b=m("outMax",1);h=g===v?c:c+(f-v)*(b-c)/(g-v);break}case Et.EQ:h=m("a",0)==m("b",0);break;case Et.NEQ:h=m("a",0)!=m("b",0);break;case Et.GT:h=m("a",0)>m("b",0);break;case Et.LT:h=m("a",0)<m("b",0);break;case Et.GTE:h=m("a",0)>=m("b",0);break;case Et.LTE:h=m("a",0)<=m("b",0);break;case Et.IF_ELSE:h=m("cond",!1)?m("then",0):m("else",0);break;case Et.VALUE:h=e.value!==void 0?e.value:0;break;case Et.INPUT:h=this.inputs.get(e.name)??0;break;case Et.LOG:{const f=m("in","");this.debugLog(`[User Logic] ${f}`),h=f;break}case Et.SCROLL_X:h=this.inputs.get("scrollX")??0;break;case Et.SCROLL_Y:h=this.inputs.get("scrollY")??0;break;case Et.MOUSE_X:h=this.inputs.get("mouseX")??0;break;case Et.MOUSE_Y:h=this.inputs.get("mouseY")??0;break;case Et.IS_MOUSE_DOWN:h=this.inputs.get("isMouseDown")??!1;break;case Et.EFFECTOR:{const f=m("id",""),v=m("intensity",1),g=m("trigger",!0);if(!f||!g){h=0;break}const c=e.name;if(!c){h=0;break}const b=this.objectStates.get(f);if(!b){h=0;break}if(["glitch","halftone","pixelate","noise","acid_gradient","acid_rave","shimmer"].includes(c))b.style||(b.style={}),b.style.artEffect={enabled:!0,type:c,intensity:v},h=1;else{b.behaviors||(b.behaviors=[]);let w=b.behaviors.find(C=>C.type===c);w?(w.enabled=!0,w.settings||(w.settings={}),w.settings.intensity=v):(w={id:`eff_${Date.now()}_${c}`,type:c,enabled:!0,sensors:[],settings:{intensity:v}},b.behaviors.push(w)),h=1}break}case Et.MONITOR:{h=m("in",0);break}case Et.SPRING_PULL:{const f=m("objectId",""),v=m("forceX",0),g=m("forceY",0);f&&((l=this.artboard)==null||l.objects.forEach(c=>{c.behaviors&&c.behaviors.forEach(b=>{var S;if(b.type===tt.SpringChain&&((S=b.settings)!=null&&S.connections)&&(b.settings.connections.some(C=>C.targetId===f)||c.id===f)){this._springChainState.has(c.id)||this._springChainState.set(c.id,new Map);const C=this._springChainState.get(c.id);if(!C.has(f)){const I=this.objectStates.get(f);C.set(f,{x:(I==null?void 0:I.x)??0,y:(I==null?void 0:I.y)??0,vx:0,vy:0})}const M=C.get(f);M&&(M.vx+=v,M.vy+=g)}})})),h=1;break}case Et.SPRING_SETTLE:{const f=m("objectId","");let v=!0;if(f){const g=m("threshold",1);this._springChainState.forEach(c=>{const b=c.get(f);b&&(Math.abs(b.vx)>g||Math.abs(b.vy)>g)&&(v=!1)})}h=v;break}case Et.EMIT:{const f=m("objectId",""),v=m("count",20);f&&((d=this.artboard)==null||d.objects.forEach(g=>{g.behaviors&&g.behaviors.forEach(c=>{c.type===tt.ParticleEmitter&&g.id===f&&(c._pendingBurst=(c._pendingBurst||0)+v)})})),h=1;break}default:h=0;break}if(this.logicNodeValues.set(t,h),e.op===Et.DELAY){const f=m("delay",0),v=m("in",0);let g=this.logicNodeState.get(t);for(g||(g={queue:[]},this.logicNodeState.set(t,g)),g.queue.push({time:this.currentTime+f,value:v});g.queue.length>0&&g.queue[0].time<=this.currentTime;)g.lastValue=g.queue.shift().value;h=g.lastValue??0}return h}const n=(p=this.activeStateMachine)==null?void 0:p.inputs.find(m=>m.id===t||m.name===t);if(n&&n.sourceId&&!o.has(n.sourceId)){const m=this.evaluateLogicTree(n.sourceId,n.sourceHandleId,o);return this.inputs.set(n.id,m),m}let i=this.inputs.get(t)??(n?this.inputs.get(n.id):void 0);if((this.justFiredTriggers.has(t)||n&&this.justFiredTriggers.has(n.id))&&(i=!0),s&&i!==void 0){const m=(u=this.activeStateMachine)==null?void 0:u.inputs.find(h=>h.id===t);if(m&&m.value.type==="Number"&&typeof i=="number"){const h=m.value.defaultValue??m.value.value;if(s==="source-greater")return i>h;if(s==="source-less")return i<h;if(s==="source-equal")return i===h}if(s==="source-true")return i===!0;if(s==="source-false")return i===!1;if(s==="source-fire")return this.justFiredTriggers.has(t)}return i!==void 0?i:0}runLogicNodes(){!this.activeStateMachine||!this.activeStateMachine.logicNodes||this.activeStateMachine.logicNodes.forEach(t=>{(t.op===Et.SET_PROPERTY||t.op===Et.EFFECTOR)&&this.evaluateLogicTree(t.id)})}resolvePath(t,s){const o=s.replace(/\[(\d+)\]/g,".$1").split(".");let e=t;for(const n of o)if(e&&typeof e=="object"&&n in e)e=e[n];else return;return e}processLogicProperties(){!this.artboard||!this.artboard.objects||this.artboard.objects.forEach(t=>{const s=t.logicProperties;if(s&&s.length>0){const o=this.objectStates.get(t.id);if(!o)return;s.forEach(e=>{let n;if(e.valueType==="variable"?n=this.getInputValue(e.variableId):e.valueType==="constant"&&(n=e.value),n!==void 0){const i=e.name;if(["x","y","rotation","scale_x","scale_y","opacity","width","height","cornerRadius","visible","zIndex"].includes(i))o[i]=n;else{const r=i.replace(/\[(\d+)\]/g,".$1").split(".");let l=o;for(let p=0;p<r.length-1;p++){const u=r[p],m=r[p+1];l[u]===void 0&&(l[u]=isNaN(Number(m))?{}:[]),l=l[u]}const d=r[r.length-1];l[d]=n}}})}})}seek(t){this.artboard&&(this.currentTime=t,this.layerStates.forEach(s=>{s.time=t,s.time>(s.duration||0)&&(s.animations.some(e=>{var n;return((n=e.state)==null?void 0:n.loop)===!0})?s.time%=s.duration||1:s.time=s.duration)}),this.advance(0))}advance(t){if(!this.artboard)return;this.currentTime+=t,this.isMouseDown&&this.pointerDownTimes.forEach((o,e)=>{e&&this.currentTime-o>=.5&&(this.log(`[Engine] onHold detected for ${e}`),this.fireEventForObject(e,"onHold"),this.pointerDownTimes.delete(e))}),this.frameCount++,this.physicsEngine&&(this.physicsEngine.step(t),this.artboard.objects.forEach(o=>{var e;if((e=o.physics)!=null&&e.enabled){const n=this.physicsEngine.getPosition(o.id),i=this.physicsEngine.getRotation(o.id),a=this.objectStates.get(o.id);a&&n!==null&&i!==null&&(a.x=n.x,a.y=n.y,a.rotation=i*(180/Math.PI))}})),this.activeStateMachine&&(this.runLogicNodes(),this.evaluateTransitions()),this.processLogicProperties();const s=[];this.layerStates.forEach((o,e)=>{if(o.animations.length>0){if(o.time+=t,this.frameCount%240===0&&this.debugLog(`Advancing Layer time: ${o.time.toFixed(3)} / ${o.duration.toFixed(3)}`),o.time>o.duration)if(o.animations.some(i=>{var a;return((a=i.state)==null?void 0:a.loop)===!0}))o.time%=o.duration;else{const i=o.time<o.duration+.1;o.time=o.duration,i&&(e.startsWith("global_")&&console.log(`[Engine] GLOBAL layer done: ${e}, duration=${o.duration}, currentStateIds=${JSON.stringify(o.currentStateIds)}, ruleId=${o.ruleId}`),o.currentStateIds.length>0&&this.handleAnimationFinished(o.currentStateIds[0],o.ruleId),e.startsWith("global_")&&s.push(e))}o.animations.forEach(n=>{var i;(i=n.state)!=null&&i.isBlendState&&n.state.blendAnimations?this.applyBlendState(n.state,o.time):n.animation&&this.applyAnimation(n.animation,o.time,n.filterObjectIds)})}}),s.forEach(o=>{this.layerStates.delete(o),this.debugLog(`[Engine] Cleaned up completed global layer: ${o}`)}),this.solveConstraints(t),this.solveBehaviors(t),this.activeTriggers.forEach((o,e)=>{var n,i,a,r,l,d,p;if(o.phase==="entry")o.time+=t,o.time>=this.getAnimationDuration(o.animation)&&((a=(i=(n=this.artboard)==null?void 0:n.objects.find(u=>u.id===e))==null?void 0:i.triggers)==null||a.find(u=>u.id===o.triggerId),o.phase="hold",o.elapsedHold=0,o.time=this.getAnimationDuration(o.animation)),this.applyAnimation(o.animation,o.time,o.filterObjectIds||o.filterObjectId||void 0);else if(o.phase==="hold"){const u=(d=(l=(r=this.artboard)==null?void 0:r.objects.find(f=>f.id===e))==null?void 0:l.triggers)==null?void 0:d.find(f=>f.id===o.triggerId),m=(u==null?void 0:u.duration)||0;o.elapsedHold+=t*1e3;let h=o.elapsedHold>=m;if((u==null?void 0:u.eventType)==="hover"&&!this.activeHoverIds.has(e)&&(h=!0),((u==null?void 0:u.eventType)==="onHold"||(u==null?void 0:u.eventType)==="pointerDown")&&!this.isMouseDown&&(h=!0),h)if(u!=null&&u.exitAnimationId){const f=(p=this.artboard)==null?void 0:p.animations.find(v=>v.id===u.exitAnimationId);f?(o.phase="exit",o.animation=f,o.time=0):this.activeTriggers.delete(e)}else this.activeTriggers.delete(e)}else o.phase==="exit"&&(o.time+=t,o.time>=this.getAnimationDuration(o.animation)?this.activeTriggers.delete(e):this.applyAnimation(o.animation,o.time,o.filterObjectIds||o.filterObjectId||void 0))}),this.evaluateContinuousInteractions(t),this.processJoysticks(t),this.activeStateMachine&&this.onLogicUpdate&&this.logicNodeValues.size>0&&this.onLogicUpdate(Object.fromEntries(this.logicNodeValues))}evaluateContinuousInteractions(t){this.artboard&&(this.artboard.objects.forEach(s=>{var e,n,i;const o=(e=s.style)==null?void 0:e.analytics;if(o&&o.isEnabled&&o.triggerType==="visible"){const a=this.objectStates.get(s.id);if(a&&a.visible!==!1){const r=this.getGlobalTransform(s.id),l=(((n=s.geometry)==null?void 0:n.width)||100)*(r.scale_x||1),d=(((i=s.geometry)==null?void 0:i.height)||100)*(r.scale_y||1),p=50,u=r.x+l/2>=-this.canvasWidth/2-p&&r.x-l/2<=this.canvasWidth/2+p&&r.y+d/2>=-this.canvasHeight/2-p&&r.y-d/2<=this.canvasHeight/2+p,m=`analytics_${s.id}`,h=this.wasInView.has(m);u&&!h&&this.fireAnalyticsEvent(s.id,"visible"),u?this.wasInView.add(m):this.wasInView.delete(m)}}}),this.artboard.objects.forEach(s=>{const o=s.interactions||[];o.length!==0&&o.forEach(e=>{const n=e.triggers||[e.event||e.trigger];n&&n.forEach(i=>{var r,l,d;const a=i.toLowerCase();if(a==="on interval"||a==="oninterval"){const p=e.intervalValue||2e3,u=this.periodicTriggerTimes.get(e.id)||0;this.currentTime*1e3-u>=p&&(!e.conditions||this.checkConditions(e.conditions))&&(this.fireEventForObject(s.id,"On Interval"),this.periodicTriggerTimes.set(e.id,this.currentTime*1e3))}if(a==="on delay"||a==="ondelay"){const p=e.delayValue||1e3;!this.periodicTriggerTimes.has(e.id)&&this.currentTime*1e3>=p&&(!e.conditions||this.checkConditions(e.conditions))&&(this.fireEventForObject(s.id,"On Delay"),this.periodicTriggerTimes.set(e.id,this.currentTime*1e3))}if(a==="scroll into view"||a==="scrollintoview"){const p=this.objectStates.get(s.id);if(p&&p.visible!==!1){const u=this.getGlobalTransform(s.id),m=(((r=s.geometry)==null?void 0:r.width)||100)*(u.scale_x||1),h=(((l=s.geometry)==null?void 0:l.height)||100)*(u.scale_y||1),f=50,v=u.x+m/2>=-this.canvasWidth/2-f&&u.x-m/2<=this.canvasWidth/2+f&&u.y+h/2>=-this.canvasHeight/2-f&&u.y-h/2<=this.canvasHeight/2+f,g=this.wasInView.has(s.id);v&&!g&&(!e.conditions||this.checkConditions(e.conditions))&&this.fireEventForObject(s.id,"Scroll Into View"),v?this.wasInView.add(s.id):this.wasInView.delete(s.id)}}if(a==="scroll progress"||a==="scrollprogress"){const p=Math.abs(this.scrollOffset.y)/(((d=this.artboard)==null?void 0:d.height)||1e3),u=this.scrollProgressLastValue.get(e.id)||0;Math.abs(p-u)>.001&&(this.scrollProgressLastValue.set(e.id,p),(e.action==="Set Input"||e.action==="setInput")&&this.updateInput(e.targetInputId,p))}})})}))}solveConstraints(t){this.artboard&&this.artboard.objects.forEach(s=>{if(!s.constraints||s.constraints.length===0)return;const o=this.objectStates.get(s.id);if(!o)return;const e=this.getGlobalTransform(s.id);if(s.constraints.forEach((n,i)=>{var d,p,u,m,h,f,v,g,c;const a=((d=o.constraints)==null?void 0:d[i])||{},r={...n,...a},l=r.strength??1;if(r.type==="Translation"){const b=this.getGlobalTransform(r.targetId);if(b){const S=r.offsetX||0,w=r.offsetY||0,C=b.x+S,M=b.y+w,I=r.useSpring;if(I){const P=this.objectVelocities.get(s.id)||{vx:0,vy:0},L=Math.max(0,Math.min(t,.05)),k=r.copyX!==!1,A=r.copyY!==!1,T=k?e.x+(C-e.x)*l:e.x,R=A?e.y+(M-e.y)*l:e.y,{x:F,y:O,vx:W,vy:V}=this.computeSpring(e.x,e.y,P.vx,P.vy,T,R,r,L);k&&(e.x=F),A&&(e.y=O),this.objectVelocities.set(s.id,{vx:k?W:0,vy:A?V:0})}else r.copyX!==!1&&(e.x=e.x+(C-e.x)*l),r.copyY!==!1&&(e.y=e.y+(M-e.y)*l);let _=!1,E=!1;if((p=r.limitX)!=null&&p.enabled){const P=e.x;e.x=Math.max(r.limitX.min,Math.min(r.limitX.max,e.x)),e.x!==P&&(_=!0)}if((u=r.limitY)!=null&&u.enabled){const P=e.y;e.y=Math.max(r.limitY.min,Math.min(r.limitY.max,e.y)),e.y!==P&&(E=!0)}if((_||E)&&I){const P=this.objectVelocities.get(s.id)||{vx:0,vy:0};this.objectVelocities.set(s.id,{vx:_?0:P.vx,vy:E?0:P.vy})}}}else if(r.type==="Rotation"){const b=this.getGlobalTransform(r.targetId);if(b){let w=(b.rotation+(r.offset||0)-e.rotation)%360;w>180&&(w-=360),w<-180&&(w+=360),e.rotation=e.rotation+w*l}}else if(r.type==="Scale"){const b=this.getGlobalTransform(r.targetId);b&&(r.copyX&&(e.scale_x=e.scale_x+(b.scale_x-e.scale_x)*l),r.copyY&&(e.scale_y=e.scale_y+(b.scale_y-e.scale_y)*l))}else if(r.type==="Transform"){const b=this.getGlobalTransform(r.targetId);if(b){e.x=e.x+(b.x-e.x)*l,e.y=e.y+(b.y-e.y)*l;let S=(b.rotation-e.rotation)%360;S>180&&(S-=360),S<-180&&(S+=360),e.rotation=e.rotation+S*l,e.scale_x=e.scale_x+(b.scale_x-e.scale_x)*l,e.scale_y=e.scale_y+(b.scale_y-e.scale_y)*l}}else if(r.type==="FollowPointer"){const b=((m=this._lastPointerPos)==null?void 0:m.x)??e.x,S=((h=this._lastPointerPos)==null?void 0:h.y)??e.y,w=r.useSpring;if(w){const M=this.objectVelocities.get(s.id)||{vx:0,vy:0},{x:I,y:_,vx:E,vy:P}=this.computeSpring(e.x,e.y,M.vx,M.vy,b,S,r,t);e.x=I,e.y=_,this.objectVelocities.set(s.id,{vx:E,vy:P})}else e.x=e.x+(b-e.x)*l,e.y=e.y+(S-e.y)*l;let C=!1;if((f=r.limitX)!=null&&f.enabled){const M=e.x;e.x=Math.max(r.limitX.min,Math.min(r.limitX.max,e.x)),e.x!==M&&(C=!0)}if((v=r.limitY)!=null&&v.enabled){const M=e.y;e.y=Math.max(r.limitY.min,Math.min(r.limitY.max,e.y)),e.y!==M&&(C=!0)}C&&w&&this.objectVelocities.set(s.id,{vx:0,vy:0})}else if(r.type==="Distance"){const b=this.getGlobalTransform(r.targetId);if(b){const S=e.x-b.x,w=e.y-b.y,C=Math.sqrt(S*S+w*w),M=r.distance||0;let I=C;switch(r.mode){case"exact":I=M;break;case"minimum":I=Math.max(M,C);break;case"maximum":I=Math.min(M,C);break;case"clamped":I=Math.max(0,Math.min(M,C));break}if(C>0){const _=e.x===b.x&&e.y===b.y?1:I/C;e.x=e.x+(b.x+S*_-e.x)*l,e.y=e.y+(b.y+w*_-e.y)*l}}}else if(r.type==="FollowPath"){const b=(g=this.artboard)==null?void 0:g.objects.find(S=>S.id===r.targetId);if(b){const S=this.getGlobalTransform(b.id);if(S){let w=b.geometry;if(b.type==="Frame"||b.type==="Group"||!w||w.type!=="Path"&&w.type!=="Ellipse"&&w.type!=="Rectangle"){const Y=(c=this.artboard)==null?void 0:c.objects.find(ot=>ot.parentId===b.id&&ot.type==="Shape"&&ot.geometry&&(ot.geometry.type==="Path"||ot.geometry.type==="Ellipse"||ot.geometry.type==="Rectangle"));Y&&(w=Y.geometry)}if(!w)return;const C=Math.max(0,Math.min(1,(r.distance||0)/100)),M=S.width||w.width||0,I=S.height||w.height||0,_=this.getPointOnPath(w,M,I,C),E=S.rotation*Math.PI/180,P=Math.cos(E),L=Math.sin(E),k=_.x*S.scale_x*P-_.y*S.scale_y*L,A=_.x*S.scale_x*L+_.y*S.scale_y*P;let T=S.rotation+(r.offsetRotation||0);if(r.orient){const Y=Math.cos(_.angle),ot=Math.sin(_.angle),J=Y*S.scale_x*P-ot*S.scale_y*L,at=Y*S.scale_x*L+ot*S.scale_y*P;T=Math.atan2(at,J)*180/Math.PI+(r.offsetRotation||0)}const R=T*Math.PI/180,F=Math.cos(R),O=Math.sin(R),W=(r.offsetX||0)*F-(r.offsetY||0)*O,V=(r.offsetX||0)*O+(r.offsetY||0)*F,U=S.x+k+W,D=S.y+A+V;if(e.x=e.x+(U-e.x)*l,e.y=e.y+(D-e.y)*l,r.orient){let Y=(T-e.rotation)%360;Y>180&&(Y-=360),Y<-180&&(Y+=360),e.rotation=e.rotation+Y*l}}}}else if(r.type==="IK"){const b=this.getGlobalTransform(r.targetId);b&&this.solveIK(s,b,r.boneCount||2,l)}}),s.constraints.some(n=>n.type!=="IK")){const n=this.globalToLocal(s.parentId,e);o.x=n.x,o.y=n.y,o.rotation=n.rotation,o.flip_x=n.scale_x<0,o.scale_x=Math.abs(n.scale_x),o.flip_y=n.scale_y<0,o.scale_y=Math.abs(n.scale_y)}})}getGlobalTransform(t){var p,u;const s=this.objectStates.get(t);if(!s)return{x:0,y:0,rotation:0,scale_x:1,scale_y:1};const o=(p=this.artboard)==null?void 0:p.objects.find(m=>m.id===t),e=(o==null?void 0:o.type)==="Bone"?(u=o.geometry)==null?void 0:u.length:void 0;if(!o||!o.parentId)return{x:s.x,y:s.y,rotation:s.rotation,scale_x:(s.scale_x??1)*(s.flip_x?-1:1),scale_y:(s.scale_y??1)*(s.flip_y?-1:1),length:e};const n=this.getGlobalTransform(o.parentId),i=n.rotation*Math.PI/180,a=Math.cos(i),r=Math.sin(i),l=n.x+(s.x*n.scale_x*a-s.y*n.scale_y*r),d=n.y+(s.x*n.scale_x*r+s.y*n.scale_y*a);return{x:l,y:d,rotation:n.rotation+s.rotation,scale_x:n.scale_x*(s.scale_x??1)*(s.flip_x?-1:1),scale_y:n.scale_y*(s.scale_y??1)*(s.flip_y?-1:1),length:e}}globalToLocal(t,s){if(!t)return s;const o=this.getGlobalTransform(t),e=o.scale_x===0?0:1/o.scale_x,n=o.scale_y===0?0:1/o.scale_y,i=-o.rotation*Math.PI/180,a=Math.cos(i),r=Math.sin(i),l=s.x-o.x,d=s.y-o.y,p=(l*a-d*r)*e,u=(l*r+d*a)*n;return{x:p,y:u,rotation:s.rotation-o.rotation,scale_x:s.scale_x/(o.scale_x||1),scale_y:s.scale_y/(o.scale_y||1)}}solveIK(t,s,o,e){var l;const n=[];let i=t.id;for(let d=0;d<o&&i;d++){const p=(l=this.artboard)==null?void 0:l.objects.find(u=>u.id===i);if(!p)break;n.push({id:i,local:this.objectStates.get(i),global:this.getGlobalTransform(i)}),i=p.parentId}if(n.length<2)return;const a=n.reverse(),r=5;for(let d=0;d<r;d++){const p=this.getGlobalTransform(t.id);for(let u=a.length-2;u>=0;u--){const m=a[u],h=this.getGlobalTransform(m.id),f=p.x-h.x,v=p.y-h.y,g=s.x-h.x,c=s.y-h.y,b=Math.sqrt(f*f+v*v),S=Math.sqrt(g*g+c*c);if(b>.001&&S>.001){const w=Math.atan2(v,f);let M=(Math.atan2(c,g)-w)*180/Math.PI;M*=e;const I=this.objectStates.get(m.id);I&&(I.rotation+=M)}}}}computeSpring(t,s,o,e,n,i,a,r){const l=a.stiffness??100,d=a.damping??10,p=a.mass??1,u=-l*(t-n),m=-l*(s-i),h=-d*o,f=-d*e,v=(u+h)/p,g=(m+f)/p,c=o+v*r,b=e+g*r,S=t+c*r,w=s+b*r;return{x:S,y:w,vx:c,vy:b}}handlePointerInput(t,s,o,e,n){if(!this.artboard)return;const i=this.calculateTransform(e,n,this.artboard.width,this.artboard.height,this.layout.fit,this.layout.alignment),a=(s-i.tx)/i.scaleX,r=(o-i.ty)/i.scaleY;this._prevPointerPos=this._lastPointerPos,this._lastPointerPos={x:a,y:r},this._prevPointerPos&&(this._mouseDelta.dx+=a-this._prevPointerPos.x,this._mouseDelta.dy+=r-this._prevPointerPos.y),this.updateInput("mouseX",a),this.updateInput("mouseY",r),this.handlePointerEvent(t,a,r)}handleScroll(t,s){const o=this.scrollOffset.x,e=this.scrollOffset.y;this.scrollOffset={x:t,y:s},this._totalScroll.x+=t-o,this._totalScroll.y+=s-e,this.updateInput("scrollX",this._totalScroll.x),this.updateInput("scrollY",this._totalScroll.y)}isListViewObject(t){var n;if(!t)return!1;const s=(t.type||"").toLowerCase(),o=(t.variant||"").toLowerCase(),e=(((n=t.geometry)==null?void 0:n.type)||"").toLowerCase();return s==="listview"||o==="listview"||e==="listview"}getResolvedListViewItems(t,s){const o=this.objectStates.get(t==null?void 0:t.id),e=s||(o==null?void 0:o.options)||(t==null?void 0:t.options)||{};let n=Array.isArray(e.items)?e.items:typeof e.items=="string"?e.items.split(",").map(i=>i.trim()):[];if(e.isDataVarEnabled&&e.dataInputId){let i=this.inputs.get(e.dataInputId);if(i===void 0){const a=this.inputNameMap.get(e.dataInputId);a&&a.length>0&&(i=this.inputs.get(a[0]))}if(i&&Array.isArray(i))n=i.map(a=>typeof a=="string"?a:String(a));else if(typeof i=="string")try{n=JSON.parse(i).map(a=>String(a))}catch{}}return n}getResolvedDropdownOptions(t,s){const o=this.objectStates.get(t==null?void 0:t.id),e=s||(o==null?void 0:o.options)||(t==null?void 0:t.options)||{};let n=Array.isArray(e.optionsList)?e.optionsList:typeof e.optionsList=="string"?e.optionsList.split(",").map(i=>i.trim()):[];if(e.isDataVarEnabled&&e.dataInputId){let i=this.inputs.get(e.dataInputId);if(i===void 0){const a=this.inputNameMap.get(e.dataInputId);a&&a.length>0&&(i=this.inputs.get(a[0]))}if(i&&Array.isArray(i))n=i.map(a=>typeof a=="string"?a:String(a));else if(typeof i=="string")try{const a=JSON.parse(i);Array.isArray(a)?n=a.map(String):n=i.split(",").map(r=>r.trim())}catch{n=i.split(",").map(a=>a.trim())}}return n}handleWheel(t,s,o,e,n,i){var a,r,l,d;if(o!==void 0&&e!==void 0&&n&&i&&this.artboard){const p=this.calculateTransform(n,i,this.artboard.width,this.artboard.height,this.layout.fit,this.layout.alignment),u=(o-p.tx)/p.scaleX,m=(e-p.ty)/p.scaleY;this._lastPointerPos={x:u,y:m}}if(this._lastPointerPos&&this.artboard){let p=!1;for(let u=this.artboard.objects.length-1;u>=0;u--){const m=this.artboard.objects[u];if(this.isListViewObject(m)){const h=this.objectStates.get(m.id),f=(h==null?void 0:h.options)||m.options||{},v=(h==null?void 0:h.width)??(((a=m.geometry)==null?void 0:a.width)||200),g=(h==null?void 0:h.height)??(((r=m.geometry)==null?void 0:r.height)||300),c=this.getWorldTransform(m.id),b=this._lastPointerPos.x-c.x,S=this._lastPointerPos.y-c.y,w=-c.rotation*(Math.PI/180),C=Math.cos(w),M=Math.sin(w),I=b*C-S*M,_=b*M+S*C,E=c.scaleX||1,P=c.scaleY||1,L=v*Math.abs(E),k=g*Math.abs(P);if(Math.abs(I)<=L/2&&Math.abs(_)<=k/2){const A=f.orientation||"vertical";let T=f.scrollOffset||0;if(A==="vertical"?T-=s:T-=Math.abs(t)>Math.abs(s)?t:s,(f.listLayout||"linear")==="circular")f.scrollOffset=T,h&&h.options&&(h.options.scrollOffset=T),m.options&&(m.options.scrollOffset=T);else{const F=this.getResolvedListViewItems(m,f),O=f.itemGap??10,W=f.itemHeight??50,V=f.itemWidth??200,U=typeof f.padding=="number"?f.padding:A==="vertical"?((l=f.padding)==null?void 0:l[0])||0:((d=f.padding)==null?void 0:d[3])||0,Y=(F.length||0)*(A==="vertical"?W:V)+Math.max(0,(F.length||0)-1)*O+U*2,J=Math.max(0,Y-(A==="vertical"?g:v));T>0&&(T=0),T<-J&&(T=-J),f.scrollOffset=T,h&&h.options&&(h.options.scrollOffset=T),m.options&&(m.options.scrollOffset=T)}p=!0;break}}}if(p)return}this._totalScroll.x+=t,this._totalScroll.y+=s,this.scrollOffset={x:this._totalScroll.x,y:this._totalScroll.y},this.updateInput("scrollX",this._totalScroll.x),this.updateInput("scrollY",this._totalScroll.y)}handlePointerEvent(t,s,o){var r,l,d,p,u,m,h,f,v,g;if(!this.artboard)return;t==="down"?(this.isMouseDown=!0,this.updateInput("isMouseDown",!0)):(t==="up"||t==="blur")&&(this.isMouseDown=!1,this.updateInput("isMouseDown",!1));let e=null;const n=(c,b)=>{var _;let S=b;b==="click"?S="onClick":b==="down"?S="onPointerDown":b==="up"?S="onPointerUp":b==="blur"&&(S="onPointerLeave");const w=new Set([S]);b==="move"&&(w.add("onPointerEnter").add("hover").add("onPointerLeave").add("blur"),w.add("Drag").add("drag").add("ondrag")),S==="onClick"&&w.add("click"),S==="onPointerDown"&&w.add("pointerDown"),S==="onPointerUp"&&w.add("pointerUp");const C=["button","toggle","toggle_button","dropdown","listview","inputbox","slider","checkbox","radiogroup","joystick"];if(this.isListViewObject(c)||c.type==="Component"&&c.variant&&C.includes(String(c.variant).toLowerCase())||c.type==="Joystick"||C.includes((_=c.type)==null?void 0:_.toLowerCase()))return!0;const M=c.interactions||[];return!!(M.some(E=>w.has(E.event))||M.some(E=>Array.isArray(E.triggers)&&E.triggers.some(P=>w.has(String(P))))||(c.triggers||[]).some(E=>w.has(E.eventType)))};let i=null;for(let c=this.artboard.objects.length-1;c>=0;c--){const b=this.artboard.objects[c],S=this.objectStates.get(b.id);if(S&&S.visible!==!1&&S.opacity>0&&this.hitTest(b,s,o)&&(i||(i=b),n(b,t))){e=b;break}}!e&&i&&(e=i),this.pointerHistory.push({x:s,y:o,time:Date.now()}),this.pointerHistory.length>this.MAX_HISTORY&&this.pointerHistory.shift();const a=(e==null?void 0:e.id)||null;if(t==="move"){if(this.draggingSliderId){const c=this.artboard.objects.find(b=>b.id===this.draggingSliderId);c&&this.updateSliderValueFromPointer(c,s,o);return}if(this.draggingJoystickId){const c=this.artboard.objects.find(b=>b.id===this.draggingJoystickId);c&&this.updateJoystickValueFromPointer(c,s,o);return}if(this.draggingListViewId){const c=this.artboard.objects.find(b=>b.id===this.draggingListViewId);c&&this.updateListViewScrollFromPointer(c);return}if(e&&this.isListViewObject(e)&&this.updateListViewHoverFromPointer(e,s,o),this.isMouseDown&&this.dragStartPointer&&this.draggingBehaviors.size>0){const c=s-this.dragStartPointer.x,b=o-this.dragStartPointer.y;this.draggingBehaviors.forEach(S=>{const w=this.dragStartPositions.get(S);if(!w)return;const C=this.artboard.objects.find(I=>I.id===S);if(!C||C.parentId)return;const M=this.objectStates.get(S);M&&(M.x=w.x+c,M.y=w.y+b)})}if(this.isMouseDown){const c=this.activeObjectId&&this.artboard.objects.some(S=>S.id===this.activeObjectId)?this.activeObjectId:a,b=c?this.artboard.objects.find(S=>S.id===c):null;b&&n(b,"move")&&this.fireEventForObject(b.id,"Drag")}!this.isMouseDown&&a!==this.lastHoveredObjectId&&(this.log(`[Engine] HOVER CHANGE: ${this.lastHoveredObjectId} -> ${a}`),this.lastHoveredObjectId&&this.fireEventForObject(this.lastHoveredObjectId,"onPointerLeave"),a&&this.fireEventForObject(a,"onPointerEnter"),this.lastHoveredObjectId=a);return}if((t==="up"||t==="blur")&&(this.draggingSliderId=null,this.draggingJoystickId=null,this.draggingListViewId=null,this.draggingListViewIsScrollbar=!1,this.draggingBehaviors.clear(),this.dragStartPointer=null,this.dragStartPositions.clear(),this.pointerDownTimes.delete(a),this.activeObjectId=null),t==="down"&&(this.pointerDownTimes.set(a,this.currentTime),this.activeObjectId=a,e&&((r=e.behaviors)!=null&&r.some(c=>c.type===tt.Draggable)||this.hasDragInteraction(e)))){this.draggingBehaviors.add(a);const c=this.objectStates.get(a);c&&(this.dragStartPointer={x:s,y:o},this.dragStartPositions.set(a,{x:c.x??0,y:c.y??0}))}if(t==="move"?(a&&!this.activeHoverIds.has(a)&&this.activeHoverIds.add(a),this.activeHoverIds.forEach(c=>{c!==a&&this.activeHoverIds.delete(c)})):t==="blur"&&this.activeHoverIds.clear(),this.activeDropdownId&&t==="down"){const c=this.artboard.objects.find(b=>b.id===this.activeDropdownId);if(c&&(c.type==="Dropdown"||c.variant==="dropdown")){const b=this.objectStates.get(c.id),S=(b==null?void 0:b.options)||c.options||{},w=c.geometry||{},C=w.width??c.width??200,M=w.height??c.height??40,I=this.getResolvedDropdownOptions(c,S),_=S.itemHeight||32,E=S.listPadding??4,P=I.length*_+E*2,L=this.getWorldTransform(c.id),k=C*Math.abs(L.scaleX),A=M*Math.abs(L.scaleY),T=L.y+A/2+4,R=Math.abs(s-L.x)<=k/2,F=o>=T&&o<=T+P*Math.abs(L.scaleY);if(R&&F){const O=Math.abs(L.scaleY),W=o-(T+E*O),V=Math.floor(W/(_*O));if(V>=0&&V<I.length){const U=I[V];S.selectedOption=U,S.isOpen=!1,this.activeDropdownId=null,c.inputId&&this.setInternalInput(c.inputId,U),this.onComponentChange&&this.onComponentChange({objectId:c.id,componentName:c.name,variant:"dropdown",property:"selectedOption",value:U})}return}else a!==this.activeDropdownId&&(S.isOpen=!1,this.activeDropdownId=null)}}if(e){let c=e,b=e;for(;b&&b.parentId;){const C=this.artboard.objects.find(M=>M.id===b.parentId);if(C&&C.type==="Component"){c=C;break}b=C}let S=t;if(t==="click"?S="onClick":t==="down"?S="onPointerDown":t==="up"?S="onPointerUp":t==="blur"&&(S="onPointerLeave"),this.fireEventForObject(e.id,S),c!==e&&this.fireEventForObject(c.id,S),c.type==="Component"&&c.variant==="toggle_button"&&t==="down"){const C=this.objectStates.get(c.id),M=(C==null?void 0:C.options)||c.options||{};M.checked=!M.checked,c.inputId&&this.setInternalInput(c.inputId,M.checked),this.onComponentChange&&this.onComponentChange({objectId:c.id,componentName:c.name,variant:"toggle_button",property:"checked",value:M.checked}),this.fireEventForObject(c.id,"Toggle"),this.fireEventForObject(c.id,M.checked?"Toggle True":"Toggle False")}if(c.type==="Component"&&c.variant==="toggle"&&t==="down"){const C=this.objectStates.get(c.id),M=(C==null?void 0:C.options)||c.options||{};M.checked=!M.checked,c.inputId&&this.setInternalInput(c.inputId,M.checked),this.onComponentChange&&this.onComponentChange({objectId:c.id,componentName:c.name,variant:"toggle",property:"checked",value:M.checked}),this.onToggle&&this.onToggle(c.name,M.checked),this.fireEventForObject(c.id,"Toggle"),this.fireEventForObject(c.id,M.checked?"Toggle True":"Toggle False")}if(c.type==="Component"&&c.variant==="dropdown"&&t==="down"){const C=this.objectStates.get(c.id),M=(C==null?void 0:C.options)||c.options||{},I=!M.isOpen;if(I&&this.activeDropdownId&&this.activeDropdownId!==c.id){const _=this.artboard.objects.find(E=>E.id===this.activeDropdownId);_&&_.options&&(_.options.isOpen=!1)}M.isOpen=I,this.activeDropdownId=I?c.id:null}if((c.type==="Button"||c.type==="Component"&&(c.variant==="button"||(c.name||"").toLowerCase().includes("button")||(c.name||"").toLowerCase().includes("cta")))&&t==="down"&&(this.onButtonClick&&this.onButtonClick(c.name,c.id),this.onComponentChange&&this.onComponentChange({objectId:c.id,componentName:c.name,variant:"button",property:"click",value:!0})),this.isListViewObject(c)&&t==="down"){this.draggingListViewId=c.id;const C=this.objectStates.get(c.id),M=(C==null?void 0:C.options)||c.options||{},I=(C==null?void 0:C.width)??(((l=c.geometry)==null?void 0:l.width)||200),_=(C==null?void 0:C.height)??(((d=c.geometry)==null?void 0:d.height)||300),E=M.orientation||"vertical",P=M.scrollbarWidth||4,L=M.showScrollbar!==!1;let k=!1;if(L&&M.listLayout!=="circular"){const T=this.getWorldTransform(c.id),R=-T.rotation*(Math.PI/180),F=Math.cos(R),O=Math.sin(R),W=s-T.x,V=o-T.y,U=W*F-V*O,D=W*O+V*F,Y=T.scaleX||1,ot=T.scaleY||1,J=U/Y,at=D/ot,j=12;E==="vertical"?J>=I/2-P-j&&J<=I/2+j&&(k=!0):at>=_/2-P-j&&at<=_/2+j&&(k=!0)}this.draggingListViewIsScrollbar=k;const A=this.getListViewItemIndexAtPointer(c,s,o);if(A!==null){const T=c.options||{};T.activeItemIndex=A;const R=this.objectStates.get(c.id);R&&R.options&&(R.options.activeItemIndex=A);const O=this.getResolvedListViewItems(c,T)[A],W=typeof O=="string"?O:(O==null?void 0:O.label)||(O==null?void 0:O.value)||A;R&&R.options&&(R.options.selectedValue=W),c.inputId&&this.setInternalInput(c.inputId,W),this.onComponentChange&&(this.onComponentChange({objectId:c.id,componentName:c.name,variant:"listview",property:"activeItemIndex",value:A}),this.onComponentChange({objectId:c.id,componentName:c.name,variant:"listview",property:"selected",value:W}))}}if(c.type==="Component"&&c.variant==="slider"&&t==="down"&&(this.draggingSliderId=c.id,this.updateSliderValueFromPointer(c,s,o)),c.type==="Joystick"||c.type==="Component"&&c.variant==="joystick"){if(t==="down")this.draggingJoystickId=c.id,this.updateJoystickValueFromPointer(c,s,o);else if(t==="up"||t==="blur"){const C=this.objectStates.get(c.id);C&&c.isSpringReturn!==!1&&(C.handleX=0,C.handleY=0),c.isSpringReturn!==!1&&(c.handleX=0,c.handleY=0)}}if(c.type==="Component"&&c.variant==="checkbox"&&t==="down"){const C=this.objectStates.get(c.id),M=(C==null?void 0:C.options)||c.options||{};M.checked=!M.checked,c.inputId&&this.setInternalInput(c.inputId,M.checked),this.onComponentChange&&this.onComponentChange({objectId:c.id,componentName:c.name,variant:"checkbox",property:"checked",value:M.checked}),this.fireEventForObject(c.id,"Click"),this.fireEventForObject(c.id,M.checked?"Checked":"Unchecked")}if(c.type==="Component"&&c.variant==="radiogroup"&&t==="down"){const C=this.objectStates.get(c.id),M=(C==null?void 0:C.options)||c.options||{},I=M.optionsList||[],_=this.getRadioGroupItemIndexAtPointer(c,s,o);if(_!==null&&_>=0&&_<I.length){const E=I[_];M.selectedValue=E,c.inputId&&this.setInternalInput(c.inputId,E),this.onComponentChange&&this.onComponentChange({objectId:c.id,componentName:c.name,variant:"radiogroup",property:"selectedValue",value:E}),this.fireEventForObject(c.id,"Click"),this.fireEventForObject(c.id,`Selected: ${E}`)}}if(c.type==="LineGraph"&&(t==="down"||t==="click")){const C=c.geometry,M=(C==null?void 0:C.datasets)||[],I=this.objectStates.get(c.id),_=(I==null?void 0:I.width)||(C==null?void 0:C.width)||200,E=(I==null?void 0:I.height)||(C==null?void 0:C.height)||150,P=this.getWorldTransform(c.id),L=30,k=20,A=_-L,T=E-k;let R=1;M.forEach(W=>{const V=Math.max(...W.data||[0]);V>R&&(R=V)});let F=1/0,O=null;M.forEach((W,V)=>{const U=W.data||[],D=A/Math.max(U.length-1,1);U.forEach((Y,ot)=>{const J=P.x-_/2+L+ot*D,at=P.y+E/2-k-Y/R*T,j=Math.sqrt((s-J)**2+(o-at)**2);j<F&&(F=j,O={dIdx:V,pIdx:ot,val:Y,label:W.label||`Dataset ${V+1}`})})}),O&&F<20&&this.onGraphPointClick&&this.onGraphPointClick({objectId:c.id,componentName:c.name,datasetIndex:O.dIdx,pointIndex:O.pIdx,value:O.val,label:O.label}),this.onComponentChange&&this.onComponentChange({objectId:c.id,componentName:c.name,variant:"linegraph",property:"click",value:(O==null?void 0:O.val)??null})}if((c==null?void 0:c.type)==="InputBox"||(c==null?void 0:c.type)==="Component"&&(c.variant==="inputbox"||c.name==="InputBox")){if(t==="down"||t==="click"){const C=this.focusedId;if(this.focusedId=c.id,this.log(`[Engine] Focus set to: ${c.id}`),C!==this.focusedId){if(C){const ot=(p=this.artboard)==null?void 0:p.objects.find(J=>J.id===C);ot&&this.onInputBlur&&this.onInputBlur(ot.name)}this.onInputFocus&&this.onInputFocus(c.name)}const M=this.objectStates.get(c.id),I=(M==null?void 0:M.options)||c.options||{},_=c.geometry||{},E=(M==null?void 0:M.width)||(_==null?void 0:_.width)||250,P=(M==null?void 0:M.height)||(_==null?void 0:_.height)||45,L=this.getWorldTransform(c.id),k=-L.rotation*(Math.PI/180),A=Math.cos(k),T=Math.sin(k),R=s-L.x,F=o-L.y,O=(R*A-F*T)/(L.scaleX||1),W=(R*T+F*A)/(L.scaleY||1);if(I.inputType==="number"&&((u=I.number)==null?void 0:u.showSteppers)!==!1){const J=E/2-4,at=J-24;if(O>=at&&O<=J&&Math.abs(W)<=P/2){const j=Number(((m=I.number)==null?void 0:m.step)??1),it=((h=I.number)==null?void 0:h.min)!==void 0?Number(I.number.min):-1/0,B=((f=I.number)==null?void 0:f.max)!==void 0?Number(I.number.max):1/0;let X=parseFloat(I.text??I.value??"0");isNaN(X)&&(X=0),W<0?X=Math.min(B,X+j):X=Math.max(it,X-j);const N=String(X);I.text=N,I.value=N,c.options&&(c.options.text=N,c.options.value=N),M&&M.options&&(M.options.text=N,M.options.value=N),this.onComponentChange&&this.onComponentChange({objectId:c.id,componentName:c.name,variant:"inputbox",property:"value",value:N}),this.onInputChange&&this.onInputChange(c.name,N),this.onInputUpdate&&this.onInputUpdate(c.id,N);return}}const V=I.rightIcon||{},U=I.inputType==="password",D=V.mode==="clear"||I.inputType==="search"&&(I.text||I.value),Y=V.mode==="password-toggle"||U&&V.visible!==!1;if(V.visible||Y||D){const ot=V.offset??16,J=V.size??16,at=E/2-ot;if(Math.abs(O-at)<=J&&Math.abs(W)<=P/2){if(Y){I.passwordVisible=!I.passwordVisible,M&&M.options&&(M.options.passwordVisible=I.passwordVisible),c.options&&(c.options.passwordVisible=I.passwordVisible);return}else if(D){I.text="",I.value="",M&&M.options&&(M.options.text="",M.options.value=""),c.options&&(c.options.text="",c.options.value=""),this.onInputChange&&this.onInputChange(c.name,""),this.onInputUpdate&&this.onInputUpdate(c.id,"");return}}}}}else if((t==="click"||t==="down")&&this.focusedId){const C=this.focusedId;this.focusedId=null;const M=(v=this.artboard)==null?void 0:v.objects.find(I=>I.id===C);M&&this.onInputBlur&&this.onInputBlur(M.name)}}else if(t==="click"||t==="down"){const c=this.focusedId;if(this.focusedId=null,c){const b=(g=this.artboard)==null?void 0:g.objects.find(S=>S.id===c);b&&this.onInputBlur&&this.onInputBlur(b.name)}}}handleKeyDown(t){var l,d,p,u;if(!this.artboard||(this.activeKeys.add(t.key.toLowerCase()),this.activeKeys.add(t.code),!this.focusedId))return;const s=this.artboard.objects.find(m=>m.id===this.focusedId),o=(s==null?void 0:s.type)==="InputBox"||(s==null?void 0:s.type)==="Component"&&(s.variant==="inputbox"||s.name==="InputBox");if(!s||!o)return;const e=this.objectStates.get(s.id),n=(e==null?void 0:e.options)||s.options||{};let i=String(n.text??n.value??"");const a=n.inputType==="textarea"||n.multiline===!0;if(t.key==="Backspace")i=i.slice(0,-1),t.preventDefault();else if(t.key==="Escape"){this.focusedId=null,this.onInputBlur&&this.onInputBlur(s.name);return}else if(t.key==="Enter")if(a)i+=`
7
+ `,t.preventDefault();else{this.focusedId=null,this.onInputBlur&&this.onInputBlur(s.name);return}else if(t.key==="ArrowUp"&&n.inputType==="number"){const m=Number(((l=n.number)==null?void 0:l.step)??1),h=((d=n.number)==null?void 0:d.max)!==void 0?Number(n.number.max):1/0;let f=parseFloat(i)||0;f=Math.min(h,f+m),i=String(f),t.preventDefault()}else if(t.key==="ArrowDown"&&n.inputType==="number"){const m=Number(((p=n.number)==null?void 0:p.step)??1),h=((u=n.number)==null?void 0:u.min)!==void 0?Number(n.number.min):-1/0;let f=parseFloat(i)||0;f=Math.max(h,f-m),i=String(f),t.preventDefault()}else if(t.key.length===1&&!t.ctrlKey&&!t.metaKey&&!t.altKey){if(n.maxLength>0&&i.length>=n.maxLength||n.inputType==="number"&&(!/[\d.\-]/.test(t.key)||t.key==="-"&&i.includes("-")||t.key==="."&&i.includes(".")))return;i+=t.key,t.preventDefault()}else return;n.text=i,n.value=i,s.options&&(s.options.text=i,s.options.value=i),e&&e.options&&(e.options.text=i,e.options.value=i);const r=s.geometry;r!=null&&r.textInputId&&this.updateInput(r.textInputId,i),this.onComponentChange&&(this.onComponentChange({objectId:s.id,componentName:s.name,variant:"inputbox",property:"text",value:i}),this.onComponentChange({objectId:s.id,componentName:s.name,variant:"inputbox",property:"value",value:i})),this.onInputChange&&this.onInputChange(s.name,i),this.onInputUpdate&&this.onInputUpdate(this.focusedId,i)}handleKeyUp(t){this.artboard&&(this.activeKeys.delete(t.key.toLowerCase()),this.activeKeys.delete(t.code))}hasDragInteraction(t){return t?(t.interactions||[]).some(o=>{const e=o.triggers||[o.event||o.trigger];return Array.isArray(e)&&e.some(n=>String(n).toLowerCase()==="drag")}):!1}fireEventForObject(t,s){var d,p,u,m,h;const o=(d=this.artboard)==null?void 0:d.objects.find(f=>f.id===t);if(!o)return;const e=new Set([s,s.toLowerCase()]),n=s.toLowerCase();n==="onclick"||n==="click"||n==="onpointerdown"||n==="pointerdown"?this.fireAnalyticsEvent(t,"click"):(n==="onpointerenter"||n==="hover"||n==="move")&&this.fireAnalyticsEvent(t,"hover"),n==="onclick"||n==="click"?(e.add("click"),e.add("onclick")):n==="onpointerdown"||n==="pointerdown"?(e.add("pointerdown"),e.add("onpointerdown")):n==="onpointerup"||n==="pointerup"?(e.add("pointerup"),e.add("onpointerup")):n==="onpointerenter"||n==="hover"||n==="move"?(e.add("hover"),e.add("onpointerenter")):n==="onpointerleave"||n==="blur"?(e.add("onpointerleave"),e.add("blur")):n==="drag"||n==="ondrag"?(e.add("drag"),e.add("ondrag")):n==="toggle"||n==="ontoggle"?(e.add("toggle"),e.add("ontoggle")):n==="toggle true"||n==="toggle_true"||n==="toggletrue"?(e.add("toggle true"),e.add("toggle_true"),e.add("toggletrue")):(n==="toggle false"||n==="toggle_false"||n==="togglefalse")&&(e.add("toggle false"),e.add("toggle_false"),e.add("togglefalse"));const a=(o.interactions||[]).find(f=>{const v=f.triggers||[f.event||f.trigger||"click"];return((f.triggerLogic||"OR")==="AND"?v.every(b=>e.has(b.toLowerCase())):v.some(b=>e.has(b.toLowerCase())))?f.conditions&&f.conditions.length>0?this.checkConditions(f.conditions):!0:!1});if(a){if(this.log(`[Engine] Interaction matched: ${s} -> Action: ${a.action}`),a.action==="setInput"||a.action==="Set Input"){let f=a.value||a.inputValue;f==="toggle"&&(f=!this.inputs.get(a.targetInputId)),this.updateInput(a.targetInputId,f)}else if(a.action==="Toggle Boolean"){const f=this.inputs.get(a.targetInputId);this.updateInput(a.targetInputId,!f)}else if(a.action==="fireTrigger")this.updateInput(a.targetInputId,!0);else if(a.action==="setProperty"){const f=a.targetObjectId||o.id,v=a.targetProperty;v&&this.updateObjectProperty(f,v,a.value)}else if(a.action==="Navigate Artboard"||a.action==="navigate")this.onNavigation&&this.onNavigation({type:"artboard",value:a.targetArtboard||a.value});else if(a.action==="Navigate URL")this.onNavigation&&this.onNavigation({type:"url",value:a.navigateUrl});else if(a.action==="Play Animation"){const f=a.targetAnimationId,v=!a.playMode||a.playMode==="all"?void 0:a.subAnimationIds;f==="__all__"?(u=(p=this.artboard)==null?void 0:p.animations)==null||u.forEach(g=>{this.triggerGlobalAnimation(g.id,v)}):f&&this.triggerGlobalAnimation(f,v)}else if(a.action==="setState"||a.action==="Set State"){const f=a.targetObjectId||o.id,g={...this.objectStates.get(f)||{},...a.value||{}};this.objectStates.set(f,g),this.log(`[Engine] State updated for ${f}:`,g)}else if(a.action==="Stop Animation"||a.action==="Pause Animation"){const f=a.targetAnimationId;f==="__all__"?this.layerStates.forEach((v,g)=>{g.startsWith("global_")&&this.layerStates.delete(g)}):f&&this.layerStates.forEach((v,g)=>{g.startsWith(`global_${f}_`)&&this.layerStates.delete(g)})}else if(a.action==="Switch to State"&&this.activeStateMachine){const f=a.targetState,v=this.activeStateMachine.layers.find(g=>g.states.some(c=>c.id===f||c.name===f));v&&(this.log(`[Engine] Switching Layer ${v.name} to State ${f}`),this.enterStates(v.name,[f]))}this.onTrigger&&this.onTrigger(s,a.action)}const l=(o.triggers||[]).find(f=>{const v=f.eventType.toLowerCase();let g=!1;return(e.has(v)||v==="click"&&e.has("onclick")||v==="hover"&&(e.has("onpointerenter")||e.has("hover"))||v==="pointerdown"&&e.has("onpointerdown")||v==="pointerup"&&e.has("onpointerup"))&&(g=!0),g&&f.conditions&&f.conditions.length>0?this.checkConditions(f.conditions):g});if(l&&l.entryAnimationId){this.log(`[Engine] Trigger matched: ${s} (as ${l.eventType}) -> Animation ${l.entryAnimationId}`);const f=(h=(m=this.artboard)==null?void 0:m.animations)==null?void 0:h.find(v=>v.id===l.entryAnimationId);f&&(this.activeTriggers.set(o.id,{triggerId:l.id,animation:f,time:0,phase:"entry",elapsedHold:0,filterObjectId:l.targetObjectId}),this.onTrigger&&this.onTrigger(l.name,f.name))}}fireAnalyticsEvent(t,s){var r,l;const o=(r=this.artboard)==null?void 0:r.objects.find(d=>d.id===t);if(!o)return;const e=(l=o.style)==null?void 0:l.analytics;if(!e||!e.isEnabled||e.triggerType!==s)return;const n=e.eventName||`${o.name.toLowerCase().replace(/\s+/g,"_")}_interacted`,i={};e.parameters&&Array.isArray(e.parameters)&&e.parameters.forEach(d=>{if(d.type==="literal")i[d.key]=d.value;else if(d.type==="variable"){const p=this.inputs.get(d.value);i[d.key]=p!==void 0?p:""}}),this.log(`[ExodeUI Analytics] Dispatching event "${n}" via ${s} trigger:`,i);const a=e.platforms||{ga4:!0,meta:!0,mixpanel:!1};if(a.ga4){const d=window;typeof d.gtag=="function"?(d.gtag("event",n,i),this.log(`[ExodeUI Analytics] GA4: Event "${n}" sent successfully.`)):this.warn(`[ExodeUI Analytics] GA4: window.gtag is not a function. Event "${n}" skipped.`)}if(a.meta){const d=window;typeof d.fbq=="function"?(d.fbq("track",n,i),this.log(`[ExodeUI Analytics] Meta Pixel: Event "${n}" sent successfully.`)):this.warn(`[ExodeUI Analytics] Meta Pixel: window.fbq is not a function. Event "${n}" skipped.`)}if(a.mixpanel){const d=window;d.mixpanel&&typeof d.mixpanel.track=="function"?(d.mixpanel.track(n,i),this.log(`[ExodeUI Analytics] Mixpanel: Event "${n}" sent successfully.`)):this.warn(`[ExodeUI Analytics] Mixpanel: window.mixpanel.track is not a function. Event "${n}" skipped.`)}}getAnimationDuration(t){var o;if(!t)return 0;let s=t.duration||0;return s<=0&&((o=t.tracks)==null||o.forEach(e=>{var n;(n=e.keyframes)==null||n.forEach(i=>{i.time>s&&(s=i.time)})})),s>0?s:1}initGlobalAnimationTriggers(){if(!this.artboard)return;const t=this.artboard.animationFlow||[];let s=!1;t.forEach(o=>{if((o.trigger==="on_load"||o.trigger==="after_delay")&&o.targetAnimationId){s=!0;const e=o.delay||0;e<=0?this.triggerGlobalAnimation(o.targetAnimationId,o.subAnimationIds,o.loop,o.id):setTimeout(()=>this.triggerGlobalAnimation(o.targetAnimationId,o.subAnimationIds,o.loop,o.id),e)}}),!s&&this.artboard.startupAnimationId&&this.triggerGlobalAnimation(this.artboard.startupAnimationId,this.artboard.startupSubAnimationIds)}triggerGlobalAnimation(t,s,o=!1,e){var r;if(!this.artboard)return;const n=this.artboard.animations.find(l=>l.id===t);if(!n)return;let i=this.getAnimationDuration(n);const a=`global_${t}_${Math.random().toString(36).substr(2,5)}`;this.layerStates.set(a,{currentStateIds:[t],animations:[{animation:n,state:{loop:o},filterObjectIds:s}],time:0,duration:i,ruleId:e}),console.log(`[Engine] Triggered global animation: ${n.name} (AnimID: ${t}, RuleID: ${e}, Loop: ${o}, StoredDuration: ${i}, anim.duration: ${n.duration}, Tracks: ${((r=n.tracks)==null?void 0:r.length)||0})`),this.debugLog(`[Engine] Triggered global animation: ${n.name} (Loop: ${o}, Sub-Anims: ${(s==null?void 0:s.length)||"All"})`)}handleAnimationFinished(t,s){if(!this.artboard)return;console.log(`[Engine] Animation finished! AnimID: ${t}, RuleID: ${s}`);const o=this.artboard.animationFlow||[];o.forEach((e,n)=>{if(e.trigger==="after_anim"&&e.targetAnimationId){let i=e.afterAnim;!i&&n>0&&(i=o[n-1].id);const a=i===t||s&&i===s;if(console.log(`[Engine] Checking rule ${e.id} (Trigger: ${e.trigger}). ExpectedParent: ${i}. isMatch? ${a}`),a){const r=e.delay||0;console.log(`[Engine] Match found! Triggering target animation: ${e.targetAnimationId} after delay: ${r}`),r<=0?this.triggerGlobalAnimation(e.targetAnimationId,e.subAnimationIds,e.loop,e.id):setTimeout(()=>this.triggerGlobalAnimation(e.targetAnimationId,e.subAnimationIds,e.loop,e.id),r)}}})}getWorldTransform(t){var u;const s=this.objectStates.get(t);if(!s)return{x:0,y:0,scaleX:1,scaleY:1,rotation:0};const o=(u=this.artboard)==null?void 0:u.objects.find(m=>m.id===t);if(!o||!o.parentId)return{x:s.x,y:s.y,scaleX:s.scale_x??1,scaleY:s.scale_y??1,rotation:s.rotation??0};const e=this.getWorldTransform(o.parentId),n=e.rotation*(Math.PI/180),i=Math.cos(n),a=Math.sin(n),r=s.x*e.scaleX,l=s.y*e.scaleY,d=e.x+(r*i-l*a),p=e.y+(r*a+l*i);return{x:d,y:p,scaleX:(s.scale_x??1)*e.scaleX,scaleY:(s.scale_y??1)*e.scaleY,rotation:e.rotation+(s.rotation??0)}}hitTest(t,s,o){var b,S;if(!this.objectStates.get(t.id))return!1;const n=((b=t.geometry)==null?void 0:b.width)??t.width??100,i=((S=t.geometry)==null?void 0:S.height)??t.height??100,a=this.getWorldTransform(t.id),r=s-a.x,l=o-a.y,d=-a.rotation*(Math.PI/180),p=Math.cos(d),u=Math.sin(d),m=r*p-l*u,h=r*u+l*p,f=a.scaleX,v=a.scaleY,g=n*Math.abs(f),c=i*Math.abs(v);return Math.abs(m)<=g/2&&Math.abs(h)<=c/2}updateSliderValueFromPointer(t,s,o){var M;const e=this.objectStates.get(t.id);if(!e)return;const n=t.options||{},i=((M=t.geometry)==null?void 0:M.width)??t.width??200,a=this.getWorldTransform(t.id),r=s-a.x,l=o-a.y,d=-a.rotation*(Math.PI/180),p=Math.cos(d),u=Math.sin(d),m=r*p-l*u,h=n.thumbWidth??16,f=i-h;let g=(m+f/2)/f;g=Math.max(0,Math.min(1,g));const c=n.min??0,b=n.max??100,S=n.step||1;let w=c+g*(b-c);S>0&&(w=Math.round(w/S)*S),w=Math.max(c,Math.min(b,w));const C=e.options||{};C.value!==w&&(e.options={...C,value:w},t.inputId&&this.setInternalInput(t.inputId,w),this.onComponentChange&&this.onComponentChange({objectId:t.id,componentName:t.name,variant:"slider",property:"value",value:w}))}updateJoystickValueFromPointer(t,s,o){var M,I;const e=this.objectStates.get(t.id);if(!e)return;const n=(e==null?void 0:e.width)!==void 0?e.width:((M=t.geometry)==null?void 0:M.width)??t.width??100,i=(e==null?void 0:e.height)!==void 0?e.height:((I=t.geometry)==null?void 0:I.height)??t.height??100,a=this.getWorldTransform(t.id),r=s-a.x,l=o-a.y,d=-a.rotation*(Math.PI/180),p=Math.cos(d),u=Math.sin(d);let m=(r*p-l*u)/Math.max(.001,Math.abs(a.scaleX||1)),h=(r*u+l*p)/Math.max(.001,Math.abs(a.scaleY||1));t.handleOrigin==="top-left"?(m-=n/2,h-=i/2):t.handleOrigin==="bottom-right"&&(m+=n/2,h+=i/2);const f=Math.min(n,i)*.45,v=Math.min(n,i)*.15,g=f-v;let c=m/g,b=h/g;const S=Math.sqrt(c*c+b*b);t.boundsShape==="square"?(c=Math.max(-1,Math.min(1,c)),b=Math.max(-1,Math.min(1,b))):S>1&&(c/=S,b/=S),t.deadzone!==void 0&&S<t.deadzone?(c=0,b=0):(t.stepX!==void 0&&t.stepX>0&&(c=Math.round(c/t.stepX)*t.stepX),t.stepY!==void 0&&t.stepY>0&&(b=Math.round(b/t.stepY)*t.stepY)),t.joystickType==="1D_X"?b=0:t.joystickType==="1D_Y"&&(c=0);const w=e.handleX,C=e.handleY;(w!==c||C!==b)&&(e.handleX=c,e.handleY=b,t.handleX=c,t.handleY=b)}processJoysticks(t){this.artboard&&(this.artboard.objects.forEach(s=>{var l,d,p,u;if(s.type!=="Joystick"&&!(s.type==="Component"&&s.variant==="joystick"))return;const o=s,e=this.objectStates.get(o.id);if(!e)return;let n=e.handleX??o.handleX??0,i=e.handleY??o.handleY??0;const r=(o.globalInput??!1)||this.lastHoveredObjectId===o.id;if(r&&((l=o.inputBinding)==null?void 0:l.type)==="keyboard"&&o.inputBinding.keyboardConfig){const m=o.inputBinding.keyboardConfig;let h=n,f=i;const g=(m.speed||5)*t;let c=!1;this.activeKeys.has(m.upKey.toLowerCase())&&(f-=g,c=!0),this.activeKeys.has(m.downKey.toLowerCase())&&(f+=g,c=!0),this.activeKeys.has(m.leftKey.toLowerCase())&&(h-=g,c=!0),this.activeKeys.has(m.rightKey.toLowerCase())&&(h+=g,c=!0),o.joystickType==="1D_X"&&(f=0),o.joystickType==="1D_Y"&&(h=0);const b=Math.sqrt(h*h+f*f);b>1&&(h/=b,f/=b),!c&&o.isSpringReturn!==!1&&(h+=(0-h)*(10*t),f+=(0-f)*(10*t),Math.abs(h)<.01&&(h=0),Math.abs(f)<.01&&(f=0)),n=h,i=f}else if(r&&((d=o.inputBinding)==null?void 0:d.type)==="mouse"&&o.inputBinding.mouseConfig){const m=o.inputBinding.mouseConfig;let h=e._mouseTargetX??n,f=e._mouseTargetY??i;const v=m.sensitivity||.01;if(m.mode==="absolute"){const b=((p=this.artboard)==null?void 0:p.width)||window.innerWidth,S=((u=this.artboard)==null?void 0:u.height)||window.innerHeight,w=this.inputs.get("mouseX")||0,C=this.inputs.get("mouseY")||0;m.axisX&&(h=w/b*2-1),m.axisY&&(f=C/S*2-1)}else m.axisX&&(h+=this._mouseDelta.dx*v),m.axisY&&(f+=this._mouseDelta.dy*v);o.joystickType==="1D_X"&&(f=0),o.joystickType==="1D_Y"&&(h=0);const g=Math.sqrt(h*h+f*f);g>1&&(h/=g,f/=g),o.isSpringReturn!==!1&&(h+=(0-h)*(5*t),f+=(0-f)*(5*t),Math.abs(h)<.01&&(h=0),Math.abs(f)<.01&&(f=0)),e._mouseTargetX=h,e._mouseTargetY=f;const c=15*t;n+=(h-n)*Math.min(c,1),i+=(f-i)*Math.min(c,1)}if(e.handleX=n,e.handleY=i,o.handleX=n,o.handleY=i,o.bindings&&o.bindings.length>0){const m=Math.sqrt(n*n+i*i);let h=Math.atan2(i,n)*(180/Math.PI);h<0&&(h+=360),o.bindings.forEach(f=>{var c,b,S,w,C,M,I,_;let v=0;f.sourceAxis==="x"?v=o.invertX?-n:n:f.sourceAxis==="y"?v=o.invertY?-i:i:f.sourceAxis==="distance"?v=m:f.sourceAxis==="angle"&&(v=h);const g=(c=this.artboard)==null?void 0:c.objects.find(E=>E.id===f.targetObjectId);if(g){if(f.actionType==="bind"&&f.targetProperty&&f.isContinuous!==!1){const E=f.sourceMin??-1,P=f.sourceMax??1,L=f.targetMin??0,k=f.targetMax??100;let A=!!f.isContinuous,T=0,R=0;if(A){if((f.sourceAxis==="x"||f.sourceAxis==="y")&&L>=0){const O=Math.max(Math.abs(E),Math.abs(P))||1;R=v/O*k}else{let O=(v-E)/(P-E);O=Math.max(0,Math.min(1,O)),R=L+O*(k-L)}Math.abs(v)<.05&&(R=0)}else{const O=(v-E)/(P-E),W=Math.max(0,Math.min(1,O));T=L+W*(k-L),f.step&&f.step>0&&(T=Math.round(T/f.step)*f.step)}const F=this.objectStates.get(g.id);if(F){const O=f.isRelative!==!1,W=O?((b=g.transform)==null?void 0:b.x)??0:0,V=O?((S=g.transform)==null?void 0:S.y)??0:0,U=O?((w=g.transform)==null?void 0:w.rotation)??0:0,D=O?((C=g.transform)==null?void 0:C.scale_x)??1:0,Y=O?((M=g.transform)==null?void 0:M.scale_y)??1:0,ot=O?((I=g.style)==null?void 0:I.opacity)??100:0,J=Math.min(t*60,3),at=(j,it)=>{let B=T;if(A){const X=`_internal_${j}_${f.id}`;let N=F[X];N===void 0&&(N=F[j]??it),B=N+R*J,F[X]=B,f.step&&f.step>0&&(B=Math.round(B/f.step)*f.step)}else{B=it+T;const X=`_internal_smooth_${j}_${f.id}`;let N=F[X];if(N===void 0)N=B;else{const ct=Math.min(15*t,1);N+=(B-N)*ct}F[X]=N,B=N}F[j]=B};f.targetProperty==="x"||f.targetProperty==="transform.x"?at("x",W):f.targetProperty==="y"||f.targetProperty==="transform.y"?at("y",V):f.targetProperty==="rotation"||f.targetProperty==="r"||f.targetProperty==="transform.rotation"?at("rotation",U):f.targetProperty==="scaleX"||f.targetProperty==="transform.scale_x"?at("scale_x",D):f.targetProperty==="scaleY"||f.targetProperty==="transform.scale_y"?at("scale_y",Y):(f.targetProperty==="opacity"||f.targetProperty==="transform.opacity")&&at("opacity",ot)}(_=g.physics)!=null&&_.enabled&&this.physicsEngine&&(f.targetProperty==="x"||f.targetProperty==="transform.x"||f.targetProperty==="y"||f.targetProperty==="transform.y")&&(f.targetProperty==="x"||f.targetProperty==="transform.x"?this.physicsEngine.applyForce(g.id,(T-((F==null?void 0:F.x)||0))*10,0):(f.targetProperty==="y"||f.targetProperty==="transform.y")&&this.physicsEngine.applyForce(g.id,0,(T-((F==null?void 0:F.y)||0))*10))}else if(f.actionType==="playAnimation"||f.actionType==="stopAnimation"||f.actionType==="pauseAnimation"){let E=!1;const P=f.threshold??0;f.condition==="always"?E=!0:f.condition===">"?E=v>P:f.condition==="<"?E=v<P:f.condition==="=="&&(E=Math.abs(v-P)<.01);const L=e[`_prev_src_${f.id}`]??v;let k=!1;f.condition==="always"?k=!0:f.condition===">"?k=L>P:f.condition==="<"?k=L<P:f.condition==="=="&&(k=Math.abs(L-P)<.01),e[`_prev_src_${f.id}`]=v,E&&!k&&f.targetAnimationId&&(f.actionType==="playAnimation"||f.actionType)}}})}}),this._mouseDelta.dx=0,this._mouseDelta.dy=0)}applyBlendState(t,s){var l,d,p,u,m,h,f,v;if(!t.blendAnimations||t.blendAnimations.length===0)return;let o=0,e=0;t.blendInputX&&(o=this.inputs.get(t.blendInputX)??0),t.blendInputY&&(e=this.inputs.get(t.blendInputY)??0);const n=[];let i=0;if(t.blendType==="1D"){const g=[...t.blendAnimations].sort((c,b)=>c.position[0]-b.position[0]);if(g.length===1){const c=(d=(l=this.artboard)==null?void 0:l.animations)==null?void 0:d.find(b=>b.id===g[0].animationId);c&&(n.push({anim:c,weight:1}),i=1)}else{let c=0;for(;c<g.length-1&&g[c+1].position[0]<o;)c++;if(c===g.length-1&&o>g[c].position[0]){const b=(u=(p=this.artboard)==null?void 0:p.animations)==null?void 0:u.find(S=>S.id===g[c].animationId);b&&(n.push({anim:b,weight:1}),i=1)}else{const b=g[c].position[0],S=g[c+1].position[0],w=(h=(m=this.artboard)==null?void 0:m.animations)==null?void 0:h.find(E=>E.id===g[c].animationId),C=(v=(f=this.artboard)==null?void 0:f.animations)==null?void 0:v.find(E=>E.id===g[c+1].animationId),M=Math.max(.001,S-b);let I=(o-b)/M;I=Math.max(0,Math.min(1,I));const _=1-I;w&&(n.push({anim:w,weight:_}),i+=_),C&&(n.push({anim:C,weight:I}),i+=I)}}}else t.blendAnimations.forEach(g=>{var C,M;const c=(M=(C=this.artboard)==null?void 0:C.animations)==null?void 0:M.find(I=>I.id===g.animationId);if(!c)return;const b=g.position[0]-o,S=g.position[1]-e,w=b*b+S*S;if(w<1e-4)n.push({anim:c,weight:1e4}),i+=1e4;else{const I=1/w;n.push({anim:c,weight:I}),i+=I}});if(i===0)return;n.forEach(g=>g.weight/=i);const a=new Map,r=g=>{let c=g.startsWith("#")?g.substring(1):g;return c.length===3&&(c=[c[0],c[0],c[1],c[1],c[2],c[2]].join("")),c="0x"+c,{r:c>>16&255,g:c>>8&255,b:c&255,a:1}};n.forEach(({anim:g,weight:c})=>{g.tracks&&g.tracks.forEach(b=>{var P,L;const S=b.object_id||b.objectId,w=b.property,C=(P=this.artboard)==null?void 0:P.objects.find(k=>k.id===S);if(((L=C==null?void 0:C.physics)==null?void 0:L.enabled)&&C.physics.bodyType!=="Static"&&(w==="x"||w==="y"||w==="rotation"))return;const I=this.interpolate(b.keyframes,s);if(I===void 0)return;let _=a.get(S);_||(_=new Map,a.set(S,_));let E=_.get(w);if(!E){if(typeof I=="number")E={type:"number",value:0};else if(typeof I=="string"&&I.startsWith("#"))E={type:"color",value:I,colorAcc:{r:0,g:0,b:0,a:0}};else if(E={type:"number",value:I},c<.5)return;_.set(w,E)}if(E.type==="number"&&typeof I=="number")E.value+=I*c;else if(E.type==="color"&&typeof I=="string"&&E.colorAcc){const k=r(I);k&&(E.colorAcc.r+=k.r*c,E.colorAcc.g+=k.g*c,E.colorAcc.b+=k.b*c,E.colorAcc.a+=k.a*c)}else c>.5&&(E.value=I)})}),a.forEach((g,c)=>{var w;const b=this.objectStates.get(c),S=(w=this.artboard)==null?void 0:w.objects.find(C=>C.id===c);!b||!S||g.forEach((C,M)=>{let I=C.value;if(C.type==="color"&&C.colorAcc){const _=Math.round(C.colorAcc.r).toString(16).padStart(2,"0"),E=Math.round(C.colorAcc.g).toString(16).padStart(2,"0"),P=Math.round(C.colorAcc.b).toString(16).padStart(2,"0");I=`#${_}${E}${P}`}if(M.includes(".")||M.includes("[")){const _=(M||"").replace(/\[(\d+)\]/g,".$1").split(".");let E=b;for(let P=0;P<_.length-1;P++){if(typeof E[_[P]]!="object"||E[_[P]]===null){let L=S;for(let k=0;k<=P;k++)L=L?L[_[k]]:null;if(_[P]==="corner_radius"||_[P]==="cornerRadius"){const k=typeof E[_[P]]=="number"?E[_[P]]:typeof L=="number"?L:0;E[_[P]]={tl:k,tr:k,bl:k,br:k}}else{const k=_[P+1],A=!isNaN(Number(k));E[_[P]]=L?JSON.parse(JSON.stringify(L)):A?[]:{}}}E=E[_[P]]}E[_[_.length-1]]=I,_[_.length-1]==="color"&&(_[_.length-2]==="fill"||_[_.length-2]==="stroke")&&(E.type="Solid")}else M==="fill"?(b.style||(b.style={}),b.style.fill=I):M==="stroke"?(b.style||(b.style={}),b.style.stroke=I):b[M]=I})})}applyAnimation(t,s,o){!t||!t.tracks||t.tracks.forEach(e=>{var p,u,m;const n=e.object_id||e.objectId;if(o){if(Array.isArray(o)){if(!o.includes(n))return}else if(n!==o)return}const i=(p=this.artboard)==null?void 0:p.objects.find(h=>h.id===n),a=((u=i==null?void 0:i.physics)==null?void 0:u.enabled)&&i.physics.bodyType!=="Static";let r=e.property;if(a&&(r==="x"||r==="y"||r==="rotation"))return;const l=this.objectStates.get(n);if(!l){this.frameCount%600===0&&this.debugLog(`Skipping track: Object ${n} not found in state`);return}const d=this.interpolate(e.keyframes,s);if(d!==void 0){if(this.frameCount%240===0){const h=(i==null?void 0:i.name)||n,f=typeof d=="object"?JSON.stringify(d).slice(0,50):d;this.debugLog(`[Anim] Applying ${r} = ${f} to ${h}`)}if(r.includes(".")||r.includes("[")){const h=(r||"").replace(/\[(\d+)\]/g,".$1").split(".");let f=l;for(let v=0;v<h.length-1;v++){if(typeof f[h[v]]!="object"||f[h[v]]===null){let g=i;for(let c=0;c<=v;c++)g=g?g[h[c]]:null;if(h[v]==="corner_radius"||h[v]==="cornerRadius"){let c=0,b=0,S=0,w=0;const C=f[h[v]]??g;typeof C=="number"?c=b=S=w=C:Array.isArray(C)?C.length===1?c=b=S=w=C[0]:C.length===2?(c=S=C[0],b=w=C[1]):C.length===3?(c=C[0],b=w=C[1],S=C[2]):C.length>=4&&(c=C[0],b=C[1],S=C[2],w=C[3]):C&&typeof C=="object"&&(c=C[0]??C.tl??C.corner_radius??C.cornerRadius??0,b=C[1]??C.tr??C.corner_radius??C.cornerRadius??0,S=C[2]??C.br??C.corner_radius??C.cornerRadius??0,w=C[3]??C.bl??C.corner_radius??C.cornerRadius??0),f[h[v]]={tl:c,tr:b,bl:w,br:S,0:c,1:b,2:S,3:w}}else{const c=h[v+1],b=!isNaN(Number(c));f[h[v]]=g?JSON.parse(JSON.stringify(g)):b?[]:{}}}f=f[h[v]]}f[h[h.length-1]]=d,h[h.length-1]==="color"&&(h[h.length-2]==="fill"||h[h.length-2]==="stroke")&&(f.type="Solid")}else r==="fill"?(l.style||(l.style={}),l.style.fill=d):r==="stroke"?(l.style||(l.style={}),l.style.stroke=d):l[r]=d;if(this.physicsEngine&&((m=i==null?void 0:i.physics)!=null&&m.enabled)&&i.physics.bodyType==="Static")if(r==="x"){const h=this.physicsEngine.getPosition(n);h&&this.physicsEngine.setPosition(n,d,h.y)}else if(r==="y"){const h=this.physicsEngine.getPosition(n);h&&this.physicsEngine.setPosition(n,h.x,d)}else r==="rotation"&&this.physicsEngine.setRotation(n,d*(Math.PI/180))}})}interpolate(t,s){if(t.length===0)return;let o=t[0],e=t[t.length-1];if(s<=o.time)return o.value;if(s>=e.time)return e.value;for(let a=0;a<t.length-1;a++)if(s>=t[a].time&&s<t[a+1].time){o=t[a],e=t[a+1];break}const n=e.time-o.time;let i=(s-o.time)/n;return o.easing&&(i=ei(o.easing)(i)),this.interpolateValue(o.value,e.value,i)}interpolateValue(t,s,o){if(t===void 0)return s;if(s===void 0)return t;if(typeof t=="string"&&typeof s=="string"){if(t.startsWith("#"))return this.interpolateColor(t,s,o);const e=parseFloat(t),n=parseFloat(s);return!isNaN(e)&&!isNaN(n)?Math.round(e+(n-e)*o).toString():o<.5?t:s}if(Array.isArray(t)&&Array.isArray(s))return t.length===s.length?t.map((e,n)=>this.interpolateValue(e,s[n],o)):o<.5?t:s;if(typeof t=="object"&&typeof s=="object"&&t!==null&&s!==null){if(t.width!==void 0&&t.color!==void 0&&typeof t.width=="number")return this.interpolateStroke(t,s,o);if(t.type&&s.type&&(t.type==="Solid"||t.type==="LinearGradient"||t.type==="RadialGradient"||t.type==="Image"))return this.interpolateFill(t,s,o);const e={};return new Set([...Object.keys(t),...Object.keys(s)]).forEach(i=>{e[i]=this.interpolateValue(t[i],s[i],o)}),e}return typeof t=="number"&&typeof s=="number"?t+(s-t)*o:o<.5?t:s}interpolateColor(t,s,o){var h,f;const e=((f=(h=this.artboard)==null?void 0:h.tokens)==null?void 0:f.colors)||{},n=e[t]||t,i=e[s]||s,a=v=>{if(!v)return{r:0,g:0,b:0};const g=v.startsWith("#")?v.replace("#",""):"000000";return g.length===3?{r:parseInt(g[0]+g[0],16),g:parseInt(g[1]+g[1],16),b:parseInt(g[2]+g[2],16)}:{r:parseInt(g.substring(0,2),16),g:parseInt(g.substring(2,4),16),b:parseInt(g.substring(4,6),16)}},r=a(n),l=a(i),d=Math.round(r.r+(l.r-r.r)*o),p=Math.round(r.g+(l.g-r.g)*o),u=Math.round(r.b+(l.b-r.b)*o),m=v=>{const g=Math.max(0,Math.min(255,v)).toString(16);return g.length===1?"0"+g:g};return`#${m(d)}${m(p)}${m(u)}`}interpolateStops(t,s,o){return!t||!s||t.length!==s.length?o<.5?t:s:t.map((e,n)=>{const i=s[n];return{offset:e.offset+(i.offset-e.offset)*o,color:this.interpolateColor(e.color,i.color,o),opacity:(e.opacity??1)+((i.opacity??1)-(e.opacity??1))*o}})}interpolateFill(t,s,o){if(!t||!s||t.type!==s.type)return o<.5?t:s;const e={...t,opacity:(t.opacity??1)+((s.opacity??1)-(t.opacity??1))*o};return t.type==="Solid"?e.color=this.interpolateColor(t.color,s.color,o):(t.type==="LinearGradient"||t.type==="RadialGradient")&&(t.start&&s.start&&(e.start=[t.start[0]+(s.start[0]-t.start[0])*o,t.start[1]+(s.start[1]-t.start[1])*o]),t.end&&s.end&&(e.end=[t.end[0]+(s.end[0]-t.end[0])*o,t.end[1]+(s.end[1]-t.end[1])*o]),t.center&&s.center&&(e.center=[t.center[0]+(s.center[0]-t.center[0])*o,t.center[1]+(s.center[1]-t.center[1])*o]),t.radius!==void 0&&s.radius!==void 0&&(e.radius=t.radius+(s.radius-t.radius)*o),e.stops=this.interpolateStops(t.stops,s.stops,o)),e}interpolateStroke(t,s,o){if(!t||!s)return o<.5?t:s;const e={...t};return e.width=(t.width??0)+((s.width??0)-(t.width??0))*o,e.opacity=(t.opacity??1)+((s.opacity??1)-(t.opacity??1))*o,t.fill&&s.fill?e.fill=this.interpolateFill(t.fill,s.fill,o):t.color&&s.color&&t.color.startsWith("#")&&s.color.startsWith("#")&&(e.color=this.interpolateColor(t.color,s.color,o)),e.trimStart=(t.trimStart??0)+((s.trimStart??0)-(t.trimStart??0))*o,e.trimEnd=(t.trimEnd??1)+((s.trimEnd??1)-(t.trimEnd??1))*o,e.trimOffset=(t.trimOffset??0)+((s.trimOffset??0)-(t.trimOffset??0))*o,e.dashOffset=(t.dashOffset??0)+((s.dashOffset??0)-(t.dashOffset??0))*o,e}render(t,s,o){var p;this.debug_objectsTotal=((p=this.artboard)==null?void 0:p.objects.length)||0,this.debug_objectsRendered=0;const e=performance.now();if(this.canvasWidth=s,this.canvasHeight=o,!this.artboard)return;t.clearRect(0,0,s,o);const n=this.artboard.width,i=this.artboard.height,a=this.calculateTransform(s,o,n,i,this.layout.fit,this.layout.alignment);if(t.save(),t.translate(Math.round(a.tx),Math.round(a.ty)),t.scale(a.scaleX,a.scaleY),this.rootTransform=t.getTransform(),this.artboard.backgroundVisible!==!1&&(t.fillStyle=this.artboard.backgroundColor||"#000000",t.fillRect(0,0,n,i)),this.artboard.backgroundImage){const u=this.artboard.backgroundImage;let m=this.imageCache.get(u);if(m||(m=new Image,m.src=u,this.imageCache.set(u,m)),m.complete&&m.naturalWidth>0){t.save(),t.globalAlpha=this.normalizeOpacity(this.artboard.backgroundOpacity??100);const h=m.naturalWidth/m.naturalHeight,f=n/i;let v,g,c,b;f>h?(v=n,g=n/h):(g=i,v=i*h),c=(n-v)/2,b=(i-g)/2,t.drawImage(m,c,b,v,g),t.restore()}}this.artboard.clipContent!==!1&&this.artboard.clip_content!==!1&&(t.beginPath(),t.rect(0,0,n,i),t.clip());const l=new Map;this.artboard.objects.forEach(u=>l.set(u.id,u)),this.artboard.objects.filter(u=>!u.parentId).map((u,m)=>{const h=this.objectStates.get(u.id),f=(h==null?void 0:h.zIndex)??m;return{obj:u,zIndex:f}}).sort((u,m)=>u.zIndex-m.zIndex).forEach(({obj:u})=>{this.renderObject(t,u,l)}),this._emitterPools.forEach((u,m)=>{if(!(u.length===0||!l.get(m)))for(const f of u)t.save(),t.globalAlpha=f.opacity,t.fillStyle=f.color,t.beginPath(),t.arc(f.x,f.y,Math.max(1,f.size*f.opacity),0,Math.PI*2),t.fill(),t.restore()}),this.lastRenderTime=performance.now()-e,this.debugMode&&this.frameCount%60===0&&this.log(`[Engine Debug] Rendered ${this.debug_objectsRendered}/${this.debug_objectsTotal} objects in ${this.lastRenderTime.toFixed(2)}ms`),t.restore()}isObjectInView(t,s,o,e,n,i=0){const a=t.getTransform(),r=s*a.a+o*a.c+a.e,l=s*a.b+o*a.d+a.f,d=Math.sqrt(a.a*a.a+a.b*a.b),p=Math.sqrt(a.c*a.c+a.d*a.d),u=(e/2+i)*d,m=(n/2+i)*p;return r+u>=0&&r-u<=this.canvasWidth&&l+m>=0&&l-m<=this.canvasHeight}calculateTransform(t,s,o,e,n,i){let a=1,r=1,l=1;const d=o/e,p=t/s;switch(n){case"Contain":p>d?l=s/e:l=t/o,a=r=l;break;case"Cover":p>d?l=t/o:l=s/e,a=r=l;break;case"Fill":a=t/o,r=s/e;break;case"FitWidth":l=t/o,a=r=l;break;case"FitHeight":l=s/e,a=r=l;break;case"None":a=r=1;break;case"ScaleDown":l=Math.min(t/o,s/e),l>1&&(l=1),a=r=l;break;default:a=r=1;break}const u=o*a,m=e*r;let h=0,f=0;return i.includes("Left")?h=0:i.includes("Right")?h=t-u:h=(t-u)/2,i.includes("Top")?f=0:i.includes("Bottom")?f=s-m:f=(s-m)/2,{scaleX:a,scaleY:r,tx:h,ty:f}}mapFontWeight(t){const s=t.toLowerCase();return s==="thin"||s==="100"?"100":s==="extralight"||s==="200"?"200":s==="light"||s==="300"?"300":s==="regular"||s==="normal"||s==="400"?"400":s==="medium"||s==="500"?"500":s==="semibold"||s==="600"?"600":s==="bold"||s==="700"?"700":s==="extrabold"||s==="800"?"800":s==="black"||s==="900"?"900":t}drawTextDecoration(t,s,o,e,n,i){t.beginPath();const a=Math.max(1,i/14);let r=e;s==="underline"?r=e+i*.12:s==="line-through"&&(r=e-i*.3),t.lineWidth=a,t.strokeStyle=t.fillStyle,t.moveTo(o-n/2,r),t.lineTo(o+n/2,r),t.stroke()}renderObject(t,s,o,e=!1,n=!1){var b,S,w,C,M,I,_,E,P,L,k,A,T,R,F,O,W,V,U,D,Y,ot,J,at,j,it,B,X,N,ct,Mt,bt,wt,gt,It;const i=this.objectStates.get(s.id);if(!i){this.warn("No state for object:",s.id);return}this.frameCount%60,t.roundRect||(t.roundRect=(ut,Lt,Wt,q,ft)=>(this.drawRoundRect(t,ut,Lt,Wt,q,ft),t));const a=i.geometry?this.deepMerge(s.geometry,i.geometry):s.geometry;let r=i.style?this.deepMerge(s.style,i.style):s.style,l=(a==null?void 0:a.width)||((b=s.geometry)==null?void 0:b.width)||s.width||0,d=(a==null?void 0:a.height)||((S=s.geometry)==null?void 0:S.height)||s.height||0;if((l===0||d===0)&&(a!=null&&a.points)&&Array.isArray(a.points)&&a.points.length>0){let ut=1/0,Lt=-1/0,Wt=1/0,q=-1/0;a.points.forEach(ft=>{ut=Math.min(ut,ft.x),Lt=Math.max(Lt,ft.x),Wt=Math.min(Wt,ft.y),q=Math.max(q,ft.y)}),l===0&&(l=Lt-ut),d===0&&(d=q-Wt)}const p=ut=>{if(ut)return ut.corner_radius??ut.cornerRadius},u=p(a)??p(i)??p(r)??p(s.geometry)??p(s.style)??p(s)??0;let m={...a,width:l,height:d};if(delete m.cornerRadius,m.corner_radius=u,!m.type&&(s.type==="Frame"||s.type==="Component"||s.type==="Group")&&(m.type="Rectangle"),s.type==="Text"&&(m.type="Text"),m.type==="Path"&&s.weights&&s.bindMatrices&&m.points){const ut=this.getGlobalTransform(s.id);if(ut){const Lt=si(m.points,s.weights,s.bindMatrices,ut,Wt=>this.getGlobalTransform(Wt));m={...m,points:Lt}}}if(i.visible===!1)return;const f=(r.effects||((w=s.style)==null?void 0:w.effects)||[]).find(ut=>ut.isEnabled!==!1&&ut.type==="PathDistortion");if(f){const ut=ni(m,l,d,f.amplitude||5,f.frequency||10,f.seed||0,f.direction||0,f.directionStrength||0);m={...m,type:"Path",points:ut}}const v=s.repeaterConfig,g=v&&v.isEnabled&&v.count>1,c=g?v.count:1;for(let ut=0;ut<c;ut++){let Lt=i.x!==void 0?i.x:((C=i.transform)==null?void 0:C.x)??0,Wt=i.y!==void 0?i.y:((M=i.transform)==null?void 0:M.y)??0,q=i.rotation!==void 0?i.rotation:((I=i.transform)==null?void 0:I.rotation)??0,ft=i.scale_x!==void 0?i.scale_x:((_=i.transform)==null?void 0:_.scale_x)??1,Bt=i.scale_y!==void 0?i.scale_y:((E=i.transform)==null?void 0:E.scale_y)??1;if(g&&ut>0){if(v.type==="Linear"){const z=v.offsetX||0,K=v.offsetY||0,G=v.rotation||0,x=v.scale!==void 0?v.scale:1;Lt+=ut*z,Wt+=ut*K,q+=ut*G,ft*=Math.pow(x,ut),Bt*=Math.pow(x,ut)}else if(v.type==="Grid"){const z=v.cols||Math.ceil(Math.sqrt(v.count)),K=v.gapX||0,G=v.gapY||0,x=Math.floor(ut/z),Q=ut%z,H=l+K,lt=d+G;Lt+=Q*H,Wt+=x*lt}else if(v.type==="Radial"){const z=v.radius||100,K=v.startAngle||0,x=(v.endAngle||360)-K,Q=v.count>1?x/(x===360?v.count:v.count-1):0,H=K+ut*Q,lt=H*Math.PI/180;Lt=i.x+z*Math.cos(lt),Wt=i.y+z*Math.sin(lt),q+=H}}const Ot=s.type==="Group"||s.type==="Frame"||s.type==="Component",Pt=l>0&&d>0;if(!Ot&&Pt&&!e){const z=(((P=r.shadow)==null?void 0:P.isEnabled)!==!1?(((L=r.shadow)==null?void 0:L.blur)||0)+10:0)+(((k=r.blur)==null?void 0:k.isEnabled)!==!1&&((A=r.blur)==null?void 0:A.radius)||0)+20;if(!this.isObjectInView(t,Lt,Wt,l,d,z))continue}this.debug_objectsRendered++,t.save();const vt=[],Yt=r.blur||((T=s.style)==null?void 0:T.blur);Yt&&Yt.amount>0&&vt.push(`blur(${Yt.amount}px)`);const zt=r.effects||((R=s.style)==null?void 0:R.effects)||[];let Gt=zt.find(z=>z.isEnabled!==!1&&(z.type==="BackgroundBlur"||z.type==="LayerBlur"));Gt||(Gt=r.effect||((F=s.style)==null?void 0:F.effect)||zt.find(z=>z.isEnabled!==!1));const Dt=Gt,te=(Dt==null?void 0:Dt.isEnabled)!==!1,ie=Dt==null?void 0:Dt.type,ce=(Dt==null?void 0:Dt.radius)??10;te&&ie==="LayerBlur"?vt.push(`blur(${ce}px)`):te&&ie==="BackgroundBlur"&&(r===s.style&&(r={...r}),r.fill={type:"None"});const ve=(m==null?void 0:m.adjustments)||(a==null?void 0:a.adjustments)||((O=s.geometry)==null?void 0:O.adjustments),_e=(r==null?void 0:r.adjustments)||((W=s.style)==null?void 0:W.adjustments),ge=((V=r==null?void 0:r.fill)==null?void 0:V.adjustments)||((D=(U=s.style)==null?void 0:U.fill)==null?void 0:D.adjustments),Ee=s==null?void 0:s.adjustments,Zt=ve||_e||ge||Ee;if(i&&Zt&&(i.geometry=i.geometry||{},i.geometry.adjustments={...Zt}),Zt){const z=(Zt.exposure||0)/100,K=(Zt.contrast||0)/100,G=(Zt.saturation||0)/100,x=(Zt.temperature||0)/200,Q=(Zt.tint||0)/200,H=(Zt.highlights||0)/500,lt=(Zt.shadows||0)/500,kt=Zt.hue||0,At=(Zt.negative||0)/100,Ht=Zt.blur||0;if(z!==0&&vt.push(`brightness(${1+z})`),K!==0){const qt=K>0?1+K*2:1+K;vt.push(`contrast(${Number(qt.toFixed(2))})`)}if(G!==0){const qt=G>0?1+G*1.5:1+G;vt.push(`saturate(${Number(qt.toFixed(2))})`)}const Ut=kt+Q*30-x*20;Ut!==0&&vt.push(`hue-rotate(${Math.round(Ut)}deg)`),x>0&&vt.push(`sepia(${Math.round(x*40)}%)`),At!==0&&vt.push(`invert(${Math.abs(At)})`),H!==0&&vt.push(`brightness(${1+H})`),lt!==0&&vt.push(`contrast(${1+lt})`),Ht>0&&vt.push(`blur(${Ht}px)`)}vt.length>0?(t.filter=vt.join(" "),(!this._lastLoggedAdjustments||this._lastLoggedAdjustments!==t.filter)&&(this._lastLoggedAdjustments=t.filter,this.log(`[ExodeUI Engine] Applied Canvas Filter for (${s.name||s.id}): "${t.filter}" (Adjustments: ${JSON.stringify(Zt)})`),console.log(`[ExodeUI Engine Log] Applied Canvas Filter for (${s.name||s.id}):`,{filter:t.filter,adjustments:Zt}))):t.filter="none",t.imageSmoothingEnabled=!0,t.imageSmoothingQuality="high";const Me=t.globalAlpha,Re=this.normalizeOpacity(i.opacity!==void 0?i.opacity:100);t.globalAlpha=Me*Re;const Ie=i.compositeOperation||i.blendMode;if(Ie&&Ie!=="Normal"){const z=Ie.toLowerCase();["multiply","screen","overlay","darken","lighten","color-dodge","color-burn","hard-light","soft-light","difference","exclusion","hue","saturation","color","luminosity","source-over","source-in","source-out","source-atop","destination-over","destination-in","destination-out","destination-atop","lighter","copy","xor","multiply","screen"].includes(z)&&(t.globalCompositeOperation=z)}const de=t,me=i.masks||(s.maskedBy?[{maskId:s.maskedBy,inverted:s.maskInverted===!0,type:s.maskType||"alpha",opacity:s.maskOpacity!==void 0?s.maskOpacity/100:1,feather:s.maskFeather||0,isVisible:!0}]:[]);let Ae=!1;const he=me.filter(z=>z.isVisible!==!1&&o.has(z.maskId));if(he.length>0){const z=he[0],K=o.get(z.maskId),G=this.objectStates.get(K.id);G&&G.visible!==!1&&(Ae=!0,(!this.maskBuffer||this.maskBuffer.width!==this.canvasWidth||this.maskBuffer.height!==this.canvasHeight)&&(this.maskBuffer=document.createElement("canvas"),this.maskBuffer.width=this.canvasWidth,this.maskBuffer.height=this.canvasHeight,this.maskCtx=this.maskBuffer.getContext("2d",{willReadFrequently:!0}),this.maskCtx&&(this.maskCtx.imageSmoothingEnabled=!0,this.maskCtx.imageSmoothingQuality="high")),this.maskCtx.setTransform(1,0,0,1,0,0),this.maskCtx.globalCompositeOperation="source-over",this.maskCtx.globalAlpha=1,this.maskCtx.filter="none",this.maskCtx.clearRect(0,0,this.maskBuffer.width,this.maskBuffer.height),this.rootTransform&&this.maskCtx.setTransform(this.rootTransform),s.parentId&&this.applyAbsoluteTransform(this.maskCtx,s.parentId,o),this.maskCtx.save(),this.maskCtx.globalAlpha=1,t=this.maskCtx,t.filter=de.filter)}if(!n){t.translate(Lt,Wt),t.rotate(q*Math.PI/180);const z=i.skew_x||0,K=i.skew_y||0;if(z!==0||K!==0){const At=Math.tan(z*Math.PI/180),Ht=Math.tan(K*Math.PI/180);t.transform(1+At*Ht,Ht,At,1,0,0)}const G=i.rotate_x!==void 0?i.rotate_x:((Y=i.transform)==null?void 0:Y.rotate_x)??0,x=i.rotate_y!==void 0?i.rotate_y:((ot=i.transform)==null?void 0:ot.rotate_y)??0,H=1+(i.translate_z!==void 0?i.translate_z:((J=i.transform)==null?void 0:J.translate_z)??0)/1e3,lt=(i.flip_x===!0?-1:1)*Math.cos(x*Math.PI/180)*H,kt=(i.flip_y===!0?-1:1)*Math.cos(G*Math.PI/180)*H;t.scale(ft*lt,Bt*kt)}r.shadow&&r.shadow.isEnabled===void 0&&((r.shadow.blur||0)>0||Math.abs(r.shadow.offsetX||0)>0||Math.abs(r.shadow.offsetY||0)>0)&&(r.shadow.isEnabled=!0);const mt=r.shadow;if(mt&&mt.isEnabled!==!1&&!e){let z=mt.color||"#000000";(j=(at=this.artboard)==null?void 0:at.tokens)!=null&&j.colors&&this.artboard.tokens.colors[z]&&(z=this.artboard.tokens.colors[z]);const K=this.normalizeOpacity(mt.opacity??100)*.75,G=mt.spread||0,Q=(mt.blur||0)+G*1.5;let H=z;if(z.startsWith("#")){const At=z.replace("#",""),Ht=parseInt(At.substring(0,2),16),Ut=parseInt(At.substring(2,4),16),qt=parseInt(At.substring(4,6),16);H=`rgba(${Ht}, ${Ut}, ${qt}, ${K})`}else if(z.startsWith("rgba")){const At=z.match(/[\d.]+/g);if(At&&At.length>=4){const Ht=At[0],Ut=At[1],qt=At[2],$=At[3];H=`rgba(${Ht}, ${Ut}, ${qt}, ${parseFloat($)*K})`}}const lt=t.getTransform(),kt=Math.sqrt(lt.a*lt.a+lt.b*lt.b)||1;t.shadowColor=H,t.shadowBlur=Q*kt,t.shadowOffsetX=(mt.offsetX||0)*kt,t.shadowOffsetY=(mt.offsetY||0)*kt}const rt=s.liquidFill||((it=s.style)==null?void 0:it.liquidFill);if(rt&&rt.enabled){t.save();const z=rt.fillLevel??.5;t.beginPath();const K=d/2-d*z;t.rect(-l/2,K,l,d*z),t.clip(),t.fillStyle=rt.color||"#3b82f6",t.globalAlpha=t.globalAlpha*(rt.opacity??1)}if(e||this.applyOuterGlowUnderlay(t,s,m,l,d,u,r,o),(a==null?void 0:a.type)==="Text"||s.type==="Text")this._renderText(t,s,m,r,i,l,d,!1,!1);else if((a==null?void 0:a.type)==="Image"||((B=r.fill)==null?void 0:B.type)==="Image"||s.type==="Image"&&(a!=null&&a.src||(X=r.fill)!=null&&X.src)){const z=(a==null?void 0:a.originalSrc)||(a==null?void 0:a.src)||((N=r.fill)==null?void 0:N.originalSrc)||((ct=r.fill)==null?void 0:ct.src)||(s==null?void 0:s.src);if(z){let K=this.imageCache.get(z);K||(K=new Image,K.onload=()=>{this.log(`[ExodeUI] Image loaded successfully, size: ${K.naturalWidth}x${K.naturalHeight}`)},K.onerror=Q=>{console.error("[ExodeUI] Image load failed:",Q,`Src preview: ${z.substring(0,100)}...`)},K.src=z,this.imageCache.set(z,K));const G=r.stroke&&r.stroke.width>0&&r.stroke.isEnabled!==!1,x=(((Mt=r.stroke)==null?void 0:Mt.alignment)||"center").toLowerCase();if(G&&x==="outside"&&this.applyStrokeAlignment(t,r,m,l,d,u),r.fill&&r.fill.type!=="None"){t.save();const Q=t.globalAlpha,H=this.createCanvasFill(t,r.fill,l,d);t.fillStyle=H||r.fill.color||"transparent",t.globalAlpha=Q*this.normalizeOpacity(r.fill.opacity??100),u!==0?(this.drawRoundRect(t,-l/2,-d/2,l,d,u),t.fill()):t.fillRect(-l/2,-d/2,l,d),t.globalAlpha=Q,t.restore()}if(K.complete&&K.naturalWidth>0){const Q=Zt?this.processFabricAdjustmentsCanvas(K,l,d,Zt):K;u!==0?(t.save(),this.drawRoundRect(t,-l/2,-d/2,l,d,u),t.clip(),t.drawImage(Q,-l/2,-d/2,l,d),t.restore()):t.drawImage(Q,-l/2,-d/2,l,d),G&&(x==="inside"||x==="center")&&this.applyStrokeAlignment(t,r,m,l,d,u)}else G&&(x==="inside"||x==="center")&&this.applyStrokeAlignment(t,r,m,l,d,u)}}else if(a.type==="SVG"){const z=a.svgContent;if(z){const K=r.palette||[],G=r.fill,x=r.stroke,Q=G?this.normalizeOpacity(G.opacity??100):1,H=x&&x.isEnabled!==!1?this.normalizeOpacity(x.opacity??100):1,lt=(G==null?void 0:G.type)==="Solid"&&(!x||x.isEnabled===!1||x.type==="Solid"&&x.color===G.color&&H===Q),kt=G&&G.type!=="None"?lt?"monochrome":G.type==="Solid"?(G.color||"")+"|opacity:"+Q:JSON.stringify(G.stops||[])+"|opacity:"+Q:"",At=x&&x.isEnabled!==!1&&(x.width||0)>0?lt?["monochrome",x.width||0,x.trimStart??0,x.trimEnd??1,x.trimOffset??0,x.dashOffset??0].join("|"):[x.width||0,x.fill?x.fill.type==="Solid"?x.fill.color||"":JSON.stringify(x.fill.stops||[]):x.color||"",x.opacity??1,x.lineCap||"",x.lineJoin||"",(x.dashArray||[]).join(","),x.trimStart??0,x.trimEnd??1,x.trimOffset??0,x.dashOffset??0].join("|"):"nostroke",Ht=[s.id,K.join("_"),kt,At,i.opacity??100,i.visible!==!1?"v":"h"].join("_");let Ut=this.imageCache.get(Ht);if(!Ut){Ut=new Image,Ut.crossOrigin="anonymous";let $=z;$.match(/xmlns=["']http:\/\/www\.w3\.org\/2000\/svg["']/i)||($=$.replace(/<svg([^>]*)>/i,(Ct,Vt)=>`<svg xmlns="http://www.w3.org/2000/svg"${Vt}>`));let dt=a.width||l||100,Rt=a.height||d||100;const Nt=$.match(/viewBox=["']\s*0\s+0\s+([\d.]+)\s+([\d.]+)\s*["']/i);if(Nt&&(dt=parseFloat(Nt[1]),Rt=parseFloat(Nt[2])),$=$.replace(/<svg([^>]*)>/i,(Ct,Vt)=>{let Tt=Vt.replace(/\b(?:width|height)=["'][^"']*["']/gi," ");return Tt.match(/\bviewBox=/i)||(Tt+=` viewBox="0 0 ${dt} ${Rt}"`),Tt.match(/\bpreserveAspectRatio=/i)||(Tt+=' preserveAspectRatio="none"'),Tt+=' width="100%" height="100%"',`<svg${Tt}>`}),a.colors&&a.colors.length>0&&K.length>0&&a.colors.forEach((Ct,Vt)=>{if(K[Vt]){const Tt=Ct.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&"),Xt=new RegExp(Tt,"gi");$=$.replace(Xt,K[Vt])}}),G&&G.type&&G.type!=="None"){if(G.type==="Solid"&&G.color){const Ct=lt?"#FFFFFF":G.color,Vt=lt?1:this.normalizeOpacity(G.opacity??100);$=$.replace(/\bfill\s*=\s*["'][^"']*["']/gi,Tt=>/fill\s*=\s*["']\s*(none|transparent)\s*["']/i.test(Tt)?Tt:`fill="${Ct}"`),$=$.replace(/fill\s*:\s*[^;"')]+/gi,Tt=>/fill\s*:\s*(none|transparent)/i.test(Tt)?Tt:`fill:${Ct}`),Vt<1&&($=$.replace(/\bfill-opacity\s*=\s*["'][^"']*["']/gi,`fill-opacity="${Vt}"`),$=$.replace(/fill-opacity\s*:\s*[^;"')]+/gi,`fill-opacity:${Vt}`),$.match(/\bfill-opacity\s*=/i)||($=$.replace(/(<svg[^>]*>)/i,`$1<g fill-opacity="${Vt}">`),$=$.replace(/<\/svg>/i,"</g></svg>")))}else if(G.type==="LinearGradient"||G.type==="RadialGradient"||G.type==="Linear"||G.type==="Radial"){const Ct="exode-fill",Vt=this.normalizeOpacity(G.opacity??100),Tt=(G.stops||[]).map(Ft=>{const le=Ft.offset!==void 0?Ft.offset:Ft.pos??0,fe=this.normalizeOpacity(Ft.opacity??100)*Vt;return`<stop offset="${le*100}%" stop-color="${Ft.color||"#000"}" stop-opacity="${fe}"/>`}).join("");let Xt="";if(G.type==="LinearGradient"||G.type==="Linear"){const Ft=(oe,ne)=>Array.isArray(oe)?oe[ne]??(ne===0?0:1):oe&&typeof oe=="object"?oe[ne===0?"x":"y"]??(ne===0?0:1):ne===0?0:1,le=Ft(G.start,0)*100,fe=Ft(G.start,1)*100,Oe=Ft(G.end,0)*100,jt=Ft(G.end,1)*100;Xt=`<linearGradient id="${Ct}" x1="${le}%" y1="${fe}%" x2="${Oe}%" y2="${jt}%" gradientUnits="objectBoundingBox">${Tt}</linearGradient>`}else{const Ft=(jt,oe)=>Array.isArray(jt)?jt[oe]??.5:jt&&typeof jt=="object"?jt[oe===0?"x":"y"]??.5:.5,le=Ft(G.center,0)*100,fe=Ft(G.center,1)*100,Oe=(G.radius??.5)*100;Xt=`<radialGradient id="${Ct}" cx="${le}%" cy="${fe}%" r="${Oe}%" gradientUnits="objectBoundingBox">${Tt}</radialGradient>`}/<defs>/i.test($)?$=$.replace(/<defs>/i,`<defs>${Xt}`):$=$.replace(/<svg([^>]*)>/i,`<svg$1><defs>${Xt}</defs>`),$=$.replace(/\bfill\s*=\s*["'][^"']*["']/gi,Ft=>/fill\s*=\s*["']\s*(none|transparent)\s*["']/i.test(Ft)?Ft:`fill="url(#${Ct})"`),$=$.replace(/fill\s*:\s*[^;"')]+/gi,Ft=>/fill\s*:\s*(none|transparent)/i.test(Ft)?Ft:`fill:url(#${Ct})`)}}const st=(Ct,Vt,Tt=1)=>{const Xt=(Ct.stops||[]).map(jt=>{const oe=jt.offset!==void 0?jt.offset:jt.pos??0,ne=this.normalizeOpacity(jt.opacity??100)*Tt;return`<stop offset="${oe*100}%" stop-color="${jt.color||"#000"}" stop-opacity="${ne}"/>`}).join(""),Ft=(jt,oe,ne=.5)=>Array.isArray(jt)?jt[oe]??ne:jt&&typeof jt=="object"?jt[oe===0?"x":"y"]??ne:ne;if(Ct.type==="LinearGradient"||Ct.type==="Linear"){const jt=Ft(Ct.start,0,0)*100,oe=Ft(Ct.start,1,0)*100,ne=Ft(Ct.end,0,1)*100,Fe=Ft(Ct.end,1,1)*100;return`<linearGradient id="${Vt}" x1="${jt}%" y1="${oe}%" x2="${ne}%" y2="${Fe}%" gradientUnits="objectBoundingBox">${Xt}</linearGradient>`}const le=Ft(Ct.center,0,.5)*100,fe=Ft(Ct.center,1,.5)*100,Oe=(Ct.radius??.5)*100;return`<radialGradient id="${Vt}" cx="${le}%" cy="${fe}%" r="${Oe}%" gradientUnits="objectBoundingBox">${Xt}</radialGradient>`},yt=(Ct,Vt)=>/<defs>/i.test(Ct)?Ct.replace(/<defs>/i,`<defs>${Vt}`):Ct.replace(/(<svg[^>]*>)/i,`$1<defs>${Vt}</defs>`);if(x&&x.isEnabled!==!1&&(x.width||0)>0){const Ct=lt?1:this.normalizeOpacity(x.opacity??100),Vt=lt?"#FFFFFF":x.color||(G==null?void 0:G.color)||"#000000";let Tt="";const Xt=x.fill;if(Xt&&Xt.type){if(Xt.type==="Solid")Tt=Xt.color||x.color||"#000000";else if(Xt.type==="LinearGradient"||Xt.type==="RadialGradient"||Xt.type==="Linear"||Xt.type==="Radial"){const se="exode-stroke";$=yt($,st(Xt,se,Ct)),Tt=`url(#${se})`}}Tt||(Tt=Vt),$.match(/\bstroke\s*=\s*["']/i)?$=$.replace(/\bstroke\s*=\s*["'][^"']*["']/gi,se=>/stroke\s*=\s*["']\s*(none|transparent)\s*["']/i.test(se)?se:`stroke="${Tt}"`):$=$.replace(/<(path|circle|rect|ellipse|polygon|polyline)/gi,`<$1 stroke="${Tt}"`),$=$.replace(new RegExp(`(?<![a-z-])stroke\\s*:\\s*(?!none|transparent)[^;"')]+`,"gi"),`stroke:${Tt}`);let Ft=a.width||l||100,le=a.height||d||100;const fe=z.match(/viewBox=["']\s*0\s+0\s+([\d.]+)\s+([\d.]+)\s*["']/i);if(fe){const se=parseFloat(fe[1]),ue=parseFloat(fe[2]);!isNaN(se)&&!isNaN(ue)&&(Ft=se,le=ue)}const Oe=Math.max(.001,l/Ft),jt=Math.max(.001,d/le),oe=(Oe+jt)/2,ne=(x.width||1)/oe;$.match(/\bstroke-width\s*=\s*["']/i)?$=$.replace(/\bstroke-width\s*=\s*["'][^"']*["']/gi,`stroke-width="${ne}"`):$=$.replace(/<(path|circle|rect|ellipse|polygon|polyline)/gi,`<$1 stroke-width="${ne}"`),$=$.replace(/stroke-width\s*:\s*[^;"')]+/gi,`stroke-width:${ne}`),$.match(/\bstroke-opacity\s*=\s*["']/i)?$=$.replace(/\bstroke-opacity\s*=\s*["'][^"']*["']/gi,`stroke-opacity="${Ct}"`):$=$.replace(/<(path|circle|rect|ellipse|polygon|polyline)/gi,`<$1 stroke-opacity="${Ct}"`),$=$.replace(/stroke-opacity\s*:\s*[^;"')]+/gi,`stroke-opacity:${Ct}`);const Fe=x.lineCap||"round";$.match(/\bstroke-linecap\s*=\s*["']/i)?$=$.replace(/\bstroke-linecap\s*=\s*["'][^"']*["']/gi,`stroke-linecap="${Fe}"`):$=$.replace(/<(path|circle|rect|ellipse|polygon|polyline)/gi,`<$1 stroke-linecap="${Fe}"`),$=$.replace(/stroke-linecap\s*:\s*[^;"')]+/gi,`stroke-linecap:${Fe}`);const Be=x.lineJoin||"round";$.match(/\bstroke-linejoin\s*=\s*["']/i)?$=$.replace(/\bstroke-linejoin\s*=\s*["'][^"']*["']/gi,`stroke-linejoin="${Be}"`):$=$.replace(/<(path|circle|rect|ellipse|polygon|polyline)/gi,`<$1 stroke-linejoin="${Be}"`),$=$.replace(/stroke-linejoin\s*:\s*[^;"')]+/gi,`stroke-linejoin:${Be}`);const xe=x.trimStart??0,We=x.trimEnd??1,De=x.trimOffset??0,Ye=x.dashOffset??0,Ge=xe!==0||We!==1||De!==0||Ye!==0;if(Ge){const se=Math.max(0,Math.min(1,xe)),ue=Math.max(0,Math.min(1,We));this.frameCount%600===0&&this.debugLog(`SVG Trim - Object: ${s.name||s.id}, Start: ${se}, End: ${ue}`);const Se=(Ft+le)*2,Xe=(De%1+1)%1,Ne=(Ye%1+1)%1;let ke="",Ce=0;if(se>=ue)ke=`0 ${Se}`,Ce=0;else{const we=Se*(ue-se),Z=Se-we;Ce=-(Se*(se+Xe+Ne)),ke=`${we} ${Z}`}$.match(/\bstroke-dasharray\s*=/i)?$=$.replace(/\bstroke-dasharray\s*=\s*["'][^"']*["']/gi,`stroke-dasharray="${ke}"`):$=$.replace(/<(path|circle|rect|ellipse|polygon|polyline)/gi,`<$1 stroke-dasharray="${ke}"`),$=$.replace(/stroke-dasharray\s*:\s*[^;"')]+/gi,`stroke-dasharray:${ke}`),$.match(/\bstroke-dashoffset\s*=/i)?$=$.replace(/\bstroke-dashoffset\s*=\s*["'][^"']*["']/gi,`stroke-dashoffset="${Ce}"`):$=$.replace(/<(path|circle|rect|ellipse|polygon|polyline)/gi,`<$1 stroke-dashoffset="${Ce}"`),$=$.replace(/stroke-dashoffset\s*:\s*[^;"')]+/gi,`stroke-dashoffset:${Ce}`)}else if(x.dashArray&&x.dashArray.length>0){const se=x.dashArray.join(" ");if($=$.replace(/\bstroke-dasharray\s*=\s*["'][^"']*["']/gi,`stroke-dasharray="${se}"`),$=$.replace(/stroke-dasharray\s*:\s*[^;"')]+/gi,`stroke-dasharray:${se}`),x.dashOffset){const ue=(Ft+le)*2,Se=-(x.dashOffset*ue);$=$.replace(/\bstroke-dashoffset\s*=\s*["'][^"']*["']/gi,`stroke-dashoffset="${Se}"`),$=$.replace(/stroke-dashoffset\s*:\s*[^;"')]+/gi,`stroke-dashoffset:${Se}`)}}if(!/\bstroke\s*=\s*["']/i.test(z)&&!new RegExp("(?<![a-z-])stroke\\s*:","i").test(z)){let se="",ue="";if(Ge){const ke=a.width||l||100,Ce=a.height||d||100,we=(ke+Ce)*2,Z=Math.max(0,Math.min(1,xe)),nt=Math.max(0,Math.min(1,We)),et=(De%1+1)%1,pt=(Ye%1+1)%1;if(Z>=nt)se=` stroke-dasharray="0 ${we}"`,ue=' stroke-dashoffset="0"';else{const $t=we*(nt-Z),xt=we-$t,Jt=-(we*(Z+et+pt));se=` stroke-dasharray="${$t} ${xt}"`,ue=` stroke-dashoffset="${Jt}"`}}else(bt=x.dashArray)!=null&&bt.length&&(se=` stroke-dasharray="${x.dashArray.join(" ")}"`,x.dashOffset&&(ue=` stroke-dashoffset="${x.dashOffset}"`));const Se=` stroke-linecap="${x.lineCap||"round"}"`,Xe=` stroke-linejoin="${x.lineJoin||"round"}"`,Ne=`stroke="${Tt}" stroke-width="${ne}" stroke-opacity="${Ct}"${Se}${Xe}${se}${ue}`;$=$.replace(/(<svg[^>]*>)(\s*(?:<defs>[\s\S]*?<\/defs>)?)/i,(ke,Ce,we)=>`${Ce}${we}<g ${Ne}>`),$=$.replace(/<\/svg>/i,"</g></svg>")}}else x&&x.isEnabled===!1&&($=$.replace(/\bstroke\s*=\s*["'][^"']*["']/gi,'stroke="none"'),$=$.replace(new RegExp(`(?<![a-z-])stroke\\s*:\\s*(?!none|transparent)[^;"')]+`,"gi"),"stroke:none"));const St=new Blob([$],{type:"image/svg+xml"}),ee=URL.createObjectURL(St);Ut.onload=()=>{if(URL.revokeObjectURL(ee),this.frameCount%900===0){const Ct=this.imageCache.get(Ht);Ct&&this.debugLog(`SVG Payload Ready: ${s.name||s.id} (${Ct.naturalWidth}x${Ct.naturalHeight})`)}},Ut.onerror=()=>{URL.revokeObjectURL(ee),this.debugLog(`SVG Error: Failed to load payload for ${s.name||s.id}`)},Ut.src=ee,this.imageCache.set(Ht,Ut)}let qt=null;if(Ut.complete&&Ut.naturalWidth>0?(qt=Ut,this.lastValidSvgImgMap.set(s.id,Ut)):qt=this.lastValidSvgImgMap.get(s.id)||null,qt&&qt.complete&&qt.naturalWidth>0){const $=Math.max(1,l),dt=Math.max(1,d);if(lt&&(G==null?void 0:G.type)==="Solid"){this.maskBuffer||(this.maskBuffer=document.createElement("canvas"),this.maskCtx=this.maskBuffer.getContext("2d")),this.maskBuffer.width=$,this.maskBuffer.height=dt,this.maskCtx.setTransform(1,0,0,1,0,0),this.maskCtx.globalCompositeOperation="source-over",this.maskCtx.globalAlpha=1,this.maskCtx.filter="none",this.maskCtx.clearRect(0,0,$,dt),this.maskCtx.drawImage(qt,0,0,$,dt),this.maskCtx.globalCompositeOperation="source-in";const Rt=G.color||"#000000",Nt=this.normalizeOpacity(G.opacity??100);this.maskCtx.fillStyle=Rt,this.maskCtx.globalAlpha=Nt,this.maskCtx.fillRect(0,0,$,dt),t.drawImage(this.maskBuffer,-$/2,-dt/2,$,dt)}else u!==0?(t.save(),this.drawRoundRect(t,-$/2,-dt/2,$,dt,u),t.clip(),t.drawImage(qt,-$/2,-dt/2,$,dt),t.restore()):t.drawImage(qt,-$/2,-dt/2,$,dt)}}}else if(m.type==="LineGraph")this.renderLineGraph(t,m,l,d);else if(s.type==="Shape"){if(this.applyPath(t,m,l,d,u),t.save(),r.blur&&r.blur.amount>0&&(t.filter=`blur(${r.blur.amount}px)`),te&&ie==="BackgroundBlur")if(e)t.fillStyle="#000000",t.globalAlpha=1,this.applyPath(t,m,l,d,u),t.fill();else{if(t.shadowColor&&t.shadowColor!=="rgba(0, 0, 0, 0)"&&t.shadowColor!=="transparent"){const G=t.getTransform(),x=t.shadowOffsetX,Q=t.shadowOffsetY;t.shadowOffsetX=x+1e4*G.a,t.shadowOffsetY=Q+1e4*G.b,t.save(),t.translate(-1e4,0),this.applyPath(t,m,l,d,u),t.fillStyle="white",t.fill(),t.restore(),t.shadowOffsetX=x,t.shadowOffsetY=Q,t.shadowColor="transparent"}this.applyBackgroundBlurGlass(t,m,l,d,u,Dt,r)}else if(r.fill){const K=t.globalAlpha;if(((wt=r.fill)==null?void 0:wt.type)==="Image"&&(r.fill.originalSrc||r.fill.src)){const G=r.fill.originalSrc||r.fill.src;let x=this.imageCache.get(G);x||(x=new Image,x.src=G,this.imageCache.set(G,x)),x.complete&&x.naturalWidth>0&&(t.save(),this.applyPath(t,m,l,d,u),t.clip(),this.renderFittedImage(t,x,-l/2,-d/2,l,d,r.fill.fillMode),t.restore())}else{const G=this.createCanvasFill(t,r.fill,l,d);t.fillStyle=G||(typeof r.fill=="string"?r.fill:r.fill.color||"transparent"),t.globalAlpha=K*this.normalizeOpacity(r.fill.opacity??100),this.applyPath(t,m,l,d,u),t.fill()}t.globalAlpha=K}t.restore(),r.stroke&&r.stroke.width>0&&(this.applyPath(t,m,l,d,u),this.applyStrokeAlignment(t,r,m,l,d,u))}else if(s.type==="Frame"||s.type==="Component"&&!s.variant||s.type==="Group"&&!s.isStructuralGroup){const z=i.width??a.width??s.width??l,K=i.height??a.height??s.height??d,G=u;if(t.save(),t.beginPath(),this.drawRoundRect(t,-z/2,-K/2,z,K,G),te&&ie==="BackgroundBlur")if(e)t.fillStyle="#000000",t.globalAlpha=1,t.beginPath(),this.drawRoundRect(t,-z/2,-K/2,z,K,G),t.fill();else{if(t.shadowColor&&t.shadowColor!=="rgba(0, 0, 0, 0)"&&t.shadowColor!=="transparent"){const H=t.getTransform(),lt=t.shadowOffsetX,kt=t.shadowOffsetY;t.shadowOffsetX=lt+1e4*H.a,t.shadowOffsetY=kt+1e4*H.b,t.save(),t.translate(-1e4,0),t.beginPath(),this.drawRoundRect(t,-z/2,-K/2,z,K,G),t.fillStyle="white",t.fill(),t.restore(),t.shadowOffsetX=lt,t.shadowOffsetY=kt,t.shadowColor="transparent"}this.applyBackgroundBlurGlass(t,m,z,K,G,Dt,r)}else if(r.fill&&r.fill.type!=="None"){const Q=t.globalAlpha;if(((gt=r.fill)==null?void 0:gt.type)==="Image"&&(r.fill.originalSrc||r.fill.src)){const H=r.fill.originalSrc||r.fill.src;let lt=this.imageCache.get(H);lt||(lt=new Image,lt.src=H,this.imageCache.set(H,lt)),lt.complete&&lt.naturalWidth>0&&(t.save(),t.beginPath(),this.drawRoundRect(t,-z/2,-K/2,z,K,G),t.clip(),this.renderFittedImage(t,lt,-z/2,-K/2,z,K,r.fill.fillMode),t.restore())}else{const H=this.createCanvasFill(t,r.fill,z,K);t.fillStyle=H||r.fill.color||"transparent",t.globalAlpha=Q*this.normalizeOpacity(r.fill.opacity??100),t.beginPath(),this.drawRoundRect(t,-z/2,-K/2,z,K,G),t.fill(),t.globalAlpha=Q}}if(t.restore(),!e&&(te&&ie==="BackgroundBlur"||r.fill&&r.fill.type!=="None")&&(t.shadowColor="transparent"),r.stroke&&r.stroke.width>0&&r.stroke.isEnabled!==!1){const Q={type:"Rectangle"};t.beginPath(),this.drawRoundRect(t,-z/2,-K/2,z,K,G),this.applyStrokeAlignment(t,r,Q,z,K,G)}}else s.type==="Group"&&s.isStructuralGroup||(s.type==="Component"&&s.variant==="inputbox"?this.renderInputBox(t,s):s.type==="Button"||s.type==="Component"&&(s.variant==="button"||(s.name||"").toLowerCase().includes("button")||(s.name||"").toLowerCase().includes("cta"))?this.renderButton(t,s):s.type==="Component"&&s.variant==="toggle_button"?this.renderToggleButton(t,s):s.type==="Toggle"||s.type==="Component"&&s.variant==="toggle"?this.renderToggle(t,s):s.type==="Slider"||s.type==="Component"&&s.variant==="slider"?this.renderSlider(t,s):s.type==="Dropdown"||s.type==="Component"&&s.variant==="dropdown"?this.renderDropdown(t,s):s.type==="ListView"||s.type==="Component"&&s.variant==="listview"?this.renderListView(t,s):s.type==="Checkbox"||s.type==="Component"&&s.variant==="checkbox"?this.renderCheckbox(t,s):s.type==="RadioGroup"||s.type==="Component"&&s.variant==="radiogroup"?this.renderRadioGroup(t,s):s.type==="BarChart"||s.type==="Component"&&s.variant==="barchart"?this.renderBarChart(t,s):s.type==="PieChart"||s.type==="Component"&&s.variant==="piechart"?this.renderPieChart(t,s):s.type==="Joystick"||s.type==="Component"&&s.variant==="joystick"?this.renderJoystick(t,s):this.frameCount%300===0&&this.warn("[Engine] Unhandled object type in renderObject:",s.type,"Geo:",(It=s.geometry)==null?void 0:It.type));if(e||(this.applyInnerGlowOverlay(t,s,m,l,d,u,r),this.applyArtEffectOverlay(t,s,m,l,d,u)),rt&&rt.enabled&&t.restore(),s.children&&s.children.length>0){const K=s.type==="Frame",G=s.clipsContent!==void 0?s.clipsContent:s.clipContent!==void 0?s.clipContent:K;if(t.save(),G){t.beginPath();const Q=i.width??(a==null?void 0:a.width)??s.width??0,H=i.height??(a==null?void 0:a.height)??s.height??0,lt=i.cornerRadius??(a==null?void 0:a.corner_radius)??s.cornerRadius??0;this.drawRoundRect(t,-Q/2,-H/2,Q,H,lt),t.clip()}let x=0;for(s.children.forEach(Q=>{const H=o.get(Q);if(!H)return;const lt=this.objectStates.get(Q),kt=(lt==null?void 0:lt.geometry)||H.geometry;if(kt&&kt.isMask&&(lt==null?void 0:lt.visible)!==!1){const At=kt.width||0,Ht=kt.height||0;this.applyObjectTransform(t,Q);const Ut=(lt==null?void 0:lt.corner_radius)??(kt==null?void 0:kt.corner_radius)??0;this.applyPath(t,kt,At,Ht,Ut),t.clip(),x++}else this.renderObject(t,H,o,e)});x>0;)t.restore(),x--;t.restore()}if(Ae){this.maskCtx.restore(),(i.masks||(s.maskedBy?[{maskId:s.maskedBy,inverted:s.maskInverted===!0,type:s.maskType||"alpha",opacity:s.maskOpacity!==void 0?s.maskOpacity/100:1,feather:s.maskFeather||0,isVisible:!0}]:[])).filter(x=>x.isVisible!==!1&&o.has(x.maskId)).forEach(x=>{var Ut,qt,$,dt,Rt,Nt;const Q=o.get(x.maskId),H=this.objectStates.get(Q.id),lt=x.feather||0,kt=x.inverted===!0,At=x.opacity!==void 0?typeof x.opacity=="number"?x.opacity:x.opacity/100:1;if((x.type||"alpha")==="luma"){(!this.lumaBuffer||this.lumaBuffer.width!==this.maskBuffer.width||this.lumaBuffer.height!==this.maskBuffer.height)&&(this.lumaBuffer=document.createElement("canvas"),this.lumaBuffer.width=this.maskBuffer.width,this.lumaBuffer.height=this.maskBuffer.height,this.lumaCtx=this.lumaBuffer.getContext("2d",{willReadFrequently:!0}),this.lumaCtx&&(this.lumaCtx.imageSmoothingEnabled=!0,this.lumaCtx.imageSmoothingQuality="high")),this.lumaCtx.setTransform(1,0,0,1,0,0),this.lumaCtx.globalCompositeOperation="source-over",this.lumaCtx.globalAlpha=1,this.lumaCtx.filter="none",this.lumaCtx.clearRect(0,0,this.lumaBuffer.width,this.lumaBuffer.height),this.lumaCtx.save(),this.rootTransform&&this.lumaCtx.setTransform(this.rootTransform),this.applyAbsoluteTransform(this.lumaCtx,Q.id,o),lt>0&&(this.lumaCtx.filter=`blur(${lt}px)`),this.lumaCtx.globalAlpha=At;const st=(H==null?void 0:H.width)||Q.geometry.width||0,yt=(H==null?void 0:H.height)||Q.geometry.height||0,St=(H==null?void 0:H.corner_radius)??Q.corner_radius??0;if(((Ut=Q.geometry)==null?void 0:Ut.type)==="Text"){const Tt=H!=null&&H.geometry?this.deepMerge(Q.geometry,H.geometry):Q.geometry,Xt=H!=null&&H.style?this.deepMerge(Q.style,H.style):Q.style;this._renderText(this.lumaCtx,Q,{...Tt,width:st,height:yt,corner_radius:St},Xt,H,st,yt,!0,!1)}else if(((qt=Q.geometry)==null?void 0:qt.type)==="Image"){const Tt=Q.geometry.src;if(Tt){let Xt=this.imageCache.get(Tt);Xt||(Xt=new Image,Xt.src=Tt,this.imageCache.set(Tt,Xt)),Xt.complete&&Xt.naturalWidth>0?this.lumaCtx.drawImage(Xt,-st/2,-yt/2,st,yt):(this.applyPath(this.lumaCtx,Q.geometry,st,yt,St),this.lumaCtx.fillStyle="#ffffff",this.lumaCtx.fill())}}else if((($=Q.geometry)==null?void 0:$.type)==="SVG"){const Tt=Q.geometry.svgContent;if(Tt){const Xt=`__lumamask_${Q.id}`;let Ft=this.imageCache.get(Xt);if(!Ft){Ft=new Image;const le=new Blob([Tt],{type:"image/svg+xml"});Ft.src=URL.createObjectURL(le),Ft.onload=()=>{this.artboard&&this.reset()},this.imageCache.set(Xt,Ft)}Ft.complete&&Ft.naturalWidth>0?this.lumaCtx.drawImage(Ft,-st/2,-yt/2,st,yt):(this.applyPath(this.lumaCtx,Q.geometry,st,yt,St),this.lumaCtx.fillStyle="#ffffff",this.lumaCtx.fill())}}else this.applyPath(this.lumaCtx,Q.geometry,st,yt,St),this.lumaCtx.fillStyle="#ffffff",this.lumaCtx.fill();this.lumaCtx.restore();const ee=this.maskCtx.getImageData(0,0,this.canvasWidth,this.canvasHeight),Ct=this.lumaCtx.getImageData(0,0,this.canvasWidth,this.canvasHeight).data,Vt=ee.data;for(let Tt=0;Tt<Vt.length;Tt+=4){const Xt=Ct[Tt],Ft=Ct[Tt+1],le=Ct[Tt+2];let fe=(.299*Xt+.587*Ft+.114*le)/255;kt&&(fe=1-fe),Vt[Tt+3]*=fe}this.maskCtx.putImageData(ee,0,0)}else{this.maskCtx.save(),this.rootTransform&&this.maskCtx.setTransform(this.rootTransform),this.maskCtx.globalCompositeOperation=kt?"destination-out":"destination-in",lt>0&&(this.maskCtx.filter=`blur(${lt}px)`),this.maskCtx.globalAlpha=At,this.applyAbsoluteTransform(this.maskCtx,Q.id,o);const st=(H==null?void 0:H.width)||Q.geometry.width||0,yt=(H==null?void 0:H.height)||Q.geometry.height||0,St=(H==null?void 0:H.corner_radius)??Q.corner_radius??0;if(((dt=Q.geometry)==null?void 0:dt.type)==="Text"){const ee=H!=null&&H.geometry?this.deepMerge(Q.geometry,H.geometry):Q.geometry,Ct=H!=null&&H.style?this.deepMerge(Q.style,H.style):Q.style;this._renderText(this.maskCtx,Q,{...ee,width:st,height:yt,corner_radius:St},Ct,H,st,yt,!0,!1)}else if(((Rt=Q.geometry)==null?void 0:Rt.type)==="Image"){const ee=Q.geometry.src;if(ee){let Ct=this.imageCache.get(ee);Ct||(Ct=new Image,Ct.src=ee,this.imageCache.set(ee,Ct)),Ct.complete&&Ct.naturalWidth>0?this.maskCtx.drawImage(Ct,-st/2,-yt/2,st,yt):(this.applyPath(this.maskCtx,Q.geometry,st,yt,St),this.maskCtx.fillStyle="#ffffff",this.maskCtx.fill())}}else if(((Nt=Q.geometry)==null?void 0:Nt.type)==="SVG"){const ee=Q.geometry.svgContent;if(ee){const Ct=`__alphamask_${Q.id}`;let Vt=this.imageCache.get(Ct);if(!Vt){Vt=new Image;const Tt=new Blob([ee],{type:"image/svg+xml"});Vt.src=URL.createObjectURL(Tt),Vt.onload=()=>{this.artboard&&this.reset()},this.imageCache.set(Ct,Vt)}Vt.complete&&Vt.naturalWidth>0?this.maskCtx.drawImage(Vt,-st/2,-yt/2,st,yt):(this.applyPath(this.maskCtx,Q.geometry,st,yt,St),this.maskCtx.fillStyle="#ffffff",this.maskCtx.fill())}}else this.applyPath(this.maskCtx,Q.geometry,st,yt,St),this.maskCtx.fillStyle="#ffffff",this.maskCtx.fill();this.maskCtx.restore()}}),de.save(),de.setTransform(1,0,0,1,0,0);const G=s.maskBlendMode||s.blendMode;G&&G!=="Normal"&&(de.globalCompositeOperation=G.toLowerCase()),de.drawImage(this.maskBuffer,0,0),de.restore(),de.restore()}else t.restore()}}applyOuterGlowUnderlay(t,s,o,e,n,i,a,r){var I,_,E;const l=a||s.style||{},d=l.effect,p=l.effects||(d?[d]:[]),u=p.find(P=>P.isEnabled!==!1&&P.type==="Glow"&&(P.mode==="outer"||P.mode==="Outer Glow"||!P.mode));if(!u)return;const m=u.blur||10,h=1e4;let f=u.color||"white";(_=(I=this.artboard)==null?void 0:I.tokens)!=null&&_.colors&&this.artboard.tokens.colors[f]&&(f=this.artboard.tokens.colors[f]),t.save();const v=l.fill&&l.fill.type!=="None",g=p.some(P=>P.isEnabled!==!1&&P.type==="BackgroundBlur"),c=s.type==="Text",b=s.type==="Group";!c&&!b&&(v||g)&&(t.beginPath(),t.rect(-1e6,-1e6,2e6,2e6),s.type==="Frame"||s.type==="Component"?this.drawRoundRect(t,-e/2,-n/2,e,n,i):this._tracePath(t,o,e,n,i),t.clip("evenodd"));const S=t.getTransform();t.shadowColor=f,t.shadowBlur=m,t.shadowOffsetX=h*S.a,t.shadowOffsetY=h*S.b,t.translate(-h,0);let w="black";l.fill&&l.fill.type!=="None"&&(w=this.createCanvasFill(t,l.fill,e,n)||l.fill.color||"black");let C="black";l.stroke&&l.stroke.width>0&&(C=this.createCanvasFill(t,l.stroke.fill||{type:"Solid",color:l.stroke.color},e,n)||l.stroke.color||"black"),t.fillStyle=w,t.strokeStyle=C,t.lineWidth=((E=l.stroke)==null?void 0:E.width)||0;const M=Math.min(u.intensity||1,10);for(let P=0;P<M;P++)if(r)this.renderObject(t,s,r,!0,!0);else if(o.type==="Text")l.fill&&l.fill.type!=="None"&&t.fillText(s.text||"",0,0),l.stroke&&l.stroke.width>0&&t.strokeText(s.text||"",0,0);else if(o.points&&o.type==="Path")this.applyPath(t,o,e,n,i),l.fill&&l.fill.type!=="None"&&t.fill(),l.stroke&&l.stroke.width>0&&t.stroke();else{if(t.beginPath(),o.type==="circle"||o.type==="Ellipse"){const A=e/2,T=n/2;t.ellipse(0,0,A,T,0,0,Math.PI*2)}else i!==0?this.drawRoundRect(t,-e/2,-n/2,e,n,i):t.rect(-e/2,-n/2,e,n);const L=l.fill&&l.fill.type!=="None",k=l.stroke&&l.stroke.width>0;(L||!L&&!k)&&t.fill(),k&&t.stroke()}t.restore()}_renderText(t,s,o,e,n,i,a,r=!1,l=!1){var ct,Mt,bt,wt,gt,It,ut,Lt,Wt;let d=(o==null?void 0:o.text)||(s==null?void 0:s.text)||(s==null?void 0:s.name)||"";if(o.textInputId&&!r){const q=this.inputs.get(o.textInputId);q!==void 0&&(d=String(q),n.geometry&&n.geometry.type==="Text"&&(n.geometry.text=d))}if(o.svgPath){const q=o.svgPath;t.save();const ft=((ct=e==null?void 0:e.fill)==null?void 0:ct.color)||"#000000",Bt=((Mt=e==null?void 0:e.fill)==null?void 0:Mt.opacity)!==void 0?(bt=e==null?void 0:e.fill)==null?void 0:bt.opacity:1;t.fillStyle=ft,t.globalAlpha*=Bt;const Ot=new Path2D(q);t.fill(Ot),t.restore();return}let p=d||"";o.enableSegments===!0&&o.segments&&Array.isArray(o.segments)&&(p=o.segments.map(q=>q&&q.text?q.text:"").join(""));const u=o.textCase||"none";u==="uppercase"?p=p.toUpperCase():u==="lowercase"?p=p.toLowerCase():u==="capitalize"&&(p=p.replace(/\b\w/g,q=>q.toUpperCase()));let m=((wt=o.fontWeight)==null?void 0:wt.toString())||"400",h=o.fontStyle||"normal";m.toLowerCase().includes("italic")&&(h="italic",m=m.replace(/italic/gi,"").trim()||"400");const f=this.mapFontWeight(m),v=Math.max(1,o.fontSize||32);let g=o.fontFamily||"Inter";const c=["Bold","SemiBold","Medium","Regular","Light","Thin","ExtraBold","Black","Italic"];c.forEach(q=>{const ft=new RegExp(`[\\s-]${q}$`,"i");ft.test(g)&&(g=g.replace(ft,"").trim())});const b=o.smallCaps===!0,w=`${b?"small-caps ":""}${h} ${f} ${v}px "${g}", sans-serif`;t.font=w;const C=o.textVerticalAlign||"top";t.textBaseline="top";const M=o.textAlign||"left";t.textAlign=M;let I=0;if(typeof o.letterSpacing=="number")I=o.letterSpacing;else if(typeof o.letterSpacing=="object"&&o.letterSpacing.value!==void 0){const q=o.letterSpacing;I=q.unit==="PERCENT"?q.value/100*v:q.value}t.letterSpacing!==void 0&&(t.letterSpacing=`${I}px`);const _=o.kerning||"auto",E=o.kerningValue||0;_==="manual"&&E!==0&&(t.letterSpacing=`${I+E}px`);const P=o.paragraphSpacing||0;let L=o.lineHeight??1.2;typeof L=="string"&&(L=parseFloat(L)),L>5&&v>0&&(L=L/v);const k=(L||1.2)*v,A=o.isPointText===!0||!o.width||o.width<=0,T=((gt=o.padding)==null?void 0:gt.left)||((It=o.padding)==null?void 0:It.right)||0,R=A?1e5:o.width&&o.width>0?Math.ceil(o.width)-T*2:1e5;o.autoHeight;const F=ts({text:p,fontFamily:g,fontSize:v,fontWeight:f,fontStyle:h,lineHeight:L,width:R,letterSpacing:I,paragraphSpacing:P,paragraphIndent:o.paragraphIndent||0,segments:o.segments,enableSegments:o.enableSegments,textCase:u,hyphenation:o.hyphenation,composer:o.composer,balanceRaggedLines:o.balanceRaggedLines}),O=F.lines||[],W=F.maxFontSize||v,V=this.fontLeadingFactors[g]??.5,U=(k-v)*V;let D=F.height,Y=i,ot=a;if(Y===0||ot===0||Y>=1e5||A){let q=0,ft=0;const Bt=F.fullText||p;(O||[]).forEach(Ot=>{const Pt=Ot.text||"",vt=t.measureText(Pt).width+(Pt.length>0?(Pt.length-1)*I:0);vt>q&&(q=vt),ft+=Pt.length,ft<Bt.length&&(Bt[ft]===`
8
+ `||Bt[ft]==="\r")&&(ft++,Bt[ft-1]==="\r"&&Bt[ft]===`
9
+ `&&ft++)}),(Y===0||Y>=1e5)&&(Y=q),ot===0&&(ot=D||0)}let J=-D/2;a>0&&a>D&&(C==="top"?J=-a/2:C==="middle"||C==="center"?J=-D/2:C==="bottom"&&(J=a/2-D));const at=C==="top"&&a>0?0:U;let j=J+at+U,it=null,B=0;if(o.pathId&&this.artboard){const q=this.artboard.objects.find(ft=>ft.id===o.pathId);if(q&&q.type==="Shape"&&((ut=q.geometry)==null?void 0:ut.type)==="Path"){const ft=this.objectStates.get(q.id),Bt=ft!=null&&ft.geometry?this.deepMerge(q.geometry,ft.geometry):q.geometry,Ot=(ft==null?void 0:ft.scale_x)!==void 0?(q.width||0)*ft.scale_x:q.width||0,Pt=(ft==null?void 0:ft.scale_y)!==void 0?(q.height||0)*ft.scale_y:q.height||0;it={geo:Bt,obj:q,w:Ot,h:Pt},B=this.getPerimeter(Bt,Ot,Pt)}}const X=(q,ft)=>{var Ot,Pt;if(!I&&!b&&!r&&(!o.enableSegments||!((Ot=o.segments)!=null&&Ot.length)))return t.measureText(q).width;let Bt=0;for(let vt=0;vt<q.length;vt++){const Yt=ft+vt;let zt=0;if(o.enableSegments===!0&&((Pt=o.segments)==null?void 0:Pt.length)>0){let Gt=0,Dt=null;for(const te of o.segments){if(Yt<Gt+(te.text||"").length){Dt=te;break}Gt+=(te.text||"").length}if(Dt){t.save();let te=Dt.fontFamily||o.fontFamily||"Inter";const ie=this.mapFontWeight((Dt.fontWeight||o.fontWeight||"400").toString()),ce=Dt.fontStyle||h,ve=Dt.fontSize||v;t.font=`${ce} ${ie} ${ve}px "${te}", sans-serif`,zt=t.measureText(q[vt]).width,t.restore()}else zt=t.measureText(q[vt]).width}else zt=t.measureText(q[vt]).width;Bt+=zt+I}return Bt-(q.length>0?I:0)},N=(q,ft,Bt,Ot,Pt)=>{var ve,_e;const Yt=(Pt===0||p[Pt-1]===`
10
+ `||p[Pt-1]==="\r")&&o.paragraphIndent?o.paragraphIndent:0,zt=(!r||l)&&(s.behaviors||[]).some(ge=>ge.enabled&&(ge.type.toString().includes("Text")||["Typewriter","Scramble","Wave","Bounce","GlitchText","Reveal3D","RevealSlide","RevealBlur"].includes(ge.type))),Gt=!o.pathId&&!zt&&(o.enableSegments!==!0||!o.segments||o.segments.length===0),Dt=o.baselineShift||0,te=Bt+Dt,ie=X(q,Pt);let ce=ft+Yt;if(M==="center"?ce-=ie/2:M==="right"&&(ce-=ie),Gt){t.font=w;const ge=t.textAlign;t.textAlign="left",Ot?t.strokeText(q,ce,te):t.fillText(q,ce,te),t.textAlign=ge}else{const ge=t.textAlign;t.textAlign="left";const Ee=Pt+q.length>=p.length||p[Pt+q.length]===`
11
+ `||p[Pt+q.length]==="\r";let Zt=0,Me=0;const Re=o.justifyMinWordSpacing,Ie=o.justifyMaxWordSpacing;if(M==="justify"&&!Ee&&ie>0&&!o.pathId){const he=A?ie:R-T*2+0,mt=Math.max(0,he-ie);for(let rt=0;rt<q.length;rt++)q[rt]===" "&&Me++;if(Me>0){const rt=t.measureText(" ").width;let z=Re||rt*.5,K=Ie||rt*2.5;Zt=Math.max(0,Math.min(mt/Me,K-z))}}let de=o.pathOffset||0;o.pathId&&B>0&&it&&(M==="center"?de+=B/2-ie/2:M==="right"&&(de+=B-ie));let me=ce;const Ae=r&&!l?[]:((ve=s.behaviors)==null?void 0:ve.filter(he=>[tt.Typewriter,tt.Scramble,tt.Wave,tt.Bounce,tt.GlitchText,tt.TextTrail,tt.Reveal3D,tt.RevealSlide,tt.RevealBlur,tt.TextLiquid,tt.TextVortex,tt.TextExplosion,tt.TextRain,tt.TextGravity,tt.TextElastic,tt.TextMatrix,tt.TextNeon,tt.TextGlitch3D,tt.TextDissolve,tt.TextOrganic,tt.TextBreathe,tt.TextFloral,tt.TextSmoke,tt.TextVariable,tt.TextMagnet,tt.TextSpin,tt.TextZing,tt.TextPerspective,tt.TextMirror].includes(he.type)&&he.enabled))||[];for(let he=0;he<q.length;he++){let mt=q[he];const rt=Pt+he;let z=0,K=0,G=1,x=1,Q=0,H=1,lt=mt;Ae.forEach($=>{const dt=$.settings||{},Rt=dt.strength||1,Nt=Date.now();if($.type===tt.Typewriter)this.currentTime*(dt.speed||1)-rt*(dt.stagger||.05)<0&&(H=0);else if($.type===tt.Scramble)Math.max(0,Math.min(1,this.currentTime/(dt.duration||1.5))-rt*.02)<1&&Math.random()<.3&&(lt="$%#@!*&"[Math.floor(Math.random()*7)]);else if($.type===tt.Wave)K+=Math.sin(this.currentTime*5*(dt.speed||1)+rt*(dt.frequency||1))*(dt.amplitude||20)*Rt;else if($.type===tt.Bounce){const st=Math.max(0,this.currentTime%2-rt*(dt.stagger||.1));st<1&&(K-=Math.abs(Math.sin(st*Math.PI))*(dt.height||50)*Rt)}else if($.type===tt.TextTrail){const st=this.pointerHistory[Math.max(0,this.pointerHistory.length-1-rt*(dt.delay||5))];st&&(z+=(st.x-(n.x+me))*Rt*.2,K+=(st.y-(n.y+Bt+K))*Rt*.2)}else if($.type===tt.Reveal3D){const st=Math.max(0,Math.min(1,this.currentTime*(dt.speed||1)-rt*(dt.stagger||.1)));G*=st,x*=st,H=st}else if($.type===tt.RevealSlide){const st=Math.max(0,Math.min(1,this.currentTime*1.5-rt*.05)),yt=(1-st)*(dt.distance||40)*Rt,St=dt.direction||"up";St==="up"?K-=yt:St==="down"?K+=yt:St==="left"?z-=yt:St==="right"&&(z+=yt),H=st}else if($.type===tt.RevealBlur){const st=Math.max(0,Math.min(1,this.currentTime*1.2-rt*.1));H=st,z+=(1-st)*5}else if($.type===tt.TextLiquid){const st=Math.max(0,Math.sin(Nt*.001*(dt.speed||1)+rt*.5));K+=st*(dt.amplitude||10)*Rt,x*=1+st*.2}else if($.type===tt.TextVortex){const st=Nt*.002*(dt.speed||1)+rt*.2,yt=(1-(Math.sin(Nt*.001)*.5+.5))*(dt.radius||50);z+=Math.cos(st)*yt*Rt,K+=Math.sin(st)*yt*Rt}else if($.type===tt.TextExplosion){const st=dt.force||1,yt=this.currentTime%2;if(yt<1){const St=(rt/q.length-.5)*Math.PI*2,ee=yt*100*st;z+=Math.cos(St)*ee*Rt,K+=Math.sin(St)*ee*Rt,H=1-yt}}else if($.type===tt.TextRain){const st=dt.speed||1,yt=dt.height||100,St=(Nt*.001*st+rt*.1)%1;K-=(1-St)*yt*Rt,H=St>.1?1:St*10}else if($.type===tt.TextGravity){const st=dt.gravity||9.8,yt=this.currentTime%3/3,St=.5*st*Math.pow(yt*10,2);St<100?K+=St*Rt:K+=100*Rt}else if($.type===tt.TextMatrix){const st=dt.speed||1;if(Math.random()<.1*st){const St="0123456789ABCDEF!@#$%^&*";lt=St[Math.floor(Math.random()*St.length)]}H=.3+(Math.sin(Nt*.01*st+rt)+1)/2*.7}else if($.type===tt.TextNeon){const st=Math.random()>.95?.5:1;H=(.7+(Math.sin(Nt*.005)+1)/2*.3)*st}else if($.type===tt.TextDissolve)Math.sin(rt*1.5+Nt*.002*(dt.speed||1))>.5&&(H=0);else if($.type===tt.TextOrganic){const st=dt.speed||1,yt=dt.amplitude||10;z+=Math.sin(Nt*.002*st+rt)*yt*Rt,K+=Math.cos(Nt*.0015*st+rt*.7)*yt*Rt}else if($.type===tt.TextBreathe){const yt=1+(Math.sin(Nt*.003+rt*.2)+1)/2*.2*Rt;G*=yt,x*=yt}else if($.type===tt.TextSpin){const st=dt.speed||1;Q+=Nt*.01*st+rt}else if($.type===tt.TextMagnet){const st=this.pointerHistory[this.pointerHistory.length-1];if(st){const yt=st.x-(n.x+me),St=st.y-(n.y+Bt);Q=Math.atan2(St,yt)}}else if($.type===tt.TextPerspective){const st=q.length/2,yt=(rt-st)/st,St=1-Math.abs(yt)*.3*Rt;G*=St,x*=St,z+=yt*20*Rt}else if($.type===tt.TextMirror)H*=.8;else if($.type===tt.TextFloral){const st=dt.speed||1,yt=dt.stagger||.1,St=(Nt*.001*st+rt*yt)%2;St<1&&(G*=St,x*=St,Q+=St*Math.PI)}else if($.type===tt.TextSmoke){const st=dt.speed||1,yt=dt.height||50,St=(Nt*5e-4*st+rt*.2)%1;K-=St*yt*Rt,z+=Math.sin(Nt*.002+rt)*5*Rt,H=1-St}else if($.type===tt.TextVariable){const st=dt.speed||1,yt=dt.intensity||1.5,St=(Math.sin(Nt*.004*st+rt*.3)+1)/2;G*=1+St*(yt-1)*Rt}else if($.type===tt.TextZing){const st=dt.speed||2,yt=dt.distance||100,St=(Nt*.002*st+rt*.05)%1;z+=(1-St)*yt*Rt,H=St}else if($.type===tt.TextElastic){const st=dt.stiffness||.2,yt=dt.damping||.1,St=Math.sin(Nt*.01)*Math.exp(-Nt*.001*yt);x*=1+St*st*Rt}else if($.type===tt.TextGlitch3D){const st=dt.intensity||5;Math.random()<.2&&(z+=(Math.random()-.5)*st,K+=(Math.random()-.5)*st,H=.8)}else if($.type===tt.GlitchText){const st=dt.intensity||5;Math.random()<.1&&(z+=(Math.random()-.5)*st,K+=(Math.random()-.5)*st,Math.random()<.05&&(H=.5))}});let kt=null,At=o.textDecoration||"none",Ht=v;if(o.enableSegments===!0&&((_e=o.segments)==null?void 0:_e.length)>0){let $=0,dt=null;for(const Rt of o.segments){if(rt<$+(Rt.text||"").length){dt=Rt;break}$+=(Rt.text||"").length}if(dt){let Rt=dt.fontFamily||o.fontFamily||"Inter";c.forEach(yt=>{const St=new RegExp(`[\\s-]${yt}$`,"i");St.test(Rt)&&(Rt=Rt.replace(St,"").trim())});const Nt=this.mapFontWeight((dt.fontWeight||o.fontWeight||"400").toString()),st=dt.fontStyle||h;Ht=dt.fontSize||v,t.font=`${st} ${Nt} ${Ht}px "${Rt}", sans-serif`,dt.fill&&(kt=dt.fill),dt.textDecoration&&(At=dt.textDecoration),Ht<W&&(K+=(W-Ht)*.85)}}else t.font=w;const Ut=t.globalAlpha;t.globalAlpha*=H,t.save();const qt=t.measureText(lt).width;if(it&&B>0){const $=me-ce+qt/2,Rt=(de+$)/B,Nt=this.getPointOnPath(it.geo,it.w,it.h,Math.abs(Rt%1)),st=Nt.angle,yt=Bt+K+(o.pathOffsetY||0),St=o.pathSide==="right"?-1:1,ee=Math.cos(st+Math.PI/2)*yt*St,Ct=Math.sin(st+Math.PI/2)*yt*St;t.translate(Nt.x+ee+z,Nt.y+Ct),t.rotate(st+Q+(St===-1?Math.PI:0))}else t.translate(me+z+qt/2,Bt+K),Q!==0&&t.rotate(Q);if(t.scale(G,x),kt&&!r&&!l){const $=this.createCanvasFill(t,kt,Y,ot);t.fillStyle=$||kt.color||"#000000"}else if(!r&&!l){const $=this.createCanvasFill(t,e.fill,Y,ot);t.fillStyle=$||e.fill.color||"#000000"}if(H>0)if(r||l){const $=l?"#000000":this.createCanvasFill(t,e.fill,Y,ot);t.fillStyle=$||e.fill.color||"#ffffff",t.fillText(lt,-qt/2,0)}else Ot?t.strokeText(lt,-qt/2,0):t.fillText(lt,-qt/2,0);At!=="none"&&!r&&this.drawTextDecoration(t,At,0,0,qt,Ht),t.restore(),t.globalAlpha=Ut,M==="justify"&&Zt>0&&lt===" "&&!Ee?me+=qt+I+Zt:me+=qt+I}t.textAlign=ge}};if(r){let q=0,ft=j;(O||[]).forEach(Bt=>{const Ot=Bt.text||"",Pt=p.indexOf(Ot,q);Pt!==-1&&(q=Pt);let vt=-Y/2;M==="center"?vt=0:M==="right"&&(vt=Y/2),N(Ot,vt,ft,!1,q),q+=Ot.length,ft+=k})}else if(l){let q=0,ft=j;(O||[]).forEach(Bt=>{const Ot=Bt.text||"";let Pt=-Y/2;M==="center"?Pt=0:M==="right"&&(Pt=Y/2),N(Ot,Pt,ft,!1,q),q+=Ot.length,q<p.length&&(p[q]===`
12
12
  `||p[q]==="\r")&&(q++,p[q-1]==="\r"&&p[q]===`
13
- `&&q++),ft+=k})}else{if(e.fill){const ft=t.globalAlpha,xt=this.createCanvasFill(t,e.fill,X,ot);t.fillStyle=xt||e.fill.color||"#000000",t.globalAlpha=ft*this.normalizeOpacity(e.fill.opacity??100);const At=F.fullText||(o.enableSegments?(o.segments||[]).map(Xt=>{let zt=Xt.text||"";const Gt=Xt.textCase||o.textCase||"none";return Gt==="uppercase"?zt.toUpperCase():Gt==="lowercase"?zt.toLowerCase():Gt==="capitalize"?zt.replace(/\b\w/g,Yt=>Yt.toUpperCase()):zt}).join(""):p);let Pt=0,vt=j;(O||[]).forEach(Xt=>{const zt=Xt.text||"";let Gt=-X/2;M==="center"?Gt=0:M==="right"&&(Gt=X/2),N(zt,Gt,vt,!1,Pt),Pt+=zt.length,vt+=k,Pt<At.length&&(At[Pt]===`
14
- `||At[Pt]==="\r")&&(P>0&&(vt+=P),Pt++,At[Pt-1]==="\r"&&At[Pt]===`
15
- `&&Pt++)}),t.globalAlpha=ft}const q=o.paragraphRule;if(q&&(((Ot=q.top)==null?void 0:Ot.width)>0||((Wt=q.bottom)==null?void 0:Wt.width)>0)){let ft=0;(O||[]).forEach((xt,At)=>{var Xt,zt;const vt=ft===0||ft<p.length&&(p[ft]===`
16
- `||p[ft]==="\r");if(vt&&At>0&&ft++,vt){if(((Xt=q.top)==null?void 0:Xt.width)>0){const Gt=j+At*k-q.top.offset;t.strokeStyle=q.top.color||"#000000",t.lineWidth=q.top.width,t.beginPath();const Yt=-i/2+k*.2;t.moveTo(Yt,Gt),t.lineTo(i/2-k*.2,Gt),t.stroke()}if(((zt=q.bottom)==null?void 0:zt.width)>0){const Gt=j+(At+1)*k-q.bottom.offset;t.strokeStyle=q.bottom.color||"#000000",t.lineWidth=q.bottom.width,t.beginPath();const Yt=-i/2+k*.2;t.moveTo(Yt,Gt),t.lineTo(i/2-k*.2,Gt),t.stroke()}}ft+=(xt.text||"").length})}if(e.stroke&&e.stroke.width>0){const ft=t.globalAlpha;e.fill&&e.fill.type!=="None"&&e.fill.isEnabled!==!1&&e.fill.opacity!==0&&e.fill.color!=="transparent"&&e.fill.color!=="rgba(0,0,0,0)"&&(t.shadowColor="transparent",t.shadowBlur=0,t.shadowOffsetX=0,t.shadowOffsetY=0),t.strokeStyle=e.stroke.color;const At=t.getTransform(),Pt=Math.sqrt(At.a*At.a+At.b*At.b)||1,vt=window.devicePixelRatio||1;t.lineWidth=(e.stroke.width||1)*vt/Pt,t.globalAlpha=ft*this.normalizeOpacity(e.stroke.opacity??100);let Xt=0,zt=j;(O||[]).forEach(Gt=>{let Yt=-X/2;M==="center"?Yt=0:M==="right"&&(Yt=X/2),N(Gt.text,Yt,zt,!0,Xt),Xt+=(Gt.text||"").length,zt+=k,Xt<p.length&&(p[Xt]===`
17
- `||p[Xt]==="\r")&&(P>0&&(zt+=P),Xt++,p[Xt-1]==="\r"&&p[Xt]===`
18
- `&&Xt++)}),t.globalAlpha=ft}}}applyStrokeAlignment(t,s,o,e,n,i){if(!s.stroke||s.stroke.width<=0||s.stroke.isEnabled===!1)return;const a=s.stroke,r=t.getTransform(),c=Math.sqrt(r.a*r.a+r.b*r.b)||1,d=window.devicePixelRatio||1,p=(a.width||1)*d/c,u=(a.alignment||"center").toLowerCase();if(t.save(),s.fill&&s.fill.type!=="None"&&s.fill.isEnabled!==!1&&s.fill.opacity!==0&&s.fill.color!=="transparent"&&s.fill.color!=="rgba(0,0,0,0)"&&(t.shadowColor="transparent",t.shadowBlur=0,t.shadowOffsetX=0,t.shadowOffsetY=0),a.fill){const S=this.createCanvasFill(t,a.fill,e,n);S?t.strokeStyle=S:t.strokeStyle=a.color||"#000000"}else t.strokeStyle=a.color||"#000000";const h=t.globalAlpha;t.globalAlpha=h*this.normalizeOpacity(a.opacity??100),t.lineWidth=p,t.lineCap=a.lineCap||"round",t.lineJoin=a.lineJoin||"round",a.miterLimit!==void 0&&(t.miterLimit=a.miterLimit);const f=a.trimStart??0,v=a.trimEnd??1,m=a.trimOffset??0,l=a.dashOffset??0,b=a.dashArray||[];if(f!==0||v!==1||m!==0){const S=this.getPerimeter(o,e,n);if(S>0){const w=Math.max(0,Math.min(1,f)),C=Math.max(0,Math.min(1,v));if(w<C){const M=S*(C-w),I=S-M,_=-(S*(w+m%1));t.setLineDash([M,I]),t.lineDashOffset=_-l*S}else if(w===C)t.setLineDash([0,S]);else{const M=S*(1-w+C),I=S-M,_=-(S*w);t.setLineDash([M,I]),t.lineDashOffset=_-l*S}}}else if(b.length>0||l!==0){b.length>0&&t.setLineDash(b);const S=this.getPerimeter(o,e,n);t.lineDashOffset=-(l*S)}if((o==null?void 0:o.type)==="Line"||e===0||n===0)this.applyPath(t,o,e,n,i),t.stroke();else if(u==="inside")t.lineWidth=p*2,t.save(),this.applyPath(t,o,e,n,i),t.clip(),t.stroke(),t.restore();else if(u==="outside"){t.save(),t.beginPath();const S=Math.max(e,n,2e4);t.rect(-S,-S,S*2,S*2),this._tracePath(t,o,e,n,i),t.clip("evenodd"),t.lineWidth=p*2,t.beginPath(),this.applyPath(t,o,e,n,i),t.stroke(),t.restore()}else t.lineWidth=p,this.applyPath(t,o,e,n,i),t.stroke();t.restore()}getPerimeter(t,s,o){switch(this.ensurePathPoints(t),t==null?void 0:t.type){case"Rectangle":return(s+o)*2;case"Ellipse":{const e=Math.abs(s)/2,n=Math.abs(o)/2,i=Math.abs(t.sweepAngle??360),a=t.ratio||0,r=Math.PI*(3*(e+n)-Math.sqrt((3*e+n)*(e+3*n)));if(i>=360&&a<=0)return r;let c=i/360*r;if(a>0){const d=Math.PI*(3*(e*a+n*a)-Math.sqrt((3*e*a+n*a)*(e*a+3*n*a)));c+=i/360*d,i<360&&(c+=2*Math.sqrt((e-e*a)**2+(n-n*a)**2))}else i<360&&(c+=2*Math.max(e,n));return isNaN(c)?0:c}case"Line":return t.length||Math.sqrt(s*s+o*o);case"Triangle":return s+Math.sqrt((s/2)**2+o**2)*2;case"Polygon":{const e=t.sides||3,n=t.radius||Math.min(s,o)/2;return 2*e*n*Math.sin(Math.PI/e)}case"Star":{const e=t.points||5,n=t.outer_radius||Math.min(s,o)/2,i=t.inner_radius||n/2,a=Math.PI/e;return Math.sqrt(n*n+i*i-2*n*i*Math.cos(a))*e*2}case"Path":{const e=t.points||[];if(e.length<2)return t.length||0;let n=0,i=e[0].x,a=e[0].y;for(let r=1;r<e.length;r++){const c=e[r];if(c.moveTo){i=c.x,a=c.y;continue}const d=i,p=a,u=e[r-1].out_x,g=e[r-1].out_y;if(u!==void 0||c.in_x!==void 0?n+=this.getBezierLength(d,p,u??d,g??p,c.in_x??c.x,c.in_y??c.y,c.x,c.y):n+=Math.sqrt((c.x-d)**2+(c.y-p)**2),i=c.x,a=c.y,c.closePath||r===e.length-1&&(t.is_closed||t.isClosed)){const h=i,f=a,v=[...e.slice(0,r+1)].reverse().find(M=>M.moveTo)||e[0],m=v.x,l=v.y,b=e[r].out_x,S=e[r].out_y,w=v.in_x,C=v.in_y;b!==void 0||w!==void 0?n+=this.getBezierLength(h,f,b??h,S??f,w??m,C??l,m,l):n+=Math.sqrt((m-h)**2+(l-f)**2)}}return n}default:return(s+o)*2}}getBezierLength(t,s,o,e,n,i,a,r,c=10){let d=0,p=t,u=s;for(let g=1;g<=c;g++){const h=g/c,f=1-h,v=h*h,m=f*f,l=m*f,b=v*h,S=l*t+3*m*h*o+3*f*v*n+b*a,w=l*s+3*m*h*e+3*f*v*i+b*r,C=S-p,M=w-u;d+=Math.sqrt(C*C+M*M),p=S,u=w}return d}getBezierTAtLength(t,s,o,e,n,i,a,r,c,d=20){if(t<=0)return 0;let p=0,u=s,g=o;for(let h=1;h<=d;h++){const f=h/d,v=1-f,m=f*f,l=v*v,b=l*v,S=m*f,w=b*s+3*l*f*e+3*v*m*i+S*r,C=b*o+3*l*f*n+3*v*m*a+S*c,M=w-u,I=C-g,_=Math.sqrt(M*M+I*I);if(p+_>=t){const E=t-p,P=_===0?0:E/_;return(h-1+P)/d}p+=_,u=w,g=C}return 1}getPointOnPath(t,s,o,e){if(this.ensurePathPoints(t),(t==null?void 0:t.type)==="Path"){const n=t.points||[];if(n.length<2)return{x:0,y:0,angle:0};let i=1/0,a=-1/0,r=1/0,c=-1/0;n.forEach(l=>{typeof l.x=="number"&&typeof l.y=="number"&&(i=Math.min(i,l.x),a=Math.max(a,l.x),r=Math.min(r,l.y),c=Math.max(c,l.y),l.out_x!==void 0&&(i=Math.min(i,l.out_x),a=Math.max(a,l.out_x)),l.out_y!==void 0&&(r=Math.min(r,l.out_y),c=Math.max(c,l.out_y)),l.in_x!==void 0&&(i=Math.min(i,l.in_x),a=Math.max(a,l.in_x)),l.in_y!==void 0&&(r=Math.min(r,l.in_y),c=Math.max(c,l.in_y)))});const d=(i+a)/2,p=(r+c)/2,g=this.getPerimeter(t,s,o)*e;let h=0;const f=[];let v=n[0],m=n[0];for(let l=1;l<n.length;l++){const b=n[l];if(b.moveTo){v=b,m=b;continue}f.push({p0:v,p1:b}),(b.closePath||l===n.length-1&&(t.is_closed||t.isClosed))&&f.push({p0:b,p1:m}),v=b}for(const l of f){const b=l.p0,S=l.p1;let w=0;const C=b.out_x!==void 0||S.in_x!==void 0;if(C?w=this.getBezierLength(b.x,b.y,b.out_x??b.x,b.out_y??b.y,S.in_x??S.x,S.in_y??S.y,S.x,S.y):w=Math.sqrt((S.x-b.x)**2+(S.y-b.y)**2),h+w>=g||l===f[f.length-1]){let M=0;if(C)return M=this.getBezierTAtLength(g-h,b.x,b.y,b.out_x??b.x,b.out_y??b.y,S.in_x??S.x,S.in_y??S.y,S.x,S.y,20),this.getBezierPointAndAngle(M,b,S,d,p);{M=w===0?0:(g-h)/w;const I=b.x+(S.x-b.x)*M-d,_=b.y+(S.y-b.y)*M-p,E=Math.atan2(S.y-b.y,S.x-b.x);return{x:I,y:_,angle:E}}}h+=w}}else if(t.type==="Ellipse"){const n=Math.abs(s)/2,i=Math.abs(o)/2,a=t.sweepAngle??360,c=((t.startAngle??0)+a*e)*Math.PI/180,d=n*Math.cos(c),p=i*Math.sin(c),u=-n*Math.sin(c),g=i*Math.cos(c),h=Math.atan2(g,u);return{x:d,y:p,angle:h}}else if((t==null?void 0:t.type)==="Rectangle"){const n=Math.abs(s),i=Math.abs(o),r=(n+i)*2*e;let c=0,d=0,p=0;return r<n?(c=-n/2+r,d=-i/2,p=0):r<n+i?(c=n/2,d=-i/2+(r-n),p=Math.PI/2):r<2*n+i?(c=n/2-(r-(n+i)),d=i/2,p=Math.PI):(c=-n/2,d=i/2-(r-(2*n+i)),p=-Math.PI/2),{x:c,y:d,angle:p}}return{x:0,y:0,angle:0}}getBezierPointAndAngle(t,s,o,e,n){const i=s.x,a=s.y,r=s.out_x??s.x,c=s.out_y??s.y,d=o.in_x??o.x,p=o.in_y??o.y,u=o.x,g=o.y,h=1-t,f=t*t,v=h*h,m=v*h,l=f*t,b=m*i+3*v*t*r+3*h*f*d+l*u-e,S=m*a+3*v*t*c+3*h*f*p+l*g-n,w=3*v*(r-i)+6*h*t*(d-r)+3*f*(u-d),C=3*v*(c-a)+6*h*t*(p-c)+3*f*(g-p),M=Math.atan2(C,w);return{x:b,y:S,angle:M}}applyAbsoluteTransform(t,s,o){if(!o.get(s))return;const n=[];let i=s;for(;i;){n.unshift(i);const a=o.get(i);i=a==null?void 0:a.parentId}n.forEach(a=>{this.applyObjectTransform(t,a)})}applyObjectTransform(t,s){var h,f,v;const o=this.objectStates.get(s);if(!o)return;t.translate(o.x,o.y),t.rotate((o.rotation??0)*Math.PI/180);const e=o.skew_x||0,n=o.skew_y||0;if(e!==0||n!==0){const m=Math.tan(e*Math.PI/180),l=Math.tan(n*Math.PI/180);t.transform(1+m*l,l,m,1,0,0)}const i=o.rotate_x!==void 0?o.rotate_x:((h=o.transform)==null?void 0:h.rotate_x)??0,a=o.rotate_y!==void 0?o.rotate_y:((f=o.transform)==null?void 0:f.rotate_y)??0,c=1+(o.translate_z!==void 0?o.translate_z:((v=o.transform)==null?void 0:v.translate_z)??0)/1e3,d=(o.flip_x===!0?-1:1)*Math.cos(a*Math.PI/180)*c,p=(o.flip_y===!0?-1:1)*Math.cos(i*Math.PI/180)*c,u=(o.scale_x??1)*d,g=(o.scale_y??1)*p;t.scale(u,g)}applyInnerGlowOverlay(t,s,o,e,n,i,a){var m,l;const r=a||s.style||{},c=r==null?void 0:r.effect,p=((r==null?void 0:r.effects)||(c?[c]:[])).find(b=>b.isEnabled!==!1&&b.type==="Glow"&&(b.mode==="inner"||b.mode==="Inner Glow"));if(!p)return;t.save(),t.beginPath(),this.applyPath(t,o,e,n,i),t.clip();const u=p.blur||10,g=1e4,h=t.getTransform();let f=p.color||"white";(l=(m=this.artboard)==null?void 0:m.tokens)!=null&&l.colors&&this.artboard.tokens.colors[f]&&(f=this.artboard.tokens.colors[f]),t.shadowColor=f,t.shadowBlur=u,t.shadowOffsetX=g*h.a,t.shadowOffsetY=g*h.b,t.translate(-g,0),t.lineWidth=u+5,t.strokeStyle=f;const v=Math.min(p.intensity||1,5);for(let b=0;b<v;b++)t.beginPath(),this.applyPath(t,o,e,n,i),t.stroke();t.restore()}applyArtEffectOverlay(t,s,o,e,n,i){var g,h,f,v,m;const a=this.objectStates.get(s.id),r=((g=a==null?void 0:a.style)==null?void 0:g.artEffect)||s.artEffect||((h=s.style)==null?void 0:h.artEffect);if(!r||!r.enabled)return;const c=r.type,d=r.intensity??.5,p=r.speed??1,u=r.scale??10;if(c==="acid_gradient"||c==="acid_rave"||c==="shimmer"||c==="glint_overlay"||c==="halftone"||c==="noise"||c==="scanlines"||c==="chromatic_aberration"||c==="pixelate"||c==="glitch"||c==="fold_overlay"||c==="crumple_overlay"){if(t.save(),this.applyPath(t,o,e,n,i),t.clip(),c==="shimmer"){const b=this.currentTime*p%2/2,S=t.createLinearGradient(-e,-n,e,n);S.addColorStop(Math.max(0,b-.2),"rgba(255,255,255,0)"),S.addColorStop(b,`rgba(255,255,255,${d*.8})`),S.addColorStop(Math.min(1,b+.2),"rgba(255,255,255,0)"),t.fillStyle=S,t.globalCompositeOperation="screen",t.fillRect(-e/2,-n/2,e,n),t.globalCompositeOperation="source-over"}else if(c==="glint_overlay"){let S=((this._lastPointerPos||{x:0}).x-(((f=s.transform)==null?void 0:f.x)??0)+300)/600;S=Math.max(-.2,Math.min(1.2,S));const w=t.createLinearGradient(-e,-n,e,n);w.addColorStop(Math.max(0,S-.15),"rgba(255,255,255,0)"),w.addColorStop(Math.max(0,Math.min(1,S)),`rgba(255,255,255,${d})`),w.addColorStop(Math.min(1,S+.15),"rgba(255,255,255,0)"),t.fillStyle=w,t.globalCompositeOperation="screen",t.fillRect(-e/2,-n/2,e,n),t.globalCompositeOperation="source-over"}else if(c==="fold_overlay"){const l=this._lastPointerPos||{x:0,y:0},b=l.x-(((v=s.transform)==null?void 0:v.x)??0),S=l.y-(((m=s.transform)==null?void 0:m.y)??0),w=t.createLinearGradient(b>0?-e/2:e/2,S>0?-n/2:n/2,b>0?e/2:-e/2,S>0?n/2:-n/2);w.addColorStop(0,`rgba(0,0,0,${d*.6})`),w.addColorStop(.4,"rgba(0,0,0,0)"),w.addColorStop(.5,`rgba(255,255,255,${d*.4})`),w.addColorStop(1,`rgba(0,0,0,${d*.2})`),t.fillStyle=w,t.globalCompositeOperation="overlay",t.fillRect(-e/2,-n/2,e,n),t.globalCompositeOperation="source-over",t.beginPath(),b>0&&S>0?(t.moveTo(e/2-40,n/2),t.lineTo(e/2,n/2-40),t.lineTo(e/2-40,n/2-40)):b<0&&S>0?(t.moveTo(-e/2+40,n/2),t.lineTo(-e/2,n/2-40),t.lineTo(-e/2+40,n/2-40)):b>0&&S<0?(t.moveTo(e/2-40,-n/2),t.lineTo(e/2,-n/2+40),t.lineTo(e/2-40,-n/2+40)):(t.moveTo(-e/2+40,-n/2),t.lineTo(-e/2,-n/2+40),t.lineTo(-e/2+40,-n/2+40)),t.closePath(),t.fillStyle="#ffffff",t.shadowColor="rgba(0,0,0,0.5)",t.shadowBlur=10,t.shadowOffsetX=b>0?-2:2,t.shadowOffsetY=S>0?-2:2,t.fill()}else if(c==="crumple_overlay"){const l=Math.floor(e/u),b=document.createElement("canvas");b.width=l,b.height=Math.floor(n/u);const S=b.getContext("2d"),w=S.createImageData(b.width,b.height);for(let C=0;C<w.data.length;C+=4){const M=Math.random()>.95?150:255;w.data[C]=M,w.data[C+1]=M,w.data[C+2]=M,w.data[C+3]=255*d}S.putImageData(w,0,0),t.globalCompositeOperation="multiply",t.imageSmoothingEnabled=!1,t.drawImage(b,-e/2,-n/2,e,n)}else if(c==="acid_gradient"||c==="acid_rave"){const l=this.currentTime*p,b=r.color1,S=r.color2,w=t.createLinearGradient(-e/2,-n/2,e/2,n/2);if(b&&S){const C=l*60%360;w.addColorStop(0,this._shiftHue(b,C,d*.7)),w.addColorStop(1,this._shiftHue(S,(C+180)%360,d*.7))}else{const C=l*100%360,M=(C+180)%360;w.addColorStop(0,`hsla(${C}, 80%, 50%, ${d*.5})`),w.addColorStop(1,`hsla(${M}, 80%, 50%, ${d*.5})`)}t.fillStyle=w,t.globalCompositeOperation="screen",t.fillRect(-e/2,-n/2,e,n)}else if(c==="halftone"){const l=Math.max(2,u*(1-d*.8)),b=document.createElement("canvas");b.width=l,b.height=l;const S=b.getContext("2d");if(S){S.fillStyle="black",S.beginPath(),S.arc(l/2,l/2,l/2*d,0,Math.PI*2),S.fill();const w=t.createPattern(b,"repeat");w&&(t.globalAlpha=.3*d,t.fillStyle=w,t.fillRect(-e/2,-n/2,e,n))}}else if(c==="noise"){const l=Math.floor(e*n*d*.02);t.globalAlpha=.4*d;for(let b=0;b<l;b++){const S=Math.random()>.5?255:0;t.fillStyle=`rgba(${S}, ${S}, ${S}, ${.5+Math.random()*.5})`,t.fillRect(-e/2+Math.random()*e,-n/2+Math.random()*n,2,2)}}else if(c==="scanlines"){t.globalAlpha=.2*d,t.strokeStyle="rgba(0,0,0,0.5)",t.lineWidth=1;for(let l=-n/2;l<n/2;l+=4)t.beginPath(),t.moveTo(-e/2,l),t.lineTo(e/2,l),t.stroke()}else if(c==="chromatic_aberration"){const l=5*d;t.globalCompositeOperation="screen",t.globalAlpha=.5,t.fillStyle="cyan",t.fillRect(-e/2-l,-n/2,e,n),t.fillStyle="magenta",t.fillRect(-e/2+l,-n/2,e,n)}else if(c==="pixelate"){const l=Math.max(2,Math.round(u*(1-d*.5))),b=document.createElement("canvas"),S=Math.max(1,Math.ceil(e/l)),w=Math.max(1,Math.ceil(n/l));b.width=S,b.height=w;const C=b.getContext("2d");if(C){C.imageSmoothingEnabled=!1;const M=t.getTransform(),I=M.e-e/2,_=M.f-n/2;C.drawImage(t.canvas,I,_,e,n,0,0,S,w),t.imageSmoothingEnabled=!1,t.drawImage(b,0,0,S,w,-e/2,-n/2,e,n),t.imageSmoothingEnabled=!0}}else if(c==="glitch"){const l=this.currentTime*p,b=r.chaosAmount??.2,S=Math.max(3,Math.floor(8*d)),w=d*e*.15;t.globalCompositeOperation="screen",t.globalAlpha=d*.4;const C=w*.3;t.fillStyle="rgba(255, 0, 0, 0.4)",t.fillRect(-e/2+C,-n/2,e,n),t.fillStyle="rgba(0, 255, 255, 0.4)",t.fillRect(-e/2-C,-n/2,e,n),t.globalCompositeOperation="source-over",t.globalAlpha=1;const M=n/S;for(let I=0;I<S;I++){const _=Math.sin(I*127.1+l*311.7*p)*43758.5,E=_-Math.floor(_);if(E>1-b){const P=(E-(1-b))/b*w*(Math.random()>.5?1:-1),L=-n/2+I*M,k=t.getTransform(),A=k.e-e/2+P,T=k.f+L;t.save(),t.beginPath(),t.rect(-e/2,L,e,M),t.clip(),t.globalAlpha=.8,t.drawImage(t.canvas,A,T,e,M,-e/2+P,L,e,M),t.restore()}}}t.restore()}}_shiftHue(t,s,o){let e=0,n=0,i=0;if(t.startsWith("#")){const g=t.replace("#","");e=parseInt(g.substring(0,2),16)/255,n=parseInt(g.substring(2,4),16)/255,i=parseInt(g.substring(4,6),16)/255}const a=Math.max(e,n,i),r=Math.min(e,n,i);let c=0,d=0,p=(a+r)/2;if(a!==r){const g=a-r;switch(d=p>.5?g/(2-a-r):g/(a+r),a){case e:c=((n-i)/g+(n<i?6:0))/6;break;case n:c=((i-e)/g+2)/6;break;case i:c=((e-n)/g+4)/6;break}}return`hsla(${(((c*360+s)%360+360)%360).toFixed(0)}, ${(d*100).toFixed(0)}%, ${(p*100).toFixed(0)}%, ${o})`}applyBackgroundBlurGlass(t,s,o,e,n,i,a){const r=i.radius??10,c=i.opacity!==void 0?this.normalizeOpacity(i.opacity):.5,d=i.noise??0,p=i.color??"rgba(255,255,255,0.2)";t.save(),this.applyPath(t,s,o,e,n),t.clip();const u=t.getTransform(),g=t.canvas;try{const v=document.createElement("canvas");v.width=Math.max(1,Math.ceil(o)),v.height=Math.max(1,Math.ceil(e));const m=v.getContext("2d");if(m){m.save(),m.translate(o/2,e/2);const l=i.magnification||1;if(l!==1&&m.scale(l,l),typeof u.inverse=="function"){const w=u.inverse();m.transform(w.a,w.b,w.c,w.d,w.e,w.f)}else{const w=u.a*u.d-u.b*u.c;w!==0&&m.transform(u.d/w,-u.b/w,-u.c/w,u.a/w,(u.c*u.f-u.d*u.e)/w,(u.b*u.e-u.a*u.f)/w)}m.drawImage(g,0,0),m.restore();const b=document.createElement("canvas");b.width=v.width,b.height=v.height;const S=b.getContext("2d");S.filter=`blur(${r}px)`,S.drawImage(v,0,0),t.globalCompositeOperation="destination-out",t.fillRect(-o/2,-e/2,o,e),t.globalCompositeOperation="source-over",t.globalAlpha=1,t.drawImage(b,-o/2,-e/2,o,e)}}catch(v){console.error("Background blur failed:",v)}t.globalCompositeOperation="source-over",t.globalAlpha=c,t.fillStyle=p,t.fillRect(-o/2,-e/2,o,e),t.globalAlpha=1;const h=t.createLinearGradient(-o/2,-e/2,o/2,e/2);if(h.addColorStop(0,"rgba(255,255,255,0.12)"),h.addColorStop(.3,"rgba(255,255,255,0.04)"),h.addColorStop(.5,"rgba(255,255,255,0.0)"),h.addColorStop(1,"rgba(255,255,255,0.0)"),t.fillStyle=h,t.fillRect(-o/2,-e/2,o,e),d>0){if(t.globalAlpha=d/100,!this._noiseTileCanvas){const m=document.createElement("canvas");m.width=64,m.height=64;const l=m.getContext("2d"),b=l.createImageData(64,64),S=b.data;for(let w=0;w<S.length;w+=4){const C=Math.floor(Math.random()*255);S[w]=C,S[w+1]=C,S[w+2]=C,S[w+3]=18}l.putImageData(b,0,0),this._noiseTileCanvas=m}const v=t.createPattern(this._noiseTileCanvas,"repeat");v&&(t.fillStyle=v,t.fillRect(-o/2,-e/2,o,e))}t.restore(),t.save(),t.globalAlpha=1,(a==null?void 0:a.stroke)&&a.stroke.width>0&&a.stroke.isEnabled!==!1?(this.applyPath(t,s,o,e,n),this.applyStrokeAlignment(t,a,s,o,e,n)):(t.strokeStyle="rgba(255, 255, 255, 0.25)",t.lineWidth=1.5,this.applyPath(t,s,o,e,n),t.stroke()),t.restore()}applyPath(t,s,o,e,n){s!=null&&s.data&&(s.type==="Path"||s.type==="Subtract"||s.type==="Union"||s.type==="Intersect"||s.type==="Exclude"||s.type),t.beginPath(),this._tracePath(t,s,o,e,n)}_tracePath(t,s,o,e,n){if(s){if(this.ensurePathPoints(s),(s==null?void 0:s.type)==="Rectangle"||s.type==="Image"){const i=n!==void 0?n:s.corner_radius??0;this.drawRoundRect(t,-o/2,-e/2,o,e,i)}else if(s.type==="Line")t.moveTo(-o/2,0),t.lineTo(o/2,0);else if(s.type==="Ellipse"||s.type==="circle"){const{startAngle:i=0,sweepAngle:a=360,ratio:r=0}=s,c=o/2,d=e/2,p=i*Math.PI/180,u=a*Math.PI/180,g=p+u;a>=360&&r<=0?t.ellipse(0,0,c,d,0,0,Math.PI*2):(t.ellipse(0,0,c,d,0,p,g,!1),r>0?t.ellipse(0,0,c*r,d*r,0,g,p,!0):t.lineTo(0,0),t.closePath())}else if(s.type==="Triangle")t.moveTo(0,-e/2),t.lineTo(o/2,e/2),t.lineTo(-o/2,e/2),t.closePath();else if(s.type==="Polygon"){const i=s.sides||3,a=s.radius||Math.min(o,e)/2;for(let r=0;r<i;r++){const c=r*2*Math.PI/i-Math.PI/2,d=a*Math.cos(c),p=a*Math.sin(c);r===0?t.moveTo(d,p):t.lineTo(d,p)}t.closePath()}else if(s.type==="Star"){const i=s.points||5,a=s.outer_radius||Math.min(o,e)/2;let r=s.inner_radius;r==null?r=a*.382:r<=1&&(r=a*r);for(let c=0;c<i*2;c++){const d=c*Math.PI/i-Math.PI/2,p=c%2===0?a:r,u=p*Math.cos(d),g=p*Math.sin(d);c===0?t.moveTo(u,g):t.lineTo(u,g)}t.closePath()}else if(((s==null?void 0:s.type)==="Path"||s.type==="Subtract"||s.type==="Union"||s.type==="Intersect"||s.type==="Exclude"||s.type==="BooleanOperation")&&s.points){this.frameCount%300===0&&this.log("[Engine] Tracing Path:",s.points.length,"points");let i=1/0,a=-1/0,r=1/0,c=-1/0;if(s.points.forEach(u=>{typeof u.x=="number"&&typeof u.y=="number"&&(i=Math.min(i,u.x),a=Math.max(a,u.x),r=Math.min(r,u.y),c=Math.max(c,u.y),u.out_x!==void 0&&(i=Math.min(i,u.out_x),a=Math.max(a,u.out_x)),u.out_y!==void 0&&(r=Math.min(r,u.out_y),c=Math.max(c,u.out_y)),u.in_x!==void 0&&(i=Math.min(i,u.in_x),a=Math.max(a,u.in_x)),u.in_y!==void 0&&(r=Math.min(r,u.in_y),c=Math.max(c,u.in_y)))}),i===1/0)return;let d=(i+a)/2,p=(r+c)/2;if(isNaN(d)||isNaN(p)){this.warn("[Engine] Invalid path center:",d,p);return}s.points.forEach((u,g)=>{if(g===0||u.moveTo)t.moveTo(u.x-d,u.y-p);else{const h=s.points[g-1];if(!h)return;const f=(h.out_x??h.x)-d,v=(h.out_y??h.y)-p,m=(u.in_x??u.x)-d,l=(u.in_y??u.y)-p;isNaN(f)||isNaN(m)||isNaN(u.x)?t.lineTo(u.x-d,u.y-p):t.bezierCurveTo(f,v,m,l,u.x-d,u.y-p)}if(u.closePath||g===s.points.length-1&&(s.is_closed||s.isClosed)){const h=[...s.points.slice(0,g+1)].reverse().find(f=>f.moveTo)||s.points[0];h&&(u.out_x!==void 0||h.in_x!==void 0)&&t.bezierCurveTo((u.out_x??u.x)-d,(u.out_y??u.y)-p,(h.in_x??h.x)-d,(h.in_y??h.y)-p,h.x-d,h.y-p),t.closePath()}})}else if(s.points&&Array.isArray(s.points)){let i=1/0,a=-1/0,r=1/0,c=-1/0;s.points.forEach(u=>{i=Math.min(i,u.x),a=Math.max(a,u.x),r=Math.min(r,u.y),c=Math.max(c,u.y)});const d=(i+a)/2,p=(r+c)/2;s.points.forEach((u,g)=>{if(g===0)t.moveTo(u.x-d,u.y-p);else{const h=s.points[g-1];h.out_x!==void 0||u.in_x!==void 0?t.bezierCurveTo((h.out_x??h.x)-d,(h.out_y??h.y)-p,(u.in_x??u.x)-d,(u.in_y??u.y)-p,u.x-d,u.y-p):t.lineTo(u.x-d,u.y-p)}(u.closePath||g===s.points.length-1&&(s.is_closed||s.isClosed))&&t.closePath()})}}}renderInputBox(t,s){var zt,Gt,Yt,te,ie,ce,ve,_e,ge,Ee,Zt,Me,Re,Ie,de,me,Ae,he;const o=this.objectStates.get(s.id),e=(o==null?void 0:o.options)||s.options||{},n=s.geometry||{},i=s.style||{},a=n.width||250,r=n.height||45,c=this.focusedId===s.id,d=this.lastHoveredObjectId===s.id,p=e.previewState||"default",u=p!=="default"?p:c?"focused":d?"hovered":"default",g=e.label||{visible:!0,text:"Label"},h=e.helperText||{visible:!1,text:"Helper text"},f=e.leftIcon||{visible:!1},v=e.rightIcon||{visible:!1},m=e.inputType==="textarea"||e.multiline===!0,l=u==="disabled",b=u==="error",S=n.corner_radius??n.cornerRadius,w=Array.isArray(S)?{tl:S[0],tr:S[1],br:S[2],bl:S[3]}:S&&typeof S=="object"?S:void 0,C=Number(e.cornerRadius??e.corner_radius??S??e.radius??8),M=e.corners??w??{tl:C,tr:C,bl:C,br:C},I=[Number(M.tl??C),Number(M.tr??C),Number(M.br??C),Number(M.bl??C)],_=(mt,rt,z,K,G,B=0)=>{const Q=Math.max(0,z-B*2),H=Math.max(0,K-B*2);let[lt,kt,Et,Ht]=G.map(qt=>Math.max(0,(Number(qt)||0)-B));const Ut=Math.min(Q,H)/2;lt=Math.min(lt,Ut),kt=Math.min(kt,Ut),Et=Math.min(Et,Ut),Ht=Math.min(Ht,Ut),t.beginPath(),t.roundRect?t.roundRect(mt+B,rt+B,Q,H,[lt,kt,Et,Ht]):(t.moveTo(mt+B+lt,rt+B),t.lineTo(mt+B+Q-kt,rt+B),t.arcTo(mt+B+Q,rt+B,mt+B+Q,rt+B+kt,kt),t.lineTo(mt+B+Q,rt+B+H-Et),t.arcTo(mt+B+Q,rt+B+H,mt+B+Q-Et,rt+B+H,Et),t.lineTo(mt+B+Ht,rt+B+H),t.arcTo(mt+B,rt+B+H,mt+B,rt+B+H-Ht,Ht),t.lineTo(mt+B+lt,rt+B),t.arcTo(mt+B,rt+B,mt+B+lt,rt+B,lt),t.closePath())};let E=e.backgroundColor||((zt=i.fill)==null?void 0:zt.color)||"rgba(31, 41, 55, 1)",P=e.borderColor||((Yt=(Gt=i.stroke)==null?void 0:Gt.fill)==null?void 0:Yt.color)||((te=i.stroke)==null?void 0:te.color)||"rgba(55, 65, 81, 1)",L=Number(e.borderWidth??((ie=i.stroke)==null?void 0:ie.width)??1),k=e.color||((ce=i.fill)==null?void 0:ce.color)||"#ffffff",A=e.placeholderColor||"rgba(156, 163, 175, 1)",T=e.fontSize||14,R=e.caretColor||"#3b82f6";const F=`${u}Style`,O=e[F];O?(O.backgroundColor!==void 0&&(E=O.backgroundColor),O.borderColor!==void 0&&(P=O.borderColor),O.borderWidth!==void 0&&(L=O.borderWidth),O.color!==void 0&&(k=O.color),O.placeholderColor!==void 0&&(A=O.placeholderColor),O.fontSize!==void 0&&(T=O.fontSize),O.caretColor!==void 0&&(R=O.caretColor)):u==="focused"?(P=e.focusBorderColor||"rgba(59, 130, 246, 1)",L=Math.max(L,2)):u==="hovered"||u==="hover"?(P=e.hoverBorderColor||P,E=e.hoverBackgroundColor||E):l?(E=e.disabledBackgroundColor||"rgba(31, 41, 55, 0.6)",P=e.disabledBorderColor||"rgba(55, 65, 81, 0.4)"):b&&(P="rgba(239, 68, 68, 1)",L=Math.max(L,2));const W=L>0?L/2:0,V=this.createCanvasFill(t,E,a,r);if(V&&E!=="transparent"&&(_(-a/2,-r/2,a,r,I,W),t.fillStyle=V,t.fill()),L>0){const mt=this.createCanvasFill(t,P,a,r);mt&&P!=="transparent"&&(_(-a/2,-r/2,a,r,I,W),t.strokeStyle=mt,t.lineWidth=L,t.lineCap="round",t.lineJoin="round",t.stroke())}if((u==="focused"||u==="focus")&&!l){t.save();const mt=-3,rt=I.map(G=>Math.max(0,G+3));_(-a/2+mt,-r/2+mt,a-mt*2,r-mt*2,rt);const z=((ve=e.activeStyle)==null?void 0:ve.borderColor)||R||"rgba(59, 130, 246, 0.4)",K=this.createCanvasFill(t,z,a,r)||"rgba(59, 130, 246, 0.4)";t.strokeStyle=K,t.lineWidth=2,t.lineCap="round",t.lineJoin="round",t.stroke(),t.restore()}const U=e.fontFamily||"Inter",Y=e.fontWeight||400,X=T,ot=e.inputType==="number"&&((_e=e.number)==null?void 0:_e.showSteppers)!==!1,J=24,at=ot?J+4:0,j=String(e.text??e.value??"");let it="Enter text...";if(e.inputType==="tel")it=`${((ge=e.tel)==null?void 0:ge.dialCode)||"+1"} (555) 000-0000`;else if(e.inputType==="number"){const mt=(Ee=e.number)!=null&&Ee.prefix?`${e.number.prefix} `:"",rt=(Zt=e.number)!=null&&Zt.suffix?` ${e.number.suffix}`:"";it=`${mt}0.00${rt}`}else e.inputType==="email"?it="user@example.com":e.inputType==="search"?it="Search anything...":e.inputType==="url"?it="https://example.com":e.inputType==="password"?it="••••••••":e.inputType==="textarea"&&(it="Enter text...");const x=e.placeholder||it,D=!j,N=e.inputType==="password",ct=v.mode==="password-toggle"||N&&v.visible!==!1,Mt=v.mode==="clear"||e.inputType==="search"&&!!j,bt=(mt,rt)=>{var lt;let z=mt.svgPath||"";if(z||(rt?e.inputType==="search"&&(z="M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z"):ct?z=e.passwordVisible?"M17.94 17.94A10.07 10.07 0 0 1 12 20c-7 0-11-8-11-8a18.45 18.45 0 0 1 5.06-5.94M9.9 4.24A9.12 9.12 0 0 1 12 4c7 0 11 8 11 8a18.5 18.5 0 0 1-2.16 3.19m-6.72-1.07a3 3 0 1 1-4.24-4.24M1 1l22 22":"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z M12 9a3 3 0 100 6 3 3 0 000-6z":Mt&&(z="M18 6L6 18M6 6l12 12")),!(mt.visible||!!z&&(!rt&&(ct||Mt)||rt&&e.inputType==="search"))||!z)return;const G=mt.size||16,B=(mt.offset??16)+(rt?0:at),Q=typeof mt.color=="string"?mt.color:((lt=mt.color)==null?void 0:lt.color)||"#9ca3af",H=rt?-(a/2)+B:a/2-B;if(t.save(),t.translate(H,0),!z.startsWith("<svg")){const kt=new Path2D(z),Et=G/24;t.scale(Et,Et),t.translate(-12,-12),z.includes("M18 6L6 18")||z.includes("M1 1l22 22")||z.includes("M21 21")?(t.strokeStyle=Q,t.lineWidth=2,t.lineCap="round",t.stroke(kt)):(t.fillStyle=Q,t.fill(kt))}t.restore()};if(bt(f,!0),bt(v,!1),ot){const mt=a/2-J-4;t.save(),t.strokeStyle=P||"rgba(55, 65, 81, 0.5)",t.lineWidth=1,t.beginPath(),t.moveTo(mt,-r/2+6),t.lineTo(mt,r/2-6),t.stroke(),t.beginPath(),t.moveTo(mt,0),t.lineTo(a/2-4,0),t.stroke(),t.fillStyle=k||"rgba(156, 163, 175, 0.8)",t.font=`600 8px "${U}", sans-serif`,t.textAlign="center",t.textBaseline="middle",t.fillText("▲",mt+J/2,-r/4),t.fillText("▼",mt+J/2,r/4),t.restore()}const wt=((Me=e.padding)==null?void 0:Me.left)??e.inputPadding??12,gt=((Re=e.padding)==null?void 0:Re.right)??e.inputPadding??12,It=f.visible||e.inputType==="search",ut=v.visible||ct||Mt,Ot=It?(f.offset??16)+(f.size||16)/2+8:wt,Wt=ut?(v.offset??16)+(v.size||16)/2+8+at:gt+at,q=-(a/2)+Ot,ft=Math.max(0,a-Ot-Wt);let xt=j||x;if(e.inputType==="number"&&j){const mt=(Ie=e.number)!=null&&Ie.prefix?`${e.number.prefix} `:"",rt=(de=e.number)!=null&&de.suffix?` ${e.number.suffix}`:"";xt=`${mt}${j}${rt}`}const At=N&&j?e.passwordVisible?j:"•".repeat(j.length):xt,Pt=D?A:k;if(t.font=`${Y} ${X}px "${U}", sans-serif`,t.fillStyle=Pt,t.textAlign="left",t.save(),t.beginPath(),t.rect(q-2,-r/2+4,ft+4,r-8),t.clip(),m){t.textBaseline="top";const mt=At.split(`
19
- `);let rt=-r/2+(((me=e.padding)==null?void 0:me.top)??8);const z=X*1.4,K=e.rows||3;let G=0,B=0;for(const Q of mt){if(G>=K)break;const H=Q.split(" ");let lt="";for(let kt=0;kt<H.length;kt++){const Et=lt+H[kt]+" ";if(t.measureText(Et).width>ft&&kt>0){if(G>=K)break;t.fillText(lt.trim(),q,rt),lt=H[kt]+" ",rt+=z,G++}else lt=Et}G<K&&(t.fillText(lt.trim(),q,rt),B=t.measureText(lt.trim()).width,rt+=z,G++)}if(c&&!D&&Math.floor(performance.now()/500)%2===0){const Q=rt-z;t.fillStyle=R,t.fillRect(q+Math.min(B,ft),Q,1.5,X)}}else{t.textBaseline="middle";const rt=t.measureText(At).width;let z=0;if(rt>ft&&(z=rt-ft),t.fillText(At,q-z,0),c&&Math.floor(performance.now()/500)%2===0){const K=D?q:q+rt-z;t.fillStyle=R,t.fillRect(K,-(X/2),1.5,X)}}if(t.restore(),e.showCharCounter){t.save();const mt=Number(e.maxLength||0),rt=mt>0?`${j.length}/${mt}`:`${j.length}`;t.font=`400 10px "${U}", sans-serif`,t.fillStyle=mt>0&&j.length>=mt?"#ef4444":"rgba(156, 163, 175, 0.6)",t.textAlign="right",t.textBaseline="top",t.fillText(rt,-(a/2)+a-8,-(r/2)+r+4),t.restore()}if(g.visible!==!1){const mt=!!(g.required||(Ae=e.validation)!=null&&Ae.required),rt=(g.text||"Label")+(mt?" *":""),z=g.fontSize||12,K=g.color||"rgba(156, 163, 175, 1)",G=g.position||"top",B=g.gap??g.offset??6;let Q=-(a/2),H=-(r/2)-B,lt="left",kt="bottom",Et=`600 ${z}px "${g.fontFamily||U}", sans-serif`;G==="left"?(Q=-(a/2)-B,H=0,lt="right",kt="middle"):G==="bottom"?(Q=-(a/2),H=r/2+B,lt="left",kt="top"):G==="floating"&&(!!j||c?(Q=-(a/2)+12,H=-(r/2)+4,lt="left",kt="top",Et=`600 ${Math.max(9,z-2)}px "${g.fontFamily||U}", sans-serif`):Et=null),Et&&(t.save(),t.font=Et,t.fillStyle=K,t.textAlign=lt,t.textBaseline=kt,t.fillText(rt,Q,H),t.restore())}const vt=(he=e.validation)==null?void 0:he.errorMessage;if(b&&vt||h.visible===!0&&h.text){t.save();const mt=h.fontSize||11,rt=b?"#ef4444":h.color||"rgba(156, 163, 175, 1)",z=h.offset??6,K=b&&vt?vt:h.text;t.font=`400 ${mt}px "${U}", sans-serif`,t.fillStyle=rt,t.textAlign="left",t.textBaseline="top",t.fillText(K,-(a/2),r/2+z),t.restore()}l&&(t.save(),_(-a/2,-r/2,a,r,I),t.fillStyle="rgba(0, 0, 0, 0.3)",t.fill(),t.restore())}renderSlider(t,s){const o=this.objectStates.get(s.id),e=(o==null?void 0:o.geometry)||s.geometry,n=(o==null?void 0:o.options)||s.options||{},i=e.width||200,a=n.value??50,r=n.min??0,d=(n.max??100)-r,p=d===0?0:(a-r)/d,u=n.trackHeight||4,g=n.trackRoundedness??2,h=n.trackShape??"Rectangle",f=n.trackPath||"",v=n.accentColor||"#3b82f6",m=n.inactiveColor||"#374151",l=n.thumbShape||"Ellipse",b=n.thumbWidth??16,S=n.thumbHeight??16,w=n.thumbRoundedness??0,C=n.thumbColor||"#ffffff",M=n.thumbPath||"",I=n.thumbIcon||"",_=n.showValueTooltip??!1,E=n.tooltipBgColor||"#333333",P=n.tooltipColor||"#ffffff",L=n.tooltipOffsetX??0,k=n.tooltipOffsetY??-25,A=(J,at,j,it,x,D,N)=>{if((J==="Custom"||J==="Icon")&&N)try{const ct=new Path2D(N);if(t.save(),t.translate(at,j),J==="Icon"){const Mt=Math.min(it,x)/24;t.scale(Mt,Mt),t.translate(-12,-12)}t.fill(ct),t.restore();return}catch(ct){console.error("Error drawing slider shape in engine:",ct)}if(t.beginPath(),J==="Ellipse")t.ellipse(at,j,it/2,x/2,0,0,Math.PI*2);else if(J==="Rectangle")this.drawRoundRect(t,at-it/2,j-x/2,it,x,D);else if(J==="Triangle")t.moveTo(at,j-x/2),t.lineTo(at+it/2,j+x/2),t.lineTo(at-it/2,j+x/2),t.closePath();else if(J==="Diamond")t.moveTo(at,j-x/2),t.lineTo(at+it/2,j),t.lineTo(at,j+x/2),t.lineTo(at-it/2,j),t.closePath();else if(J==="Polygon"){const ct=s.geometry.sides||3,Mt=s.geometry.radius||Math.min(it,x)/2;for(let bt=0;bt<ct;bt++){const wt=bt*2*Math.PI/ct-Math.PI/2,gt=at+Mt*Math.cos(wt),It=j+Mt*Math.sin(wt);bt===0?t.moveTo(gt,It):t.lineTo(gt,It)}t.closePath()}else if(J==="Star"){const Mt=Math.min(it,x)/2,bt=Mt/2;for(let wt=0;wt<10;wt++){const gt=wt%2===0?Mt:bt,It=wt*Math.PI/5-Math.PI/2;t.lineTo(at+gt*Math.cos(It),j+gt*Math.sin(It))}t.closePath()}else J==="Line"&&(t.moveTo(at-it/2,j),t.lineTo(at+it/2,j));t.fill()},T=this.createCanvasFill(t,m,i,u);T&&(t.fillStyle=T,t.strokeStyle=T),h==="Line"?(t.lineWidth=u,t.beginPath(),t.moveTo(-i/2,0),t.lineTo(i/2,0),t.stroke()):A(h,0,0,i,u,g,f);const R=i-b,F=-i/2+b/2+p*R,O=F- -i/2;if(O>0){const J=this.createCanvasFill(t,v,i,u);J&&(t.fillStyle=J,t.strokeStyle=J),h==="Line"?(t.lineWidth=u,t.beginPath(),t.moveTo(-i/2,0),t.lineTo(F,0),t.stroke()):h==="Rectangle"&&(t.beginPath(),this.drawRoundRect(t,-i/2,-u/2,O,u,g),t.fill())}t.save(),t.translate(F,0);const W=t.getTransform(),V=Math.sqrt(W.a*W.a+W.b*W.b)||1;t.shadowColor="rgba(0,0,0,0.2)",t.shadowBlur=4*V,t.shadowOffsetY=1*V;const U=this.createCanvasFill(t,C,b,S);if(U&&(t.fillStyle=U),A(l,0,0,b,S,w,l==="Icon"?I:M),t.restore(),_){t.save(),t.translate(F+L,k);const J=Math.round(a).toString();t.font="10px Inter, sans-serif";const at=t.measureText(J),j=6,it=4,x=at.width+j*2,D=14+it;t.beginPath(),this.drawRoundRect(t,-x/2,-D/2,x,D,4),t.fillStyle=E,t.fill(),t.fillStyle=P,t.textAlign="center",t.textBaseline="middle",t.fillText(J,0,0),t.restore()}const Y=n.label||{},X=n.helperText||{},ot=n.fontFamily||"Inter";if(Y.visible!==!1){const J=Y.text||"Label",at=Y.fontSize||12,j=Y.color||"rgba(156, 163, 175, 1)",it=Y.offset??8;t.font=`600 ${at}px "${ot}", sans-serif`,t.fillStyle=j,t.textAlign="left",t.textBaseline="bottom";const x=-(i/2),D=-(u/2)-it;t.fillText(J,x,D)}if(X.visible===!0){const J=X.text||"Helper text",at=X.fontSize||11,j=X.color||"rgba(156, 163, 175, 1)",it=X.offset??6;t.font=`400 ${at}px "${ot}", sans-serif`,t.fillStyle=j,t.textAlign="left",t.textBaseline="top";const x=-(i/2),D=u/2+it;t.fillText(J,x,D)}}renderDropdown(t,s){var k;const o=this.objectStates.get(s.id);if(!o)return;const e=o.options||s.options||{},n=s.geometry.width||180,i=s.geometry.height||40,a=-n/2,r=-i/2,c=e.cornerRadius??e.corner_radius??6,d=e.disabled||e.previewState==="disabled",p=this.lastHoveredObjectId===s.id||e.previewState==="hover",u=(e.isOpen||e.previewState==="active")&&!d;let g=e.backgroundColor,h=e.borderColor,f=e.color||"#333333";d?(g=e.disabledBackgroundColor||"#f3f4f6",h=e.disabledBorderColor||"#e5e7eb",f=e.disabledColor||"#9ca3af"):u?(g=e.activeBackgroundColor||g,h=e.activeBorderColor||h,f=e.activeColor||f):p&&(g=e.hoverBackgroundColor||g,h=e.hoverBorderColor||h,f=e.hoverColor||f),g||(g="#ffffff"),h||(h="#e5e7eb"),t.save();const v=t.globalAlpha;t.globalAlpha=v*(e.opacity??1),t.beginPath(),this.drawRoundRect(t,a,r,n,i,c),t.fillStyle=this.createCanvasFill(t,typeof g=="string"?{type:"Solid",color:g}:g,n,i)||"#ffffff",t.fill();const m=e.borderWidth??1;m>0&&(t.beginPath(),this.drawRoundRect(t,a,r,n,i,c),t.strokeStyle=this.createCanvasFill(t,typeof h=="string"?{type:"Solid",color:h}:h,n,i)||"#e5e7eb",t.lineWidth=m,t.stroke());const l=12,b=e.chevronType||"chevron",S=e.chevronSize||16,w=(u?e.openIconColor:e.closedIconColor)||e.chevronColor||"#6b7280";if(b!=="none"){const A=a+n-l-S/2;t.save(),t.translate(A,0);const T=u?e.openIconAngle??180:e.closedIconAngle??0;if(t.rotate(T*Math.PI/180),t.strokeStyle=w,t.fillStyle=w,t.lineWidth=1.5,t.lineCap="round",t.lineJoin="round",b==="chevron")t.beginPath(),t.moveTo(-S/2,-S*.2),t.lineTo(0,S*.2),t.lineTo(S/2,-S*.2),t.stroke();else if(b==="custom"||b==="path"){const R=u&&e.openIconPath||e.closedIconPath;if(R){const F=new Path2D(R);t.save();const O=S/24;t.scale(O,O),t.translate(-12,-12),t.fill(F),t.restore()}}t.restore()}const C=e.selectedOption||e.placeholder||"Select...",M=e.fontSize||14,I=e.fontWeight||400,_=e.fontFamily||"Inter, sans-serif";t.font=`${I} ${M}px ${_}`;const E=d?e.disabledColor||"#9ca3af":!e.selectedOption&&e.placeholder?"#9ca3af":f;t.fillStyle=this.createCanvasFill(t,typeof E=="string"?{type:"Solid",color:E}:E,n,i)||"#333333",t.textAlign="left",t.textBaseline="middle";const P=b==="none"?0:S+8,L=n-l*2-P;if(t.save(),t.beginPath(),t.rect(a+l,r,L,i),t.clip(),t.fillText(C,a+l,0),t.restore(),u&&!d){const A=r+i+4,T=e.optionsList||[],R=e.itemHeight||32,F=e.listPadding??4,O=T.length*R+F*2,W=e.listCornerRadius??c;t.save();const V=e.listShadow||{},U=t.getTransform(),Y=Math.sqrt(U.a*U.a+U.b*U.b)||1;t.shadowColor=typeof V.color=="string"?V.color:((k=V.color)==null?void 0:k.color)||"rgba(0,0,0,0.15)",t.shadowBlur=(V.blur??12)*Y,t.shadowOffsetY=(V.offsetY??6)*Y,t.shadowOffsetX=(V.offsetX??0)*Y,t.beginPath(),this.drawRoundRect(t,a,A,n,O,W),t.fillStyle=this.createCanvasFill(t,typeof e.listBackgroundColor=="string"?{type:"Solid",color:e.listBackgroundColor}:e.listBackgroundColor||{type:"Solid",color:"#ffffff"},n,O)||"#ffffff",t.fill();const X=e.listBorderWidth??1;X>0&&(t.shadowColor="transparent",t.beginPath(),this.drawRoundRect(t,a,A,n,O,W),t.strokeStyle=this.createCanvasFill(t,typeof e.listBorderColor=="string"?{type:"Solid",color:e.listBorderColor}:e.listBorderColor||{type:"Solid",color:h},n,O)||"#e5e7eb",t.lineWidth=X,t.stroke()),t.restore();const ot=e.itemFontSize||M,J=e.itemFontFamily||_;t.font=`${I} ${ot}px ${J}`,T.forEach((at,j)=>{const it=A+F+j*R;if(at===e.selectedOption)t.fillStyle=this.createCanvasFill(t,typeof e.itemSelectedBackgroundColor=="string"?{type:"Solid",color:e.itemSelectedBackgroundColor}:e.itemSelectedBackgroundColor||{type:"Solid",color:"#f3f4f6"},n,R)||"#f3f4f6",t.fillRect(a+X,it,n-X*2,R),t.fillStyle=e.itemSelectedColor||e.accentColor||f||"#374151";else if(t.fillStyle=e.listTextColor||f||"#333333",this.activeDropdownId===s.id&&this._lastPointerPos){const D=this._lastPointerPos.y-(A+F),N=Math.floor(D/R);j===N&&(t.fillStyle=this.createCanvasFill(t,typeof e.itemHoverBackgroundColor=="string"?{type:"Solid",color:e.itemHoverBackgroundColor}:e.itemHoverBackgroundColor||{type:"Solid",color:"#f9fafb"},n,R)||"#f9fafb",t.fillRect(a+X,it,n-X*2,R),t.fillStyle=e.itemHoverColor||f)}t.fillText(at,a+l,it+R/2)})}t.restore()}renderButton(t,s){var L;if(s.children&&s.children.length>0)return;const o=this.objectStates.get(s.id),e=(o==null?void 0:o.options)||s.options||{},n=s.geometry||{},i=n.width||s.width||160,a=n.height||s.height||45,r=this.lastHoveredObjectId===s.id,c=this.activeObjectId===s.id,d=e.label||{},p=e.hoverStyle||{},u=e.activeStyle||{},g=e.icon||{enabled:!1};let h=e.backgroundColor||e.buttonBgColor||((L=s.style)==null?void 0:L.fill)||"#3b82f6",f=(typeof d=="object"?d.color:null)||"#ffffff",v=typeof d=="string"?d:d.text||s.text||(s.name&&!s.name.toLowerCase().includes("component")?s.name:"Button"),m=n.cornerRadius??n.corner_radius??8,l=e.borderColor||"transparent",b=e.borderWidth||0,S=1;c&&u?(h=u.backgroundColor||h,f=u.color||f,v=u.text||v,S=u.scale??.95,m=u.cornerRadius??m):r&&p&&(h=p.backgroundColor||h,f=p.color||f,v=p.text||v,S=p.scale??1,m=p.cornerRadius??m,l=p.borderColor||l);const w=-i/2,C=-a/2;t.save(),t.scale(S,S),t.beginPath(),this.drawRoundRect(t,w,C,i,a,m);const M=this.createCanvasFill(t,h,i,a);M&&(t.fillStyle=M,t.fill()),(b>0||r&&p.borderColor)&&(t.strokeStyle=l,t.lineWidth=b||(r?1:0),t.stroke());const I=d.fontSize||14,_=d.fontFamily||"Inter",E=d.fontWeight||600;t.font=`${E} ${I}px "${_}", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif`,t.fillStyle=f,t.textAlign="center",t.textBaseline="middle";let P=0;if(g.enabled&&g.svgPath){const k=I*1.1,A=g.gap||8,T=t.measureText(v),F=-(T.width+k+A)/2,O=g.position==="left"?F+k/2:F+T.width+A+k/2;P=g.position==="left"?F+k+A+T.width/2:F+T.width/2,t.save(),t.translate(O,0);const W=new Path2D(g.svgPath),V=k/24;t.scale(V,V),t.translate(-12,-12),t.fillStyle=f,t.fill(W),t.restore()}t.fillText(v,P,0),t.restore()}renderToggleButton(t,s){var v,m;const o=this.objectStates.get(s.id),e=(o==null?void 0:o.options)||s.options||{},n=e.checked??!1,i=((v=s.geometry)==null?void 0:v.width)||120,a=((m=s.geometry)==null?void 0:m.height)||40,r=-i/2,c=-a/2,d=e.corner_radius??8,p=e.label||{},u=n?e.accentColor||"#3b82f6":e.inactiveColor||"#374151",g=n?e.activeTextColor||"#ffffff":e.inactiveTextColor||"#9ca3af";t.save(),t.beginPath(),this.drawRoundRect(t,r,c,i,a,d),t.fillStyle=u,t.fill();const h=p.fontSize||14,f=p.fontFamily||"Inter";t.font=`${p.fontWeight||600} ${h}px "${f}", sans-serif`,t.fillStyle=g,t.textAlign="center",t.textBaseline="middle",t.fillText(p.text||"Toggle",0,0),t.restore()}renderToggle(t,s){var W,V,U,Y,X,ot,J,at,j,it,x,D;const o=this.objectStates.get(s.id),e=(o==null?void 0:o.options)||s.options||{},n=((W=s.geometry)==null?void 0:W.width)||52,i=((V=s.geometry)==null?void 0:V.height)||30,a=-n/2,r=-i/2,c=e.checked??!1,d=e.cornerRadius??e.corner_radius??i/2,p=e.toggleStyle||{},u=p.backgroundColor||e.activeColor||"#10b981",g=p.borderColor||e.borderColor||"transparent",h=p.borderWidth??e.borderWidth??0,f=p.knobColor||e.knobColor||"#ffffff",v=c?u:e.inactiveColor||"#374151",m=c?g:e.borderColor||"transparent",l=c?h:e.borderWidth??0,b=c?f:e.knobColor||"#ffffff";e.disabled&&(t.globalAlpha*=.5),t.beginPath(),this.drawRoundRect(t,a,r,n,i,d);const S=this.createCanvasFill(t,v,n,i);if(S&&(t.fillStyle=S,t.fill()),l>0){t.lineWidth=l;const N=this.createCanvasFill(t,m,n,i);N&&(t.strokeStyle=N,t.stroke())}const w=2,C=i-w*2,M=C/2,I=a+w,_=a+n-w-C,E=c?_:I,P=r+w;t.beginPath(),t.arc(E+M,P+M,M,0,Math.PI*2);const L=this.createCanvasFill(t,b,C,C);L&&(t.fillStyle=L,t.fill()),e.disabled&&(t.globalAlpha*=2);let k=!1,A=!1;const T=(c?(U=p.leftLabel)==null?void 0:U.text:null)||((Y=e.leftLabel)==null?void 0:Y.text)||"",R=(c?(X=p.leftLabel)==null?void 0:X.color:null)||((ot=e.leftLabel)==null?void 0:ot.color)||"#f3f4f6";if((J=e.leftLabel)!=null&&J.enabled&&T){const N=e.leftLabel;t.font=`${N.fontWeight||400} ${N.fontSize||12}px "${N.fontFamily||"Inter"}", sans-serif`,t.fillStyle=R,t.textBaseline="middle",t.textAlign="right",t.fillText(T,a-(N.gap||8),0),k=!0}const F=(c?(at=p.rightLabel)==null?void 0:at.text:null)||((j=e.rightLabel)==null?void 0:j.text)||"",O=(c?(it=p.rightLabel)==null?void 0:it.color:null)||((x=e.rightLabel)==null?void 0:x.color)||"#f3f4f6";if((D=e.rightLabel)!=null&&D.enabled&&F){const N=e.rightLabel;t.font=`${N.fontWeight||400} ${N.fontSize||12}px "${N.fontFamily||"Inter"}", sans-serif`,t.fillStyle=O,t.textBaseline="middle",t.textAlign="left",t.fillText(F,a+n+(N.gap||8),0),A=!0}if(!k&&!A&&e.label&&e.label.text){const N=e.label,ct=N.fontSize||14,Mt=N.fontWeight||400,bt=N.fontFamily||"Inter";t.font=`${Mt} ${ct}px "${bt}", sans-serif`,t.fillStyle=N.color||"#f3f4f6",t.textBaseline="middle";const wt=N.gap||10;let gt=0,It=0;N.position==="left"?(t.textAlign="right",gt=a-wt,It=0):N.position==="right"?(t.textAlign="left",gt=a+n+wt,It=0):N.position==="top"?(t.textAlign="center",gt=0,It=r-wt,t.textBaseline="bottom"):N.position==="bottom"?(t.textAlign="center",gt=0,It=r+i+wt,t.textBaseline="top"):(t.textAlign="left",gt=a+n+wt,It=0),t.fillText(N.text,gt,It)}}renderCheckbox(t,s){var S,w;const o=this.objectStates.get(s.id),e=(o==null?void 0:o.options)||s.options||{},n=((S=s.geometry)==null?void 0:S.width)||20,i=((w=s.geometry)==null?void 0:w.height)||20,a=-n/2,r=-i/2,c=e.cornerRadius??4,d=e.checked??!1,p=e.activeColor||"#3b82f6",u=e.inactiveColor||"transparent",g=e.checkColor||"#ffffff",h=e.borderColor||"#4b5563",f=e.borderWidth??2,v=d?p:u,m=d?"transparent":h,l=d?0:f;e.disabled&&(t.globalAlpha*=.5),t.beginPath(),this.drawRoundRect(t,a,r,n,i,c);const b=this.createCanvasFill(t,v,n,i);if(b&&(t.fillStyle=b,t.fill()),l>0){t.lineWidth=l;const C=this.createCanvasFill(t,m,n,i);C&&(t.strokeStyle=C,t.stroke())}else if(d){t.lineWidth=1;const C=this.createCanvasFill(t,p,n,i);C&&(t.strokeStyle=C,t.stroke())}if(d){t.save(),t.beginPath();const C=this.createCanvasFill(t,g,n,i);t.strokeStyle=C||g,t.lineWidth=Math.max(2,n*.12),t.lineCap="round",t.lineJoin="round";const M=a+n*.25,I=r+i*.5,_=a+n*.45,E=r+i*.7,P=a+n*.75,L=r+i*.25;t.moveTo(M,I),t.lineTo(_,E),t.lineTo(P,L),t.stroke(),t.restore()}if(e.disabled&&(t.globalAlpha*=2),e.label&&e.label.text){const C=e.label;t.save(),t.font=`${C.fontWeight||400} ${C.fontSize||14}px "${C.fontFamily||"Inter"}", sans-serif`,t.fillStyle=C.color||"#f3f4f6",t.textBaseline="middle";const M=C.gap||8;let I=0,_=0;C.position==="left"?(t.textAlign="right",I=a-M,_=0):C.position==="right"?(t.textAlign="left",I=a+n+M,_=0):C.position==="top"?(t.textAlign="center",I=0,_=r-M,t.textBaseline="bottom"):C.position==="bottom"&&(t.textAlign="center",I=0,_=r+i+M,t.textBaseline="top"),t.fillText(C.text,I,_),t.restore()}}renderRadioGroup(t,s){var _,E;const o=this.objectStates.get(s.id),e=(o==null?void 0:o.options)||s.options||{},n=((_=s.geometry)==null?void 0:_.width)||180,i=((E=s.geometry)==null?void 0:E.height)||100,a=-n/2,r=-i/2;let c=e.optionsList||["Option 1","Option 2","Option 3"];if(e.isDataVarEnabled&&e.dataInputId){let P=this.inputs.get(e.dataInputId);if(P===void 0){const L=this.inputNameMap.get(e.dataInputId);L&&L.length>0&&(P=this.inputs.get(L[0]))}P&&Array.isArray(P)&&(c=P.map(L=>typeof L=="string"?L:String(L)))}const d=e.selectedValue,p=e.orientation||"vertical",u=e.itemGap!==void 0?e.itemGap:16,g=e.activeColor||"#3b82f6",h=e.inactiveColor||"#4b5563",f=e.textColor||"#ffffff",v=e.fontSize||14,m=e.fontFamily||"Inter",l=e.fontWeight||400;t.save(),t.beginPath(),t.rect(a,r,n,i),t.clip(),e.disabled&&(t.globalAlpha*=.5);const b=8,S=b*2,w=e.radioShape||"circle",C=e.borderWidth!==void 0?e.borderWidth:2,M=e.fillEmpty||"transparent",I=(P,L,k,A)=>{if(t.beginPath(),A==="custom"&&e.customShapePath)try{const T=new Path2D(e.customShapePath);t.save(),t.translate(P-k,L-k),t.scale(k*2/24,k*2/24),t.fill(T),t.restore();return}catch{t.arc(P,L,k,0,Math.PI*2);return}if(A==="square"){const T=k*1.6;t.rect(P-T/2,L-T/2,T,T)}else if(A==="diamond"){const T=k*1.4;t.moveTo(P,L-T),t.lineTo(P+T,L),t.lineTo(P,L+T),t.lineTo(P-T,L),t.closePath()}else if(A==="heart"){const T=k*.9;t.moveTo(P,L+T*.7),t.bezierCurveTo(P-T*1.5,L-T*.3,P-T*.5,L-T*1.5,P,L-T*.5),t.bezierCurveTo(P+T*.5,L-T*1.5,P+T*1.5,L-T*.3,P,L+T*.7)}else if(A==="star"){const T=k*1.1,R=k*.5;for(let F=0;F<5;F++){const O=(F*72-90)*Math.PI/180,W=(F*72+36-90)*Math.PI/180;F===0?t.moveTo(P+T*Math.cos(O),L+T*Math.sin(O)):t.lineTo(P+T*Math.cos(O),L+T*Math.sin(O)),t.lineTo(P+R*Math.cos(W),L+R*Math.sin(W))}t.closePath()}else t.arc(P,L,k,0,Math.PI*2)};if(t.font=`${l} ${v}px "${m}", sans-serif`,t.textBaseline="middle",t.textAlign="left",p==="vertical"){const P=Math.max(S,v)+u,L=c.length*P-u,k=r+Math.max(0,(i-L)/2);c.forEach((A,T)=>{const R=k+b+T*P,F=d===A,O=this.createCanvasFill(t,g,S,S),W=this.createCanvasFill(t,h,S,S);F?(t.fillStyle=O||g,I(a+b,R,b,w),t.fill(),t.strokeStyle=O||g,t.lineWidth=C,I(a+b,R,b,w),t.stroke()):(M!=="transparent"&&(t.fillStyle=M,I(a+b,R,b,w),t.fill()),t.strokeStyle=W||h,t.lineWidth=C,I(a+b,R,b,w),t.stroke()),t.fillStyle=f,t.fillText(A,a+S+8,R)})}else{const P=r+i/2;let L=0;t.font=`${l} ${v}px "${m}", sans-serif`,c.forEach(T=>{L+=S+6+t.measureText(T).width+u}),L-=u;let A=a+Math.max(0,(n-L)/2);c.forEach(T=>{const R=d===T,F=t.measureText(T).width,O=this.createCanvasFill(t,g,S,S),W=this.createCanvasFill(t,h,S,S);R?(t.fillStyle=O||g,I(A+b,P,b,w),t.fill(),t.strokeStyle=O||g,t.lineWidth=C,I(A+b,P,b,w),t.stroke()):(M!=="transparent"&&(t.fillStyle=M,I(A+b,P,b,w),t.fill()),t.strokeStyle=W||h,t.lineWidth=C,I(A+b,P,b,w),t.stroke()),t.fillStyle=f,t.fillText(T,A+S+6,P),A+=S+6+F+u})}if(t.restore(),e.disabled&&(t.globalAlpha*=2),e.label&&e.label.text){const P=e.label;t.save(),t.font=`${P.fontWeight||400} ${P.fontSize||14}px "${P.fontFamily||"Inter"}", sans-serif`,t.fillStyle=P.color||"#9ca3af",t.textBaseline="middle";const L=P.gap||8;let k=0,A=0;P.position==="left"?(t.textAlign="right",k=a-L,A=0):P.position==="right"?(t.textAlign="left",k=a+n+L,A=0):P.position==="top"?(t.textAlign="center",k=0,A=r-L,t.textBaseline="bottom"):P.position==="bottom"&&(t.textAlign="center",k=0,A=r+i+L,t.textBaseline="top"),t.fillText(P.text,k,A),t.restore()}}renderBarChart(t,s){var E,P,L;const o=this.objectStates.get(s.id),e=(o==null?void 0:o.options)||s.options||{};let n={...e};if(e.isDataVarEnabled&&e.dataInputId){let k=this.inputs.get(e.dataInputId);if(k===void 0){const A=this.inputNameMap.get(e.dataInputId);A&&A.length>0&&(k=this.inputs.get(A[0]))}k&&Array.isArray(k)&&(n.categories=k.map(A=>typeof A=="string"?A:String(A)))}if(e.isDatasetsVarEnabled&&((E=e.datasetInputIds)==null?void 0:E.length)>0){const k=e.datasetInputIds.map((A,T)=>{var O;let R=this.inputs.get(A);if(R===void 0){const W=this.inputNameMap.get(A);W&&W.length>0&&(R=this.inputs.get(W[0]))}const F=((O=e.datasets)==null?void 0:O[T])||{id:`ds-${T}`,label:`Series ${T+1}`,data:[],color:"#6366f1"};return R&&Array.isArray(R)?{...F,data:R.map(W=>typeof W=="number"?W:parseFloat(W)||0)}:F});n.datasets=k}const i={width:((P=s.geometry)==null?void 0:P.width)||300,height:((L=s.geometry)==null?void 0:L.height)||180,chartType:n.chartType||"grouped",datasets:n.datasets||[{id:"ds-1",label:"Revenue",data:[42,67,31,55,78,48],color:"#6366f1"}],categories:n.categories||["Jan","Feb","Mar","Apr","May","Jun"],orientation:n.orientation||"vertical",barWidth:n.barWidth!==void 0?n.barWidth:14,barGap:n.barGap!==void 0?n.barGap:4,barCornerRadius:n.barCornerRadius!==void 0?n.barCornerRadius:5,showXAxis:!!n.showXAxis,showYAxis:!!n.showYAxis,xAxisColor:n.xAxisColor||"rgba(255,255,255,0.15)",yAxisColor:n.yAxisColor||"rgba(255,255,255,0.15)",showXLabels:n.showXLabels!==void 0?!!n.showXLabels:!0,showYLabels:!!n.showYLabels,axisLabelColor:n.axisLabelColor||"rgba(255,255,255,0.55)",axisLabelFontSize:n.axisLabelFontSize||9,showLegend:n.showLegend!==void 0?!!n.showLegend:!0,legendColor:n.legendColor||"rgba(255,255,255,0.7)",legendFontSize:n.legendFontSize||9,showGridLines:n.showGridLines!==void 0?!!n.showGridLines:!0,gridColor:n.gridColor||"rgba(255,255,255,0.06)",cardBackground:n.cardBackground||"#ffffff",cardBackgroundOpacity:n.cardBackgroundOpacity!==void 0?n.cardBackgroundOpacity:.04,cardBorderColor:n.cardBorderColor||"rgba(255,255,255,0.08)",barGradient:n.barGradient!==void 0?!!n.barGradient:!0,gradientStartColor:n.gradientStartColor||"",gradientEndOpacity:n.gradientEndOpacity!==void 0?n.gradientEndOpacity:.27,showValueOnTop:!!n.showValueOnTop,valueFontSize:n.valueFontSize||10,valueColor:n.valueColor||"",valueFontWeight:n.valueFontWeight||"bold",barStyle:n.barStyle||"solid",barBorderWidth:n.barBorderWidth!==void 0?n.barBorderWidth:1,barBorderColor:n.barBorderColor||"auto",enableShadows:!!n.enableShadows,shadowColor:n.shadowColor||"rgba(0,0,0,0.5)",shadowBlur:n.shadowBlur!==void 0?n.shadowBlur:4,shadowOffsetY:n.shadowOffsetY!==void 0?n.shadowOffsetY:2,xAxisLineWidth:n.xAxisLineWidth!==void 0?n.xAxisLineWidth:1,yAxisLineWidth:n.yAxisLineWidth!==void 0?n.yAxisLineWidth:1,gridLineWidth:n.gridLineWidth!==void 0?n.gridLineWidth:1,gridLineDash:n.gridLineDash||[3,4],_hexToRgb:function(k,A){if(k.startsWith("rgba")||k.startsWith("rgb"))return k;k.startsWith("#")||(k="#"+k),k.length===4&&(k="#"+k[1]+k[1]+k[2]+k[2]+k[3]+k[3]);const T=parseInt(k.slice(1,3),16),R=parseInt(k.slice(3,5),16),F=parseInt(k.slice(5,7),16);return`rgba(${T},${R},${F},${A})`},_resolveColor:function(k,A){return typeof k=="string"?k:"#6366f1"},_makeGradient:function(k,A,T,R,F,O){if(!this.barGradient)return A;const W=this.gradientStartColor||A,V=k.createLinearGradient(T,R,F,O);return V.addColorStop(0,A),V.addColorStop(1,this._hexToRgb(W,this.gradientEndOpacity)),V},_drawRoundedBar:function(k,A,T,R,F,O,W){if(O=Math.min(O,Math.min(Math.abs(R),Math.abs(F))/2),O<=0||R===0||F===0){k.rect(A,T,R,F);return}k.beginPath(),W?(k.moveTo(A,T+F),k.lineTo(A,T+O),k.quadraticCurveTo(A,T,A+O,T),k.lineTo(A+R-O,T),k.quadraticCurveTo(A+R,T,A+R,T+O),k.lineTo(A+R,T+F),k.lineTo(A,T+F)):(k.moveTo(A,T),k.lineTo(A+R-O,T),k.quadraticCurveTo(A+R,T,A+R,T+O),k.lineTo(A+R,T+F-O),k.quadraticCurveTo(A+R,T+F,A+R-O,T+F),k.lineTo(A,T+F),k.lineTo(A,T)),k.closePath()}},a=i.width,r=i.height,c=-a/2,d=-r/2;if(!i.datasets||i.datasets.length===0||i.categories.length===0){t.save(),t.fillStyle="rgba(99,102,241,0.7)",t.font="bold 11px Inter, sans-serif",t.textAlign="center",t.textBaseline="middle",t.fillText("NO CHART DATA",0,0),t.restore();return}let p=-1/0,u=1/0;const g=i.categories.length,h=i.datasets.length;if(i.chartType==="stacked")for(let k=0;k<g;k++){let A=0,T=0;i.datasets.forEach(R=>{const F=R.data[k]??0;F>=0?A+=F:T+=F}),A>p&&(p=A),T<u&&(u=T)}else i.datasets.forEach(k=>{k.data&&k.data.forEach(A=>{A>p&&(p=A),A<u&&(u=A)})});isFinite(p)||(p=10),isFinite(u)||(u=0),p=Math.max(p,0),u=Math.min(u,0);const f=p-u||10;t.save(),i.enableShadows&&(t.shadowColor=i.shadowColor,t.shadowBlur=i.shadowBlur,t.shadowOffsetY=i.shadowOffsetY),t.font=i.axisLabelFontSize+"px Inter, sans-serif";const v=i.showYLabels?t.measureText(p.toFixed(0)).width+14:10,m=i.showXLabels?i.axisLabelFontSize+12:8,b=(i.showLegend&&h>0?i.legendFontSize+10:0)+8,S=10,w=c+v,C=d+b,M=a-v-S,I=r-b-m;if(i.enableShadows&&(t.shadowColor="transparent"),t.beginPath(),t.roundRect(c,d,a,r,10),t.fillStyle=i._hexToRgb(i.cardBackground,i.cardBackgroundOpacity),t.fill(),t.strokeStyle=i.cardBorderColor,t.lineWidth=1,t.stroke(),i.showLegend&&h>0){t.font=i.legendFontSize+"px Inter, sans-serif",t.textBaseline="middle";const k=d+12;let A=w;i.datasets.forEach((T,R)=>{const F=i._resolveColor(T.color,R),O=T.label||"Series "+(R+1),W=7;t.beginPath(),t.roundRect(A,k-W/2,W,W,2),t.fillStyle=F,t.fill(),t.fillStyle=i.legendColor,t.textAlign="left",t.fillText(O,A+W+4,k),A+=t.measureText(O).width+W+16})}const _=4;if(i.showGridLines){t.setLineDash(i.gridLineDash||[]),t.lineWidth=i.gridLineWidth||1,t.strokeStyle=i.gridColor;for(let k=0;k<=_;k++)if(i.orientation==="horizontal"){const A=w+k/_*M;t.beginPath(),t.moveTo(A,C),t.lineTo(A,C+I),t.stroke()}else{const A=C+k/_*I;t.beginPath(),t.moveTo(w,A),t.lineTo(w+M,A),t.stroke()}t.setLineDash([])}if(i.showYLabels){t.font=i.axisLabelFontSize+"px Inter, sans-serif",t.textAlign="right",t.textBaseline="middle",t.fillStyle=i.axisLabelColor;for(let k=0;k<=_;k++)if(i.orientation==="horizontal"){const A=u+k/_*f,T=w+k/_*M;t.textAlign="center",t.fillText(A.toFixed(0),T,C+I+i.axisLabelFontSize)}else{const A=p-k/_*f,T=C+k/_*I;t.textAlign="right",t.fillText(A.toFixed(0),w-6,T)}}if(t.setLineDash([]),i.showXAxis&&(t.lineWidth=i.xAxisLineWidth||1,t.strokeStyle=i.xAxisColor,t.beginPath(),t.moveTo(w,C+I),t.lineTo(w+M,C+I),t.stroke()),i.showYAxis&&(t.lineWidth=i.yAxisLineWidth||1,t.strokeStyle=i.yAxisColor,t.beginPath(),t.moveTo(w,C),t.lineTo(w,C+I),t.stroke()),i.enableShadows&&(t.shadowColor=i.shadowColor),i.chartType==="stacked")if(i.orientation==="horizontal"){const k=I/g;for(let A=0;A<g;A++){const T=C+A*k+k/2;i.showXLabels&&(t.font=i.axisLabelFontSize+"px Inter, sans-serif",t.textAlign="right",t.textBaseline="middle",t.fillStyle=i.axisLabelColor,t.shadowColor="transparent",t.fillText(i.categories[A]||"",w-5,T),i.enableShadows&&(t.shadowColor=i.shadowColor));let R=w;i.datasets.forEach((F,O)=>{const W=F.data[A]??0;if(W===0)return;const V=W/f*M,U=Math.min(i.barWidth*h+i.barGap,k-8),Y=T-U/2,X=R;R+=V;const ot=i._resolveColor(F.color,O);t.beginPath(),t.fillStyle=i._makeGradient(t,ot,X,Y,X+V,Y),i._drawRoundedBar(t,X,Y,V,U,O===h-1?i.barCornerRadius:0,!1),i.barStyle==="outline"||i.barStyle==="dashed"?(t.fillStyle="transparent",t.strokeStyle=i.barBorderColor==="auto"?ot:i.barBorderColor,t.lineWidth=i.barBorderWidth,i.barStyle==="dashed"&&t.setLineDash([4,4]),t.stroke(),t.setLineDash([])):t.fill()})}}else{const k=M/g;for(let A=0;A<g;A++){const T=w+A*k+k/2;i.showXLabels&&(t.font=i.axisLabelFontSize+"px Inter, sans-serif",t.textAlign="center",t.textBaseline="top",t.fillStyle=i.axisLabelColor,t.shadowColor="transparent",t.fillText(i.categories[A]||"",T,C+I+5),i.enableShadows&&(t.shadowColor=i.shadowColor));let R=C+I;i.datasets.forEach((F,O)=>{const W=F.data[A]??0;if(W===0)return;const V=W/f*I,U=Math.min(i.barWidth*h+i.barGap,k-8),Y=T-U/2,X=R-V;R-=V;const ot=i._resolveColor(F.color,O);t.beginPath(),t.fillStyle=i._makeGradient(t,ot,Y,X,Y,X+V),i._drawRoundedBar(t,Y,X,U,V,O===h-1?i.barCornerRadius:0,!0),i.barStyle==="outline"||i.barStyle==="dashed"?(t.fillStyle="transparent",t.strokeStyle=i.barBorderColor==="auto"?ot:i.barBorderColor,t.lineWidth=i.barBorderWidth,i.barStyle==="dashed"&&t.setLineDash([4,4]),t.stroke(),t.setLineDash([])):t.fill()})}}else if(i.orientation==="horizontal"){const k=I/g,A=h*i.barWidth+Math.max(0,(h-1)*i.barGap),T=w+(0-u)/f*M;for(let R=0;R<g;R++){const F=C+R*k+k/2;i.showXLabels&&(t.font=i.axisLabelFontSize+"px Inter, sans-serif",t.textAlign="right",t.textBaseline="middle",t.fillStyle=i.axisLabelColor,t.shadowColor="transparent",t.fillText(i.categories[R]||"",w-5,F),i.enableShadows&&(t.shadowColor=i.shadowColor));const O=F-A/2;i.datasets.forEach((W,V)=>{const U=W.data[R]??0,Y=Math.abs(U/f*M);if(Y<1)return;const X=O+V*(i.barWidth+i.barGap),ot=U>=0?T:T-Y,J=i._resolveColor(W.color,V);t.beginPath(),t.fillStyle=i._makeGradient(t,J,ot,X,ot+Y,X),i._drawRoundedBar(t,ot,X,Y,i.barWidth,i.barCornerRadius,!1),i.barStyle==="outline"||i.barStyle==="dashed"?(t.fillStyle="transparent",t.strokeStyle=i.barBorderColor==="auto"?J:i.barBorderColor,t.lineWidth=i.barBorderWidth,i.barStyle==="dashed"&&t.setLineDash([4,4]),t.stroke(),t.setLineDash([])):t.fill(),i.showValueOnTop&&U!==0&&(t.font=(i.valueFontWeight||"bold")+" "+(i.valueFontSize||10)+"px Inter, sans-serif",t.textAlign=U>=0?"left":"right",t.textBaseline="middle",t.fillStyle=i.valueColor==="auto"?J:i.valueColor||"#fff",t.shadowColor="transparent",t.fillText(U.toString(),U>=0?ot+Y+4:ot-4,X+i.barWidth/2),i.enableShadows&&(t.shadowColor=i.shadowColor))})}}else{const k=M/g,A=h*i.barWidth+Math.max(0,(h-1)*i.barGap),T=C+I-(0-u)/f*I;for(let R=0;R<g;R++){const F=w+R*k+k/2;i.showXLabels&&(t.font=i.axisLabelFontSize+"px Inter, sans-serif",t.textAlign="center",t.textBaseline="top",t.fillStyle=i.axisLabelColor,t.shadowColor="transparent",t.fillText(i.categories[R]||"",F,C+I+5),i.enableShadows&&(t.shadowColor=i.shadowColor));const O=F-A/2;i.datasets.forEach((W,V)=>{const U=W.data[R]??0,Y=Math.abs(U/f*I);if(Y<1)return;const X=O+V*(i.barWidth+i.barGap),ot=U>=0?T-Y:T,J=i._resolveColor(W.color,V);t.beginPath(),t.fillStyle=i._makeGradient(t,J,X,ot,X,ot+Y),i._drawRoundedBar(t,X,ot,i.barWidth,Y,i.barCornerRadius,!0),i.barStyle==="outline"||i.barStyle==="dashed"?(t.fillStyle="transparent",t.strokeStyle=i.barBorderColor==="auto"?J:i.barBorderColor,t.lineWidth=i.barBorderWidth,i.barStyle==="dashed"&&t.setLineDash([4,4]),t.stroke(),t.setLineDash([])):t.fill(),i.showValueOnTop&&U!==0&&(t.font=(i.valueFontWeight||"bold")+" "+(i.valueFontSize||10)+"px Inter, sans-serif",t.textAlign="center",t.textBaseline=U>=0?"bottom":"top",t.fillStyle=i.valueColor==="auto"?J:i.valueColor||"#fff",t.shadowColor="transparent",t.fillText(U.toString(),X+i.barWidth/2,U>=0?ot-4:ot+Y+4),i.enableShadows&&(t.shadowColor=i.shadowColor))})}}t.restore()}renderPieChart(t,s){var l,b;const o=this.objectStates.get(s.id),e=(o==null?void 0:o.options)||s.options||{},n=e.colorPalette==="custom"&&Array.isArray(e.customPalette)&&e.customPalette.length>0?e.customPalette:us[e.colorPalette||"vibrant"]||us.vibrant;let i=e.slices||[{id:"slice-1",label:"Item 1",value:45,color:""}];if(e.isDataVarEnabled&&e.dataInputId){let S=this.inputs.get(e.dataInputId);if(S===void 0){const w=this.inputNameMap.get(e.dataInputId);w&&w.length>0&&(S=this.inputs.get(w[0]))}S&&Array.isArray(S)&&(i=S.map((w,C)=>{var M,I;return{id:`slice-${C}`,label:((M=i[C])==null?void 0:M.label)||`Item ${C+1}`,value:typeof w=="number"?w:0,color:((I=i[C])==null?void 0:I.color)||""}}))}const a={width:((l=s.geometry)==null?void 0:l.width)||180,height:((b=s.geometry)==null?void 0:b.height)||180,chartType:e.chartType||"donut",slices:i,innerRadius:e.innerRadius!==void 0?e.innerRadius:.55,sliceGap:e.sliceGap!==void 0?e.sliceGap:3,showLabels:!!e.showLabels,labelColor:e.labelColor||"#000000",labelFontSize:e.labelFontSize||10,showLegend:e.showLegend!==void 0?!!e.showLegend:!0,legendColor:e.legendColor||"rgba(0,0,0,0.65)",legendFontSize:e.legendFontSize||9,showCenterText:e.showCenterText!==void 0?!!e.showCenterText:!0,centerLabel:e.centerLabel||"Total",centerTextColor:e.centerTextColor||"#000000",centerLabelColor:e.centerLabelColor||"rgba(0,0,0,0.4)",cardBackground:e.cardBackground||"#ffffff",cardBackgroundOpacity:e.cardBackgroundOpacity!==void 0?e.cardBackgroundOpacity:.04,cardBorderColor:e.cardBorderColor||"rgba(0,0,0,0.08)",_resolveSliceColor:function(S,w){return S.color?S.color:n[w%n.length]},_hexToRgb:function(S){if(S.startsWith("rgba")||S.startsWith("rgb"))return S;const w=S.replace("#",""),C=parseInt(w.substring(0,2),16),M=parseInt(w.substring(2,4),16),I=parseInt(w.substring(4,6),16);return`rgba(${C},${M},${I},${a.cardBackgroundOpacity})`}},r=a.width,c=a.height;if(!a.slices||a.slices.length===0){t.save(),t.fillStyle="rgba(99,102,241,0.8)",t.font="bold 11px Inter, sans-serif",t.textAlign="center",t.textBaseline="middle",t.fillText("NO PIE DATA",0,0),t.restore();return}const d=a.slices.reduce((S,w)=>S+(w.value||0),0);if(d<=0){t.save(),t.fillStyle="rgba(99,102,241,0.8)",t.font="bold 11px Inter, sans-serif",t.textAlign="center",t.textBaseline="middle",t.fillText("EMPTY DATA",0,0),t.restore();return}t.save();const p=a._hexToRgb(a.cardBackground);t.beginPath(),t.roundRect(-r/2,-c/2,r,c,10),t.fillStyle=p,t.fill(),t.strokeStyle=a.cardBorderColor,t.lineWidth=1,t.stroke();const u=a.showLegend?Math.ceil(a.slices.length/2):0,g=u>0?u*(a.legendFontSize+8)+10:0,h=c-g-16,f=Math.min(r-24,h)/2,v=0,m=-g/2;if(a.chartType==="rose"){const S=Math.max(...a.slices.map(M=>M.value||0)),w=Math.PI*2/a.slices.length,C=f>0?a.sliceGap/f:0;a.slices.forEach((M,I)=>{const _=M.value||0;if(_===0)return;const E=_/S*f,P=-Math.PI/2+I*w+C/2,L=P+w-C,k=a._resolveSliceColor(M,I);if(t.beginPath(),t.moveTo(v,m),t.arc(v,m,E,P,L),t.closePath(),t.fillStyle=k+"cc",t.fill(),t.strokeStyle=k,t.lineWidth=1.5,t.stroke(),a.showLabels){const A=P+(L-P)/2,T=v+E*.65*Math.cos(A),R=m+E*.65*Math.sin(A),F=Math.round(_/d*100);t.save(),t.font=`bold ${a.labelFontSize}px Inter, sans-serif`,t.fillStyle=a.labelColor,t.textAlign="center",t.textBaseline="middle",t.fillText(`${F}%`,T,R),t.restore()}})}else{const S=a.chartType==="pie"?0:a.innerRadius,w=f*Math.max(0,S),C=f>0?a.sliceGap/f:0;let M=-Math.PI/2;if(a.slices.forEach((I,_)=>{const E=I.value||0;if(E===0){M+=E/d*Math.PI*2;return}const P=E/d*Math.PI*2,L=M+C/2,k=M+P-C/2;if(k<=L){M+=P;return}const A=a._resolveSliceColor(I,_);if(t.beginPath(),t.fillStyle=A,w<=0?(t.moveTo(v,m),t.arc(v,m,f,L,k),t.lineTo(v,m)):(t.moveTo(v+f*Math.cos(L),m+f*Math.sin(L)),t.arc(v,m,f,L,k),t.arc(v,m,w,k,L,!0),t.closePath()),t.fill(),a.showLabels){const T=L+(k-L)/2,R=w+(f-w)/2,F=v+R*Math.cos(T),O=m+R*Math.sin(T),W=Math.round(E/d*100);t.save(),t.font=`bold ${a.labelFontSize}px Inter, sans-serif`,t.fillStyle=a.labelColor,t.textAlign="center",t.textBaseline="middle",t.fillText(`${W}%`,F,O),t.restore()}M+=P}),a.chartType==="donut"&&a.showCenterText&&w>14){const I=Math.round(d),_=Math.min(Math.floor(w*.52),20),E=Math.min(Math.floor(w*.26),10);t.textAlign="center",t.textBaseline="middle",t.font=`bold ${_}px Inter, sans-serif`,t.fillStyle=a.centerTextColor,t.fillText(I.toString(),v,m-E*.5),t.font=`${E}px Inter, sans-serif`,t.fillStyle=a.centerLabelColor,t.fillText(a.centerLabel,v,m+_*.6)}}if(a.showLegend&&a.slices.length>0){t.font=`${a.legendFontSize}px Inter, sans-serif`;const S=2,w=r/S,C=a.legendFontSize+8,M=c/2-g+10,I=-r/2+10;a.slices.forEach((_,E)=>{const P=E%S,L=Math.floor(E/S),k=I+P*w,A=M+L*C,T=a._resolveSliceColor(_,E),R=7;t.beginPath(),t.roundRect(k,A-R/2,R,R,2),t.fillStyle=T,t.fill(),t.textAlign="left",t.textBaseline="middle",t.fillStyle=a.legendColor;const F=Math.round((_.value||0)/d*100),O=`${_.label||"Item"} ${F}%`,W=w-R-20;let V=O;for(;t.measureText(V).width>W&&V.length>4;)V=V.slice(0,-4)+"…";t.fillText(V,k+R+4,A)})}t.restore()}renderJoystick(t,s){var v,m,l,b,S,w,C,M,I,_,E,P;const o=this.objectStates.get(s.id),e=(o==null?void 0:o.width)!==void 0?o.width:((v=s.geometry)==null?void 0:v.width)??s.width??100,n=(o==null?void 0:o.height)!==void 0?o.height:((m=s.geometry)==null?void 0:m.height)??s.height??100,i=Math.min(e,n)*(((l=s.style)==null?void 0:l.baseSize)??.45),a=Math.min(e,n)*(((b=s.style)==null?void 0:b.handleSize)??.14);let r=s.handleX||0,c=s.handleY||0;o&&o.handleX!==void 0&&(r=o.handleX),o&&o.handleY!==void 0&&(c=o.handleY),t.save();let d=0,p=0;s.handleOrigin==="top-left"?(d=e/2,p=n/2):s.handleOrigin==="bottom-right"&&(d=-e/2,p=-n/2),t.translate(d,p);const u=t.globalAlpha;if(t.globalAlpha=u*(((S=s.style)==null?void 0:S.baseOpacity)??1),t.beginPath(),s.boundsShape==="square"){const L=s.joystickType==="2D"?12:18;t.roundRect(-i,-i,i*2,i*2,L)}else t.arc(0,0,i,0,Math.PI*2);t.fillStyle=((w=s.style)==null?void 0:w.baseColor)||"rgba(0,0,0,0.04)",t.fill(),(C=s.style)!=null&&C.baseBorderWidth?(t.lineWidth=s.style.baseBorderWidth,t.strokeStyle=s.style.baseBorderColor||"rgba(0,0,0,0.1)",t.stroke()):(t.lineWidth=1,t.strokeStyle=((M=s.style)==null?void 0:M.baseBorderColor)||"rgba(0,0,0,0.08)",t.stroke());const g=s.overflowHandle?i:Math.max(.1,i-a);let h=0,f=0;s.joystickType==="2D"?(h=r*g,f=c*g):s.joystickType==="1D_X"?(h=r*g,f=0):s.joystickType==="1D_Y"&&(h=0,f=c*g),t.globalAlpha=u*(((I=s.style)==null?void 0:I.handleOpacity)??1),t.beginPath(),t.arc(h,f,a,0,Math.PI*2),t.fillStyle=((_=s.style)==null?void 0:_.handleColor)||"#3b82f6",t.fill(),(E=s.style)!=null&&E.handleBorderWidth?(t.lineWidth=s.style.handleBorderWidth,t.strokeStyle=s.style.handleBorderColor||"rgba(255,255,255,0.5)",t.stroke()):(t.lineWidth=1,t.strokeStyle=((P=s.style)==null?void 0:P.handleBorderColor)||"rgba(255,255,255,0.5)",t.stroke()),t.globalAlpha=u,t.restore()}getRadioGroupItemIndexAtPointer(t,s,o){var I,_;const e=t.options||{},n=this.objectStates.get(t.id)||{},i=e.optionsList||[];if(i.length===0)return null;const a=n.width!==void 0?n.width:((I=t.geometry)==null?void 0:I.width)||180,r=n.height!==void 0?n.height:((_=t.geometry)==null?void 0:_.height)||100,c=e.orientation||"vertical",d=e.itemGap!==void 0?e.itemGap:16,p=e.fontSize||14,u=this.getWorldTransform(t.id),g=s-u.x,h=o-u.y,f=-u.rotation*(Math.PI/180),v=Math.cos(f),m=Math.sin(f),l=g*v-h*m,b=g*m+h*v,w=8*2,C=-a/2,M=-r/2;if(c==="vertical"){const E=Math.max(w,p)+d;for(let P=0;P<i.length;P++){const L=M+P*E;if(l>=C&&l<=C+a&&b>=L&&b<=L+E)return P}}else{let E=C;for(let P=0;P<i.length;P++){const k=i[P].length*8,A=w+6+k+d;if(l>=E&&l<=E+A&&b>=M&&b<=M+r)return P;E+=A}}return null}renderLineGraph(t,s,o,e){let n=s.datasets||[];if((!n||n.length===0)&&(s.data||s.graphData)&&(n=[{id:"line-1",label:"Series 1",data:s.data||s.graphData||[],lineColor:s.lineColor||"#3b82f6",lineWidth:s.lineWidth||2,showArea:s.showArea||!1,areaColor:s.areaColor||"rgba(139, 92, 246, 0.3)",smoothing:s.smoothing||!1,showPoints:s.showPoints!==void 0?s.showPoints:!0,pointSize:s.pointSize||6,pointFill:s.pointFill||"#ffffff",pointStrokeColor:s.pointStrokeColor||s.lineColor||"#3b82f6",pointStrokeWidth:s.pointStrokeWidth||2}]),!n||n.length===0||!n.some(f=>f.data&&f.data.length>=2)){t.save(),t.fillStyle="#6366f1",t.font="12px Inter, system-ui, sans-serif",t.textAlign="center",t.textBaseline="middle",t.fillText("NO DATA",0,0),t.restore();return}let i=1/0,a=-1/0,r=0;if(n.forEach(f=>{let v=f.data;if(f.isVarEnabled&&f.inputId){let m=this.inputs.get(f.inputId);if(m===void 0){const l=this.inputNameMap.get(f.inputId);l&&l.length>0&&(m=this.inputs.get(l[0]))}m&&Array.isArray(m)&&(v=m)}if(v&&v.length>0){const m=v.filter(l=>typeof l=="number"&&!isNaN(l));m.length>0&&(i=Math.min(i,...m),a=Math.max(a,...m),r=Math.max(r,v.length))}f._resolvedData=v}),r<2)return;const c=a-i,d=o/(r-1),p=f=>{const v=c===0?.5:(f-i)/c;return e/2-v*e},u=f=>f*d-o/2,g=s.axisColor||"#333333";if(s.showXAxis&&(t.beginPath(),t.strokeStyle=s.xAxisColor||g,t.lineWidth=1,t.moveTo(-o/2,e/2),t.lineTo(o/2,e/2),t.stroke()),s.showYAxis&&(t.beginPath(),t.strokeStyle=s.yAxisColor||g,t.lineWidth=1,t.moveTo(-o/2,-e/2),t.lineTo(-o/2,e/2),t.stroke()),t.fillStyle=s.axisLabelColor||"#333333",t.font=`${s.axisLabelFontSize||10}px Inter, sans-serif`,s.showXLabels){t.textAlign="center",t.textBaseline="top";for(let f=0;f<r;f++){const v=u(f);t.fillText(`${f+1}`,v,e/2+5)}}if(s.showYLabels){t.textAlign="right",t.textBaseline="middle";const f=-o/2-5,v=(a+i)/2;t.fillText(a.toFixed(1),f,p(a)),t.fillText(v.toFixed(1),f,p(v)),t.fillText(i.toFixed(1),f,p(i))}const h=10;if(n.forEach(f=>{const v=f._resolvedData;if(!(!v||v.length<2)){if(f.showArea){if(t.beginPath(),t.moveTo(u(0),e/2),t.lineTo(u(0),p(v[0])),f.smoothing&&v.length>2)for(let l=0;l<v.length-1;l++){const b=v[l===0?l:l-1],S=v[l],w=v[l+1],C=v[l+1===v.length-1?l+1:l+2];for(let M=1;M<=h;M++){const I=M/h,_=this._catmullRom(b,S,w,C,I);t.lineTo(u(l+I),p(_))}}else for(let l=1;l<v.length;l++)t.lineTo(u(l),p(v[l]));t.lineTo(u(v.length-1),e/2),t.closePath();const m=t.globalAlpha;t.globalAlpha=m*(s.areaOpacity??.3),t.fillStyle=f.areaColor||"rgba(139, 92, 246, 0.2)",t.fill(),t.globalAlpha=m}if(t.beginPath(),t.strokeStyle=f.lineColor||"#3b82f6",t.lineWidth=f.lineWidth||2,t.lineJoin="round",t.lineCap="round",t.moveTo(u(0),p(v[0])),f.smoothing&&v.length>2)for(let m=0;m<v.length-1;m++){const l=v[m===0?m:m-1],b=v[m],S=v[m+1],w=v[m+1===v.length-1?m+1:m+2];for(let C=1;C<=h;C++){const M=C/h,I=this._catmullRom(l,b,S,w,M);t.lineTo(u(m+M),p(I))}}else for(let m=1;m<v.length;m++)t.lineTo(u(m),p(v[m]));t.stroke(),f.showPoints&&v.forEach((m,l)=>{const b=u(l),S=p(m);t.beginPath(),t.arc(b,S,(f.pointSize||6)/2,0,Math.PI*2),t.fillStyle=f.pointFill||"#ffffff",t.fill(),t.strokeStyle=f.pointStrokeColor||f.lineColor||"#3b82f6",t.lineWidth=f.pointStrokeWidth||1,t.stroke()})}}),s.showLegend&&n.length>0){const f=o/2-10;let v=-e/2+15;const m=s.legendFontSize||10,l=m+5;t.font=`${m}px Inter, sans-serif`,t.textAlign="right",t.textBaseline="alphabetic",n.forEach(b=>{const w=b.label||"Series",C=t.measureText(w).width;t.beginPath(),t.rect(f-C-8-5,v-(8/2+2),8,8),t.fillStyle=b.lineColor||"#3b82f6",t.fill(),t.fillStyle=s.legendColor||"#333333",t.fillText(w,f,v),v+=l})}}_catmullRom(t,s,o,e,n){const i=(o-t)*.5,a=(e-s)*.5,r=n*n,c=n*r;return(2*s-2*o+i+a)*c+(-3*s+3*o-2*i-a)*r+i*n+s}normalizeOpacity(t){const s=typeof t=="number"?t:parseFloat(String(t));return isNaN(s)?1:s>1?Math.min(1,s/100):Math.max(0,Math.min(1,s))}createCanvasFill(t,s,o,e){var n,i,a;if(!s||s.type==="None")return null;if(typeof s=="string")return s;if(s.type==="Solid"&&s.color){const r=s.color,d=(((i=(n=this.artboard)==null?void 0:n.tokens)==null?void 0:i.colors)||{})[r]||r;return t.fillStyle=d,d}if((s.type==="LinearGradient"||s.type==="RadialGradient"||s.type==="AngularGradient"||s.type==="DiamondGradient")&&s.stops){const r=(c,d=100)=>{var S,w;const u=(((w=(S=this.artboard)==null?void 0:S.tokens)==null?void 0:w.colors)||{})[c]||c,g=this.normalizeOpacity(s.opacity??100),f=this.normalizeOpacity(d)*g;if(f>=1&&u.startsWith("#"))return u;const v=u.startsWith("#")?u.replace("#",""):"ffffff",m=parseInt(v.substring(0,2),16),l=parseInt(v.substring(2,4),16),b=parseInt(v.substring(4,6),16);return`rgba(${m}, ${l}, ${b}, ${f})`};if(s.type==="LinearGradient"){let c=0,d=-e/2,p=0,u=e/2;if(s.angle!==void 0&&(!s.start||!s.end)){const h=(s.angle-90)*Math.PI/180,f=Math.max(o,e)/2;c=Math.cos(h)*-f,d=Math.sin(h)*-f,p=Math.cos(h)*f,u=Math.sin(h)*f}else if(s.start||s.end){const h=(f,v,m)=>Array.isArray(f)?f[v]??.5:f&&typeof f=="object"?f[m]??.5:.5;c=h(s.start,0,"x")*o-o/2,d=h(s.start,1,"y")*e-e/2,p=h(s.end,0,"x")*o-o/2,u=h(s.end,1,"y")*e-e/2}Math.abs(c-p)<.001&&Math.abs(d-u)<.001&&(c=0,d=-e/2,p=0,u=e/2);const g=t.createLinearGradient(c,d,p,u);if(s.stops.forEach(h=>{const f=h.offset!==void 0?h.offset:h.pos!==void 0?h.pos:h.position!==void 0?h.position:0,v=r(h.color||"#000000",h.opacity??100);g.addColorStop(Math.max(0,Math.min(1,f)),v)}),s.gradientTransform&&g.setTransform){const[h,f,v,m,l,b]=s.gradientTransform;g.setTransform({a:h,b:f,c:v,d:m,e:l,f:b})}return g}else if(s.type==="RadialGradient"){const c=(h,f,v)=>Array.isArray(h)?h[f]??.5:h&&typeof h=="object"?h[v]??.5:.5,d=c(s.center,0,"x")*o-o/2,p=c(s.center,1,"y")*e-e/2,u=(s.radius??.5)*Math.max(o,e),g=t.createRadialGradient(d,p,0,d,p,u);if(s.stops.forEach(h=>{const f=h.offset!==void 0?h.offset:h.pos!==void 0?h.pos:h.position!==void 0?h.position:0,v=r(h.color||"#000000",h.opacity??100);g.addColorStop(Math.max(0,Math.min(1,f)),v)}),s.gradientTransform&&g.setTransform){const[h,f,v,m,l,b]=s.gradientTransform;g.setTransform({a:h,b:f,c:v,d:m,e:l,f:b})}return g}else if(s.type==="AngularGradient"){const c=(h,f,v)=>Array.isArray(h)?h[f]??.5:h&&typeof h=="object"?h[v]??.5:.5,d=c(s.center||[.5,.5],0,"x")*o-o/2,p=c(s.center||[.5,.5],1,"y")*e-e/2,u=(s.degree||s.angle||0)*(Math.PI/180),g=(a=t.createConicGradient)==null?void 0:a.call(t,u,d,p);if(g){if(s.stops.forEach(h=>{const f=h.offset!==void 0?h.offset:h.pos!==void 0?h.pos:h.position!==void 0?h.position:0,v=r(h.color||"#000000",h.opacity??100);g.addColorStop(Math.max(0,Math.min(1,f)),v)}),s.gradientTransform&&g.setTransform){const[h,f,v,m,l,b]=s.gradientTransform;g.setTransform({a:h,b:f,c:v,d:m,e:l,f:b})}return g}}else if(s.type==="DiamondGradient"){const c=(h,f,v)=>Array.isArray(h)?h[f]??.5:h&&typeof h=="object"?h[v]??.5:.5,d=c(s.center||[.5,.5],0,"x")*o-o/2,p=c(s.center||[.5,.5],1,"y")*e-e/2,u=(s.radius??.5)*Math.max(o,e);t.save(),t.translate(d,p),t.rotate(Math.PI/4);const g=t.createRadialGradient(0,0,0,0,0,u);if(s.stops.forEach(h=>{const f=h.offset!==void 0?h.offset:h.pos!==void 0?h.pos:h.position!==void 0?h.position:0,v=r(h.color||"#000000",h.opacity??100);g.addColorStop(Math.max(0,Math.min(1,f)),v)}),s.gradientTransform&&g.setTransform){const[h,f,v,m,l,b]=s.gradientTransform;g.setTransform({a:h,b:f,c:v,d:m,e:l,f:b})}return t.scale(1/Math.SQRT2,1/Math.SQRT2),t.fillStyle=g,t.restore(),g}}if(s.type==="Pattern"&&s.url){let r=this.imageCache.get(s.url);if(r||(r=new Image,r.src=s.url,this.imageCache.set(s.url,r)),r.complete&&r.naturalWidth>0){const c=t.createPattern(r,"repeat");if(c&&(s.scaleX!==void 0||s.offsetX!==void 0)){const d=new DOMMatrix,p=s.scaleX??1,u=s.scaleY??1,g=s.offsetX??0,h=s.offsetY??0,f=s.rotation??0;d.translateSelf(g,h),d.rotateSelf(f),d.scaleSelf(p,u),c.setTransform(d)}return c}}return s.color||null}drawRoundRect(t,s,o,e,n,i){if(i===0||i===void 0||i===null){t.rect(s,o,e,n);return}let a=i;if(typeof a=="string")try{a=JSON.parse(a)}catch{a=parseFloat(a)||0}let r=0,c=0,d=0,p=0;typeof a=="number"?r=c=d=p=a:Array.isArray(a)?a.length===1?r=c=d=p=a[0]:a.length===2?(r=d=a[0],c=p=a[1]):a.length===3?(r=a[0],c=p=a[1],d=a[2]):a.length>=4&&(r=a[0],c=a[1],d=a[2],p=a[3]):a&&typeof a=="object"&&(r=a[0]??a.tl??a.corner_radius??a.cornerRadius??0,c=a[1]??a.tr??a.corner_radius??a.cornerRadius??0,d=a[2]??a.br??a.corner_radius??a.cornerRadius??0,p=a[3]??a.bl??a.corner_radius??a.cornerRadius??0);const u=Math.min(Math.abs(e)/2,Math.abs(n)/2);if(r=Math.min(Math.max(0,r),u),c=Math.min(Math.max(0,c),u),d=Math.min(Math.max(0,d),u),p=Math.min(Math.max(0,p),u),t.roundRect){t.roundRect(s,o,e,n,[r,c,d,p]);return}t.moveTo(s+r,o),t.lineTo(s+e-c,o),t.arcTo(s+e,o,s+e,o+c,c),t.lineTo(s+e,o+n-d),t.arcTo(s+e,o+n,s+e-d,o+n,d),t.lineTo(s+p,o+n),t.arcTo(s,o+n,s,o+n-p,p),t.lineTo(s,o+r),t.arcTo(s,o,s+r,o,r),t.closePath()}renderListView(t,s){var T,R,F,O,W,V,U,Y,X,ot;const o=this.objectStates.get(s.id)||{},e=o.options||s.options||{},n=o.width!==void 0?o.width:((T=s.geometry)==null?void 0:T.width)||200,i=o.height!==void 0?o.height:((R=s.geometry)==null?void 0:R.height)||300,a=-n/2,r=-i/2,c=e.cornerRadius!==void 0?e.cornerRadius:o.cornerRadius!==void 0?o.cornerRadius:o.corner_radius??e.corner_radius??((F=s.geometry)==null?void 0:F.cornerRadius)??((O=s.geometry)==null?void 0:O.corner_radius)??0,d=e.orientation||"vertical",p=this.getResolvedListViewItems(s,e),u=e.itemGap??10,g=e.itemHeight??50,h=e.itemWidth??200,f=e.scrollOffset??0,v=e.padding??0,m=e.glassEffect!==!1,l=e.accentColor||"#3b82f6",b=e.itemTextColor||"#333333",S=e.itemBackgroundColor||"#ffffff",w=e.hoveredIndex??null,C=e.activeItemIndex??null,M=e.glowIntensity??0,I=e.glowColor||"#3b82f6",_=typeof I=="string"?I:I.color||((V=(W=I.stops)==null?void 0:W[0])==null?void 0:V.color)||"#3b82f6",E=e.opacity!==void 0?e.opacity:s.opacity!==void 0?s.opacity:1;if(t.save(),t.globalAlpha*=E,M>0){const J=t.getTransform(),at=Math.sqrt(J.a*J.a+J.b*J.b)||1;t.shadowColor=_,t.shadowBlur=M*2*at,t.shadowOffsetX=0,t.shadowOffsetY=0}if(m){const J=e.listBackgroundColor||"rgba(31, 41, 55, 0.4)",at=this.createCanvasFill(t,J,n,i);t.fillStyle=at||"rgba(31, 41, 55, 0.4)",t.beginPath(),this.drawCustomShape(t,e.containerShape||"rectangle",e.containerPath||"",a,r,n,i,c)||t.fill();const it=t.createLinearGradient(a,r,a+n,r+i);it.addColorStop(0,"rgba(255, 255, 255, 0.15)"),it.addColorStop(.5,"rgba(255, 255, 255, 0.08)"),it.addColorStop(1,"rgba(255, 255, 255, 0.03)"),t.fillStyle=it,t.beginPath(),this.drawCustomShape(t,e.containerShape||"rectangle",e.containerPath||"",a,r,n,i,c)||t.fill();const D=e.borderWidth??0;if(D>0&&e.borderColor&&e.borderColor!=="transparent"){const ct=this.createCanvasFill(t,e.borderColor,n,i);t.strokeStyle=ct||"rgba(255, 255, 255, 0.25)",t.lineWidth=D}else t.strokeStyle="rgba(255, 255, 255, 0.25)",t.lineWidth=1;t.beginPath(),this.drawCustomShape(t,e.containerShape||"rectangle",e.containerPath||"",a,r,n,i,c)||t.stroke()}else{const J=e.backgroundColor&&e.backgroundColor!=="transparent"?e.backgroundColor:e.listBackgroundColor||"transparent",at=this.createCanvasFill(t,J,n,i);if(at){t.fillStyle=at,t.beginPath();const it=this.drawCustomShape(t,e.containerShape||"rectangle",e.containerPath||"",a,r,n,i,c);t.fill()}const j=e.borderWidth??0;if(j>0){const it=this.createCanvasFill(t,e.borderColor||"#cccccc",n,i);t.strokeStyle=it||"#cccccc",t.lineWidth=j,t.beginPath();const x=this.drawCustomShape(t,e.containerShape||"rectangle",e.containerPath||"",a,r,n,i,c);t.stroke()}}t.shadowBlur=0;const P=e.clipContent!==!1&&e.listLayout!=="circular";if(P)if(t.save(),t.beginPath(),this.drawCustomShape(t,e.containerShape||"rectangle",e.containerPath||"",a,r,n,i,c)&&e.containerShape==="custom")try{const at=new Path2D(e.containerPath);t.translate(a,r),t.scale(n/100,i/100),t.clip(at),t.scale(100/n,100/i),t.translate(-a,-r)}catch{}else t.clip();const L=typeof v=="number"?v:d==="vertical"?v[0]:v[3];let k=(d==="vertical"?r:a)+f+L;if(t.textBaseline="middle",p.forEach((J,at)=>{var ft,xt,At,Pt;const j=e.listLayout||"linear",it=j==="circular"?h:d==="vertical"?n:h,x=j==="circular"||d==="vertical"?g:i;let D=0,N=0,ct=0;if(j==="circular"){const vt=p.length||1,Xt=Math.PI*2/vt,zt=e.circularStartAngle||0,Gt=e.circularRadius||100,Yt=f*.01+zt*Math.PI/180,te=at*Xt+Yt,ie=a+n/2,ce=r+i/2;D=ie+Math.cos(te)*Gt-it/2,N=ce+Math.sin(te)*Gt-x/2,ct=te+(e.itemRotation||0)*Math.PI/180}else D=d==="vertical"?a:k,N=d==="vertical"?k:r,ct=(e.itemRotation||0)*Math.PI/180;const Mt=w===at,bt=C===at,wt=e.itemBorderWidth??0;t.save(),ct!==0&&(t.translate(D+it/2,N+x/2),t.rotate(ct),t.translate(-(D+it/2),-(N+x/2)));const gt=Mt?((ft=e.hoverStyle)==null?void 0:ft.scale)??1:bt?((xt=e.activeStyle)==null?void 0:xt.scale)??1:1;if(gt!==1&&(t.translate(D+it/2,N+x/2),t.scale(gt,gt),t.translate(-(D+it/2),-(N+x/2))),bt){const vt=((At=e.activeStyle)==null?void 0:At.itemBackgroundColor)||e.activeBackgroundColor||(m?"rgba(255, 255, 255, 0.15)":"rgba(0, 0, 0, 0.1)"),Xt=this.createCanvasFill(t,vt,it,x);t.fillStyle=Xt||(typeof vt=="string"?vt:"transparent"),t.beginPath(),this.drawCustomShape(t,e.activeItemShape||e.itemShape||"rectangle",e.activeItemShape==="custom"?e.activeItemPath||"":e.itemPath||"",D,N,it,x,e.itemCornerRadius??0)||t.fill()}else if(Mt){const vt=((Pt=e.hoverStyle)==null?void 0:Pt.itemBackgroundColor)||e.hoverBackgroundColor||(m?"rgba(255, 255, 255, 0.1)":"rgba(0, 0, 0, 0.05)"),Xt=this.createCanvasFill(t,vt,it,x);t.fillStyle=Xt||(typeof vt=="string"?vt:"transparent"),t.beginPath(),this.drawCustomShape(t,e.itemShape||"rectangle",e.itemPath||"",D,N,it,x,e.itemCornerRadius??0)||t.fill()}else if(S!=="transparent"){const vt=this.createCanvasFill(t,S,it,x);t.fillStyle=vt||(typeof S=="string"?S:"transparent"),t.beginPath(),this.drawCustomShape(t,e.itemShape||"rectangle",e.itemPath||"",D,N,it,x,e.itemCornerRadius??0)||t.fill()}if(wt>0&&e.itemBorderColor&&e.itemBorderColor!=="transparent"){const vt=this.createCanvasFill(t,e.itemBorderColor,it,x);t.strokeStyle=vt||(typeof e.itemBorderColor=="string"?e.itemBorderColor:"#cccccc"),t.lineWidth=wt,t.beginPath(),this.drawCustomShape(t,e.itemShape||"rectangle",e.itemPath||"",D,N,it,x,e.itemCornerRadius??0)||t.stroke()}if(bt){const vt=this.createCanvasFill(t,l,d==="vertical"?3:it,d==="vertical"?x:3);t.fillStyle=vt||l,d==="vertical"?t.fillRect(D,N,3,x):t.fillRect(D,N+x-3,it,3)}const It=bt?"#ffffff":m?"rgba(255, 255, 255, 0.9)":b;t.fillStyle=It,t.font=bt||Mt?"600 14px Inter, sans-serif":"400 14px Inter, sans-serif";const ut=typeof J=="string"?J:(J==null?void 0:J.label)||`Item ${at+1}`,Ot=D+(d==="vertical"?16:it/2),Wt=N+x/2;d==="horizontal"||j==="circular"?t.textAlign="center":t.textAlign="left";const q=j==="circular"?D+it/2:Ot;t.fillText(ut,q,Wt),t.restore(),t.beginPath(),k+=(d==="vertical"?g:h)+u}),P&&t.restore(),e.showScrollbar!==!1){const J=typeof v=="number"?v:d==="vertical"?v[0]:v[3],j=(p.length||0)*(d==="vertical"?g:h)+Math.max(0,(p.length||0)-1)*u+J*2,it=d==="vertical"?i:n,x=e.listLayout||"linear",D=e.containerShape==="circle"||x==="circular",N=e.scrollbarColor||"rgba(255,255,255,0.3)";let ct=typeof N=="object"?N.color||((Y=(U=N.stops)==null?void 0:U[0])==null?void 0:Y.color)||"rgba(255,255,255,0.3)":N;const Mt=((ot=(X=this.artboard)==null?void 0:X.tokens)==null?void 0:ot.colors)||{};Mt[ct]&&(ct=Mt[ct]);const bt=e.scrollbarWidth||2;if(t.save(),D){const wt=Math.min(n,i)/2-bt/2-2,gt=a+n/2,It=r+i/2;if(t.strokeStyle=ct,t.lineWidth=bt,t.lineCap="round",t.beginPath(),x==="circular"){const ut=Math.PI/4,Ot=-(f*.01)-Math.PI/2;t.arc(gt,It,wt,Ot,Ot+ut)}else{const ut=Math.PI/2,Ot=j>0?Math.min(1,it/j):1,Wt=ut*Ot,q=j>0?-f/j*ut:0,xt=-Math.PI/4+q;t.arc(gt,It,wt,xt,xt+Wt)}t.stroke()}else{let wt=it,gt=0;if(j>it){const It=it/j;wt=Math.max(16,it*It);const ut=it-wt,Ot=j-it;gt=Ot>0?Math.max(0,Math.min(ut,-f/Ot*ut)):0}if(t.fillStyle=ct,d==="vertical"){const It=a+n-bt-2,ut=r+gt,Ot=bt,Wt=wt;if(bt>2){t.beginPath();const q=Math.min(bt/2,wt/2);if(t.roundRect)try{t.roundRect(It,ut,Ot,Wt,q),t.fill()}catch{t.fillRect(It,ut,Ot,Wt)}else t.fillRect(It,ut,Ot,Wt)}else t.fillRect(It,ut,Ot,Wt)}else{const It=a+gt,ut=r+i-bt-2,Ot=wt,Wt=bt;if(bt>2){t.beginPath();const q=Math.min(bt/2,wt/2);if(t.roundRect)try{t.roundRect(It,ut,Ot,Wt,q),t.fill()}catch{t.fillRect(It,ut,Ot,Wt)}else t.fillRect(It,ut,Ot,Wt)}else t.fillRect(It,ut,Ot,Wt)}}t.restore()}t.beginPath(),t.restore()}drawCustomShape(t,s,o,e,n,i,a,r){if(s==="circle"){const c=Math.min(i,a)/2;return t.arc(e+i/2,n+a/2,c,0,Math.PI*2),!1}else if(s==="pill"){const c=Math.min(i,a)/2;return this.drawListViewRect(t,e,n,i,a,c),!1}else if(s==="custom"&&o)try{const c=new Path2D(o);return t.save(),t.translate(e,n),t.scale(i/100,a/100),t.fill(c),t.restore(),!0}catch{return this.drawListViewRect(t,e,n,i,a,r),!1}return this.drawListViewRect(t,e,n,i,a,r),!1}updateListViewScrollFromPointer(t){var S,w,C,M;if(!this._lastPointerPos||!this._prevPointerPos)return;const s=this.objectStates.get(t.id);s&&!s.options&&(s.options=JSON.parse(JSON.stringify(t.options||{})));const o=(s==null?void 0:s.options)||t.options||{},e=o.orientation||"vertical",n=this._lastPointerPos.x-this._prevPointerPos.x,i=this._lastPointerPos.y-this._prevPointerPos.y;let a=o.scrollOffset||0;const r=this.getResolvedListViewItems(t,o),c=o.itemGap??10,d=o.itemHeight??50,p=o.itemWidth??200,u=(s==null?void 0:s.width)!==void 0?s.width:((S=t.geometry)==null?void 0:S.width)||200,g=(s==null?void 0:s.height)!==void 0?s.height:((w=t.geometry)==null?void 0:w.height)||300,h=typeof o.padding=="number"?o.padding:e==="vertical"?((C=o.padding)==null?void 0:C[0])||0:((M=o.padding)==null?void 0:M[3])||0,v=(r.length||0)*(e==="vertical"?d:p)+Math.max(0,(r.length||0)-1)*c+h*2,m=e==="vertical"?g:u,l=Math.max(0,v-m);if(this.draggingListViewIsScrollbar&&o.listLayout!=="circular"){const I=v>0?m/v:1,_=Math.max(16,m*I),E=Math.max(1,m-_),P=l>0?l/E:1;e==="vertical"?a-=i*P:a-=n*P}else e==="vertical"?a+=i:a+=n;if((o.listLayout||"linear")==="circular"){o.scrollOffset=a,s&&s.options&&(s.options.scrollOffset=a),t.options&&(t.options.scrollOffset=a);return}a>0&&(a=0),a<-l&&(a=-l),o.scrollOffset=a,s&&s.options&&(s.options.scrollOffset=a),t.options&&(t.options.scrollOffset=a)}updateListViewHoverFromPointer(t,s,o){const e=this.getListViewItemIndexAtPointer(t,s,o),n=this.objectStates.get(t.id);if(n&&n.options)n.options.hoveredIndex!==e&&(n.options.hoveredIndex=e);else{const i=t.options||{};i.hoveredIndex!==e&&(i.hoveredIndex=e)}}getListViewItemIndexAtPointer(t,s,o){var F,O;const e=this.objectStates.get(t.id),n=(e==null?void 0:e.options)||t.options||{},i=this.getResolvedListViewItems(t,n);if(i.length===0)return null;const a=(e==null?void 0:e.width)!==void 0?e.width:((F=t.geometry)==null?void 0:F.width)||200,r=(e==null?void 0:e.height)!==void 0?e.height:((O=t.geometry)==null?void 0:O.height)||300,c=n.orientation||"vertical",d=n.itemGap??10,p=n.itemHeight??50,u=n.itemWidth??200,g=n.scrollOffset??0,h=n.padding??0,f=this.getWorldTransform(t.id),v=s-f.x,m=o-f.y,l=-f.rotation*(Math.PI/180),b=Math.cos(l),S=Math.sin(l),w=v*b-m*S,C=v*S+m*b,M=-a/2,I=-r/2,_=typeof h=="number"?h:c==="vertical"?h[0]:h[3];let E=(c==="vertical"?I:M)+g+_;const P=n.listLayout||"linear",L=i.length||1,k=Math.PI*2/L,A=n.circularStartAngle||0,T=n.circularRadius||100,R=g*.01+A*Math.PI/180;for(let W=0;W<i.length;W++){const V=P==="circular"?u:c==="vertical"?a:u,U=P==="circular"||c==="vertical"?p:r;let Y=0,X=0,ot=0;if(P==="circular"){const J=W*k+R,at=M+a/2,j=I+r/2;Y=at+Math.cos(J)*T-V/2,X=j+Math.sin(J)*T-U/2,ot=J+(n.itemRotation||0)*Math.PI/180}else Y=c==="vertical"?M:E,X=c==="vertical"?E:I,ot=(n.itemRotation||0)*Math.PI/180;if(ot!==0){const J=Y+V/2,at=X+U/2,j=w-J,it=C-at,x=-ot,D=j*Math.cos(x)-it*Math.sin(x)+J,N=j*Math.sin(x)+it*Math.cos(x)+at;if(D>=Y&&D<=Y+V&&N>=X&&N<=X+U)return W}else if(w>=Y&&w<=Y+V&&C>=X&&C<=X+U)return W;E+=(c==="vertical"?p:u)+d}return null}drawListViewRect(t,s,o,e,n,i){this.drawRoundRect(t,s,o,e,n,i)}solveBehaviors(t){if(!this.artboard)return;if(!this._lastPointerPos){this.frameCount%60;return}const{x:s,y:o}=this._lastPointerPos;this.artboard.objects.forEach(e=>{if(!e.behaviors||e.behaviors.length===0)return;const n=this.objectStates.get(e.id);n&&e.behaviors.forEach(i=>{var u,g,h,f,v,m,l,b,S,w,C,M,I,_,E,P,L,k,A,T,R,F,O,W,V,U,Y,X,ot,J,at,j,it,x,D,N,ct,Mt,bt,wt,gt,It,ut,Ot,Wt,q,ft,xt,At,Pt,vt,Xt,zt,Gt,Yt,te,ie,ce,ve,_e,ge,Ee,Zt,Me,Re,Ie,de,me,Ae,he,mt,rt,z,K,G,B,Q,H,lt,kt,Et,Ht,Ut,qt,$,dt,Lt,Nt,st,yt,St,ee,Ct,Vt,Tt,Dt,Rt,le,fe,Oe,jt,oe,ne,Fe,xe,Be,We,Ye,Xe,Ge,se,ue,Se,De,Ne,ke,Ce,we;if(!i.enabled)return;const a=i.startTime||0,r=i.endTime||1/0;if(this.currentTime<a||this.currentTime>r)return;const c=n.x-s,d=n.y-o,p=Math.sqrt(c*c+d*d);if(this.frameCount%240===0&&Math.random()<.1&&this.log(`[ExodeUI] Executing ${i.type} on ${e.name}`),i.type===tt.Proximity){const Z=((u=i.settings)==null?void 0:u.radius)||300,nt=((g=i.settings)==null?void 0:g.falloff)||"smooth";let et=0;p<Z&&(nt==="linear"?et=1-p/Z:et=Math.pow(1-p/Z,2)),i.sensors.forEach(pt=>{this.applyBehaviorSensor(n,pt,et,t,i.settings,e,c,d,p)})}else if(i.type===tt.Magnetic){const Z=((h=i.settings)==null?void 0:h.radius)||400,nt=((f=i.settings)==null?void 0:f.strength)||.5;if(p<Z&&p>5){const et=1-p/Z,pt=c*et*nt,Ft=d*et*nt;n.x-=pt*t*10,n.y-=Ft*t*10}}else if(i.type===tt.Repel){const Z=((v=i.settings)==null?void 0:v.radius)||300,nt=((m=i.settings)==null?void 0:m.strength)||1;if(p<Z){const et=Math.pow(1-p/Z,2);n.x+=c/(p||1)*et*60*nt*t*5,n.y+=d/(p||1)*et*60*nt*t*5}}else if(i.type===tt.Orbit){const Z=((l=i.settings)==null?void 0:l.speed)||1,nt=((b=i.settings)==null?void 0:b.radius)||30,et=this.currentTime*Z*Math.PI*2;n.x+=Math.cos(et)*nt*t*5,n.y+=Math.sin(et)*nt*t*5,n.rotation+=2*t*5}else if(i.type===tt.Vortex){const Z=((S=i.settings)==null?void 0:S.radius)||400,nt=((w=i.settings)==null?void 0:w.speed)||2,et=((C=i.settings)==null?void 0:C.strength)||1;if(p<Z){const pt=Math.pow(1-p/Z,1.5),Ft=this.currentTime*nt*Math.PI*2,Bt=Math.cos(Ft)*30-c*.4,Jt=Math.sin(Ft)*30-d*.4;n.x+=Bt*pt*et*t*5,n.y+=Jt*pt*et*t*5,n.rotation+=5*pt*et*t*5,n.scale_x*=1-pt*.1*et*t,n.scale_y*=1-pt*.1*et*t}}else if(i.type===tt.Fluid){const Z=((M=i.settings)==null?void 0:M.radius)||300,nt=((I=i.settings)==null?void 0:I.strength)||1;if(p<Z){const et=Math.pow(1-p/Z,1.2),pt=c/(p||1)*et*1.2*nt,Ft=d/(p||1)*et*1.2*nt;n.x+=pt*10*t*5,n.y+=Ft*10*t*5,n.scale_x*=1+et*.3*nt*t,n.scale_y*=1+et*.3*nt*t}}else if(i.type===tt.Elastic){const Z=((_=i.settings)==null?void 0:_.radius)||300,nt=((E=i.settings)==null?void 0:E.strength)||1;if(p<Z){const et=1-p/Z;n.scale_x*=1+et*.4*nt*t,n.scale_y*=1+et*.4*nt*t}}else if(i.type===tt.Holographic){const Z=n.x-this.canvasWidth/2,nt=n.y-this.canvasHeight/2,et=((P=i.settings)==null?void 0:P.factor)||25;if(n.x-=Z/1e3*et*t*5,n.y-=nt/1e3*et*t*5,n.style){const pt=1-Math.min(1,p/400);n.style.exposure=(n.style.exposure||1)+pt*.5*t}}else if(i.type===tt.Sticky){const Z=((L=i.settings)==null?void 0:L.radius)||80,nt=((k=i.settings)==null?void 0:k.strength)||1;if(p<Z){const et=Math.pow(1-p/Z,2);n.x-=c*et*nt*t*10,n.y-=d*et*nt*t*10,n.scale_x*=1-et*.1*nt*t,n.scale_y*=1-et*.1*nt*t}}else if(i.type===tt.Dilation){const Z=((A=i.settings)==null?void 0:A.size)||120,nt=((T=i.settings)==null?void 0:T.strength)||1;if(p<Z){const et=1-p/Z;n.scale_x*=1+et*.5*nt*t,n.scale_y*=1+et*.5*nt*t}}else if(i.type===tt.Parallax){const Z=((R=i.settings)==null?void 0:R.factor)||15,nt=((F=i.settings)==null?void 0:F.strength)||1,et=this.canvasWidth/2,pt=this.canvasHeight/2,Ft=this._lastPointerPos||{x:et,y:pt},Bt=(Ft.x-et)/et,Jt=(Ft.y-pt)/pt,pe=(((O=e.transform)==null?void 0:O.x)??0)+Bt*Z*nt,Te=(((W=e.transform)==null?void 0:W.y)??0)+Jt*Z*nt,$e=(((V=e.transform)==null?void 0:V.rotate_x)??0)-Jt*Z*1.5*nt,ye=(((U=e.transform)==null?void 0:U.rotate_y)??0)+Bt*Z*1.5*nt,Le=Math.min(1,10*t);n.x=this.lerp(n.x??((Y=e.transform)==null?void 0:Y.x)??0,pe,Le),n.y=this.lerp(n.y??((X=e.transform)==null?void 0:X.y)??0,Te,Le),n.rotate_x=this.lerp(n.rotate_x??((ot=e.transform)==null?void 0:ot.rotate_x)??0,$e,Le),n.rotate_y=this.lerp(n.rotate_y??((J=e.transform)==null?void 0:J.rotate_y)??0,ye,Le)}else if(i.type===tt.Fold){if(p<300){const Z=1-p/300,nt=(c>0?-1:1)*Z*10,et=1-Z*.1,pt=d/300*Z*20,Ft=-(c/300)*Z*20,Bt=Math.min(1,10*t);n.skew_x=this.lerp(n.skew_x??((at=e.transform)==null?void 0:at.skew_x)??0,nt,Bt),n.scale_y=this.lerp(n.scale_y??((j=e.transform)==null?void 0:j.scale_y)??1,(((it=e.transform)==null?void 0:it.scale_y)??1)*et,Bt),n.rotate_x=this.lerp(n.rotate_x??((x=e.transform)==null?void 0:x.rotate_x)??0,pt,Bt),n.rotate_y=this.lerp(n.rotate_y??((D=e.transform)==null?void 0:D.rotate_y)??0,Ft,Bt),n.style=n.style||{...e.style},n.style.artEffect={enabled:!0,type:"fold_overlay",intensity:((N=i.settings)==null?void 0:N.opacity)??.5}}}else if(i.type===tt.Crumple){if(p<300){const Z=1-p/300,nt=Z*(Math.random()-.5)*5,et=Z*(Math.random()-.5)*.05,pt=Math.min(1,15*t);n.skew_x=this.lerp(n.skew_x??((ct=e.transform)==null?void 0:ct.skew_x)??0,nt,pt),n.scale_x=this.lerp(n.scale_x??((Mt=e.transform)==null?void 0:Mt.scale_x)??1,(((bt=e.transform)==null?void 0:bt.scale_x)??1)*(1+et),pt),n.scale_y=this.lerp(n.scale_y??((wt=e.transform)==null?void 0:wt.scale_y)??1,(((gt=e.transform)==null?void 0:gt.scale_y)??1)*(1+et),pt),n.style=n.style||{...e.style},n.style.artEffect={enabled:!0,type:"crumple_overlay",intensity:((It=i.settings)==null?void 0:It.intensity)??1,scale:((ut=i.settings)==null?void 0:ut.scale)??2}}}else if(i.type===tt.Squash){const Z=((Ot=i.settings)==null?void 0:Ot.strength)||.8;p<(e.width||100)&&this.isMouseDown?(n.scale_y=this.lerp(n.scale_y??1,(((Wt=e.transform)==null?void 0:Wt.scale_y)??1)*Z,.3),n.scale_x=this.lerp(n.scale_x??1,(((q=e.transform)==null?void 0:q.scale_x)??1)*(1+(1-Z)*.4),.3)):(n.scale_y=this.lerp(n.scale_y??1,((ft=e.transform)==null?void 0:ft.scale_y)??1,.2),n.scale_x=this.lerp(n.scale_x??1,((xt=e.transform)==null?void 0:xt.scale_x)??1,.2))}else if(i.type===tt.TextCounter){const Z=((At=i.settings)==null?void 0:At.duration)||2,nt=((Pt=i.settings)==null?void 0:Pt.from)||0,et=((vt=i.settings)==null?void 0:vt.to)||100;i._runtimeStart===void 0&&(i._runtimeStart=this.currentTime);const pt=this.currentTime-i._runtimeStart,Ft=Math.min(1,pt/Z),Bt=Math.floor(nt+(et-nt)*Ft);if(((Xt=e.geometry)==null?void 0:Xt.type)==="Text"){const Jt=((zt=i.settings)==null?void 0:zt.prefix)||"",pe=((Gt=i.settings)==null?void 0:Gt.suffix)||"";n.geometry||(n.geometry={...e.geometry}),n.geometry.text=`${Jt}${Bt}${pe}`}}else if(i.type===tt.Spotlight){const Z=((Yt=i.settings)==null?void 0:Yt.radius)||250,nt=((te=i.settings)==null?void 0:te.strength)||1.5;if(p<Z){const et=Math.pow(1-p/Z,2);n.style||(n.style={...e.style}),n.style.adjustments||(n.style.adjustments={...(ie=e.style)==null?void 0:ie.adjustments}),n.style.adjustments.exposure=(((ve=(ce=e.style)==null?void 0:ce.adjustments)==null?void 0:ve.exposure)||0)+et*nt*50}else(_e=n.style)!=null&&_e.adjustments&&(n.style.adjustments.exposure=this.lerp(n.style.adjustments.exposure||0,((Ee=(ge=e.style)==null?void 0:ge.adjustments)==null?void 0:Ee.exposure)||0,.1))}else if(i.type===tt.Noise||i.type===tt.Float){const Z=(((Zt=i.settings)==null?void 0:Zt.frequency)||((Me=i.settings)==null?void 0:Me.speed)||1)*.002,nt=(((Re=i.settings)==null?void 0:Re.amplitude)||((Ie=i.settings)==null?void 0:Ie.range)||50)*(((de=i.settings)==null?void 0:de.strength)||1),et=Date.now();n.x+=Math.sin(et*Z)*nt*t,n.y+=Math.cos(et*Z*.8)*nt*t,n.rotation+=Math.sin(et*Z*.5)*5*t}else if(i.type===tt.Pulse){const Z=(((me=i.settings)==null?void 0:me.speed)||1)*.005,nt=(((Ae=i.settings)==null?void 0:Ae.scale)||1.2)-1,et=Math.sin(Date.now()*Z),pt=((he=i.settings)==null?void 0:he.strength)||1;n.scale_x*=1+et*nt*pt*t,n.scale_y*=1+et*nt*pt*t,n.style&&(n.style.exposure=(n.style.exposure||1)+Math.max(0,et)*.1*pt*t)}else if(i.type===tt.Draggable){if(!this.draggingBehaviors.has(e.id)){const nt=((mt=i.settings)==null?void 0:mt.radius)||150;if(p<nt){const et=((rt=i.settings)==null?void 0:rt.strength)||1,pt=Math.max(0,1-p/nt);this.applyBehaviorSensor(n,re.PositionX,pt*et,t,i.settings,e,c,d,p),this.applyBehaviorSensor(n,re.PositionY,pt*et,t,i.settings,e,c,d,p)}}}else if(i.type===tt.Scroll){const Z=((z=i.settings)==null?void 0:z.axis)||"vertical",nt=((K=i.settings)==null?void 0:K.factor)||.5,et=((G=i.settings)==null?void 0:G.strength)||1,pt=((B=i.settings)==null?void 0:B.scaleFactor)||0;(Z==="vertical"||Z==="both")&&(n.y+=this.scrollOffset.y*nt*et*t),(Z==="horizontal"||Z==="both")&&(n.x+=this.scrollOffset.x*nt*et*t),pt!==0&&(n.scale_x*=1+this.scrollOffset.y*pt*t,n.scale_y*=1+this.scrollOffset.y*pt*t)}else if(i.type===tt.LookAt){const Z=((Q=i.settings)==null?void 0:Q.factor)||1,nt=((H=i.settings)==null?void 0:H.strength)||1,et=Math.atan2(-d,-c)*(180/Math.PI),pt=n.rotation,Ft=(et-pt+180)%360-180;n.rotation+=Ft*Z*nt*t*10}else if(i.type===tt.Scan){const Z=(((lt=i.settings)==null?void 0:lt.speed)||1)*.004,nt=((kt=i.settings)==null?void 0:kt.strength)||1,et=(Math.sin(Date.now()*Z)+1)/2;n.style&&(n.style.exposure=(n.style.exposure||1)+et*nt*t*5),n.x+=(et-.5)*20*nt*t}else if(i.type===tt.Glint)n.style=n.style||{...e.style},n.style.artEffect={enabled:!0,type:"glint_overlay",intensity:((Et=i.settings)==null?void 0:Et.strength)??.8};else if(i.type===tt.Ratchet){const Z=((Ht=i.settings)==null?void 0:Ht.steps)||12,nt=(((Ut=i.settings)==null?void 0:Ut.speed)||1)*30,et=Math.floor(n.rotation/(360/Z))*(360/Z);n.rotation=this.lerp(n.rotation,et+nt*t,.1)}else if(i.type===tt.Jitter&&p<300){const Z=((qt=i.settings)==null?void 0:qt.strength)||1,nt=((($=i.settings)==null?void 0:$.intensity)||5)*Z;n.x+=(Math.random()-.5)*nt*t*60,n.y+=(Math.random()-.5)*nt*t*60,n.rotation+=(Math.random()-.5)*nt*t*120}else if(i.type===tt.Follower){const Z=(dt=i.settings)==null?void 0:dt.targetId;if(Z){const nt=this.objectStates.get(Z);if(nt){const et=((Lt=i.settings)==null?void 0:Lt.stiffness)||.1,pt=nt.x-n.x,Ft=nt.y-n.y;n.x+=pt*et*t*60,n.y+=Ft*et*t*60}}}else if(i.type===tt.Wrap)n.x<0?n.x=this.canvasWidth:n.x>this.canvasWidth&&(n.x=0),n.y<0?n.y=this.canvasHeight:n.y>this.canvasHeight&&(n.y=0);else if(i.type===tt.Gravity){const Z=((Nt=i.settings)==null?void 0:Nt.strength)||9.8;n.y+=Z*t*10}else if(i.type===tt.Velocity){const Z=((st=i.settings)==null?void 0:st.vx)||0,nt=((yt=i.settings)==null?void 0:yt.vy)||0;n.x+=Z*t*10,n.y+=nt*t*10}else if(i.type===tt.Shear){const Z=((St=i.settings)==null?void 0:St.strength)||1,nt=((ee=i.settings)==null?void 0:ee.radius)||300;if(p<nt){const et=1-p/nt;n.skew_x=this.lerp(n.skew_x||0,(((Ct=e.transform)==null?void 0:Ct.skew_x)||0)+et*Z*30,.1)}else n.skew_x=this.lerp(n.skew_x||0,((Vt=e.transform)==null?void 0:Vt.skew_x)||0,.05)}else if(i.type===tt.Lens){const Z=((Tt=i.settings)==null?void 0:Tt.radius)||200,nt=((Dt=i.settings)==null?void 0:Dt.strength)||.5;if(p<Z){const et=Math.pow(1-p/Z,2);n.scale_x=this.lerp(n.scale_x??1,(((Rt=e.transform)==null?void 0:Rt.scale_x)??1)*(1+et*nt),.2),n.scale_y=this.lerp(n.scale_y??1,(((le=e.transform)==null?void 0:le.scale_y)??1)*(1+et*nt),.2)}else n.scale_x=this.lerp(n.scale_x??1,((fe=e.transform)==null?void 0:fe.scale_x)??1,.1),n.scale_y=this.lerp(n.scale_y??1,((Oe=e.transform)==null?void 0:Oe.scale_y)??1,.1)}else if(i.type===tt.LayoutAnimation){const Z=((jt=i.settings)==null?void 0:jt.watchProperties)||["x","y","scale_x","scale_y","opacity","rotation"],nt=((oe=i.settings)==null?void 0:oe.duration)||.3;this._layoutAnimCache.has(e.id)||this._layoutAnimCache.set(e.id,new Map);const et=this._layoutAnimCache.get(e.id);for(const pt of Z){const Ft=this.getObjectProperty(n,e,pt);if(Ft===void 0)continue;const Bt=et.get(pt);if(!Bt)et.set(pt,{from:Ft,to:Ft,startTime:this.currentTime,duration:0});else if(Bt.to!==Ft){const pe=this.getObjectProperty(n,e,pt);et.set(pt,{from:pe??Bt.from,to:Ft,startTime:this.currentTime,duration:((ne=i.settings)==null?void 0:ne.duration)??nt})}const Jt=et.get(pt);if(Jt.duration>0&&Jt.from!==Jt.to){const pe=this.currentTime-Jt.startTime,Te=Math.min(1,pe/Jt.duration),$e=this.applyEasing(Te,((Fe=i.settings)==null?void 0:Fe.easing)||"easeOutCubic"),ye=Jt.from+(Jt.to-Jt.from)*$e;this.setObjectProperty(n,e,pt,ye)}}}else if(i.type===tt.StateReactive){this._layoutAnimCache.has(e.id)||this._layoutAnimCache.set(e.id,new Map);const Z=this._layoutAnimCache.get(e.id),nt=((xe=i.settings)==null?void 0:xe.defaultDuration)||.3,et=["x","y","scale_x","scale_y","opacity","rotation","style.fill.color","style.stroke.width","geometry.cornerRadius","style.blur.value","style.shadow.blur","style.shadow.offsetX","style.shadow.offsetY"];for(const pt of et){const Ft=this.getObjectProperty(n,e,pt);if(Ft===void 0||typeof Ft!="number")continue;const Bt=Z.get(pt);if(!Bt)Z.set(pt,{from:Ft,to:Ft,startTime:this.currentTime,duration:0});else if(Bt.to!==Ft){const pe=this.getObjectProperty(n,e,pt);Z.set(pt,{from:pe??Bt.from,to:Ft,startTime:this.currentTime,duration:nt})}const Jt=Z.get(pt);if(Jt.duration>0&&Jt.from!==Jt.to){const pe=this.currentTime-Jt.startTime,Te=Math.min(1,pe/Jt.duration),$e=this.applyEasing(Te,((Be=i.settings)==null?void 0:Be.defaultEasing)||"easeOutCubic"),ye=Jt.from+(Jt.to-Jt.from)*$e;this.setObjectProperty(n,e,pt,ye)}}}else if(i.type===tt.SpringChain){const Z=((We=i.settings)==null?void 0:We.connections)||[],nt=((Ye=i.settings)==null?void 0:Ye.globalDamping)||.3;this._springChainState.has(e.id)||this._springChainState.set(e.id,new Map);const et=this._springChainState.get(e.id);for(const Ft of Z){if(!et.has(Ft.targetId)){const Bt=this.objectStates.get(Ft.targetId);et.set(Ft.targetId,{x:(Bt==null?void 0:Bt.x)??0,y:(Bt==null?void 0:Bt.y)??0,vx:0,vy:0})}et.has(e.id)||et.set(e.id,{x:n.x,y:n.y,vx:0,vy:0})}const pt=et.get(e.id);if(pt){pt.x=n.x,pt.y=n.y;for(const Ft of Z){const Bt=et.get(Ft.targetId);if(!Bt)continue;const Jt=Bt.x-pt.x,pe=Bt.y-pt.y,Te=Math.sqrt(Jt*Jt+pe*pe)||.001,ye=(Te-(Ft.restLength||50))*(Ft.stiffness||.8),Le=Jt/Te*ye,Qe=pe/Te*ye;pt.vx+=Le*t*10,pt.vy+=Qe*t*10,Bt.vx-=Le*t*10,Bt.vy-=Qe*t*10,pt.vx*=1-nt*t*10,pt.vy*=1-nt*t*10,Bt.vx*=1-nt*t*10,Bt.vy*=1-nt*t*10;const Pe=this.objectStates.get(Ft.targetId);Pe&&(Pe.x+=Bt.vx*t,Pe.y+=Bt.vy*t)}n.x+=pt.vx*t,n.y+=pt.vy*t}}else if(i.type===tt.ParticleEmitter){const Z=((Xe=i.settings)==null?void 0:Xe.rate)||10,nt=((Ge=i.settings)==null?void 0:Ge.speed)||100,et=((se=i.settings)==null?void 0:se.size)||5,pt=((ue=i.settings)==null?void 0:ue.lifetime)||2,Ft=((Se=i.settings)==null?void 0:Se.gravity)||0,Bt=((De=i.settings)==null?void 0:De.color)||"#ffffff",Jt=((Ne=i.settings)==null?void 0:Ne.maxParticles)||200,pe=(ke=i.settings)!=null&&ke.rateInputId?this.inputs.get(i.settings.rateInputId)??Z:Z,Te=(Ce=i.settings)!=null&&Ce.gravityInputId?this.inputs.get(i.settings.gravityInputId)??Ft:Ft,$e=(we=i.settings)!=null&&we.speedInputId?this.inputs.get(i.settings.speedInputId)??nt:nt;this._emitterPools.has(e.id)||this._emitterPools.set(e.id,[]);const ye=this._emitterPools.get(e.id);let Le=0;i._pendingBurst&&i._pendingBurst>0&&(Le=i._pendingBurst,i._pendingBurst=0);const Qe=Math.floor(pe*t)+(Le||0);for(let Pe=0;Pe<Math.min(Qe,Jt-ye.length);Pe++){const be=Math.random()*Math.PI*2,ms=$e*(.5+Math.random()*.5);ye.push({x:n.x,y:n.y,vx:Math.cos(be)*ms,vy:Math.sin(be)*ms,life:0,maxLife:pt*(.5+Math.random()*.5),size:et*(.5+Math.random()),color:Bt,opacity:1})}for(let Pe=ye.length-1;Pe>=0;Pe--){const be=ye[Pe];be.vy+=Te*t*10,be.x+=be.vx*t,be.y+=be.vy*t,be.life+=t,be.opacity=Math.max(0,1-be.life/be.maxLife),be.life>=be.maxLife&&ye.splice(Pe,1)}}})})}applyBehaviorSensor(t,s,o,e,n,i,a=0,r=0,c=1){var h,f,v,m,l,b,S,w,C,M,I,_,E,P,L,k,A,T,R,F,O,W,V,U;const d=(n==null?void 0:n.intensity)||(n==null?void 0:n.strength)||1,p=Math.min(1,15*e),u=c>0?a/c:0,g=c>0?r/c:0;switch(s){case re.Scale:{const Y=((h=i==null?void 0:i.transform)==null?void 0:h.scale_x)??1,X=((f=i==null?void 0:i.transform)==null?void 0:f.scale_y)??1,ot=Y*(1+o*d*.4),J=X*(1+o*d*.4);t.scale_x=(t.scale_x??Y)*(1-p)+ot*p,t.scale_y=(t.scale_y??X)*(1-p)+J*p;break}case re.Opacity:{const Y=((v=i==null?void 0:i.transform)==null?void 0:v.opacity)??100,X=Math.max(0,Math.min(100,Y-o*d*100));t.opacity=(t.opacity??Y)*(1-p)+X*p;break}case re.RotateZ:{const Y=((m=i==null?void 0:i.transform)==null?void 0:m.rotation)??0,X=Y+o*d*45;t.rotation=(t.rotation??Y)*(1-p)+X*p;break}case re.RotateX:{const Y=((l=i==null?void 0:i.transform)==null?void 0:l.rotate_x)??0,X=Y-g*o*d*60;t.rotate_x=(t.rotate_x??Y)*(1-p)+X*p;break}case re.RotateY:{const Y=((b=i==null?void 0:i.transform)==null?void 0:b.rotate_y)??0,X=Y+u*o*d*60;t.rotate_y=(t.rotate_y??Y)*(1-p)+X*p;break}case re.PositionX:{const Y=((S=i==null?void 0:i.transform)==null?void 0:S.x)??0,X=Y-u*o*d*40;t.x=(t.x??Y)*(1-p)+X*p;break}case re.PositionY:{const Y=((w=i==null?void 0:i.transform)==null?void 0:w.y)??0,X=Y-g*o*d*40;t.y=(t.y??Y)*(1-p)+X*p;break}case re.SkewX:{const Y=((C=i==null?void 0:i.transform)==null?void 0:C.skew_x)??0,X=Y+u*o*d*45;t.skew_x=(t.skew_x??Y)*(1-p)+X*p,t.skew_x>85&&(t.skew_x=85),t.skew_x<-85&&(t.skew_x=-85);break}case re.Blur:{t.style||(t.style={...i==null?void 0:i.style}),t.style.blur||(t.style.blur={...(M=i==null?void 0:i.style)==null?void 0:M.blur});const Y=((_=(I=i==null?void 0:i.style)==null?void 0:I.blur)==null?void 0:_.amount)||0,X=Y+o*((n==null?void 0:n.blur)||20)*d;t.style.blur.amount=(t.style.blur.amount??Y)*(1-p)+X*p;break}case re.Exposure:{t.style||(t.style={...i==null?void 0:i.style}),t.style.adjustments||(t.style.adjustments={...(E=i==null?void 0:i.style)==null?void 0:E.adjustments});const Y=((L=(P=i==null?void 0:i.style)==null?void 0:P.adjustments)==null?void 0:L.exposure)||0,X=Y+o*((n==null?void 0:n.exposure)||50)*d;t.style.adjustments.exposure=(t.style.adjustments.exposure??Y)*(1-p)+X*p;break}case re.HueShift:{t.style||(t.style={...i==null?void 0:i.style}),t.style.adjustments||(t.style.adjustments={...(k=i==null?void 0:i.style)==null?void 0:k.adjustments});const Y=((T=(A=i==null?void 0:i.style)==null?void 0:A.adjustments)==null?void 0:T.hue)||0,X=Y+o*((n==null?void 0:n.hue)||180)*d;t.style.adjustments.hue=(t.style.adjustments.hue??Y)*(1-p)+X*p;break}case re.Negative:{t.style||(t.style={...i==null?void 0:i.style}),t.style.adjustments||(t.style.adjustments={...(R=i==null?void 0:i.style)==null?void 0:R.adjustments});const Y=((O=(F=i==null?void 0:i.style)==null?void 0:F.adjustments)==null?void 0:O.negative)||0,X=Y+o*((n==null?void 0:n.negative)||100)*d;t.style.adjustments.negative=(t.style.adjustments.negative??Y)*(1-p)+X*p;break}case re.CornerRadius:{const Y=((W=i==null?void 0:i.transform)==null?void 0:W.corner_radius)||0,X=Y+o*d*50;t.corner_radius=(t.corner_radius??Y)*(1-p)+X*p;break}case re.StrokeWidth:{t.style||(t.style={...i==null?void 0:i.style});const Y=((V=i==null?void 0:i.style)==null?void 0:V.borderWidth)||0,X=Y+o*d*10;t.style.borderWidth=(t.style.borderWidth??Y)*(1-p)+X*p;break}case re.LetterSpacing:{t.geometry||(t.geometry={});const Y=((U=i==null?void 0:i.geometry)==null?void 0:U.letterSpacing)||0,X=Y+o*d*10;t.geometry.letterSpacing=(t.geometry.letterSpacing??Y)*(1-p)+X*p;break}}}getObjectProperty(t,s,o){const e=o.replace(/\[(\d+)\]/g,".$1").split(".");let n=t;for(const i of e){if(n==null||typeof n!="object")return;if(i==="style"&&t.style===void 0){n=s.style;continue}n=n[i]}return typeof n=="number"?n:void 0}setObjectProperty(t,s,o,e){const n=o.replace(/\[(\d+)\]/g,".$1").split(".");let i=t;for(let r=0;r<n.length-1;r++){const c=n[r];if(i[c]===void 0||i[c]===null){const d=s,p=n.slice(0,r+1).reduce((h,f)=>h==null?void 0:h[f],d),u=n[r+1],g=!isNaN(Number(u));i[c]=p!==void 0?Array.isArray(p)?[...p]:{...p}:g?[]:{}}i=i[c]}const a=n[n.length-1];i!=null&&(i[a]=e)}applyEasing(t,s){switch(s){case"easeOutCubic":return 1-Math.pow(1-t,3);case"easeInCubic":return t*t*t;case"easeInOutCubic":return t<.5?4*t*t*t:1-Math.pow(-2*t+2,3)/2;case"easeOutQuad":return t*(2-t);case"easeInQuad":return t*t;case"easeInOutQuad":return t<.5?2*t*t:1-Math.pow(-2*t+2,2)/2;case"easeOutExpo":return t===1?1:1-Math.pow(2,-10*t);case"easeOutBack":return 1+2.70158*Math.pow(t-1,3)+1.70158*Math.pow(t-1,2);case"easeOutElastic":{const o=2*Math.PI/3;return t===0?0:t===1?1:Math.pow(2,-10*t)*Math.sin((t*10-.75)*o)+1}case"easeOutBounce":return t<1/2.75?7.5625*t*t:t<2/2.75?7.5625*(t-=1.5/2.75)*t+.75:t<2.5/2.75?7.5625*(t-=2.25/2.75)*t+.9375:7.5625*(t-=2.625/2.75)*t+.984375;case"linear":return t;default:return 1-Math.pow(1-t,3)}}lerp(t,s,o){return t*(1-o)+s*o}deepMerge(t,s){if(!t)return s;if(!s)return t;if(typeof t!="object"||typeof s!="object"||t===null||s===null)return s;if(Array.isArray(s)){if(!Array.isArray(t))return s;const e=[...t];for(let n=0;n<s.length;n++)s[n]&&typeof s[n]=="object"&&!Array.isArray(s[n])&&t[n]&&typeof t[n]=="object"?e[n]=this.deepMerge(t[n],s[n]):e[n]=s[n];return e}const o={...t};for(const e in s)Object.prototype.hasOwnProperty.call(s,e)&&(s[e]&&typeof s[e]=="object"&&!Array.isArray(s[e])?o[e]=this.deepMerge(t[e],s[e]):Array.isArray(s[e])?o[e]=this.deepMerge(t[e],s[e]):o[e]=s[e]);return o}processFabricAdjustmentsCanvas(t,s,o,e){if(!e)return t;const n=(e.exposure||0)/100,i=(e.contrast||0)/100,a=(e.saturation||0)/100,r=(e.temperature||0)/200,c=(e.tint||0)/200,d=(e.highlights||0)/500,p=(e.shadows||0)/500,u=e.hue||0,g=(e.negative||0)/100,h=e.blur||0;if(!(n!==0||i!==0||a!==0||r!==0||c!==0||d!==0||p!==0||u!==0||g!==0||h>0))return t;const v=t.naturalWidth||Math.max(1,Math.round(s)),m=t.naturalHeight||Math.max(1,Math.round(o)),l=document.createElement("canvas");l.width=v,l.height=m;const b=l.getContext("2d");if(!b)return t;const S=[];h>0&&S.push(`blur(${h}px)`),u!==0&&S.push(`hue-rotate(${Math.round(u)}deg)`),S.length>0&&(b.filter=S.join(" ")),b.drawImage(t,0,0,v,m);try{const w=b.getImageData(0,0,v,m),C=w.data,M=C.length,I=n*255,_=i>=0?(1+i)/Math.max(.01,1-i):1+i,E=1+a,P=1+r-c/2,L=1+c,k=1-r-c/2,A=1+d+p,T=p*25.5,R=1-g/50,F=(1-R)*255;for(let O=0;O<M;O+=4){let W=C[O],V=C[O+1],U=C[O+2];if(n!==0&&(W+=I,V+=I,U+=I),i!==0&&(W=(W-127.5)*_+127.5,V=(V-127.5)*_+127.5,U=(U-127.5)*_+127.5),a!==0){const Y=.2989*W+.587*V+.114*U;W=Y+(W-Y)*E,V=Y+(V-Y)*E,U=Y+(U-Y)*E}(r!==0||c!==0)&&(W=W*P,V=V*L,U=U*k),(d!==0||p!==0)&&(W=W*A+T,V=V*A+T,U=U*A+T),g!==0&&(W=W*R+F,V=V*R+F,U=U*R+F),C[O]=Math.min(255,Math.max(0,W)),C[O+1]=Math.min(255,Math.max(0,V)),C[O+2]=Math.min(255,Math.max(0,U))}return b.putImageData(w,0,0),l}catch{return l}}renderFittedImage(t,s,o,e,n,i,a="cover"){const r=s.naturalWidth||s.width||n,c=s.naturalHeight||s.height||i,d=r/c,p=n/i;let u=n,g=i,h=o,f=e;a==="cover"?d>p?(u=i*d,h=o-(u-n)/2):(g=n/d,f=e-(g-i)/2):a==="contain"&&(d>p?(g=n/d,f=e+(i-g)/2):(u=i*d,h=o+(n-u)/2)),t.drawImage(s,h,f,u,g)}}const ai=$t.forwardRef(({artboard:y,src:t,style:s,autoPlay:o=!0,fit:e="Contain",alignment:n="Center",onReady:i,onTrigger:a,onInputUpdate:r,onComponentChange:c,onToggle:d,onInputChange:p,onInputFocus:u,onInputBlur:g,onLog:h,onLogicUpdate:f,onButtonClick:v,onGraphPointClick:m,currentTime:l,revision:b=0,scrollY:S,scrollX:w,mouseX:C,mouseY:M,isMouseDown:I,inputs:_,interactive:E=!0,onNavigation:P},L)=>{const k=$t.useRef(null),A=$t.useRef(null);A.current||(A.current=new gs);const T=$t.useRef(void 0),R=$t.useRef(0),F=$t.useRef(null),O=$t.useRef(b),W=$t.useRef(null),[,V]=$t.useState(y||null),U=$t.useRef(!0),Y=$t.useRef(o),X=$t.useRef(l);$t.useEffect(()=>{Y.current=o},[o]),$t.useEffect(()=>{X.current=l},[l]),$t.useImperativeHandle(L,()=>k.current),$t.useEffect(()=>(U.current=!0,()=>{U.current=!1,T.current&&cancelAnimationFrame(T.current)}),[]),$t.useEffect(()=>{A.current.setLayout(e,n)},[e,n]),$t.useEffect(()=>{const x=A.current;a&&x.setTriggerCallback(a),r&&x.setInputUpdateCallback((D,N)=>r({[D]:N})),c&&x.setComponentChangeCallback(D=>c(D)),d&&x.setToggleCallback(d),p&&x.setInputChangeCallback(p),u&&x.setInputFocusCallback(u),g&&x.setInputBlurCallback(g),h&&x.setOnLogCallback(D=>h(D,"info")),f&&x.setLogicUpdateCallback(f),v&&x.setButtonClickCallback(v),m&&x.setGraphPointClickCallback(D=>m(D.objectId,D)),P&&x.setNavigationCallback(P)},[a,r,c,d,p,u,g,h,f,v,m,P]),$t.useEffect(()=>{(async()=>{let D=y;if(t&&!y)try{t.startsWith("{")?D=JSON.parse(t):D=await(await fetch(t)).json()}catch(N){console.error("[ExodeUI] Failed to load src:",N)}if(D){const N=A.current,ct=D.id||D.name||"default";(F.current!==ct||O.current!==b||W.current!==D)&&(N.load(D),F.current=ct,O.current=b,W.current=D,V(D),R.current=-1,N.advance(0)),i&&i(N)}})()},[y,t,b]),$t.useEffect(()=>{const x=D=>{if(!A.current||!U.current)return;const N=A.current,ct=k.current;if(!ct)return;const Mt=ct.getContext("2d");if(!Mt)return;const bt=D/1e3;R.current<0&&(R.current=bt),R.current===0&&(R.current=bt);let wt=bt-R.current;wt>.1&&(wt=.1),R.current=bt;const gt=ct.getBoundingClientRect(),It=window.devicePixelRatio||1,ut=Math.round(gt.width*It),Ot=Math.round(gt.height*It);(ct.width!==ut||ct.height!==Ot)&&(ct.width=ut,ct.height=Ot);try{Y.current?N.advance(wt):X.current!==void 0&&N.seek(X.current),N.render(Mt,ct.width,ct.height)}catch(Wt){console.error("[ExodeUICanvas] Error in animation loop:",Wt),h&&h(`[Error] Animation loop crashed: ${Wt}`,"error")}T.current=requestAnimationFrame(x)};return T.current=requestAnimationFrame(x),()=>{T.current&&cancelAnimationFrame(T.current)}},[]),$t.useEffect(()=>{const x=A.current;S!==void 0&&x.updateInput("scrollY",S),w!==void 0&&x.updateInput("scrollX",w),C!==void 0&&x.updateInput("mouseX",C),M!==void 0&&x.updateInput("mouseY",M),I!==void 0&&x.updateInput("isMouseDown",I),_&&Object.entries(_).forEach(([D,N])=>x.updateInput(D,N))},[S,w,C,M,I,_]);const ot=(x,D)=>{if(!E||!k.current)return;x.stopPropagation(),"nativeEvent"in x&&x.nativeEvent&&typeof x.nativeEvent.stopImmediatePropagation=="function"?x.nativeEvent.stopImmediatePropagation():typeof x.stopImmediatePropagation=="function"&&x.stopImmediatePropagation();const N=k.current,ct=N.getBoundingClientRect(),Mt=x.clientX-ct.left,bt=x.clientY-ct.top,wt=window.devicePixelRatio||1;(D==="click"||D==="down"||D==="up")&&h&&h(`[Canvas] Pointer ${D} at rect(${Math.round(Mt)},${Math.round(bt)}) mapped to buffer(${Math.round(Mt*wt)},${Math.round(bt*wt)})`,"info"),A.current.handlePointerInput(D,Mt*wt,bt*wt,N.width,N.height)};$t.useEffect(()=>{if(!E)return;const x=N=>{var ct,Mt,bt;((ct=document.activeElement)==null?void 0:ct.tagName)==="INPUT"||((Mt=document.activeElement)==null?void 0:Mt.tagName)==="TEXTAREA"||(bt=A.current)==null||bt.handleKeyDown(N)},D=N=>{var ct,Mt,bt;((ct=document.activeElement)==null?void 0:ct.tagName)==="INPUT"||((Mt=document.activeElement)==null?void 0:Mt.tagName)==="TEXTAREA"||(bt=A.current)==null||bt.handleKeyUp(N)};return window.addEventListener("keydown",x),window.addEventListener("keyup",D),()=>{window.removeEventListener("keydown",x),window.removeEventListener("keyup",D)}},[E]),$t.useEffect(()=>{const x=k.current;if(!x||!E)return;const D=N=>{if(N.preventDefault(),N.stopPropagation(),A.current){const ct=x.getBoundingClientRect(),Mt=window.devicePixelRatio||1,bt=(N.clientX-ct.left)*Mt,wt=(N.clientY-ct.top)*Mt;let gt=N.deltaX,It=N.deltaY;N.deltaMode===1?(gt*=25,It*=25):N.deltaMode===2&&(gt*=100,It*=100),A.current.handlePointerInput("move",bt,wt,x.width,x.height),A.current.handleWheel(gt,It,bt,wt,x.width,x.height)}};return x.addEventListener("wheel",D,{passive:!1}),()=>{x.removeEventListener("wheel",D)}},[E]);const[J,at]=$t.useState([]);$t.useEffect(()=>{if(y&&y.objects){const x=y.objects.filter(D=>{var N,ct;return D.type==="Joystick"&&((N=D.inputBinding)==null?void 0:N.type)==="keyboard"&&((ct=D.inputBinding.keyboardConfig)==null?void 0:ct.showVirtualKeyboard)});at(x)}},[y]);const[,j]=$t.useState(0);$t.useEffect(()=>{if(J.length===0)return;let x;const D=()=>{j(N=>N+1),x=requestAnimationFrame(D)};return x=requestAnimationFrame(D),()=>cancelAnimationFrame(x)},[J.length]);const it=()=>J.map(x=>{const D=x.inputBinding.keyboardConfig,N=gt=>{var ut;const It={key:gt,code:gt,preventDefault:()=>{}};(ut=A.current)==null||ut.handleKeyDown(It)},ct=gt=>{var ut;const It={key:gt,code:gt,preventDefault:()=>{}};(ut=A.current)==null||ut.handleKeyUp(It)},Mt=A.current,bt=gt=>Mt&&Mt.activeKeys?Mt.activeKeys.has(gt.toLowerCase()):!1,wt=gt=>({width:"50px",height:"50px",background:gt?"rgba(255, 255, 255, 0.4)":"rgba(0, 0, 0, 0.4)",border:"1px solid rgba(255, 255, 255, 0.2)",borderRadius:"12px",display:"flex",alignItems:"center",justifyContent:"center",color:"white",fontWeight:"bold",fontSize:"18px",userSelect:"none",cursor:"pointer",backdropFilter:"blur(8px)",transition:"background 0.1s",boxShadow:gt?"none":"0 4px 6px rgba(0,0,0,0.1)"});return Qt.jsxs("div",{style:{position:"absolute",bottom:"40px",right:"40px",display:"flex",flexDirection:"column",alignItems:"center",gap:"8px",pointerEvents:"auto",zIndex:100},children:[Qt.jsx("div",{style:wt(bt(D.upKey)),onMouseDown:()=>N(D.upKey),onMouseUp:()=>ct(D.upKey),onMouseLeave:()=>ct(D.upKey),onTouchStart:gt=>{gt.preventDefault(),N(D.upKey)},onTouchEnd:gt=>{gt.preventDefault(),ct(D.upKey)},children:D.upKey.toUpperCase()}),Qt.jsxs("div",{style:{display:"flex",gap:"8px"},children:[Qt.jsx("div",{style:wt(bt(D.leftKey)),onMouseDown:()=>N(D.leftKey),onMouseUp:()=>ct(D.leftKey),onMouseLeave:()=>ct(D.leftKey),onTouchStart:gt=>{gt.preventDefault(),N(D.leftKey)},onTouchEnd:gt=>{gt.preventDefault(),ct(D.leftKey)},children:D.leftKey.toUpperCase()}),Qt.jsx("div",{style:wt(bt(D.downKey)),onMouseDown:()=>N(D.downKey),onMouseUp:()=>ct(D.downKey),onMouseLeave:()=>ct(D.downKey),onTouchStart:gt=>{gt.preventDefault(),N(D.downKey)},onTouchEnd:gt=>{gt.preventDefault(),ct(D.downKey)},children:D.downKey.toUpperCase()}),Qt.jsx("div",{style:wt(bt(D.rightKey)),onMouseDown:()=>N(D.rightKey),onMouseUp:()=>ct(D.rightKey),onMouseLeave:()=>ct(D.rightKey),onTouchStart:gt=>{gt.preventDefault(),N(D.rightKey)},onTouchEnd:gt=>{gt.preventDefault(),ct(D.rightKey)},children:D.rightKey.toUpperCase()})]})]},x.id)});return Qt.jsxs("div",{style:{position:"relative",width:"100%",height:"100%"},children:[Qt.jsx("canvas",{ref:k,onPointerDown:x=>{var D;ot(x,"down"),x.currentTarget.setPointerCapture(x.pointerId),(D=k.current)==null||D.focus()},onPointerMove:x=>ot(x,"move"),onPointerUp:x=>{ot(x,"up"),x.currentTarget.releasePointerCapture(x.pointerId)},onPointerCancel:x=>{ot(x,"up"),x.currentTarget.releasePointerCapture(x.pointerId)},onClick:x=>ot(x,"click"),onKeyDown:x=>A.current.handleKeyDown(x.nativeEvent),onKeyUp:x=>A.current.handleKeyUp(x.nativeEvent),onContextMenu:x=>x.preventDefault(),tabIndex:0,style:{...s,width:"100%",height:"100%",outline:"none",display:"block",touchAction:"none",pointerEvents:E?"auto":"none"}}),it()]})});function ri(){const[y,t]=$t.useState(null),s=$t.useCallback((u,g)=>{y==null||y.setInputBool(u,g)},[y]),o=$t.useCallback((u,g)=>{y==null||y.setInputNumber(u,g)},[y]),e=$t.useCallback(u=>{y==null||y.fireTrigger(u)},[y]),n=$t.useCallback((u,g)=>{y==null||y.setInputText(u,g)},[y]),i=$t.useCallback((u,g)=>{y==null||y.setInputNumberArray(u,g)},[y]),a=$t.useCallback((u,g)=>{y==null||y.setInputStringArray(u,g)},[y]),r=$t.useCallback((u,g)=>{y==null||y.updateObjectOptions(u,g)},[y]),c=$t.useCallback((u,g,h)=>{y==null||y.updateConstraint(u,g,h)},[y]),d=$t.useCallback((u,g)=>{y==null||y.updateGraphData(u,g)},[y]),p=$t.useCallback(u=>y==null?void 0:y.getInputValue(u),[y]);return{setEngine:t,engine:y,setInputBool:s,setInputNumber:o,fireTrigger:e,setInputText:n,setInputNumberArray:i,setInputStringArray:a,updateConstraint:c,updateGraphData:d,updateObjectOptions:r,getInputValue:p}}const li=({artboard:y,config:t})=>{const s={...y.seo,...t},o=s.enableSmartExtraction!==!1;$t.useEffect(()=>{const a=s.title||y.name;a&&(document.title=a);let r=s.description;if(!r&&o){const p=y.objects.filter(u=>{var g;return((g=u.geometry)==null?void 0:g.type)==="Text"}).sort((u,g)=>{var h,f;return(((h=g.geometry.text)==null?void 0:h.length)||0)-(((f=u.geometry.text)==null?void 0:f.length)||0)});p.length>0&&(r=p[0].geometry.text)}r&&(e("name","description",r),e("property","og:description",r)),s.keywords&&s.keywords.length>0&&e("name","keywords",s.keywords.join(", "));const c=s.ogImage||y.backgroundImage;c&&e("property","og:image",c),a&&e("property","og:title",a),e("property","og:type","website")},[s,y,o]);const e=(a,r,c)=>{let d=document.querySelector(`meta[${a}="${r}"]`);d||(d=document.createElement("meta"),d.setAttribute(a,r),document.head.appendChild(d)),d.setAttribute("content",c)},n=()=>{const a=[];return a.push(Qt.jsx("h1",{children:s.title||y.name},"artboard-title")),y.objects.forEach((c,d)=>{var p,u;if(!(c.visible===!1||c.isVisible===!1))if(((p=c.geometry)==null?void 0:p.type)==="Text"){const g=c.geometry.text;g&&(c.geometry.fontSize>24?a.push(Qt.jsx("h2",{children:g},c.id||d)):a.push(Qt.jsx("p",{children:g},c.id||d)))}else if(((u=c.geometry)==null?void 0:u.type)==="Image"){const g=c.geometry.src,h=c.altText||c.name||"Illustration";a.push(Qt.jsx("img",{src:g,alt:h},c.id||d))}else c.type==="Button"&&a.push(Qt.jsx("button",{children:c.name||"Button"},c.id||d))}),a},i=s.jsonLd||{"@context":"https://schema.org","@type":"VisualArtwork",name:s.title||y.name,description:s.description,image:s.ogImage||y.backgroundImage,abstract:"Animated interface created with ExodeUI"};return Qt.jsxs("div",{id:`exode-seo-${y.id||"default"}`,"aria-hidden":"false",style:{position:"absolute",width:"1px",height:"1px",padding:"0",margin:"-1px",overflow:"hidden",clip:"rect(0, 0, 0, 0)",whiteSpace:"nowrap",border:"0",zIndex:-1},children:[n(),Qt.jsx("script",{type:"application/ld+json",children:JSON.stringify(i)})]})},ci={version:"6.4.1"}.version;Kt.BAR_STYLE_PRESETS=oi,Kt.BehaviorSensor=re,Kt.BehaviorType=tt,Kt.ConditionOp=je,Kt.ExodeSEO=li,Kt.ExodeUICanvas=ai,Kt.ExodeUIEngine=gs,Kt.LogicOp=_t,Kt.RapierPhysics=is,Kt.VERSION=ci,Kt.useExodeUI=ri,Object.defineProperty(Kt,Symbol.toStringTag,{value:"Module"})}));
13
+ `&&q++),ft+=k})}else{if(e.fill){const ft=t.globalAlpha,Bt=this.createCanvasFill(t,e.fill,Y,ot);t.fillStyle=Bt||e.fill.color||"#000000",t.globalAlpha=ft*this.normalizeOpacity(e.fill.opacity??100);const Ot=F.fullText||(o.enableSegments?(o.segments||[]).map(Yt=>{let zt=Yt.text||"";const Gt=Yt.textCase||o.textCase||"none";return Gt==="uppercase"?zt.toUpperCase():Gt==="lowercase"?zt.toLowerCase():Gt==="capitalize"?zt.replace(/\b\w/g,Dt=>Dt.toUpperCase()):zt}).join(""):p);let Pt=0,vt=j;(O||[]).forEach(Yt=>{const zt=Yt.text||"";let Gt=-Y/2;M==="center"?Gt=0:M==="right"&&(Gt=Y/2),N(zt,Gt,vt,!1,Pt),Pt+=zt.length,vt+=k,Pt<Ot.length&&(Ot[Pt]===`
14
+ `||Ot[Pt]==="\r")&&(P>0&&(vt+=P),Pt++,Ot[Pt-1]==="\r"&&Ot[Pt]===`
15
+ `&&Pt++)}),t.globalAlpha=ft}const q=o.paragraphRule;if(q&&(((Lt=q.top)==null?void 0:Lt.width)>0||((Wt=q.bottom)==null?void 0:Wt.width)>0)){let ft=0;(O||[]).forEach((Bt,Ot)=>{var Yt,zt;const vt=ft===0||ft<p.length&&(p[ft]===`
16
+ `||p[ft]==="\r");if(vt&&Ot>0&&ft++,vt){if(((Yt=q.top)==null?void 0:Yt.width)>0){const Gt=j+Ot*k-q.top.offset;t.strokeStyle=q.top.color||"#000000",t.lineWidth=q.top.width,t.beginPath();const Dt=-i/2+k*.2;t.moveTo(Dt,Gt),t.lineTo(i/2-k*.2,Gt),t.stroke()}if(((zt=q.bottom)==null?void 0:zt.width)>0){const Gt=j+(Ot+1)*k-q.bottom.offset;t.strokeStyle=q.bottom.color||"#000000",t.lineWidth=q.bottom.width,t.beginPath();const Dt=-i/2+k*.2;t.moveTo(Dt,Gt),t.lineTo(i/2-k*.2,Gt),t.stroke()}}ft+=(Bt.text||"").length})}if(e.stroke&&e.stroke.width>0){const ft=t.globalAlpha;e.fill&&e.fill.type!=="None"&&e.fill.isEnabled!==!1&&e.fill.opacity!==0&&e.fill.color!=="transparent"&&e.fill.color!=="rgba(0,0,0,0)"&&(t.shadowColor="transparent",t.shadowBlur=0,t.shadowOffsetX=0,t.shadowOffsetY=0),t.strokeStyle=e.stroke.color;const Ot=t.getTransform(),Pt=Math.sqrt(Ot.a*Ot.a+Ot.b*Ot.b)||1,vt=window.devicePixelRatio||1;t.lineWidth=(e.stroke.width||1)*vt/Pt,t.globalAlpha=ft*this.normalizeOpacity(e.stroke.opacity??100);let Yt=0,zt=j;(O||[]).forEach(Gt=>{let Dt=-Y/2;M==="center"?Dt=0:M==="right"&&(Dt=Y/2),N(Gt.text,Dt,zt,!0,Yt),Yt+=(Gt.text||"").length,zt+=k,Yt<p.length&&(p[Yt]===`
17
+ `||p[Yt]==="\r")&&(P>0&&(zt+=P),Yt++,p[Yt-1]==="\r"&&p[Yt]===`
18
+ `&&Yt++)}),t.globalAlpha=ft}}}applyStrokeAlignment(t,s,o,e,n,i){if(!s.stroke||s.stroke.width<=0||s.stroke.isEnabled===!1)return;const a=s.stroke,r=t.getTransform(),l=Math.sqrt(r.a*r.a+r.b*r.b)||1,d=window.devicePixelRatio||1,p=(a.width||1)*d/l,u=(a.alignment||"center").toLowerCase();if(t.save(),s.fill&&s.fill.type!=="None"&&s.fill.isEnabled!==!1&&s.fill.opacity!==0&&s.fill.color!=="transparent"&&s.fill.color!=="rgba(0,0,0,0)"&&(t.shadowColor="transparent",t.shadowBlur=0,t.shadowOffsetX=0,t.shadowOffsetY=0),a.fill){const S=this.createCanvasFill(t,a.fill,e,n);S?t.strokeStyle=S:t.strokeStyle=a.color||"#000000"}else t.strokeStyle=a.color||"#000000";const h=t.globalAlpha;t.globalAlpha=h*this.normalizeOpacity(a.opacity??100),t.lineWidth=p,t.lineCap=a.lineCap||"round",t.lineJoin=a.lineJoin||"round",a.miterLimit!==void 0&&(t.miterLimit=a.miterLimit);const f=a.trimStart??0,v=a.trimEnd??1,g=a.trimOffset??0,c=a.dashOffset??0,b=a.dashArray||[];if(f!==0||v!==1||g!==0){const S=this.getPerimeter(o,e,n);if(S>0){const w=Math.max(0,Math.min(1,f)),C=Math.max(0,Math.min(1,v));if(w<C){const M=S*(C-w),I=S-M,_=-(S*(w+g%1));t.setLineDash([M,I]),t.lineDashOffset=_-c*S}else if(w===C)t.setLineDash([0,S]);else{const M=S*(1-w+C),I=S-M,_=-(S*w);t.setLineDash([M,I]),t.lineDashOffset=_-c*S}}}else if(b.length>0||c!==0){b.length>0&&t.setLineDash(b);const S=this.getPerimeter(o,e,n);t.lineDashOffset=-(c*S)}if((o==null?void 0:o.type)==="Line"||e===0||n===0)this.applyPath(t,o,e,n,i),t.stroke();else if(u==="inside")t.lineWidth=p*2,t.save(),this.applyPath(t,o,e,n,i),t.clip(),t.stroke(),t.restore();else if(u==="outside"){t.save(),t.beginPath();const S=Math.max(e,n,2e4);t.rect(-S,-S,S*2,S*2),this._tracePath(t,o,e,n,i),t.clip("evenodd"),t.lineWidth=p*2,t.beginPath(),this.applyPath(t,o,e,n,i),t.stroke(),t.restore()}else t.lineWidth=p,this.applyPath(t,o,e,n,i),t.stroke();t.restore()}getPerimeter(t,s,o){switch(this.ensurePathPoints(t),t==null?void 0:t.type){case"Rectangle":return(s+o)*2;case"Ellipse":{const e=Math.abs(s)/2,n=Math.abs(o)/2,i=Math.abs(t.sweepAngle??360),a=t.ratio||0,r=Math.PI*(3*(e+n)-Math.sqrt((3*e+n)*(e+3*n)));if(i>=360&&a<=0)return r;let l=i/360*r;if(a>0){const d=Math.PI*(3*(e*a+n*a)-Math.sqrt((3*e*a+n*a)*(e*a+3*n*a)));l+=i/360*d,i<360&&(l+=2*Math.sqrt((e-e*a)**2+(n-n*a)**2))}else i<360&&(l+=2*Math.max(e,n));return isNaN(l)?0:l}case"Line":return t.length||Math.sqrt(s*s+o*o);case"Triangle":return s+Math.sqrt((s/2)**2+o**2)*2;case"Polygon":{const e=t.sides||3,n=t.radius||Math.min(s,o)/2;return 2*e*n*Math.sin(Math.PI/e)}case"Star":{const e=t.points||5,n=t.outer_radius||Math.min(s,o)/2,i=t.inner_radius||n/2,a=Math.PI/e;return Math.sqrt(n*n+i*i-2*n*i*Math.cos(a))*e*2}case"Path":{const e=t.points||[];if(e.length<2)return t.length||0;let n=0,i=e[0].x,a=e[0].y;for(let r=1;r<e.length;r++){const l=e[r];if(l.moveTo){i=l.x,a=l.y;continue}const d=i,p=a,u=e[r-1].out_x,m=e[r-1].out_y;if(u!==void 0||l.in_x!==void 0?n+=this.getBezierLength(d,p,u??d,m??p,l.in_x??l.x,l.in_y??l.y,l.x,l.y):n+=Math.sqrt((l.x-d)**2+(l.y-p)**2),i=l.x,a=l.y,l.closePath||r===e.length-1&&(t.is_closed||t.isClosed)){const h=i,f=a,v=[...e.slice(0,r+1)].reverse().find(M=>M.moveTo)||e[0],g=v.x,c=v.y,b=e[r].out_x,S=e[r].out_y,w=v.in_x,C=v.in_y;b!==void 0||w!==void 0?n+=this.getBezierLength(h,f,b??h,S??f,w??g,C??c,g,c):n+=Math.sqrt((g-h)**2+(c-f)**2)}}return n}default:return(s+o)*2}}getBezierLength(t,s,o,e,n,i,a,r,l=10){let d=0,p=t,u=s;for(let m=1;m<=l;m++){const h=m/l,f=1-h,v=h*h,g=f*f,c=g*f,b=v*h,S=c*t+3*g*h*o+3*f*v*n+b*a,w=c*s+3*g*h*e+3*f*v*i+b*r,C=S-p,M=w-u;d+=Math.sqrt(C*C+M*M),p=S,u=w}return d}getBezierTAtLength(t,s,o,e,n,i,a,r,l,d=20){if(t<=0)return 0;let p=0,u=s,m=o;for(let h=1;h<=d;h++){const f=h/d,v=1-f,g=f*f,c=v*v,b=c*v,S=g*f,w=b*s+3*c*f*e+3*v*g*i+S*r,C=b*o+3*c*f*n+3*v*g*a+S*l,M=w-u,I=C-m,_=Math.sqrt(M*M+I*I);if(p+_>=t){const E=t-p,P=_===0?0:E/_;return(h-1+P)/d}p+=_,u=w,m=C}return 1}getPointOnPath(t,s,o,e){if(this.ensurePathPoints(t),(t==null?void 0:t.type)==="Path"){const n=t.points||[];if(n.length<2)return{x:0,y:0,angle:0};let i=1/0,a=-1/0,r=1/0,l=-1/0;n.forEach(c=>{typeof c.x=="number"&&typeof c.y=="number"&&(i=Math.min(i,c.x),a=Math.max(a,c.x),r=Math.min(r,c.y),l=Math.max(l,c.y),c.out_x!==void 0&&(i=Math.min(i,c.out_x),a=Math.max(a,c.out_x)),c.out_y!==void 0&&(r=Math.min(r,c.out_y),l=Math.max(l,c.out_y)),c.in_x!==void 0&&(i=Math.min(i,c.in_x),a=Math.max(a,c.in_x)),c.in_y!==void 0&&(r=Math.min(r,c.in_y),l=Math.max(l,c.in_y)))});const d=(i+a)/2,p=(r+l)/2,m=this.getPerimeter(t,s,o)*e;let h=0;const f=[];let v=n[0],g=n[0];for(let c=1;c<n.length;c++){const b=n[c];if(b.moveTo){v=b,g=b;continue}f.push({p0:v,p1:b}),(b.closePath||c===n.length-1&&(t.is_closed||t.isClosed))&&f.push({p0:b,p1:g}),v=b}for(const c of f){const b=c.p0,S=c.p1;let w=0;const C=b.out_x!==void 0||S.in_x!==void 0;if(C?w=this.getBezierLength(b.x,b.y,b.out_x??b.x,b.out_y??b.y,S.in_x??S.x,S.in_y??S.y,S.x,S.y):w=Math.sqrt((S.x-b.x)**2+(S.y-b.y)**2),h+w>=m||c===f[f.length-1]){let M=0;if(C)return M=this.getBezierTAtLength(m-h,b.x,b.y,b.out_x??b.x,b.out_y??b.y,S.in_x??S.x,S.in_y??S.y,S.x,S.y,20),this.getBezierPointAndAngle(M,b,S,d,p);{M=w===0?0:(m-h)/w;const I=b.x+(S.x-b.x)*M-d,_=b.y+(S.y-b.y)*M-p,E=Math.atan2(S.y-b.y,S.x-b.x);return{x:I,y:_,angle:E}}}h+=w}}else if(t.type==="Ellipse"){const n=Math.abs(s)/2,i=Math.abs(o)/2,a=t.sweepAngle??360,l=((t.startAngle??0)+a*e)*Math.PI/180,d=n*Math.cos(l),p=i*Math.sin(l),u=-n*Math.sin(l),m=i*Math.cos(l),h=Math.atan2(m,u);return{x:d,y:p,angle:h}}else if((t==null?void 0:t.type)==="Rectangle"){const n=Math.abs(s),i=Math.abs(o),r=(n+i)*2*e;let l=0,d=0,p=0;return r<n?(l=-n/2+r,d=-i/2,p=0):r<n+i?(l=n/2,d=-i/2+(r-n),p=Math.PI/2):r<2*n+i?(l=n/2-(r-(n+i)),d=i/2,p=Math.PI):(l=-n/2,d=i/2-(r-(2*n+i)),p=-Math.PI/2),{x:l,y:d,angle:p}}return{x:0,y:0,angle:0}}getBezierPointAndAngle(t,s,o,e,n){const i=s.x,a=s.y,r=s.out_x??s.x,l=s.out_y??s.y,d=o.in_x??o.x,p=o.in_y??o.y,u=o.x,m=o.y,h=1-t,f=t*t,v=h*h,g=v*h,c=f*t,b=g*i+3*v*t*r+3*h*f*d+c*u-e,S=g*a+3*v*t*l+3*h*f*p+c*m-n,w=3*v*(r-i)+6*h*t*(d-r)+3*f*(u-d),C=3*v*(l-a)+6*h*t*(p-l)+3*f*(m-p),M=Math.atan2(C,w);return{x:b,y:S,angle:M}}applyAbsoluteTransform(t,s,o){if(!o.get(s))return;const n=[];let i=s;for(;i;){n.unshift(i);const a=o.get(i);i=a==null?void 0:a.parentId}n.forEach(a=>{this.applyObjectTransform(t,a)})}applyObjectTransform(t,s){var h,f,v;const o=this.objectStates.get(s);if(!o)return;t.translate(o.x,o.y),t.rotate((o.rotation??0)*Math.PI/180);const e=o.skew_x||0,n=o.skew_y||0;if(e!==0||n!==0){const g=Math.tan(e*Math.PI/180),c=Math.tan(n*Math.PI/180);t.transform(1+g*c,c,g,1,0,0)}const i=o.rotate_x!==void 0?o.rotate_x:((h=o.transform)==null?void 0:h.rotate_x)??0,a=o.rotate_y!==void 0?o.rotate_y:((f=o.transform)==null?void 0:f.rotate_y)??0,l=1+(o.translate_z!==void 0?o.translate_z:((v=o.transform)==null?void 0:v.translate_z)??0)/1e3,d=(o.flip_x===!0?-1:1)*Math.cos(a*Math.PI/180)*l,p=(o.flip_y===!0?-1:1)*Math.cos(i*Math.PI/180)*l,u=(o.scale_x??1)*d,m=(o.scale_y??1)*p;t.scale(u,m)}applyInnerGlowOverlay(t,s,o,e,n,i,a){var g,c;const r=a||s.style||{},l=r==null?void 0:r.effect,p=((r==null?void 0:r.effects)||(l?[l]:[])).find(b=>b.isEnabled!==!1&&b.type==="Glow"&&(b.mode==="inner"||b.mode==="Inner Glow"));if(!p)return;t.save(),t.beginPath(),this.applyPath(t,o,e,n,i),t.clip();const u=p.blur||10,m=1e4,h=t.getTransform();let f=p.color||"white";(c=(g=this.artboard)==null?void 0:g.tokens)!=null&&c.colors&&this.artboard.tokens.colors[f]&&(f=this.artboard.tokens.colors[f]),t.shadowColor=f,t.shadowBlur=u,t.shadowOffsetX=m*h.a,t.shadowOffsetY=m*h.b,t.translate(-m,0),t.lineWidth=u+5,t.strokeStyle=f;const v=Math.min(p.intensity||1,5);for(let b=0;b<v;b++)t.beginPath(),this.applyPath(t,o,e,n,i),t.stroke();t.restore()}applyArtEffectOverlay(t,s,o,e,n,i){var m,h,f,v,g;const a=this.objectStates.get(s.id),r=((m=a==null?void 0:a.style)==null?void 0:m.artEffect)||s.artEffect||((h=s.style)==null?void 0:h.artEffect);if(!r||!r.enabled)return;const l=r.type,d=r.intensity??.5,p=r.speed??1,u=r.scale??10;if(l==="acid_gradient"||l==="acid_rave"||l==="shimmer"||l==="glint_overlay"||l==="halftone"||l==="noise"||l==="scanlines"||l==="chromatic_aberration"||l==="pixelate"||l==="glitch"||l==="fold_overlay"||l==="crumple_overlay"){if(t.save(),this.applyPath(t,o,e,n,i),t.clip(),l==="shimmer"){const b=this.currentTime*p%2/2,S=t.createLinearGradient(-e,-n,e,n);S.addColorStop(Math.max(0,b-.2),"rgba(255,255,255,0)"),S.addColorStop(b,`rgba(255,255,255,${d*.8})`),S.addColorStop(Math.min(1,b+.2),"rgba(255,255,255,0)"),t.fillStyle=S,t.globalCompositeOperation="screen",t.fillRect(-e/2,-n/2,e,n),t.globalCompositeOperation="source-over"}else if(l==="glint_overlay"){let S=((this._lastPointerPos||{x:0}).x-(((f=s.transform)==null?void 0:f.x)??0)+300)/600;S=Math.max(-.2,Math.min(1.2,S));const w=t.createLinearGradient(-e,-n,e,n);w.addColorStop(Math.max(0,S-.15),"rgba(255,255,255,0)"),w.addColorStop(Math.max(0,Math.min(1,S)),`rgba(255,255,255,${d})`),w.addColorStop(Math.min(1,S+.15),"rgba(255,255,255,0)"),t.fillStyle=w,t.globalCompositeOperation="screen",t.fillRect(-e/2,-n/2,e,n),t.globalCompositeOperation="source-over"}else if(l==="fold_overlay"){const c=this._lastPointerPos||{x:0,y:0},b=c.x-(((v=s.transform)==null?void 0:v.x)??0),S=c.y-(((g=s.transform)==null?void 0:g.y)??0),w=t.createLinearGradient(b>0?-e/2:e/2,S>0?-n/2:n/2,b>0?e/2:-e/2,S>0?n/2:-n/2);w.addColorStop(0,`rgba(0,0,0,${d*.6})`),w.addColorStop(.4,"rgba(0,0,0,0)"),w.addColorStop(.5,`rgba(255,255,255,${d*.4})`),w.addColorStop(1,`rgba(0,0,0,${d*.2})`),t.fillStyle=w,t.globalCompositeOperation="overlay",t.fillRect(-e/2,-n/2,e,n),t.globalCompositeOperation="source-over",t.beginPath(),b>0&&S>0?(t.moveTo(e/2-40,n/2),t.lineTo(e/2,n/2-40),t.lineTo(e/2-40,n/2-40)):b<0&&S>0?(t.moveTo(-e/2+40,n/2),t.lineTo(-e/2,n/2-40),t.lineTo(-e/2+40,n/2-40)):b>0&&S<0?(t.moveTo(e/2-40,-n/2),t.lineTo(e/2,-n/2+40),t.lineTo(e/2-40,-n/2+40)):(t.moveTo(-e/2+40,-n/2),t.lineTo(-e/2,-n/2+40),t.lineTo(-e/2+40,-n/2+40)),t.closePath(),t.fillStyle="#ffffff",t.shadowColor="rgba(0,0,0,0.5)",t.shadowBlur=10,t.shadowOffsetX=b>0?-2:2,t.shadowOffsetY=S>0?-2:2,t.fill()}else if(l==="crumple_overlay"){const c=Math.floor(e/u),b=document.createElement("canvas");b.width=c,b.height=Math.floor(n/u);const S=b.getContext("2d"),w=S.createImageData(b.width,b.height);for(let C=0;C<w.data.length;C+=4){const M=Math.random()>.95?150:255;w.data[C]=M,w.data[C+1]=M,w.data[C+2]=M,w.data[C+3]=255*d}S.putImageData(w,0,0),t.globalCompositeOperation="multiply",t.imageSmoothingEnabled=!1,t.drawImage(b,-e/2,-n/2,e,n)}else if(l==="acid_gradient"||l==="acid_rave"){const c=this.currentTime*p,b=r.color1,S=r.color2,w=t.createLinearGradient(-e/2,-n/2,e/2,n/2);if(b&&S){const C=c*60%360;w.addColorStop(0,this._shiftHue(b,C,d*.7)),w.addColorStop(1,this._shiftHue(S,(C+180)%360,d*.7))}else{const C=c*100%360,M=(C+180)%360;w.addColorStop(0,`hsla(${C}, 80%, 50%, ${d*.5})`),w.addColorStop(1,`hsla(${M}, 80%, 50%, ${d*.5})`)}t.fillStyle=w,t.globalCompositeOperation="screen",t.fillRect(-e/2,-n/2,e,n)}else if(l==="halftone"){const c=Math.max(2,u*(1-d*.8)),b=document.createElement("canvas");b.width=c,b.height=c;const S=b.getContext("2d");if(S){S.fillStyle="black",S.beginPath(),S.arc(c/2,c/2,c/2*d,0,Math.PI*2),S.fill();const w=t.createPattern(b,"repeat");w&&(t.globalAlpha=.3*d,t.fillStyle=w,t.fillRect(-e/2,-n/2,e,n))}}else if(l==="noise"){const c=Math.floor(e*n*d*.02);t.globalAlpha=.4*d;for(let b=0;b<c;b++){const S=Math.random()>.5?255:0;t.fillStyle=`rgba(${S}, ${S}, ${S}, ${.5+Math.random()*.5})`,t.fillRect(-e/2+Math.random()*e,-n/2+Math.random()*n,2,2)}}else if(l==="scanlines"){t.globalAlpha=.2*d,t.strokeStyle="rgba(0,0,0,0.5)",t.lineWidth=1;for(let c=-n/2;c<n/2;c+=4)t.beginPath(),t.moveTo(-e/2,c),t.lineTo(e/2,c),t.stroke()}else if(l==="chromatic_aberration"){const c=5*d;t.globalCompositeOperation="screen",t.globalAlpha=.5,t.fillStyle="cyan",t.fillRect(-e/2-c,-n/2,e,n),t.fillStyle="magenta",t.fillRect(-e/2+c,-n/2,e,n)}else if(l==="pixelate"){const c=Math.max(2,Math.round(u*(1-d*.5))),b=document.createElement("canvas"),S=Math.max(1,Math.ceil(e/c)),w=Math.max(1,Math.ceil(n/c));b.width=S,b.height=w;const C=b.getContext("2d");if(C){C.imageSmoothingEnabled=!1;const M=t.getTransform(),I=M.e-e/2,_=M.f-n/2;C.drawImage(t.canvas,I,_,e,n,0,0,S,w),t.imageSmoothingEnabled=!1,t.drawImage(b,0,0,S,w,-e/2,-n/2,e,n),t.imageSmoothingEnabled=!0}}else if(l==="glitch"){const c=this.currentTime*p,b=r.chaosAmount??.2,S=Math.max(3,Math.floor(8*d)),w=d*e*.15;t.globalCompositeOperation="screen",t.globalAlpha=d*.4;const C=w*.3;t.fillStyle="rgba(255, 0, 0, 0.4)",t.fillRect(-e/2+C,-n/2,e,n),t.fillStyle="rgba(0, 255, 255, 0.4)",t.fillRect(-e/2-C,-n/2,e,n),t.globalCompositeOperation="source-over",t.globalAlpha=1;const M=n/S;for(let I=0;I<S;I++){const _=Math.sin(I*127.1+c*311.7*p)*43758.5,E=_-Math.floor(_);if(E>1-b){const P=(E-(1-b))/b*w*(Math.random()>.5?1:-1),L=-n/2+I*M,k=t.getTransform(),A=k.e-e/2+P,T=k.f+L;t.save(),t.beginPath(),t.rect(-e/2,L,e,M),t.clip(),t.globalAlpha=.8,t.drawImage(t.canvas,A,T,e,M,-e/2+P,L,e,M),t.restore()}}}t.restore()}}_shiftHue(t,s,o){let e=0,n=0,i=0;if(t.startsWith("#")){const m=t.replace("#","");e=parseInt(m.substring(0,2),16)/255,n=parseInt(m.substring(2,4),16)/255,i=parseInt(m.substring(4,6),16)/255}const a=Math.max(e,n,i),r=Math.min(e,n,i);let l=0,d=0,p=(a+r)/2;if(a!==r){const m=a-r;switch(d=p>.5?m/(2-a-r):m/(a+r),a){case e:l=((n-i)/m+(n<i?6:0))/6;break;case n:l=((i-e)/m+2)/6;break;case i:l=((e-n)/m+4)/6;break}}return`hsla(${(((l*360+s)%360+360)%360).toFixed(0)}, ${(d*100).toFixed(0)}%, ${(p*100).toFixed(0)}%, ${o})`}applyBackgroundBlurGlass(t,s,o,e,n,i,a){const r=i.radius??10,l=i.opacity!==void 0?this.normalizeOpacity(i.opacity):.5,d=i.noise??0,p=i.color??"rgba(255,255,255,0.2)";t.save(),this.applyPath(t,s,o,e,n),t.clip();const u=t.getTransform(),m=t.canvas;try{const v=document.createElement("canvas");v.width=Math.max(1,Math.ceil(o)),v.height=Math.max(1,Math.ceil(e));const g=v.getContext("2d");if(g){g.save(),g.translate(o/2,e/2);const c=i.magnification||1;if(c!==1&&g.scale(c,c),typeof u.inverse=="function"){const w=u.inverse();g.transform(w.a,w.b,w.c,w.d,w.e,w.f)}else{const w=u.a*u.d-u.b*u.c;w!==0&&g.transform(u.d/w,-u.b/w,-u.c/w,u.a/w,(u.c*u.f-u.d*u.e)/w,(u.b*u.e-u.a*u.f)/w)}g.drawImage(m,0,0),g.restore();const b=document.createElement("canvas");b.width=v.width,b.height=v.height;const S=b.getContext("2d");S.filter=`blur(${r}px)`,S.drawImage(v,0,0),t.globalCompositeOperation="destination-out",t.fillRect(-o/2,-e/2,o,e),t.globalCompositeOperation="source-over",t.globalAlpha=1,t.drawImage(b,-o/2,-e/2,o,e)}}catch(v){console.error("Background blur failed:",v)}t.globalCompositeOperation="source-over",t.globalAlpha=l,t.fillStyle=p,t.fillRect(-o/2,-e/2,o,e),t.globalAlpha=1;const h=t.createLinearGradient(-o/2,-e/2,o/2,e/2);if(h.addColorStop(0,"rgba(255,255,255,0.12)"),h.addColorStop(.3,"rgba(255,255,255,0.04)"),h.addColorStop(.5,"rgba(255,255,255,0.0)"),h.addColorStop(1,"rgba(255,255,255,0.0)"),t.fillStyle=h,t.fillRect(-o/2,-e/2,o,e),d>0){if(t.globalAlpha=d/100,!this._noiseTileCanvas){const g=document.createElement("canvas");g.width=64,g.height=64;const c=g.getContext("2d"),b=c.createImageData(64,64),S=b.data;for(let w=0;w<S.length;w+=4){const C=Math.floor(Math.random()*255);S[w]=C,S[w+1]=C,S[w+2]=C,S[w+3]=18}c.putImageData(b,0,0),this._noiseTileCanvas=g}const v=t.createPattern(this._noiseTileCanvas,"repeat");v&&(t.fillStyle=v,t.fillRect(-o/2,-e/2,o,e))}t.restore(),t.save(),t.globalAlpha=1,(a==null?void 0:a.stroke)&&a.stroke.width>0&&a.stroke.isEnabled!==!1?(this.applyPath(t,s,o,e,n),this.applyStrokeAlignment(t,a,s,o,e,n)):(t.strokeStyle="rgba(255, 255, 255, 0.25)",t.lineWidth=1.5,this.applyPath(t,s,o,e,n),t.stroke()),t.restore()}applyPath(t,s,o,e,n){s!=null&&s.data&&(s.type==="Path"||s.type==="Subtract"||s.type==="Union"||s.type==="Intersect"||s.type==="Exclude"||s.type),t.beginPath(),this._tracePath(t,s,o,e,n)}_tracePath(t,s,o,e,n){if(s){if(this.ensurePathPoints(s),(s==null?void 0:s.type)==="Rectangle"||s.type==="Image"){const i=n!==void 0?n:s.corner_radius??0;this.drawRoundRect(t,-o/2,-e/2,o,e,i)}else if(s.type==="Line")t.moveTo(-o/2,0),t.lineTo(o/2,0);else if(s.type==="Ellipse"||s.type==="circle"){const{startAngle:i=0,sweepAngle:a=360,ratio:r=0}=s,l=o/2,d=e/2,p=i*Math.PI/180,u=a*Math.PI/180,m=p+u;a>=360&&r<=0?t.ellipse(0,0,l,d,0,0,Math.PI*2):(t.ellipse(0,0,l,d,0,p,m,!1),r>0?t.ellipse(0,0,l*r,d*r,0,m,p,!0):t.lineTo(0,0),t.closePath())}else if(s.type==="Triangle")t.moveTo(0,-e/2),t.lineTo(o/2,e/2),t.lineTo(-o/2,e/2),t.closePath();else if(s.type==="Polygon"){const i=s.sides||3,a=s.radius||Math.min(o,e)/2;for(let r=0;r<i;r++){const l=r*2*Math.PI/i-Math.PI/2,d=a*Math.cos(l),p=a*Math.sin(l);r===0?t.moveTo(d,p):t.lineTo(d,p)}t.closePath()}else if(s.type==="Star"){const i=s.points||5,a=s.outer_radius||Math.min(o,e)/2;let r=s.inner_radius;r==null?r=a*.382:r<=1&&(r=a*r);for(let l=0;l<i*2;l++){const d=l*Math.PI/i-Math.PI/2,p=l%2===0?a:r,u=p*Math.cos(d),m=p*Math.sin(d);l===0?t.moveTo(u,m):t.lineTo(u,m)}t.closePath()}else if(((s==null?void 0:s.type)==="Path"||s.type==="Subtract"||s.type==="Union"||s.type==="Intersect"||s.type==="Exclude"||s.type==="BooleanOperation")&&s.points){this.frameCount%300===0&&this.log("[Engine] Tracing Path:",s.points.length,"points");let i=1/0,a=-1/0,r=1/0,l=-1/0;if(s.points.forEach(u=>{typeof u.x=="number"&&typeof u.y=="number"&&(i=Math.min(i,u.x),a=Math.max(a,u.x),r=Math.min(r,u.y),l=Math.max(l,u.y),u.out_x!==void 0&&(i=Math.min(i,u.out_x),a=Math.max(a,u.out_x)),u.out_y!==void 0&&(r=Math.min(r,u.out_y),l=Math.max(l,u.out_y)),u.in_x!==void 0&&(i=Math.min(i,u.in_x),a=Math.max(a,u.in_x)),u.in_y!==void 0&&(r=Math.min(r,u.in_y),l=Math.max(l,u.in_y)))}),i===1/0)return;let d=(i+a)/2,p=(r+l)/2;if(isNaN(d)||isNaN(p)){this.warn("[Engine] Invalid path center:",d,p);return}s.points.forEach((u,m)=>{if(m===0||u.moveTo)t.moveTo(u.x-d,u.y-p);else{const h=s.points[m-1];if(!h)return;const f=(h.out_x??h.x)-d,v=(h.out_y??h.y)-p,g=(u.in_x??u.x)-d,c=(u.in_y??u.y)-p;isNaN(f)||isNaN(g)||isNaN(u.x)?t.lineTo(u.x-d,u.y-p):t.bezierCurveTo(f,v,g,c,u.x-d,u.y-p)}if(u.closePath||m===s.points.length-1&&(s.is_closed||s.isClosed)){const h=[...s.points.slice(0,m+1)].reverse().find(f=>f.moveTo)||s.points[0];h&&(u.out_x!==void 0||h.in_x!==void 0)&&t.bezierCurveTo((u.out_x??u.x)-d,(u.out_y??u.y)-p,(h.in_x??h.x)-d,(h.in_y??h.y)-p,h.x-d,h.y-p),t.closePath()}})}else if(s.points&&Array.isArray(s.points)){let i=1/0,a=-1/0,r=1/0,l=-1/0;s.points.forEach(u=>{i=Math.min(i,u.x),a=Math.max(a,u.x),r=Math.min(r,u.y),l=Math.max(l,u.y)});const d=(i+a)/2,p=(r+l)/2;s.points.forEach((u,m)=>{if(m===0)t.moveTo(u.x-d,u.y-p);else{const h=s.points[m-1];h.out_x!==void 0||u.in_x!==void 0?t.bezierCurveTo((h.out_x??h.x)-d,(h.out_y??h.y)-p,(u.in_x??u.x)-d,(u.in_y??u.y)-p,u.x-d,u.y-p):t.lineTo(u.x-d,u.y-p)}(u.closePath||m===s.points.length-1&&(s.is_closed||s.isClosed))&&t.closePath()})}}}renderInputBox(t,s){var zt,Gt,Dt,te,ie,ce,ve,_e,ge,Ee,Zt,Me,Re,Ie,de,me,Ae,he;const o=this.objectStates.get(s.id),e=(o==null?void 0:o.options)||s.options||{},n=s.geometry||{},i=s.style||{},a=n.width||250,r=n.height||45,l=this.focusedId===s.id,d=this.lastHoveredObjectId===s.id,p=e.previewState||"default",u=p!=="default"?p:l?"focused":d?"hovered":"default",m=e.label||{visible:!0,text:"Label"},h=e.helperText||{visible:!1,text:"Helper text"},f=e.leftIcon||{visible:!1},v=e.rightIcon||{visible:!1},g=e.inputType==="textarea"||e.multiline===!0,c=u==="disabled",b=u==="error",S=n.corner_radius??n.cornerRadius,w=Array.isArray(S)?{tl:S[0],tr:S[1],br:S[2],bl:S[3]}:S&&typeof S=="object"?S:void 0,C=Number(e.cornerRadius??e.corner_radius??S??e.radius??8),M=e.corners??w??{tl:C,tr:C,bl:C,br:C},I=[Number(M.tl??C),Number(M.tr??C),Number(M.br??C),Number(M.bl??C)],_=(mt,rt,z,K,G,x=0)=>{const Q=Math.max(0,z-x*2),H=Math.max(0,K-x*2);let[lt,kt,At,Ht]=G.map(qt=>Math.max(0,(Number(qt)||0)-x));const Ut=Math.min(Q,H)/2;lt=Math.min(lt,Ut),kt=Math.min(kt,Ut),At=Math.min(At,Ut),Ht=Math.min(Ht,Ut),t.beginPath(),t.roundRect?t.roundRect(mt+x,rt+x,Q,H,[lt,kt,At,Ht]):(t.moveTo(mt+x+lt,rt+x),t.lineTo(mt+x+Q-kt,rt+x),t.arcTo(mt+x+Q,rt+x,mt+x+Q,rt+x+kt,kt),t.lineTo(mt+x+Q,rt+x+H-At),t.arcTo(mt+x+Q,rt+x+H,mt+x+Q-At,rt+x+H,At),t.lineTo(mt+x+Ht,rt+x+H),t.arcTo(mt+x,rt+x+H,mt+x,rt+x+H-Ht,Ht),t.lineTo(mt+x+lt,rt+x),t.arcTo(mt+x,rt+x,mt+x+lt,rt+x,lt),t.closePath())};let E=e.backgroundColor||((zt=i.fill)==null?void 0:zt.color)||"rgba(31, 41, 55, 1)",P=e.borderColor||((Dt=(Gt=i.stroke)==null?void 0:Gt.fill)==null?void 0:Dt.color)||((te=i.stroke)==null?void 0:te.color)||"rgba(55, 65, 81, 1)",L=Number(e.borderWidth??((ie=i.stroke)==null?void 0:ie.width)??1),k=e.color||((ce=i.fill)==null?void 0:ce.color)||"#ffffff",A=e.placeholderColor||"rgba(156, 163, 175, 1)",T=e.fontSize||14,R=e.caretColor||"#3b82f6";const F=`${u}Style`,O=e[F];O?(O.backgroundColor!==void 0&&(E=O.backgroundColor),O.borderColor!==void 0&&(P=O.borderColor),O.borderWidth!==void 0&&(L=O.borderWidth),O.color!==void 0&&(k=O.color),O.placeholderColor!==void 0&&(A=O.placeholderColor),O.fontSize!==void 0&&(T=O.fontSize),O.caretColor!==void 0&&(R=O.caretColor)):u==="focused"?(P=e.focusBorderColor||"rgba(59, 130, 246, 1)",L=Math.max(L,2)):u==="hovered"||u==="hover"?(P=e.hoverBorderColor||P,E=e.hoverBackgroundColor||E):c?(E=e.disabledBackgroundColor||"rgba(31, 41, 55, 0.6)",P=e.disabledBorderColor||"rgba(55, 65, 81, 0.4)"):b&&(P="rgba(239, 68, 68, 1)",L=Math.max(L,2));const W=L>0?L/2:0,V=this.createCanvasFill(t,E,a,r);if(V&&E!=="transparent"&&(_(-a/2,-r/2,a,r,I,W),t.fillStyle=V,t.fill()),L>0){const mt=this.createCanvasFill(t,P,a,r);mt&&P!=="transparent"&&(_(-a/2,-r/2,a,r,I,W),t.strokeStyle=mt,t.lineWidth=L,t.lineCap="round",t.lineJoin="round",t.stroke())}if((u==="focused"||u==="focus")&&!c){t.save();const mt=-3,rt=I.map(G=>Math.max(0,G+3));_(-a/2+mt,-r/2+mt,a-mt*2,r-mt*2,rt);const z=((ve=e.activeStyle)==null?void 0:ve.borderColor)||R||"rgba(59, 130, 246, 0.4)",K=this.createCanvasFill(t,z,a,r)||"rgba(59, 130, 246, 0.4)";t.strokeStyle=K,t.lineWidth=2,t.lineCap="round",t.lineJoin="round",t.stroke(),t.restore()}const U=e.fontFamily||"Inter",D=e.fontWeight||400,Y=T,ot=e.inputType==="number"&&((_e=e.number)==null?void 0:_e.showSteppers)!==!1,J=24,at=ot?J+4:0,j=String(e.text??e.value??"");let it="Enter text...";if(e.inputType==="tel")it=`${((ge=e.tel)==null?void 0:ge.dialCode)||"+1"} (555) 000-0000`;else if(e.inputType==="number"){const mt=(Ee=e.number)!=null&&Ee.prefix?`${e.number.prefix} `:"",rt=(Zt=e.number)!=null&&Zt.suffix?` ${e.number.suffix}`:"";it=`${mt}0.00${rt}`}else e.inputType==="email"?it="user@example.com":e.inputType==="search"?it="Search anything...":e.inputType==="url"?it="https://example.com":e.inputType==="password"?it="••••••••":e.inputType==="textarea"&&(it="Enter text...");const B=e.placeholder||it,X=!j,N=e.inputType==="password",ct=v.mode==="password-toggle"||N&&v.visible!==!1,Mt=v.mode==="clear"||e.inputType==="search"&&!!j,bt=(mt,rt)=>{var lt;let z=mt.svgPath||"";if(z||(rt?e.inputType==="search"&&(z="M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z"):ct?z=e.passwordVisible?"M17.94 17.94A10.07 10.07 0 0 1 12 20c-7 0-11-8-11-8a18.45 18.45 0 0 1 5.06-5.94M9.9 4.24A9.12 9.12 0 0 1 12 4c7 0 11 8 11 8a18.5 18.5 0 0 1-2.16 3.19m-6.72-1.07a3 3 0 1 1-4.24-4.24M1 1l22 22":"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z M12 9a3 3 0 100 6 3 3 0 000-6z":Mt&&(z="M18 6L6 18M6 6l12 12")),!(mt.visible||!!z&&(!rt&&(ct||Mt)||rt&&e.inputType==="search"))||!z)return;const G=mt.size||16,x=(mt.offset??16)+(rt?0:at),Q=typeof mt.color=="string"?mt.color:((lt=mt.color)==null?void 0:lt.color)||"#9ca3af",H=rt?-(a/2)+x:a/2-x;if(t.save(),t.translate(H,0),!z.startsWith("<svg")){const kt=new Path2D(z),At=G/24;t.scale(At,At),t.translate(-12,-12),z.includes("M18 6L6 18")||z.includes("M1 1l22 22")||z.includes("M21 21")?(t.strokeStyle=Q,t.lineWidth=2,t.lineCap="round",t.stroke(kt)):(t.fillStyle=Q,t.fill(kt))}t.restore()};if(bt(f,!0),bt(v,!1),ot){const mt=a/2-J-4;t.save(),t.strokeStyle=P||"rgba(55, 65, 81, 0.5)",t.lineWidth=1,t.beginPath(),t.moveTo(mt,-r/2+6),t.lineTo(mt,r/2-6),t.stroke(),t.beginPath(),t.moveTo(mt,0),t.lineTo(a/2-4,0),t.stroke(),t.fillStyle=k||"rgba(156, 163, 175, 0.8)",t.font=`600 8px "${U}", sans-serif`,t.textAlign="center",t.textBaseline="middle",t.fillText("▲",mt+J/2,-r/4),t.fillText("▼",mt+J/2,r/4),t.restore()}const wt=((Me=e.padding)==null?void 0:Me.left)??e.inputPadding??12,gt=((Re=e.padding)==null?void 0:Re.right)??e.inputPadding??12,It=f.visible||e.inputType==="search",ut=v.visible||ct||Mt,Lt=It?(f.offset??16)+(f.size||16)/2+8:wt,Wt=ut?(v.offset??16)+(v.size||16)/2+8+at:gt+at,q=-(a/2)+Lt,ft=Math.max(0,a-Lt-Wt);let Bt=j||B;if(e.inputType==="number"&&j){const mt=(Ie=e.number)!=null&&Ie.prefix?`${e.number.prefix} `:"",rt=(de=e.number)!=null&&de.suffix?` ${e.number.suffix}`:"";Bt=`${mt}${j}${rt}`}const Ot=N&&j?e.passwordVisible?j:"•".repeat(j.length):Bt,Pt=X?A:k;if(t.font=`${D} ${Y}px "${U}", sans-serif`,t.fillStyle=Pt,t.textAlign="left",t.save(),t.beginPath(),t.rect(q-2,-r/2+4,ft+4,r-8),t.clip(),g){t.textBaseline="top";const mt=Ot.split(`
19
+ `);let rt=-r/2+(((me=e.padding)==null?void 0:me.top)??8);const z=Y*1.4,K=e.rows||3;let G=0,x=0;for(const Q of mt){if(G>=K)break;const H=Q.split(" ");let lt="";for(let kt=0;kt<H.length;kt++){const At=lt+H[kt]+" ";if(t.measureText(At).width>ft&&kt>0){if(G>=K)break;t.fillText(lt.trim(),q,rt),lt=H[kt]+" ",rt+=z,G++}else lt=At}G<K&&(t.fillText(lt.trim(),q,rt),x=t.measureText(lt.trim()).width,rt+=z,G++)}if(l&&!X&&Math.floor(performance.now()/500)%2===0){const Q=rt-z;t.fillStyle=R,t.fillRect(q+Math.min(x,ft),Q,1.5,Y)}}else{t.textBaseline="middle";const rt=t.measureText(Ot).width;let z=0;if(rt>ft&&(z=rt-ft),t.fillText(Ot,q-z,0),l&&Math.floor(performance.now()/500)%2===0){const K=X?q:q+rt-z;t.fillStyle=R,t.fillRect(K,-(Y/2),1.5,Y)}}if(t.restore(),e.showCharCounter){t.save();const mt=Number(e.maxLength||0),rt=mt>0?`${j.length}/${mt}`:`${j.length}`;t.font=`400 10px "${U}", sans-serif`,t.fillStyle=mt>0&&j.length>=mt?"#ef4444":"rgba(156, 163, 175, 0.6)",t.textAlign="right",t.textBaseline="top",t.fillText(rt,-(a/2)+a-8,-(r/2)+r+4),t.restore()}if(m.visible!==!1){const mt=!!(m.required||(Ae=e.validation)!=null&&Ae.required),rt=(m.text||"Label")+(mt?" *":""),z=m.fontSize||12,K=m.color||"rgba(156, 163, 175, 1)",G=m.position||"top",x=m.gap??m.offset??6;let Q=-(a/2),H=-(r/2)-x,lt="left",kt="bottom",At=`600 ${z}px "${m.fontFamily||U}", sans-serif`;G==="left"?(Q=-(a/2)-x,H=0,lt="right",kt="middle"):G==="bottom"?(Q=-(a/2),H=r/2+x,lt="left",kt="top"):G==="floating"&&(!!j||l?(Q=-(a/2)+12,H=-(r/2)+4,lt="left",kt="top",At=`600 ${Math.max(9,z-2)}px "${m.fontFamily||U}", sans-serif`):At=null),At&&(t.save(),t.font=At,t.fillStyle=K,t.textAlign=lt,t.textBaseline=kt,t.fillText(rt,Q,H),t.restore())}const vt=(he=e.validation)==null?void 0:he.errorMessage;if(b&&vt||h.visible===!0&&h.text){t.save();const mt=h.fontSize||11,rt=b?"#ef4444":h.color||"rgba(156, 163, 175, 1)",z=h.offset??6,K=b&&vt?vt:h.text;t.font=`400 ${mt}px "${U}", sans-serif`,t.fillStyle=rt,t.textAlign="left",t.textBaseline="top",t.fillText(K,-(a/2),r/2+z),t.restore()}c&&(t.save(),_(-a/2,-r/2,a,r,I),t.fillStyle="rgba(0, 0, 0, 0.3)",t.fill(),t.restore())}renderSlider(t,s){const o=this.objectStates.get(s.id),e=(o==null?void 0:o.geometry)||s.geometry,n=(o==null?void 0:o.options)||s.options||{},i=e.width||200,a=n.value??50,r=n.min??0,d=(n.max??100)-r,p=d===0?0:(a-r)/d,u=n.trackHeight||4,m=n.trackRoundedness??2,h=n.trackShape??"Rectangle",f=n.trackPath||"",v=n.accentColor||"#3b82f6",g=n.inactiveColor||"#374151",c=n.thumbShape||"Ellipse",b=n.thumbWidth??16,S=n.thumbHeight??16,w=n.thumbRoundedness??0,C=n.thumbColor||"#ffffff",M=n.thumbPath||"",I=n.thumbIcon||"",_=n.showValueTooltip??!1,E=n.tooltipBgColor||"#333333",P=n.tooltipColor||"#ffffff",L=n.tooltipOffsetX??0,k=n.tooltipOffsetY??-25,A=(J,at,j,it,B,X,N)=>{if((J==="Custom"||J==="Icon")&&N)try{const ct=new Path2D(N);if(t.save(),t.translate(at,j),J==="Icon"){const Mt=Math.min(it,B)/24;t.scale(Mt,Mt),t.translate(-12,-12)}t.fill(ct),t.restore();return}catch(ct){console.error("Error drawing slider shape in engine:",ct)}if(t.beginPath(),J==="Ellipse")t.ellipse(at,j,it/2,B/2,0,0,Math.PI*2);else if(J==="Rectangle")this.drawRoundRect(t,at-it/2,j-B/2,it,B,X);else if(J==="Triangle")t.moveTo(at,j-B/2),t.lineTo(at+it/2,j+B/2),t.lineTo(at-it/2,j+B/2),t.closePath();else if(J==="Diamond")t.moveTo(at,j-B/2),t.lineTo(at+it/2,j),t.lineTo(at,j+B/2),t.lineTo(at-it/2,j),t.closePath();else if(J==="Polygon"){const ct=s.geometry.sides||3,Mt=s.geometry.radius||Math.min(it,B)/2;for(let bt=0;bt<ct;bt++){const wt=bt*2*Math.PI/ct-Math.PI/2,gt=at+Mt*Math.cos(wt),It=j+Mt*Math.sin(wt);bt===0?t.moveTo(gt,It):t.lineTo(gt,It)}t.closePath()}else if(J==="Star"){const Mt=Math.min(it,B)/2,bt=Mt/2;for(let wt=0;wt<10;wt++){const gt=wt%2===0?Mt:bt,It=wt*Math.PI/5-Math.PI/2;t.lineTo(at+gt*Math.cos(It),j+gt*Math.sin(It))}t.closePath()}else J==="Line"&&(t.moveTo(at-it/2,j),t.lineTo(at+it/2,j));t.fill()},T=this.createCanvasFill(t,g,i,u);T&&(t.fillStyle=T,t.strokeStyle=T),h==="Line"?(t.lineWidth=u,t.beginPath(),t.moveTo(-i/2,0),t.lineTo(i/2,0),t.stroke()):A(h,0,0,i,u,m,f);const R=i-b,F=-i/2+b/2+p*R,O=F- -i/2;if(O>0){const J=this.createCanvasFill(t,v,i,u);J&&(t.fillStyle=J,t.strokeStyle=J),h==="Line"?(t.lineWidth=u,t.beginPath(),t.moveTo(-i/2,0),t.lineTo(F,0),t.stroke()):h==="Rectangle"&&(t.beginPath(),this.drawRoundRect(t,-i/2,-u/2,O,u,m),t.fill())}t.save(),t.translate(F,0);const W=t.getTransform(),V=Math.sqrt(W.a*W.a+W.b*W.b)||1;t.shadowColor="rgba(0,0,0,0.2)",t.shadowBlur=4*V,t.shadowOffsetY=1*V;const U=this.createCanvasFill(t,C,b,S);if(U&&(t.fillStyle=U),A(c,0,0,b,S,w,c==="Icon"?I:M),t.restore(),_){t.save(),t.translate(F+L,k);const J=Math.round(a).toString();t.font="10px Inter, sans-serif";const at=t.measureText(J),j=6,it=4,B=at.width+j*2,X=14+it;t.beginPath(),this.drawRoundRect(t,-B/2,-X/2,B,X,4),t.fillStyle=E,t.fill(),t.fillStyle=P,t.textAlign="center",t.textBaseline="middle",t.fillText(J,0,0),t.restore()}const D=n.label||{},Y=n.helperText||{},ot=n.fontFamily||"Inter";if(D.visible!==!1){const J=D.text||"Label",at=D.fontSize||12,j=D.color||"rgba(156, 163, 175, 1)",it=D.offset??8;t.font=`600 ${at}px "${ot}", sans-serif`,t.fillStyle=j,t.textAlign="left",t.textBaseline="bottom";const B=-(i/2),X=-(u/2)-it;t.fillText(J,B,X)}if(Y.visible===!0){const J=Y.text||"Helper text",at=Y.fontSize||11,j=Y.color||"rgba(156, 163, 175, 1)",it=Y.offset??6;t.font=`400 ${at}px "${ot}", sans-serif`,t.fillStyle=j,t.textAlign="left",t.textBaseline="top";const B=-(i/2),X=u/2+it;t.fillText(J,B,X)}}renderDropdown(t,s){var k;const o=this.objectStates.get(s.id);if(!o)return;const e=o.options||s.options||{},n=s.geometry.width||180,i=s.geometry.height||40,a=-n/2,r=-i/2,l=e.cornerRadius??e.corner_radius??6,d=e.disabled||e.previewState==="disabled",p=this.lastHoveredObjectId===s.id||e.previewState==="hover",u=(e.isOpen||e.previewState==="active")&&!d;let m=e.backgroundColor,h=e.borderColor,f=e.color||"#333333";d?(m=e.disabledBackgroundColor||"#f3f4f6",h=e.disabledBorderColor||"#e5e7eb",f=e.disabledColor||"#9ca3af"):u?(m=e.activeBackgroundColor||m,h=e.activeBorderColor||h,f=e.activeColor||f):p&&(m=e.hoverBackgroundColor||m,h=e.hoverBorderColor||h,f=e.hoverColor||f),m||(m="#ffffff"),h||(h="#e5e7eb"),t.save();const v=t.globalAlpha;t.globalAlpha=v*(e.opacity??1),t.beginPath(),this.drawRoundRect(t,a,r,n,i,l),t.fillStyle=this.createCanvasFill(t,typeof m=="string"?{type:"Solid",color:m}:m,n,i)||"#ffffff",t.fill();const g=e.borderWidth??1;g>0&&(t.beginPath(),this.drawRoundRect(t,a,r,n,i,l),t.strokeStyle=this.createCanvasFill(t,typeof h=="string"?{type:"Solid",color:h}:h,n,i)||"#e5e7eb",t.lineWidth=g,t.stroke());const c=12,b=e.chevronType||"chevron",S=e.chevronSize||16,w=(u?e.openIconColor:e.closedIconColor)||e.chevronColor||"#6b7280";if(b!=="none"){const A=a+n-c-S/2;t.save(),t.translate(A,0);const T=u?e.openIconAngle??180:e.closedIconAngle??0;if(t.rotate(T*Math.PI/180),t.strokeStyle=w,t.fillStyle=w,t.lineWidth=1.5,t.lineCap="round",t.lineJoin="round",b==="chevron")t.beginPath(),t.moveTo(-S/2,-S*.2),t.lineTo(0,S*.2),t.lineTo(S/2,-S*.2),t.stroke();else if(b==="custom"||b==="path"){const R=u&&e.openIconPath||e.closedIconPath;if(R){const F=new Path2D(R);t.save();const O=S/24;t.scale(O,O),t.translate(-12,-12),t.fill(F),t.restore()}}t.restore()}const C=e.selectedOption||e.placeholder||"Select...",M=e.fontSize||14,I=e.fontWeight||400,_=e.fontFamily||"Inter, sans-serif";t.font=`${I} ${M}px ${_}`;const E=d?e.disabledColor||"#9ca3af":!e.selectedOption&&e.placeholder?"#9ca3af":f;t.fillStyle=this.createCanvasFill(t,typeof E=="string"?{type:"Solid",color:E}:E,n,i)||"#333333",t.textAlign="left",t.textBaseline="middle";const P=b==="none"?0:S+8,L=n-c*2-P;if(t.save(),t.beginPath(),t.rect(a+c,r,L,i),t.clip(),t.fillText(C,a+c,0),t.restore(),u&&!d){const A=r+i+4,T=this.getResolvedDropdownOptions(s,e),R=e.itemHeight||32,F=e.listPadding??4,O=T.length*R+F*2,W=e.listCornerRadius??l;t.save();const V=e.listShadow||{},U=t.getTransform(),D=Math.sqrt(U.a*U.a+U.b*U.b)||1;t.shadowColor=typeof V.color=="string"?V.color:((k=V.color)==null?void 0:k.color)||"rgba(0,0,0,0.15)",t.shadowBlur=(V.blur??12)*D,t.shadowOffsetY=(V.offsetY??6)*D,t.shadowOffsetX=(V.offsetX??0)*D,t.beginPath(),this.drawRoundRect(t,a,A,n,O,W),t.fillStyle=this.createCanvasFill(t,typeof e.listBackgroundColor=="string"?{type:"Solid",color:e.listBackgroundColor}:e.listBackgroundColor||{type:"Solid",color:"#ffffff"},n,O)||"#ffffff",t.fill();const Y=e.listBorderWidth??1;Y>0&&(t.shadowColor="transparent",t.beginPath(),this.drawRoundRect(t,a,A,n,O,W),t.strokeStyle=this.createCanvasFill(t,typeof e.listBorderColor=="string"?{type:"Solid",color:e.listBorderColor}:e.listBorderColor||{type:"Solid",color:h},n,O)||"#e5e7eb",t.lineWidth=Y,t.stroke()),t.restore();const ot=e.itemFontSize||M,J=e.itemFontFamily||_;t.font=`${I} ${ot}px ${J}`,T.forEach((at,j)=>{const it=A+F+j*R;if(at===e.selectedOption)t.fillStyle=this.createCanvasFill(t,typeof e.itemSelectedBackgroundColor=="string"?{type:"Solid",color:e.itemSelectedBackgroundColor}:e.itemSelectedBackgroundColor||{type:"Solid",color:"#f3f4f6"},n,R)||"#f3f4f6",t.fillRect(a+Y,it,n-Y*2,R),t.fillStyle=e.itemSelectedColor||e.accentColor||f||"#374151";else if(t.fillStyle=e.listTextColor||f||"#333333",this.activeDropdownId===s.id&&this._lastPointerPos){const X=this._lastPointerPos.y-(A+F),N=Math.floor(X/R);j===N&&(t.fillStyle=this.createCanvasFill(t,typeof e.itemHoverBackgroundColor=="string"?{type:"Solid",color:e.itemHoverBackgroundColor}:e.itemHoverBackgroundColor||{type:"Solid",color:"#f9fafb"},n,R)||"#f9fafb",t.fillRect(a+Y,it,n-Y*2,R),t.fillStyle=e.itemHoverColor||f)}t.fillText(at,a+c,it+R/2)})}t.restore()}renderButton(t,s){var L;if(s.children&&s.children.length>0)return;const o=this.objectStates.get(s.id),e=(o==null?void 0:o.options)||s.options||{},n=s.geometry||{},i=n.width||s.width||160,a=n.height||s.height||45,r=this.lastHoveredObjectId===s.id,l=this.activeObjectId===s.id,d=e.label||{},p=e.hoverStyle||{},u=e.activeStyle||{},m=e.icon||{enabled:!1};let h=e.backgroundColor||e.buttonBgColor||((L=s.style)==null?void 0:L.fill)||"#3b82f6",f=(typeof d=="object"?d.color:null)||"#ffffff",v=typeof d=="string"?d:d.text||s.text||(s.name&&!s.name.toLowerCase().includes("component")?s.name:"Button"),g=n.cornerRadius??n.corner_radius??8,c=e.borderColor||"transparent",b=e.borderWidth||0,S=1;l&&u?(h=u.backgroundColor||h,f=u.color||f,v=u.text||v,S=u.scale??.95,g=u.cornerRadius??g):r&&p&&(h=p.backgroundColor||h,f=p.color||f,v=p.text||v,S=p.scale??1,g=p.cornerRadius??g,c=p.borderColor||c);const w=-i/2,C=-a/2;t.save(),t.scale(S,S),t.beginPath(),this.drawRoundRect(t,w,C,i,a,g);const M=this.createCanvasFill(t,h,i,a);M&&(t.fillStyle=M,t.fill()),(b>0||r&&p.borderColor)&&(t.strokeStyle=c,t.lineWidth=b||(r?1:0),t.stroke());const I=d.fontSize||14,_=d.fontFamily||"Inter",E=d.fontWeight||600;t.font=`${E} ${I}px "${_}", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif`,t.fillStyle=f,t.textAlign="center",t.textBaseline="middle";let P=0;if(m.enabled&&m.svgPath){const k=I*1.1,A=m.gap||8,T=t.measureText(v),F=-(T.width+k+A)/2,O=m.position==="left"?F+k/2:F+T.width+A+k/2;P=m.position==="left"?F+k+A+T.width/2:F+T.width/2,t.save(),t.translate(O,0);const W=new Path2D(m.svgPath),V=k/24;t.scale(V,V),t.translate(-12,-12),t.fillStyle=f,t.fill(W),t.restore()}t.fillText(v,P,0),t.restore()}renderToggleButton(t,s){var v,g;const o=this.objectStates.get(s.id),e=(o==null?void 0:o.options)||s.options||{},n=e.checked??!1,i=((v=s.geometry)==null?void 0:v.width)||120,a=((g=s.geometry)==null?void 0:g.height)||40,r=-i/2,l=-a/2,d=e.corner_radius??8,p=e.label||{},u=n?e.accentColor||"#3b82f6":e.inactiveColor||"#374151",m=n?e.activeTextColor||"#ffffff":e.inactiveTextColor||"#9ca3af";t.save(),t.beginPath(),this.drawRoundRect(t,r,l,i,a,d),t.fillStyle=u,t.fill();const h=p.fontSize||14,f=p.fontFamily||"Inter";t.font=`${p.fontWeight||600} ${h}px "${f}", sans-serif`,t.fillStyle=m,t.textAlign="center",t.textBaseline="middle",t.fillText(p.text||"Toggle",0,0),t.restore()}renderToggle(t,s){var W,V,U,D,Y,ot,J,at,j,it,B,X;const o=this.objectStates.get(s.id),e=(o==null?void 0:o.options)||s.options||{},n=((W=s.geometry)==null?void 0:W.width)||52,i=((V=s.geometry)==null?void 0:V.height)||30,a=-n/2,r=-i/2,l=e.checked??!1,d=e.cornerRadius??e.corner_radius??i/2,p=e.toggleStyle||{},u=p.backgroundColor||e.activeColor||"#10b981",m=p.borderColor||e.borderColor||"transparent",h=p.borderWidth??e.borderWidth??0,f=p.knobColor||e.knobColor||"#ffffff",v=l?u:e.inactiveColor||"#374151",g=l?m:e.borderColor||"transparent",c=l?h:e.borderWidth??0,b=l?f:e.knobColor||"#ffffff";e.disabled&&(t.globalAlpha*=.5),t.beginPath(),this.drawRoundRect(t,a,r,n,i,d);const S=this.createCanvasFill(t,v,n,i);if(S&&(t.fillStyle=S,t.fill()),c>0){t.lineWidth=c;const N=this.createCanvasFill(t,g,n,i);N&&(t.strokeStyle=N,t.stroke())}const w=2,C=i-w*2,M=C/2,I=a+w,_=a+n-w-C,E=l?_:I,P=r+w;t.beginPath(),t.arc(E+M,P+M,M,0,Math.PI*2);const L=this.createCanvasFill(t,b,C,C);L&&(t.fillStyle=L,t.fill()),e.disabled&&(t.globalAlpha*=2);let k=!1,A=!1;const T=(l?(U=p.leftLabel)==null?void 0:U.text:null)||((D=e.leftLabel)==null?void 0:D.text)||"",R=(l?(Y=p.leftLabel)==null?void 0:Y.color:null)||((ot=e.leftLabel)==null?void 0:ot.color)||"#f3f4f6";if((J=e.leftLabel)!=null&&J.enabled&&T){const N=e.leftLabel;t.font=`${N.fontWeight||400} ${N.fontSize||12}px "${N.fontFamily||"Inter"}", sans-serif`,t.fillStyle=R,t.textBaseline="middle",t.textAlign="right",t.fillText(T,a-(N.gap||8),0),k=!0}const F=(l?(at=p.rightLabel)==null?void 0:at.text:null)||((j=e.rightLabel)==null?void 0:j.text)||"",O=(l?(it=p.rightLabel)==null?void 0:it.color:null)||((B=e.rightLabel)==null?void 0:B.color)||"#f3f4f6";if((X=e.rightLabel)!=null&&X.enabled&&F){const N=e.rightLabel;t.font=`${N.fontWeight||400} ${N.fontSize||12}px "${N.fontFamily||"Inter"}", sans-serif`,t.fillStyle=O,t.textBaseline="middle",t.textAlign="left",t.fillText(F,a+n+(N.gap||8),0),A=!0}if(!k&&!A&&e.label&&e.label.text){const N=e.label,ct=N.fontSize||14,Mt=N.fontWeight||400,bt=N.fontFamily||"Inter";t.font=`${Mt} ${ct}px "${bt}", sans-serif`,t.fillStyle=N.color||"#f3f4f6",t.textBaseline="middle";const wt=N.gap||10;let gt=0,It=0;N.position==="left"?(t.textAlign="right",gt=a-wt,It=0):N.position==="right"?(t.textAlign="left",gt=a+n+wt,It=0):N.position==="top"?(t.textAlign="center",gt=0,It=r-wt,t.textBaseline="bottom"):N.position==="bottom"?(t.textAlign="center",gt=0,It=r+i+wt,t.textBaseline="top"):(t.textAlign="left",gt=a+n+wt,It=0),t.fillText(N.text,gt,It)}}renderCheckbox(t,s){var S,w;const o=this.objectStates.get(s.id),e=(o==null?void 0:o.options)||s.options||{},n=((S=s.geometry)==null?void 0:S.width)||20,i=((w=s.geometry)==null?void 0:w.height)||20,a=-n/2,r=-i/2,l=e.cornerRadius??4,d=e.checked??!1,p=e.activeColor||"#3b82f6",u=e.inactiveColor||"transparent",m=e.checkColor||"#ffffff",h=e.borderColor||"#4b5563",f=e.borderWidth??2,v=d?p:u,g=d?"transparent":h,c=d?0:f;e.disabled&&(t.globalAlpha*=.5),t.beginPath(),this.drawRoundRect(t,a,r,n,i,l);const b=this.createCanvasFill(t,v,n,i);if(b&&(t.fillStyle=b,t.fill()),c>0){t.lineWidth=c;const C=this.createCanvasFill(t,g,n,i);C&&(t.strokeStyle=C,t.stroke())}else if(d){t.lineWidth=1;const C=this.createCanvasFill(t,p,n,i);C&&(t.strokeStyle=C,t.stroke())}if(d){t.save(),t.beginPath();const C=this.createCanvasFill(t,m,n,i);t.strokeStyle=C||m,t.lineWidth=Math.max(2,n*.12),t.lineCap="round",t.lineJoin="round";const M=a+n*.25,I=r+i*.5,_=a+n*.45,E=r+i*.7,P=a+n*.75,L=r+i*.25;t.moveTo(M,I),t.lineTo(_,E),t.lineTo(P,L),t.stroke(),t.restore()}if(e.disabled&&(t.globalAlpha*=2),e.label&&e.label.text){const C=e.label;t.save(),t.font=`${C.fontWeight||400} ${C.fontSize||14}px "${C.fontFamily||"Inter"}", sans-serif`,t.fillStyle=C.color||"#f3f4f6",t.textBaseline="middle";const M=C.gap||8;let I=0,_=0;C.position==="left"?(t.textAlign="right",I=a-M,_=0):C.position==="right"?(t.textAlign="left",I=a+n+M,_=0):C.position==="top"?(t.textAlign="center",I=0,_=r-M,t.textBaseline="bottom"):C.position==="bottom"&&(t.textAlign="center",I=0,_=r+i+M,t.textBaseline="top"),t.fillText(C.text,I,_),t.restore()}}renderRadioGroup(t,s){var _,E;const o=this.objectStates.get(s.id),e=(o==null?void 0:o.options)||s.options||{},n=((_=s.geometry)==null?void 0:_.width)||180,i=((E=s.geometry)==null?void 0:E.height)||100,a=-n/2,r=-i/2;let l=e.optionsList||["Option 1","Option 2","Option 3"];if(e.isDataVarEnabled&&e.dataInputId){let P=this.inputs.get(e.dataInputId);if(P===void 0){const L=this.inputNameMap.get(e.dataInputId);L&&L.length>0&&(P=this.inputs.get(L[0]))}P&&Array.isArray(P)&&(l=P.map(L=>typeof L=="string"?L:String(L)))}const d=e.selectedValue,p=e.orientation||"vertical",u=e.itemGap!==void 0?e.itemGap:16,m=e.activeColor||"#3b82f6",h=e.inactiveColor||"#4b5563",f=e.textColor||"#ffffff",v=e.fontSize||14,g=e.fontFamily||"Inter",c=e.fontWeight||400;t.save(),t.beginPath(),t.rect(a,r,n,i),t.clip(),e.disabled&&(t.globalAlpha*=.5);const b=8,S=b*2,w=e.radioShape||"circle",C=e.borderWidth!==void 0?e.borderWidth:2,M=e.fillEmpty||"transparent",I=(P,L,k,A)=>{if(t.beginPath(),A==="custom"&&e.customShapePath)try{const T=new Path2D(e.customShapePath);t.save(),t.translate(P-k,L-k),t.scale(k*2/24,k*2/24),t.fill(T),t.restore();return}catch{t.arc(P,L,k,0,Math.PI*2);return}if(A==="square"){const T=k*1.6;t.rect(P-T/2,L-T/2,T,T)}else if(A==="diamond"){const T=k*1.4;t.moveTo(P,L-T),t.lineTo(P+T,L),t.lineTo(P,L+T),t.lineTo(P-T,L),t.closePath()}else if(A==="heart"){const T=k*.9;t.moveTo(P,L+T*.7),t.bezierCurveTo(P-T*1.5,L-T*.3,P-T*.5,L-T*1.5,P,L-T*.5),t.bezierCurveTo(P+T*.5,L-T*1.5,P+T*1.5,L-T*.3,P,L+T*.7)}else if(A==="star"){const T=k*1.1,R=k*.5;for(let F=0;F<5;F++){const O=(F*72-90)*Math.PI/180,W=(F*72+36-90)*Math.PI/180;F===0?t.moveTo(P+T*Math.cos(O),L+T*Math.sin(O)):t.lineTo(P+T*Math.cos(O),L+T*Math.sin(O)),t.lineTo(P+R*Math.cos(W),L+R*Math.sin(W))}t.closePath()}else t.arc(P,L,k,0,Math.PI*2)};if(t.font=`${c} ${v}px "${g}", sans-serif`,t.textBaseline="middle",t.textAlign="left",p==="vertical"){const P=Math.max(S,v)+u,L=l.length*P-u,k=r+Math.max(0,(i-L)/2);l.forEach((A,T)=>{const R=k+b+T*P,F=d===A,O=this.createCanvasFill(t,m,S,S),W=this.createCanvasFill(t,h,S,S);F?(t.fillStyle=O||m,I(a+b,R,b,w),t.fill(),t.strokeStyle=O||m,t.lineWidth=C,I(a+b,R,b,w),t.stroke()):(M!=="transparent"&&(t.fillStyle=M,I(a+b,R,b,w),t.fill()),t.strokeStyle=W||h,t.lineWidth=C,I(a+b,R,b,w),t.stroke()),t.fillStyle=f,t.fillText(A,a+S+8,R)})}else{const P=r+i/2;let L=0;t.font=`${c} ${v}px "${g}", sans-serif`,l.forEach(T=>{L+=S+6+t.measureText(T).width+u}),L-=u;let A=a+Math.max(0,(n-L)/2);l.forEach(T=>{const R=d===T,F=t.measureText(T).width,O=this.createCanvasFill(t,m,S,S),W=this.createCanvasFill(t,h,S,S);R?(t.fillStyle=O||m,I(A+b,P,b,w),t.fill(),t.strokeStyle=O||m,t.lineWidth=C,I(A+b,P,b,w),t.stroke()):(M!=="transparent"&&(t.fillStyle=M,I(A+b,P,b,w),t.fill()),t.strokeStyle=W||h,t.lineWidth=C,I(A+b,P,b,w),t.stroke()),t.fillStyle=f,t.fillText(T,A+S+6,P),A+=S+6+F+u})}if(t.restore(),e.disabled&&(t.globalAlpha*=2),e.label&&e.label.text){const P=e.label;t.save(),t.font=`${P.fontWeight||400} ${P.fontSize||14}px "${P.fontFamily||"Inter"}", sans-serif`,t.fillStyle=P.color||"#9ca3af",t.textBaseline="middle";const L=P.gap||8;let k=0,A=0;P.position==="left"?(t.textAlign="right",k=a-L,A=0):P.position==="right"?(t.textAlign="left",k=a+n+L,A=0):P.position==="top"?(t.textAlign="center",k=0,A=r-L,t.textBaseline="bottom"):P.position==="bottom"&&(t.textAlign="center",k=0,A=r+i+L,t.textBaseline="top"),t.fillText(P.text,k,A),t.restore()}}renderBarChart(t,s){var E,P,L;const o=this.objectStates.get(s.id),e=(o==null?void 0:o.options)||s.options||{};let n={...e};if(e.isDataVarEnabled&&e.dataInputId){let k=this.inputs.get(e.dataInputId);if(k===void 0){const A=this.inputNameMap.get(e.dataInputId);A&&A.length>0&&(k=this.inputs.get(A[0]))}k&&Array.isArray(k)&&(n.categories=k.map(A=>typeof A=="string"?A:String(A)))}if(e.isDatasetsVarEnabled&&((E=e.datasetInputIds)==null?void 0:E.length)>0){const k=e.datasetInputIds.map((A,T)=>{var O;let R=this.inputs.get(A);if(R===void 0){const W=this.inputNameMap.get(A);W&&W.length>0&&(R=this.inputs.get(W[0]))}const F=((O=e.datasets)==null?void 0:O[T])||{id:`ds-${T}`,label:`Series ${T+1}`,data:[],color:"#6366f1"};return R&&Array.isArray(R)?{...F,data:R.map(W=>typeof W=="number"?W:parseFloat(W)||0)}:F});n.datasets=k}const i={width:((P=s.geometry)==null?void 0:P.width)||300,height:((L=s.geometry)==null?void 0:L.height)||180,chartType:n.chartType||"grouped",datasets:n.datasets||[{id:"ds-1",label:"Revenue",data:[42,67,31,55,78,48],color:"#6366f1"}],categories:n.categories||["Jan","Feb","Mar","Apr","May","Jun"],orientation:n.orientation||"vertical",barWidth:n.barWidth!==void 0?n.barWidth:14,barGap:n.barGap!==void 0?n.barGap:4,barCornerRadius:n.barCornerRadius!==void 0?n.barCornerRadius:5,showXAxis:!!n.showXAxis,showYAxis:!!n.showYAxis,xAxisColor:n.xAxisColor||"rgba(255,255,255,0.15)",yAxisColor:n.yAxisColor||"rgba(255,255,255,0.15)",showXLabels:n.showXLabels!==void 0?!!n.showXLabels:!0,showYLabels:!!n.showYLabels,axisLabelColor:n.axisLabelColor||"rgba(255,255,255,0.55)",axisLabelFontSize:n.axisLabelFontSize||9,showLegend:n.showLegend!==void 0?!!n.showLegend:!0,legendColor:n.legendColor||"rgba(255,255,255,0.7)",legendFontSize:n.legendFontSize||9,showGridLines:n.showGridLines!==void 0?!!n.showGridLines:!0,gridColor:n.gridColor||"rgba(255,255,255,0.06)",cardBackground:n.cardBackground||"#ffffff",cardBackgroundOpacity:n.cardBackgroundOpacity!==void 0?n.cardBackgroundOpacity:.04,cardBorderColor:n.cardBorderColor||"rgba(255,255,255,0.08)",barGradient:n.barGradient!==void 0?!!n.barGradient:!0,gradientStartColor:n.gradientStartColor||"",gradientEndOpacity:n.gradientEndOpacity!==void 0?n.gradientEndOpacity:.27,showValueOnTop:!!n.showValueOnTop,valueFontSize:n.valueFontSize||10,valueColor:n.valueColor||"",valueFontWeight:n.valueFontWeight||"bold",barStyle:n.barStyle||"solid",barBorderWidth:n.barBorderWidth!==void 0?n.barBorderWidth:1,barBorderColor:n.barBorderColor||"auto",enableShadows:!!n.enableShadows,shadowColor:n.shadowColor||"rgba(0,0,0,0.5)",shadowBlur:n.shadowBlur!==void 0?n.shadowBlur:4,shadowOffsetY:n.shadowOffsetY!==void 0?n.shadowOffsetY:2,xAxisLineWidth:n.xAxisLineWidth!==void 0?n.xAxisLineWidth:1,yAxisLineWidth:n.yAxisLineWidth!==void 0?n.yAxisLineWidth:1,gridLineWidth:n.gridLineWidth!==void 0?n.gridLineWidth:1,gridLineDash:n.gridLineDash||[3,4],_hexToRgb:function(k,A){if(k.startsWith("rgba")||k.startsWith("rgb"))return k;k.startsWith("#")||(k="#"+k),k.length===4&&(k="#"+k[1]+k[1]+k[2]+k[2]+k[3]+k[3]);const T=parseInt(k.slice(1,3),16),R=parseInt(k.slice(3,5),16),F=parseInt(k.slice(5,7),16);return`rgba(${T},${R},${F},${A})`},_resolveColor:function(k,A){return typeof k=="string"?k:"#6366f1"},_makeGradient:function(k,A,T,R,F,O){if(!this.barGradient)return A;const W=this.gradientStartColor||A,V=k.createLinearGradient(T,R,F,O);return V.addColorStop(0,A),V.addColorStop(1,this._hexToRgb(W,this.gradientEndOpacity)),V},_drawRoundedBar:function(k,A,T,R,F,O,W){if(O=Math.min(O,Math.min(Math.abs(R),Math.abs(F))/2),O<=0||R===0||F===0){k.rect(A,T,R,F);return}k.beginPath(),W?(k.moveTo(A,T+F),k.lineTo(A,T+O),k.quadraticCurveTo(A,T,A+O,T),k.lineTo(A+R-O,T),k.quadraticCurveTo(A+R,T,A+R,T+O),k.lineTo(A+R,T+F),k.lineTo(A,T+F)):(k.moveTo(A,T),k.lineTo(A+R-O,T),k.quadraticCurveTo(A+R,T,A+R,T+O),k.lineTo(A+R,T+F-O),k.quadraticCurveTo(A+R,T+F,A+R-O,T+F),k.lineTo(A,T+F),k.lineTo(A,T)),k.closePath()}},a=i.width,r=i.height,l=-a/2,d=-r/2;if(!i.datasets||i.datasets.length===0||i.categories.length===0){t.save(),t.fillStyle="rgba(99,102,241,0.7)",t.font="bold 11px Inter, sans-serif",t.textAlign="center",t.textBaseline="middle",t.fillText("NO CHART DATA",0,0),t.restore();return}let p=-1/0,u=1/0;const m=i.categories.length,h=i.datasets.length;if(i.chartType==="stacked")for(let k=0;k<m;k++){let A=0,T=0;i.datasets.forEach(R=>{const F=R.data[k]??0;F>=0?A+=F:T+=F}),A>p&&(p=A),T<u&&(u=T)}else i.datasets.forEach(k=>{k.data&&k.data.forEach(A=>{A>p&&(p=A),A<u&&(u=A)})});isFinite(p)||(p=10),isFinite(u)||(u=0),p=Math.max(p,0),u=Math.min(u,0);const f=p-u||10;t.save(),i.enableShadows&&(t.shadowColor=i.shadowColor,t.shadowBlur=i.shadowBlur,t.shadowOffsetY=i.shadowOffsetY),t.font=i.axisLabelFontSize+"px Inter, sans-serif";const v=i.showYLabels?t.measureText(p.toFixed(0)).width+14:10,g=i.showXLabels?i.axisLabelFontSize+12:8,b=(i.showLegend&&h>0?i.legendFontSize+10:0)+8,S=10,w=l+v,C=d+b,M=a-v-S,I=r-b-g;if(i.enableShadows&&(t.shadowColor="transparent"),t.beginPath(),t.roundRect(l,d,a,r,10),t.fillStyle=i._hexToRgb(i.cardBackground,i.cardBackgroundOpacity),t.fill(),t.strokeStyle=i.cardBorderColor,t.lineWidth=1,t.stroke(),i.showLegend&&h>0){t.font=i.legendFontSize+"px Inter, sans-serif",t.textBaseline="middle";const k=d+12;let A=w;i.datasets.forEach((T,R)=>{const F=i._resolveColor(T.color,R),O=T.label||"Series "+(R+1),W=7;t.beginPath(),t.roundRect(A,k-W/2,W,W,2),t.fillStyle=F,t.fill(),t.fillStyle=i.legendColor,t.textAlign="left",t.fillText(O,A+W+4,k),A+=t.measureText(O).width+W+16})}const _=4;if(i.showGridLines){t.setLineDash(i.gridLineDash||[]),t.lineWidth=i.gridLineWidth||1,t.strokeStyle=i.gridColor;for(let k=0;k<=_;k++)if(i.orientation==="horizontal"){const A=w+k/_*M;t.beginPath(),t.moveTo(A,C),t.lineTo(A,C+I),t.stroke()}else{const A=C+k/_*I;t.beginPath(),t.moveTo(w,A),t.lineTo(w+M,A),t.stroke()}t.setLineDash([])}if(i.showYLabels){t.font=i.axisLabelFontSize+"px Inter, sans-serif",t.textAlign="right",t.textBaseline="middle",t.fillStyle=i.axisLabelColor;for(let k=0;k<=_;k++)if(i.orientation==="horizontal"){const A=u+k/_*f,T=w+k/_*M;t.textAlign="center",t.fillText(A.toFixed(0),T,C+I+i.axisLabelFontSize)}else{const A=p-k/_*f,T=C+k/_*I;t.textAlign="right",t.fillText(A.toFixed(0),w-6,T)}}if(t.setLineDash([]),i.showXAxis&&(t.lineWidth=i.xAxisLineWidth||1,t.strokeStyle=i.xAxisColor,t.beginPath(),t.moveTo(w,C+I),t.lineTo(w+M,C+I),t.stroke()),i.showYAxis&&(t.lineWidth=i.yAxisLineWidth||1,t.strokeStyle=i.yAxisColor,t.beginPath(),t.moveTo(w,C),t.lineTo(w,C+I),t.stroke()),i.enableShadows&&(t.shadowColor=i.shadowColor),i.chartType==="stacked")if(i.orientation==="horizontal"){const k=I/m;for(let A=0;A<m;A++){const T=C+A*k+k/2;i.showXLabels&&(t.font=i.axisLabelFontSize+"px Inter, sans-serif",t.textAlign="right",t.textBaseline="middle",t.fillStyle=i.axisLabelColor,t.shadowColor="transparent",t.fillText(i.categories[A]||"",w-5,T),i.enableShadows&&(t.shadowColor=i.shadowColor));let R=w;i.datasets.forEach((F,O)=>{const W=F.data[A]??0;if(W===0)return;const V=W/f*M,U=Math.min(i.barWidth*h+i.barGap,k-8),D=T-U/2,Y=R;R+=V;const ot=i._resolveColor(F.color,O);t.beginPath(),t.fillStyle=i._makeGradient(t,ot,Y,D,Y+V,D),i._drawRoundedBar(t,Y,D,V,U,O===h-1?i.barCornerRadius:0,!1),i.barStyle==="outline"||i.barStyle==="dashed"?(t.fillStyle="transparent",t.strokeStyle=i.barBorderColor==="auto"?ot:i.barBorderColor,t.lineWidth=i.barBorderWidth,i.barStyle==="dashed"&&t.setLineDash([4,4]),t.stroke(),t.setLineDash([])):t.fill()})}}else{const k=M/m;for(let A=0;A<m;A++){const T=w+A*k+k/2;i.showXLabels&&(t.font=i.axisLabelFontSize+"px Inter, sans-serif",t.textAlign="center",t.textBaseline="top",t.fillStyle=i.axisLabelColor,t.shadowColor="transparent",t.fillText(i.categories[A]||"",T,C+I+5),i.enableShadows&&(t.shadowColor=i.shadowColor));let R=C+I;i.datasets.forEach((F,O)=>{const W=F.data[A]??0;if(W===0)return;const V=W/f*I,U=Math.min(i.barWidth*h+i.barGap,k-8),D=T-U/2,Y=R-V;R-=V;const ot=i._resolveColor(F.color,O);t.beginPath(),t.fillStyle=i._makeGradient(t,ot,D,Y,D,Y+V),i._drawRoundedBar(t,D,Y,U,V,O===h-1?i.barCornerRadius:0,!0),i.barStyle==="outline"||i.barStyle==="dashed"?(t.fillStyle="transparent",t.strokeStyle=i.barBorderColor==="auto"?ot:i.barBorderColor,t.lineWidth=i.barBorderWidth,i.barStyle==="dashed"&&t.setLineDash([4,4]),t.stroke(),t.setLineDash([])):t.fill()})}}else if(i.orientation==="horizontal"){const k=I/m,A=h*i.barWidth+Math.max(0,(h-1)*i.barGap),T=w+(0-u)/f*M;for(let R=0;R<m;R++){const F=C+R*k+k/2;i.showXLabels&&(t.font=i.axisLabelFontSize+"px Inter, sans-serif",t.textAlign="right",t.textBaseline="middle",t.fillStyle=i.axisLabelColor,t.shadowColor="transparent",t.fillText(i.categories[R]||"",w-5,F),i.enableShadows&&(t.shadowColor=i.shadowColor));const O=F-A/2;i.datasets.forEach((W,V)=>{const U=W.data[R]??0,D=Math.abs(U/f*M);if(D<1)return;const Y=O+V*(i.barWidth+i.barGap),ot=U>=0?T:T-D,J=i._resolveColor(W.color,V);t.beginPath(),t.fillStyle=i._makeGradient(t,J,ot,Y,ot+D,Y),i._drawRoundedBar(t,ot,Y,D,i.barWidth,i.barCornerRadius,!1),i.barStyle==="outline"||i.barStyle==="dashed"?(t.fillStyle="transparent",t.strokeStyle=i.barBorderColor==="auto"?J:i.barBorderColor,t.lineWidth=i.barBorderWidth,i.barStyle==="dashed"&&t.setLineDash([4,4]),t.stroke(),t.setLineDash([])):t.fill(),i.showValueOnTop&&U!==0&&(t.font=(i.valueFontWeight||"bold")+" "+(i.valueFontSize||10)+"px Inter, sans-serif",t.textAlign=U>=0?"left":"right",t.textBaseline="middle",t.fillStyle=i.valueColor==="auto"?J:i.valueColor||"#fff",t.shadowColor="transparent",t.fillText(U.toString(),U>=0?ot+D+4:ot-4,Y+i.barWidth/2),i.enableShadows&&(t.shadowColor=i.shadowColor))})}}else{const k=M/m,A=h*i.barWidth+Math.max(0,(h-1)*i.barGap),T=C+I-(0-u)/f*I;for(let R=0;R<m;R++){const F=w+R*k+k/2;i.showXLabels&&(t.font=i.axisLabelFontSize+"px Inter, sans-serif",t.textAlign="center",t.textBaseline="top",t.fillStyle=i.axisLabelColor,t.shadowColor="transparent",t.fillText(i.categories[R]||"",F,C+I+5),i.enableShadows&&(t.shadowColor=i.shadowColor));const O=F-A/2;i.datasets.forEach((W,V)=>{const U=W.data[R]??0,D=Math.abs(U/f*I);if(D<1)return;const Y=O+V*(i.barWidth+i.barGap),ot=U>=0?T-D:T,J=i._resolveColor(W.color,V);t.beginPath(),t.fillStyle=i._makeGradient(t,J,Y,ot,Y,ot+D),i._drawRoundedBar(t,Y,ot,i.barWidth,D,i.barCornerRadius,!0),i.barStyle==="outline"||i.barStyle==="dashed"?(t.fillStyle="transparent",t.strokeStyle=i.barBorderColor==="auto"?J:i.barBorderColor,t.lineWidth=i.barBorderWidth,i.barStyle==="dashed"&&t.setLineDash([4,4]),t.stroke(),t.setLineDash([])):t.fill(),i.showValueOnTop&&U!==0&&(t.font=(i.valueFontWeight||"bold")+" "+(i.valueFontSize||10)+"px Inter, sans-serif",t.textAlign="center",t.textBaseline=U>=0?"bottom":"top",t.fillStyle=i.valueColor==="auto"?J:i.valueColor||"#fff",t.shadowColor="transparent",t.fillText(U.toString(),Y+i.barWidth/2,U>=0?ot-4:ot+D+4),i.enableShadows&&(t.shadowColor=i.shadowColor))})}}t.restore()}renderPieChart(t,s){var c,b;const o=this.objectStates.get(s.id),e=(o==null?void 0:o.options)||s.options||{},n=e.colorPalette==="custom"&&Array.isArray(e.customPalette)&&e.customPalette.length>0?e.customPalette:us[e.colorPalette||"vibrant"]||us.vibrant;let i=e.slices||[{id:"slice-1",label:"Item 1",value:45,color:""}];if(e.isDataVarEnabled&&e.dataInputId){let S=this.inputs.get(e.dataInputId);if(S===void 0){const w=this.inputNameMap.get(e.dataInputId);w&&w.length>0&&(S=this.inputs.get(w[0]))}S&&Array.isArray(S)&&(i=S.map((w,C)=>{var M,I;return{id:`slice-${C}`,label:((M=i[C])==null?void 0:M.label)||`Item ${C+1}`,value:typeof w=="number"?w:0,color:((I=i[C])==null?void 0:I.color)||""}}))}const a={width:((c=s.geometry)==null?void 0:c.width)||180,height:((b=s.geometry)==null?void 0:b.height)||180,chartType:e.chartType||"donut",slices:i,innerRadius:e.innerRadius!==void 0?e.innerRadius:.55,sliceGap:e.sliceGap!==void 0?e.sliceGap:3,showLabels:!!e.showLabels,labelColor:e.labelColor||"#000000",labelFontSize:e.labelFontSize||10,showLegend:e.showLegend!==void 0?!!e.showLegend:!0,legendColor:e.legendColor||"rgba(0,0,0,0.65)",legendFontSize:e.legendFontSize||9,showCenterText:e.showCenterText!==void 0?!!e.showCenterText:!0,centerLabel:e.centerLabel||"Total",centerTextColor:e.centerTextColor||"#000000",centerLabelColor:e.centerLabelColor||"rgba(0,0,0,0.4)",cardBackground:e.cardBackground||"#ffffff",cardBackgroundOpacity:e.cardBackgroundOpacity!==void 0?e.cardBackgroundOpacity:.04,cardBorderColor:e.cardBorderColor||"rgba(0,0,0,0.08)",_resolveSliceColor:function(S,w){return S.color?S.color:n[w%n.length]},_hexToRgb:function(S){if(S.startsWith("rgba")||S.startsWith("rgb"))return S;const w=S.replace("#",""),C=parseInt(w.substring(0,2),16),M=parseInt(w.substring(2,4),16),I=parseInt(w.substring(4,6),16);return`rgba(${C},${M},${I},${a.cardBackgroundOpacity})`}},r=a.width,l=a.height;if(!a.slices||a.slices.length===0){t.save(),t.fillStyle="rgba(99,102,241,0.8)",t.font="bold 11px Inter, sans-serif",t.textAlign="center",t.textBaseline="middle",t.fillText("NO PIE DATA",0,0),t.restore();return}const d=a.slices.reduce((S,w)=>S+(w.value||0),0);if(d<=0){t.save(),t.fillStyle="rgba(99,102,241,0.8)",t.font="bold 11px Inter, sans-serif",t.textAlign="center",t.textBaseline="middle",t.fillText("EMPTY DATA",0,0),t.restore();return}t.save();const p=a._hexToRgb(a.cardBackground);t.beginPath(),t.roundRect(-r/2,-l/2,r,l,10),t.fillStyle=p,t.fill(),t.strokeStyle=a.cardBorderColor,t.lineWidth=1,t.stroke();const u=a.showLegend?Math.ceil(a.slices.length/2):0,m=u>0?u*(a.legendFontSize+8)+10:0,h=l-m-16,f=Math.min(r-24,h)/2,v=0,g=-m/2;if(a.chartType==="rose"){const S=Math.max(...a.slices.map(M=>M.value||0)),w=Math.PI*2/a.slices.length,C=f>0?a.sliceGap/f:0;a.slices.forEach((M,I)=>{const _=M.value||0;if(_===0)return;const E=_/S*f,P=-Math.PI/2+I*w+C/2,L=P+w-C,k=a._resolveSliceColor(M,I);if(t.beginPath(),t.moveTo(v,g),t.arc(v,g,E,P,L),t.closePath(),t.fillStyle=k+"cc",t.fill(),t.strokeStyle=k,t.lineWidth=1.5,t.stroke(),a.showLabels){const A=P+(L-P)/2,T=v+E*.65*Math.cos(A),R=g+E*.65*Math.sin(A),F=Math.round(_/d*100);t.save(),t.font=`bold ${a.labelFontSize}px Inter, sans-serif`,t.fillStyle=a.labelColor,t.textAlign="center",t.textBaseline="middle",t.fillText(`${F}%`,T,R),t.restore()}})}else{const S=a.chartType==="pie"?0:a.innerRadius,w=f*Math.max(0,S),C=f>0?a.sliceGap/f:0;let M=-Math.PI/2;if(a.slices.forEach((I,_)=>{const E=I.value||0;if(E===0){M+=E/d*Math.PI*2;return}const P=E/d*Math.PI*2,L=M+C/2,k=M+P-C/2;if(k<=L){M+=P;return}const A=a._resolveSliceColor(I,_);if(t.beginPath(),t.fillStyle=A,w<=0?(t.moveTo(v,g),t.arc(v,g,f,L,k),t.lineTo(v,g)):(t.moveTo(v+f*Math.cos(L),g+f*Math.sin(L)),t.arc(v,g,f,L,k),t.arc(v,g,w,k,L,!0),t.closePath()),t.fill(),a.showLabels){const T=L+(k-L)/2,R=w+(f-w)/2,F=v+R*Math.cos(T),O=g+R*Math.sin(T),W=Math.round(E/d*100);t.save(),t.font=`bold ${a.labelFontSize}px Inter, sans-serif`,t.fillStyle=a.labelColor,t.textAlign="center",t.textBaseline="middle",t.fillText(`${W}%`,F,O),t.restore()}M+=P}),a.chartType==="donut"&&a.showCenterText&&w>14){const I=Math.round(d),_=Math.min(Math.floor(w*.52),20),E=Math.min(Math.floor(w*.26),10);t.textAlign="center",t.textBaseline="middle",t.font=`bold ${_}px Inter, sans-serif`,t.fillStyle=a.centerTextColor,t.fillText(I.toString(),v,g-E*.5),t.font=`${E}px Inter, sans-serif`,t.fillStyle=a.centerLabelColor,t.fillText(a.centerLabel,v,g+_*.6)}}if(a.showLegend&&a.slices.length>0){t.font=`${a.legendFontSize}px Inter, sans-serif`;const S=2,w=r/S,C=a.legendFontSize+8,M=l/2-m+10,I=-r/2+10;a.slices.forEach((_,E)=>{const P=E%S,L=Math.floor(E/S),k=I+P*w,A=M+L*C,T=a._resolveSliceColor(_,E),R=7;t.beginPath(),t.roundRect(k,A-R/2,R,R,2),t.fillStyle=T,t.fill(),t.textAlign="left",t.textBaseline="middle",t.fillStyle=a.legendColor;const F=Math.round((_.value||0)/d*100),O=`${_.label||"Item"} ${F}%`,W=w-R-20;let V=O;for(;t.measureText(V).width>W&&V.length>4;)V=V.slice(0,-4)+"…";t.fillText(V,k+R+4,A)})}t.restore()}renderJoystick(t,s){var v,g,c,b,S,w,C,M,I,_,E,P;const o=this.objectStates.get(s.id),e=(o==null?void 0:o.width)!==void 0?o.width:((v=s.geometry)==null?void 0:v.width)??s.width??100,n=(o==null?void 0:o.height)!==void 0?o.height:((g=s.geometry)==null?void 0:g.height)??s.height??100,i=Math.min(e,n)*(((c=s.style)==null?void 0:c.baseSize)??.45),a=Math.min(e,n)*(((b=s.style)==null?void 0:b.handleSize)??.14);let r=s.handleX||0,l=s.handleY||0;o&&o.handleX!==void 0&&(r=o.handleX),o&&o.handleY!==void 0&&(l=o.handleY),t.save();let d=0,p=0;s.handleOrigin==="top-left"?(d=e/2,p=n/2):s.handleOrigin==="bottom-right"&&(d=-e/2,p=-n/2),t.translate(d,p);const u=t.globalAlpha;if(t.globalAlpha=u*(((S=s.style)==null?void 0:S.baseOpacity)??1),t.beginPath(),s.boundsShape==="square"){const L=s.joystickType==="2D"?12:18;t.roundRect(-i,-i,i*2,i*2,L)}else t.arc(0,0,i,0,Math.PI*2);t.fillStyle=((w=s.style)==null?void 0:w.baseColor)||"rgba(0,0,0,0.04)",t.fill(),(C=s.style)!=null&&C.baseBorderWidth?(t.lineWidth=s.style.baseBorderWidth,t.strokeStyle=s.style.baseBorderColor||"rgba(0,0,0,0.1)",t.stroke()):(t.lineWidth=1,t.strokeStyle=((M=s.style)==null?void 0:M.baseBorderColor)||"rgba(0,0,0,0.08)",t.stroke());const m=s.overflowHandle?i:Math.max(.1,i-a);let h=0,f=0;s.joystickType==="2D"?(h=r*m,f=l*m):s.joystickType==="1D_X"?(h=r*m,f=0):s.joystickType==="1D_Y"&&(h=0,f=l*m),t.globalAlpha=u*(((I=s.style)==null?void 0:I.handleOpacity)??1),t.beginPath(),t.arc(h,f,a,0,Math.PI*2),t.fillStyle=((_=s.style)==null?void 0:_.handleColor)||"#3b82f6",t.fill(),(E=s.style)!=null&&E.handleBorderWidth?(t.lineWidth=s.style.handleBorderWidth,t.strokeStyle=s.style.handleBorderColor||"rgba(255,255,255,0.5)",t.stroke()):(t.lineWidth=1,t.strokeStyle=((P=s.style)==null?void 0:P.handleBorderColor)||"rgba(255,255,255,0.5)",t.stroke()),t.globalAlpha=u,t.restore()}getRadioGroupItemIndexAtPointer(t,s,o){var I,_;const e=t.options||{},n=this.objectStates.get(t.id)||{},i=e.optionsList||[];if(i.length===0)return null;const a=n.width!==void 0?n.width:((I=t.geometry)==null?void 0:I.width)||180,r=n.height!==void 0?n.height:((_=t.geometry)==null?void 0:_.height)||100,l=e.orientation||"vertical",d=e.itemGap!==void 0?e.itemGap:16,p=e.fontSize||14,u=this.getWorldTransform(t.id),m=s-u.x,h=o-u.y,f=-u.rotation*(Math.PI/180),v=Math.cos(f),g=Math.sin(f),c=m*v-h*g,b=m*g+h*v,w=8*2,C=-a/2,M=-r/2;if(l==="vertical"){const E=Math.max(w,p)+d;for(let P=0;P<i.length;P++){const L=M+P*E;if(c>=C&&c<=C+a&&b>=L&&b<=L+E)return P}}else{let E=C;for(let P=0;P<i.length;P++){const k=i[P].length*8,A=w+6+k+d;if(c>=E&&c<=E+A&&b>=M&&b<=M+r)return P;E+=A}}return null}renderLineGraph(t,s,o,e){let n=s.datasets||[];if((!n||n.length===0)&&(s.data||s.graphData)&&(n=[{id:"line-1",label:"Series 1",data:s.data||s.graphData||[],lineColor:s.lineColor||"#3b82f6",lineWidth:s.lineWidth||2,showArea:s.showArea||!1,areaColor:s.areaColor||"rgba(139, 92, 246, 0.3)",smoothing:s.smoothing||!1,showPoints:s.showPoints!==void 0?s.showPoints:!0,pointSize:s.pointSize||6,pointFill:s.pointFill||"#ffffff",pointStrokeColor:s.pointStrokeColor||s.lineColor||"#3b82f6",pointStrokeWidth:s.pointStrokeWidth||2}]),!n||n.length===0||!n.some(f=>f.data&&f.data.length>=2)){t.save(),t.fillStyle="#6366f1",t.font="12px Inter, system-ui, sans-serif",t.textAlign="center",t.textBaseline="middle",t.fillText("NO DATA",0,0),t.restore();return}let i=1/0,a=-1/0,r=0;if(n.forEach(f=>{let v=f.data;if(f.isVarEnabled&&f.inputId){let g=this.inputs.get(f.inputId);if(g===void 0){const c=this.inputNameMap.get(f.inputId);c&&c.length>0&&(g=this.inputs.get(c[0]))}g&&Array.isArray(g)&&(v=g)}if(v&&v.length>0){const g=v.filter(c=>typeof c=="number"&&!isNaN(c));g.length>0&&(i=Math.min(i,...g),a=Math.max(a,...g),r=Math.max(r,v.length))}f._resolvedData=v}),r<2)return;const l=a-i,d=o/(r-1),p=f=>{const v=l===0?.5:(f-i)/l;return e/2-v*e},u=f=>f*d-o/2,m=s.axisColor||"#333333";if(s.showXAxis&&(t.beginPath(),t.strokeStyle=s.xAxisColor||m,t.lineWidth=1,t.moveTo(-o/2,e/2),t.lineTo(o/2,e/2),t.stroke()),s.showYAxis&&(t.beginPath(),t.strokeStyle=s.yAxisColor||m,t.lineWidth=1,t.moveTo(-o/2,-e/2),t.lineTo(-o/2,e/2),t.stroke()),t.fillStyle=s.axisLabelColor||"#333333",t.font=`${s.axisLabelFontSize||10}px Inter, sans-serif`,s.showXLabels){t.textAlign="center",t.textBaseline="top";for(let f=0;f<r;f++){const v=u(f);t.fillText(`${f+1}`,v,e/2+5)}}if(s.showYLabels){t.textAlign="right",t.textBaseline="middle";const f=-o/2-5,v=(a+i)/2;t.fillText(a.toFixed(1),f,p(a)),t.fillText(v.toFixed(1),f,p(v)),t.fillText(i.toFixed(1),f,p(i))}const h=10;if(n.forEach(f=>{const v=f._resolvedData;if(!(!v||v.length<2)){if(f.showArea){if(t.beginPath(),t.moveTo(u(0),e/2),t.lineTo(u(0),p(v[0])),f.smoothing&&v.length>2)for(let c=0;c<v.length-1;c++){const b=v[c===0?c:c-1],S=v[c],w=v[c+1],C=v[c+1===v.length-1?c+1:c+2];for(let M=1;M<=h;M++){const I=M/h,_=this._catmullRom(b,S,w,C,I);t.lineTo(u(c+I),p(_))}}else for(let c=1;c<v.length;c++)t.lineTo(u(c),p(v[c]));t.lineTo(u(v.length-1),e/2),t.closePath();const g=t.globalAlpha;t.globalAlpha=g*(s.areaOpacity??.3),t.fillStyle=f.areaColor||"rgba(139, 92, 246, 0.2)",t.fill(),t.globalAlpha=g}if(t.beginPath(),t.strokeStyle=f.lineColor||"#3b82f6",t.lineWidth=f.lineWidth||2,t.lineJoin="round",t.lineCap="round",t.moveTo(u(0),p(v[0])),f.smoothing&&v.length>2)for(let g=0;g<v.length-1;g++){const c=v[g===0?g:g-1],b=v[g],S=v[g+1],w=v[g+1===v.length-1?g+1:g+2];for(let C=1;C<=h;C++){const M=C/h,I=this._catmullRom(c,b,S,w,M);t.lineTo(u(g+M),p(I))}}else for(let g=1;g<v.length;g++)t.lineTo(u(g),p(v[g]));t.stroke(),f.showPoints&&v.forEach((g,c)=>{const b=u(c),S=p(g);t.beginPath(),t.arc(b,S,(f.pointSize||6)/2,0,Math.PI*2),t.fillStyle=f.pointFill||"#ffffff",t.fill(),t.strokeStyle=f.pointStrokeColor||f.lineColor||"#3b82f6",t.lineWidth=f.pointStrokeWidth||1,t.stroke()})}}),s.showLegend&&n.length>0){const f=o/2-10;let v=-e/2+15;const g=s.legendFontSize||10,c=g+5;t.font=`${g}px Inter, sans-serif`,t.textAlign="right",t.textBaseline="alphabetic",n.forEach(b=>{const w=b.label||"Series",C=t.measureText(w).width;t.beginPath(),t.rect(f-C-8-5,v-(8/2+2),8,8),t.fillStyle=b.lineColor||"#3b82f6",t.fill(),t.fillStyle=s.legendColor||"#333333",t.fillText(w,f,v),v+=c})}}_catmullRom(t,s,o,e,n){const i=(o-t)*.5,a=(e-s)*.5,r=n*n,l=n*r;return(2*s-2*o+i+a)*l+(-3*s+3*o-2*i-a)*r+i*n+s}normalizeOpacity(t){const s=typeof t=="number"?t:parseFloat(String(t));return isNaN(s)?1:s>1?Math.min(1,s/100):Math.max(0,Math.min(1,s))}createCanvasFill(t,s,o,e){var n,i,a;if(!s||s.type==="None")return null;if(typeof s=="string")return s;if(s.type==="Solid"&&s.color){const r=s.color,d=(((i=(n=this.artboard)==null?void 0:n.tokens)==null?void 0:i.colors)||{})[r]||r;return t.fillStyle=d,d}if((s.type==="LinearGradient"||s.type==="RadialGradient"||s.type==="AngularGradient"||s.type==="DiamondGradient")&&s.stops){const r=(l,d=100)=>{var S,w;const u=(((w=(S=this.artboard)==null?void 0:S.tokens)==null?void 0:w.colors)||{})[l]||l,m=this.normalizeOpacity(s.opacity??100),f=this.normalizeOpacity(d)*m;if(f>=1&&u.startsWith("#"))return u;const v=u.startsWith("#")?u.replace("#",""):"ffffff",g=parseInt(v.substring(0,2),16),c=parseInt(v.substring(2,4),16),b=parseInt(v.substring(4,6),16);return`rgba(${g}, ${c}, ${b}, ${f})`};if(s.type==="LinearGradient"){let l=0,d=-e/2,p=0,u=e/2;if(s.angle!==void 0&&(!s.start||!s.end)){const h=(s.angle-90)*Math.PI/180,f=Math.max(o,e)/2;l=Math.cos(h)*-f,d=Math.sin(h)*-f,p=Math.cos(h)*f,u=Math.sin(h)*f}else if(s.start||s.end){const h=(f,v,g)=>Array.isArray(f)?f[v]??.5:f&&typeof f=="object"?f[g]??.5:.5;l=h(s.start,0,"x")*o-o/2,d=h(s.start,1,"y")*e-e/2,p=h(s.end,0,"x")*o-o/2,u=h(s.end,1,"y")*e-e/2}Math.abs(l-p)<.001&&Math.abs(d-u)<.001&&(l=0,d=-e/2,p=0,u=e/2);const m=t.createLinearGradient(l,d,p,u);if(s.stops.forEach(h=>{const f=h.offset!==void 0?h.offset:h.pos!==void 0?h.pos:h.position!==void 0?h.position:0,v=r(h.color||"#000000",h.opacity??100);m.addColorStop(Math.max(0,Math.min(1,f)),v)}),s.gradientTransform&&m.setTransform){const[h,f,v,g,c,b]=s.gradientTransform;m.setTransform({a:h,b:f,c:v,d:g,e:c,f:b})}return m}else if(s.type==="RadialGradient"){const l=(h,f,v)=>Array.isArray(h)?h[f]??.5:h&&typeof h=="object"?h[v]??.5:.5,d=l(s.center,0,"x")*o-o/2,p=l(s.center,1,"y")*e-e/2,u=(s.radius??.5)*Math.max(o,e),m=t.createRadialGradient(d,p,0,d,p,u);if(s.stops.forEach(h=>{const f=h.offset!==void 0?h.offset:h.pos!==void 0?h.pos:h.position!==void 0?h.position:0,v=r(h.color||"#000000",h.opacity??100);m.addColorStop(Math.max(0,Math.min(1,f)),v)}),s.gradientTransform&&m.setTransform){const[h,f,v,g,c,b]=s.gradientTransform;m.setTransform({a:h,b:f,c:v,d:g,e:c,f:b})}return m}else if(s.type==="AngularGradient"){const l=(h,f,v)=>Array.isArray(h)?h[f]??.5:h&&typeof h=="object"?h[v]??.5:.5,d=l(s.center||[.5,.5],0,"x")*o-o/2,p=l(s.center||[.5,.5],1,"y")*e-e/2,u=(s.degree||s.angle||0)*(Math.PI/180),m=(a=t.createConicGradient)==null?void 0:a.call(t,u,d,p);if(m){if(s.stops.forEach(h=>{const f=h.offset!==void 0?h.offset:h.pos!==void 0?h.pos:h.position!==void 0?h.position:0,v=r(h.color||"#000000",h.opacity??100);m.addColorStop(Math.max(0,Math.min(1,f)),v)}),s.gradientTransform&&m.setTransform){const[h,f,v,g,c,b]=s.gradientTransform;m.setTransform({a:h,b:f,c:v,d:g,e:c,f:b})}return m}}else if(s.type==="DiamondGradient"){const l=(h,f,v)=>Array.isArray(h)?h[f]??.5:h&&typeof h=="object"?h[v]??.5:.5,d=l(s.center||[.5,.5],0,"x")*o-o/2,p=l(s.center||[.5,.5],1,"y")*e-e/2,u=(s.radius??.5)*Math.max(o,e);t.save(),t.translate(d,p),t.rotate(Math.PI/4);const m=t.createRadialGradient(0,0,0,0,0,u);if(s.stops.forEach(h=>{const f=h.offset!==void 0?h.offset:h.pos!==void 0?h.pos:h.position!==void 0?h.position:0,v=r(h.color||"#000000",h.opacity??100);m.addColorStop(Math.max(0,Math.min(1,f)),v)}),s.gradientTransform&&m.setTransform){const[h,f,v,g,c,b]=s.gradientTransform;m.setTransform({a:h,b:f,c:v,d:g,e:c,f:b})}return t.scale(1/Math.SQRT2,1/Math.SQRT2),t.fillStyle=m,t.restore(),m}}if(s.type==="Pattern"&&s.url){let r=this.imageCache.get(s.url);if(r||(r=new Image,r.src=s.url,this.imageCache.set(s.url,r)),r.complete&&r.naturalWidth>0){const l=t.createPattern(r,"repeat");if(l&&(s.scaleX!==void 0||s.offsetX!==void 0)){const d=new DOMMatrix,p=s.scaleX??1,u=s.scaleY??1,m=s.offsetX??0,h=s.offsetY??0,f=s.rotation??0;d.translateSelf(m,h),d.rotateSelf(f),d.scaleSelf(p,u),l.setTransform(d)}return l}}return s.color||null}drawRoundRect(t,s,o,e,n,i){if(i===0||i===void 0||i===null){t.rect(s,o,e,n);return}let a=i;if(typeof a=="string")try{a=JSON.parse(a)}catch{a=parseFloat(a)||0}let r=0,l=0,d=0,p=0;typeof a=="number"?r=l=d=p=a:Array.isArray(a)?a.length===1?r=l=d=p=a[0]:a.length===2?(r=d=a[0],l=p=a[1]):a.length===3?(r=a[0],l=p=a[1],d=a[2]):a.length>=4&&(r=a[0],l=a[1],d=a[2],p=a[3]):a&&typeof a=="object"&&(r=a[0]??a.tl??a.corner_radius??a.cornerRadius??0,l=a[1]??a.tr??a.corner_radius??a.cornerRadius??0,d=a[2]??a.br??a.corner_radius??a.cornerRadius??0,p=a[3]??a.bl??a.corner_radius??a.cornerRadius??0);const u=Math.min(Math.abs(e)/2,Math.abs(n)/2);if(r=Math.min(Math.max(0,r),u),l=Math.min(Math.max(0,l),u),d=Math.min(Math.max(0,d),u),p=Math.min(Math.max(0,p),u),t.roundRect){t.roundRect(s,o,e,n,[r,l,d,p]);return}t.moveTo(s+r,o),t.lineTo(s+e-l,o),t.arcTo(s+e,o,s+e,o+l,l),t.lineTo(s+e,o+n-d),t.arcTo(s+e,o+n,s+e-d,o+n,d),t.lineTo(s+p,o+n),t.arcTo(s,o+n,s,o+n-p,p),t.lineTo(s,o+r),t.arcTo(s,o,s+r,o,r),t.closePath()}renderListView(t,s){var T,R,F,O,W,V,U,D,Y,ot;const o=this.objectStates.get(s.id)||{},e=o.options||s.options||{},n=o.width!==void 0?o.width:((T=s.geometry)==null?void 0:T.width)||200,i=o.height!==void 0?o.height:((R=s.geometry)==null?void 0:R.height)||300,a=-n/2,r=-i/2,l=e.cornerRadius!==void 0?e.cornerRadius:o.cornerRadius!==void 0?o.cornerRadius:o.corner_radius??e.corner_radius??((F=s.geometry)==null?void 0:F.cornerRadius)??((O=s.geometry)==null?void 0:O.corner_radius)??0,d=e.orientation||"vertical",p=this.getResolvedListViewItems(s,e),u=e.itemGap??10,m=e.itemHeight??50,h=e.itemWidth??200,f=e.scrollOffset??0,v=e.padding??0,g=e.glassEffect!==!1,c=e.accentColor||"#3b82f6",b=e.itemTextColor||"#333333",S=e.itemBackgroundColor||"#ffffff",w=e.hoveredIndex??null,C=e.activeItemIndex??null,M=e.glowIntensity??0,I=e.glowColor||"#3b82f6",_=typeof I=="string"?I:I.color||((V=(W=I.stops)==null?void 0:W[0])==null?void 0:V.color)||"#3b82f6",E=e.opacity!==void 0?e.opacity:s.opacity!==void 0?s.opacity:1;if(t.save(),t.globalAlpha*=E,M>0){const J=t.getTransform(),at=Math.sqrt(J.a*J.a+J.b*J.b)||1;t.shadowColor=_,t.shadowBlur=M*2*at,t.shadowOffsetX=0,t.shadowOffsetY=0}if(g){const J=e.listBackgroundColor||"rgba(31, 41, 55, 0.4)",at=this.createCanvasFill(t,J,n,i);t.fillStyle=at||"rgba(31, 41, 55, 0.4)",t.beginPath(),this.drawCustomShape(t,e.containerShape||"rectangle",e.containerPath||"",a,r,n,i,l)||t.fill();const it=t.createLinearGradient(a,r,a+n,r+i);it.addColorStop(0,"rgba(255, 255, 255, 0.15)"),it.addColorStop(.5,"rgba(255, 255, 255, 0.08)"),it.addColorStop(1,"rgba(255, 255, 255, 0.03)"),t.fillStyle=it,t.beginPath(),this.drawCustomShape(t,e.containerShape||"rectangle",e.containerPath||"",a,r,n,i,l)||t.fill();const X=e.borderWidth??0;if(X>0&&e.borderColor&&e.borderColor!=="transparent"){const ct=this.createCanvasFill(t,e.borderColor,n,i);t.strokeStyle=ct||"rgba(255, 255, 255, 0.25)",t.lineWidth=X}else t.strokeStyle="rgba(255, 255, 255, 0.25)",t.lineWidth=1;t.beginPath(),this.drawCustomShape(t,e.containerShape||"rectangle",e.containerPath||"",a,r,n,i,l)||t.stroke()}else{const J=e.backgroundColor&&e.backgroundColor!=="transparent"?e.backgroundColor:e.listBackgroundColor||"transparent",at=this.createCanvasFill(t,J,n,i);if(at){t.fillStyle=at,t.beginPath();const it=this.drawCustomShape(t,e.containerShape||"rectangle",e.containerPath||"",a,r,n,i,l);t.fill()}const j=e.borderWidth??0;if(j>0){const it=this.createCanvasFill(t,e.borderColor||"#cccccc",n,i);t.strokeStyle=it||"#cccccc",t.lineWidth=j,t.beginPath();const B=this.drawCustomShape(t,e.containerShape||"rectangle",e.containerPath||"",a,r,n,i,l);t.stroke()}}t.shadowBlur=0;const P=e.clipContent!==!1&&e.listLayout!=="circular";if(P)if(t.save(),t.beginPath(),this.drawCustomShape(t,e.containerShape||"rectangle",e.containerPath||"",a,r,n,i,l)&&e.containerShape==="custom")try{const at=new Path2D(e.containerPath);t.translate(a,r),t.scale(n/100,i/100),t.clip(at),t.scale(100/n,100/i),t.translate(-a,-r)}catch{}else t.clip();const L=typeof v=="number"?v:d==="vertical"?v[0]:v[3];let k=(d==="vertical"?r:a)+f+L;if(t.textBaseline="middle",p.forEach((J,at)=>{var ft,Bt,Ot,Pt;const j=e.listLayout||"linear",it=j==="circular"?h:d==="vertical"?n:h,B=j==="circular"||d==="vertical"?m:i;let X=0,N=0,ct=0;if(j==="circular"){const vt=p.length||1,Yt=Math.PI*2/vt,zt=e.circularStartAngle||0,Gt=e.circularRadius||100,Dt=f*.01+zt*Math.PI/180,te=at*Yt+Dt,ie=a+n/2,ce=r+i/2;X=ie+Math.cos(te)*Gt-it/2,N=ce+Math.sin(te)*Gt-B/2,ct=te+(e.itemRotation||0)*Math.PI/180}else X=d==="vertical"?a:k,N=d==="vertical"?k:r,ct=(e.itemRotation||0)*Math.PI/180;const Mt=w===at,bt=C===at,wt=e.itemBorderWidth??0;t.save(),ct!==0&&(t.translate(X+it/2,N+B/2),t.rotate(ct),t.translate(-(X+it/2),-(N+B/2)));const gt=Mt?((ft=e.hoverStyle)==null?void 0:ft.scale)??1:bt?((Bt=e.activeStyle)==null?void 0:Bt.scale)??1:1;if(gt!==1&&(t.translate(X+it/2,N+B/2),t.scale(gt,gt),t.translate(-(X+it/2),-(N+B/2))),bt){const vt=((Ot=e.activeStyle)==null?void 0:Ot.itemBackgroundColor)||e.activeBackgroundColor||(g?"rgba(255, 255, 255, 0.15)":"rgba(0, 0, 0, 0.1)"),Yt=this.createCanvasFill(t,vt,it,B);t.fillStyle=Yt||(typeof vt=="string"?vt:"transparent"),t.beginPath(),this.drawCustomShape(t,e.activeItemShape||e.itemShape||"rectangle",e.activeItemShape==="custom"?e.activeItemPath||"":e.itemPath||"",X,N,it,B,e.itemCornerRadius??0)||t.fill()}else if(Mt){const vt=((Pt=e.hoverStyle)==null?void 0:Pt.itemBackgroundColor)||e.hoverBackgroundColor||(g?"rgba(255, 255, 255, 0.1)":"rgba(0, 0, 0, 0.05)"),Yt=this.createCanvasFill(t,vt,it,B);t.fillStyle=Yt||(typeof vt=="string"?vt:"transparent"),t.beginPath(),this.drawCustomShape(t,e.itemShape||"rectangle",e.itemPath||"",X,N,it,B,e.itemCornerRadius??0)||t.fill()}else if(S!=="transparent"){const vt=this.createCanvasFill(t,S,it,B);t.fillStyle=vt||(typeof S=="string"?S:"transparent"),t.beginPath(),this.drawCustomShape(t,e.itemShape||"rectangle",e.itemPath||"",X,N,it,B,e.itemCornerRadius??0)||t.fill()}if(wt>0&&e.itemBorderColor&&e.itemBorderColor!=="transparent"){const vt=this.createCanvasFill(t,e.itemBorderColor,it,B);t.strokeStyle=vt||(typeof e.itemBorderColor=="string"?e.itemBorderColor:"#cccccc"),t.lineWidth=wt,t.beginPath(),this.drawCustomShape(t,e.itemShape||"rectangle",e.itemPath||"",X,N,it,B,e.itemCornerRadius??0)||t.stroke()}if(bt){const vt=this.createCanvasFill(t,c,d==="vertical"?3:it,d==="vertical"?B:3);t.fillStyle=vt||c,d==="vertical"?t.fillRect(X,N,3,B):t.fillRect(X,N+B-3,it,3)}const It=bt?"#ffffff":g?"rgba(255, 255, 255, 0.9)":b;t.fillStyle=It,t.font=bt||Mt?"600 14px Inter, sans-serif":"400 14px Inter, sans-serif";const ut=typeof J=="string"?J:(J==null?void 0:J.label)||`Item ${at+1}`,Lt=X+(d==="vertical"?16:it/2),Wt=N+B/2;d==="horizontal"||j==="circular"?t.textAlign="center":t.textAlign="left";const q=j==="circular"?X+it/2:Lt;t.fillText(ut,q,Wt),t.restore(),t.beginPath(),k+=(d==="vertical"?m:h)+u}),P&&t.restore(),e.showScrollbar!==!1){const J=typeof v=="number"?v:d==="vertical"?v[0]:v[3],j=(p.length||0)*(d==="vertical"?m:h)+Math.max(0,(p.length||0)-1)*u+J*2,it=d==="vertical"?i:n,B=e.listLayout||"linear",X=e.containerShape==="circle"||B==="circular",N=e.scrollbarColor||"rgba(255,255,255,0.3)";let ct=typeof N=="object"?N.color||((D=(U=N.stops)==null?void 0:U[0])==null?void 0:D.color)||"rgba(255,255,255,0.3)":N;const Mt=((ot=(Y=this.artboard)==null?void 0:Y.tokens)==null?void 0:ot.colors)||{};Mt[ct]&&(ct=Mt[ct]);const bt=e.scrollbarWidth||2;if(t.save(),X){const wt=Math.min(n,i)/2-bt/2-2,gt=a+n/2,It=r+i/2;if(t.strokeStyle=ct,t.lineWidth=bt,t.lineCap="round",t.beginPath(),B==="circular"){const ut=Math.PI/4,Lt=-(f*.01)-Math.PI/2;t.arc(gt,It,wt,Lt,Lt+ut)}else{const ut=Math.PI/2,Lt=j>0?Math.min(1,it/j):1,Wt=ut*Lt,q=j>0?-f/j*ut:0,Bt=-Math.PI/4+q;t.arc(gt,It,wt,Bt,Bt+Wt)}t.stroke()}else{let wt=it,gt=0;if(j>it){const It=it/j;wt=Math.max(16,it*It);const ut=it-wt,Lt=j-it;gt=Lt>0?Math.max(0,Math.min(ut,-f/Lt*ut)):0}if(t.fillStyle=ct,d==="vertical"){const It=a+n-bt-2,ut=r+gt,Lt=bt,Wt=wt;if(bt>2){t.beginPath();const q=Math.min(bt/2,wt/2);if(t.roundRect)try{t.roundRect(It,ut,Lt,Wt,q),t.fill()}catch{t.fillRect(It,ut,Lt,Wt)}else t.fillRect(It,ut,Lt,Wt)}else t.fillRect(It,ut,Lt,Wt)}else{const It=a+gt,ut=r+i-bt-2,Lt=wt,Wt=bt;if(bt>2){t.beginPath();const q=Math.min(bt/2,wt/2);if(t.roundRect)try{t.roundRect(It,ut,Lt,Wt,q),t.fill()}catch{t.fillRect(It,ut,Lt,Wt)}else t.fillRect(It,ut,Lt,Wt)}else t.fillRect(It,ut,Lt,Wt)}}t.restore()}t.beginPath(),t.restore()}drawCustomShape(t,s,o,e,n,i,a,r){if(s==="circle"){const l=Math.min(i,a)/2;return t.arc(e+i/2,n+a/2,l,0,Math.PI*2),!1}else if(s==="pill"){const l=Math.min(i,a)/2;return this.drawListViewRect(t,e,n,i,a,l),!1}else if(s==="custom"&&o)try{const l=new Path2D(o);return t.save(),t.translate(e,n),t.scale(i/100,a/100),t.fill(l),t.restore(),!0}catch{return this.drawListViewRect(t,e,n,i,a,r),!1}return this.drawListViewRect(t,e,n,i,a,r),!1}updateListViewScrollFromPointer(t){var S,w,C,M;if(!this._lastPointerPos||!this._prevPointerPos)return;const s=this.objectStates.get(t.id);s&&!s.options&&(s.options=JSON.parse(JSON.stringify(t.options||{})));const o=(s==null?void 0:s.options)||t.options||{},e=o.orientation||"vertical",n=this._lastPointerPos.x-this._prevPointerPos.x,i=this._lastPointerPos.y-this._prevPointerPos.y;let a=o.scrollOffset||0;const r=this.getResolvedListViewItems(t,o),l=o.itemGap??10,d=o.itemHeight??50,p=o.itemWidth??200,u=(s==null?void 0:s.width)!==void 0?s.width:((S=t.geometry)==null?void 0:S.width)||200,m=(s==null?void 0:s.height)!==void 0?s.height:((w=t.geometry)==null?void 0:w.height)||300,h=typeof o.padding=="number"?o.padding:e==="vertical"?((C=o.padding)==null?void 0:C[0])||0:((M=o.padding)==null?void 0:M[3])||0,v=(r.length||0)*(e==="vertical"?d:p)+Math.max(0,(r.length||0)-1)*l+h*2,g=e==="vertical"?m:u,c=Math.max(0,v-g);if(this.draggingListViewIsScrollbar&&o.listLayout!=="circular"){const I=v>0?g/v:1,_=Math.max(16,g*I),E=Math.max(1,g-_),P=c>0?c/E:1;e==="vertical"?a-=i*P:a-=n*P}else e==="vertical"?a+=i:a+=n;if((o.listLayout||"linear")==="circular"){o.scrollOffset=a,s&&s.options&&(s.options.scrollOffset=a),t.options&&(t.options.scrollOffset=a);return}a>0&&(a=0),a<-c&&(a=-c),o.scrollOffset=a,s&&s.options&&(s.options.scrollOffset=a),t.options&&(t.options.scrollOffset=a)}updateListViewHoverFromPointer(t,s,o){const e=this.getListViewItemIndexAtPointer(t,s,o),n=this.objectStates.get(t.id);if(n&&n.options)n.options.hoveredIndex!==e&&(n.options.hoveredIndex=e);else{const i=t.options||{};i.hoveredIndex!==e&&(i.hoveredIndex=e)}}getListViewItemIndexAtPointer(t,s,o){var F,O;const e=this.objectStates.get(t.id),n=(e==null?void 0:e.options)||t.options||{},i=this.getResolvedListViewItems(t,n);if(i.length===0)return null;const a=(e==null?void 0:e.width)!==void 0?e.width:((F=t.geometry)==null?void 0:F.width)||200,r=(e==null?void 0:e.height)!==void 0?e.height:((O=t.geometry)==null?void 0:O.height)||300,l=n.orientation||"vertical",d=n.itemGap??10,p=n.itemHeight??50,u=n.itemWidth??200,m=n.scrollOffset??0,h=n.padding??0,f=this.getWorldTransform(t.id),v=s-f.x,g=o-f.y,c=-f.rotation*(Math.PI/180),b=Math.cos(c),S=Math.sin(c),w=v*b-g*S,C=v*S+g*b,M=-a/2,I=-r/2,_=typeof h=="number"?h:l==="vertical"?h[0]:h[3];let E=(l==="vertical"?I:M)+m+_;const P=n.listLayout||"linear",L=i.length||1,k=Math.PI*2/L,A=n.circularStartAngle||0,T=n.circularRadius||100,R=m*.01+A*Math.PI/180;for(let W=0;W<i.length;W++){const V=P==="circular"?u:l==="vertical"?a:u,U=P==="circular"||l==="vertical"?p:r;let D=0,Y=0,ot=0;if(P==="circular"){const J=W*k+R,at=M+a/2,j=I+r/2;D=at+Math.cos(J)*T-V/2,Y=j+Math.sin(J)*T-U/2,ot=J+(n.itemRotation||0)*Math.PI/180}else D=l==="vertical"?M:E,Y=l==="vertical"?E:I,ot=(n.itemRotation||0)*Math.PI/180;if(ot!==0){const J=D+V/2,at=Y+U/2,j=w-J,it=C-at,B=-ot,X=j*Math.cos(B)-it*Math.sin(B)+J,N=j*Math.sin(B)+it*Math.cos(B)+at;if(X>=D&&X<=D+V&&N>=Y&&N<=Y+U)return W}else if(w>=D&&w<=D+V&&C>=Y&&C<=Y+U)return W;E+=(l==="vertical"?p:u)+d}return null}drawListViewRect(t,s,o,e,n,i){this.drawRoundRect(t,s,o,e,n,i)}solveBehaviors(t){if(!this.artboard)return;if(!this._lastPointerPos){this.frameCount%60;return}const{x:s,y:o}=this._lastPointerPos;this.artboard.objects.forEach(e=>{if(!e.behaviors||e.behaviors.length===0)return;const n=this.objectStates.get(e.id);n&&e.behaviors.forEach(i=>{var u,m,h,f,v,g,c,b,S,w,C,M,I,_,E,P,L,k,A,T,R,F,O,W,V,U,D,Y,ot,J,at,j,it,B,X,N,ct,Mt,bt,wt,gt,It,ut,Lt,Wt,q,ft,Bt,Ot,Pt,vt,Yt,zt,Gt,Dt,te,ie,ce,ve,_e,ge,Ee,Zt,Me,Re,Ie,de,me,Ae,he,mt,rt,z,K,G,x,Q,H,lt,kt,At,Ht,Ut,qt,$,dt,Rt,Nt,st,yt,St,ee,Ct,Vt,Tt,Xt,Ft,le,fe,Oe,jt,oe,ne,Fe,Be,xe,We,De,Ye,Ge,se,ue,Se,Xe,Ne,ke,Ce,we;if(!i.enabled)return;const a=i.startTime||0,r=i.endTime||1/0;if(this.currentTime<a||this.currentTime>r)return;const l=n.x-s,d=n.y-o,p=Math.sqrt(l*l+d*d);if(this.frameCount%240===0&&Math.random()<.1&&this.log(`[ExodeUI] Executing ${i.type} on ${e.name}`),i.type===tt.Proximity){const Z=((u=i.settings)==null?void 0:u.radius)||300,nt=((m=i.settings)==null?void 0:m.falloff)||"smooth";let et=0;p<Z&&(nt==="linear"?et=1-p/Z:et=Math.pow(1-p/Z,2)),i.sensors.forEach(pt=>{this.applyBehaviorSensor(n,pt,et,t,i.settings,e,l,d,p)})}else if(i.type===tt.Magnetic){const Z=((h=i.settings)==null?void 0:h.radius)||400,nt=((f=i.settings)==null?void 0:f.strength)||.5;if(p<Z&&p>5){const et=1-p/Z,pt=l*et*nt,$t=d*et*nt;n.x-=pt*t*10,n.y-=$t*t*10}}else if(i.type===tt.Repel){const Z=((v=i.settings)==null?void 0:v.radius)||300,nt=((g=i.settings)==null?void 0:g.strength)||1;if(p<Z){const et=Math.pow(1-p/Z,2);n.x+=l/(p||1)*et*60*nt*t*5,n.y+=d/(p||1)*et*60*nt*t*5}}else if(i.type===tt.Orbit){const Z=((c=i.settings)==null?void 0:c.speed)||1,nt=((b=i.settings)==null?void 0:b.radius)||30,et=this.currentTime*Z*Math.PI*2;n.x+=Math.cos(et)*nt*t*5,n.y+=Math.sin(et)*nt*t*5,n.rotation+=2*t*5}else if(i.type===tt.Vortex){const Z=((S=i.settings)==null?void 0:S.radius)||400,nt=((w=i.settings)==null?void 0:w.speed)||2,et=((C=i.settings)==null?void 0:C.strength)||1;if(p<Z){const pt=Math.pow(1-p/Z,1.5),$t=this.currentTime*nt*Math.PI*2,xt=Math.cos($t)*30-l*.4,Jt=Math.sin($t)*30-d*.4;n.x+=xt*pt*et*t*5,n.y+=Jt*pt*et*t*5,n.rotation+=5*pt*et*t*5,n.scale_x*=1-pt*.1*et*t,n.scale_y*=1-pt*.1*et*t}}else if(i.type===tt.Fluid){const Z=((M=i.settings)==null?void 0:M.radius)||300,nt=((I=i.settings)==null?void 0:I.strength)||1;if(p<Z){const et=Math.pow(1-p/Z,1.2),pt=l/(p||1)*et*1.2*nt,$t=d/(p||1)*et*1.2*nt;n.x+=pt*10*t*5,n.y+=$t*10*t*5,n.scale_x*=1+et*.3*nt*t,n.scale_y*=1+et*.3*nt*t}}else if(i.type===tt.Elastic){const Z=((_=i.settings)==null?void 0:_.radius)||300,nt=((E=i.settings)==null?void 0:E.strength)||1;if(p<Z){const et=1-p/Z;n.scale_x*=1+et*.4*nt*t,n.scale_y*=1+et*.4*nt*t}}else if(i.type===tt.Holographic){const Z=n.x-this.canvasWidth/2,nt=n.y-this.canvasHeight/2,et=((P=i.settings)==null?void 0:P.factor)||25;if(n.x-=Z/1e3*et*t*5,n.y-=nt/1e3*et*t*5,n.style){const pt=1-Math.min(1,p/400);n.style.exposure=(n.style.exposure||1)+pt*.5*t}}else if(i.type===tt.Sticky){const Z=((L=i.settings)==null?void 0:L.radius)||80,nt=((k=i.settings)==null?void 0:k.strength)||1;if(p<Z){const et=Math.pow(1-p/Z,2);n.x-=l*et*nt*t*10,n.y-=d*et*nt*t*10,n.scale_x*=1-et*.1*nt*t,n.scale_y*=1-et*.1*nt*t}}else if(i.type===tt.Dilation){const Z=((A=i.settings)==null?void 0:A.size)||120,nt=((T=i.settings)==null?void 0:T.strength)||1;if(p<Z){const et=1-p/Z;n.scale_x*=1+et*.5*nt*t,n.scale_y*=1+et*.5*nt*t}}else if(i.type===tt.Parallax){const Z=((R=i.settings)==null?void 0:R.factor)||15,nt=((F=i.settings)==null?void 0:F.strength)||1,et=this.canvasWidth/2,pt=this.canvasHeight/2,$t=this._lastPointerPos||{x:et,y:pt},xt=($t.x-et)/et,Jt=($t.y-pt)/pt,pe=(((O=e.transform)==null?void 0:O.x)??0)+xt*Z*nt,Te=(((W=e.transform)==null?void 0:W.y)??0)+Jt*Z*nt,$e=(((V=e.transform)==null?void 0:V.rotate_x)??0)-Jt*Z*1.5*nt,ye=(((U=e.transform)==null?void 0:U.rotate_y)??0)+xt*Z*1.5*nt,Le=Math.min(1,10*t);n.x=this.lerp(n.x??((D=e.transform)==null?void 0:D.x)??0,pe,Le),n.y=this.lerp(n.y??((Y=e.transform)==null?void 0:Y.y)??0,Te,Le),n.rotate_x=this.lerp(n.rotate_x??((ot=e.transform)==null?void 0:ot.rotate_x)??0,$e,Le),n.rotate_y=this.lerp(n.rotate_y??((J=e.transform)==null?void 0:J.rotate_y)??0,ye,Le)}else if(i.type===tt.Fold){if(p<300){const Z=1-p/300,nt=(l>0?-1:1)*Z*10,et=1-Z*.1,pt=d/300*Z*20,$t=-(l/300)*Z*20,xt=Math.min(1,10*t);n.skew_x=this.lerp(n.skew_x??((at=e.transform)==null?void 0:at.skew_x)??0,nt,xt),n.scale_y=this.lerp(n.scale_y??((j=e.transform)==null?void 0:j.scale_y)??1,(((it=e.transform)==null?void 0:it.scale_y)??1)*et,xt),n.rotate_x=this.lerp(n.rotate_x??((B=e.transform)==null?void 0:B.rotate_x)??0,pt,xt),n.rotate_y=this.lerp(n.rotate_y??((X=e.transform)==null?void 0:X.rotate_y)??0,$t,xt),n.style=n.style||{...e.style},n.style.artEffect={enabled:!0,type:"fold_overlay",intensity:((N=i.settings)==null?void 0:N.opacity)??.5}}}else if(i.type===tt.Crumple){if(p<300){const Z=1-p/300,nt=Z*(Math.random()-.5)*5,et=Z*(Math.random()-.5)*.05,pt=Math.min(1,15*t);n.skew_x=this.lerp(n.skew_x??((ct=e.transform)==null?void 0:ct.skew_x)??0,nt,pt),n.scale_x=this.lerp(n.scale_x??((Mt=e.transform)==null?void 0:Mt.scale_x)??1,(((bt=e.transform)==null?void 0:bt.scale_x)??1)*(1+et),pt),n.scale_y=this.lerp(n.scale_y??((wt=e.transform)==null?void 0:wt.scale_y)??1,(((gt=e.transform)==null?void 0:gt.scale_y)??1)*(1+et),pt),n.style=n.style||{...e.style},n.style.artEffect={enabled:!0,type:"crumple_overlay",intensity:((It=i.settings)==null?void 0:It.intensity)??1,scale:((ut=i.settings)==null?void 0:ut.scale)??2}}}else if(i.type===tt.Squash){const Z=((Lt=i.settings)==null?void 0:Lt.strength)||.8;p<(e.width||100)&&this.isMouseDown?(n.scale_y=this.lerp(n.scale_y??1,(((Wt=e.transform)==null?void 0:Wt.scale_y)??1)*Z,.3),n.scale_x=this.lerp(n.scale_x??1,(((q=e.transform)==null?void 0:q.scale_x)??1)*(1+(1-Z)*.4),.3)):(n.scale_y=this.lerp(n.scale_y??1,((ft=e.transform)==null?void 0:ft.scale_y)??1,.2),n.scale_x=this.lerp(n.scale_x??1,((Bt=e.transform)==null?void 0:Bt.scale_x)??1,.2))}else if(i.type===tt.TextCounter){const Z=((Ot=i.settings)==null?void 0:Ot.duration)||2,nt=((Pt=i.settings)==null?void 0:Pt.from)||0,et=((vt=i.settings)==null?void 0:vt.to)||100;i._runtimeStart===void 0&&(i._runtimeStart=this.currentTime);const pt=this.currentTime-i._runtimeStart,$t=Math.min(1,pt/Z),xt=Math.floor(nt+(et-nt)*$t);if(((Yt=e.geometry)==null?void 0:Yt.type)==="Text"){const Jt=((zt=i.settings)==null?void 0:zt.prefix)||"",pe=((Gt=i.settings)==null?void 0:Gt.suffix)||"";n.geometry||(n.geometry={...e.geometry}),n.geometry.text=`${Jt}${xt}${pe}`}}else if(i.type===tt.Spotlight){const Z=((Dt=i.settings)==null?void 0:Dt.radius)||250,nt=((te=i.settings)==null?void 0:te.strength)||1.5;if(p<Z){const et=Math.pow(1-p/Z,2);n.style||(n.style={...e.style}),n.style.adjustments||(n.style.adjustments={...(ie=e.style)==null?void 0:ie.adjustments}),n.style.adjustments.exposure=(((ve=(ce=e.style)==null?void 0:ce.adjustments)==null?void 0:ve.exposure)||0)+et*nt*50}else(_e=n.style)!=null&&_e.adjustments&&(n.style.adjustments.exposure=this.lerp(n.style.adjustments.exposure||0,((Ee=(ge=e.style)==null?void 0:ge.adjustments)==null?void 0:Ee.exposure)||0,.1))}else if(i.type===tt.Noise||i.type===tt.Float){const Z=(((Zt=i.settings)==null?void 0:Zt.frequency)||((Me=i.settings)==null?void 0:Me.speed)||1)*.002,nt=(((Re=i.settings)==null?void 0:Re.amplitude)||((Ie=i.settings)==null?void 0:Ie.range)||50)*(((de=i.settings)==null?void 0:de.strength)||1),et=Date.now();n.x+=Math.sin(et*Z)*nt*t,n.y+=Math.cos(et*Z*.8)*nt*t,n.rotation+=Math.sin(et*Z*.5)*5*t}else if(i.type===tt.Pulse){const Z=(((me=i.settings)==null?void 0:me.speed)||1)*.005,nt=(((Ae=i.settings)==null?void 0:Ae.scale)||1.2)-1,et=Math.sin(Date.now()*Z),pt=((he=i.settings)==null?void 0:he.strength)||1;n.scale_x*=1+et*nt*pt*t,n.scale_y*=1+et*nt*pt*t,n.style&&(n.style.exposure=(n.style.exposure||1)+Math.max(0,et)*.1*pt*t)}else if(i.type===tt.Draggable){if(!this.draggingBehaviors.has(e.id)){const nt=((mt=i.settings)==null?void 0:mt.radius)||150;if(p<nt){const et=((rt=i.settings)==null?void 0:rt.strength)||1,pt=Math.max(0,1-p/nt);this.applyBehaviorSensor(n,re.PositionX,pt*et,t,i.settings,e,l,d,p),this.applyBehaviorSensor(n,re.PositionY,pt*et,t,i.settings,e,l,d,p)}}}else if(i.type===tt.Scroll){const Z=((z=i.settings)==null?void 0:z.axis)||"vertical",nt=((K=i.settings)==null?void 0:K.factor)||.5,et=((G=i.settings)==null?void 0:G.strength)||1,pt=((x=i.settings)==null?void 0:x.scaleFactor)||0;(Z==="vertical"||Z==="both")&&(n.y+=this.scrollOffset.y*nt*et*t),(Z==="horizontal"||Z==="both")&&(n.x+=this.scrollOffset.x*nt*et*t),pt!==0&&(n.scale_x*=1+this.scrollOffset.y*pt*t,n.scale_y*=1+this.scrollOffset.y*pt*t)}else if(i.type===tt.LookAt){const Z=((Q=i.settings)==null?void 0:Q.factor)||1,nt=((H=i.settings)==null?void 0:H.strength)||1,et=Math.atan2(-d,-l)*(180/Math.PI),pt=n.rotation,$t=(et-pt+180)%360-180;n.rotation+=$t*Z*nt*t*10}else if(i.type===tt.Scan){const Z=(((lt=i.settings)==null?void 0:lt.speed)||1)*.004,nt=((kt=i.settings)==null?void 0:kt.strength)||1,et=(Math.sin(Date.now()*Z)+1)/2;n.style&&(n.style.exposure=(n.style.exposure||1)+et*nt*t*5),n.x+=(et-.5)*20*nt*t}else if(i.type===tt.Glint)n.style=n.style||{...e.style},n.style.artEffect={enabled:!0,type:"glint_overlay",intensity:((At=i.settings)==null?void 0:At.strength)??.8};else if(i.type===tt.Ratchet){const Z=((Ht=i.settings)==null?void 0:Ht.steps)||12,nt=(((Ut=i.settings)==null?void 0:Ut.speed)||1)*30,et=Math.floor(n.rotation/(360/Z))*(360/Z);n.rotation=this.lerp(n.rotation,et+nt*t,.1)}else if(i.type===tt.Jitter&&p<300){const Z=((qt=i.settings)==null?void 0:qt.strength)||1,nt=((($=i.settings)==null?void 0:$.intensity)||5)*Z;n.x+=(Math.random()-.5)*nt*t*60,n.y+=(Math.random()-.5)*nt*t*60,n.rotation+=(Math.random()-.5)*nt*t*120}else if(i.type===tt.Follower){const Z=(dt=i.settings)==null?void 0:dt.targetId;if(Z){const nt=this.objectStates.get(Z);if(nt){const et=((Rt=i.settings)==null?void 0:Rt.stiffness)||.1,pt=nt.x-n.x,$t=nt.y-n.y;n.x+=pt*et*t*60,n.y+=$t*et*t*60}}}else if(i.type===tt.Wrap)n.x<0?n.x=this.canvasWidth:n.x>this.canvasWidth&&(n.x=0),n.y<0?n.y=this.canvasHeight:n.y>this.canvasHeight&&(n.y=0);else if(i.type===tt.Gravity){const Z=((Nt=i.settings)==null?void 0:Nt.strength)||9.8;n.y+=Z*t*10}else if(i.type===tt.Velocity){const Z=((st=i.settings)==null?void 0:st.vx)||0,nt=((yt=i.settings)==null?void 0:yt.vy)||0;n.x+=Z*t*10,n.y+=nt*t*10}else if(i.type===tt.Shear){const Z=((St=i.settings)==null?void 0:St.strength)||1,nt=((ee=i.settings)==null?void 0:ee.radius)||300;if(p<nt){const et=1-p/nt;n.skew_x=this.lerp(n.skew_x||0,(((Ct=e.transform)==null?void 0:Ct.skew_x)||0)+et*Z*30,.1)}else n.skew_x=this.lerp(n.skew_x||0,((Vt=e.transform)==null?void 0:Vt.skew_x)||0,.05)}else if(i.type===tt.Lens){const Z=((Tt=i.settings)==null?void 0:Tt.radius)||200,nt=((Xt=i.settings)==null?void 0:Xt.strength)||.5;if(p<Z){const et=Math.pow(1-p/Z,2);n.scale_x=this.lerp(n.scale_x??1,(((Ft=e.transform)==null?void 0:Ft.scale_x)??1)*(1+et*nt),.2),n.scale_y=this.lerp(n.scale_y??1,(((le=e.transform)==null?void 0:le.scale_y)??1)*(1+et*nt),.2)}else n.scale_x=this.lerp(n.scale_x??1,((fe=e.transform)==null?void 0:fe.scale_x)??1,.1),n.scale_y=this.lerp(n.scale_y??1,((Oe=e.transform)==null?void 0:Oe.scale_y)??1,.1)}else if(i.type===tt.LayoutAnimation){const Z=((jt=i.settings)==null?void 0:jt.watchProperties)||["x","y","scale_x","scale_y","opacity","rotation"],nt=((oe=i.settings)==null?void 0:oe.duration)||.3;this._layoutAnimCache.has(e.id)||this._layoutAnimCache.set(e.id,new Map);const et=this._layoutAnimCache.get(e.id);for(const pt of Z){const $t=this.getObjectProperty(n,e,pt);if($t===void 0)continue;const xt=et.get(pt);if(!xt)et.set(pt,{from:$t,to:$t,startTime:this.currentTime,duration:0});else if(xt.to!==$t){const pe=this.getObjectProperty(n,e,pt);et.set(pt,{from:pe??xt.from,to:$t,startTime:this.currentTime,duration:((ne=i.settings)==null?void 0:ne.duration)??nt})}const Jt=et.get(pt);if(Jt.duration>0&&Jt.from!==Jt.to){const pe=this.currentTime-Jt.startTime,Te=Math.min(1,pe/Jt.duration),$e=this.applyEasing(Te,((Fe=i.settings)==null?void 0:Fe.easing)||"easeOutCubic"),ye=Jt.from+(Jt.to-Jt.from)*$e;this.setObjectProperty(n,e,pt,ye)}}}else if(i.type===tt.StateReactive){this._layoutAnimCache.has(e.id)||this._layoutAnimCache.set(e.id,new Map);const Z=this._layoutAnimCache.get(e.id),nt=((Be=i.settings)==null?void 0:Be.defaultDuration)||.3,et=["x","y","scale_x","scale_y","opacity","rotation","style.fill.color","style.stroke.width","geometry.cornerRadius","style.blur.value","style.shadow.blur","style.shadow.offsetX","style.shadow.offsetY"];for(const pt of et){const $t=this.getObjectProperty(n,e,pt);if($t===void 0||typeof $t!="number")continue;const xt=Z.get(pt);if(!xt)Z.set(pt,{from:$t,to:$t,startTime:this.currentTime,duration:0});else if(xt.to!==$t){const pe=this.getObjectProperty(n,e,pt);Z.set(pt,{from:pe??xt.from,to:$t,startTime:this.currentTime,duration:nt})}const Jt=Z.get(pt);if(Jt.duration>0&&Jt.from!==Jt.to){const pe=this.currentTime-Jt.startTime,Te=Math.min(1,pe/Jt.duration),$e=this.applyEasing(Te,((xe=i.settings)==null?void 0:xe.defaultEasing)||"easeOutCubic"),ye=Jt.from+(Jt.to-Jt.from)*$e;this.setObjectProperty(n,e,pt,ye)}}}else if(i.type===tt.SpringChain){const Z=((We=i.settings)==null?void 0:We.connections)||[],nt=((De=i.settings)==null?void 0:De.globalDamping)||.3;this._springChainState.has(e.id)||this._springChainState.set(e.id,new Map);const et=this._springChainState.get(e.id);for(const $t of Z){if(!et.has($t.targetId)){const xt=this.objectStates.get($t.targetId);et.set($t.targetId,{x:(xt==null?void 0:xt.x)??0,y:(xt==null?void 0:xt.y)??0,vx:0,vy:0})}et.has(e.id)||et.set(e.id,{x:n.x,y:n.y,vx:0,vy:0})}const pt=et.get(e.id);if(pt){pt.x=n.x,pt.y=n.y;for(const $t of Z){const xt=et.get($t.targetId);if(!xt)continue;const Jt=xt.x-pt.x,pe=xt.y-pt.y,Te=Math.sqrt(Jt*Jt+pe*pe)||.001,ye=(Te-($t.restLength||50))*($t.stiffness||.8),Le=Jt/Te*ye,Qe=pe/Te*ye;pt.vx+=Le*t*10,pt.vy+=Qe*t*10,xt.vx-=Le*t*10,xt.vy-=Qe*t*10,pt.vx*=1-nt*t*10,pt.vy*=1-nt*t*10,xt.vx*=1-nt*t*10,xt.vy*=1-nt*t*10;const Pe=this.objectStates.get($t.targetId);Pe&&(Pe.x+=xt.vx*t,Pe.y+=xt.vy*t)}n.x+=pt.vx*t,n.y+=pt.vy*t}}else if(i.type===tt.ParticleEmitter){const Z=((Ye=i.settings)==null?void 0:Ye.rate)||10,nt=((Ge=i.settings)==null?void 0:Ge.speed)||100,et=((se=i.settings)==null?void 0:se.size)||5,pt=((ue=i.settings)==null?void 0:ue.lifetime)||2,$t=((Se=i.settings)==null?void 0:Se.gravity)||0,xt=((Xe=i.settings)==null?void 0:Xe.color)||"#ffffff",Jt=((Ne=i.settings)==null?void 0:Ne.maxParticles)||200,pe=(ke=i.settings)!=null&&ke.rateInputId?this.inputs.get(i.settings.rateInputId)??Z:Z,Te=(Ce=i.settings)!=null&&Ce.gravityInputId?this.inputs.get(i.settings.gravityInputId)??$t:$t,$e=(we=i.settings)!=null&&we.speedInputId?this.inputs.get(i.settings.speedInputId)??nt:nt;this._emitterPools.has(e.id)||this._emitterPools.set(e.id,[]);const ye=this._emitterPools.get(e.id);let Le=0;i._pendingBurst&&i._pendingBurst>0&&(Le=i._pendingBurst,i._pendingBurst=0);const Qe=Math.floor(pe*t)+(Le||0);for(let Pe=0;Pe<Math.min(Qe,Jt-ye.length);Pe++){const be=Math.random()*Math.PI*2,ms=$e*(.5+Math.random()*.5);ye.push({x:n.x,y:n.y,vx:Math.cos(be)*ms,vy:Math.sin(be)*ms,life:0,maxLife:pt*(.5+Math.random()*.5),size:et*(.5+Math.random()),color:xt,opacity:1})}for(let Pe=ye.length-1;Pe>=0;Pe--){const be=ye[Pe];be.vy+=Te*t*10,be.x+=be.vx*t,be.y+=be.vy*t,be.life+=t,be.opacity=Math.max(0,1-be.life/be.maxLife),be.life>=be.maxLife&&ye.splice(Pe,1)}}})})}applyBehaviorSensor(t,s,o,e,n,i,a=0,r=0,l=1){var h,f,v,g,c,b,S,w,C,M,I,_,E,P,L,k,A,T,R,F,O,W,V,U;const d=(n==null?void 0:n.intensity)||(n==null?void 0:n.strength)||1,p=Math.min(1,15*e),u=l>0?a/l:0,m=l>0?r/l:0;switch(s){case re.Scale:{const D=((h=i==null?void 0:i.transform)==null?void 0:h.scale_x)??1,Y=((f=i==null?void 0:i.transform)==null?void 0:f.scale_y)??1,ot=D*(1+o*d*.4),J=Y*(1+o*d*.4);t.scale_x=(t.scale_x??D)*(1-p)+ot*p,t.scale_y=(t.scale_y??Y)*(1-p)+J*p;break}case re.Opacity:{const D=((v=i==null?void 0:i.transform)==null?void 0:v.opacity)??100,Y=Math.max(0,Math.min(100,D-o*d*100));t.opacity=(t.opacity??D)*(1-p)+Y*p;break}case re.RotateZ:{const D=((g=i==null?void 0:i.transform)==null?void 0:g.rotation)??0,Y=D+o*d*45;t.rotation=(t.rotation??D)*(1-p)+Y*p;break}case re.RotateX:{const D=((c=i==null?void 0:i.transform)==null?void 0:c.rotate_x)??0,Y=D-m*o*d*60;t.rotate_x=(t.rotate_x??D)*(1-p)+Y*p;break}case re.RotateY:{const D=((b=i==null?void 0:i.transform)==null?void 0:b.rotate_y)??0,Y=D+u*o*d*60;t.rotate_y=(t.rotate_y??D)*(1-p)+Y*p;break}case re.PositionX:{const D=((S=i==null?void 0:i.transform)==null?void 0:S.x)??0,Y=D-u*o*d*40;t.x=(t.x??D)*(1-p)+Y*p;break}case re.PositionY:{const D=((w=i==null?void 0:i.transform)==null?void 0:w.y)??0,Y=D-m*o*d*40;t.y=(t.y??D)*(1-p)+Y*p;break}case re.SkewX:{const D=((C=i==null?void 0:i.transform)==null?void 0:C.skew_x)??0,Y=D+u*o*d*45;t.skew_x=(t.skew_x??D)*(1-p)+Y*p,t.skew_x>85&&(t.skew_x=85),t.skew_x<-85&&(t.skew_x=-85);break}case re.Blur:{t.style||(t.style={...i==null?void 0:i.style}),t.style.blur||(t.style.blur={...(M=i==null?void 0:i.style)==null?void 0:M.blur});const D=((_=(I=i==null?void 0:i.style)==null?void 0:I.blur)==null?void 0:_.amount)||0,Y=D+o*((n==null?void 0:n.blur)||20)*d;t.style.blur.amount=(t.style.blur.amount??D)*(1-p)+Y*p;break}case re.Exposure:{t.style||(t.style={...i==null?void 0:i.style}),t.style.adjustments||(t.style.adjustments={...(E=i==null?void 0:i.style)==null?void 0:E.adjustments});const D=((L=(P=i==null?void 0:i.style)==null?void 0:P.adjustments)==null?void 0:L.exposure)||0,Y=D+o*((n==null?void 0:n.exposure)||50)*d;t.style.adjustments.exposure=(t.style.adjustments.exposure??D)*(1-p)+Y*p;break}case re.HueShift:{t.style||(t.style={...i==null?void 0:i.style}),t.style.adjustments||(t.style.adjustments={...(k=i==null?void 0:i.style)==null?void 0:k.adjustments});const D=((T=(A=i==null?void 0:i.style)==null?void 0:A.adjustments)==null?void 0:T.hue)||0,Y=D+o*((n==null?void 0:n.hue)||180)*d;t.style.adjustments.hue=(t.style.adjustments.hue??D)*(1-p)+Y*p;break}case re.Negative:{t.style||(t.style={...i==null?void 0:i.style}),t.style.adjustments||(t.style.adjustments={...(R=i==null?void 0:i.style)==null?void 0:R.adjustments});const D=((O=(F=i==null?void 0:i.style)==null?void 0:F.adjustments)==null?void 0:O.negative)||0,Y=D+o*((n==null?void 0:n.negative)||100)*d;t.style.adjustments.negative=(t.style.adjustments.negative??D)*(1-p)+Y*p;break}case re.CornerRadius:{const D=((W=i==null?void 0:i.transform)==null?void 0:W.corner_radius)||0,Y=D+o*d*50;t.corner_radius=(t.corner_radius??D)*(1-p)+Y*p;break}case re.StrokeWidth:{t.style||(t.style={...i==null?void 0:i.style});const D=((V=i==null?void 0:i.style)==null?void 0:V.borderWidth)||0,Y=D+o*d*10;t.style.borderWidth=(t.style.borderWidth??D)*(1-p)+Y*p;break}case re.LetterSpacing:{t.geometry||(t.geometry={});const D=((U=i==null?void 0:i.geometry)==null?void 0:U.letterSpacing)||0,Y=D+o*d*10;t.geometry.letterSpacing=(t.geometry.letterSpacing??D)*(1-p)+Y*p;break}}}getObjectProperty(t,s,o){const e=o.replace(/\[(\d+)\]/g,".$1").split(".");let n=t;for(const i of e){if(n==null||typeof n!="object")return;if(i==="style"&&t.style===void 0){n=s.style;continue}n=n[i]}return typeof n=="number"?n:void 0}setObjectProperty(t,s,o,e){const n=o.replace(/\[(\d+)\]/g,".$1").split(".");let i=t;for(let r=0;r<n.length-1;r++){const l=n[r];if(i[l]===void 0||i[l]===null){const d=s,p=n.slice(0,r+1).reduce((h,f)=>h==null?void 0:h[f],d),u=n[r+1],m=!isNaN(Number(u));i[l]=p!==void 0?Array.isArray(p)?[...p]:{...p}:m?[]:{}}i=i[l]}const a=n[n.length-1];i!=null&&(i[a]=e)}applyEasing(t,s){switch(s){case"easeOutCubic":return 1-Math.pow(1-t,3);case"easeInCubic":return t*t*t;case"easeInOutCubic":return t<.5?4*t*t*t:1-Math.pow(-2*t+2,3)/2;case"easeOutQuad":return t*(2-t);case"easeInQuad":return t*t;case"easeInOutQuad":return t<.5?2*t*t:1-Math.pow(-2*t+2,2)/2;case"easeOutExpo":return t===1?1:1-Math.pow(2,-10*t);case"easeOutBack":return 1+2.70158*Math.pow(t-1,3)+1.70158*Math.pow(t-1,2);case"easeOutElastic":{const o=2*Math.PI/3;return t===0?0:t===1?1:Math.pow(2,-10*t)*Math.sin((t*10-.75)*o)+1}case"easeOutBounce":return t<1/2.75?7.5625*t*t:t<2/2.75?7.5625*(t-=1.5/2.75)*t+.75:t<2.5/2.75?7.5625*(t-=2.25/2.75)*t+.9375:7.5625*(t-=2.625/2.75)*t+.984375;case"linear":return t;default:return 1-Math.pow(1-t,3)}}lerp(t,s,o){return t*(1-o)+s*o}deepMerge(t,s){if(!t)return s;if(!s)return t;if(typeof t!="object"||typeof s!="object"||t===null||s===null)return s;if(Array.isArray(s)){if(!Array.isArray(t))return s;const e=[...t];for(let n=0;n<s.length;n++)s[n]&&typeof s[n]=="object"&&!Array.isArray(s[n])&&t[n]&&typeof t[n]=="object"?e[n]=this.deepMerge(t[n],s[n]):e[n]=s[n];return e}const o={...t};for(const e in s)Object.prototype.hasOwnProperty.call(s,e)&&(s[e]&&typeof s[e]=="object"&&!Array.isArray(s[e])?o[e]=this.deepMerge(t[e],s[e]):Array.isArray(s[e])?o[e]=this.deepMerge(t[e],s[e]):o[e]=s[e]);return o}processFabricAdjustmentsCanvas(t,s,o,e){if(!e)return t;const n=(e.exposure||0)/100,i=(e.contrast||0)/100,a=(e.saturation||0)/100,r=(e.temperature||0)/200,l=(e.tint||0)/200,d=(e.highlights||0)/500,p=(e.shadows||0)/500,u=e.hue||0,m=(e.negative||0)/100,h=e.blur||0;if(!(n!==0||i!==0||a!==0||r!==0||l!==0||d!==0||p!==0||u!==0||m!==0||h>0))return t;const v=t.naturalWidth||Math.max(1,Math.round(s)),g=t.naturalHeight||Math.max(1,Math.round(o)),c=document.createElement("canvas");c.width=v,c.height=g;const b=c.getContext("2d");if(!b)return t;const S=[];h>0&&S.push(`blur(${h}px)`),u!==0&&S.push(`hue-rotate(${Math.round(u)}deg)`),S.length>0&&(b.filter=S.join(" ")),b.drawImage(t,0,0,v,g);try{const w=b.getImageData(0,0,v,g),C=w.data,M=C.length,I=n*255,_=i>=0?(1+i)/Math.max(.01,1-i):1+i,E=1+a,P=1+r-l/2,L=1+l,k=1-r-l/2,A=1+d+p,T=p*25.5,R=1-m/50,F=(1-R)*255;for(let O=0;O<M;O+=4){let W=C[O],V=C[O+1],U=C[O+2];if(n!==0&&(W+=I,V+=I,U+=I),i!==0&&(W=(W-127.5)*_+127.5,V=(V-127.5)*_+127.5,U=(U-127.5)*_+127.5),a!==0){const D=.2989*W+.587*V+.114*U;W=D+(W-D)*E,V=D+(V-D)*E,U=D+(U-D)*E}(r!==0||l!==0)&&(W=W*P,V=V*L,U=U*k),(d!==0||p!==0)&&(W=W*A+T,V=V*A+T,U=U*A+T),m!==0&&(W=W*R+F,V=V*R+F,U=U*R+F),C[O]=Math.min(255,Math.max(0,W)),C[O+1]=Math.min(255,Math.max(0,V)),C[O+2]=Math.min(255,Math.max(0,U))}return b.putImageData(w,0,0),c}catch{return c}}renderFittedImage(t,s,o,e,n,i,a="cover"){const r=s.naturalWidth||s.width||n,l=s.naturalHeight||s.height||i,d=r/l,p=n/i;let u=n,m=i,h=o,f=e;a==="cover"?d>p?(u=i*d,h=o-(u-n)/2):(m=n/d,f=e-(m-i)/2):a==="contain"&&(d>p?(m=n/d,f=e+(i-m)/2):(u=i*d,h=o+(n-u)/2)),t.drawImage(s,h,f,u,m)}}const ai=_t.forwardRef(({artboard:y,src:t,style:s,autoPlay:o=!0,fit:e="Contain",alignment:n="Center",onReady:i,onTrigger:a,onInputUpdate:r,onComponentChange:l,onToggle:d,onInputChange:p,onInputFocus:u,onInputBlur:m,onLog:h,onLogicUpdate:f,onButtonClick:v,onGraphPointClick:g,currentTime:c,revision:b=0,scrollY:S,scrollX:w,mouseX:C,mouseY:M,isMouseDown:I,inputs:_,interactive:E=!0,onNavigation:P},L)=>{const k=_t.useRef(null),A=_t.useRef(null);A.current||(A.current=new gs);const T=_t.useRef(void 0),R=_t.useRef(0),F=_t.useRef(null),O=_t.useRef(b),W=_t.useRef(null),[,V]=_t.useState(y||null),U=_t.useRef(!0),D=_t.useRef(o),Y=_t.useRef(c);_t.useEffect(()=>{D.current=o},[o]),_t.useEffect(()=>{Y.current=c},[c]),_t.useImperativeHandle(L,()=>k.current),_t.useEffect(()=>(U.current=!0,()=>{U.current=!1,T.current&&cancelAnimationFrame(T.current)}),[]),_t.useEffect(()=>{A.current.setLayout(e,n)},[e,n]),_t.useEffect(()=>{const B=A.current;a&&B.setTriggerCallback(a),r&&B.setInputUpdateCallback((X,N)=>r({[X]:N})),l&&B.setComponentChangeCallback(X=>l(X)),d&&B.setToggleCallback(d),p&&B.setInputChangeCallback(p),u&&B.setInputFocusCallback(u),m&&B.setInputBlurCallback(m),h&&B.setOnLogCallback(X=>h(X,"info")),f&&B.setLogicUpdateCallback(f),v&&B.setButtonClickCallback(v),g&&B.setGraphPointClickCallback(X=>g(X.objectId,X)),P&&B.setNavigationCallback(P)},[a,r,l,d,p,u,m,h,f,v,g,P]),_t.useEffect(()=>{(async()=>{let X=y;if(t&&!y)try{t.startsWith("{")?X=JSON.parse(t):X=await(await fetch(t)).json()}catch(N){console.error("[ExodeUI] Failed to load src:",N)}if(X){const N=A.current,ct=X.id||X.name||"default";(F.current!==ct||O.current!==b||W.current!==X)&&(N.load(X),F.current=ct,O.current=b,W.current=X,V(X),R.current=-1,N.advance(0)),i&&i(N)}})()},[y,t,b]),_t.useEffect(()=>{const B=X=>{if(!A.current||!U.current)return;const N=A.current,ct=k.current;if(!ct)return;const Mt=ct.getContext("2d");if(!Mt)return;const bt=X/1e3;R.current<0&&(R.current=bt),R.current===0&&(R.current=bt);let wt=bt-R.current;wt>.1&&(wt=.1),R.current=bt;const gt=ct.getBoundingClientRect(),It=window.devicePixelRatio||1,ut=Math.round(gt.width*It),Lt=Math.round(gt.height*It);(ct.width!==ut||ct.height!==Lt)&&(ct.width=ut,ct.height=Lt);try{D.current?N.advance(wt):Y.current!==void 0&&N.seek(Y.current),N.render(Mt,ct.width,ct.height)}catch(Wt){console.error("[ExodeUICanvas] Error in animation loop:",Wt),h&&h(`[Error] Animation loop crashed: ${Wt}`,"error")}T.current=requestAnimationFrame(B)};return T.current=requestAnimationFrame(B),()=>{T.current&&cancelAnimationFrame(T.current)}},[]),_t.useEffect(()=>{const B=A.current;S!==void 0&&B.updateInput("scrollY",S),w!==void 0&&B.updateInput("scrollX",w),C!==void 0&&B.updateInput("mouseX",C),M!==void 0&&B.updateInput("mouseY",M),I!==void 0&&B.updateInput("isMouseDown",I),_&&Object.entries(_).forEach(([X,N])=>B.updateInput(X,N))},[S,w,C,M,I,_]);const ot=(B,X)=>{if(!E||!k.current)return;B.stopPropagation(),"nativeEvent"in B&&B.nativeEvent&&typeof B.nativeEvent.stopImmediatePropagation=="function"?B.nativeEvent.stopImmediatePropagation():typeof B.stopImmediatePropagation=="function"&&B.stopImmediatePropagation();const N=k.current,ct=N.getBoundingClientRect(),Mt=B.clientX-ct.left,bt=B.clientY-ct.top,wt=window.devicePixelRatio||1;(X==="click"||X==="down"||X==="up")&&h&&h(`[Canvas] Pointer ${X} at rect(${Math.round(Mt)},${Math.round(bt)}) mapped to buffer(${Math.round(Mt*wt)},${Math.round(bt*wt)})`,"info"),A.current.handlePointerInput(X,Mt*wt,bt*wt,N.width,N.height)};_t.useEffect(()=>{if(!E)return;const B=N=>{var ct,Mt,bt;((ct=document.activeElement)==null?void 0:ct.tagName)==="INPUT"||((Mt=document.activeElement)==null?void 0:Mt.tagName)==="TEXTAREA"||(bt=A.current)==null||bt.handleKeyDown(N)},X=N=>{var ct,Mt,bt;((ct=document.activeElement)==null?void 0:ct.tagName)==="INPUT"||((Mt=document.activeElement)==null?void 0:Mt.tagName)==="TEXTAREA"||(bt=A.current)==null||bt.handleKeyUp(N)};return window.addEventListener("keydown",B),window.addEventListener("keyup",X),()=>{window.removeEventListener("keydown",B),window.removeEventListener("keyup",X)}},[E]),_t.useEffect(()=>{const B=k.current;if(!B||!E)return;const X=N=>{if(N.preventDefault(),N.stopPropagation(),A.current){const ct=B.getBoundingClientRect(),Mt=window.devicePixelRatio||1,bt=(N.clientX-ct.left)*Mt,wt=(N.clientY-ct.top)*Mt;let gt=N.deltaX,It=N.deltaY;N.deltaMode===1?(gt*=25,It*=25):N.deltaMode===2&&(gt*=100,It*=100),A.current.handlePointerInput("move",bt,wt,B.width,B.height),A.current.handleWheel(gt,It,bt,wt,B.width,B.height)}};return B.addEventListener("wheel",X,{passive:!1}),()=>{B.removeEventListener("wheel",X)}},[E]);const[J,at]=_t.useState([]);_t.useEffect(()=>{if(y&&y.objects){const B=y.objects.filter(X=>{var N,ct;return X.type==="Joystick"&&((N=X.inputBinding)==null?void 0:N.type)==="keyboard"&&((ct=X.inputBinding.keyboardConfig)==null?void 0:ct.showVirtualKeyboard)});at(B)}},[y]);const[,j]=_t.useState(0);_t.useEffect(()=>{if(J.length===0)return;let B;const X=()=>{j(N=>N+1),B=requestAnimationFrame(X)};return B=requestAnimationFrame(X),()=>cancelAnimationFrame(B)},[J.length]);const it=()=>J.map(B=>{const X=B.inputBinding.keyboardConfig,N=gt=>{var ut;const It={key:gt,code:gt,preventDefault:()=>{}};(ut=A.current)==null||ut.handleKeyDown(It)},ct=gt=>{var ut;const It={key:gt,code:gt,preventDefault:()=>{}};(ut=A.current)==null||ut.handleKeyUp(It)},Mt=A.current,bt=gt=>Mt&&Mt.activeKeys?Mt.activeKeys.has(gt.toLowerCase()):!1,wt=gt=>({width:"50px",height:"50px",background:gt?"rgba(255, 255, 255, 0.4)":"rgba(0, 0, 0, 0.4)",border:"1px solid rgba(255, 255, 255, 0.2)",borderRadius:"12px",display:"flex",alignItems:"center",justifyContent:"center",color:"white",fontWeight:"bold",fontSize:"18px",userSelect:"none",cursor:"pointer",backdropFilter:"blur(8px)",transition:"background 0.1s",boxShadow:gt?"none":"0 4px 6px rgba(0,0,0,0.1)"});return Qt.jsxs("div",{style:{position:"absolute",bottom:"40px",right:"40px",display:"flex",flexDirection:"column",alignItems:"center",gap:"8px",pointerEvents:"auto",zIndex:100},children:[Qt.jsx("div",{style:wt(bt(X.upKey)),onMouseDown:()=>N(X.upKey),onMouseUp:()=>ct(X.upKey),onMouseLeave:()=>ct(X.upKey),onTouchStart:gt=>{gt.preventDefault(),N(X.upKey)},onTouchEnd:gt=>{gt.preventDefault(),ct(X.upKey)},children:X.upKey.toUpperCase()}),Qt.jsxs("div",{style:{display:"flex",gap:"8px"},children:[Qt.jsx("div",{style:wt(bt(X.leftKey)),onMouseDown:()=>N(X.leftKey),onMouseUp:()=>ct(X.leftKey),onMouseLeave:()=>ct(X.leftKey),onTouchStart:gt=>{gt.preventDefault(),N(X.leftKey)},onTouchEnd:gt=>{gt.preventDefault(),ct(X.leftKey)},children:X.leftKey.toUpperCase()}),Qt.jsx("div",{style:wt(bt(X.downKey)),onMouseDown:()=>N(X.downKey),onMouseUp:()=>ct(X.downKey),onMouseLeave:()=>ct(X.downKey),onTouchStart:gt=>{gt.preventDefault(),N(X.downKey)},onTouchEnd:gt=>{gt.preventDefault(),ct(X.downKey)},children:X.downKey.toUpperCase()}),Qt.jsx("div",{style:wt(bt(X.rightKey)),onMouseDown:()=>N(X.rightKey),onMouseUp:()=>ct(X.rightKey),onMouseLeave:()=>ct(X.rightKey),onTouchStart:gt=>{gt.preventDefault(),N(X.rightKey)},onTouchEnd:gt=>{gt.preventDefault(),ct(X.rightKey)},children:X.rightKey.toUpperCase()})]})]},B.id)});return Qt.jsxs("div",{style:{position:"relative",width:"100%",height:"100%"},children:[Qt.jsx("canvas",{ref:k,onPointerDown:B=>{var X;ot(B,"down"),B.currentTarget.setPointerCapture(B.pointerId),(X=k.current)==null||X.focus()},onPointerMove:B=>ot(B,"move"),onPointerUp:B=>{ot(B,"up"),B.currentTarget.releasePointerCapture(B.pointerId)},onPointerCancel:B=>{ot(B,"up"),B.currentTarget.releasePointerCapture(B.pointerId)},onClick:B=>ot(B,"click"),onKeyDown:B=>A.current.handleKeyDown(B.nativeEvent),onKeyUp:B=>A.current.handleKeyUp(B.nativeEvent),onContextMenu:B=>B.preventDefault(),tabIndex:0,style:{...s,width:"100%",height:"100%",outline:"none",display:"block",touchAction:"none",pointerEvents:E?"auto":"none"}}),it()]})});function ri(){const[y,t]=_t.useState(null),s=_t.useCallback((g,c)=>{y==null||y.setInputBool(g,c)},[y]),o=_t.useCallback((g,c)=>{y==null||y.setInputNumber(g,c)},[y]),e=_t.useCallback(g=>{y==null||y.fireTrigger(g)},[y]),n=_t.useCallback((g,c)=>{y==null||y.setInputText(g,c)},[y]),i=_t.useCallback((g,c)=>{y==null||y.setInputNumberArray(g,c)},[y]),a=_t.useCallback((g,c)=>{y==null||y.setInputStringArray(g,c)},[y]),r=_t.useCallback((g,c)=>{y==null||y.updateInput(g,c)},[y]),l=r,d=_t.useCallback((g,c)=>{y==null||y.updateObjectOptions(g,c)},[y]),p=_t.useCallback((g,c,b)=>{y==null||y.updateConstraint(g,c,b)},[y]),u=_t.useCallback((g,c,b)=>{y==null||y.updateGraphData(g,c,b)},[y]),m=_t.useCallback((g,c,b)=>{y==null||y.updateBarChartData(g,c,b)},[y]),h=_t.useCallback((g,c)=>{y==null||y.updatePieChartData(g,c)},[y]),f=_t.useCallback((g,c)=>{y==null||y.setDropdownOptions(g,c)},[y]),v=_t.useCallback(g=>y==null?void 0:y.getInputValue(g),[y]);return{setEngine:t,engine:y,updateInput:r,setInputValue:l,setInputBool:s,setInputNumber:o,fireTrigger:e,setInputText:n,setInputNumberArray:i,setInputStringArray:a,updateConstraint:p,updateGraphData:u,updateBarChartData:m,updatePieChartData:h,setDropdownOptions:f,updateObjectOptions:d,getInputValue:v}}const li=({artboard:y,config:t})=>{const s={...y.seo,...t},o=s.enableSmartExtraction!==!1;_t.useEffect(()=>{const a=s.title||y.name;a&&(document.title=a);let r=s.description;if(!r&&o){const p=y.objects.filter(u=>{var m;return((m=u.geometry)==null?void 0:m.type)==="Text"}).sort((u,m)=>{var h,f;return(((h=m.geometry.text)==null?void 0:h.length)||0)-(((f=u.geometry.text)==null?void 0:f.length)||0)});p.length>0&&(r=p[0].geometry.text)}r&&(e("name","description",r),e("property","og:description",r)),s.keywords&&s.keywords.length>0&&e("name","keywords",s.keywords.join(", "));const l=s.ogImage||y.backgroundImage;l&&e("property","og:image",l),a&&e("property","og:title",a),e("property","og:type","website")},[s,y,o]);const e=(a,r,l)=>{let d=document.querySelector(`meta[${a}="${r}"]`);d||(d=document.createElement("meta"),d.setAttribute(a,r),document.head.appendChild(d)),d.setAttribute("content",l)},n=()=>{const a=[];return a.push(Qt.jsx("h1",{children:s.title||y.name},"artboard-title")),y.objects.forEach((l,d)=>{var p,u;if(!(l.visible===!1||l.isVisible===!1))if(((p=l.geometry)==null?void 0:p.type)==="Text"){const m=l.geometry.text;m&&(l.geometry.fontSize>24?a.push(Qt.jsx("h2",{children:m},l.id||d)):a.push(Qt.jsx("p",{children:m},l.id||d)))}else if(((u=l.geometry)==null?void 0:u.type)==="Image"){const m=l.geometry.src,h=l.altText||l.name||"Illustration";a.push(Qt.jsx("img",{src:m,alt:h},l.id||d))}else l.type==="Button"&&a.push(Qt.jsx("button",{children:l.name||"Button"},l.id||d))}),a},i=s.jsonLd||{"@context":"https://schema.org","@type":"VisualArtwork",name:s.title||y.name,description:s.description,image:s.ogImage||y.backgroundImage,abstract:"Animated interface created with ExodeUI"};return Qt.jsxs("div",{id:`exode-seo-${y.id||"default"}`,"aria-hidden":"false",style:{position:"absolute",width:"1px",height:"1px",padding:"0",margin:"-1px",overflow:"hidden",clip:"rect(0, 0, 0, 0)",whiteSpace:"nowrap",border:"0",zIndex:-1},children:[n(),Qt.jsx("script",{type:"application/ld+json",children:JSON.stringify(i)})]})},ci={version:"6.4.2"}.version;Kt.BAR_STYLE_PRESETS=oi,Kt.BehaviorSensor=re,Kt.BehaviorType=tt,Kt.ConditionOp=je,Kt.ExodeSEO=li,Kt.ExodeUICanvas=ai,Kt.ExodeUIEngine=gs,Kt.LogicOp=Et,Kt.RapierPhysics=is,Kt.VERSION=ci,Kt.useExodeUI=ri,Object.defineProperty(Kt,Symbol.toStringTag,{value:"Module"})}));