@mirage-engine/core 0.3.20 → 0.3.22

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.
@@ -1,11 +1,11 @@
1
- (function(b,D){typeof exports=="object"&&typeof module!="undefined"?D(exports,require("three")):typeof define=="function"&&define.amd?define(["exports","three"],D):(b=typeof globalThis!="undefined"?globalThis:b||self,D(b.MirageEngine={},b.THREE))})(this,function(b,D){"use strict";var dt=Object.defineProperty,ut=Object.defineProperties;var ft=Object.getOwnPropertyDescriptors;var Ye=Object.getOwnPropertySymbols;var gt=Object.prototype.hasOwnProperty,pt=Object.prototype.propertyIsEnumerable;var Me=(b,D,O)=>D in b?dt(b,D,{enumerable:!0,configurable:!0,writable:!0,value:O}):b[D]=O,ne=(b,D)=>{for(var O in D||(D={}))gt.call(D,O)&&Me(b,O,D[O]);if(Ye)for(var O of Ye(D))pt.call(D,O)&&Me(b,O,D[O]);return b},ze=(b,D)=>ut(b,ft(D));var g=(b,D,O)=>(Me(b,typeof D!="symbol"?D+"":D,O),O);var Ve=(b,D,O)=>new Promise((v,ge)=>{var K=B=>{try{F(O.next(B))}catch(V){ge(V)}},pe=B=>{try{F(O.throw(B))}catch(V){ge(V)}},F=B=>B.done?v(B.value):Promise.resolve(B.value).then(K,pe);F((O=O.apply(b,D)).next())});function O(o){const e=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(o){for(const t in o)if(t!=="default"){const r=Object.getOwnPropertyDescriptor(o,t);Object.defineProperty(e,t,r.get?r:{enumerable:!0,get:()=>o[t]})}}return e.default=o,Object.freeze(e)}const v=O(D),ge={INCLUDE_TREE:"include-tree",EXCLUDE_TREE:"exclude-tree",INCLUDE_SELF:"include-self",EXCLUDE_SELF:"exclude-self",END:"end"},K={NAME:"data-mirage-dom",KEY:"mirageDom",VALUES:{HIDE:"hide",SHOW:"show"}},pe={TRAVELER:"traveler",NATIVE:"native",CAPTURE_1:"1",CAPTURE_2:"2",CAPTURE_3:"3",CAPTURE_4:"4",CAPTURE_5:"5",CAPTURE_6:"6",CAPTURE_7:"7",CAPTURE_8:"8",CAPTURE_9:"9",CAPTURE_10:"10"},F={NAME:"data-mirage-travel",KEY:"mirageTravel",VALUES:pe,MAX_LAYERS:Object.keys(pe).length-1},B={NAME:"data-mirage-filter",KEY:"mirageFilter",VALUES:ge},V={NAME:"data-mirage-select",KEY:"mirageSelect",VALUES:ge},Le={NAME:"data-mirage-shader",KEY:"mirageShader"},Pe={NAME:"data-mirage-sandwich",KEY:"mirageSandwich",VALUES:{FRONT:"front"}},me=0,te=1,ae=2,De=4,ve=8,ye=16;function We(o){const e=o.match(/rgba?\((\d+),\s*(\d+),\s*(\d+)(?:,\s*([\d.]+))?\)/);return e?{r:parseInt(e[1])/255,g:parseInt(e[2])/255,b:parseInt(e[3])/255,a:e[4]!==void 0?parseFloat(e[4]):1}:{r:1,g:1,b:1,a:1}}function Ae(o){const e={};if(o.opacity&&(e.opacity=parseFloat(o.opacity)),o.backgroundColor){const t=We(o.backgroundColor);e.backgroundColor=[t.r,t.g,t.b,t.a]}if(o.backgroundImage?e.backgroundImage=o.backgroundImage:o.background&&(e.backgroundImage=o.background),o.boxShadow&&(e.boxShadow=o.boxShadow),o.borderRadius&&(e.borderRadius=parseFloat(o.borderRadius)),o.width&&(e.width=parseFloat(o.width)),o.height&&(e.height=parseFloat(o.height)),o.transform&&o.transform!=="none"){const t=new DOMMatrix(o.transform);e.x=t.m41,e.y=t.m42,e.z=t.m43}return e}class Ie{constructor(e,t){g(this,"target");g(this,"observer");g(this,"pendingDeletions",new Set);g(this,"pendingStyles",new Map);g(this,"isDomDirty",!1);g(this,"isRunning",!1);g(this,"pendingMask",me);g(this,"mutationTimer",null);g(this,"cssTimer",null);g(this,"resizeConfig");g(this,"resizeTimer",null);g(this,"isResizing",!1);g(this,"lastScrollX",0);g(this,"lastScrollY",0);g(this,"scrollTimer",null);g(this,"onBeforeRender",new Set);g(this,"onLayoutChange",new Set);g(this,"onStyleChange",new Set);g(this,"onScrollChange",new Set);g(this,"onRender",new Set);g(this,"onTransitionFinished",e=>{this.target.contains(e.target)&&this.mutationTimer===null&&(this.cssTimer&&clearTimeout(this.cssTimer),this.pendingStyles.size==0&&(this.pendingMask|=te|ae,this.cssTimer=window.setTimeout(()=>{this.isDomDirty=!0,this.cssTimer=null},50)))});g(this,"onWindowResize",()=>{if(!this.resizeConfig.enabled){this.isDomDirty=!0;return}this.isResizing||(this.isResizing=!0,this.resizeConfig.onStart&&this.resizeConfig.onStart()),this.resizeTimer&&clearTimeout(this.resizeTimer),this.resizeTimer=window.setTimeout(()=>{this.isDomDirty=!0,this.resizeConfig.onEnd&&this.resizeConfig.onEnd(),this.isResizing=!1,this.resizeTimer=null},this.resizeConfig.delay)});g(this,"renderLoop",()=>{if(!this.isRunning)return;this.onBeforeRender.forEach(r=>r()),this.isDomDirty&&(this.isDomDirty=!1,this.onLayoutChange.forEach(r=>r(this.pendingMask,this.pendingDeletions)),this.pendingDeletions.clear(),this.pendingMask=me);const e=window.scrollX,t=window.scrollY;(e!==this.lastScrollX||t!==this.lastScrollY)&&(this.onScrollChange.forEach(r=>r(e,t)),this.lastScrollX=e,this.lastScrollY=t,this.scrollTimer&&clearTimeout(this.scrollTimer),this.scrollTimer=window.setTimeout(()=>{this.pendingMask|=te,this.isDomDirty=!0,this.scrollTimer=null},150)),this.pendingStyles.size>0&&(this.onStyleChange.forEach(r=>r(this.pendingStyles)),this.pendingStyles.clear()),this.onRender.forEach(r=>r()),requestAnimationFrame(this.renderLoop)});var i,c;this.target=e;const r=(i=t.resizeDebounce)!=null?i:!0;r===!1?this.resizeConfig={enabled:!1,delay:0}:r===!0?this.resizeConfig={enabled:!0,delay:150}:this.resizeConfig={enabled:!0,delay:(c=r.delay)!=null?c:150,onStart:r.onStart,onEnd:r.onEnd},this.observer=new MutationObserver(s=>{let a=me;for(const l of s)if(l.type==="childList")a|=ve,l.removedNodes.length>0&&l.removedNodes.forEach(n=>{n instanceof HTMLElement&&this.pendingDeletions.add(n)});else if(l.type==="attributes")if(l.attributeName==="style"){a|=te|ae;const n=l.target,u=Ae(n.style);this.pendingStyles.set(n,u)}else l.attributeName==="class"?a|=te|ae:l.attributeName&&l.attributeName.startsWith("data-")&&(a|=te|ae,l.attributeName.startsWith("data-mirage")&&(a|=ve));else l.type==="characterData"&&(a|=ye|te);if(a!==me){if(this.pendingMask|=a,a&ve){this.clearTimers(),this.isDomDirty=!0;return}this.mutationTimer&&clearTimeout(this.mutationTimer),this.mutationTimer=window.setTimeout(()=>{this.mutationTimer=null,this.isDomDirty=!0},200)}})}start(){this.isRunning||(this.isRunning=!0,this.observer.observe(this.target,{childList:!0,subtree:!0,attributes:!0,characterData:!0}),this.target.addEventListener("transitionend",this.onTransitionFinished),this.target.addEventListener("animationend",this.onTransitionFinished),window.addEventListener("resize",this.onWindowResize),this.isDomDirty=!0,this.lastScrollX=window.scrollX,this.lastScrollY=window.scrollY,this.renderLoop())}stop(){this.isRunning=!1,this.observer.disconnect(),this.clearTimers(),this.target.removeEventListener("transitionend",this.onTransitionFinished),this.target.removeEventListener("animationend",this.onTransitionFinished),window.removeEventListener("resize",this.onWindowResize)}clearTimers(){this.mutationTimer&&(clearTimeout(this.mutationTimer),this.mutationTimer=null),this.cssTimer&&(clearTimeout(this.cssTimer),this.cssTimer=null),this.scrollTimer&&(clearTimeout(this.scrollTimer),this.scrollTimer=null)}}const H=1,oe=2,He=0,N={BASE:0,SELECTED:1,getCaptureLayer:o=>31-o,HIDDEN:31},Ee=Object.values(B.VALUES);class ke{static getBaseline(e){if(this.cache.has(e))return this.cache.get(e);const t=this.calculateBaselineFromDOM(e);return this.cache.set(e,t),t}static calculateBaselineFromDOM(e){if(typeof document=="undefined")return 0;const t=document.createElement("div"),r=document.createElement("span"),i=document.createElement("img");t.style.visibility="hidden",t.style.position="absolute",t.style.top="0px",t.style.left="0px",t.style.font=e,t.style.margin="0",t.style.padding="0",t.style.border="none",r.style.margin="0",r.style.padding="0",r.style.border="none",r.style.lineHeight="normal",i.width=1,i.height=1,i.style.verticalAlign="baseline",r.appendChild(document.createTextNode("Hidden Text")),t.appendChild(r),t.appendChild(i),document.body.appendChild(t);const c=i.offsetTop-r.offsetTop;return document.body.removeChild(t),c}}g(ke,"cache",new Map);class Ge extends v.MeshBasicMaterial{constructor(t,r,i,c,s=2){super({transparent:!0,side:v.FrontSide,color:16777215});g(this,"canvas");g(this,"ctx");g(this,"qualityFactor");if(this.canvas=document.createElement("canvas"),this.ctx=this.canvas.getContext("2d"),!this.ctx)throw new Error("[Mirage] Failed to create canvas context");this.qualityFactor=s,this.map=new v.CanvasTexture(this.canvas),this.map.colorSpace=v.LinearSRGBColorSpace,this.map.minFilter=v.LinearFilter,this.map.magFilter=v.LinearFilter,this.updateText(t,r,i,c)}wrapText(t,r){const i=t.split(`
2
- `),c=[];return i.forEach(s=>{const a=s.match(/[^\s\-]+\-?|\-|\s+/g)||[];if(a.length===0){c.push("");return}let l=a[0];for(let n=1;n<a.length;n++){const u=a[n];this.ctx.measureText(l+u).width<=r+2?l+=u:(l&&c.push(l),l=u.trimStart())}l&&c.push(l)}),c}updateText(t,r,i,c,s){s!==void 0&&(this.qualityFactor=s);const l=(window.devicePixelRatio||1)*this.qualityFactor,n=i*l,u=c*l;this.canvas.width!==n||this.canvas.height!==u?(this.canvas.width=n,this.canvas.height=u):this.ctx.clearRect(0,0,this.canvas.width,this.canvas.height),this.ctx.setTransform(l,0,0,l,0,0),this.ctx.font=r.font,this.ctx.fillStyle=r.color,this.ctx.textBaseline="alphabetic",this.ctx.globalAlpha=1;const h=this.wrapText(t,i),d=r.lineHeight,p=ke.getBaseline(r.font);h.forEach((f,A)=>{const m=A*d+p;let S=0;r.textAlign==="center"?S=i/2:r.textAlign==="right"&&(S=i),this.ctx.textAlign=r.textAlign,this.ctx.fillText(f,S,m)}),this.map&&(this.map.needsUpdate=!0)}dispose(){this.map&&this.map.dispose(),super.dispose()}}function le(o,e=0){if(typeof o=="number")return o;const t=parseFloat(o)||0;return typeof o=="string"&&o.includes("%")?t/100*e:t}function ce(o){if(!o||o==="transparent")return{color:new v.Color(16777215),alpha:0};const e=o.match(/rgba?\((\d+),\s*(\d+),\s*(\d+)(?:,\s*([\d.]+))?\)/);if(e){const t=parseInt(e[1],10),r=parseInt(e[2],10),i=parseInt(e[3],10),c=e[4]!==void 0?parseFloat(e[4]):1;return{color:new v.Color(`rgb(${t}, ${r}, ${i})`),alpha:c}}return{color:new v.Color(o),alpha:1}}function Ue(o){const e=[];let t="",r=0;for(let i=0;i<o.length;i++){const c=o[i];if(c==="(")r++;else if(c===")")r--;else if(c===","&&r===0){e.push(t.trim()),t="";continue}t+=c}return t&&e.push(t.trim()),e}function qe(o){if(!o||typeof o!="string"||!o.includes("linear-gradient"))return null;const e=o.match(/linear-gradient\((.*)\)/);if(!e)return null;const t=e[1],r=Ue(t);let i=Math.PI,c=0;const s=r[0].trim();if(s.startsWith("to "))s==="to top"?i=0:s==="to right"?i=Math.PI/2:s==="to bottom"?i=Math.PI:s==="to left"?i=Math.PI*1.5:s==="to top right"||s==="to right top"?i=Math.PI/4:s==="to bottom right"||s==="to right bottom"?i=Math.PI*.75:s==="to bottom left"||s==="to left bottom"?i=Math.PI*1.25:(s==="to top left"||s==="to left top")&&(i=Math.PI*1.75),c=1;else if(s.endsWith("deg")||s.endsWith("rad")||s.endsWith("turn")){const l=parseFloat(s);s.endsWith("deg")?i=l*(Math.PI/180):s.endsWith("rad")?i=l:s.endsWith("turn")&&(i=l*Math.PI*2),c=1}const a=[];for(let l=c;l<r.length&&!(a.length>=8);l++){const n=r[l].trim(),u=n.lastIndexOf(" ");let h=n,d=null;if(u!==-1&&!n.endsWith(")")){const f=n.substring(u+1);(f.endsWith("%")||f.endsWith("px")||!isNaN(parseFloat(f)))&&(h=n.substring(0,u).trim(),d=f)}const p=ce(h);a.push({color:p.color,alpha:p.alpha,rawStop:d,stop:0})}if(a.length>0){for(let n=0;n<a.length;n++)a[n].rawStop!==null&&(a[n].stop=parseFloat(a[n].rawStop)/100);a[0].rawStop===null&&(a[0].stop=0),a.length>1&&a[a.length-1].rawStop===null&&(a[a.length-1].stop=1);let l=0;for(let n=1;n<a.length;n++)if(a[n].rawStop!==null||n===a.length-1){const u=n-l;if(u>1){const h=a[l].stop,p=(a[n].stop-h)/u;for(let f=1;f<u;f++)a[l+f].stop=h+p*f}l=n}}return{angle:i,stops:a}}function $e(o){if(!o||o==="none")return null;const e=Ue(o);if(e.length===0)return null;const t=e[0].trim(),r=/(rgba?\([^)]+\)|#[0-9a-fA-F]+|[a-zA-Z]+)/,i=t.match(r);let c="transparent",s=t;if(i&&i[1]!=="inset"){const p=i[1];(p.startsWith("rgb")||p.startsWith("#")||p==="black"||p==="white"||p==="transparent")&&(c=p,s=t.replace(p,"").trim())}s=s.replace("inset","").trim();const a=s.split(/\s+/).map(p=>parseFloat(p)||0),l=a[0]||0,n=a[1]||0,u=a[2]||0,h=a[3]||0,d=ce(c);return{offsetX:l,offsetY:n,blurRadius:u,spreadRadius:h,color:d.color,alpha:d.alpha}}const je=`varying vec2 vUv;
1
+ (function(Q,b){typeof exports=="object"&&typeof module!="undefined"?b(exports,require("three")):typeof define=="function"&&define.amd?define(["exports","three"],b):(Q=typeof globalThis!="undefined"?globalThis:Q||self,b(Q.MirageEngine={},Q.THREE))})(this,function(Q,b){"use strict";var je=Object.defineProperty,qe=Object.defineProperties;var Ve=Object.getOwnPropertyDescriptors;var Be=Object.getOwnPropertySymbols;var Ze=Object.prototype.hasOwnProperty,Pe=Object.prototype.propertyIsEnumerable;var _A=(Q,b,R)=>b in Q?je(Q,b,{enumerable:!0,configurable:!0,writable:!0,value:R}):Q[b]=R,BA=(Q,b)=>{for(var R in b||(b={}))Ze.call(b,R)&&_A(Q,R,b[R]);if(Be)for(var R of Be(b))Pe.call(b,R)&&_A(Q,R,b[R]);return Q},Ee=(Q,b)=>qe(Q,Ve(b));var C=(Q,b,R)=>(_A(Q,typeof b!="symbol"?b+"":b,R),R);var EA=(Q,b,R)=>new Promise((E,O)=>{var dA=$=>{try{tA(R.next($))}catch(cA){O(cA)}},sA=$=>{try{tA(R.throw($))}catch(cA){O(cA)}},tA=$=>$.done?E($.value):Promise.resolve($.value).then(dA,sA);tA((R=R.apply(Q,b)).next())});function R(t){const A=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(t){for(const e in t)if(e!=="default"){const s=Object.getOwnPropertyDescriptor(t,e);Object.defineProperty(A,e,s.get?s:{enumerable:!0,get:()=>t[e]})}}return A.default=t,Object.freeze(A)}const E=R(b),O=5,dA=0,sA=1,tA=2,$=3,cA=4,zA={INCLUDE_TREE:"include-tree",EXCLUDE_TREE:"exclude-tree",INCLUDE_SELF:"include-self",EXCLUDE_SELF:"exclude-self",END:"end"},rA={NAME:"data-mirage-dom",KEY:"mirageDom",VALUES:{HIDE:"hide",SHOW:"show"}},xA={TRAVELER:"traveler",NATIVE:"native",CAPTURE_1:"1",CAPTURE_2:"2",CAPTURE_3:"3",CAPTURE_4:"4",CAPTURE_5:"5",CAPTURE_6:"6",CAPTURE_7:"7",CAPTURE_8:"8",CAPTURE_9:"9",CAPTURE_10:"10"},U={NAME:"data-mirage-travel",KEY:"mirageTravel",VALUES:xA,MAX_LAYERS:Object.keys(xA).length-1},K={NAME:"data-mirage-filter",KEY:"mirageFilter",VALUES:zA},AA={NAME:"data-mirage-select",KEY:"mirageSelect",VALUES:zA},WA={NAME:"data-mirage-shader",KEY:"mirageShader"},de={NAME:"data-mirage-sandwich",KEY:"mirageSandwich",VALUES:{FRONT:"front"}},pA=0,oA=1,QA=2,OA=4,DA=8,LA=16;function Qe(t){const A=t.match(/rgba?\((\d+),\s*(\d+),\s*(\d+)(?:,\s*([\d.]+))?\)/);return A?{r:parseInt(A[1])/255,g:parseInt(A[2])/255,b:parseInt(A[3])/255,a:A[4]!==void 0?parseFloat(A[4]):1}:{r:1,g:1,b:1,a:1}}function KA(t){const A={};if(t.opacity&&(A.opacity=parseFloat(t.opacity)),t.backgroundColor){const e=Qe(t.backgroundColor);A.backgroundColor=[e.r,e.g,e.b,e.a]}if(t.backgroundImage?A.backgroundImage=t.backgroundImage:t.background&&(A.backgroundImage=t.background),t.boxShadow&&(A.boxShadow=t.boxShadow),t.borderRadius&&(A.borderRadius=parseFloat(t.borderRadius)),t.width&&(A.width=parseFloat(t.width)),t.height&&(A.height=parseFloat(t.height)),t.transform&&t.transform!=="none"){const e=new DOMMatrix(t.transform);A.x=e.m41,A.y=e.m42,A.z=e.m43,A.scaleX=Math.sqrt(e.m11*e.m11+e.m12*e.m12+e.m13*e.m13),A.scaleY=Math.sqrt(e.m21*e.m21+e.m22*e.m22+e.m23*e.m23),A.scaleZ=Math.sqrt(e.m31*e.m31+e.m32*e.m32+e.m33*e.m33)}return(t.left||t.right||t.top||t.bottom||t.margin||t.marginLeft||t.marginTop||t.marginRight||t.marginBottom||t.padding||t.paddingLeft||t.paddingTop||t.paddingRight||t.paddingBottom)&&(A.layoutChanged=!0),A}class jA{constructor(A,e){C(this,"target");C(this,"observer");C(this,"pendingDeletions",new Set);C(this,"pendingStyles",new Map);C(this,"isDomDirty",!1);C(this,"isRunning",!1);C(this,"pendingMask",pA);C(this,"mutationTimer",null);C(this,"cssTimer",null);C(this,"resizeConfig");C(this,"resizeTimer",null);C(this,"isResizing",!1);C(this,"lastScrollX",0);C(this,"lastScrollY",0);C(this,"scrollTimer",null);C(this,"onBeforeRender",new Set);C(this,"onLayoutChange",new Set);C(this,"onStyleChange",new Set);C(this,"onScrollChange",new Set);C(this,"onRender",new Set);C(this,"onTransitionFinished",A=>{this.target.contains(A.target)&&this.mutationTimer===null&&(this.cssTimer&&clearTimeout(this.cssTimer),this.pendingStyles.size==0&&(this.pendingMask|=oA|QA,this.cssTimer=window.setTimeout(()=>{this.isDomDirty=!0,this.cssTimer=null},50)))});C(this,"onWindowResize",()=>{if(!this.resizeConfig.enabled){this.isDomDirty=!0;return}this.isResizing||(this.isResizing=!0,this.resizeConfig.onStart&&this.resizeConfig.onStart()),this.resizeTimer&&clearTimeout(this.resizeTimer),this.resizeTimer=window.setTimeout(()=>{this.isDomDirty=!0,this.resizeConfig.onEnd&&this.resizeConfig.onEnd(),this.isResizing=!1,this.resizeTimer=null},this.resizeConfig.delay)});C(this,"renderLoop",()=>{if(!this.isRunning)return;this.onBeforeRender.forEach(s=>s()),this.isDomDirty&&(this.isDomDirty=!1,this.onLayoutChange.forEach(s=>s(this.pendingMask,this.pendingDeletions)),this.pendingDeletions.clear(),this.pendingMask=pA);const A=window.scrollX,e=window.scrollY;(A!==this.lastScrollX||e!==this.lastScrollY)&&(this.onScrollChange.forEach(s=>s(A,e)),this.lastScrollX=A,this.lastScrollY=e,this.scrollTimer&&clearTimeout(this.scrollTimer),this.scrollTimer=window.setTimeout(()=>{this.pendingMask|=oA,this.isDomDirty=!0,this.scrollTimer=null},150)),this.pendingStyles.size>0&&(this.onStyleChange.forEach(s=>s(this.pendingStyles)),this.pendingStyles.clear()),this.onRender.forEach(s=>s()),requestAnimationFrame(this.renderLoop)});var r,o;this.target=A;const s=(r=e.resizeDebounce)!=null?r:!0;s===!1?this.resizeConfig={enabled:!1,delay:0}:s===!0?this.resizeConfig={enabled:!0,delay:150}:this.resizeConfig={enabled:!0,delay:(o=s.delay)!=null?o:150,onStart:s.onStart,onEnd:s.onEnd},this.observer=new MutationObserver(i=>{let n=pA;for(const g of i)if(g.type==="childList")n|=DA,g.removedNodes.length>0&&g.removedNodes.forEach(a=>{a instanceof HTMLElement&&this.pendingDeletions.add(a)});else if(g.type==="attributes")if(g.attributeName==="style"){n|=oA|QA;const a=g.target,I=KA(a.style);this.pendingStyles.set(a,I)}else g.attributeName==="class"?n|=oA|QA:g.attributeName&&g.attributeName.startsWith("data-")&&(n|=oA|QA,g.attributeName.startsWith("data-mirage")&&(n|=DA));else g.type==="characterData"&&(n|=LA|oA);if(n!==pA){if(this.pendingMask|=n,n&DA){this.clearTimers(),this.isDomDirty=!0;return}this.mutationTimer&&clearTimeout(this.mutationTimer),this.mutationTimer=window.setTimeout(()=>{this.mutationTimer=null,this.isDomDirty=!0},200)}})}start(){this.isRunning||(this.isRunning=!0,this.observer.observe(this.target,{childList:!0,subtree:!0,attributes:!0,characterData:!0}),this.target.addEventListener("transitionend",this.onTransitionFinished),this.target.addEventListener("animationend",this.onTransitionFinished),window.addEventListener("resize",this.onWindowResize),this.isDomDirty=!0,this.lastScrollX=window.scrollX,this.lastScrollY=window.scrollY,this.renderLoop())}stop(){this.isRunning=!1,this.observer.disconnect(),this.clearTimers(),this.target.removeEventListener("transitionend",this.onTransitionFinished),this.target.removeEventListener("animationend",this.onTransitionFinished),window.removeEventListener("resize",this.onWindowResize)}clearTimers(){this.mutationTimer&&(clearTimeout(this.mutationTimer),this.mutationTimer=null),this.cssTimer&&(clearTimeout(this.cssTimer),this.cssTimer=null),this.scrollTimer&&(clearTimeout(this.scrollTimer),this.scrollTimer=null)}}const j=1,IA=2,ue=0,T={BASE:0,SELECTED:1,getCaptureLayer:t=>31-t,HIDDEN:31},YA=Object.values(K.VALUES);class qA{static getBaseline(A){if(this.cache.has(A))return this.cache.get(A);const e=this.calculateBaselineFromDOM(A);return this.cache.set(A,e),e}static calculateBaselineFromDOM(A){if(typeof document=="undefined")return 0;const e=document.createElement("div"),s=document.createElement("span"),r=document.createElement("img");e.style.visibility="hidden",e.style.position="absolute",e.style.top="0px",e.style.left="0px",e.style.font=A,e.style.margin="0",e.style.padding="0",e.style.border="none",s.style.margin="0",s.style.padding="0",s.style.border="none",s.style.lineHeight="normal",r.width=1,r.height=1,r.style.verticalAlign="baseline",s.appendChild(document.createTextNode("Hidden Text")),e.appendChild(s),e.appendChild(r),document.body.appendChild(e);const o=r.offsetTop-s.offsetTop;return document.body.removeChild(e),o}}C(qA,"cache",new Map);class fe extends E.MeshBasicMaterial{constructor(e,s,r,o,i=2){super({transparent:!0,side:E.FrontSide,color:16777215});C(this,"canvas");C(this,"ctx");C(this,"qualityFactor");if(this.canvas=document.createElement("canvas"),this.ctx=this.canvas.getContext("2d"),!this.ctx)throw new Error("[Mirage] Failed to create canvas context");this.qualityFactor=i,this.map=new E.CanvasTexture(this.canvas),this.map.colorSpace=E.LinearSRGBColorSpace,this.map.minFilter=E.LinearFilter,this.map.magFilter=E.LinearFilter,this.updateText(e,s,r,o)}wrapText(e,s){const r=e.split(`
2
+ `),o=[];return r.forEach(i=>{const n=i.match(/[^\s\-]+\-?|\-|\s+/g)||[];if(n.length===0){o.push("");return}let g=n[0];for(let a=1;a<n.length;a++){const I=n[a];this.ctx.measureText(g+I).width<=s+2?g+=I:(g&&o.push(g),g=I.trimStart())}g&&o.push(g)}),o}updateText(e,s,r,o,i){i!==void 0&&(this.qualityFactor=i);const g=(window.devicePixelRatio||1)*this.qualityFactor,a=r*g,I=o*g;this.canvas.width!==a||this.canvas.height!==I?(this.canvas.width=a,this.canvas.height=I):this.ctx.clearRect(0,0,this.canvas.width,this.canvas.height),this.ctx.setTransform(g,0,0,g,0,0),this.ctx.font=s.font,this.ctx.fillStyle=s.color,this.ctx.textBaseline="alphabetic",this.ctx.globalAlpha=1;const c=this.wrapText(e,r),l=s.lineHeight,B=qA.getBaseline(s.font);c.forEach((h,m)=>{const u=m*l+B;let M=0;s.textAlign==="center"?M=r/2:s.textAlign==="right"&&(M=r),this.ctx.textAlign=s.textAlign,this.ctx.fillText(h,M,u)}),this.map&&(this.map.needsUpdate=!0)}dispose(){this.map&&this.map.dispose(),super.dispose()}}function uA(t,A=0){if(typeof t=="number")return t;const e=parseFloat(t)||0;return typeof t=="string"&&t.includes("%")?e/100*A:e}function fA(t){if(!t||t==="transparent")return{color:new E.Color(16777215),alpha:0};const A=t.match(/rgba?\((\d+),\s*(\d+),\s*(\d+)(?:,\s*([\d.]+))?\)/);if(A){const e=parseInt(A[1],10),s=parseInt(A[2],10),r=parseInt(A[3],10),o=A[4]!==void 0?parseFloat(A[4]):1;return{color:new E.Color(`rgb(${e}, ${s}, ${r})`),alpha:o}}return{color:new E.Color(t),alpha:1}}function VA(t){const A=[];let e="",s=0;for(let r=0;r<t.length;r++){const o=t[r];if(o==="(")s++;else if(o===")")s--;else if(o===","&&s===0){A.push(e.trim()),e="";continue}e+=o}return e&&A.push(e.trim()),A}function we(t){if(!t||typeof t!="string"||!t.includes("linear-gradient"))return null;const A=t.match(/linear-gradient\((.*)\)/);if(!A)return null;const e=A[1],s=VA(e);let r=Math.PI,o=0;const i=s[0].trim();if(i.startsWith("to "))i==="to top"?r=0:i==="to right"?r=Math.PI/2:i==="to bottom"?r=Math.PI:i==="to left"?r=Math.PI*1.5:i==="to top right"||i==="to right top"?r=Math.PI/4:i==="to bottom right"||i==="to right bottom"?r=Math.PI*.75:i==="to bottom left"||i==="to left bottom"?r=Math.PI*1.25:(i==="to top left"||i==="to left top")&&(r=Math.PI*1.75),o=1;else if(i.endsWith("deg")||i.endsWith("rad")||i.endsWith("turn")){const g=parseFloat(i);i.endsWith("deg")?r=g*(Math.PI/180):i.endsWith("rad")?r=g:i.endsWith("turn")&&(r=g*Math.PI*2),o=1}const n=[];for(let g=o;g<s.length&&!(n.length>=8);g++){const a=s[g].trim(),I=a.lastIndexOf(" ");let c=a,l=null;if(I!==-1&&!a.endsWith(")")){const h=a.substring(I+1);(h.endsWith("%")||h.endsWith("px")||!isNaN(parseFloat(h)))&&(c=a.substring(0,I).trim(),l=h)}const B=fA(c);n.push({color:B.color,alpha:B.alpha,rawStop:l,stop:0})}if(n.length>0){for(let a=0;a<n.length;a++)n[a].rawStop!==null&&(n[a].stop=parseFloat(n[a].rawStop)/100);n[0].rawStop===null&&(n[0].stop=0),n.length>1&&n[n.length-1].rawStop===null&&(n[n.length-1].stop=1);let g=0;for(let a=1;a<n.length;a++)if(n[a].rawStop!==null||a===n.length-1){const I=a-g;if(I>1){const c=n[g].stop,B=(n[a].stop-c)/I;for(let h=1;h<I;h++)n[g+h].stop=c+B*h}g=a}}return{angle:r,stops:n}}function me(t){if(!t||t==="none")return null;const A=VA(t);if(A.length===0)return null;const e=A[0].trim(),s=/(rgba?\([^)]+\)|#[0-9a-fA-F]+|[a-zA-Z]+)/,r=e.match(s);let o="transparent",i=e;if(r&&r[1]!=="inset"){const B=r[1];(B.startsWith("rgb")||B.startsWith("#")||B==="black"||B==="white"||B==="transparent")&&(o=B,i=e.replace(B,"").trim())}i=i.replace("inset","").trim();const n=i.split(/\s+/).map(B=>parseFloat(B)||0),g=n[0]||0,a=n[1]||0,I=n[2]||0,c=n[3]||0,l=fA(o);return{offsetX:g,offsetY:a,blurRadius:I,spreadRadius:c,color:l.color,alpha:l.alpha}}const ye=`varying vec2 vUv;
3
3
  varying vec4 vScreenPos;
4
4
  void main() {
5
5
  vUv = uv;
6
6
  gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
7
7
  vScreenPos = gl_Position;
8
- }`,Ke=`varying vec2 vUv;
8
+ }`,pe=`varying vec2 vUv;
9
9
  uniform vec2 uSize;
10
10
  uniform vec2 uMeshSize;
11
11
  uniform vec4 uShadowColor;
@@ -164,26 +164,26 @@ void main() {
164
164
 
165
165
  // #include <colorspace_fragment>
166
166
  }
167
- `,Je=`uniform sampler2D uTexture;
167
+ `,De=`uniform sampler2D uTexture;
168
168
  varying vec4 vScreenPos;
169
169
  uniform vec2 uTextureRepeat;
170
- uniform vec2 uTextureOffset;`,Ze=`vec2 screenUv = (vScreenPos.xy / vScreenPos.w) * 0.5 + 0.5;
170
+ uniform vec2 uTextureOffset;`,Se=`vec2 screenUv = (vScreenPos.xy / vScreenPos.w) * 0.5 + 0.5;
171
171
  vec2 resultUv = screenUv;
172
172
 
173
- `,Qe=`vec4 texColor = texture2D(uTexture, resultUv);
174
- baseColor = blendSrcOver(baseColor, texColor);`,_e={vertexShader:je,fragmentShader:Ke},Oe={declChunk:Je,uvChunk:Ze,baseColorChunk:Qe};function et(o,e,t,r=null,i){var C;const c=r!==null||!!o.imageSrc;let s="";const a={};if(i!=null&&i.uniforms)for(const[y,x]of Object.entries(i.uniforms))typeof x=="number"?(s+=`uniform float ${y};
175
- `,a[y]={value:x}):Array.isArray(x)?x.length===2?(s+=`uniform vec2 ${y};
176
- `,a[y]={value:new v.Vector2(...x)}):x.length===3?(s+=`uniform vec3 ${y};
177
- `,a[y]={value:new v.Vector3(...x)}):x.length===4&&(s+=`uniform vec4 ${y};
178
- `,a[y]={value:new v.Vector4(...x)}):x&&typeof x=="object"&&x.type?(s+=`uniform ${x.type} ${y};
179
- `,a[y]=x):(s+=`uniform float ${y};
180
- `,a[y]={value:x});const l=i!==void 0,n=(c||l?Oe.declChunk:"")+`
181
- `+s,u=`vec2 screenUv = (vScreenPos.xy / vScreenPos.w) * 0.5 + 0.5;
182
- `,h=o.isTraveler?`vec2 resultUv = screenUv;
173
+ `,ve=`vec4 texColor = texture2D(uTexture, resultUv);
174
+ baseColor = blendSrcOver(baseColor, texColor);`,ZA={vertexShader:ye,fragmentShader:pe},PA={declChunk:De,uvChunk:Se,baseColorChunk:ve};function be(t,A,e,s=null,r){var _;const o=s!==null||!!t.imageSrc;let i="";const n={};if(r!=null&&r.uniforms)for(const[v,S]of Object.entries(r.uniforms))typeof S=="number"?(i+=`uniform float ${v};
175
+ `,n[v]={value:S}):Array.isArray(S)?S.length===2?(i+=`uniform vec2 ${v};
176
+ `,n[v]={value:new E.Vector2(...S)}):S.length===3?(i+=`uniform vec3 ${v};
177
+ `,n[v]={value:new E.Vector3(...S)}):S.length===4&&(i+=`uniform vec4 ${v};
178
+ `,n[v]={value:new E.Vector4(...S)}):S&&typeof S=="object"&&S.type?(i+=`uniform ${S.type} ${v};
179
+ `,n[v]=S):(i+=`uniform float ${v};
180
+ `,n[v]={value:S});const g=r!==void 0,a=(o||g?PA.declChunk:"")+`
181
+ `+i,I=`vec2 screenUv = (vScreenPos.xy / vScreenPos.w) * 0.5 + 0.5;
182
+ `,c=t.isTraveler?`vec2 resultUv = screenUv;
183
183
  `:`vec2 localUv = (p / uSize) + 0.5;
184
184
  vec2 resultUv = localUv * uTextureRepeat + uTextureOffset;
185
- `,d=c||l?u+h+((i==null?void 0:i.uvModifier)||""):"",p=c||l?Oe.baseColorChunk:"",f=(i==null?void 0:i.colorModifier)||"",A=_e.fragmentShader.replace("#INJECT_DECLARATIONS",n).replace("#INJECT_UV_MODIFIER",d).replace("#INJECT_BASE_COLOR",p).replace("#INJECT_COLOR_MODIFIER",f),m=ce(o.backgroundColor),S=ce(o.borderColor),T={uSize:{value:new v.Vector2(e,t)},uMeshSize:{value:new v.Vector2(e,t)},uShadowColor:{value:new v.Vector4(0,0,0,0)},uShadowOffset:{value:new v.Vector2(0,0)},uShadowBlur:{value:0},uShadowSpread:{value:0},uBgColor:{value:new v.Vector4(m.color.r,m.color.g,m.color.b,m.alpha)},uBorderColor:{value:new v.Vector4(S.color.r,S.color.g,S.color.b,S.alpha)},uBorderRadius:{value:new v.Vector4(0,0,0,0)},uBorderWidth:{value:le(o.borderWidth)},uOpacity:{value:(C=o.opacity)!=null?C:1},uTexture:{value:null},uTextureRepeat:{value:new v.Vector2(1,1)},uTextureOffset:{value:new v.Vector2(0,0)},uGradientCount:{value:0},uGradientAngle:{value:0},uGradientColors:{value:Array.from({length:8},()=>new v.Vector4(0,0,0,0))},uGradientStops:{value:new Float32Array(8)}};Be(T.uBorderRadius.value,o.borderRadius,Math.min(e,t)),c&&(T.uTexture.value=r);const k=new v.ShaderMaterial({uniforms:ne(ne({},T),a),vertexShader:_e.vertexShader,fragmentShader:A,transparent:!0,side:v.FrontSide});return o.backgroundImage&&xe(k,{backgroundImage:o.backgroundImage}),k}function tt(o,e,t,r,i){const c=le(e.borderWidth);xe(o,{width:t,height:r,borderRadius:e.borderRadius,borderWidth:c,backgroundColor:e.backgroundColor,borderColor:e.borderColor,opacity:e.opacity,texture:i,backgroundImage:e.backgroundImage,boxShadow:e.boxShadow})}function xe(o,e){var r,i,c;if(e.boxShadow!==void 0){const s=$e(e.boxShadow);s?(o.uniforms.uShadowColor.value.set(s.color.r,s.color.g,s.color.b,s.alpha),o.uniforms.uShadowOffset.value.set(s.offsetX,s.offsetY),o.uniforms.uShadowBlur.value=s.blurRadius,o.uniforms.uShadowSpread.value=s.spreadRadius,o.userData.shadowPadding=s.blurRadius+s.spreadRadius+Math.max(Math.abs(s.offsetX),Math.abs(s.offsetY))):(o.uniforms.uShadowColor.value.w=0,o.userData.shadowPadding=0)}if(e.width!==void 0&&e.height!==void 0&&o.uniforms.uSize.value.set(e.width,e.height),o.uniforms.uMeshSize){const s=o.userData.shadowPadding||0,a=e.width!==void 0?e.width:o.uniforms.uSize.value.x,l=e.height!==void 0?e.height:o.uniforms.uSize.value.y;o.uniforms.uMeshSize.value.set(a+s*2,l+s*2)}if(e.borderRadius!==void 0){const s=e.width!==void 0&&e.height!==void 0?Math.min(e.width,e.height):Math.min(o.uniforms.uSize.value.x,o.uniforms.uSize.value.y);Be(o.uniforms.uBorderRadius.value,e.borderRadius,s)}if(e.borderWidth!==void 0&&(o.uniforms.uBorderWidth.value=e.borderWidth),e.backgroundColor!==void 0)if(Array.isArray(e.backgroundColor)){const s=e.backgroundColor[3]!==void 0?e.backgroundColor[3]:o.uniforms.uBgColor.value.w;o.uniforms.uBgColor.value.set(e.backgroundColor[0],e.backgroundColor[1],e.backgroundColor[2],s)}else if(typeof e.backgroundColor=="string"){const s=ce(e.backgroundColor);o.uniforms.uBgColor.value.set(s.color.r,s.color.g,s.color.b,s.alpha)}else{const s=o.uniforms.uBgColor.value.w;o.uniforms.uBgColor.value.set(e.backgroundColor.r,e.backgroundColor.g,e.backgroundColor.b,s)}if(e.borderColor!==void 0)if(Array.isArray(e.borderColor)){const s=o.uniforms.uBorderColor.value.w;o.uniforms.uBorderColor.value.set(e.borderColor[0],e.borderColor[1],e.borderColor[2],s)}else if(typeof e.borderColor=="string"){const s=ce(e.borderColor);o.uniforms.uBorderColor.value.set(s.color.r,s.color.g,s.color.b,s.alpha)}else{const s=o.uniforms.uBorderColor.value.w;o.uniforms.uBorderColor.value.set(e.borderColor.r,e.borderColor.g,e.borderColor.b,s)}e.opacity!==void 0&&(o.uniforms.uOpacity.value=e.opacity),e.bgOpacity!==void 0&&(o.uniforms.uBgColor.value.w=e.bgOpacity),e.borderOpacity!==void 0&&(o.uniforms.uBorderColor.value.w=e.borderOpacity),o.uniforms.uTexture&&e.texture!==void 0&&(o.uniforms.uTexture.value=e.texture);const t=e.texture!==void 0?e.texture:(r=o.uniforms.uTexture)==null?void 0:r.value;if(t&&(t.image instanceof ImageBitmap||t.image instanceof HTMLImageElement||t.image instanceof HTMLCanvasElement)){const s=t.image.naturalWidth||t.image.videoWidth||t.image.width,a=t.image.naturalHeight||t.image.videoHeight||t.image.height,l=(i=e.width)!=null?i:o.uniforms.uSize.value.x,n=(c=e.height)!=null?c:o.uniforms.uSize.value.y;if(s&&a&&l&&n){const u=s/a,h=l/n;if(u>h){const d=h/u;o.uniforms.uTextureRepeat.value.set(d,1),o.uniforms.uTextureOffset.value.set((1-d)/2,0)}else{const d=u/h;o.uniforms.uTextureRepeat.value.set(1,d),o.uniforms.uTextureOffset.value.set(0,(1-d)/2)}}}else o.uniforms.uTextureRepeat&&(o.uniforms.uTextureRepeat.value.set(1,1),o.uniforms.uTextureOffset.value.set(0,0));if(e.backgroundImage!==void 0){const s=qe(e.backgroundImage);if(s){o.uniforms.uGradientCount.value=s.stops.length,o.uniforms.uGradientAngle.value=s.angle;for(let a=0;a<8;a++)if(a<s.stops.length){const l=s.stops[a];o.uniforms.uGradientColors.value[a].set(l.color.r,l.color.g,l.color.b,l.alpha),o.uniforms.uGradientStops.value[a]=l.stop}else o.uniforms.uGradientColors.value[a].set(0,0,0,0),o.uniforms.uGradientStops.value[a]=1}else o.uniforms.uGradientCount.value=0}for(const s of Object.keys(e))s!=="width"&&s!=="height"&&s!=="borderRadius"&&s!=="borderWidth"&&s!=="backgroundColor"&&s!=="borderColor"&&s!=="opacity"&&s!=="bgOpacity"&&s!=="borderOpacity"&&s!=="texture"&&s!=="backgroundImage"&&s!=="boxShadow"&&o.uniforms[s]!==void 0&&(o.uniforms[s].value!==void 0&&o.uniforms[s].value!==null&&typeof o.uniforms[s].value.set=="function"?Array.isArray(e[s])?o.uniforms[s].value.set(...e[s]):e[s]!==void 0&&(e[s].copy?o.uniforms[s].value.copy(e[s]):o.uniforms[s].value=e[s]):o.uniforms[s].value=e[s])}function Be(o,e,t=0){var l,n,u,h;if(e==null){o.set(0,0,0,0);return}if(typeof e=="number"){o.set(e,e,e,e);return}if(Array.isArray(e)){o.set(e[0],e[1],e[2],e[3]);return}const r=e.split("/")[0].trim().split(/\s+/),i=le(r[0],t),c=le((l=r[1])!=null?l:r[0],t),s=le((n=r[2])!=null?n:r[0],t),a=le((h=(u=r[3])!=null?u:r[1])!=null?h:r[0],t);o.set(i,c,s,a)}const G={create(o,e,t,r,i,c=2,s=null,a){return o==="BOX"?et(e,r,i,s,a):o==="TEXT"?new Ge(t||"",e,r,i,c):new v.MeshBasicMaterial({visible:!1})},update(o,e,t,r,i,c,s=2,a){e==="BOX"?tt(o,t,i,c,a):e==="TEXT"&&o.updateText(r||"",t,i,c,s)},forceUpdateUniforms(o,e){xe(o,e)}};class rt{constructor(e,t=!0){g(this,"observer");g(this,"textures",new WeakMap);g(this,"loadStatus",new WeakMap);g(this,"elementUrls",new WeakMap);g(this,"onUpdate");this.onUpdate=e,t&&(this.observer=new IntersectionObserver(r=>{for(const i of r){const c=i.target;i.isIntersecting?this.loadTexture(c):this.disposeTexture(c)}},{rootMargin:"300px"}))}register(e,t){if(e.nodeType!==Node.ELEMENT_NODE)return;this.elementUrls.get(e)!==t&&(this.elementUrls.set(e,t),this.observer?(this.observer.unobserve(e),this.observer.observe(e)):this.loadTexture(e))}unregister(e){e.nodeType===Node.ELEMENT_NODE&&this.observer&&this.observer.unobserve(e),this.disposeTexture(e),this.elementUrls.delete(e),this.loadStatus.delete(e)}loadTexture(e){return Ve(this,null,function*(){if(this.loadStatus.get(e)||this.textures.has(e))return;const t=this.elementUrls.get(e);if(t){this.loadStatus.set(e,!0);try{let r;if(t.startsWith("data:image/svg+xml"))r=yield new Promise((c,s)=>{const a=new Image;a.onload=()=>c(a),a.onerror=s,a.src=t});else{const s=yield(yield fetch(t)).blob();r=yield createImageBitmap(s,{imageOrientation:"flipY"})}if(this.elementUrls.get(e)!==t){"close"in r&&r.close();return}const i=new v.Texture(r);r instanceof HTMLImageElement||(i.flipY=!1),i.colorSpace=v.LinearSRGBColorSpace,i.needsUpdate=!0,this.textures.set(e,i),this.onUpdate(e,i)}catch(r){console.warn("[MirageEngine] Failed to load texture:",t,r)}finally{this.elementUrls.has(e)&&this.loadStatus.set(e,!1)}}})}disposeTexture(e){const t=this.textures.get(e);t&&(t.dispose(),this.textures.delete(e),this.onUpdate(e,null)),this.loadStatus.set(e,!1)}get(e){return this.textures.get(e)}disposeAll(){this.observer&&this.observer.disconnect()}}class it{constructor(e,t,r,i){g(this,"canvas");g(this,"scene");g(this,"camera");g(this,"renderer");g(this,"renderTargets",[]);g(this,"renderOrder",0);g(this,"qualityFactor",2);g(this,"mode","overlay");g(this,"canvasSize","viewport");g(this,"clipArea",1);g(this,"targetLayer","base");g(this,"overscan",200);g(this,"target");g(this,"mountContainer");g(this,"registry");g(this,"targetRect");g(this,"travelersByLayer",Array.from({length:F.MAX_LAYERS},()=>new Set));g(this,"textureManager");g(this,"fixedMeshes",new Set);var a,l,n,u,h;this.target=e,this.mountContainer=r,this.registry=i,this.mode=(a=t.mode)!=null?a:"overlay",this.canvasSize=(l=t.canvasSize)!=null?l:"viewport",this.clipArea=(n=t.travelerClipArea)!=null?n:1,this.targetLayer=(u=t.layer)!=null?u:"base",this.textureManager=new rt((d,p)=>{const f=this.registry.get(d);f&&f.material instanceof v.ShaderMaterial&&G.forceUpdateUniforms(f.material,{texture:p})},this.isViewport),this.canvas=document.createElement("canvas"),this.scene=new v.Scene,this.targetRect=this.target.getBoundingClientRect();const c=this.isViewport?window.innerWidth+this.overscan*2:this.targetRect.width,s=this.isViewport?window.innerHeight+this.overscan*2:this.targetRect.height;this.camera=new v.OrthographicCamera(c/-2,c/2,s/2,s/-2,1,1e3),this.camera.position.z=100,this.camera.layers.set(this.getSceneLayer()),this.renderer=new v.WebGLRenderer({canvas:this.canvas,alpha:!0,antialias:!0}),v.ColorManagement.enabled=!1,this.renderer.outputColorSpace=v.LinearSRGBColorSpace,this.renderer.setPixelRatio(window.devicePixelRatio),this.renderer.setSize(c,s),this.applyTextQuality((h=t.quality)!=null?h:"medium")}get isViewport(){return this.mode==="overlay"&&this.canvasSize==="viewport"}getSceneLayer(){return typeof this.targetLayer=="number"?this.targetLayer:this.targetLayer==="selected"?N.SELECTED:N.BASE}createRenderTarget(){for(let e=0;e<F.MAX_LAYERS;e++){const t=this.isViewport?window.innerWidth+this.overscan*2:this.targetRect.width,r=this.isViewport?window.innerHeight+this.overscan*2:this.targetRect.height;this.renderTargets.push(new v.WebGLRenderTarget(t*this.qualityFactor,r*this.qualityFactor,{minFilter:v.LinearFilter,magFilter:v.LinearFilter,format:v.RGBAFormat,stencilBuffer:!1,depthBuffer:!0}))}}applyTextQuality(e){if(typeof e=="number"){this.qualityFactor=Math.max(.1,e);return}switch(e){case"low":this.qualityFactor=1;break;case"high":this.qualityFactor=4;break;case"medium":this.qualityFactor=2;break;default:this.qualityFactor=2;break}}mount(){this.mountContainer.prepend(this.canvas),this.canvas.style.pointerEvents=this.mode==="overlay"?"none":"auto",this.updateCanvasLayout()}updateCanvasLayout(){const e=this.isViewport?window.innerWidth+this.overscan*2:this.targetRect.width,t=this.isViewport?window.innerHeight+this.overscan*2:this.targetRect.height;this.canvas.style.width=`${e}px`,this.canvas.style.height=`${t}px`,this.mode==="duplicate"?(this.canvas.style.position="",this.canvas.style.top="",this.canvas.style.left="",this.canvas.style.display="block"):(this.canvas.style.position=this.isViewport?"fixed":"absolute",this.canvas.style.top=this.isViewport?`-${this.overscan}px`:`${this.target.offsetTop}px`,this.canvas.style.left=this.isViewport?`-${this.overscan}px`:`${this.target.offsetLeft}px`,this.canvas.style.display="block")}updateUniforms(e,t){const r=this.registry.get(e);r&&(r.traverse(i=>{i.isMesh&&i.material&&G.forceUpdateUniforms(i.material,t)}),r.userData.nativeMesh&&r.userData.nativeMesh.traverse(i=>{i.isMesh&&i.material&&G.forceUpdateUniforms(i.material,t)}))}dispose(){this.renderer.dispose(),this.canvas.remove(),this.textureManager.disposeAll()}setSize(e,t){this.renderer.setSize(e,t);for(const r of this.renderTargets)r.setSize(e*this.qualityFactor,t*this.qualityFactor);this.camera.left=e/-2,this.camera.right=e/2,this.camera.top=t/2,this.camera.bottom=t/-2,this.camera.updateProjectionMatrix()}syncScene(e,t){const r=this.target.getBoundingClientRect(),i=this.isViewport?window.innerWidth+this.overscan*2:r.width,c=this.isViewport?window.innerHeight+this.overscan*2:r.height,s=this.isViewport?this.canvas.clientWidth:this.targetRect.width,a=this.isViewport?this.canvas.clientHeight:this.targetRect.height,l=Math.abs(i-s)>.1||Math.abs(c-a)>.1,n=this.mode==="overlay"&&(Math.abs(r.top-this.targetRect.top)>.1||Math.abs(r.left-this.targetRect.left)>.1);l?(this.targetRect=r,this.setSize(i,c),this.updateCanvasLayout()):n?(this.targetRect=r,this.updateCanvasLayout()):this.targetRect=r,this.renderOrder=0,this.reconcileNode(e),t.size>0&&t.forEach(u=>{const h=this.registry.get(u);if(h){this.scene.remove(h);for(const d of this.travelersByLayer)d.delete(h);this.fixedMeshes.delete(h),h.geometry.dispose(),h.userData.nativeMesh&&(this.scene.remove(h.userData.nativeMesh),Array.isArray(h.userData.nativeMesh.material)?h.userData.nativeMesh.material.forEach(d=>d.dispose()):h.userData.nativeMesh.material.dispose(),h.userData.nativeMesh.geometry.dispose()),h.traverse(d=>{d instanceof v.Mesh&&(d.geometry&&d.geometry.dispose(),d.material&&(Array.isArray(d.material)?d.material.forEach(p=>p.dispose()):d.material.dispose()))}),this.registry.remove(u),this.textureManager.unregister(u)}})}reconcileNode(e){var i,c;let t=this.registry.get(e.element);const r=JSON.stringify(e.shaderHooks||null);if(t&&t.userData.shaderHash!==r&&(this.scene.remove(t),t.geometry.dispose(),t.material instanceof v.Material&&t.material.dispose(),this.registry.remove(e.element),t=void 0),!t){const s=new v.PlaneGeometry(1,1),a=e.isTraveler?(i=this.renderTargets[e.captureLayer-2])==null?void 0:i.texture:this.textureManager.get(e.element),l=G.create("BOX",e.styles,"",e.rect.width,e.rect.height,this.qualityFactor,a,e.shaderHooks);t=new v.Mesh(s,l),e.type==="TEXT"&&(t.name="BG_MESH"),this.scene.add(t),this.registry.register(e.element,t),t.userData.baseMaterial=l,t.userData.domElement=e.element,t.userData.shaderHash=r}if(t.userData.clipElements=e.clipElements,(c=e.nativeStyles)!=null&&c.transform?t.userData.nativeTransform=e.nativeStyles.transform:t.userData.nativeTransform=void 0,this.updateMeshProperties(t,e),this.updateMeshLayers(t,e),e.isTraveler)for(let s=0;s<F.MAX_LAYERS;s++)s===e.captureLayer-2?this.travelersByLayer[s].add(t):this.travelersByLayer[s].delete(t);else for(const s of this.travelersByLayer)s.delete(t);if(e.isFixed?this.fixedMeshes.add(t):this.fixedMeshes.delete(t),e.styles.imageSrc?this.textureManager.register(e.element,e.styles.imageSrc):this.textureManager.unregister(e.element),e.type==="BOX")for(const s of e.children)this.reconcileNode(s);else e.type==="TEXT"&&(this.reconcileTextChild(t,e,!1),t.userData.nativeMesh&&e.nativeStyles&&this.reconcileTextChild(t.userData.nativeMesh,e,!0))}reconcileTextChild(e,t,r){var n;const i=t.textLines||[{text:t.textContent||"",rect:t.rect}],c=r?t.nativeStyles:t.textStyles,s=JSON.stringify(c)+t.textContent+i.map(u=>u.text).join("|"),a=(n=e.userData)==null?void 0:n.textChildStyleHash;if(t.dirtyMask&ye||s!==a){e.children.filter(f=>f.name.startsWith("TEXT_CHILD")).forEach(f=>{var m;const A=f;(m=A.material.map)==null||m.dispose(),A.geometry.dispose(),e.remove(A)});const h=t.rect,d=h.x+h.width/2,p=h.y+h.height/2;i.forEach((f,A)=>{const m=G.create("TEXT",c,f.text,f.rect.width,f.rect.height,this.qualityFactor),S=new v.PlaneGeometry(1,1),T=new v.Mesh(S,m);T.name=`TEXT_CHILD_${A}`;const k=t.rect.width===0?1:f.rect.width/t.rect.width,C=t.rect.height===0?1:f.rect.height/t.rect.height;T.scale.set(k,C,1);const y=f.rect.x+f.rect.width/2,x=f.rect.y+f.rect.height/2,W=y-d,q=-(x-p);T.position.set(t.rect.width===0?0:W/t.rect.width,t.rect.height===0?0:q/t.rect.height,.005),e.add(T)}),e.userData.textChildStyleHash=s}e.children.forEach(u=>{if(!u.name.startsWith("TEXT_CHILD"))return;const h=u;if(r&&t.nativeLayer!==void 0)h.layers.set(N.HIDDEN),t.visibility&H&&h.layers.enable(N.getCaptureLayer(t.nativeLayer));else{const d=t.visibility&H?N.BASE:N.HIDDEN;if(h.layers.set(d),t.visibility&oe&&h.layers.enable(N.SELECTED),t.visibility&H)if(!r&&t.nativeLayer!==void 0&&t.nativeStyles!==void 0)for(let p=t.captureLayer;p<=F.MAX_LAYERS+1;p++)p!==t.nativeLayer&&h.layers.enable(N.getCaptureLayer(p));else for(let p=t.captureLayer;p<=F.MAX_LAYERS+1;p++)h.layers.enable(N.getCaptureLayer(p))}})}updateMeshProperties(e,t){var C,y,x,W,q;const{rect:r,styles:i}=t,c=this.renderer.getPixelRatio(),s=this.renderer.domElement.width/c,a=this.renderer.domElement.height/c;e.material=e.userData.baseMaterial;let l=((C=e.material.userData)==null?void 0:C.shadowPadding)||0;e.scale.set(r.width+l*2,r.height+l*2,1),e.userData.domRect={x:r.x,y:r.y,width:r.width,height:r.height};const n=.001;this.renderOrder++;const u=this.targetRect.left+window.scrollX,h=this.targetRect.top+window.scrollY;let d,p;if(this.isViewport)d=r.x-window.innerWidth/2+r.width/2,p=-r.y+window.innerHeight/2-r.height/2;else{const X=r.x-u,U=r.y-h;d=X-s/2+r.width/2,p=-U+a/2-r.height/2}e.position.set(d,p,i.zIndex+this.renderOrder*n);const f=r.x,A=r.y;e.userData.basePosition={x:d,y:p},e.userData.originalBasePosition={x:d,y:p},e.userData.baseSize={width:r.width,height:r.height},e.userData.baseDOM={x:f,y:A},e.userData.isFixed=t.isFixed,e.userData.initialScroll={x:window.scrollX,y:window.scrollY};const m=t.element.nodeType===Node.TEXT_NODE?t.element.parentElement:t.element,S=window.getComputedStyle(m);let T=0,k=0;if(S.transform&&S.transform!=="none"){const X=new DOMMatrix(S.transform);T=X.m41,k=X.m42}if(e.userData.baseTransform={x:T,y:k},delete e.userData.originRatioX,delete e.userData.originRatioY,G.update(e.userData.baseMaterial,"BOX",i,"",r.width,r.height,this.qualityFactor,t.isTraveler?(y=this.renderTargets[t.captureLayer-2])==null?void 0:y.texture:this.textureManager.get(t.element)),t.nativeStyles&&t.nativeRect){if(!e.userData.nativeMesh){const Y=G.create("BOX",t.nativeStyles,"",t.nativeRect.width,t.nativeRect.height,this.qualityFactor,t.isTraveler?(x=this.renderTargets[t.captureLayer-2])==null?void 0:x.texture:this.textureManager.get(t.element),t.shaderHooks),$=new v.Mesh(e.geometry,Y);t.type==="TEXT"&&($.name="BG_MESH"),this.scene.add($),e.userData.nativeMesh=$}const X=e.userData.nativeMesh;let U,Q;if(this.isViewport)U=t.nativeRect.x-window.innerWidth/2+t.nativeRect.width/2,Q=-t.nativeRect.y+window.innerHeight/2-t.nativeRect.height/2;else{const Y=t.nativeRect.x-u,$=t.nativeRect.y-h;U=Y-s/2+t.nativeRect.width/2,Q=-$+a/2-t.nativeRect.height/2}let re=t.nativeRect.width,ie=t.nativeRect.height,L=U,z=Q;if(t.nativeStyles.transform){const Y=t.nativeStyles.transform,$=Y.match(/scale\(([\d.]+%?)\)/);if($){let E=parseFloat($[1]);$[1].includes("%")&&(E/=100),re*=E,ie*=E}const he=Y.match(/scaleX\(([\d.]+%?)\)/);if(he){let E=parseFloat(he[1]);he[1].includes("%")&&(E/=100),re*=E}const de=Y.match(/scaleY\(([\d.]+%?)\)/);if(de){let E=parseFloat(de[1]);de[1].includes("%")&&(E/=100),ie*=E}const ue=Y.match(/translate\(([^,]+),\s*([^)]+)\)/);if(ue){const E=ue[1].trim(),R=ue[2].trim();let P=parseFloat(E);E.includes("%")&&(P=P/100*t.nativeRect.width);let I=parseFloat(R);R.includes("%")&&(I=I/100*t.nativeRect.height),L+=P,z-=I}const we=Y.match(/translateX\(([^)]+)\)/);if(we){const E=we[1].trim();let R=parseFloat(E);E.includes("%")&&(R=R/100*t.nativeRect.width),L+=R}const w=Y.match(/translateY\(([^)]+)\)/);if(w){const E=w[1].trim();let R=parseFloat(E);E.includes("%")&&(R=R/100*t.nativeRect.height),z-=R}}let ee=((W=X.material.userData)==null?void 0:W.shadowPadding)||0;X.scale.set(re+ee*2,ie+ee*2,1),X.position.set(L,z,t.nativeStyles.zIndex+this.renderOrder*n),G.update(X.material,"BOX",t.nativeStyles,"",t.nativeRect.width,t.nativeRect.height,this.qualityFactor,t.isTraveler?(q=this.renderTargets[t.captureLayer-2])==null?void 0:q.texture:this.textureManager.get(t.element))}else e.userData.nativeMesh&&(this.scene.remove(e.userData.nativeMesh),e.userData.nativeMesh.material instanceof v.Material&&e.userData.nativeMesh.material.dispose(),delete e.userData.nativeMesh)}updateMeshLayers(e,t){const r=t.visibility&H?N.BASE:N.HIDDEN;if(e.layers.set(r),t.visibility&oe&&e.layers.enable(N.SELECTED),e.userData.nativeMesh&&t.nativeLayer!==void 0){const i=e.userData.nativeMesh;if(i.layers.set(N.HIDDEN),t.visibility&H){i.layers.enable(N.getCaptureLayer(t.nativeLayer));for(let c=t.captureLayer;c<=F.MAX_LAYERS+1;c++)c!==t.nativeLayer&&e.layers.enable(N.getCaptureLayer(c))}}else if(t.visibility&H)for(let i=t.captureLayer;i<=F.MAX_LAYERS+1;i++)e.layers.enable(N.getCaptureLayer(i))}captureRenderTarget(e,t,r){if(e.size===0||!r)return;const i=new v.Color,c=this.renderer.getClearAlpha();this.renderer.getClearColor(i),this.renderer.setClearColor(0,0),this.renderer.setRenderTarget(r),this.renderer.clear(),this.renderer.autoClear=!1,this.renderer.setScissorTest(!0),this.camera.layers.set(t);const s=new v.Vector3,a=this.isViewport?window.innerWidth+this.overscan*2:this.targetRect.width,l=this.isViewport?window.innerHeight+this.overscan*2:this.targetRect.height,n=this.renderer.getPixelRatio();for(const u of e){s.setFromMatrixPosition(u.matrixWorld),s.project(this.camera);const h=(s.x+1)/2*a,d=(s.y+1)/2*l;let p=0,f=1;typeof this.clipArea=="number"?f=this.clipArea:this.clipArea.endsWith("%")?f=parseFloat(this.clipArea)/100:this.clipArea.endsWith("px")&&(p=parseFloat(this.clipArea));const A=u.scale.x*f+.5,m=u.scale.y*f+.5,S=h-A/2,T=d-m/2,k=(S*this.qualityFactor-p)/n,C=(T*this.qualityFactor-p)/n,y=(A*this.qualityFactor+p*2)/n,x=(m*this.qualityFactor+p*2)/n;this.renderer.setScissor(k,C,y,x),this.renderer.render(this.scene,this.camera)}this.renderer.setScissorTest(!1),this.renderer.autoClear=!0,this.renderer.setRenderTarget(null),this.camera.layers.set(this.getSceneLayer()),this.renderer.setClearColor(i,c)}render(){for(let l=0;l<F.MAX_LAYERS;l++){const n=l+1;this.captureRenderTarget(this.travelersByLayer[l],N.getCaptureLayer(n),this.renderTargets[l])}const e=this.renderer.getContext(),t=this.renderer.getPixelRatio(),r=this.renderer.domElement.height/t,i=this.renderer.domElement,c=i.getBoundingClientRect().top,s=i.getBoundingClientRect().left,a=(l,n)=>{if(n&&n.width>0&&n.height>0){const u=Math.floor((n.x-s)*t),h=Math.floor((r-(n.y-c+n.height))*t),d=Math.ceil(n.width*t),p=Math.ceil(n.height*t);l.onBeforeRender=()=>{e.enable(e.SCISSOR_TEST),e.scissor(u,h,d,p)},l.onAfterRender=()=>{e.disable(e.SCISSOR_TEST)},l.__hasScissorHook=!0}else l.__hasScissorHook&&(l.onBeforeRender=()=>{},l.onAfterRender=()=>{},l.__hasScissorHook=!1)};this.scene.children.forEach(l=>{var h;const n=l,u=(h=n.userData)==null?void 0:h.scissorRect;a(n,u),n.children.forEach(d=>{d.name.startsWith("TEXT_CHILD")&&a(d,u)})}),this.renderer.render(this.scene,this.camera)}syncMeshesByDOM(){const e=this.targetRect.left+window.scrollX,t=this.targetRect.top+window.scrollY,r=this.renderer.getPixelRatio(),i=this.renderer.domElement.width/r,c=this.renderer.domElement.height/r;this.scene.children.forEach(s=>{var h,d;const a=s;if(!a.userData||!a.userData.domElement)return;const l=a.userData.domElement;if(!l.isConnected)return;let n;if(l.nodeType===Node.TEXT_NODE){const p=document.createRange();p.selectNode(l),n=p.getBoundingClientRect()}else n=l.getBoundingClientRect();const u=a.userData.domRect;if(!u||Math.abs(n.x-u.x)>.5||Math.abs(n.y-u.y)>.5||Math.abs(n.width-u.width)>.5||Math.abs(n.height-u.height)>.5){a.userData.domRect={x:n.x,y:n.y,width:n.width,height:n.height};const p=a.userData.clipElements;if(p&&p.length>0){let S=-1/0,T=-1/0,k=1/0,C=1/0;for(const y of p){const x=y.getBoundingClientRect();S=Math.max(S,x.left),T=Math.max(T,x.top),k=Math.min(k,x.right),C=Math.min(C,x.bottom)}a.userData.scissorRect={x:S,y:T,width:Math.max(0,k-S),height:Math.max(0,C-T)}}else a.userData.scissorRect=void 0;let f,A;if(this.isViewport)f=n.x-window.innerWidth/2+n.width/2,A=-n.y+window.innerHeight/2-n.height/2;else{const S=n.x-e,T=n.y-t;f=S-i/2+n.width/2,A=-T+c/2-n.height/2}a.position.setX(f),a.position.setY(A);let m=((h=a.material.userData)==null?void 0:h.shadowPadding)||0;if(a.scale.set(n.width+m*2,n.height+m*2,1),a.updateMatrixWorld(),a.material instanceof v.ShaderMaterial&&G.forceUpdateUniforms(a.material,{width:n.width,height:n.height}),a.userData.nativeMesh){const S=a.userData.nativeMesh;let T=n.width,k=n.height,C=f,y=A;if(a.userData.nativeTransform){const W=a.userData.nativeTransform,q=W.match(/scale\(([\d.]+%?)\)/);if(q){let L=parseFloat(q[1]);q[1].includes("%")&&(L/=100),T*=L,k*=L}const X=W.match(/scaleX\(([\d.]+%?)\)/);if(X){let L=parseFloat(X[1]);X[1].includes("%")&&(L/=100),T*=L}const U=W.match(/scaleY\(([\d.]+%?)\)/);if(U){let L=parseFloat(U[1]);U[1].includes("%")&&(L/=100),k*=L}const Q=W.match(/translate\(([^,]+),\s*([^)]+)\)/);if(Q){const L=Q[1].trim(),z=Q[2].trim();let ee=parseFloat(L);L.includes("%")&&(ee=ee/100*n.width);let Y=parseFloat(z);z.includes("%")&&(Y=Y/100*n.height),C+=ee,y-=Y}const re=W.match(/translateX\(([^)]+)\)/);if(re){const L=re[1].trim();let z=parseFloat(L);L.includes("%")&&(z=z/100*n.width),C+=z}const ie=W.match(/translateY\(([^)]+)\)/);if(ie){const L=ie[1].trim();let z=parseFloat(L);L.includes("%")&&(z=z/100*n.height),y-=z}}let x=((d=S.material.userData)==null?void 0:d.shadowPadding)||0;S.position.setX(C),S.position.setY(y),S.scale.set(T+x*2,k+x*2,1),S.updateMatrixWorld(),S.material instanceof v.ShaderMaterial&&G.forceUpdateUniforms(S.material,{width:T,height:k})}}})}}function st(o){const e=o.textContent||"",t=[];let r="",i=null,c=-1;const s=(n,u)=>{for(let h=0;h<n.length;h++){const d=n[h],p=document.createRange();p.setStart(o,u+h),p.setEnd(o,u+h+1);const f=p.getBoundingClientRect();if(f.width===0&&f.height===0){r+=d;continue}c===-1||Math.abs(f.top-c)>f.height/2?(r&&i&&t.push({text:r,rect:{left:i.left,top:i.top,width:i.right-i.left,height:i.bottom-i.top}}),r=d,i={left:f.left,top:f.top,right:f.right,bottom:f.bottom},c=f.top):(r+=d,i&&(i.left=Math.min(i.left,f.left),i.top=Math.min(i.top,f.top),i.right=Math.max(i.right,f.right),i.bottom=Math.max(i.bottom,f.bottom)))}},a=e.match(/[^\s\-]+\-?|\-|\s+/g)||[];let l=0;for(const n of a){const u=document.createRange();u.setStart(o,l),u.setEnd(o,l+n.length);const h=u.getClientRects();if(h.length>1)s(n,l);else{const d=h.length===1?h[0]:u.getBoundingClientRect();if(d.width===0&&d.height===0){r+=n,l+=n.length;continue}c===-1||Math.abs(d.top-c)>d.height/2?(r&&i&&t.push({text:r,rect:{left:i.left,top:i.top,width:i.right-i.left,height:i.bottom-i.top}}),r=n,i={left:d.left,top:d.top,right:d.right,bottom:d.bottom},c=d.top):(r+=n,i&&(i.left=Math.min(i.left,d.left),i.top=Math.min(i.top,d.top),i.right=Math.max(i.right,d.right),i.bottom=Math.max(i.bottom,d.bottom)))}l+=n.length}return r&&i&&t.push({text:r,rect:{left:i.left,top:i.top,width:i.right-i.left,height:i.bottom-i.top}}),t.filter(n=>n.text.trim().length>0&&n.rect.width>0&&n.rect.height>0)}function Fe(o){const e=parseFloat(o.fontSize);let t=parseFloat(o.lineHeight);isNaN(t)&&(t=e*1.2);let r=parseFloat(o.letterSpacing);return isNaN(r)&&(r=0),{font:`${o.fontStyle} ${o.fontWeight} ${o.fontSize} ${o.fontFamily}`,fontSize:o.fontSize,color:o.color,textAlign:o.textAlign||"start",textBaseline:"alphabetic",direction:o.direction||"inherit",lineHeight:t,letterSpacing:r}}function Ne(o,e=te|ae|De|ye|ve,t,r=1,i=0,c=2,s,a,l){var ee,Y,$,he,de,ue,we;if(o.nodeType===Node.TEXT_NODE){const w=o;if(!w.textContent||!w.textContent.trim())return null;const E=w.textContent.replace(/\s+/g," ");if(E.length===0)return null;const R=st(w);if(R.length===0)return null;const P=w.parentElement,I=P?window.getComputedStyle(P):null;if(!I)return null;const Z=Math.min(...R.map(M=>M.rect.left)),j=Math.min(...R.map(M=>M.rect.top)),se=Math.max(...R.map(M=>M.rect.left+M.rect.width)),_=Math.max(...R.map(M=>M.rect.top+M.rect.height));return{id:Math.random().toString(36).substring(2,9),type:"TEXT",element:w,rect:{x:Z+window.scrollX,y:j+window.scrollY,width:se-Z,height:_-j},styles:{backgroundColor:"transparent",backgroundImage:"",opacity:P&&P.dataset[K.KEY]===K.VALUES.HIDE?1:parseFloat(I.opacity),zIndex:(isNaN(parseInt(I.zIndex))?0:parseInt(I.zIndex))+i,borderRadius:"0px",borderColor:"transparent",borderWidth:"0px",isTraveler:!1},textContent:E,textLines:R.map(M=>({text:M.text.trim(),rect:{x:M.rect.left+window.scrollX,y:M.rect.top+window.scrollY,width:M.rect.width,height:M.rect.height}})),textStyles:Fe(I),dirtyMask:e,visibility:t,isTraveler:!1,captureLayer:r,isFixed:I.position==="fixed",nativeLayer:s,nativeStyles:a?ne(ne({backgroundColor:"transparent",backgroundImage:"",opacity:P&&P.dataset[K.KEY]===K.VALUES.HIDE?1:parseFloat(I.opacity),zIndex:(isNaN(parseInt(I.zIndex))?0:parseInt(I.zIndex))+i,borderRadius:"0px",borderColor:"transparent",borderWidth:"0px",isTraveler:!1},Fe(I)),a):void 0,nativeRect:a?{x:Z+window.scrollX,y:j+window.scrollY,width:se-Z,height:_-j}:void 0,clipElements:l,children:[]}}if(o.nodeType!==Node.ELEMENT_NODE)return null;const n=o,u=n.dataset[B.KEY];let h=t,d=t;if(u){const w=new Set(u.split(/\s+/));for(const E of w)if(!Ee.includes(E))throw new Error(`[MirageEngine] Invalid filter token: '${E}'. Expected one of: 'include-tree', 'exclude-tree', 'include-self', 'exclude-self', 'end'.`);if(w.has(B.VALUES.END))return null;if(w.has(B.VALUES.INCLUDE_TREE)&&w.has(B.VALUES.EXCLUDE_TREE))throw new Error("[MirageEngine] Conflicting filters: 'include-tree' and 'exclude-tree' cannot be used together on the same element.");if(w.has(B.VALUES.INCLUDE_SELF)&&w.has(B.VALUES.EXCLUDE_SELF))throw new Error("[MirageEngine] Conflicting filters: 'include-self' and 'exclude-self' cannot be used together on the same element.");w.has(B.VALUES.INCLUDE_TREE)?h=h|H:w.has(B.VALUES.EXCLUDE_TREE)&&(h=h&~H),d=h,w.has(B.VALUES.INCLUDE_SELF)?d=d|H:w.has(B.VALUES.EXCLUDE_SELF)&&(d=d&~H)}const p=n.dataset[V.KEY];if(p){const w=new Set(p.split(/\s+/));for(const E of w)if(!Ee.includes(E))throw new Error(`[MirageEngine] Invalid select token: '${E}'. Expected one of: 'include-tree', 'exclude-tree', 'include-self', 'exclude-self', 'end'.`);if(w.has(V.VALUES.END))return null;if(w.has(V.VALUES.INCLUDE_TREE)&&w.has(V.VALUES.EXCLUDE_TREE))throw new Error("[MirageEngine] Conflicting selects: 'include-tree' and 'exclude-tree' cannot be used together on the same element.");if(w.has(V.VALUES.INCLUDE_SELF)&&w.has(V.VALUES.EXCLUDE_SELF))throw new Error("[MirageEngine] Conflicting selects: 'include-self' and 'exclude-self' cannot be used together on the same element.");w.has(V.VALUES.INCLUDE_TREE)?h=h|oe:w.has(V.VALUES.EXCLUDE_TREE)&&(h=h&~oe),d=h,w.has(V.VALUES.INCLUDE_SELF)?d=d|oe:w.has(V.VALUES.EXCLUDE_SELF)&&(d=d&~oe)}const f=n.dataset[F.KEY];let A=!1,m=a?ne({},a):{},S=s;if(f){let w=1;const E=f.indexOf("{"),R=f.lastIndexOf("}");let P=f;if(E!==-1&&R!==-1&&R>E){P=f.substring(0,E).trim();const _=f.substring(E,R+1);try{m=new Function("return "+_)()}catch(M){console.warn(`[MirageEngine] Failed to parse travel styles JSON: ${_}`)}}const I=P.split(/\s+/);let Z=!1;const j=I.indexOf(F.VALUES.TRAVELER);if(j!==-1){A=!0,Z=!0;const _=I[j+1];if(_&&!isNaN(parseInt(_,10)))w=parseInt(_,10);else{const M=I.find(fe=>!isNaN(parseInt(fe,10)));M&&(w=parseInt(M,10))}}const se=I.indexOf(F.VALUES.NATIVE);if(se!==-1){const _=I[se+1];if(_&&!isNaN(parseInt(_,10)))S=parseInt(_,10);else if(!A){const M=I.find(fe=>!isNaN(parseInt(fe,10)));M&&(S=parseInt(M,10))}}if(Z){const _=w+1;if(_<r)throw new Error(`[MirageEngine] Traveler layer (${w}) cannot be smaller than inherited capture layer (${r-1}).`);r=Math.min(_,F.MAX_LAYERS+1)}}const T=n.dataset[Le.KEY];let k;T&&(k=JSON.parse(T));const C=n.getBoundingClientRect(),y=window.getComputedStyle(n);if(C.width===0||C.height===0||y.display==="none")return null;let x=n.getAttribute("data-mid");x||(x=Math.random().toString(36).substring(2,11),n.setAttribute("data-mid",x));const W=parseInt(y.zIndex),q=(isNaN(W)?0:W)+i;let X;if(n.tagName==="IMG")X=n.src;else if(n.tagName.toLowerCase()==="svg"){const w=n.cloneNode(!0),E=m==null?void 0:m.color,R=m==null?void 0:m.fill,P=m==null?void 0:m.stroke,I=m==null?void 0:m.opacity,Z=(M,fe)=>{const J=window.getComputedStyle(M),be=fe,ct=J.fill===J.color,ht=J.stroke===J.color,Te=R||(ct?E:void 0)||J.fill;Te&&Te!=="none"&&(be.style.fill=Te);const Ce=P||(ht?E:void 0)||J.stroke;Ce&&Ce!=="none"&&(be.style.stroke=Ce),J.strokeWidth&&J.strokeWidth!=="0px"&&(be.style.strokeWidth=J.strokeWidth);const Xe=E||J.color;Xe&&(be.style.color=Xe);const Re=I||J.opacity;Re&&Re!=="1"&&(be.style.opacity=Re);for(let Se=0;Se<M.children.length;Se++)Z(M.children[Se],fe.children[Se])};Z(n,w);const j=n.getBoundingClientRect(),se=window.devicePixelRatio*c;w.hasAttribute("viewBox")||w.setAttribute("viewBox",`0 0 ${j.width} ${j.height}`),w.setAttribute("width",(j.width*se).toString()),w.setAttribute("height",(j.height*se).toString());let _=new XMLSerializer().serializeToString(w);_.includes("xmlns=")||(_=_.replace("<svg",'<svg xmlns="http://www.w3.org/2000/svg"')),X=`data:image/svg+xml;utf8,${encodeURIComponent(_)}`}else if(y.backgroundImage&&y.backgroundImage!=="none"){const w=y.backgroundImage.match(/url\(['"]?(.*?)['"]?\)/);w&&(X=w[1])}const U={backgroundColor:y.backgroundColor,backgroundImage:y.backgroundImage,opacity:n.dataset[K.KEY]===K.VALUES.HIDE?1:parseFloat(y.opacity),zIndex:q,borderRadius:y.borderRadius,borderColor:y.borderColor,borderWidth:y.borderWidth,boxShadow:y.boxShadow,imageSrc:X,isTraveler:A},Q=U;let re,ie;const L=[],z=y.overflow==="hidden"?[...l||[],n]:l;return n.tagName.toLowerCase()!=="svg"&&Array.from(n.childNodes).forEach(w=>{const E=w.nodeType===Node.TEXT_NODE?d:h,R=Ne(w,e,E,r,q,c,w.nodeType===Node.TEXT_NODE?S:void 0,w.nodeType===Node.TEXT_NODE&&Object.keys(m).length>0?m:void 0,z);R&&L.push(R)}),{id:x,type:"BOX",element:n,rect:{x:C.left+window.scrollX,y:C.top+window.scrollY,width:C.width,height:C.height},styles:Q,textContent:re,textStyles:ie,dirtyMask:e,visibility:d,isTraveler:A,captureLayer:r,nativeLayer:S,nativeStyles:S!==void 0?ze(ne({},U),{backgroundColor:(ee=m.backgroundColor)!=null?ee:U.backgroundColor,backgroundImage:(Y=m.backgroundImage)!=null?Y:U.backgroundImage,opacity:($=m.opacity)!=null?$:U.opacity,zIndex:m.zIndex!==void 0?m.zIndex+q:U.zIndex,borderRadius:(he=m.borderRadius)!=null?he:U.borderRadius,borderColor:(de=m.borderColor)!=null?de:U.borderColor,borderWidth:(ue=m.borderWidth)!=null?ue:U.borderWidth,boxShadow:(we=m.boxShadow)!=null?we:U.boxShadow,isTraveler:U.isTraveler,transform:m.transform}):void 0,nativeRect:S!==void 0?{x:m.x!==void 0?parseFloat(m.x):C.left+window.scrollX,y:m.y!==void 0?parseFloat(m.y):C.top+window.scrollY,width:m.width!==void 0?parseFloat(m.width):C.width,height:m.height!==void 0?parseFloat(m.height):C.height}:void 0,isFixed:y.position==="fixed",clipElements:l,children:L,shaderHooks:k}}function ot(o,e){e.size!==0&&e.forEach((t,r)=>{var c,s,a,l;const i=o.get(r);!i||!i.userData.basePosition||(G.forceUpdateUniforms(i.material,{backgroundColor:t.backgroundColor,backgroundImage:t.backgroundImage,boxShadow:t.boxShadow,opacity:t.opacity,borderRadius:(s=t.borderRadius)!=null?s:(c=i.userData.baseStyles)==null?void 0:c.borderRadius}),i.userData.nativeMesh&&G.forceUpdateUniforms(i.userData.nativeMesh.material,{backgroundColor:t.backgroundColor,backgroundImage:t.backgroundImage,boxShadow:t.boxShadow,opacity:t.opacity,borderRadius:(l=t.borderRadius)!=null?l:(a=i.userData.baseStyles)==null?void 0:a.borderRadius}))})}class nt{constructor(e,t,r,i){g(this,"target");g(this,"renderer");g(this,"registry");g(this,"isTravelEnabled",!1);g(this,"tracker");this.target=e,this.renderer=t,this.registry=r,this.tracker=new Ie(e,{resizeDebounce:i.resizeDebounce}),this.tracker.onLayoutChange.add((c,s)=>{document.querySelector(`[${F.NAME}~='${F.VALUES.TRAVELER}']`)!==null&&!this.isTravelEnabled&&(this.isTravelEnabled=!0,this.renderer.createRenderTarget());const l=Ne(this.target,c,H,1,0,this.renderer.qualityFactor);l&&this.renderer.syncScene(l,s)}),this.tracker.onStyleChange.add(c=>{ot(this.registry,c)}),this.tracker.onRender.add(()=>{this.renderer.syncMeshesByDOM(),this.renderer.render()})}start(){this.tracker.start()}stop(){this.tracker.stop()}}class at{constructor(){g(this,"store");this.store=new WeakMap}register(e,t){this.store.set(e,t)}get(e){return this.store.get(e)}has(e){return this.store.has(e)}remove(e){this.store.delete(e)}}class lt{constructor(e,t){g(this,"renderer");g(this,"syncer");g(this,"target");g(this,"registry");var i,c,s;if(this.target=e,this.registry=new at,!document.getElementById("mirage-engine-styles")){const a=document.createElement("style");a.id="mirage-engine-styles",a.textContent=`
186
- [${K.NAME}="${K.VALUES.HIDE}"] {
185
+ `,l=o||g?I+c+((r==null?void 0:r.uvModifier)||""):"",B=o||g?PA.baseColorChunk:"",h=(r==null?void 0:r.colorModifier)||"",m=ZA.fragmentShader.replace("#INJECT_DECLARATIONS",a).replace("#INJECT_UV_MODIFIER",l).replace("#INJECT_BASE_COLOR",B).replace("#INJECT_COLOR_MODIFIER",h),u=fA(t.backgroundColor),M=fA(t.borderColor),w={uSize:{value:new E.Vector2(A,e)},uMeshSize:{value:new E.Vector2(A,e)},uShadowColor:{value:new E.Vector4(0,0,0,0)},uShadowOffset:{value:new E.Vector2(0,0)},uShadowBlur:{value:0},uShadowSpread:{value:0},uBgColor:{value:new E.Vector4(u.color.r,u.color.g,u.color.b,u.alpha)},uBorderColor:{value:new E.Vector4(M.color.r,M.color.g,M.color.b,M.alpha)},uBorderRadius:{value:new E.Vector4(0,0,0,0)},uBorderWidth:{value:uA(t.borderWidth)},uOpacity:{value:(_=t.opacity)!=null?_:1},uTexture:{value:null},uTextureRepeat:{value:new E.Vector2(1,1)},uTextureOffset:{value:new E.Vector2(0,0)},uGradientCount:{value:0},uGradientAngle:{value:0},uGradientColors:{value:Array.from({length:8},()=>new E.Vector4(0,0,0,0))},uGradientStops:{value:new Float32Array(8)}};$A(w.uBorderRadius.value,t.borderRadius,Math.min(A,e)),o&&(w.uTexture.value=s);const D=new E.ShaderMaterial({uniforms:BA(BA({},w),n),vertexShader:ZA.vertexShader,fragmentShader:m,transparent:!0,side:E.FrontSide});return t.backgroundImage&&GA(D,{backgroundImage:t.backgroundImage}),D}function Ne(t,A,e,s,r){const o=uA(A.borderWidth);GA(t,{width:e,height:s,borderRadius:A.borderRadius,borderWidth:o,backgroundColor:A.backgroundColor,borderColor:A.borderColor,opacity:A.opacity,texture:r,backgroundImage:A.backgroundImage,boxShadow:A.boxShadow})}function GA(t,A){var s,r,o;if(A.boxShadow!==void 0){const i=me(A.boxShadow);i?(t.uniforms.uShadowColor.value.set(i.color.r,i.color.g,i.color.b,i.alpha),t.uniforms.uShadowOffset.value.set(i.offsetX,i.offsetY),t.uniforms.uShadowBlur.value=i.blurRadius,t.uniforms.uShadowSpread.value=i.spreadRadius,t.userData.shadowPadding=i.blurRadius+i.spreadRadius+Math.max(Math.abs(i.offsetX),Math.abs(i.offsetY))):(t.uniforms.uShadowColor.value.w=0,t.userData.shadowPadding=0)}if(A.width!==void 0&&A.height!==void 0&&t.uniforms.uSize.value.set(A.width,A.height),t.uniforms.uMeshSize){const i=t.userData.shadowPadding||0,n=A.width!==void 0?A.width:t.uniforms.uSize.value.x,g=A.height!==void 0?A.height:t.uniforms.uSize.value.y;t.uniforms.uMeshSize.value.set(n+i*2,g+i*2)}if(A.borderRadius!==void 0){const i=A.width!==void 0&&A.height!==void 0?Math.min(A.width,A.height):Math.min(t.uniforms.uSize.value.x,t.uniforms.uSize.value.y);$A(t.uniforms.uBorderRadius.value,A.borderRadius,i)}if(A.borderWidth!==void 0&&(t.uniforms.uBorderWidth.value=A.borderWidth),A.backgroundColor!==void 0)if(Array.isArray(A.backgroundColor)){const i=A.backgroundColor[3]!==void 0?A.backgroundColor[3]:t.uniforms.uBgColor.value.w;t.uniforms.uBgColor.value.set(A.backgroundColor[0],A.backgroundColor[1],A.backgroundColor[2],i)}else if(typeof A.backgroundColor=="string"){const i=fA(A.backgroundColor);t.uniforms.uBgColor.value.set(i.color.r,i.color.g,i.color.b,i.alpha)}else{const i=t.uniforms.uBgColor.value.w;t.uniforms.uBgColor.value.set(A.backgroundColor.r,A.backgroundColor.g,A.backgroundColor.b,i)}if(A.borderColor!==void 0)if(Array.isArray(A.borderColor)){const i=t.uniforms.uBorderColor.value.w;t.uniforms.uBorderColor.value.set(A.borderColor[0],A.borderColor[1],A.borderColor[2],i)}else if(typeof A.borderColor=="string"){const i=fA(A.borderColor);t.uniforms.uBorderColor.value.set(i.color.r,i.color.g,i.color.b,i.alpha)}else{const i=t.uniforms.uBorderColor.value.w;t.uniforms.uBorderColor.value.set(A.borderColor.r,A.borderColor.g,A.borderColor.b,i)}A.opacity!==void 0&&(t.uniforms.uOpacity.value=A.opacity),A.bgOpacity!==void 0&&(t.uniforms.uBgColor.value.w=A.bgOpacity),A.borderOpacity!==void 0&&(t.uniforms.uBorderColor.value.w=A.borderOpacity),t.uniforms.uTexture&&A.texture!==void 0&&(t.uniforms.uTexture.value=A.texture);const e=A.texture!==void 0?A.texture:(s=t.uniforms.uTexture)==null?void 0:s.value;if(e&&(e.image instanceof ImageBitmap||e.image instanceof HTMLImageElement||e.image instanceof HTMLCanvasElement)){const i=e.image.naturalWidth||e.image.videoWidth||e.image.width,n=e.image.naturalHeight||e.image.videoHeight||e.image.height,g=(r=A.width)!=null?r:t.uniforms.uSize.value.x,a=(o=A.height)!=null?o:t.uniforms.uSize.value.y;if(i&&n&&g&&a){const I=i/n,c=g/a;if(I>c){const l=c/I;t.uniforms.uTextureRepeat.value.set(l,1),t.uniforms.uTextureOffset.value.set((1-l)/2,0)}else{const l=I/c;t.uniforms.uTextureRepeat.value.set(1,l),t.uniforms.uTextureOffset.value.set(0,(1-l)/2)}}}else t.uniforms.uTextureRepeat&&(t.uniforms.uTextureRepeat.value.set(1,1),t.uniforms.uTextureOffset.value.set(0,0));if(A.backgroundImage!==void 0){const i=we(A.backgroundImage);if(i){t.uniforms.uGradientCount.value=i.stops.length,t.uniforms.uGradientAngle.value=i.angle;for(let n=0;n<8;n++)if(n<i.stops.length){const g=i.stops[n];t.uniforms.uGradientColors.value[n].set(g.color.r,g.color.g,g.color.b,g.alpha),t.uniforms.uGradientStops.value[n]=g.stop}else t.uniforms.uGradientColors.value[n].set(0,0,0,0),t.uniforms.uGradientStops.value[n]=1}else t.uniforms.uGradientCount.value=0}for(const i of Object.keys(A))i!=="width"&&i!=="height"&&i!=="borderRadius"&&i!=="borderWidth"&&i!=="backgroundColor"&&i!=="borderColor"&&i!=="opacity"&&i!=="bgOpacity"&&i!=="borderOpacity"&&i!=="texture"&&i!=="backgroundImage"&&i!=="boxShadow"&&t.uniforms[i]!==void 0&&(t.uniforms[i].value!==void 0&&t.uniforms[i].value!==null&&typeof t.uniforms[i].value.set=="function"?Array.isArray(A[i])?t.uniforms[i].value.set(...A[i]):A[i]!==void 0&&(A[i].copy?t.uniforms[i].value.copy(A[i]):t.uniforms[i].value=A[i]):t.uniforms[i].value=A[i])}function $A(t,A,e=0){var g,a,I,c;if(A==null){t.set(0,0,0,0);return}if(typeof A=="number"){t.set(A,A,A,A);return}if(Array.isArray(A)){t.set(A[0],A[1],A[2],A[3]);return}const s=A.split("/")[0].trim().split(/\s+/),r=uA(s[0],e),o=uA((g=s[1])!=null?g:s[0],e),i=uA((a=s[2])!=null?a:s[0],e),n=uA((c=(I=s[3])!=null?I:s[1])!=null?c:s[0],e);t.set(r,o,i,n)}const q={create(t,A,e,s,r,o=2,i=null,n){return t==="BOX"?be(A,s,r,i,n):t==="TEXT"?new fe(e||"",A,s,r,o):new E.MeshBasicMaterial({visible:!1})},update(t,A,e,s,r,o,i=2,n){A==="BOX"?Ne(t,e,r,o,n):A==="TEXT"&&t.updateText(s||"",e,r,o,i)},forceUpdateUniforms(t,A){GA(t,A)}};class Re{constructor(A,e=!0){C(this,"observer");C(this,"textures",new WeakMap);C(this,"loadStatus",new WeakMap);C(this,"elementUrls",new WeakMap);C(this,"onUpdate");this.onUpdate=A,e&&(this.observer=new IntersectionObserver(s=>{for(const r of s){const o=r.target;r.isIntersecting?this.loadTexture(o):this.disposeTexture(o)}},{rootMargin:"300px"}))}register(A,e){if(A.nodeType!==Node.ELEMENT_NODE)return;this.elementUrls.get(A)!==e&&(this.elementUrls.set(A,e),this.observer?(this.observer.unobserve(A),this.observer.observe(A)):this.loadTexture(A))}unregister(A){A.nodeType===Node.ELEMENT_NODE&&this.observer&&this.observer.unobserve(A),this.disposeTexture(A),this.elementUrls.delete(A),this.loadStatus.delete(A)}loadTexture(A){return EA(this,null,function*(){if(this.loadStatus.get(A)||this.textures.has(A))return;const e=this.elementUrls.get(A);if(e){this.loadStatus.set(A,!0);try{let s;if(e.startsWith("data:image/svg+xml"))s=yield new Promise((o,i)=>{const n=new Image;n.onload=()=>o(n),n.onerror=i,n.src=e});else{const i=yield(yield fetch(e)).blob();s=yield createImageBitmap(i,{imageOrientation:"flipY"})}if(this.elementUrls.get(A)!==e){"close"in s&&s.close();return}const r=new E.Texture(s);s instanceof HTMLImageElement||(r.flipY=!1),r.colorSpace=E.LinearSRGBColorSpace,r.needsUpdate=!0,this.textures.set(A,r),this.onUpdate(A,r)}catch(s){console.warn("[MirageEngine] Failed to load texture:",e,s)}finally{this.elementUrls.has(A)&&this.loadStatus.set(A,!1)}}})}disposeTexture(A){const e=this.textures.get(A);e&&(e.dispose(),this.textures.delete(A),this.onUpdate(A,null)),this.loadStatus.set(A,!1)}get(A){return this.textures.get(A)}disposeAll(){this.observer&&this.observer.disconnect()}}class Me{constructor(A,e,s,r){C(this,"canvas");C(this,"scene");C(this,"camera");C(this,"renderer");C(this,"renderTargets",[]);C(this,"renderOrder",0);C(this,"qualityFactor",2);C(this,"mode","overlay");C(this,"canvasSize","viewport");C(this,"clipArea",1);C(this,"targetLayer","base");C(this,"overscan",200);C(this,"target");C(this,"mountContainer");C(this,"registry");C(this,"targetRect");C(this,"targetPageX",0);C(this,"targetPageY",0);C(this,"size",{width:0,height:0});C(this,"currentScrollX",0);C(this,"currentScrollY",0);C(this,"lastTargetLeft",0);C(this,"lastTargetTop",0);C(this,"travelersByLayer",Array.from({length:U.MAX_LAYERS},()=>new Set));C(this,"textureManager");C(this,"fixedMeshes",new Set);var n,g,a,I,c;this.target=A,this.mountContainer=s,this.registry=r,this.mode=(n=e.mode)!=null?n:"overlay",this.canvasSize=(g=e.canvasSize)!=null?g:"viewport",this.clipArea=(a=e.travelerClipArea)!=null?a:1,this.targetLayer=(I=e.layer)!=null?I:"base",this.textureManager=new Re((l,B)=>{const h=this.registry.get(l);h&&h.material instanceof E.ShaderMaterial&&q.forceUpdateUniforms(h.material,{texture:B})},this.isViewport),this.qualityFactor=this.getQualityFactor(e.quality),this.canvas=document.createElement("canvas"),this.scene=new E.Scene,this.targetRect=this.target.getBoundingClientRect(),this.lastTargetLeft=this.targetRect.left,this.lastTargetTop=this.targetRect.top,this.targetPageX=this.targetRect.left+this.getScrollX(),this.targetPageY=this.targetRect.top+this.getScrollY();const o=this.isViewport?window.innerWidth+this.overscan*2:this.targetRect.width,i=this.isViewport?window.innerHeight+this.overscan*2:this.targetRect.height;this.camera=new E.OrthographicCamera(o/-2,o/2,i/2,i/-2,1,1e3),this.camera.position.z=100,this.camera.layers.set(this.getSceneLayer()),this.renderer=new E.WebGLRenderer({canvas:this.canvas,alpha:!0,antialias:!0}),E.ColorManagement.enabled=!1,this.renderer.outputColorSpace=E.LinearSRGBColorSpace,this.renderer.setPixelRatio(window.devicePixelRatio),this.renderer.setSize(o,i),this.applyTextQuality((c=e.quality)!=null?c:"medium")}get isViewport(){return this.mode==="overlay"&&this.canvasSize==="viewport"}getSceneLayer(){return typeof this.targetLayer=="number"?this.targetLayer:this.targetLayer==="selected"?T.SELECTED:T.BASE}createRenderTarget(){for(let A=0;A<U.MAX_LAYERS;A++){const e=this.isViewport?window.innerWidth+this.overscan*2:this.targetRect.width,s=this.isViewport?window.innerHeight+this.overscan*2:this.targetRect.height;this.renderTargets.push(new E.WebGLRenderTarget(e*this.qualityFactor,s*this.qualityFactor,{minFilter:E.LinearFilter,magFilter:E.LinearFilter,format:E.RGBAFormat,stencilBuffer:!1,depthBuffer:!0}))}}applyTextQuality(A){if(typeof A=="number"){this.qualityFactor=Math.max(.1,A);return}switch(A){case"low":this.qualityFactor=1;break;case"high":this.qualityFactor=4;break;case"medium":this.qualityFactor=2;break;default:this.qualityFactor=2;break}}getQualityFactor(A){if(typeof A=="number")return Math.max(.1,A);switch(A){case"low":return 1;case"high":return 4;default:return 2}}updateScroll(){const A=this.target.getBoundingClientRect();this.currentScrollX+=this.lastTargetLeft-A.left,this.currentScrollY+=this.lastTargetTop-A.top,this.lastTargetLeft=A.left,this.lastTargetTop=A.top}getScrollX(){return this.currentScrollX}getScrollY(){return this.currentScrollY}mount(){this.mountContainer.prepend(this.canvas),this.canvas.style.pointerEvents=this.mode==="overlay"?"none":"auto",this.updateCanvasLayout()}updateCanvasLayout(){const A=this.isViewport?window.innerWidth+this.overscan*2:this.targetRect.width,e=this.isViewport?window.innerHeight+this.overscan*2:this.targetRect.height;this.canvas.style.width=`${A}px`,this.canvas.style.height=`${e}px`,this.mode==="duplicate"?(this.canvas.style.position="",this.canvas.style.top="",this.canvas.style.left="",this.canvas.style.display="block"):(this.canvas.style.position=this.isViewport?"fixed":"absolute",this.canvas.style.top=this.isViewport?`-${this.overscan}px`:`${this.target.offsetTop}px`,this.canvas.style.left=this.isViewport?`-${this.overscan}px`:`${this.target.offsetLeft}px`,this.canvas.style.display="block")}updateUniforms(A,e){const s=this.registry.get(A);s&&(s.traverse(r=>{r.isMesh&&r.material&&q.forceUpdateUniforms(r.material,e)}),s.userData.nativeMesh&&s.userData.nativeMesh.traverse(r=>{r.isMesh&&r.material&&q.forceUpdateUniforms(r.material,e)}))}dispose(){this.renderer.dispose(),this.canvas.remove(),this.textureManager.disposeAll()}setSize(A,e){this.renderer.setSize(A,e);for(const s of this.renderTargets)s.setSize(A*this.qualityFactor,e*this.qualityFactor);this.camera.left=A/-2,this.camera.right=A/2,this.camera.top=e/2,this.camera.bottom=e/-2,this.camera.updateProjectionMatrix()}syncScene(A,e){const s=this.target.getBoundingClientRect(),r=this.isViewport?window.innerWidth+this.overscan*2:s.width,o=this.isViewport?window.innerHeight+this.overscan*2:s.height,i=this.isViewport?this.canvas.clientWidth:this.targetRect.width,n=this.isViewport?this.canvas.clientHeight:this.targetRect.height,g=Math.abs(r-i)>.1||Math.abs(o-n)>.1,a=this.mode==="overlay"&&(Math.abs(s.top-this.targetRect.top)>.1||Math.abs(s.left-this.targetRect.left)>.1);g?(this.targetRect=s,this.targetPageX=s.left+this.getScrollX(),this.targetPageY=s.top+this.getScrollY(),this.setSize(r,o),this.updateCanvasLayout()):a?(this.targetRect=s,this.targetPageX=s.left+this.getScrollX(),this.targetPageY=s.top+this.getScrollY(),this.updateCanvasLayout()):(this.targetRect=s,this.targetPageX=s.left+this.getScrollX(),this.targetPageY=s.top+this.getScrollY()),this.renderOrder=0,this.reconcileNode(A),e.size>0&&e.forEach(I=>{const c=this.registry.get(I);if(c){this.scene.remove(c);for(const l of this.travelersByLayer)l.delete(c);this.fixedMeshes.delete(c),c.geometry.dispose(),c.userData.nativeMesh&&(this.scene.remove(c.userData.nativeMesh),Array.isArray(c.userData.nativeMesh.material)?c.userData.nativeMesh.material.forEach(l=>l.dispose()):c.userData.nativeMesh.material.dispose(),c.userData.nativeMesh.geometry.dispose()),c.traverse(l=>{l instanceof E.Mesh&&(l.geometry&&l.geometry.dispose(),l.material&&(Array.isArray(l.material)?l.material.forEach(B=>B.dispose()):l.material.dispose()))}),this.registry.remove(I),this.textureManager.unregister(I)}})}reconcileNode(A){var r,o;let e=this.registry.get(A.element);const s=JSON.stringify(A.shaderHooks||null);if(e&&e.userData.shaderHash!==s&&(this.scene.remove(e),e.geometry.dispose(),e.material instanceof E.Material&&e.material.dispose(),this.registry.remove(A.element),e=void 0),!e){const i=new E.PlaneGeometry(1,1),n=A.isTraveler?(r=this.renderTargets[A.captureLayer-2])==null?void 0:r.texture:this.textureManager.get(A.element),g=q.create("BOX",A.styles,"",A.rect.width,A.rect.height,this.qualityFactor,n,A.shaderHooks);e=new E.Mesh(i,g),A.type==="TEXT"&&(e.name="BG_MESH"),this.scene.add(e),this.registry.register(A.element,e),e.userData.baseMaterial=g,e.userData.domElement=A.element,e.userData.shaderHash=s}if(e.userData.clipElements=A.clipElements,e.userData.wasmIndex=A.wasmIndex,(o=A.nativeStyles)!=null&&o.transform?e.userData.nativeTransform=A.nativeStyles.transform:e.userData.nativeTransform=void 0,this.updateMeshProperties(e,A),this.updateMeshLayers(e,A),A.isTraveler)for(let i=0;i<U.MAX_LAYERS;i++)i===A.captureLayer-2?this.travelersByLayer[i].add(e):this.travelersByLayer[i].delete(e);else for(const i of this.travelersByLayer)i.delete(e);if(A.isFixed?this.fixedMeshes.add(e):this.fixedMeshes.delete(e),A.styles.imageSrc?this.textureManager.register(A.element,A.styles.imageSrc):this.textureManager.unregister(A.element),A.type==="BOX")for(const i of A.children)this.reconcileNode(i);else A.type==="TEXT"&&(this.reconcileTextChild(e,A,!1),e.userData.nativeMesh&&A.nativeStyles&&this.reconcileTextChild(e.userData.nativeMesh,A,!0))}reconcileTextChild(A,e,s){var a;const r=e.textLines||[{text:e.textContent||"",rect:e.rect}],o=s?e.nativeStyles:e.textStyles,i=JSON.stringify(o)+e.textContent+r.map(I=>I.text).join("|"),n=(a=A.userData)==null?void 0:a.textChildStyleHash;if(e.dirtyMask&LA||i!==n){A.children.filter(h=>h.name.startsWith("TEXT_CHILD")).forEach(h=>{var u;const m=h;(u=m.material.map)==null||u.dispose(),m.geometry.dispose(),A.remove(m)});const c=e.rect,l=c.x+c.width/2,B=c.y+c.height/2;r.forEach((h,m)=>{const u=q.create("TEXT",o,h.text,h.rect.width,h.rect.height,this.qualityFactor),M=new E.PlaneGeometry(1,1),w=new E.Mesh(M,u);w.name=`TEXT_CHILD_${m}`;const D=e.rect.width===0?1:h.rect.width/e.rect.width,_=e.rect.height===0?1:h.rect.height/e.rect.height;w.scale.set(D,_,1);const v=h.rect.x+h.rect.width/2,S=h.rect.y+h.rect.height/2,f=v-l,X=-(S-B);w.position.set(e.rect.width===0?0:f/e.rect.width,e.rect.height===0?0:X/e.rect.height,.005),A.add(w)}),A.userData.textChildStyleHash=i}A.children.forEach(I=>{if(!I.name.startsWith("TEXT_CHILD"))return;const c=I;if(s&&e.nativeLayer!==void 0)c.layers.set(T.HIDDEN),e.visibility&j&&c.layers.enable(T.getCaptureLayer(e.nativeLayer));else{const l=e.visibility&j?T.BASE:T.HIDDEN;if(c.layers.set(l),e.visibility&IA&&c.layers.enable(T.SELECTED),e.visibility&j)if(!s&&e.nativeLayer!==void 0&&e.nativeStyles!==void 0)for(let B=e.captureLayer;B<=U.MAX_LAYERS+1;B++)B!==e.nativeLayer&&c.layers.enable(T.getCaptureLayer(B));else for(let B=e.captureLayer;B<=U.MAX_LAYERS+1;B++)c.layers.enable(T.getCaptureLayer(B))}})}updateMeshProperties(A,e){var w,D,_,v,S;const{rect:s,styles:r}=e,o=this.renderer.getPixelRatio(),i=this.renderer.domElement.width/o,n=this.renderer.domElement.height/o;A.material=A.userData.baseMaterial;let g=((w=A.material.userData)==null?void 0:w.shadowPadding)||0;A.scale.set(s.width+g*2,s.height+g*2,1),A.userData.domRect={x:s.x,y:s.y,width:s.width,height:s.height},A.userData.needsNativeReset=!0;const a=.001;this.renderOrder++;let I,c;if(this.isViewport)I=s.x-window.innerWidth/2+s.width/2,c=-s.y+window.innerHeight/2-s.height/2;else{const f=s.x-this.targetPageX,X=s.y-this.targetPageY;I=f-i/2+s.width/2,c=-X+n/2-s.height/2}A.position.set(I,c,r.zIndex+this.renderOrder*a);const l=s.x,B=s.y;A.userData.basePosition={x:I,y:c},A.userData.originalBasePosition={x:I,y:c},A.userData.baseSize={width:s.width,height:s.height},A.userData.baseDOM={x:l,y:B},A.userData.isFixed=e.isFixed,A.userData.initialScroll={x:window.scrollX,y:window.scrollY};const h=e.element.nodeType===Node.TEXT_NODE?e.element.parentElement:e.element,m=window.getComputedStyle(h);let u=0,M=0;if(m.transform&&m.transform!=="none"){const f=new DOMMatrix(m.transform);u=f.m41,M=f.m42}if(A.userData.baseTransform={x:u,y:M},delete A.userData.originRatioX,delete A.userData.originRatioY,q.update(A.userData.baseMaterial,"BOX",r,"",s.width,s.height,this.qualityFactor,e.isTraveler?(D=this.renderTargets[e.captureLayer-2])==null?void 0:D.texture:this.textureManager.get(e.element)),e.nativeStyles&&e.nativeRect){if(!A.userData.nativeMesh){const W=q.create("BOX",e.nativeStyles,"",e.nativeRect.width,e.nativeRect.height,this.qualityFactor,e.isTraveler?(_=this.renderTargets[e.captureLayer-2])==null?void 0:_.texture:e.nativeStyles.imageSrc&&e.nativeStyles.imageSrc!==e.styles.imageSrc?new E.TextureLoader().load(e.nativeStyles.imageSrc):this.textureManager.get(e.element),e.shaderHooks),H=new E.Mesh(A.geometry,W);e.type==="TEXT"&&(H.name="BG_MESH"),this.scene.add(H),A.userData.nativeMesh=H}const f=A.userData.nativeMesh;let X,wA;if(this.isViewport)X=e.nativeRect.x-window.innerWidth/2+e.nativeRect.width/2,wA=-e.nativeRect.y+window.innerHeight/2-e.nativeRect.height/2;else{const W=e.nativeRect.x-this.targetPageX,H=e.nativeRect.y-this.targetPageY;X=W-i/2+e.nativeRect.width/2,wA=-H+n/2-e.nativeRect.height/2}let mA=e.nativeRect.width,G=e.nativeRect.height,F=X,aA=wA;if(e.nativeStyles.transform){const W=e.nativeStyles.transform,H=W.match(/scale\(([\d.]+%?)\)/);if(H){let p=parseFloat(H[1]);H[1].includes("%")&&(p/=100),mA*=p,G*=p}const nA=W.match(/scaleX\(([\d.]+%?)\)/);if(nA){let p=parseFloat(nA[1]);nA[1].includes("%")&&(p/=100),mA*=p}const yA=W.match(/scaleY\(([\d.]+%?)\)/);if(yA){let p=parseFloat(yA[1]);yA[1].includes("%")&&(p/=100),G*=p}const lA=W.match(/translate\(([^,]+),\s*([^)]+)\)/);if(lA){const p=lA[1].trim(),V=lA[2].trim();let bA=parseFloat(p);p.includes("%")&&(bA=bA/100*e.nativeRect.width);let NA=parseFloat(V);V.includes("%")&&(NA=NA/100*e.nativeRect.height),F+=bA,aA-=NA}const gA=W.match(/translateX\(([^)]+)\)/);if(gA){const p=gA[1].trim();let V=parseFloat(p);p.includes("%")&&(V=V/100*e.nativeRect.width),F+=V}const CA=W.match(/translateY\(([^)]+)\)/);if(CA){const p=CA[1].trim();let V=parseFloat(p);p.includes("%")&&(V=V/100*e.nativeRect.height),aA-=V}}let vA=((v=f.material.userData)==null?void 0:v.shadowPadding)||0;f.scale.set(mA+vA*2,G+vA*2,1),f.position.set(F,aA,e.nativeStyles.zIndex+this.renderOrder*a),q.update(f.material,"BOX",e.nativeStyles,"",e.nativeRect.width,e.nativeRect.height,this.qualityFactor,e.isTraveler?(S=this.renderTargets[e.captureLayer-2])==null?void 0:S.texture:f.material.uniforms.uTexture.value||this.textureManager.get(e.element))}else A.userData.nativeMesh&&(this.scene.remove(A.userData.nativeMesh),A.userData.nativeMesh.material instanceof E.Material&&A.userData.nativeMesh.material.dispose(),delete A.userData.nativeMesh)}updateMeshLayers(A,e){const s=e.visibility&j?T.BASE:T.HIDDEN;if(A.layers.set(s),e.visibility&IA&&A.layers.enable(T.SELECTED),A.userData.nativeMesh&&e.nativeLayer!==void 0){const r=A.userData.nativeMesh;if(r.layers.set(T.HIDDEN),e.visibility&j){r.layers.enable(T.getCaptureLayer(e.nativeLayer));for(let o=e.captureLayer;o<=U.MAX_LAYERS+1;o++)o!==e.nativeLayer&&A.layers.enable(T.getCaptureLayer(o))}}else if(e.visibility&j)for(let r=e.captureLayer;r<=U.MAX_LAYERS+1;r++)A.layers.enable(T.getCaptureLayer(r))}captureRenderTarget(A,e,s){if(A.size===0||!s)return;const r=new E.Color,o=this.renderer.getClearAlpha();this.renderer.getClearColor(r),this.renderer.setClearColor(0,0),this.renderer.setRenderTarget(s),this.renderer.clear(),this.renderer.autoClear=!1,this.renderer.setScissorTest(!0),this.camera.layers.set(e);const i=new E.Vector3,n=this.isViewport?window.innerWidth+this.overscan*2:this.targetRect.width,g=this.isViewport?window.innerHeight+this.overscan*2:this.targetRect.height,a=this.renderer.getPixelRatio();for(const I of A){i.setFromMatrixPosition(I.matrixWorld),i.project(this.camera);const c=(i.x+1)/2*n,l=(i.y+1)/2*g;let B=0,h=1;typeof this.clipArea=="number"?h=this.clipArea:this.clipArea.endsWith("%")?h=parseFloat(this.clipArea)/100:this.clipArea.endsWith("px")&&(B=parseFloat(this.clipArea));const m=I.scale.x*h+.5,u=I.scale.y*h+.5,M=c-m/2,w=l-u/2,D=(M*this.qualityFactor-B)/a,_=(w*this.qualityFactor-B)/a,v=(m*this.qualityFactor+B*2)/a,S=(u*this.qualityFactor+B*2)/a;this.renderer.setScissor(D,_,v,S),this.renderer.render(this.scene,this.camera)}this.renderer.setScissorTest(!1),this.renderer.autoClear=!0,this.renderer.setRenderTarget(null),this.camera.layers.set(this.getSceneLayer()),this.renderer.setClearColor(r,o)}render(){for(let g=0;g<U.MAX_LAYERS;g++){const a=g+1;this.captureRenderTarget(this.travelersByLayer[g],T.getCaptureLayer(a),this.renderTargets[g])}const A=this.renderer.getContext(),e=this.renderer.getPixelRatio(),s=this.renderer.domElement.height/e,r=this.renderer.domElement,o=r.getBoundingClientRect().top,i=r.getBoundingClientRect().left,n=(g,a)=>{if(a&&a.width>0&&a.height>0){const I=Math.floor((a.x-i)*e),c=Math.floor((s-(a.y-o+a.height))*e),l=Math.ceil(a.width*e),B=Math.ceil(a.height*e);g.onBeforeRender=()=>{A.enable(A.SCISSOR_TEST),A.scissor(I,c,l,B)},g.onAfterRender=()=>{A.disable(A.SCISSOR_TEST)},g.__hasScissorHook=!0}else g.__hasScissorHook&&(g.onBeforeRender=()=>{},g.onAfterRender=()=>{},g.__hasScissorHook=!1)};this.scene.children.forEach(g=>{var c;const a=g,I=(c=a.userData)==null?void 0:c.scissorRect;n(a,I),a.children.forEach(l=>{l.name.startsWith("TEXT_CHILD")&&n(l,I)})}),this.renderer.render(this.scene,this.camera)}saveInitialLocals(A){this.scene.children.forEach(e=>{const s=e;if(s.userData.wasmIndex!==void 0){const r=s.userData.wasmIndex*O;s.userData.initialLocalX=A[r+sA],s.userData.initialLocalY=A[r+tA]}})}syncMeshesByWasm(A){const e=this.renderer.getPixelRatio(),s=this.renderer.domElement.width/e,r=this.renderer.domElement.height/e;this.scene.children.forEach(o=>{const i=o;if(!i.userData||i.userData.wasmIndex===void 0)return;const g=i.userData.wasmIndex*O,a=A[g+$],I=A[g+cA],c=i.userData.domRect;if(!c)return;const l=this.fixedMeshes.has(i),B=l?0:this.getScrollX(),h=l?0:this.getScrollY();let m,u;if(this.isViewport){const w=a-B,D=I-h;m=w-window.innerWidth/2+c.width/2,u=-D+window.innerHeight/2-c.height/2}else{const w=a-this.targetPageX,D=I-this.targetPageY;m=w-s/2+c.width/2,u=-D+r/2-c.height/2}const M=i.position.z;if(i.position.set(m,u,M),i.userData.nativeMesh){const w=i.userData.nativeMesh;if(i.userData.needsNativeReset)i.userData.needsNativeReset=!1;else{const D=m-i.userData.basePosition.x,_=u-i.userData.basePosition.y;w.position.setX(w.position.x+D),w.position.setY(w.position.y+_)}}i.userData.basePosition.x=m,i.userData.basePosition.y=u})}}function Le(t){const A=t.textContent||"",e=[];let s="",r=null,o=-1;const i=(a,I)=>{for(let c=0;c<a.length;c++){const l=a[c],B=document.createRange();B.setStart(t,I+c),B.setEnd(t,I+c+1);const h=B.getBoundingClientRect();if(h.width===0&&h.height===0){s+=l;continue}o===-1||Math.abs(h.top-o)>h.height/2?(s&&r&&e.push({text:s,rect:{left:r.left,top:r.top,width:r.right-r.left,height:r.bottom-r.top}}),s=l,r={left:h.left,top:h.top,right:h.right,bottom:h.bottom},o=h.top):(s+=l,r&&(r.left=Math.min(r.left,h.left),r.top=Math.min(r.top,h.top),r.right=Math.max(r.right,h.right),r.bottom=Math.max(r.bottom,h.bottom)))}},n=A.match(/[^\s\-]+\-?|\-|\s+/g)||[];let g=0;for(const a of n){const I=document.createRange();I.setStart(t,g),I.setEnd(t,g+a.length);const c=I.getClientRects();if(c.length>1)i(a,g);else{const l=c.length===1?c[0]:I.getBoundingClientRect();if(l.width===0&&l.height===0){s+=a,g+=a.length;continue}o===-1||Math.abs(l.top-o)>l.height/2?(s&&r&&e.push({text:s,rect:{left:r.left,top:r.top,width:r.right-r.left,height:r.bottom-r.top}}),s=a,r={left:l.left,top:l.top,right:l.right,bottom:l.bottom},o=l.top):(s+=a,r&&(r.left=Math.min(r.left,l.left),r.top=Math.min(r.top,l.top),r.right=Math.max(r.right,l.right),r.bottom=Math.max(r.bottom,l.bottom)))}g+=a.length}return s&&r&&e.push({text:s,rect:{left:r.left,top:r.top,width:r.right-r.left,height:r.bottom-r.top}}),e.filter(a=>a.text.trim().length>0&&a.rect.width>0&&a.rect.height>0)}function Ae(t){const A=parseFloat(t.fontSize);let e=parseFloat(t.lineHeight);isNaN(e)&&(e=A*1.2);let s=parseFloat(t.letterSpacing);return isNaN(s)&&(s=0),{font:`${t.fontStyle} ${t.fontWeight} ${t.fontSize} ${t.fontFamily}`,fontSize:t.fontSize,color:t.color,textAlign:t.textAlign||"start",textBaseline:"alphabetic",direction:t.direction||"inherit",lineHeight:e,letterSpacing:s}}function ee(t,A=oA|QA|OA|LA|DA,e,s=1,r=0,o=2,i,n,g,a,I=-1,c=0,l=0,B=!1){var se,oe,ae,ne,ge,ce,Ie,le,Ce;const h=(se=a==null?void 0:a.scrollX)!=null?se:window.scrollX,m=(oe=a==null?void 0:a.scrollY)!=null?oe:window.scrollY;if(t.nodeType===Node.TEXT_NODE){const d=t;if(!d.textContent||!d.textContent.trim())return null;const x=d.textContent.replace(/\s+/g," ");if(x.length===0)return null;const k=Le(d);if(k.length===0)return null;const Z=d.parentElement,L=Z?window.getComputedStyle(Z):null;if(!L)return null;const Y=B||L.position==="fixed",J=Math.min(...k.map(y=>y.rect.left)),eA=Math.min(...k.map(y=>y.rect.top)),N=Math.max(...k.map(y=>y.rect.left+y.rect.width)),P=Math.max(...k.map(y=>y.rect.top+y.rect.height)),iA=J+(Y?0:h),RA=eA+(Y?0:m);let hA=-1;if(a&&a.sharedArray){hA=a.currentIndex++;const y=hA*O;a.sharedArray[y+dA]=I,a.sharedArray[y+sA]=iA-c,a.sharedArray[y+tA]=RA-l}return{id:Math.random().toString(36).substring(2,9),type:"TEXT",element:d,rect:{x:J+(Y?0:h),y:eA+(Y?0:m),width:N-J,height:P-eA},styles:{backgroundColor:"transparent",backgroundImage:"",opacity:Z&&Z.dataset[rA.KEY]===rA.VALUES.HIDE?1:parseFloat(L.opacity),zIndex:(isNaN(parseInt(L.zIndex))?0:parseInt(L.zIndex))+r,borderRadius:"0px",borderColor:"transparent",borderWidth:"0px",isTraveler:!1},textContent:x,textLines:k.map(y=>({text:y.text.trim(),rect:{x:y.rect.left+(Y?0:h),y:y.rect.top+(Y?0:m),width:y.rect.width,height:y.rect.height}})),textStyles:Ae(L),dirtyMask:A,visibility:e,isTraveler:!1,captureLayer:s,isFixed:Y,nativeLayer:i,nativeStyles:n?BA(BA({backgroundColor:"transparent",backgroundImage:"",opacity:Z&&Z.dataset[rA.KEY]===rA.VALUES.HIDE?1:parseFloat(L.opacity),zIndex:(isNaN(parseInt(L.zIndex))?0:parseInt(L.zIndex))+r,borderRadius:"0px",borderColor:"transparent",borderWidth:"0px",isTraveler:!1},Ae(L)),n):void 0,nativeRect:n?{x:J+(Y?0:h),y:eA+(Y?0:m),width:N-J,height:P-eA}:void 0,clipElements:g,wasmIndex:hA!==-1?hA:void 0,children:[]}}if(t.nodeType!==Node.ELEMENT_NODE)return null;const u=t,M=u.dataset[K.KEY];let w=e,D=e;if(M){const d=new Set(M.split(/\s+/));for(const x of d)if(!YA.includes(x))throw new Error(`[MirageEngine] Invalid filter token: '${x}'. Expected one of: 'include-tree', 'exclude-tree', 'include-self', 'exclude-self', 'end'.`);if(d.has(K.VALUES.END))return null;if(d.has(K.VALUES.INCLUDE_TREE)&&d.has(K.VALUES.EXCLUDE_TREE))throw new Error("[MirageEngine] Conflicting filters: 'include-tree' and 'exclude-tree' cannot be used together on the same element.");if(d.has(K.VALUES.INCLUDE_SELF)&&d.has(K.VALUES.EXCLUDE_SELF))throw new Error("[MirageEngine] Conflicting filters: 'include-self' and 'exclude-self' cannot be used together on the same element.");d.has(K.VALUES.INCLUDE_TREE)?w=w|j:d.has(K.VALUES.EXCLUDE_TREE)&&(w=w&~j),D=w,d.has(K.VALUES.INCLUDE_SELF)?D=D|j:d.has(K.VALUES.EXCLUDE_SELF)&&(D=D&~j)}const _=u.dataset[AA.KEY];if(_){const d=new Set(_.split(/\s+/));for(const x of d)if(!YA.includes(x))throw new Error(`[MirageEngine] Invalid select token: '${x}'. Expected one of: 'include-tree', 'exclude-tree', 'include-self', 'exclude-self', 'end'.`);if(d.has(AA.VALUES.END))return null;if(d.has(AA.VALUES.INCLUDE_TREE)&&d.has(AA.VALUES.EXCLUDE_TREE))throw new Error("[MirageEngine] Conflicting selects: 'include-tree' and 'exclude-tree' cannot be used together on the same element.");if(d.has(AA.VALUES.INCLUDE_SELF)&&d.has(AA.VALUES.EXCLUDE_SELF))throw new Error("[MirageEngine] Conflicting selects: 'include-self' and 'exclude-self' cannot be used together on the same element.");d.has(AA.VALUES.INCLUDE_TREE)?w=w|IA:d.has(AA.VALUES.EXCLUDE_TREE)&&(w=w&~IA),D=w,d.has(AA.VALUES.INCLUDE_SELF)?D=D|IA:d.has(AA.VALUES.EXCLUDE_SELF)&&(D=D&~IA)}const v=u.dataset[U.KEY];let S=!1,f=n?BA({},n):{},X=i;if(v){let d=1;const x=v.indexOf("{"),k=v.lastIndexOf("}");let Z=v;if(x!==-1&&k!==-1&&k>x){Z=v.substring(0,x).trim();const N=v.substring(x,k+1);try{f=new Function("return "+N)()}catch(P){console.warn(`[MirageEngine] Failed to parse travel styles JSON: ${N}`)}}const L=Z.split(/\s+/);let Y=!1;const J=L.indexOf(U.VALUES.TRAVELER);if(J!==-1){S=!0,Y=!0;const N=L[J+1];if(N&&!isNaN(parseInt(N,10)))d=parseInt(N,10);else{const P=L.find(iA=>!isNaN(parseInt(iA,10)));P&&(d=parseInt(P,10))}}const eA=L.indexOf(U.VALUES.NATIVE);if(eA!==-1){const N=L[eA+1];if(N&&!isNaN(parseInt(N,10)))X=parseInt(N,10);else if(!S){const P=L.find(iA=>!isNaN(parseInt(iA,10)));P&&(X=parseInt(P,10))}}if(Y){const N=d+1;if(N<s)throw new Error(`[MirageEngine] Traveler layer (${d}) cannot be smaller than inherited capture layer (${s-1}).`);s=Math.min(N,U.MAX_LAYERS+1)}}const wA=u.dataset[WA.KEY];let mA;wA&&(mA=JSON.parse(wA));const G=u.getBoundingClientRect(),F=window.getComputedStyle(u);if(G.width===0||G.height===0||F.display==="none")return null;const aA=B||F.position==="fixed",vA=G.left+(aA?0:h),W=G.top+(aA?0:m);let H=-1;if(a&&a.sharedArray){H=a.currentIndex++;const d=H*O;a.sharedArray[d+dA]=I,a.sharedArray[d+sA]=vA-c,a.sharedArray[d+tA]=W-l}let nA=u.getAttribute("data-mid");nA||(nA=Math.random().toString(36).substring(2,11),u.setAttribute("data-mid",nA));const yA=parseInt(F.zIndex),lA=(isNaN(yA)?0:yA)+r;let gA,CA;if(u.tagName==="IMG")gA=u.src;else if(u.tagName.toLowerCase()==="svg"){const d=f==null?void 0:f.color,x=f==null?void 0:f.fill,k=f==null?void 0:f.stroke,Z=f==null?void 0:f.opacity,L=Y=>{const J=u.cloneNode(!0),eA=(RA,hA)=>{const y=window.getComputedStyle(RA),MA=hA,Oe=y.fill===y.color,Ke=y.stroke===y.color,XA=(Y?x||(Oe?d:void 0):void 0)||y.fill;XA&&XA!=="none"&&(MA.style.fill=XA);const HA=(Y?k||(Ke?d:void 0):void 0)||y.stroke;HA&&HA!=="none"&&(MA.style.stroke=HA),y.strokeWidth&&y.strokeWidth!=="0px"&&(MA.style.strokeWidth=y.strokeWidth);const he=(Y?d:void 0)||y.color;he&&(MA.style.color=he);const JA=(Y?Z:void 0)||y.opacity;JA&&JA!=="1"&&(MA.style.opacity=JA);for(let FA=0;FA<RA.children.length;FA++)eA(RA.children[FA],hA.children[FA])};eA(u,J);const N=u.getBoundingClientRect(),P=window.devicePixelRatio*o;J.hasAttribute("viewBox")||J.setAttribute("viewBox",`0 0 ${N.width} ${N.height}`),J.setAttribute("width",(N.width*P).toString()),J.setAttribute("height",(N.height*P).toString());let iA=new XMLSerializer().serializeToString(J);return iA.includes("xmlns=")||(iA=iA.replace("<svg",'<svg xmlns="http://www.w3.org/2000/svg"')),`data:image/svg+xml;utf8,${encodeURIComponent(iA)}`};gA=L(!1),X!==void 0&&(d||x||k||Z)&&(CA=L(!0))}else if(F.backgroundImage&&F.backgroundImage!=="none"){const d=F.backgroundImage.match(/url\(['"]?(.*?)['"]?\)/);d&&(gA=d[1])}const p={backgroundColor:F.backgroundColor,backgroundImage:F.backgroundImage,opacity:u.dataset[rA.KEY]===rA.VALUES.HIDE?1:parseFloat(F.opacity),zIndex:lA,borderRadius:F.borderRadius,borderColor:F.borderColor,borderWidth:F.borderWidth,boxShadow:F.boxShadow,imageSrc:gA,isTraveler:S},V=p;let bA,NA;const re=[],We=F.overflow==="hidden"?[...g||[],u]:g;return u.tagName.toLowerCase()!=="svg"&&Array.from(u.childNodes).forEach(d=>{const x=d.nodeType===Node.TEXT_NODE?D:w,k=ee(d,A,x,s,lA,o,d.nodeType===Node.TEXT_NODE?X:void 0,d.nodeType===Node.TEXT_NODE&&Object.keys(f).length>0?f:void 0,We,a,H,vA,W,aA);k&&re.push(k)}),{id:nA,type:"BOX",element:u,rect:{x:G.left+h,y:G.top+m,width:G.width,height:G.height},styles:V,textContent:bA,textStyles:NA,dirtyMask:A,visibility:D,isTraveler:S,captureLayer:s,nativeLayer:X,nativeStyles:X!==void 0?Ee(BA({},p),{backgroundColor:(ae=f.backgroundColor)!=null?ae:p.backgroundColor,backgroundImage:(ne=f.backgroundImage)!=null?ne:p.backgroundImage,opacity:(ge=f.opacity)!=null?ge:p.opacity,zIndex:f.zIndex!==void 0?f.zIndex+lA:p.zIndex,borderRadius:(ce=f.borderRadius)!=null?ce:p.borderRadius,borderColor:(Ie=f.borderColor)!=null?Ie:p.borderColor,borderWidth:(le=f.borderWidth)!=null?le:p.borderWidth,boxShadow:(Ce=f.boxShadow)!=null?Ce:p.boxShadow,isTraveler:p.isTraveler,transform:f.transform,imageSrc:CA!=null?CA:gA}):void 0,nativeRect:X!==void 0?{x:f.x!==void 0?parseFloat(f.x):G.left+h,y:f.y!==void 0?parseFloat(f.y):G.top+m,width:f.width!==void 0?parseFloat(f.width):G.width,height:f.height!==void 0?parseFloat(f.height):G.height}:void 0,isFixed:aA,clipElements:g,wasmIndex:H!==-1?H:void 0,children:re,shaderHooks:mA}}function Te(t,A,e){if(A.size===0)return;const s=new Set;A.forEach((r,o)=>{var n,g,a,I;const i=t.get(o);if(!(!i||!i.userData.basePosition)){if(q.forceUpdateUniforms(i.material,{backgroundColor:r.backgroundColor,backgroundImage:r.backgroundImage,boxShadow:r.boxShadow,opacity:r.opacity,borderRadius:(g=r.borderRadius)!=null?g:(n=i.userData.baseStyles)==null?void 0:n.borderRadius}),i.userData.nativeMesh&&(q.forceUpdateUniforms(i.userData.nativeMesh.material,{backgroundColor:r.backgroundColor,backgroundImage:r.backgroundImage,boxShadow:r.boxShadow,opacity:r.opacity,borderRadius:(I=r.borderRadius)!=null?I:(a=i.userData.baseStyles)==null?void 0:a.borderRadius}),r.scaleX!==void 0||r.scaleY!==void 0)){const c=i.userData.nativeMesh,l=c.scale.x,B=c.scale.y,h=c.scale.z;c.scale.set(r.scaleX!==void 0?r.scaleX*l:l,r.scaleY!==void 0?r.scaleY*B:B,r.scaleZ!==void 0?r.scaleZ*h:h)}if(r.layoutChanged||r.width!==void 0||r.height!==void 0){s.add(o);const c=o.querySelectorAll("*");for(let l=0;l<c.length;l++){const B=c[l];t.has(B)&&s.add(B)}}else if((r.x!==void 0||r.y!==void 0)&&e&&i.userData.wasmIndex!==void 0){const c=i.userData.wasmIndex*O;r.x!==void 0&&i.userData.initialLocalX!==void 0&&(e[c+sA]=i.userData.initialLocalX+r.x),r.y!==void 0&&i.userData.initialLocalY!==void 0&&(e[c+tA]=i.userData.initialLocalY+r.y)}}}),s.forEach(r=>{var g,a;const o=t.get(r);if(!o)return;const i=r.getBoundingClientRect();o.userData.domRect&&(o.userData.domRect.width=i.width,o.userData.domRect.height=i.height);let n=((g=o.material.userData)==null?void 0:g.shadowPadding)||0;if(o.scale.set(i.width+n*2,i.height+n*2,1),q.forceUpdateUniforms(o.material,{width:i.width,height:i.height}),e&&o.userData.wasmIndex!==void 0){const I=o.userData.wasmIndex*O,c=i.left+(o.userData.isFixed?0:window.scrollX),l=i.top+(o.userData.isFixed?0:window.scrollY),B=e[I+dA];let h=0,m=0;if(B!==-1){const u=B*O;h=e[u+$],m=e[u+cA]}e[I+sA]=c-h,e[I+tA]=l-m}if(o.userData.nativeMesh){const I=o.userData.nativeMesh;let c=((a=I.material.userData)==null?void 0:a.shadowPadding)||0;I.scale.set(i.width+c*2,i.height+c*2,1),q.forceUpdateUniforms(I.material,{width:i.width,height:i.height}),o.userData.nativeRect&&(o.userData.nativeRect.width=i.width,o.userData.nativeRect.height=i.height)}})}class kA{__destroy_into_raw(){const A=this.__wbg_ptr;return this.__wbg_ptr=0,te.unregister(this),A}free(){const A=this.__destroy_into_raw();z.__wbg_memorymanager_free(A,0)}get_length(){return z.memorymanager_get_length(this.__wbg_ptr)>>>0}get_pointer(){return z.memorymanager_get_pointer(this.__wbg_ptr)>>>0}constructor(A){const e=z.memorymanager_new(A);return this.__wbg_ptr=e,te.register(this,this.__wbg_ptr,this),this}update_physics(A){z.memorymanager_update_physics(this.__wbg_ptr,A)}}Symbol.dispose&&(kA.prototype[Symbol.dispose]=kA.prototype.free);function Fe(){return{__proto__:null,"./wasm_compute_bg.js":{__proto__:null,__wbg___wbindgen_throw_5d9e815e6fdf150f:function(A,e){throw new Error(xe(A,e))},__wbindgen_init_externref_table:function(){const A=z.__wbindgen_externrefs,e=A.grow(4);A.set(0,void 0),A.set(e+0,void 0),A.set(e+1,null),A.set(e+2,!0),A.set(e+3,!1)}}}}const te=typeof FinalizationRegistry=="undefined"?{register:()=>{},unregister:()=>{}}:new FinalizationRegistry(t=>z.__wbg_memorymanager_free(t,1));function xe(t,A){return ke(t>>>0,A)}let SA=null;function Ye(){return(SA===null||SA.byteLength===0)&&(SA=new Uint8Array(z.memory.buffer)),SA}let TA=new TextDecoder("utf-8",{ignoreBOM:!0,fatal:!0});TA.decode();const Ge=2146435072;let UA=0;function ke(t,A){return UA+=A,UA>=Ge&&(TA=new TextDecoder("utf-8",{ignoreBOM:!0,fatal:!0}),TA.decode(),UA=A),TA.decode(Ye().subarray(t,t+A))}let z;function Ue(t,A){return z=t.exports,SA=null,z.__wbindgen_start(),z}function Xe(t,A){return EA(this,null,function*(){if(typeof Response=="function"&&t instanceof Response){if(!t.ok)throw new Error(`failed to fetch Wasm: ${t.status} ${t.statusText} fetching '${t.url}'`);if(typeof WebAssembly.instantiateStreaming=="function")try{return yield WebAssembly.instantiateStreaming(t,A)}catch(r){if(e(t.type)&&t.headers.get("Content-Type")!=="application/wasm")console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n",r);else throw r}const s=yield t.arrayBuffer();return yield WebAssembly.instantiate(s,A)}else{const s=yield WebAssembly.instantiate(t,A);return s instanceof WebAssembly.Instance?{instance:s,module:t}:s}function e(s){switch(s){case"basic":case"cors":case"default":return!0}return!1}})}function He(t){return EA(this,null,function*(){if(z!==void 0)return z;t!==void 0&&(Object.getPrototypeOf(t)===Object.prototype?{module_or_path:t}=t:console.warn("using deprecated parameters for the initialization function; pass a single object instead")),t===void 0&&(t=new URL("data:application/wasm;base64,AGFzbQEAAAABNQlgAn9/AGACf38Bf2ADf39/AX9gAABgAX8Bf2ABfwBgA39/fwBgBH9/f38Bf2AFf39/f38AAncCFC4vd2FzbV9jb21wdXRlX2JnLmpzJ19fd2JnX19fd2JpbmRnZW5fdGhyb3dfNWQ5ZTgxNWU2ZmRmMTUwZgAAFC4vd2FzbV9jb21wdXRlX2JnLmpzH19fd2JpbmRnZW5faW5pdF9leHRlcm5yZWZfdGFibGUAAwMuLQQFBwAAAAEBCAAEAAYAAAIGBQQEAAYBBwUFAAAAAAIAAQEGAgEAAwMAAAAAAwQJAnABFBRvAIAIBQMBABEGGQN/AUGAgMAAC38AQbiJwAALfwBB3InAAAsH5AEKBm1lbW9yeQIAGF9fd2JnX21lbW9yeW1hbmFnZXJfZnJlZQALGG1lbW9yeW1hbmFnZXJfZ2V0X2xlbmd0aAAUGW1lbW9yeW1hbmFnZXJfZ2V0X3BvaW50ZXIAFRFtZW1vcnltYW5hZ2VyX25ldwAMHG1lbW9yeW1hbmFnZXJfdXBkYXRlX3BoeXNpY3MADw9fX2Fib3J0X2hhbmRsZXIDARVfX2luc3RhbmNlX3Rlcm1pbmF0ZWQDAhVfX3diaW5kZ2VuX2V4dGVybnJlZnMBARBfX3diaW5kZ2VuX3N0YXJ0AAEJGQEAQQELEy4sGxEJJSIWISoaGA0QLR8eCCMMAQIK124t+iUCCX8BfiMAQRBrIggkAAJAAkACQCAAQfUBTwRAIABBzP97SwRAQQAhAAwECyAAQQtqIgJBeHEhBUGcjcAAKAIAIglFDQJBHyEGIABB9f//B08NASAFQSYgAkEIdmciAGt2QQFxIABBAXRrQT5qIQYMAQsCQAJAAkACQAJAQZiNwAAoAgAiBEEQIABBC2pB+ANxIABBC0kbIgVBA3YiAHYiAUEDcQRAIAFBf3NBAXEgAGoiB0EDdCIBQZCLwABqIgAgAUGYi8AAaigCACICKAIIIgNGDQEgAyAANgIMIAAgAzYCCAwCCyAFQaCNwAAoAgBNDQYgAQ0CQZyNwAAoAgAiAEUNBiAAaEECdEGAisAAaigCACIBKAIEQXhxIAVrIQMgASECA0ACQCABKAIQIgANACABKAIUIgANACACKAIYIQYCQAJAIAIgAigCDCIARgRAIAJBFEEQIAIoAhQiABtqKAIAIgENAUEAIQAMAgsgAigCCCIBIAA2AgwgACABNgIIDAELIAJBFGogAkEQaiAAGyEEA0AgBCEHIAEiAEEUaiAAQRBqIAAoAhQiARshBCAAQRRBECABG2ooAgAiAQ0ACyAHQQA2AgALIAZFDQYCQCACKAIcQQJ0QYCKwABqIgEoAgAgAkcEQCACIAYoAhBHBEAgBiAANgIUIAANAgwJCyAGIAA2AhAgAA0BDAgLIAEgADYCACAARQ0GCyAAIAY2AhggAigCECIBBEAgACABNgIQIAEgADYCGAsgAigCFCIBRQ0GIAAgATYCFCABIAA2AhgMBgsgACgCBEF4cSAFayIBIAMgASADSSIBGyEDIAAgAiABGyECIAAhAQwACwALQZiNwAAgBEF+IAd3cTYCAAsgAkEIaiEAIAIgAUEDcjYCBCABIAJqIgEgASgCBEEBcjYCBAwFCwJAQQIgAHQiAkEAIAJrciABIAB0cWgiB0EDdCIBQZCLwABqIgIgAUGYi8AAaigCACIAKAIIIgNHBEAgAyACNgIMIAIgAzYCCAwBC0GYjcAAIARBfiAHd3E2AgALIAAgBUEDcjYCBCAAIAVqIgYgASAFayIHQQFyNgIEIAAgAWogBzYCAEGgjcAAKAIAIgIEQEGojcAAKAIAIQECQEGYjcAAKAIAIgRBASACQQN2dCIDcUUEQEGYjcAAIAMgBHI2AgAgAkF4cUGQi8AAaiIDIQQMAQsgAkF4cSICQZCLwABqIQQgAkGYi8AAaigCACEDCyAEIAE2AgggAyABNgIMIAEgBDYCDCABIAM2AggLIABBCGohAEGojcAAIAY2AgBBoI3AACAHNgIADAQLQZyNwABBnI3AACgCAEF+IAIoAhx3cTYCAAsCQAJAIANBEE8EQCACIAVBA3I2AgQgAiAFaiIHIANBAXI2AgQgAyAHaiADNgIAQaCNwAAoAgAiAUUNAUGojcAAKAIAIQACQEGYjcAAKAIAIgRBASABQQN2dCIGcUUEQEGYjcAAIAQgBnI2AgAgAUF4cUGQi8AAaiIEIQEMAQsgAUF4cSIEQZCLwABqIQEgBEGYi8AAaigCACEECyABIAA2AgggBCAANgIMIAAgATYCDCAAIAQ2AggMAQsgAiADIAVqIgBBA3I2AgQgACACaiIAIAAoAgRBAXI2AgQMAQtBqI3AACAHNgIAQaCNwAAgAzYCAAsgAkEIaiIARQ0BDAILQQAgBWshAwJAAkACQCAGQQJ0QYCKwABqKAIAIgJFBEBBACEADAELIAVBGSAGQQF2a0EAIAZBH0cbdCEEQQAhAANAAkAgAigCBEF4cSIHIAVJDQAgByAFayIHIANPDQAgAiEBIAciAw0AQQAhAyABIQAMAwsgAigCFCIHIAAgByACIARBHXZBBHFqKAIQIgJHGyAAIAcbIQAgBEEBdCEEIAINAAsLIAAgAXJFBEBBACEBQQIgBnQiAEEAIABrciAJcSIARQ0DIABoQQJ0QYCKwABqKAIAIQALIABFDQELA0AgAyAAKAIEQXhxIgIgBWsiBCADIAMgBEsiBBsgAiAFSSICGyEDIAEgACABIAQbIAIbIQEgACgCECICBH8gAgUgACgCFAsiAA0ACwsgAUUNACAFQaCNwAAoAgAiAE0gAyAAIAVrT3ENACABKAIYIQYCQAJAIAEgASgCDCIARgRAIAFBFEEQIAEoAhQiABtqKAIAIgINAUEAIQAMAgsgASgCCCICIAA2AgwgACACNgIIDAELIAFBFGogAUEQaiAAGyEEA0AgBCEHIAIiAEEUaiAAQRBqIAAoAhQiAhshBCAAQRRBECACG2ooAgAiAg0ACyAHQQA2AgALAkAgBkUNAAJAAkAgASgCHEECdEGAisAAaiICKAIAIAFHBEAgASAGKAIQRwRAIAYgADYCFCAADQIMBAsgBiAANgIQIAANAQwDCyACIAA2AgAgAEUNAQsgACAGNgIYIAEoAhAiAgRAIAAgAjYCECACIAA2AhgLIAEoAhQiAkUNASAAIAI2AhQgAiAANgIYDAELQZyNwABBnI3AACgCAEF+IAEoAhx3cTYCAAsCQCADQRBPBEAgASAFQQNyNgIEIAEgBWoiACADQQFyNgIEIAAgA2ogAzYCACADQYACTwRAIAAgAxAHDAILAkBBmI3AACgCACICQQEgA0EDdnQiBHFFBEBBmI3AACACIARyNgIAIANB+AFxQZCLwABqIgMhAgwBCyADQfgBcSIEQZCLwABqIQIgBEGYi8AAaigCACEDCyACIAA2AgggAyAANgIMIAAgAjYCDCAAIAM2AggMAQsgASADIAVqIgBBA3I2AgQgACABaiIAIAAoAgRBAXI2AgQLIAFBCGoiAA0BCwJAAkACQAJAAkAgBUGgjcAAKAIAIgFLBEAgBUGkjcAAKAIAIgBPBEAgCEEEaiEAAn8CQCAFQa+ABGpBgIB8cSIBRQ0AQcWNwAAtAABBxY3AAEEBOgAAQdCNwAAhAiABQbDyA0tyDQBBsPIDDAELQQAhAkEAIAFBEHYgAUH//wNxQQBHaiIBQAAiBEF/Rg0AGiABQRB0IgFBEGsgASAEQRB0IgJBACABa0YbCyEBIABBADYCCCAAIAE2AgQgACACNgIAIAgoAgQiAUUEQEEAIQAMCAsgCCgCDCEHQbCNwAAgCCgCCCIEQbCNwAAoAgBqIgA2AgBBtI3AACAAQbSNwAAoAgAiAiAAIAJLGzYCAAJAAkBBrI3AACgCACICBEBBgIvAACEAA0AgASAAKAIAIgMgACgCBCIGakYNAiAAKAIIIgANAAsMAgtBvI3AACgCACIAQQAgACABTRtFBEBBvI3AACABNgIAC0HAjcAAQf8fNgIAQYyLwAAgBzYCAEGEi8AAIAQ2AgBBgIvAACABNgIAQZyLwABBkIvAADYCAEGki8AAQZiLwAA2AgBBmIvAAEGQi8AANgIAQayLwABBoIvAADYCAEGgi8AAQZiLwAA2AgBBtIvAAEGoi8AANgIAQaiLwABBoIvAADYCAEG8i8AAQbCLwAA2AgBBsIvAAEGoi8AANgIAQcSLwABBuIvAADYCAEG4i8AAQbCLwAA2AgBBzIvAAEHAi8AANgIAQcCLwABBuIvAADYCAEHUi8AAQciLwAA2AgBByIvAAEHAi8AANgIAQdyLwABB0IvAADYCAEHQi8AAQciLwAA2AgBB2IvAAEHQi8AANgIAQeSLwABB2IvAADYCAEHgi8AAQdiLwAA2AgBB7IvAAEHgi8AANgIAQeiLwABB4IvAADYCAEH0i8AAQeiLwAA2AgBB8IvAAEHoi8AANgIAQfyLwABB8IvAADYCAEH4i8AAQfCLwAA2AgBBhIzAAEH4i8AANgIAQYCMwABB+IvAADYCAEGMjMAAQYCMwAA2AgBBiIzAAEGAjMAANgIAQZSMwABBiIzAADYCAEGQjMAAQYiMwAA2AgBBnIzAAEGQjMAANgIAQaSMwABBmIzAADYCAEGYjMAAQZCMwAA2AgBBrIzAAEGgjMAANgIAQaCMwABBmIzAADYCAEG0jMAAQaiMwAA2AgBBqIzAAEGgjMAANgIAQbyMwABBsIzAADYCAEGwjMAAQaiMwAA2AgBBxIzAAEG4jMAANgIAQbiMwABBsIzAADYCAEHMjMAAQcCMwAA2AgBBwIzAAEG4jMAANgIAQdSMwABByIzAADYCAEHIjMAAQcCMwAA2AgBB3IzAAEHQjMAANgIAQdCMwABByIzAADYCAEHkjMAAQdiMwAA2AgBB2IzAAEHQjMAANgIAQeyMwABB4IzAADYCAEHgjMAAQdiMwAA2AgBB9IzAAEHojMAANgIAQeiMwABB4IzAADYCAEH8jMAAQfCMwAA2AgBB8IzAAEHojMAANgIAQYSNwABB+IzAADYCAEH4jMAAQfCMwAA2AgBBjI3AAEGAjcAANgIAQYCNwABB+IzAADYCAEGUjcAAQYiNwAA2AgBBiI3AAEGAjcAANgIAQayNwAAgAUEPakF4cSIAQQhrIgI2AgBBkI3AAEGIjcAANgIAQaSNwAAgBEEoayIEIAEgAGtqQQhqIgA2AgAgAiAAQQFyNgIEIAEgBGpBKDYCBEG4jcAAQYCAgAE2AgAMCAsgAiADSSABIAJNcg0AIAAoAgwiA0EBcQ0AIANBAXYgB0YNAwtBvI3AAEG8jcAAKAIAIgAgASAAIAFJGzYCACABIARqIQNBgIvAACEAAkACQANAIAMgACgCACIGRwRAIAAoAggiAA0BDAILCyAAKAIMIgNBAXENACADQQF2IAdGDQELQYCLwAAhAANAAkAgAiAAKAIAIgNPBEAgAiADIAAoAgRqIgZJDQELIAAoAgghAAwBCwtBrI3AACABQQ9qQXhxIgBBCGsiAzYCAEGkjcAAIARBKGsiCSABIABrakEIaiIANgIAIAMgAEEBcjYCBCABIAlqQSg2AgRBuI3AAEGAgIABNgIAIAIgBkEga0F4cUEIayIAIAAgAkEQakkbIgNBGzYCBEGAi8AAKQIAIQogA0EQakGIi8AAKQIANwIAIANBCGoiACAKNwIAQYyLwAAgBzYCAEGEi8AAIAQ2AgBBgIvAACABNgIAQYiLwAAgADYCACADQRxqIQADQCAAQQc2AgAgAEEEaiIAIAZJDQALIAIgA0YNByADIAMoAgRBfnE2AgQgAiADIAJrIgBBAXI2AgQgAyAANgIAIABBgAJPBEAgAiAAEAcMCAsCQEGYjcAAKAIAIgFBASAAQQN2dCIEcUUEQEGYjcAAIAEgBHI2AgAgAEH4AXFBkIvAAGoiACEBDAELIABB+AFxIgBBkIvAAGohASAAQZiLwABqKAIAIQALIAEgAjYCCCAAIAI2AgwgAiABNgIMIAIgADYCCAwHCyAAIAE2AgAgACAAKAIEIARqNgIEIAFBD2pBeHFBCGsiBCAFQQNyNgIEIAZBD2pBeHFBCGsiAyAEIAVqIgBrIQUgA0GsjcAAKAIARg0DIANBqI3AACgCAEYNBCADKAIEIgJBA3FBAUYEQCADIAJBeHEiARAGIAEgBWohBSABIANqIgMoAgQhAgsgAyACQX5xNgIEIAAgBUEBcjYCBCAAIAVqIAU2AgAgBUGAAk8EQCAAIAUQBwwGCwJAQZiNwAAoAgAiAUEBIAVBA3Z0IgJxRQRAQZiNwAAgASACcjYCACAFQfgBcUGQi8AAaiIFIQMMAQsgBUH4AXEiAUGQi8AAaiEDIAFBmIvAAGooAgAhBQsgAyAANgIIIAUgADYCDCAAIAM2AgwgACAFNgIIDAULQaSNwAAgACAFayIBNgIAQayNwABBrI3AACgCACIAIAVqIgI2AgAgAiABQQFyNgIEIAAgBUEDcjYCBCAAQQhqIQAMBgtBqI3AACgCACEAAkAgASAFayICQQ9NBEBBqI3AAEEANgIAQaCNwABBADYCACAAIAFBA3I2AgQgACABaiIBIAEoAgRBAXI2AgQMAQtBoI3AACACNgIAQaiNwAAgACAFaiIENgIAIAQgAkEBcjYCBCAAIAFqIAI2AgAgACAFQQNyNgIECyAAQQhqIQAMBQsgACAEIAZqNgIEQayNwABBrI3AACgCACIAQQ9qQXhxIgFBCGsiAjYCAEGkjcAAQaSNwAAoAgAgBGoiBCAAIAFrakEIaiIBNgIAIAIgAUEBcjYCBCAAIARqQSg2AgRBuI3AAEGAgIABNgIADAMLQayNwAAgADYCAEGkjcAAQaSNwAAoAgAgBWoiATYCACAAIAFBAXI2AgQMAQtBqI3AACAANgIAQaCNwABBoI3AACgCACAFaiIBNgIAIAAgAUEBcjYCBCAAIAFqIAE2AgALIARBCGohAAwBC0EAIQBBpI3AACgCACIBIAVNDQBBpI3AACABIAVrIgE2AgBBrI3AAEGsjcAAKAIAIgAgBWoiAjYCACACIAFBAXI2AgQgACAFQQNyNgIEIABBCGohAAsgCEEQaiQAIAALogYBBH8gAEEIayIBIABBBGsoAgAiA0F4cSIAaiECAkACQCADQQFxDQAgA0ECcUUNASABKAIAIgMgAGohACABIANrIgFBqI3AACgCAEYEQCACKAIEQQNxQQNHDQFBoI3AACAANgIAIAIgAigCBEF+cTYCBCABIABBAXI2AgQgAiAANgIADwsgASADEAYLAkACQEHAjcAAAn8CQAJAAkACQCACKAIEIgNBAnFFBEAgAkGsjcAAKAIARg0CIAJBqI3AACgCAEYNAyACIANBeHEiAhAGIAEgACACaiIAQQFyNgIEIAAgAWogADYCACABQaiNwAAoAgBHDQFBoI3AACAANgIADwsgAiADQX5xNgIEIAEgAEEBcjYCBCAAIAFqIAA2AgALIABBgAJJDQQgASAAEAdBwI3AAEHAjcAAKAIAQQFrIgA2AgAgAA0GQYiLwAAoAgAiAA0CQf8fDAMLQayNwAAgATYCAEGkjcAAQaSNwAAoAgAgAGoiADYCACABIABBAXI2AgRBqI3AACgCACABRgRAQaCNwABBADYCAEGojcAAQQA2AgALIABBuI3AACgCACICTQ0FQayNwAAoAgAiAEUNBUGkjcAAKAIAIgNBKUkNBEGAi8AAIQEDQCAAIAEoAgAiBE8EQCAAIAQgASgCBGpJDQYLIAEoAgghAQwACwALQaiNwAAgATYCAEGgjcAAQaCNwAAoAgAgAGoiADYCACABIABBAXI2AgQgACABaiAANgIADwtBACEBA0AgAUEBaiEBIAAoAggiAA0AC0H/HyABIAFB/x9NGws2AgAPCwJAQZiNwAAoAgAiAkEBIABBA3Z0IgNxRQRAQZiNwAAgAiADcjYCACAAQfgBcUGQi8AAaiIAIQIMAQsgAEH4AXEiAEGQi8AAaiECIABBmIvAAGooAgAhAAsgAiABNgIIIAAgATYCDCABIAI2AgwgASAANgIIDwtBwI3AAEGIi8AAKAIAIgAEf0EAIQEDQCABQQFqIQEgACgCCCIADQALQf8fIAEgAUH/H00bBUH/Hws2AgAgAiADTw0AQbiNwABBfzYCAAsL+wMBCH8jAEEQayIGJAACfwJAIANBAXFFBEAgAi0AACIFDQFBAAwCCyAAIAIgA0EBdiABKAIMEQIADAELIAEoAgwhCgNAIAJBAWohBAJAAkACQAJAIAXAQQBIBEAgBUH/AXEiCEGAAUYNASAIQcABRw0DIAYgATYCBCAGIAA2AgAgBkKggICABjcCCCADIAdBA3RqIgIoAgAgBiACKAIEEQEARQ0CQQEMBgsgACAEIAVB/wFxIgIgChECAEUEQCACIARqIQIMBAtBAQwFCyAAIAJBA2oiBCACLwABIgIgChECAEUEQCACIARqIQIMAwtBAQwECyAHQQFqIQcgBCECDAELQaCAgIAGIQsgBUEBcQRAIAIoAAEhCyACQQVqIQQLQQAhCAJ/IAVBAnFFBEBBACEJIAQMAQsgBC8AACEJIARBAmoLIQIgBUEEcQR/IAIvAAAhCCACQQJqBSACCyEEIAVBCHEEfyAELwAAIQcgBEECagUgBAshAiAFQRBxBEAgAyAJQQN0ai8BBCEJCyAGIAVBIHEEfyADIAhBA3RqLwEEBSAICzsBDiAGIAk7AQwgBiALNgIIIAYgATYCBCAGIAA2AgBBASADIAdBA3RqIgQoAgAgBiAEKAIEEQEADQIaIAdBAWohBwsgAi0AACIFDQALQQALIAZBEGokAAuOBAECfyAAIAFqIQICQAJAAkAgACgCBCIDQQFxDQAgA0ECcUUNASAAKAIAIgMgAWohASAAIANrIgBBqI3AACgCAEYEQCACKAIEQQNxQQNHDQFBoI3AACABNgIAIAIgAigCBEF+cTYCBCAAIAFBAXI2AgQgAiABNgIADwsgACADEAYLAkACQCACKAIEIgNBAnFFBEAgAkGsjcAAKAIARg0CIAJBqI3AACgCAEYNBCACIANBeHEiAhAGIAAgASACaiIBQQFyNgIEIAAgAWogATYCACAAQaiNwAAoAgBHDQFBoI3AACABNgIADwsgAiADQX5xNgIEIAAgAUEBcjYCBCAAIAFqIAE2AgALIAFBgAJPBEAgACABEAcPCwJAQZiNwAAoAgAiAkEBIAFBA3Z0IgNxRQRAQZiNwAAgAiADcjYCACABQfgBcUGQi8AAaiIBIQIMAQsgAUH4AXEiAUGQi8AAaiECIAFBmIvAAGooAgAhAQsgAiAANgIIIAEgADYCDCAAIAI2AgwgACABNgIIDwtBrI3AACAANgIAQaSNwABBpI3AACgCACABaiIBNgIAIAAgAUEBcjYCBCAAQaiNwAAoAgBHDQBBoI3AAEEANgIAQaiNwABBADYCAAsPC0GojcAAIAA2AgBBoI3AAEGgjcAAKAIAIAFqIgE2AgAgACABQQFyNgIEIAAgAWogATYCAAuCAwEEfyAAKAIMIQICQAJAAkAgAUGAAk8EQCAAKAIYIQMCQAJAIAAgAkYEQCAAQRRBECAAKAIUIgIbaigCACIBDQFBACECDAILIAAoAggiASACNgIMIAIgATYCCAwBCyAAQRRqIABBEGogAhshBANAIAQhBSABIgJBFGogAkEQaiACKAIUIgEbIQQgAkEUQRAgARtqKAIAIgENAAsgBUEANgIACyADRQ0CAkAgACgCHEECdEGAisAAaiIBKAIAIABHBEAgAygCECAARg0BIAMgAjYCFCACDQMMBAsgASACNgIAIAJFDQQMAgsgAyACNgIQIAINAQwCCyAAKAIIIgAgAkcEQCAAIAI2AgwgAiAANgIIDwtBmI3AAEGYjcAAKAIAQX4gAUEDdndxNgIADwsgAiADNgIYIAAoAhAiAQRAIAIgATYCECABIAI2AhgLIAAoAhQiAEUNACACIAA2AhQgACACNgIYDwsPC0GcjcAAQZyNwAAoAgBBfiAAKAIcd3E2AgALwwIBBH8gAEIANwIQIAACf0EAIAFBCHYiA0UNABpBHyABQYCAgAhPDQAaIAFBJiADZyIDa3ZBAXEgA0EBdHJBPnMLIgI2AhwgAkECdEGAisAAaiEEQQEgAnQiA0GcjcAAKAIAcUUEQCAEIAA2AgAgACAENgIYIAAgADYCDCAAIAA2AghBnI3AAEGcjcAAKAIAIANyNgIADwsCQAJAIAEgBCgCACIDKAIEQXhxRgRAIAMhAgwBCyABQRkgAkEBdmtBACACQR9HG3QhBQNAIAMgBUEddkEEcWoiBCgCECICRQ0CIAVBAXQhBSACIQMgAigCBEF4cSABRw0ACwsgAigCCCIBIAA2AgwgAiAANgIIIABBADYCGCAAIAI2AgwgACABNgIIDwsgBEEQaiAANgIAIAAgAzYCGCAAIAA2AgwgACAANgIIC+QFAgp/AX4jAEEQayIGJABBCiECIAAoAgAiBCEAIARB6AdPBEADQCAGQQZqIAJqIgNBBGsgACIFIABBkM4AbiIAQZDOAGxrIgdB//8DcUHkAG4iCEEBdC8A8IdAOwAAIANBAmsgByAIQeQAbGtB//8DcUEBdC8A8IdAOwAAIAJBBGshAiAFQf+s4gRLDQALCyAAQQlLBEAgAkECayICIAZBBmpqIAAgAEH//wNxQeQAbiIAQeQAbGtB//8DcUEBdC8A8IdAOwAAC0EAIAQgABtFBEAgAkEBayICIAZBBmpqIABBAXQtAPGHQDoAAAsCfyAGQQZqIAJqIQdBACEEQStBfyABKAIIIgNBgICAAXEiABshCCADQYCAgARxRUUhCgJAQQogAmsiCyAAQRV2aiIAIAEvAQwiBUkEQAJAAkAgA0GAgIAIcUUEQCAFIABrIQVBACEAAkACQAJAIANBHXZBA3FBAWsOAwABAAILIAUhAAwBCyAFQf7/A3FBAXYhAAsgA0H///8AcSEJIAEoAgQhAyABKAIAIQEDQCAEQf//A3EgAEH//wNxTw0CQQEhAiAEQQFqIQQgASAJIAMoAhARAQBFDQALDAQLIAEgASkCCCIMp0GAgID/eXFBsICAgAJyNgIIQQEhAiABKAIAIgMgASgCBCIJIAggChAZDQMgBSAAa0H//wNxIQADQCAEQf//A3EgAE8NAiAEQQFqIQQgA0EwIAkoAhARAQBFDQALDAMLQQEhAiABIAMgCCAKEBkNAiABIAcgCyADKAIMEQIADQJBACEEIAUgAGtB//8DcSEAA0AgBEH//wNxIgUgAEkhAiAAIAVNDQMgBEEBaiEEIAEgCSADKAIQEQEARQ0ACwwCCyADIAcgCyAJKAIMEQIADQEgASAMNwIIQQAMAgtBASECIAEoAgAiACABKAIEIgEgCCAKEBkNACAAIAcgCyABKAIMEQIAIQILIAILIAZBEGokAAuAAgEGfyAAKAIIIQQCf0EBIAFBgAFJDQAaQQIgAUGAEEkNABpBA0EEIAFBgIAESRsLIgYgACgCACAEa0sEQCAAIAQgBhAOCyAAKAIEIARqIQICQCABQYABTwRAIAFBP3FBgH9yIQUgAUEGdiEDIAFBgBBJBEAgAiAFOgABIAIgA0HAAXI6AAAMAgsgAUEMdiEHIANBP3FBgH9yIQMgAUH//wNNBEAgAiAFOgACIAIgAzoAASACIAdB4AFyOgAADAILIAIgBToAAyACIAM6AAIgAiAHQT9xQYB/cjoAASACIAFBEnZBcHI6AAAMAQsgAiABOgAACyAAIAQgBmo2AghBAAv6AgEDfyMAQSBrIgUkAEH8icAAQfyJwAAoAgAiBkEBajYCAAJAAkACQAJAAkACQAJAAn9BACAGQQBIDQAaQQFB6InAAC0AAA0AGkHoicAAQQE6AABB5InAAEHkicAAKAIAQQFqNgIAQQILQf8BcQ4DAwEAAQtB8InAACgCACIGQQBIDQIgBiAGQQFqIgdKDQNB8InAACAHNgIAQfSJwAAoAgBFDQEgBUEIaiAAIAEoAhQRAAAgBSAEOgAdIAUgAzoAHCAFIAI2AhggBSAFKQMINwIQQfSJwAAoAgAgBUEQakH4icAAKAIAKAIUEQAADAELIAUgACABKAIYEQAAAAtB8InAAEHwicAAKAIAIgBBAWs2AgAgAEEATA0CQeiJwABBADoAACADDQMLAAsjAEEQayIAJAAgAEEcNgIEIABByIbAADYCACAAIACtQoCAgICwAoQ3AwhBtYDAACAAQQhqQeSGwAAQFwALQZSHwABBzQBBvIfAABAXAAsAC74BAQN/IwBBEGsiAiQAAkACQAJAIAFFBEAgAEUNASAAQQhrIgEoAgBBAUcNAiAAKAIIIAAoAgQhAyABQQA2AgACQCABQX9GDQAgAEEEayIAIAAoAgBBAWsiADYCACAADQAgAUEYQQQQJAsgA0UNAyADQQJ0QQQQJAwDCyAARQ0AIABBCGsiACAAKAIAQQFrIgE2AgAgAiAANgIMIAENAiACQQxqEBMMAgsQKAALQayDwABBPxAnAAsgAkEQaiQAC8MBAQR/AkACQCAAQf////8DSyAAQQJ0IgNB/P///wdLcg0AAn8gA0UEQEEEIQJBAAwBC0EEIQEgA0EEECYiAkUNASAACyEEIAIhAQJAAkACQCAADgICAQALIANBBGsiAQRAIAJBACAB/AsACyABIAJqIQELIAFBADYCAAtBGEEEECYiAUUNASABIAA2AhQgASACNgIQIAEgBDYCDCABQQA2AgggAUKBgICAEDcCACABQQhqDwsgASADEBwAC0EEQRgQKwAL4gECAn8BfiMAQSBrIgIkACABKAIAQX9GBEAgASgCDCEDIAJBADYCGCACQoCAgIAQNwIQIAJBEGpB2ITAACADKAIAIgMoAgAgAygCBBAEGiACIAIoAhgiAzYCCCACIAIpAhAiBDcDACABIAM2AgggASAENwIACyABKAIIIQMgAUEANgIIIAEpAgAhBCABQoCAgIAQNwIAIAIgAzYCGCACIAQ3AxBBDEEEECYiAUUEQEEEQQwQKwALIAEgAigCGDYCCCABIAIpAxA3AgAgAEGEh8AANgIEIAAgATYCACACQSBqJAAL4wcCC38BfiMAQRBrIgkkACACIAEgAmoiBUsEQEEAQQAQHAALIAlBBGohCyAAKAIEIQpBASEMQQQhAQJAQQggBSAAKAIAIgJBAXQiBiAFIAZLGyIFIAVBCE0bIg2tIg5CIIhQRQRAQQAhBQwBCyAOpyIFQf////8HSwRAQQAhBQwBCwJAAkACfyACBEACf0EAIQECQAJAAkACQAJAIApBBGsiBygCACIIQXhxIgNBBEEIIAhBA3EiBBsgAmpPBEAgBEEAIAJBJ2ogA0kbDQEgBUHM/3tLDQVBECAFQQtqQXhxIAVBC0kbIQIgCkEIayEGIARFBEAgBkUgAkGAAklyIAMgAmtBgIAISyACIANPcnINBSAKDAcLIAMgBmohBAJAIAIgA0sEQCAEQayNwAAoAgBGDQFBqI3AACgCACAERwRAIAQoAgQiCEECcQ0HIAhBeHEiCCADaiIDIAJJDQcgBCAIEAYgAyACayIEQRBPBEAgByACIAcoAgBBAXFyQQJyNgIAIAIgBmoiAiAEQQNyNgIEIAMgBmoiAyADKAIEQQFyNgIEIAIgBBAFDAcLIAcgAyAHKAIAQQFxckECcjYCACADIAZqIgIgAigCBEEBcjYCBAwGC0GgjcAAKAIAIANqIgMgAkkNBgJAIAMgAmsiBEEPTQRAIAcgCEEBcSADckECcjYCACADIAZqIgIgAigCBEEBcjYCBEEAIQRBACECDAELIAcgAiAIQQFxckECcjYCACACIAZqIgIgBEEBcjYCBCADIAZqIgMgBDYCACADIAMoAgRBfnE2AgQLQaiNwAAgAjYCAEGgjcAAIAQ2AgAMBQsgAyACayIDQQ9NDQQgByACIAhBAXFyQQJyNgIAIAIgBmoiAiADQQNyNgIEIAQgBCgCBEEBcjYCBCACIAMQBQwEC0GkjcAAKAIAIANqIgMgAksNAgwEC0HIhcAAQfiFwAAQHQALQYiGwABBuIbAABAdAAsgByACIAhBAXFyQQJyNgIAIAIgBmoiBCADIAJrIgJBAXI2AgRBpI3AACACNgIAQayNwAAgBDYCAAsgBkUNACAKDAILIAUQAiICRQ0AIAVBfEF4IAcoAgAiAUEDcRsgAUF4cWoiASABIAVLGyIBBEAgAiAKIAH8CgAACyACIQEgChADCyABCwwBCyAFRQRAQQEhAQwCCyAFQQEQJgsiAQ0AIAtBATYCBAwBCyALIAE2AgRBACEMC0EIIQELIAEgC2ogBTYCACALIAw2AgAgCSgCBEEBRgRAIAkoAgggCSgCDBAcAAsgCSgCCCEBIAAgDTYCACAAIAE2AgQgCUEQaiQAC6QEAgl/A30jAEEQayIFJAACQAJAIAAEQCAAQQhrIgYgBigCAEEBaiICNgIAIAJFDQEgACgCAA0CIABBfzYCACAFIAY2AgwgBSAANgIIIAUgAEEEaiIENgIEIAEEQCAEKAIIIQIgBCgCBCIJIQQDQAJAAkACQAJAAkACQAJAAkAgAiADQQFqSwRAIANBAmogAk8NASACIANNDQIgBEEEaioCACEMIARBCGoqAgAhDSAEKgIAIgtDAAAAAGBFBEAgA0EDaiACTw0EIARBDGogDDgCACADQQRqIAJPDQUgBEEQaiANOAIADAkLIAv8AUEFbCIHQQNqIgggAk8NBSAHQQRqIgcgAk8NBiACIANBA2oiCk0EQCAKIAJBjIPAABASAAsgCSAHQQJ0aioCACELIARBDGogDCAJIAhBAnRqKgIAkjgCACADQQRqIgggAkkNByAIIAJBnIPAABASAAsgA0EBaiACQZyCwAAQEgALIANBAmogAkGsgsAAEBIACyADIAJBvILAABASAAsgA0EDaiACQcyCwAAQEgALIANBBGogAkHcgsAAEBIACyAIIAJB7ILAABASAAsgByACQfyCwAAQEgALIARBEGogDSALkjgCAAsgBEEUaiEEIANBBWohAyABQQFrIgENAAsLIAAgACgCAEEBajYCACAGIAYoAgBBAWsiADYCACAARQRAIAVBDGoQEwsgBUEQaiQADwsQKAsACxApAAuNAQICfwF+IwBBIGsiAiQAIAEoAgBBf0YEQCABKAIMIQMgAkEANgIcIAJCgICAgBA3AhQgAkEUakHYhMAAIAMoAgAiAygCACADKAIEEAQaIAIgAigCHCIDNgIQIAIgAikCFCIENwMIIAEgAzYCCCABIAQ3AgALIABBhIfAADYCBCAAIAE2AgAgAkEgaiQAC1QBAX8CQAJAIAAoAgAgACgCCCIDayACSQRAIAAgAyACEA4gACgCCCEDDAELIAJFDQELIAJFDQAgACgC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",self.location));const A=Fe();(typeof t=="string"||typeof Request=="function"&&t instanceof Request||typeof URL=="function"&&t instanceof URL)&&(t=fetch(t));const{instance:e,module:s}=yield Xe(yield t,A);return Ue(e)})}class ie{constructor(){C(this,"memoryManager",null);C(this,"sharedArray",null);C(this,"isInitialized",!1)}initialize(A){return EA(this,null,function*(){if(!this.isInitialized)try{const e=yield He();this.memoryManager=new kA(A);const s=this.memoryManager.get_pointer(),r=this.memoryManager.get_length();this.sharedArray=new Float32Array(e.memory.buffer,s,r),this.isInitialized=!0,console.log(`[WasmSynchronizer] Initialized with capacity: ${A} floats (${A*4} bytes)`)}catch(e){throw console.error("[WasmSynchronizer] Failed to initialize Wasm:",e),e}})}getSharedArray(){if(!this.isInitialized||!this.sharedArray)throw new Error("WasmSynchronizer is not initialized yet. Call initialize() first.");return this.sharedArray}updatePhysics(A){this.isInitialized&&this.memoryManager&&this.memoryManager.update_physics(A)}}class Je{constructor(A,e,s,r){C(this,"target");C(this,"renderer");C(this,"registry");C(this,"isTravelEnabled",!1);C(this,"wasmSync");C(this,"lastWasmNodeCount",0);C(this,"tracker");this.target=A,this.renderer=e,this.registry=s,this.wasmSync=new ie,this.tracker=new jA(A,{resizeDebounce:r.resizeDebounce}),this.tracker.onLayoutChange.add((o,i)=>{document.querySelector(`[${U.NAME}~='${U.VALUES.TRAVELER}']`)!==null&&!this.isTravelEnabled&&(this.isTravelEnabled=!0,this.renderer.createRenderTarget());const g=this.wasmSync.sharedArray;this.renderer.updateScroll();const a={sharedArray:g||new Float32Array,currentIndex:0,scrollX:this.renderer.getScrollX(),scrollY:this.renderer.getScrollY()},I=ee(this.target,o,j,1,0,this.renderer.qualityFactor,void 0,void 0,void 0,a);I&&(this.lastWasmNodeCount=a.currentIndex,this.renderer.syncScene(I,i),g&&this.renderer.saveInitialLocals(g))}),this.tracker.onStyleChange.add(o=>{Te(this.registry,o,this.wasmSync.sharedArray||void 0)}),this.tracker.onRender.add(()=>{this.renderer.updateScroll(),this.wasmSync.updatePhysics(this.lastWasmNodeCount),this.wasmSync.sharedArray&&this.renderer.syncMeshesByWasm(this.wasmSync.sharedArray),this.renderer.render()})}start(){return EA(this,null,function*(){yield this.wasmSync.initialize(1e4*O),this.tracker.start()})}stop(){this.tracker.stop()}}class _e{constructor(){C(this,"store");this.store=new WeakMap}register(A,e){this.store.set(A,e)}get(A){return this.store.get(A)}has(A){return this.store.has(A)}remove(A){this.store.delete(A)}}class ze{constructor(A,e){C(this,"renderer");C(this,"syncer");C(this,"target");C(this,"registry");var r,o,i;if(this.target=A,this.registry=new _e,!document.getElementById("mirage-engine-styles")){const n=document.createElement("style");n.id="mirage-engine-styles",n.textContent=`
186
+ [${rA.NAME}="${rA.VALUES.HIDE}"] {
187
187
  opacity: 0 !important;
188
188
  }
189
- `,document.head.appendChild(a)}let r;if(t.mode==="duplicate"?r=(c=(i=t.container)!=null?i:this.target.parentElement)!=null?c:void 0:r=(s=this.target.parentElement)!=null?s:void 0,!r)throw new Error("[Mirage] Cannot find a container (parent or option).");this.renderer=new it(this.target,t,r,this.registry),this.renderer.mount(),this.syncer=new nt(this.target,this.renderer,this.registry,t)}start(){this.syncer.start()}stop(){this.syncer.stop()}dispose(){this.syncer.stop(),this.renderer.dispose()}getTracker(){return this.syncer.tracker}updateUniforms(e,t){this.renderer.updateUniforms(e,t)}getCanvas(){return this.renderer.canvas}test(){const e=this.registry.get(document.querySelector("#box2"));if(!e)return;const t={ArrowRight:!1,ArrowLeft:!1,ArrowUp:!1,ArrowDown:!1};window.addEventListener("keydown",c=>{t[c.key]!==void 0&&(t[c.key]=!0)}),window.addEventListener("keyup",c=>{t[c.key]!==void 0&&(t[c.key]=!1)});const r=2,i=()=>{requestAnimationFrame(i),t.ArrowRight&&e.position.setX(e.position.x+r),t.ArrowLeft&&e.position.setX(e.position.x-r),t.ArrowUp&&e.position.setY(e.position.y+r),t.ArrowDown&&e.position.setY(e.position.y-r)};i()}}b.ALLOWED_FILTERS=Ee,b.ATTR_DOM=K,b.ATTR_FILTER=B,b.ATTR_SANDWICH=Pe,b.ATTR_SELECT=V,b.ATTR_SHADER=Le,b.ATTR_TRAVEL=F,b.DIRTY_CONTENT=ye,b.DIRTY_NONE=me,b.DIRTY_RECT=te,b.DIRTY_STRUCTURE=ve,b.DIRTY_STYLE=ae,b.DIRTY_ZINDEX=De,b.EXCLUDED=He,b.Engine=lt,b.SELECT_LAYER=oe,b.THREE_LAYERS=N,b.TRAVEL_VALUES=pe,b.Tracker=Ie,b.USER_LAYER=H,b.extractFromStyle=Ae,Object.defineProperty(b,Symbol.toStringTag,{value:"Module"})});
189
+ `,document.head.appendChild(n)}let s;if(e.mode==="duplicate"?s=(o=(r=e.container)!=null?r:this.target.parentElement)!=null?o:void 0:s=(i=this.target.parentElement)!=null?i:void 0,!s)throw new Error("[Mirage] Cannot find a container (parent or option).");this.renderer=new Me(this.target,e,s,this.registry),this.renderer.mount(),this.syncer=new Je(this.target,this.renderer,this.registry,e)}start(){return EA(this,null,function*(){yield this.syncer.start()})}stop(){this.syncer.stop()}dispose(){this.syncer.stop(),this.renderer.dispose()}getTracker(){return this.syncer.tracker}updateUniforms(A,e){this.renderer.updateUniforms(A,e)}getCanvas(){return this.renderer.canvas}test(){const A=this.registry.get(document.querySelector("#box2"));if(!A)return;const e={ArrowRight:!1,ArrowLeft:!1,ArrowUp:!1,ArrowDown:!1};window.addEventListener("keydown",o=>{e[o.key]!==void 0&&(e[o.key]=!0)}),window.addEventListener("keyup",o=>{e[o.key]!==void 0&&(e[o.key]=!1)});const s=2,r=()=>{requestAnimationFrame(r),e.ArrowRight&&A.position.setX(A.position.x+s),e.ArrowLeft&&A.position.setX(A.position.x-s),e.ArrowUp&&A.position.setY(A.position.y+s),e.ArrowDown&&A.position.setY(A.position.y-s)};r()}}Q.ALLOWED_FILTERS=YA,Q.ATTR_DOM=rA,Q.ATTR_FILTER=K,Q.ATTR_SANDWICH=de,Q.ATTR_SELECT=AA,Q.ATTR_SHADER=WA,Q.ATTR_TRAVEL=U,Q.DIRTY_CONTENT=LA,Q.DIRTY_NONE=pA,Q.DIRTY_RECT=oA,Q.DIRTY_STRUCTURE=DA,Q.DIRTY_STYLE=QA,Q.DIRTY_ZINDEX=OA,Q.EXCLUDED=ue,Q.Engine=ze,Q.OFFSET_LOCAL_X=sA,Q.OFFSET_LOCAL_Y=tA,Q.OFFSET_PARENT=dA,Q.OFFSET_WORLD_X=$,Q.OFFSET_WORLD_Y=cA,Q.SELECT_LAYER=IA,Q.THREE_LAYERS=T,Q.TRAVEL_VALUES=xA,Q.Tracker=jA,Q.USER_LAYER=j,Q.WASM_STRIDE=O,Q.WasmSynchronizer=ie,Q.extractFromStyle=KA,Object.defineProperty(Q,Symbol.toStringTag,{value:"Module"})});
@@ -1,4 +1,4 @@
1
1
  import { StyleData } from '@mirage-engine/dom-tracker';
2
2
  import { MeshRegistry } from '../store/MeshRegistry';
3
3
 
4
- export declare function animateMeshByData(registry: MeshRegistry, data: Map<HTMLElement, StyleData>): void;
4
+ export declare function animateMeshByData(registry: MeshRegistry, data: Map<HTMLElement, StyleData>, sharedArray?: Float32Array): void;
@@ -6,7 +6,7 @@ export declare class Engine {
6
6
  private target;
7
7
  private registry;
8
8
  constructor(target: HTMLElement, config: CoreConfig);
9
- start(): void;
9
+ start(): Promise<void>;
10
10
  stop(): void;
11
11
  dispose(): void;
12
12
  getTracker(): import('@mirage-engine/dom-tracker').Tracker;
@@ -8,8 +8,10 @@ export declare class Syncer {
8
8
  private renderer;
9
9
  private registry;
10
10
  private isTravelEnabled;
11
+ private wasmSync;
12
+ private lastWasmNodeCount;
11
13
  tracker: Tracker;
12
14
  constructor(target: HTMLElement, renderer: Renderer, registry: MeshRegistry, config: CoreConfig);
13
- start(): void;
15
+ start(): Promise<void>;
14
16
  stop(): void;
15
17
  }
@@ -1,3 +1,8 @@
1
1
  import { SceneNode, Visibility } from '../types';
2
2
 
3
- export declare function extractSceneGraph(sourceNode: HTMLElement | Node, initialMask: number | undefined, inheritedFlow: Visibility, captureLayer?: number, inheritedZIndex?: number, qualityFactor?: number, inheritedNativeLayer?: number, inheritedNativeStyles?: any, inheritedClipElements?: HTMLElement[]): SceneNode | null;
3
+ export declare function extractSceneGraph(sourceNode: HTMLElement | Node, initialMask: number | undefined, inheritedFlow: Visibility, captureLayer?: number, inheritedZIndex?: number, qualityFactor?: number, inheritedNativeLayer?: number, inheritedNativeStyles?: any, inheritedClipElements?: HTMLElement[], extractContext?: {
4
+ sharedArray: Float32Array;
5
+ currentIndex: number;
6
+ scrollX?: number;
7
+ scrollY?: number;
8
+ }, parentWasmIndex?: number, parentWorldX?: number, parentWorldY?: number, inheritedIsFixed?: boolean): SceneNode | null;
@@ -1,2 +1,3 @@
1
1
  export { Engine } from './core/Engine';
2
2
  export * from './types';
3
+ export * from './wasm/WasmSynchronizer';
@@ -19,6 +19,16 @@ export declare class Renderer {
19
19
  private mountContainer;
20
20
  private registry;
21
21
  private targetRect;
22
+ private targetPageX;
23
+ private targetPageY;
24
+ size: {
25
+ width: number;
26
+ height: number;
27
+ };
28
+ private currentScrollX;
29
+ private currentScrollY;
30
+ private lastTargetLeft;
31
+ private lastTargetTop;
22
32
  private travelersByLayer;
23
33
  private textureManager;
24
34
  readonly fixedMeshes: Set<THREE.Mesh>;
@@ -26,6 +36,10 @@ export declare class Renderer {
26
36
  private getSceneLayer;
27
37
  createRenderTarget(): void;
28
38
  private applyTextQuality;
39
+ private getQualityFactor;
40
+ updateScroll(): void;
41
+ getScrollX(): number;
42
+ getScrollY(): number;
29
43
  mount(): void;
30
44
  private updateCanvasLayout;
31
45
  updateUniforms(element: HTMLElement, uniforms: Record<string, any>): void;
@@ -38,5 +52,6 @@ export declare class Renderer {
38
52
  private updateMeshLayers;
39
53
  private captureRenderTarget;
40
54
  render(): void;
41
- syncMeshesByDOM(): void;
55
+ saveInitialLocals(sharedArray: Float32Array): void;
56
+ syncMeshesByWasm(sharedArray: Float32Array): void;
42
57
  }
@@ -8,6 +8,12 @@ export interface NodeRect {
8
8
  width: number;
9
9
  height: number;
10
10
  }
11
+ export declare const WASM_STRIDE = 5;
12
+ export declare const OFFSET_PARENT = 0;
13
+ export declare const OFFSET_LOCAL_X = 1;
14
+ export declare const OFFSET_LOCAL_Y = 2;
15
+ export declare const OFFSET_WORLD_X = 3;
16
+ export declare const OFFSET_WORLD_Y = 4;
11
17
  export interface SceneNode {
12
18
  id: string;
13
19
  type: NodeType;
@@ -30,5 +36,6 @@ export interface SceneNode {
30
36
  isFixed: boolean;
31
37
  shaderHooks?: ShaderHooks;
32
38
  clipElements?: HTMLElement[];
39
+ wasmIndex?: number;
33
40
  children: SceneNode[];
34
41
  }
@@ -0,0 +1,12 @@
1
+ export declare class WasmSynchronizer {
2
+ private memoryManager;
3
+ sharedArray: Float32Array | null;
4
+ private isInitialized;
5
+ /**
6
+ * Initialize Wasm instance and allocate a 1D Float32Array shared memory
7
+ * @param capacity The number of Float32 elements to allocate
8
+ */
9
+ initialize(capacity: number): Promise<void>;
10
+ getSharedArray(): Float32Array;
11
+ updatePhysics(nodeCount: number): void;
12
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mirage-engine/core",
3
- "version": "0.3.20",
3
+ "version": "0.3.22",
4
4
  "main": "src/index.ts",
5
5
  "types": "src/index.ts",
6
6
  "peerDependencies": {
@@ -13,8 +13,9 @@
13
13
  },
14
14
  "dependencies": {
15
15
  "@types/three": "^0.181.0",
16
- "@mirage-engine/painter": "1.0.10",
17
- "@mirage-engine/dom-tracker": "0.3.10"
16
+ "@mirage-engine/wasm-compute": "0.1.1",
17
+ "@mirage-engine/painter": "1.0.12",
18
+ "@mirage-engine/dom-tracker": "0.3.11"
18
19
  },
19
20
  "private": false,
20
21
  "publishConfig": {