mirage-engine 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(k,L){typeof exports=="object"&&typeof module!="undefined"?L(exports,require("three")):typeof define=="function"&&define.amd?define(["exports","three"],L):(k=typeof globalThis!="undefined"?globalThis:k||self,L(k.MirageEngine={},k.THREE))})(this,function(k,L){"use strict";var ut=Object.defineProperty,ft=Object.defineProperties;var gt=Object.getOwnPropertyDescriptors;var ze=Object.getOwnPropertySymbols;var pt=Object.prototype.hasOwnProperty,mt=Object.prototype.propertyIsEnumerable;var Re=(k,L,U)=>L in k?ut(k,L,{enumerable:!0,configurable:!0,writable:!0,value:U}):k[L]=U,ne=(k,L)=>{for(var U in L||(L={}))pt.call(L,U)&&Re(k,U,L[U]);if(ze)for(var U of ze(L))mt.call(L,U)&&Re(k,U,L[U]);return k},Ne=(k,L)=>ft(k,gt(L));var u=(k,L,U)=>(Re(k,typeof L!="symbol"?L+"":L,U),U);var Xe=(k,L,U)=>new Promise((v,fe)=>{var J=_=>{try{F(U.next(_))}catch(P){fe(P)}},ve=_=>{try{F(U.throw(_))}catch(P){fe(P)}},F=_=>_.done?v(_.value):Promise.resolve(_.value).then(J,ve);F((U=U.apply(k,L)).next())});function U(n){const e=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(n){for(const t in n)if(t!=="default"){const r=Object.getOwnPropertyDescriptor(n,t);Object.defineProperty(e,t,r.get?r:{enumerable:!0,get:()=>n[t]})}}return e.default=n,Object.freeze(e)}const v=U(L),fe={INCLUDE_TREE:"include-tree",EXCLUDE_TREE:"exclude-tree",INCLUDE_SELF:"include-self",EXCLUDE_SELF:"exclude-self",END:"end"},J={NAME:"data-mirage-dom",KEY:"mirageDom",VALUES:{HIDE:"hide",SHOW:"show"}},ve={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:ve,MAX_LAYERS:Object.keys(ve).length-1},_={NAME:"data-mirage-filter",KEY:"mirageFilter",VALUES:fe},P={NAME:"data-mirage-select",KEY:"mirageSelect",VALUES:fe},Ve={NAME:"data-mirage-shader",KEY:"mirageShader"},Me={NAME:"data-mirage-sandwich",KEY:"mirageSandwich",VALUES:{FRONT:"front"}},ye=0,se=1,ge=2,Ye=4,we=8,xe=16;function Pe(n){const e=n.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 He(n){const e={};if(n.opacity&&(e.opacity=parseFloat(n.opacity)),n.backgroundColor){const t=Pe(n.backgroundColor);e.backgroundColor=[t.r,t.g,t.b,t.a]}if(n.backgroundImage?e.backgroundImage=n.backgroundImage:n.background&&(e.backgroundImage=n.background),n.boxShadow&&(e.boxShadow=n.boxShadow),n.borderRadius&&(e.borderRadius=parseFloat(n.borderRadius)),n.width&&(e.width=parseFloat(n.width)),n.height&&(e.height=parseFloat(n.height)),n.transform&&n.transform!=="none"){const t=new DOMMatrix(n.transform);e.x=t.m41,e.y=t.m42,e.z=t.m43}return e}class Le{constructor(e,t){u(this,"target");u(this,"observer");u(this,"pendingDeletions",new Set);u(this,"pendingStyles",new Map);u(this,"isDomDirty",!1);u(this,"isRunning",!1);u(this,"pendingMask",ye);u(this,"mutationTimer",null);u(this,"cssTimer",null);u(this,"resizeConfig");u(this,"resizeTimer",null);u(this,"isResizing",!1);u(this,"lastScrollX",0);u(this,"lastScrollY",0);u(this,"scrollTimer",null);u(this,"onBeforeRender",new Set);u(this,"onLayoutChange",new Set);u(this,"onStyleChange",new Set);u(this,"onScrollChange",new Set);u(this,"onRender",new Set);u(this,"onTransitionFinished",e=>{this.target.contains(e.target)&&this.mutationTimer===null&&(this.cssTimer&&clearTimeout(this.cssTimer),this.pendingStyles.size==0&&(this.pendingMask|=se|ge,this.cssTimer=window.setTimeout(()=>{this.isDomDirty=!0,this.cssTimer=null},50)))});u(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)});u(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=ye);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|=se,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,l;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:(l=r.delay)!=null?l:150,onStart:r.onStart,onEnd:r.onEnd},this.observer=new MutationObserver(s=>{let a=ye;for(const c of s)if(c.type==="childList")a|=we,c.removedNodes.length>0&&c.removedNodes.forEach(o=>{o instanceof HTMLElement&&this.pendingDeletions.add(o)});else if(c.type==="attributes")if(c.attributeName==="style"){a|=se|ge;const o=c.target,f=He(o.style);this.pendingStyles.set(o,f)}else c.attributeName==="class"?a|=se|ge:c.attributeName&&c.attributeName.startsWith("data-")&&(a|=se|ge,c.attributeName.startsWith("data-mirage")&&(a|=we));else c.type==="characterData"&&(a|=xe|se);if(a!==ye){if(this.pendingMask|=a,a&we){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,oe=2,N={BASE:0,SELECTED:1,getCaptureLayer:n=>31-n,HIDDEN:31},De=Object.values(_.VALUES);class Ae{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 l=i.offsetTop-r.offsetTop;return document.body.removeChild(t),l}}u(Ae,"cache",new Map);class We extends v.MeshBasicMaterial{constructor(t,r,i,l,s=2){super({transparent:!0,side:v.FrontSide,color:16777215});u(this,"canvas");u(this,"ctx");u(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,l)}wrapText(t,r){const i=t.split(`
2
- `),l=[];return i.forEach(s=>{const a=s.match(/[^\s\-]+\-?|\-|\s+/g)||[];if(a.length===0){l.push("");return}let c=a[0];for(let o=1;o<a.length;o++){const f=a[o];this.ctx.measureText(c+f).width<=r+2?c+=f:(c&&l.push(c),c=f.trimStart())}c&&l.push(c)}),l}updateText(t,r,i,l,s){s!==void 0&&(this.qualityFactor=s);const c=(window.devicePixelRatio||1)*this.qualityFactor,o=i*c,f=l*c;this.canvas.width!==o||this.canvas.height!==f?(this.canvas.width=o,this.canvas.height=f):this.ctx.clearRect(0,0,this.canvas.width,this.canvas.height),this.ctx.setTransform(c,0,0,c,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=Ae.getBaseline(r.font);h.forEach((g,D)=>{const m=D*d+p;let b=0;r.textAlign==="center"?b=i/2:r.textAlign==="right"&&(b=i),this.ctx.textAlign=r.textAlign,this.ctx.fillText(g,b,m)}),this.map&&(this.map.needsUpdate=!0)}dispose(){this.map&&this.map.dispose(),super.dispose()}}function ae(n,e=0){if(typeof n=="number")return n;const t=parseFloat(n)||0;return typeof n=="string"&&n.includes("%")?t/100*e:t}function ce(n){if(!n||n==="transparent")return{color:new v.Color(16777215),alpha:0};const e=n.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),l=e[4]!==void 0?parseFloat(e[4]):1;return{color:new v.Color(`rgb(${t}, ${r}, ${i})`),alpha:l}}return{color:new v.Color(n),alpha:1}}function ke(n){const e=[];let t="",r=0;for(let i=0;i<n.length;i++){const l=n[i];if(l==="(")r++;else if(l===")")r--;else if(l===","&&r===0){e.push(t.trim()),t="";continue}t+=l}return t&&e.push(t.trim()),e}function $e(n){if(!n||typeof n!="string"||!n.includes("linear-gradient"))return null;const e=n.match(/linear-gradient\((.*)\)/);if(!e)return null;const t=e[1],r=ke(t);let i=Math.PI,l=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),l=1;else if(s.endsWith("deg")||s.endsWith("rad")||s.endsWith("turn")){const c=parseFloat(s);s.endsWith("deg")?i=c*(Math.PI/180):s.endsWith("rad")?i=c:s.endsWith("turn")&&(i=c*Math.PI*2),l=1}const a=[];for(let c=l;c<r.length&&!(a.length>=8);c++){const o=r[c].trim(),f=o.lastIndexOf(" ");let h=o,d=null;if(f!==-1&&!o.endsWith(")")){const g=o.substring(f+1);(g.endsWith("%")||g.endsWith("px")||!isNaN(parseFloat(g)))&&(h=o.substring(0,f).trim(),d=g)}const p=ce(h);a.push({color:p.color,alpha:p.alpha,rawStop:d,stop:0})}if(a.length>0){for(let o=0;o<a.length;o++)a[o].rawStop!==null&&(a[o].stop=parseFloat(a[o].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 c=0;for(let o=1;o<a.length;o++)if(a[o].rawStop!==null||o===a.length-1){const f=o-c;if(f>1){const h=a[c].stop,p=(a[o].stop-h)/f;for(let g=1;g<f;g++)a[c+g].stop=h+p*g}c=o}}return{angle:i,stops:a}}function Ge(n){if(!n||n==="none")return null;const e=ke(n);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 l="transparent",s=t;if(i&&i[1]!=="inset"){const p=i[1];(p.startsWith("rgb")||p.startsWith("#")||p==="black"||p==="white"||p==="transparent")&&(l=p,s=t.replace(p,"").trim())}s=s.replace("inset","").trim();const a=s.split(/\s+/).map(p=>parseFloat(p)||0),c=a[0]||0,o=a[1]||0,f=a[2]||0,h=a[3]||0,d=ce(l);return{offsetX:c,offsetY:o,blurRadius:f,spreadRadius:h,color:d.color,alpha:d.alpha}}const qe=`varying vec2 vUv;
1
+ (function(v,b){typeof exports=="object"&&typeof module!="undefined"?b(exports,require("three")):typeof define=="function"&&define.amd?define(["exports","three"],b):(v=typeof globalThis!="undefined"?globalThis:v||self,b(v.MirageEngine={},v.THREE))})(this,function(v,b){"use strict";var qe=Object.defineProperty,Ve=Object.defineProperties;var Ze=Object.getOwnPropertyDescriptors;var le=Object.getOwnPropertySymbols;var Pe=Object.prototype.hasOwnProperty,$e=Object.prototype.propertyIsEnumerable;var XA=(v,b,M)=>b in v?qe(v,b,{enumerable:!0,configurable:!0,writable:!0,value:M}):v[b]=M,CA=(v,b)=>{for(var M in b||(b={}))Pe.call(b,M)&&XA(v,M,b[M]);if(le)for(var M of le(b))$e.call(b,M)&&XA(v,M,b[M]);return v},he=(v,b)=>Ve(v,Ze(b));var l=(v,b,M)=>(XA(v,typeof b!="symbol"?b+"":b,M),M);var nA=(v,b,M)=>new Promise((d,V)=>{var pA=AA=>{try{iA(M.next(AA))}catch(BA){V(BA)}},gA=AA=>{try{iA(M.throw(AA))}catch(BA){V(BA)}},iA=AA=>AA.done?d(AA.value):Promise.resolve(AA.value).then(pA,gA);iA((M=M.apply(v,b)).next())});function M(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 d=M(b),V=5,pA=0,gA=1,iA=2,AA=3,BA=4,JA={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"}},zA={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"},J={NAME:"data-mirage-travel",KEY:"mirageTravel",VALUES:zA,MAX_LAYERS:Object.keys(zA).length-1},Z={NAME:"data-mirage-filter",KEY:"mirageFilter",VALUES:JA},eA={NAME:"data-mirage-select",KEY:"mirageSelect",VALUES:JA},Ce={NAME:"data-mirage-shader",KEY:"mirageShader"},_A={NAME:"data-mirage-sandwich",KEY:"mirageSandwich",VALUES:{FRONT:"front"}},MA=0,cA=1,mA=2,Be=4,RA=8,FA=16;function de(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 Ee(t){const A={};if(t.opacity&&(A.opacity=parseFloat(t.opacity)),t.backgroundColor){const e=de(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 WA{constructor(A,e){l(this,"target");l(this,"observer");l(this,"pendingDeletions",new Set);l(this,"pendingStyles",new Map);l(this,"isDomDirty",!1);l(this,"isRunning",!1);l(this,"pendingMask",MA);l(this,"mutationTimer",null);l(this,"cssTimer",null);l(this,"resizeConfig");l(this,"resizeTimer",null);l(this,"isResizing",!1);l(this,"lastScrollX",0);l(this,"lastScrollY",0);l(this,"scrollTimer",null);l(this,"onBeforeRender",new Set);l(this,"onLayoutChange",new Set);l(this,"onStyleChange",new Set);l(this,"onScrollChange",new Set);l(this,"onRender",new Set);l(this,"onTransitionFinished",A=>{this.target.contains(A.target)&&this.mutationTimer===null&&(this.cssTimer&&clearTimeout(this.cssTimer),this.pendingStyles.size==0&&(this.pendingMask|=cA|mA,this.cssTimer=window.setTimeout(()=>{this.isDomDirty=!0,this.cssTimer=null},50)))});l(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)});l(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=MA);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|=cA,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 i,o;this.target=A;const s=(i=e.resizeDebounce)!=null?i:!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(r=>{let n=MA;for(const g of r)if(g.type==="childList")n|=RA,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|=cA|mA;const a=g.target,I=Ee(a.style);this.pendingStyles.set(a,I)}else g.attributeName==="class"?n|=cA|mA:g.attributeName&&g.attributeName.startsWith("data-")&&(n|=cA|mA,g.attributeName.startsWith("data-mirage")&&(n|=RA));else g.type==="characterData"&&(n|=FA|cA);if(n!==MA){if(this.pendingMask|=n,n&RA){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 P=1,dA=2,T={BASE:0,SELECTED:1,getCaptureLayer:t=>31-t,HIDDEN:31},OA=Object.values(Z.VALUES);class jA{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"),i=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",i.width=1,i.height=1,i.style.verticalAlign="baseline",s.appendChild(document.createTextNode("Hidden Text")),e.appendChild(s),e.appendChild(i),document.body.appendChild(e);const o=i.offsetTop-s.offsetTop;return document.body.removeChild(e),o}}l(jA,"cache",new Map);class Qe extends d.MeshBasicMaterial{constructor(e,s,i,o,r=2){super({transparent:!0,side:d.FrontSide,color:16777215});l(this,"canvas");l(this,"ctx");l(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=r,this.map=new d.CanvasTexture(this.canvas),this.map.colorSpace=d.LinearSRGBColorSpace,this.map.minFilter=d.LinearFilter,this.map.magFilter=d.LinearFilter,this.updateText(e,s,i,o)}wrapText(e,s){const i=e.split(`
2
+ `),o=[];return i.forEach(r=>{const n=r.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,i,o,r){r!==void 0&&(this.qualityFactor=r);const g=(window.devicePixelRatio||1)*this.qualityFactor,a=i*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,i),h=s.lineHeight,B=jA.getBaseline(s.font);c.forEach((C,w)=>{const Q=w*h+B;let R=0;s.textAlign==="center"?R=i/2:s.textAlign==="right"&&(R=i),this.ctx.textAlign=s.textAlign,this.ctx.fillText(C,R,Q)}),this.map&&(this.map.needsUpdate=!0)}dispose(){this.map&&this.map.dispose(),super.dispose()}}function EA(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 QA(t){if(!t||t==="transparent")return{color:new d.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),i=parseInt(A[3],10),o=A[4]!==void 0?parseFloat(A[4]):1;return{color:new d.Color(`rgb(${e}, ${s}, ${i})`),alpha:o}}return{color:new d.Color(t),alpha:1}}function KA(t){const A=[];let e="",s=0;for(let i=0;i<t.length;i++){const o=t[i];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 ue(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=KA(e);let i=Math.PI,o=0;const r=s[0].trim();if(r.startsWith("to "))r==="to top"?i=0:r==="to right"?i=Math.PI/2:r==="to bottom"?i=Math.PI:r==="to left"?i=Math.PI*1.5:r==="to top right"||r==="to right top"?i=Math.PI/4:r==="to bottom right"||r==="to right bottom"?i=Math.PI*.75:r==="to bottom left"||r==="to left bottom"?i=Math.PI*1.25:(r==="to top left"||r==="to left top")&&(i=Math.PI*1.75),o=1;else if(r.endsWith("deg")||r.endsWith("rad")||r.endsWith("turn")){const g=parseFloat(r);r.endsWith("deg")?i=g*(Math.PI/180):r.endsWith("rad")?i=g:r.endsWith("turn")&&(i=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,h=null;if(I!==-1&&!a.endsWith(")")){const C=a.substring(I+1);(C.endsWith("%")||C.endsWith("px")||!isNaN(parseFloat(C)))&&(c=a.substring(0,I).trim(),h=C)}const B=QA(c);n.push({color:B.color,alpha:B.alpha,rawStop:h,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 C=1;C<I;C++)n[g+C].stop=c+B*C}g=a}}return{angle:i,stops:n}}function fe(t){if(!t||t==="none")return null;const A=KA(t);if(A.length===0)return null;const e=A[0].trim(),s=/(rgba?\([^)]+\)|#[0-9a-fA-F]+|[a-zA-Z]+)/,i=e.match(s);let o="transparent",r=e;if(i&&i[1]!=="inset"){const B=i[1];(B.startsWith("rgb")||B.startsWith("#")||B==="black"||B==="white"||B==="transparent")&&(o=B,r=e.replace(B,"").trim())}r=r.replace("inset","").trim();const n=r.split(/\s+/).map(B=>parseFloat(B)||0),g=n[0]||0,a=n[1]||0,I=n[2]||0,c=n[3]||0,h=QA(o);return{offsetX:g,offsetY:a,blurRadius:I,spreadRadius:c,color:h.color,alpha:h.alpha}}const we=`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
- }`,je=`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
- `,Ke=`uniform sampler2D uTexture;
167
+ `,me=`uniform sampler2D uTexture;
168
168
  varying vec4 vScreenPos;
169
169
  uniform vec2 uTextureRepeat;
170
- uniform vec2 uTextureOffset;`,Je=`vec2 screenUv = (vScreenPos.xy / vScreenPos.w) * 0.5 + 0.5;
170
+ uniform vec2 uTextureOffset;`,ye=`vec2 screenUv = (vScreenPos.xy / vScreenPos.w) * 0.5 + 0.5;
171
171
  vec2 resultUv = screenUv;
172
172
 
173
- `,Ze=`vec4 texColor = texture2D(uTexture, resultUv);
174
- baseColor = blendSrcOver(baseColor, texColor);`,Ie={vertexShader:qe,fragmentShader:je},Oe={declChunk:Ke,uvChunk:Je,baseColorChunk:Ze};function Qe(n,e,t,r=null,i){var C;const l=r!==null||!!n.imageSrc;let s="";const a={};if(i!=null&&i.uniforms)for(const[w,S]of Object.entries(i.uniforms))typeof S=="number"?(s+=`uniform float ${w};
175
- `,a[w]={value:S}):Array.isArray(S)?S.length===2?(s+=`uniform vec2 ${w};
176
- `,a[w]={value:new v.Vector2(...S)}):S.length===3?(s+=`uniform vec3 ${w};
177
- `,a[w]={value:new v.Vector3(...S)}):S.length===4&&(s+=`uniform vec4 ${w};
178
- `,a[w]={value:new v.Vector4(...S)}):S&&typeof S=="object"&&S.type?(s+=`uniform ${S.type} ${w};
179
- `,a[w]=S):(s+=`uniform float ${w};
180
- `,a[w]={value:S});const c=i!==void 0,o=(l||c?Oe.declChunk:"")+`
181
- `+s,f=`vec2 screenUv = (vScreenPos.xy / vScreenPos.w) * 0.5 + 0.5;
182
- `,h=n.isTraveler?`vec2 resultUv = screenUv;
173
+ `,Se=`vec4 texColor = texture2D(uTexture, resultUv);
174
+ baseColor = blendSrcOver(baseColor, texColor);`,qA={vertexShader:we,fragmentShader:pe},VA={declChunk:me,uvChunk:ye,baseColorChunk:Se};function De(t,A,e,s=null,i){var z;const o=s!==null||!!t.imageSrc;let r="";const n={};if(i!=null&&i.uniforms)for(const[D,S]of Object.entries(i.uniforms))typeof S=="number"?(r+=`uniform float ${D};
175
+ `,n[D]={value:S}):Array.isArray(S)?S.length===2?(r+=`uniform vec2 ${D};
176
+ `,n[D]={value:new d.Vector2(...S)}):S.length===3?(r+=`uniform vec3 ${D};
177
+ `,n[D]={value:new d.Vector3(...S)}):S.length===4&&(r+=`uniform vec4 ${D};
178
+ `,n[D]={value:new d.Vector4(...S)}):S&&typeof S=="object"&&S.type?(r+=`uniform ${S.type} ${D};
179
+ `,n[D]=S):(r+=`uniform float ${D};
180
+ `,n[D]={value:S});const g=i!==void 0,a=(o||g?VA.declChunk:"")+`
181
+ `+r,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=l||c?f+h+((i==null?void 0:i.uvModifier)||""):"",p=l||c?Oe.baseColorChunk:"",g=(i==null?void 0:i.colorModifier)||"",D=Ie.fragmentShader.replace("#INJECT_DECLARATIONS",o).replace("#INJECT_UV_MODIFIER",d).replace("#INJECT_BASE_COLOR",p).replace("#INJECT_COLOR_MODIFIER",g),m=ce(n.backgroundColor),b=ce(n.borderColor),E={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(b.color.r,b.color.g,b.color.b,b.alpha)},uBorderRadius:{value:new v.Vector4(0,0,0,0)},uBorderWidth:{value:ae(n.borderWidth)},uOpacity:{value:(C=n.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(E.uBorderRadius.value,n.borderRadius,Math.min(e,t)),l&&(E.uTexture.value=r);const I=new v.ShaderMaterial({uniforms:ne(ne({},E),a),vertexShader:Ie.vertexShader,fragmentShader:D,transparent:!0,side:v.FrontSide});return n.backgroundImage&&Se(I,{backgroundImage:n.backgroundImage}),I}function et(n,e,t,r,i){const l=ae(e.borderWidth);Se(n,{width:t,height:r,borderRadius:e.borderRadius,borderWidth:l,backgroundColor:e.backgroundColor,borderColor:e.borderColor,opacity:e.opacity,texture:i,backgroundImage:e.backgroundImage,boxShadow:e.boxShadow})}function Se(n,e){var r,i,l;if(e.boxShadow!==void 0){const s=Ge(e.boxShadow);s?(n.uniforms.uShadowColor.value.set(s.color.r,s.color.g,s.color.b,s.alpha),n.uniforms.uShadowOffset.value.set(s.offsetX,s.offsetY),n.uniforms.uShadowBlur.value=s.blurRadius,n.uniforms.uShadowSpread.value=s.spreadRadius,n.userData.shadowPadding=s.blurRadius+s.spreadRadius+Math.max(Math.abs(s.offsetX),Math.abs(s.offsetY))):(n.uniforms.uShadowColor.value.w=0,n.userData.shadowPadding=0)}if(e.width!==void 0&&e.height!==void 0&&n.uniforms.uSize.value.set(e.width,e.height),n.uniforms.uMeshSize){const s=n.userData.shadowPadding||0,a=e.width!==void 0?e.width:n.uniforms.uSize.value.x,c=e.height!==void 0?e.height:n.uniforms.uSize.value.y;n.uniforms.uMeshSize.value.set(a+s*2,c+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(n.uniforms.uSize.value.x,n.uniforms.uSize.value.y);Be(n.uniforms.uBorderRadius.value,e.borderRadius,s)}if(e.borderWidth!==void 0&&(n.uniforms.uBorderWidth.value=e.borderWidth),e.backgroundColor!==void 0)if(Array.isArray(e.backgroundColor)){const s=e.backgroundColor[3]!==void 0?e.backgroundColor[3]:n.uniforms.uBgColor.value.w;n.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);n.uniforms.uBgColor.value.set(s.color.r,s.color.g,s.color.b,s.alpha)}else{const s=n.uniforms.uBgColor.value.w;n.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=n.uniforms.uBorderColor.value.w;n.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);n.uniforms.uBorderColor.value.set(s.color.r,s.color.g,s.color.b,s.alpha)}else{const s=n.uniforms.uBorderColor.value.w;n.uniforms.uBorderColor.value.set(e.borderColor.r,e.borderColor.g,e.borderColor.b,s)}e.opacity!==void 0&&(n.uniforms.uOpacity.value=e.opacity),e.bgOpacity!==void 0&&(n.uniforms.uBgColor.value.w=e.bgOpacity),e.borderOpacity!==void 0&&(n.uniforms.uBorderColor.value.w=e.borderOpacity),n.uniforms.uTexture&&e.texture!==void 0&&(n.uniforms.uTexture.value=e.texture);const t=e.texture!==void 0?e.texture:(r=n.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,c=(i=e.width)!=null?i:n.uniforms.uSize.value.x,o=(l=e.height)!=null?l:n.uniforms.uSize.value.y;if(s&&a&&c&&o){const f=s/a,h=c/o;if(f>h){const d=h/f;n.uniforms.uTextureRepeat.value.set(d,1),n.uniforms.uTextureOffset.value.set((1-d)/2,0)}else{const d=f/h;n.uniforms.uTextureRepeat.value.set(1,d),n.uniforms.uTextureOffset.value.set(0,(1-d)/2)}}}else n.uniforms.uTextureRepeat&&(n.uniforms.uTextureRepeat.value.set(1,1),n.uniforms.uTextureOffset.value.set(0,0));if(e.backgroundImage!==void 0){const s=$e(e.backgroundImage);if(s){n.uniforms.uGradientCount.value=s.stops.length,n.uniforms.uGradientAngle.value=s.angle;for(let a=0;a<8;a++)if(a<s.stops.length){const c=s.stops[a];n.uniforms.uGradientColors.value[a].set(c.color.r,c.color.g,c.color.b,c.alpha),n.uniforms.uGradientStops.value[a]=c.stop}else n.uniforms.uGradientColors.value[a].set(0,0,0,0),n.uniforms.uGradientStops.value[a]=1}else n.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"&&n.uniforms[s]!==void 0&&(n.uniforms[s].value!==void 0&&n.uniforms[s].value!==null&&typeof n.uniforms[s].value.set=="function"?Array.isArray(e[s])?n.uniforms[s].value.set(...e[s]):e[s]!==void 0&&(e[s].copy?n.uniforms[s].value.copy(e[s]):n.uniforms[s].value=e[s]):n.uniforms[s].value=e[s])}function Be(n,e,t=0){var c,o,f,h;if(e==null){n.set(0,0,0,0);return}if(typeof e=="number"){n.set(e,e,e,e);return}if(Array.isArray(e)){n.set(e[0],e[1],e[2],e[3]);return}const r=e.split("/")[0].trim().split(/\s+/),i=ae(r[0],t),l=ae((c=r[1])!=null?c:r[0],t),s=ae((o=r[2])!=null?o:r[0],t),a=ae((h=(f=r[3])!=null?f:r[1])!=null?h:r[0],t);n.set(i,l,s,a)}const W={create(n,e,t,r,i,l=2,s=null,a){return n==="BOX"?Qe(e,r,i,s,a):n==="TEXT"?new We(t||"",e,r,i,l):new v.MeshBasicMaterial({visible:!1})},update(n,e,t,r,i,l,s=2,a){e==="BOX"?et(n,t,i,l,a):e==="TEXT"&&n.updateText(r||"",t,i,l,s)},forceUpdateUniforms(n,e){Se(n,e)}};class tt{constructor(e,t=!0){u(this,"observer");u(this,"textures",new WeakMap);u(this,"loadStatus",new WeakMap);u(this,"elementUrls",new WeakMap);u(this,"onUpdate");this.onUpdate=e,t&&(this.observer=new IntersectionObserver(r=>{for(const i of r){const l=i.target;i.isIntersecting?this.loadTexture(l):this.disposeTexture(l)}},{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 Xe(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((l,s)=>{const a=new Image;a.onload=()=>l(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 rt{constructor(e,t,r,i){u(this,"canvas");u(this,"scene");u(this,"camera");u(this,"renderer");u(this,"renderTargets",[]);u(this,"renderOrder",0);u(this,"qualityFactor",2);u(this,"mode","overlay");u(this,"canvasSize","viewport");u(this,"clipArea",1);u(this,"targetLayer","base");u(this,"overscan",200);u(this,"target");u(this,"mountContainer");u(this,"registry");u(this,"targetRect");u(this,"travelersByLayer",Array.from({length:F.MAX_LAYERS},()=>new Set));u(this,"textureManager");u(this,"fixedMeshes",new Set);var a,c,o,f,h;this.target=e,this.mountContainer=r,this.registry=i,this.mode=(a=t.mode)!=null?a:"overlay",this.canvasSize=(c=t.canvasSize)!=null?c:"viewport",this.clipArea=(o=t.travelerClipArea)!=null?o:1,this.targetLayer=(f=t.layer)!=null?f:"base",this.textureManager=new tt((d,p)=>{const g=this.registry.get(d);g&&g.material instanceof v.ShaderMaterial&&W.forceUpdateUniforms(g.material,{texture:p})},this.isViewport),this.canvas=document.createElement("canvas"),this.scene=new v.Scene,this.targetRect=this.target.getBoundingClientRect();const l=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(l/-2,l/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(l,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&&W.forceUpdateUniforms(i.material,t)}),r.userData.nativeMesh&&r.userData.nativeMesh.traverse(i=>{i.isMesh&&i.material&&W.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,l=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,c=Math.abs(i-s)>.1||Math.abs(l-a)>.1,o=this.mode==="overlay"&&(Math.abs(r.top-this.targetRect.top)>.1||Math.abs(r.left-this.targetRect.left)>.1);c?(this.targetRect=r,this.setSize(i,l),this.updateCanvasLayout()):o?(this.targetRect=r,this.updateCanvasLayout()):this.targetRect=r,this.renderOrder=0,this.reconcileNode(e),t.size>0&&t.forEach(f=>{const h=this.registry.get(f);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(f),this.textureManager.unregister(f)}})}reconcileNode(e){var i,l;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),c=W.create("BOX",e.styles,"",e.rect.width,e.rect.height,this.qualityFactor,a,e.shaderHooks);t=new v.Mesh(s,c),e.type==="TEXT"&&(t.name="BG_MESH"),this.scene.add(t),this.registry.register(e.element,t),t.userData.baseMaterial=c,t.userData.domElement=e.element,t.userData.shaderHash=r}if(t.userData.clipElements=e.clipElements,(l=e.nativeStyles)!=null&&l.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 o;const i=t.textLines||[{text:t.textContent||"",rect:t.rect}],l=r?t.nativeStyles:t.textStyles,s=JSON.stringify(l)+t.textContent+i.map(f=>f.text).join("|"),a=(o=e.userData)==null?void 0:o.textChildStyleHash;if(t.dirtyMask&xe||s!==a){e.children.filter(g=>g.name.startsWith("TEXT_CHILD")).forEach(g=>{var m;const D=g;(m=D.material.map)==null||m.dispose(),D.geometry.dispose(),e.remove(D)});const h=t.rect,d=h.x+h.width/2,p=h.y+h.height/2;i.forEach((g,D)=>{const m=W.create("TEXT",l,g.text,g.rect.width,g.rect.height,this.qualityFactor),b=new v.PlaneGeometry(1,1),E=new v.Mesh(b,m);E.name=`TEXT_CHILD_${D}`;const I=t.rect.width===0?1:g.rect.width/t.rect.width,C=t.rect.height===0?1:g.rect.height/t.rect.height;E.scale.set(I,C,1);const w=g.rect.x+g.rect.width/2,S=g.rect.y+g.rect.height/2,H=w-d,$=-(S-p);E.position.set(t.rect.width===0?0:H/t.rect.width,t.rect.height===0?0:$/t.rect.height,.005),e.add(E)}),e.userData.textChildStyleHash=s}e.children.forEach(f=>{if(!f.name.startsWith("TEXT_CHILD"))return;const h=f;if(r&&t.nativeLayer!==void 0)h.layers.set(N.HIDDEN),t.visibility&j&&h.layers.enable(N.getCaptureLayer(t.nativeLayer));else{const d=t.visibility&j?N.BASE:N.HIDDEN;if(h.layers.set(d),t.visibility&oe&&h.layers.enable(N.SELECTED),t.visibility&j)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,w,S,H,$;const{rect:r,styles:i}=t,l=this.renderer.getPixelRatio(),s=this.renderer.domElement.width/l,a=this.renderer.domElement.height/l;e.material=e.userData.baseMaterial;let c=((C=e.material.userData)==null?void 0:C.shadowPadding)||0;e.scale.set(r.width+c*2,r.height+c*2,1),e.userData.domRect={x:r.x,y:r.y,width:r.width,height:r.height};const o=.001;this.renderOrder++;const f=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 z=r.x-f,O=r.y-h;d=z-s/2+r.width/2,p=-O+a/2-r.height/2}e.position.set(d,p,i.zIndex+this.renderOrder*o);const g=r.x,D=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:g,y:D},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,b=window.getComputedStyle(m);let E=0,I=0;if(b.transform&&b.transform!=="none"){const z=new DOMMatrix(b.transform);E=z.m41,I=z.m42}if(e.userData.baseTransform={x:E,y:I},delete e.userData.originRatioX,delete e.userData.originRatioY,W.update(e.userData.baseMaterial,"BOX",i,"",r.width,r.height,this.qualityFactor,t.isTraveler?(w=this.renderTargets[t.captureLayer-2])==null?void 0:w.texture:this.textureManager.get(t.element)),t.nativeStyles&&t.nativeRect){if(!e.userData.nativeMesh){const X=W.create("BOX",t.nativeStyles,"",t.nativeRect.width,t.nativeRect.height,this.qualityFactor,t.isTraveler?(S=this.renderTargets[t.captureLayer-2])==null?void 0:S.texture:this.textureManager.get(t.element),t.shaderHooks),G=new v.Mesh(e.geometry,X);t.type==="TEXT"&&(G.name="BG_MESH"),this.scene.add(G),e.userData.nativeMesh=G}const z=e.userData.nativeMesh;let O,Q;if(this.isViewport)O=t.nativeRect.x-window.innerWidth/2+t.nativeRect.width/2,Q=-t.nativeRect.y+window.innerHeight/2-t.nativeRect.height/2;else{const X=t.nativeRect.x-f,G=t.nativeRect.y-h;O=X-s/2+t.nativeRect.width/2,Q=-G+a/2-t.nativeRect.height/2}let te=t.nativeRect.width,re=t.nativeRect.height,M=O,V=Q;if(t.nativeStyles.transform){const X=t.nativeStyles.transform,G=X.match(/scale\(([\d.]+%?)\)/);if(G){let x=parseFloat(G[1]);G[1].includes("%")&&(x/=100),te*=x,re*=x}const le=X.match(/scaleX\(([\d.]+%?)\)/);if(le){let x=parseFloat(le[1]);le[1].includes("%")&&(x/=100),te*=x}const he=X.match(/scaleY\(([\d.]+%?)\)/);if(he){let x=parseFloat(he[1]);he[1].includes("%")&&(x/=100),re*=x}const de=X.match(/translate\(([^,]+),\s*([^)]+)\)/);if(de){const x=de[1].trim(),T=de[2].trim();let Y=parseFloat(x);x.includes("%")&&(Y=Y/100*t.nativeRect.width);let A=parseFloat(T);T.includes("%")&&(A=A/100*t.nativeRect.height),M+=Y,V-=A}const pe=X.match(/translateX\(([^)]+)\)/);if(pe){const x=pe[1].trim();let T=parseFloat(x);x.includes("%")&&(T=T/100*t.nativeRect.width),M+=T}const y=X.match(/translateY\(([^)]+)\)/);if(y){const x=y[1].trim();let T=parseFloat(x);x.includes("%")&&(T=T/100*t.nativeRect.height),V-=T}}let ee=((H=z.material.userData)==null?void 0:H.shadowPadding)||0;z.scale.set(te+ee*2,re+ee*2,1),z.position.set(M,V,t.nativeStyles.zIndex+this.renderOrder*o),W.update(z.material,"BOX",t.nativeStyles,"",t.nativeRect.width,t.nativeRect.height,this.qualityFactor,t.isTraveler?($=this.renderTargets[t.captureLayer-2])==null?void 0:$.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&j?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&j){i.layers.enable(N.getCaptureLayer(t.nativeLayer));for(let l=t.captureLayer;l<=F.MAX_LAYERS+1;l++)l!==t.nativeLayer&&e.layers.enable(N.getCaptureLayer(l))}}else if(t.visibility&j)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,l=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,c=this.isViewport?window.innerHeight+this.overscan*2:this.targetRect.height,o=this.renderer.getPixelRatio();for(const f of e){s.setFromMatrixPosition(f.matrixWorld),s.project(this.camera);const h=(s.x+1)/2*a,d=(s.y+1)/2*c;let p=0,g=1;typeof this.clipArea=="number"?g=this.clipArea:this.clipArea.endsWith("%")?g=parseFloat(this.clipArea)/100:this.clipArea.endsWith("px")&&(p=parseFloat(this.clipArea));const D=f.scale.x*g+.5,m=f.scale.y*g+.5,b=h-D/2,E=d-m/2,I=(b*this.qualityFactor-p)/o,C=(E*this.qualityFactor-p)/o,w=(D*this.qualityFactor+p*2)/o,S=(m*this.qualityFactor+p*2)/o;this.renderer.setScissor(I,C,w,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(i,l)}render(){for(let c=0;c<F.MAX_LAYERS;c++){const o=c+1;this.captureRenderTarget(this.travelersByLayer[c],N.getCaptureLayer(o),this.renderTargets[c])}const e=this.renderer.getContext(),t=this.renderer.getPixelRatio(),r=this.renderer.domElement.height/t,i=this.renderer.domElement,l=i.getBoundingClientRect().top,s=i.getBoundingClientRect().left,a=(c,o)=>{if(o&&o.width>0&&o.height>0){const f=Math.floor((o.x-s)*t),h=Math.floor((r-(o.y-l+o.height))*t),d=Math.ceil(o.width*t),p=Math.ceil(o.height*t);c.onBeforeRender=()=>{e.enable(e.SCISSOR_TEST),e.scissor(f,h,d,p)},c.onAfterRender=()=>{e.disable(e.SCISSOR_TEST)},c.__hasScissorHook=!0}else c.__hasScissorHook&&(c.onBeforeRender=()=>{},c.onAfterRender=()=>{},c.__hasScissorHook=!1)};this.scene.children.forEach(c=>{var h;const o=c,f=(h=o.userData)==null?void 0:h.scissorRect;a(o,f),o.children.forEach(d=>{d.name.startsWith("TEXT_CHILD")&&a(d,f)})}),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,l=this.renderer.domElement.height/r;this.scene.children.forEach(s=>{var h,d;const a=s;if(!a.userData||!a.userData.domElement)return;const c=a.userData.domElement;if(!c.isConnected)return;let o;if(c.nodeType===Node.TEXT_NODE){const p=document.createRange();p.selectNode(c),o=p.getBoundingClientRect()}else o=c.getBoundingClientRect();const f=a.userData.domRect;if(!f||Math.abs(o.x-f.x)>.5||Math.abs(o.y-f.y)>.5||Math.abs(o.width-f.width)>.5||Math.abs(o.height-f.height)>.5){a.userData.domRect={x:o.x,y:o.y,width:o.width,height:o.height};const p=a.userData.clipElements;if(p&&p.length>0){let b=-1/0,E=-1/0,I=1/0,C=1/0;for(const w of p){const S=w.getBoundingClientRect();b=Math.max(b,S.left),E=Math.max(E,S.top),I=Math.min(I,S.right),C=Math.min(C,S.bottom)}a.userData.scissorRect={x:b,y:E,width:Math.max(0,I-b),height:Math.max(0,C-E)}}else a.userData.scissorRect=void 0;let g,D;if(this.isViewport)g=o.x-window.innerWidth/2+o.width/2,D=-o.y+window.innerHeight/2-o.height/2;else{const b=o.x-e,E=o.y-t;g=b-i/2+o.width/2,D=-E+l/2-o.height/2}a.position.setX(g),a.position.setY(D);let m=((h=a.material.userData)==null?void 0:h.shadowPadding)||0;if(a.scale.set(o.width+m*2,o.height+m*2,1),a.updateMatrixWorld(),a.material instanceof v.ShaderMaterial&&W.forceUpdateUniforms(a.material,{width:o.width,height:o.height}),a.userData.nativeMesh){const b=a.userData.nativeMesh;let E=o.width,I=o.height,C=g,w=D;if(a.userData.nativeTransform){const H=a.userData.nativeTransform,$=H.match(/scale\(([\d.]+%?)\)/);if($){let M=parseFloat($[1]);$[1].includes("%")&&(M/=100),E*=M,I*=M}const z=H.match(/scaleX\(([\d.]+%?)\)/);if(z){let M=parseFloat(z[1]);z[1].includes("%")&&(M/=100),E*=M}const O=H.match(/scaleY\(([\d.]+%?)\)/);if(O){let M=parseFloat(O[1]);O[1].includes("%")&&(M/=100),I*=M}const Q=H.match(/translate\(([^,]+),\s*([^)]+)\)/);if(Q){const M=Q[1].trim(),V=Q[2].trim();let ee=parseFloat(M);M.includes("%")&&(ee=ee/100*o.width);let X=parseFloat(V);V.includes("%")&&(X=X/100*o.height),C+=ee,w-=X}const te=H.match(/translateX\(([^)]+)\)/);if(te){const M=te[1].trim();let V=parseFloat(M);M.includes("%")&&(V=V/100*o.width),C+=V}const re=H.match(/translateY\(([^)]+)\)/);if(re){const M=re[1].trim();let V=parseFloat(M);M.includes("%")&&(V=V/100*o.height),w-=V}}let S=((d=b.material.userData)==null?void 0:d.shadowPadding)||0;b.position.setX(C),b.position.setY(w),b.scale.set(E+S*2,I+S*2,1),b.updateMatrixWorld(),b.material instanceof v.ShaderMaterial&&W.forceUpdateUniforms(b.material,{width:E,height:I})}}})}}function it(n){const e=n.textContent||"",t=[];let r="",i=null,l=-1;const s=(o,f)=>{for(let h=0;h<o.length;h++){const d=o[h],p=document.createRange();p.setStart(n,f+h),p.setEnd(n,f+h+1);const g=p.getBoundingClientRect();if(g.width===0&&g.height===0){r+=d;continue}l===-1||Math.abs(g.top-l)>g.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:g.left,top:g.top,right:g.right,bottom:g.bottom},l=g.top):(r+=d,i&&(i.left=Math.min(i.left,g.left),i.top=Math.min(i.top,g.top),i.right=Math.max(i.right,g.right),i.bottom=Math.max(i.bottom,g.bottom)))}},a=e.match(/[^\s\-]+\-?|\-|\s+/g)||[];let c=0;for(const o of a){const f=document.createRange();f.setStart(n,c),f.setEnd(n,c+o.length);const h=f.getClientRects();if(h.length>1)s(o,c);else{const d=h.length===1?h[0]:f.getBoundingClientRect();if(d.width===0&&d.height===0){r+=o,c+=o.length;continue}l===-1||Math.abs(d.top-l)>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=o,i={left:d.left,top:d.top,right:d.right,bottom:d.bottom},l=d.top):(r+=o,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)))}c+=o.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(o=>o.text.trim().length>0&&o.rect.width>0&&o.rect.height>0)}function Ue(n){const e=parseFloat(n.fontSize);let t=parseFloat(n.lineHeight);isNaN(t)&&(t=e*1.2);let r=parseFloat(n.letterSpacing);return isNaN(r)&&(r=0),{font:`${n.fontStyle} ${n.fontWeight} ${n.fontSize} ${n.fontFamily}`,fontSize:n.fontSize,color:n.color,textAlign:n.textAlign||"start",textBaseline:"alphabetic",direction:n.direction||"inherit",lineHeight:t,letterSpacing:r}}function _e(n,e=se|ge|Ye|xe|we,t,r=1,i=0,l=2,s,a,c){var ee,X,G,le,he,de,pe;if(n.nodeType===Node.TEXT_NODE){const y=n;if(!y.textContent||!y.textContent.trim())return null;const x=y.textContent.replace(/\s+/g," ");if(x.length===0)return null;const T=it(y);if(T.length===0)return null;const Y=y.parentElement,A=Y?window.getComputedStyle(Y):null;if(!A)return null;const Z=Math.min(...T.map(R=>R.rect.left)),q=Math.min(...T.map(R=>R.rect.top)),ie=Math.max(...T.map(R=>R.rect.left+R.rect.width)),B=Math.max(...T.map(R=>R.rect.top+R.rect.height));return{id:Math.random().toString(36).substring(2,9),type:"TEXT",element:y,rect:{x:Z+window.scrollX,y:q+window.scrollY,width:ie-Z,height:B-q},styles:{backgroundColor:"transparent",backgroundImage:"",opacity:Y&&Y.dataset[J.KEY]===J.VALUES.HIDE?1:parseFloat(A.opacity),zIndex:(isNaN(parseInt(A.zIndex))?0:parseInt(A.zIndex))+i,borderRadius:"0px",borderColor:"transparent",borderWidth:"0px",isTraveler:!1},textContent:x,textLines:T.map(R=>({text:R.text.trim(),rect:{x:R.rect.left+window.scrollX,y:R.rect.top+window.scrollY,width:R.rect.width,height:R.rect.height}})),textStyles:Ue(A),dirtyMask:e,visibility:t,isTraveler:!1,captureLayer:r,isFixed:A.position==="fixed",nativeLayer:s,nativeStyles:a?ne(ne({backgroundColor:"transparent",backgroundImage:"",opacity:Y&&Y.dataset[J.KEY]===J.VALUES.HIDE?1:parseFloat(A.opacity),zIndex:(isNaN(parseInt(A.zIndex))?0:parseInt(A.zIndex))+i,borderRadius:"0px",borderColor:"transparent",borderWidth:"0px",isTraveler:!1},Ue(A)),a):void 0,nativeRect:a?{x:Z+window.scrollX,y:q+window.scrollY,width:ie-Z,height:B-q}:void 0,clipElements:c,children:[]}}if(n.nodeType!==Node.ELEMENT_NODE)return null;const o=n,f=o.dataset[_.KEY];let h=t,d=t;if(f){const y=new Set(f.split(/\s+/));for(const x of y)if(!De.includes(x))throw new Error(`[MirageEngine] Invalid filter token: '${x}'. Expected one of: 'include-tree', 'exclude-tree', 'include-self', 'exclude-self', 'end'.`);if(y.has(_.VALUES.END))return null;if(y.has(_.VALUES.INCLUDE_TREE)&&y.has(_.VALUES.EXCLUDE_TREE))throw new Error("[MirageEngine] Conflicting filters: 'include-tree' and 'exclude-tree' cannot be used together on the same element.");if(y.has(_.VALUES.INCLUDE_SELF)&&y.has(_.VALUES.EXCLUDE_SELF))throw new Error("[MirageEngine] Conflicting filters: 'include-self' and 'exclude-self' cannot be used together on the same element.");y.has(_.VALUES.INCLUDE_TREE)?h=h|j:y.has(_.VALUES.EXCLUDE_TREE)&&(h=h&~j),d=h,y.has(_.VALUES.INCLUDE_SELF)?d=d|j:y.has(_.VALUES.EXCLUDE_SELF)&&(d=d&~j)}const p=o.dataset[P.KEY];if(p){const y=new Set(p.split(/\s+/));for(const x of y)if(!De.includes(x))throw new Error(`[MirageEngine] Invalid select token: '${x}'. Expected one of: 'include-tree', 'exclude-tree', 'include-self', 'exclude-self', 'end'.`);if(y.has(P.VALUES.END))return null;if(y.has(P.VALUES.INCLUDE_TREE)&&y.has(P.VALUES.EXCLUDE_TREE))throw new Error("[MirageEngine] Conflicting selects: 'include-tree' and 'exclude-tree' cannot be used together on the same element.");if(y.has(P.VALUES.INCLUDE_SELF)&&y.has(P.VALUES.EXCLUDE_SELF))throw new Error("[MirageEngine] Conflicting selects: 'include-self' and 'exclude-self' cannot be used together on the same element.");y.has(P.VALUES.INCLUDE_TREE)?h=h|oe:y.has(P.VALUES.EXCLUDE_TREE)&&(h=h&~oe),d=h,y.has(P.VALUES.INCLUDE_SELF)?d=d|oe:y.has(P.VALUES.EXCLUDE_SELF)&&(d=d&~oe)}const g=o.dataset[F.KEY];let D=!1,m=a?ne({},a):{},b=s;if(g){let y=1;const x=g.indexOf("{"),T=g.lastIndexOf("}");let Y=g;if(x!==-1&&T!==-1&&T>x){Y=g.substring(0,x).trim();const B=g.substring(x,T+1);try{m=new Function("return "+B)()}catch(R){console.warn(`[MirageEngine] Failed to parse travel styles JSON: ${B}`)}}const A=Y.split(/\s+/);let Z=!1;const q=A.indexOf(F.VALUES.TRAVELER);if(q!==-1){D=!0,Z=!0;const B=A[q+1];if(B&&!isNaN(parseInt(B,10)))y=parseInt(B,10);else{const R=A.find(ue=>!isNaN(parseInt(ue,10)));R&&(y=parseInt(R,10))}}const ie=A.indexOf(F.VALUES.NATIVE);if(ie!==-1){const B=A[ie+1];if(B&&!isNaN(parseInt(B,10)))b=parseInt(B,10);else if(!D){const R=A.find(ue=>!isNaN(parseInt(ue,10)));R&&(b=parseInt(R,10))}}if(Z){const B=y+1;if(B<r)throw new Error(`[MirageEngine] Traveler layer (${y}) cannot be smaller than inherited capture layer (${r-1}).`);r=Math.min(B,F.MAX_LAYERS+1)}}const E=o.dataset[Ve.KEY];let I;E&&(I=JSON.parse(E));const C=o.getBoundingClientRect(),w=window.getComputedStyle(o);if(C.width===0||C.height===0||w.display==="none")return null;let S=o.getAttribute("data-mid");S||(S=Math.random().toString(36).substring(2,11),o.setAttribute("data-mid",S));const H=parseInt(w.zIndex),$=(isNaN(H)?0:H)+i;let z;if(o.tagName==="IMG")z=o.src;else if(o.tagName.toLowerCase()==="svg"){const y=o.cloneNode(!0),x=m==null?void 0:m.color,T=m==null?void 0:m.fill,Y=m==null?void 0:m.stroke,A=m==null?void 0:m.opacity,Z=(R,ue)=>{const K=window.getComputedStyle(R),me=ue,ht=K.fill===K.color,dt=K.stroke===K.color,Ee=T||(ht?x:void 0)||K.fill;Ee&&Ee!=="none"&&(me.style.fill=Ee);const Ce=Y||(dt?x:void 0)||K.stroke;Ce&&Ce!=="none"&&(me.style.stroke=Ce),K.strokeWidth&&K.strokeWidth!=="0px"&&(me.style.strokeWidth=K.strokeWidth);const Fe=x||K.color;Fe&&(me.style.color=Fe);const Te=A||K.opacity;Te&&Te!=="1"&&(me.style.opacity=Te);for(let be=0;be<R.children.length;be++)Z(R.children[be],ue.children[be])};Z(o,y);const q=o.getBoundingClientRect(),ie=window.devicePixelRatio*l;y.hasAttribute("viewBox")||y.setAttribute("viewBox",`0 0 ${q.width} ${q.height}`),y.setAttribute("width",(q.width*ie).toString()),y.setAttribute("height",(q.height*ie).toString());let B=new XMLSerializer().serializeToString(y);B.includes("xmlns=")||(B=B.replace("<svg",'<svg xmlns="http://www.w3.org/2000/svg"')),z=`data:image/svg+xml;utf8,${encodeURIComponent(B)}`}else if(w.backgroundImage&&w.backgroundImage!=="none"){const y=w.backgroundImage.match(/url\(['"]?(.*?)['"]?\)/);y&&(z=y[1])}const O={backgroundColor:w.backgroundColor,backgroundImage:w.backgroundImage,opacity:o.dataset[J.KEY]===J.VALUES.HIDE?1:parseFloat(w.opacity),zIndex:$,borderRadius:w.borderRadius,borderColor:w.borderColor,borderWidth:w.borderWidth,boxShadow:w.boxShadow,imageSrc:z,isTraveler:D},Q=O;let te,re;const M=[],V=w.overflow==="hidden"?[...c||[],o]:c;return o.tagName.toLowerCase()!=="svg"&&Array.from(o.childNodes).forEach(y=>{const x=y.nodeType===Node.TEXT_NODE?d:h,T=_e(y,e,x,r,$,l,y.nodeType===Node.TEXT_NODE?b:void 0,y.nodeType===Node.TEXT_NODE&&Object.keys(m).length>0?m:void 0,V);T&&M.push(T)}),{id:S,type:"BOX",element:o,rect:{x:C.left+window.scrollX,y:C.top+window.scrollY,width:C.width,height:C.height},styles:Q,textContent:te,textStyles:re,dirtyMask:e,visibility:d,isTraveler:D,captureLayer:r,nativeLayer:b,nativeStyles:b!==void 0?Ne(ne({},O),{backgroundColor:(ee=m.backgroundColor)!=null?ee:O.backgroundColor,backgroundImage:(X=m.backgroundImage)!=null?X:O.backgroundImage,opacity:(G=m.opacity)!=null?G:O.opacity,zIndex:m.zIndex!==void 0?m.zIndex+$:O.zIndex,borderRadius:(le=m.borderRadius)!=null?le:O.borderRadius,borderColor:(he=m.borderColor)!=null?he:O.borderColor,borderWidth:(de=m.borderWidth)!=null?de:O.borderWidth,boxShadow:(pe=m.boxShadow)!=null?pe:O.boxShadow,isTraveler:O.isTraveler,transform:m.transform}):void 0,nativeRect:b!==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:w.position==="fixed",clipElements:c,children:M,shaderHooks:I}}function st(n,e){e.size!==0&&e.forEach((t,r)=>{var l,s,a,c;const i=n.get(r);!i||!i.userData.basePosition||(W.forceUpdateUniforms(i.material,{backgroundColor:t.backgroundColor,backgroundImage:t.backgroundImage,boxShadow:t.boxShadow,opacity:t.opacity,borderRadius:(s=t.borderRadius)!=null?s:(l=i.userData.baseStyles)==null?void 0:l.borderRadius}),i.userData.nativeMesh&&W.forceUpdateUniforms(i.userData.nativeMesh.material,{backgroundColor:t.backgroundColor,backgroundImage:t.backgroundImage,boxShadow:t.boxShadow,opacity:t.opacity,borderRadius:(c=t.borderRadius)!=null?c:(a=i.userData.baseStyles)==null?void 0:a.borderRadius}))})}class nt{constructor(e,t,r,i){u(this,"target");u(this,"renderer");u(this,"registry");u(this,"isTravelEnabled",!1);u(this,"tracker");this.target=e,this.renderer=t,this.registry=r,this.tracker=new Le(e,{resizeDebounce:i.resizeDebounce}),this.tracker.onLayoutChange.add((l,s)=>{document.querySelector(`[${F.NAME}~='${F.VALUES.TRAVELER}']`)!==null&&!this.isTravelEnabled&&(this.isTravelEnabled=!0,this.renderer.createRenderTarget());const c=_e(this.target,l,j,1,0,this.renderer.qualityFactor);c&&this.renderer.syncScene(c,s)}),this.tracker.onStyleChange.add(l=>{st(this.registry,l)}),this.tracker.onRender.add(()=>{this.renderer.syncMeshesByDOM(),this.renderer.render()})}start(){this.tracker.start()}stop(){this.tracker.stop()}}class ot{constructor(){u(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 at{constructor(e,t){u(this,"renderer");u(this,"syncer");u(this,"target");u(this,"registry");var i,l,s;if(this.target=e,this.registry=new ot,!document.getElementById("mirage-engine-styles")){const a=document.createElement("style");a.id="mirage-engine-styles",a.textContent=`
186
- [${J.NAME}="${J.VALUES.HIDE}"] {
185
+ `,h=o||g?I+c+((i==null?void 0:i.uvModifier)||""):"",B=o||g?VA.baseColorChunk:"",C=(i==null?void 0:i.colorModifier)||"",w=qA.fragmentShader.replace("#INJECT_DECLARATIONS",a).replace("#INJECT_UV_MODIFIER",h).replace("#INJECT_BASE_COLOR",B).replace("#INJECT_COLOR_MODIFIER",C),Q=QA(t.backgroundColor),R=QA(t.borderColor),f={uSize:{value:new d.Vector2(A,e)},uMeshSize:{value:new d.Vector2(A,e)},uShadowColor:{value:new d.Vector4(0,0,0,0)},uShadowOffset:{value:new d.Vector2(0,0)},uShadowBlur:{value:0},uShadowSpread:{value:0},uBgColor:{value:new d.Vector4(Q.color.r,Q.color.g,Q.color.b,Q.alpha)},uBorderColor:{value:new d.Vector4(R.color.r,R.color.g,R.color.b,R.alpha)},uBorderRadius:{value:new d.Vector4(0,0,0,0)},uBorderWidth:{value:EA(t.borderWidth)},uOpacity:{value:(z=t.opacity)!=null?z:1},uTexture:{value:null},uTextureRepeat:{value:new d.Vector2(1,1)},uTextureOffset:{value:new d.Vector2(0,0)},uGradientCount:{value:0},uGradientAngle:{value:0},uGradientColors:{value:Array.from({length:8},()=>new d.Vector4(0,0,0,0))},uGradientStops:{value:new Float32Array(8)}};ZA(f.uBorderRadius.value,t.borderRadius,Math.min(A,e)),o&&(f.uTexture.value=s);const y=new d.ShaderMaterial({uniforms:CA(CA({},f),n),vertexShader:qA.vertexShader,fragmentShader:w,transparent:!0,side:d.FrontSide});return t.backgroundImage&&TA(y,{backgroundImage:t.backgroundImage}),y}function be(t,A,e,s,i){const o=EA(A.borderWidth);TA(t,{width:e,height:s,borderRadius:A.borderRadius,borderWidth:o,backgroundColor:A.backgroundColor,borderColor:A.borderColor,opacity:A.opacity,texture:i,backgroundImage:A.backgroundImage,boxShadow:A.boxShadow})}function TA(t,A){var s,i,o;if(A.boxShadow!==void 0){const r=fe(A.boxShadow);r?(t.uniforms.uShadowColor.value.set(r.color.r,r.color.g,r.color.b,r.alpha),t.uniforms.uShadowOffset.value.set(r.offsetX,r.offsetY),t.uniforms.uShadowBlur.value=r.blurRadius,t.uniforms.uShadowSpread.value=r.spreadRadius,t.userData.shadowPadding=r.blurRadius+r.spreadRadius+Math.max(Math.abs(r.offsetX),Math.abs(r.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 r=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+r*2,g+r*2)}if(A.borderRadius!==void 0){const r=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);ZA(t.uniforms.uBorderRadius.value,A.borderRadius,r)}if(A.borderWidth!==void 0&&(t.uniforms.uBorderWidth.value=A.borderWidth),A.backgroundColor!==void 0)if(Array.isArray(A.backgroundColor)){const r=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],r)}else if(typeof A.backgroundColor=="string"){const r=QA(A.backgroundColor);t.uniforms.uBgColor.value.set(r.color.r,r.color.g,r.color.b,r.alpha)}else{const r=t.uniforms.uBgColor.value.w;t.uniforms.uBgColor.value.set(A.backgroundColor.r,A.backgroundColor.g,A.backgroundColor.b,r)}if(A.borderColor!==void 0)if(Array.isArray(A.borderColor)){const r=t.uniforms.uBorderColor.value.w;t.uniforms.uBorderColor.value.set(A.borderColor[0],A.borderColor[1],A.borderColor[2],r)}else if(typeof A.borderColor=="string"){const r=QA(A.borderColor);t.uniforms.uBorderColor.value.set(r.color.r,r.color.g,r.color.b,r.alpha)}else{const r=t.uniforms.uBorderColor.value.w;t.uniforms.uBorderColor.value.set(A.borderColor.r,A.borderColor.g,A.borderColor.b,r)}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 r=e.image.naturalWidth||e.image.videoWidth||e.image.width,n=e.image.naturalHeight||e.image.videoHeight||e.image.height,g=(i=A.width)!=null?i:t.uniforms.uSize.value.x,a=(o=A.height)!=null?o:t.uniforms.uSize.value.y;if(r&&n&&g&&a){const I=r/n,c=g/a;if(I>c){const h=c/I;t.uniforms.uTextureRepeat.value.set(h,1),t.uniforms.uTextureOffset.value.set((1-h)/2,0)}else{const h=I/c;t.uniforms.uTextureRepeat.value.set(1,h),t.uniforms.uTextureOffset.value.set(0,(1-h)/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 r=ue(A.backgroundImage);if(r){t.uniforms.uGradientCount.value=r.stops.length,t.uniforms.uGradientAngle.value=r.angle;for(let n=0;n<8;n++)if(n<r.stops.length){const g=r.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 r of Object.keys(A))r!=="width"&&r!=="height"&&r!=="borderRadius"&&r!=="borderWidth"&&r!=="backgroundColor"&&r!=="borderColor"&&r!=="opacity"&&r!=="bgOpacity"&&r!=="borderOpacity"&&r!=="texture"&&r!=="backgroundImage"&&r!=="boxShadow"&&t.uniforms[r]!==void 0&&(t.uniforms[r].value!==void 0&&t.uniforms[r].value!==null&&typeof t.uniforms[r].value.set=="function"?Array.isArray(A[r])?t.uniforms[r].value.set(...A[r]):A[r]!==void 0&&(A[r].copy?t.uniforms[r].value.copy(A[r]):t.uniforms[r].value=A[r]):t.uniforms[r].value=A[r])}function ZA(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+/),i=EA(s[0],e),o=EA((g=s[1])!=null?g:s[0],e),r=EA((a=s[2])!=null?a:s[0],e),n=EA((c=(I=s[3])!=null?I:s[1])!=null?c:s[0],e);t.set(i,o,r,n)}const O={create(t,A,e,s,i,o=2,r=null,n){return t==="BOX"?De(A,s,i,r,n):t==="TEXT"?new Qe(e||"",A,s,i,o):new d.MeshBasicMaterial({visible:!1})},update(t,A,e,s,i,o,r=2,n){A==="BOX"?be(t,e,i,o,n):A==="TEXT"&&t.updateText(s||"",e,i,o,r)},forceUpdateUniforms(t,A){TA(t,A)}};class ve{constructor(A,e=!0){l(this,"observer");l(this,"textures",new WeakMap);l(this,"loadStatus",new WeakMap);l(this,"elementUrls",new WeakMap);l(this,"onUpdate");this.onUpdate=A,e&&(this.observer=new IntersectionObserver(s=>{for(const i of s){const o=i.target;i.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 nA(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,r)=>{const n=new Image;n.onload=()=>o(n),n.onerror=r,n.src=e});else{const r=yield(yield fetch(e)).blob();s=yield createImageBitmap(r,{imageOrientation:"flipY"})}if(this.elementUrls.get(A)!==e){"close"in s&&s.close();return}const i=new d.Texture(s);s instanceof HTMLImageElement||(i.flipY=!1),i.colorSpace=d.LinearSRGBColorSpace,i.needsUpdate=!0,this.textures.set(A,i),this.onUpdate(A,i)}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 Ne{constructor(A,e,s,i){l(this,"canvas");l(this,"scene");l(this,"camera");l(this,"renderer");l(this,"renderTargets",[]);l(this,"renderOrder",0);l(this,"qualityFactor",2);l(this,"mode","overlay");l(this,"canvasSize","viewport");l(this,"clipArea",1);l(this,"targetLayer","base");l(this,"overscan",200);l(this,"target");l(this,"mountContainer");l(this,"registry");l(this,"targetRect");l(this,"targetPageX",0);l(this,"targetPageY",0);l(this,"size",{width:0,height:0});l(this,"currentScrollX",0);l(this,"currentScrollY",0);l(this,"lastTargetLeft",0);l(this,"lastTargetTop",0);l(this,"travelersByLayer",Array.from({length:J.MAX_LAYERS},()=>new Set));l(this,"textureManager");l(this,"fixedMeshes",new Set);var n,g,a,I,c;this.target=A,this.mountContainer=s,this.registry=i,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 ve((h,B)=>{const C=this.registry.get(h);C&&C.material instanceof d.ShaderMaterial&&O.forceUpdateUniforms(C.material,{texture:B})},this.isViewport),this.qualityFactor=this.getQualityFactor(e.quality),this.canvas=document.createElement("canvas"),this.scene=new d.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,r=this.isViewport?window.innerHeight+this.overscan*2:this.targetRect.height;this.camera=new d.OrthographicCamera(o/-2,o/2,r/2,r/-2,1,1e3),this.camera.position.z=100,this.camera.layers.set(this.getSceneLayer()),this.renderer=new d.WebGLRenderer({canvas:this.canvas,alpha:!0,antialias:!0}),d.ColorManagement.enabled=!1,this.renderer.outputColorSpace=d.LinearSRGBColorSpace,this.renderer.setPixelRatio(window.devicePixelRatio),this.renderer.setSize(o,r),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<J.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 d.WebGLRenderTarget(e*this.qualityFactor,s*this.qualityFactor,{minFilter:d.LinearFilter,magFilter:d.LinearFilter,format:d.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(i=>{i.isMesh&&i.material&&O.forceUpdateUniforms(i.material,e)}),s.userData.nativeMesh&&s.userData.nativeMesh.traverse(i=>{i.isMesh&&i.material&&O.forceUpdateUniforms(i.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(),i=this.isViewport?window.innerWidth+this.overscan*2:s.width,o=this.isViewport?window.innerHeight+this.overscan*2:s.height,r=this.isViewport?this.canvas.clientWidth:this.targetRect.width,n=this.isViewport?this.canvas.clientHeight:this.targetRect.height,g=Math.abs(i-r)>.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(i,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 h of this.travelersByLayer)h.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(h=>h.dispose()):c.userData.nativeMesh.material.dispose(),c.userData.nativeMesh.geometry.dispose()),c.traverse(h=>{h instanceof d.Mesh&&(h.geometry&&h.geometry.dispose(),h.material&&(Array.isArray(h.material)?h.material.forEach(B=>B.dispose()):h.material.dispose()))}),this.registry.remove(I),this.textureManager.unregister(I)}})}reconcileNode(A){var i,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 d.Material&&e.material.dispose(),this.registry.remove(A.element),e=void 0),!e){const r=new d.PlaneGeometry(1,1),n=A.isTraveler?(i=this.renderTargets[A.captureLayer-2])==null?void 0:i.texture:this.textureManager.get(A.element),g=O.create("BOX",A.styles,"",A.rect.width,A.rect.height,this.qualityFactor,n,A.shaderHooks);e=new d.Mesh(r,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 r=0;r<J.MAX_LAYERS;r++)r===A.captureLayer-2?this.travelersByLayer[r].add(e):this.travelersByLayer[r].delete(e);else for(const r of this.travelersByLayer)r.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 r of A.children)this.reconcileNode(r);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 i=e.textLines||[{text:e.textContent||"",rect:e.rect}],o=s?e.nativeStyles:e.textStyles,r=JSON.stringify(o)+e.textContent+i.map(I=>I.text).join("|"),n=(a=A.userData)==null?void 0:a.textChildStyleHash;if(e.dirtyMask&FA||r!==n){A.children.filter(C=>C.name.startsWith("TEXT_CHILD")).forEach(C=>{var Q;const w=C;(Q=w.material.map)==null||Q.dispose(),w.geometry.dispose(),A.remove(w)});const c=e.rect,h=c.x+c.width/2,B=c.y+c.height/2;i.forEach((C,w)=>{const Q=O.create("TEXT",o,C.text,C.rect.width,C.rect.height,this.qualityFactor),R=new d.PlaneGeometry(1,1),f=new d.Mesh(R,Q);f.name=`TEXT_CHILD_${w}`;const y=e.rect.width===0?1:C.rect.width/e.rect.width,z=e.rect.height===0?1:C.rect.height/e.rect.height;f.scale.set(y,z,1);const D=C.rect.x+C.rect.width/2,S=C.rect.y+C.rect.height/2,u=D-h,U=-(S-B);f.position.set(e.rect.width===0?0:u/e.rect.width,e.rect.height===0?0:U/e.rect.height,.005),A.add(f)}),A.userData.textChildStyleHash=r}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&P&&c.layers.enable(T.getCaptureLayer(e.nativeLayer));else{const h=e.visibility&P?T.BASE:T.HIDDEN;if(c.layers.set(h),e.visibility&dA&&c.layers.enable(T.SELECTED),e.visibility&P)if(!s&&e.nativeLayer!==void 0&&e.nativeStyles!==void 0)for(let B=e.captureLayer;B<=J.MAX_LAYERS+1;B++)B!==e.nativeLayer&&c.layers.enable(T.getCaptureLayer(B));else for(let B=e.captureLayer;B<=J.MAX_LAYERS+1;B++)c.layers.enable(T.getCaptureLayer(B))}})}updateMeshProperties(A,e){var f,y,z,D,S;const{rect:s,styles:i}=e,o=this.renderer.getPixelRatio(),r=this.renderer.domElement.width/o,n=this.renderer.domElement.height/o;A.material=A.userData.baseMaterial;let g=((f=A.material.userData)==null?void 0:f.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 u=s.x-this.targetPageX,U=s.y-this.targetPageY;I=u-r/2+s.width/2,c=-U+n/2-s.height/2}A.position.set(I,c,i.zIndex+this.renderOrder*a);const h=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:h,y:B},A.userData.isFixed=e.isFixed,A.userData.initialScroll={x:window.scrollX,y:window.scrollY};const C=e.element.nodeType===Node.TEXT_NODE?e.element.parentElement:e.element,w=window.getComputedStyle(C);let Q=0,R=0;if(w.transform&&w.transform!=="none"){const u=new DOMMatrix(w.transform);Q=u.m41,R=u.m42}if(A.userData.baseTransform={x:Q,y:R},delete A.userData.originRatioX,delete A.userData.originRatioY,O.update(A.userData.baseMaterial,"BOX",i,"",s.width,s.height,this.qualityFactor,e.isTraveler?(y=this.renderTargets[e.captureLayer-2])==null?void 0:y.texture:this.textureManager.get(e.element)),e.nativeStyles&&e.nativeRect){if(!A.userData.nativeMesh){const W=O.create("BOX",e.nativeStyles,"",e.nativeRect.width,e.nativeRect.height,this.qualityFactor,e.isTraveler?(z=this.renderTargets[e.captureLayer-2])==null?void 0:z.texture:e.nativeStyles.imageSrc&&e.nativeStyles.imageSrc!==e.styles.imageSrc?new d.TextureLoader().load(e.nativeStyles.imageSrc):this.textureManager.get(e.element),e.shaderHooks),H=new d.Mesh(A.geometry,W);e.type==="TEXT"&&(H.name="BG_MESH"),this.scene.add(H),A.userData.nativeMesh=H}const u=A.userData.nativeMesh;let U,uA;if(this.isViewport)U=e.nativeRect.x-window.innerWidth/2+e.nativeRect.width/2,uA=-e.nativeRect.y+window.innerHeight/2-e.nativeRect.height/2;else{const W=e.nativeRect.x-this.targetPageX,H=e.nativeRect.y-this.targetPageY;U=W-r/2+e.nativeRect.width/2,uA=-H+n/2-e.nativeRect.height/2}let fA=e.nativeRect.width,G=e.nativeRect.height,L=U,sA=uA;if(e.nativeStyles.transform){const W=e.nativeStyles.transform,H=W.match(/scale\(([\d.]+%?)\)/);if(H){let m=parseFloat(H[1]);H[1].includes("%")&&(m/=100),fA*=m,G*=m}const oA=W.match(/scaleX\(([\d.]+%?)\)/);if(oA){let m=parseFloat(oA[1]);oA[1].includes("%")&&(m/=100),fA*=m}const wA=W.match(/scaleY\(([\d.]+%?)\)/);if(wA){let m=parseFloat(wA[1]);wA[1].includes("%")&&(m/=100),G*=m}const IA=W.match(/translate\(([^,]+),\s*([^)]+)\)/);if(IA){const m=IA[1].trim(),j=IA[2].trim();let DA=parseFloat(m);m.includes("%")&&(DA=DA/100*e.nativeRect.width);let bA=parseFloat(j);j.includes("%")&&(bA=bA/100*e.nativeRect.height),L+=DA,sA-=bA}const aA=W.match(/translateX\(([^)]+)\)/);if(aA){const m=aA[1].trim();let j=parseFloat(m);m.includes("%")&&(j=j/100*e.nativeRect.width),L+=j}const lA=W.match(/translateY\(([^)]+)\)/);if(lA){const m=lA[1].trim();let j=parseFloat(m);m.includes("%")&&(j=j/100*e.nativeRect.height),sA-=j}}let SA=((D=u.material.userData)==null?void 0:D.shadowPadding)||0;u.scale.set(fA+SA*2,G+SA*2,1),u.position.set(L,sA,e.nativeStyles.zIndex+this.renderOrder*a),O.update(u.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:u.material.uniforms.uTexture.value||this.textureManager.get(e.element))}else A.userData.nativeMesh&&(this.scene.remove(A.userData.nativeMesh),A.userData.nativeMesh.material instanceof d.Material&&A.userData.nativeMesh.material.dispose(),delete A.userData.nativeMesh)}updateMeshLayers(A,e){const s=e.visibility&P?T.BASE:T.HIDDEN;if(A.layers.set(s),e.visibility&dA&&A.layers.enable(T.SELECTED),A.userData.nativeMesh&&e.nativeLayer!==void 0){const i=A.userData.nativeMesh;if(i.layers.set(T.HIDDEN),e.visibility&P){i.layers.enable(T.getCaptureLayer(e.nativeLayer));for(let o=e.captureLayer;o<=J.MAX_LAYERS+1;o++)o!==e.nativeLayer&&A.layers.enable(T.getCaptureLayer(o))}}else if(e.visibility&P)for(let i=e.captureLayer;i<=J.MAX_LAYERS+1;i++)A.layers.enable(T.getCaptureLayer(i))}captureRenderTarget(A,e,s){if(A.size===0||!s)return;const i=new d.Color,o=this.renderer.getClearAlpha();this.renderer.getClearColor(i),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 r=new d.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){r.setFromMatrixPosition(I.matrixWorld),r.project(this.camera);const c=(r.x+1)/2*n,h=(r.y+1)/2*g;let B=0,C=1;typeof this.clipArea=="number"?C=this.clipArea:this.clipArea.endsWith("%")?C=parseFloat(this.clipArea)/100:this.clipArea.endsWith("px")&&(B=parseFloat(this.clipArea));const w=I.scale.x*C+.5,Q=I.scale.y*C+.5,R=c-w/2,f=h-Q/2,y=(R*this.qualityFactor-B)/a,z=(f*this.qualityFactor-B)/a,D=(w*this.qualityFactor+B*2)/a,S=(Q*this.qualityFactor+B*2)/a;this.renderer.setScissor(y,z,D,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(i,o)}render(){for(let g=0;g<J.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,i=this.renderer.domElement,o=i.getBoundingClientRect().top,r=i.getBoundingClientRect().left,n=(g,a)=>{if(a&&a.width>0&&a.height>0){const I=Math.floor((a.x-r)*e),c=Math.floor((s-(a.y-o+a.height))*e),h=Math.ceil(a.width*e),B=Math.ceil(a.height*e);g.onBeforeRender=()=>{A.enable(A.SCISSOR_TEST),A.scissor(I,c,h,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(h=>{h.name.startsWith("TEXT_CHILD")&&n(h,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 i=s.userData.wasmIndex*V;s.userData.initialLocalX=A[i+gA],s.userData.initialLocalY=A[i+iA]}})}syncMeshesByWasm(A){const e=this.renderer.getPixelRatio(),s=this.renderer.domElement.width/e,i=this.renderer.domElement.height/e;this.scene.children.forEach(o=>{const r=o;if(!r.userData||r.userData.wasmIndex===void 0)return;const g=r.userData.wasmIndex*V,a=A[g+AA],I=A[g+BA],c=r.userData.domRect;if(!c)return;const h=this.fixedMeshes.has(r),B=h?0:this.getScrollX(),C=h?0:this.getScrollY();let w,Q;if(this.isViewport){const f=a-B,y=I-C;w=f-window.innerWidth/2+c.width/2,Q=-y+window.innerHeight/2-c.height/2}else{const f=a-this.targetPageX,y=I-this.targetPageY;w=f-s/2+c.width/2,Q=-y+i/2-c.height/2}const R=r.position.z;if(r.position.set(w,Q,R),r.userData.nativeMesh){const f=r.userData.nativeMesh;if(r.userData.needsNativeReset)r.userData.needsNativeReset=!1;else{const y=w-r.userData.basePosition.x,z=Q-r.userData.basePosition.y;f.position.setX(f.position.x+y),f.position.setY(f.position.y+z)}}r.userData.basePosition.x=w,r.userData.basePosition.y=Q})}}function Me(t){const A=t.textContent||"",e=[];let s="",i=null,o=-1;const r=(a,I)=>{for(let c=0;c<a.length;c++){const h=a[c],B=document.createRange();B.setStart(t,I+c),B.setEnd(t,I+c+1);const C=B.getBoundingClientRect();if(C.width===0&&C.height===0){s+=h;continue}o===-1||Math.abs(C.top-o)>C.height/2?(s&&i&&e.push({text:s,rect:{left:i.left,top:i.top,width:i.right-i.left,height:i.bottom-i.top}}),s=h,i={left:C.left,top:C.top,right:C.right,bottom:C.bottom},o=C.top):(s+=h,i&&(i.left=Math.min(i.left,C.left),i.top=Math.min(i.top,C.top),i.right=Math.max(i.right,C.right),i.bottom=Math.max(i.bottom,C.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)r(a,g);else{const h=c.length===1?c[0]:I.getBoundingClientRect();if(h.width===0&&h.height===0){s+=a,g+=a.length;continue}o===-1||Math.abs(h.top-o)>h.height/2?(s&&i&&e.push({text:s,rect:{left:i.left,top:i.top,width:i.right-i.left,height:i.bottom-i.top}}),s=a,i={left:h.left,top:h.top,right:h.right,bottom:h.bottom},o=h.top):(s+=a,i&&(i.left=Math.min(i.left,h.left),i.top=Math.min(i.top,h.top),i.right=Math.max(i.right,h.right),i.bottom=Math.max(i.bottom,h.bottom)))}g+=a.length}return s&&i&&e.push({text:s,rect:{left:i.left,top:i.top,width:i.right-i.left,height:i.bottom-i.top}}),e.filter(a=>a.text.trim().length>0&&a.rect.width>0&&a.rect.height>0)}function PA(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 $A(t,A=cA|mA|Be|FA|RA,e,s=1,i=0,o=2,r,n,g,a,I=-1,c=0,h=0,B=!1){var te,ie,re,se,oe,ae,ne,ge,ce;const C=(te=a==null?void 0:a.scrollX)!=null?te:window.scrollX,w=(ie=a==null?void 0:a.scrollY)!=null?ie:window.scrollY;if(t.nodeType===Node.TEXT_NODE){const E=t;if(!E.textContent||!E.textContent.trim())return null;const F=E.textContent.replace(/\s+/g," ");if(F.length===0)return null;const k=Me(E);if(k.length===0)return null;const K=E.parentElement,x=K?window.getComputedStyle(K):null;if(!x)return null;const Y=B||x.position==="fixed",X=Math.min(...k.map(p=>p.rect.left)),$=Math.min(...k.map(p=>p.rect.top)),N=Math.max(...k.map(p=>p.rect.left+p.rect.width)),q=Math.max(...k.map(p=>p.rect.top+p.rect.height)),tA=X+(Y?0:C),vA=$+(Y?0:w);let hA=-1;if(a&&a.sharedArray){hA=a.currentIndex++;const p=hA*V;a.sharedArray[p+pA]=I,a.sharedArray[p+gA]=tA-c,a.sharedArray[p+iA]=vA-h}return{id:Math.random().toString(36).substring(2,9),type:"TEXT",element:E,rect:{x:X+(Y?0:C),y:$+(Y?0:w),width:N-X,height:q-$},styles:{backgroundColor:"transparent",backgroundImage:"",opacity:K&&K.dataset[rA.KEY]===rA.VALUES.HIDE?1:parseFloat(x.opacity),zIndex:(isNaN(parseInt(x.zIndex))?0:parseInt(x.zIndex))+i,borderRadius:"0px",borderColor:"transparent",borderWidth:"0px",isTraveler:!1},textContent:F,textLines:k.map(p=>({text:p.text.trim(),rect:{x:p.rect.left+(Y?0:C),y:p.rect.top+(Y?0:w),width:p.rect.width,height:p.rect.height}})),textStyles:PA(x),dirtyMask:A,visibility:e,isTraveler:!1,captureLayer:s,isFixed:Y,nativeLayer:r,nativeStyles:n?CA(CA({backgroundColor:"transparent",backgroundImage:"",opacity:K&&K.dataset[rA.KEY]===rA.VALUES.HIDE?1:parseFloat(x.opacity),zIndex:(isNaN(parseInt(x.zIndex))?0:parseInt(x.zIndex))+i,borderRadius:"0px",borderColor:"transparent",borderWidth:"0px",isTraveler:!1},PA(x)),n):void 0,nativeRect:n?{x:X+(Y?0:C),y:$+(Y?0:w),width:N-X,height:q-$}:void 0,clipElements:g,wasmIndex:hA!==-1?hA:void 0,children:[]}}if(t.nodeType!==Node.ELEMENT_NODE)return null;const Q=t,R=Q.dataset[Z.KEY];let f=e,y=e;if(R){const E=new Set(R.split(/\s+/));for(const F of E)if(!OA.includes(F))throw new Error(`[MirageEngine] Invalid filter token: '${F}'. Expected one of: 'include-tree', 'exclude-tree', 'include-self', 'exclude-self', 'end'.`);if(E.has(Z.VALUES.END))return null;if(E.has(Z.VALUES.INCLUDE_TREE)&&E.has(Z.VALUES.EXCLUDE_TREE))throw new Error("[MirageEngine] Conflicting filters: 'include-tree' and 'exclude-tree' cannot be used together on the same element.");if(E.has(Z.VALUES.INCLUDE_SELF)&&E.has(Z.VALUES.EXCLUDE_SELF))throw new Error("[MirageEngine] Conflicting filters: 'include-self' and 'exclude-self' cannot be used together on the same element.");E.has(Z.VALUES.INCLUDE_TREE)?f=f|P:E.has(Z.VALUES.EXCLUDE_TREE)&&(f=f&~P),y=f,E.has(Z.VALUES.INCLUDE_SELF)?y=y|P:E.has(Z.VALUES.EXCLUDE_SELF)&&(y=y&~P)}const z=Q.dataset[eA.KEY];if(z){const E=new Set(z.split(/\s+/));for(const F of E)if(!OA.includes(F))throw new Error(`[MirageEngine] Invalid select token: '${F}'. Expected one of: 'include-tree', 'exclude-tree', 'include-self', 'exclude-self', 'end'.`);if(E.has(eA.VALUES.END))return null;if(E.has(eA.VALUES.INCLUDE_TREE)&&E.has(eA.VALUES.EXCLUDE_TREE))throw new Error("[MirageEngine] Conflicting selects: 'include-tree' and 'exclude-tree' cannot be used together on the same element.");if(E.has(eA.VALUES.INCLUDE_SELF)&&E.has(eA.VALUES.EXCLUDE_SELF))throw new Error("[MirageEngine] Conflicting selects: 'include-self' and 'exclude-self' cannot be used together on the same element.");E.has(eA.VALUES.INCLUDE_TREE)?f=f|dA:E.has(eA.VALUES.EXCLUDE_TREE)&&(f=f&~dA),y=f,E.has(eA.VALUES.INCLUDE_SELF)?y=y|dA:E.has(eA.VALUES.EXCLUDE_SELF)&&(y=y&~dA)}const D=Q.dataset[J.KEY];let S=!1,u=n?CA({},n):{},U=r;if(D){let E=1;const F=D.indexOf("{"),k=D.lastIndexOf("}");let K=D;if(F!==-1&&k!==-1&&k>F){K=D.substring(0,F).trim();const N=D.substring(F,k+1);try{u=new Function("return "+N)()}catch(q){console.warn(`[MirageEngine] Failed to parse travel styles JSON: ${N}`)}}const x=K.split(/\s+/);let Y=!1;const X=x.indexOf(J.VALUES.TRAVELER);if(X!==-1){S=!0,Y=!0;const N=x[X+1];if(N&&!isNaN(parseInt(N,10)))E=parseInt(N,10);else{const q=x.find(tA=>!isNaN(parseInt(tA,10)));q&&(E=parseInt(q,10))}}const $=x.indexOf(J.VALUES.NATIVE);if($!==-1){const N=x[$+1];if(N&&!isNaN(parseInt(N,10)))U=parseInt(N,10);else if(!S){const q=x.find(tA=>!isNaN(parseInt(tA,10)));q&&(U=parseInt(q,10))}}if(Y){const N=E+1;if(N<s)throw new Error(`[MirageEngine] Traveler layer (${E}) cannot be smaller than inherited capture layer (${s-1}).`);s=Math.min(N,J.MAX_LAYERS+1)}}const uA=Q.dataset[Ce.KEY];let fA;uA&&(fA=JSON.parse(uA));const G=Q.getBoundingClientRect(),L=window.getComputedStyle(Q);if(G.width===0||G.height===0||L.display==="none")return null;const sA=B||L.position==="fixed",SA=G.left+(sA?0:C),W=G.top+(sA?0:w);let H=-1;if(a&&a.sharedArray){H=a.currentIndex++;const E=H*V;a.sharedArray[E+pA]=I,a.sharedArray[E+gA]=SA-c,a.sharedArray[E+iA]=W-h}let oA=Q.getAttribute("data-mid");oA||(oA=Math.random().toString(36).substring(2,11),Q.setAttribute("data-mid",oA));const wA=parseInt(L.zIndex),IA=(isNaN(wA)?0:wA)+i;let aA,lA;if(Q.tagName==="IMG")aA=Q.src;else if(Q.tagName.toLowerCase()==="svg"){const E=u==null?void 0:u.color,F=u==null?void 0:u.fill,k=u==null?void 0:u.stroke,K=u==null?void 0:u.opacity,x=Y=>{const X=Q.cloneNode(!0),$=(vA,hA)=>{const p=window.getComputedStyle(vA),NA=hA,je=p.fill===p.color,Ke=p.stroke===p.color,kA=(Y?F||(je?E:void 0):void 0)||p.fill;kA&&kA!=="none"&&(NA.style.fill=kA);const UA=(Y?k||(Ke?E:void 0):void 0)||p.stroke;UA&&UA!=="none"&&(NA.style.stroke=UA),p.strokeWidth&&p.strokeWidth!=="0px"&&(NA.style.strokeWidth=p.strokeWidth);const Ie=(Y?E:void 0)||p.color;Ie&&(NA.style.color=Ie);const HA=(Y?K:void 0)||p.opacity;HA&&HA!=="1"&&(NA.style.opacity=HA);for(let LA=0;LA<vA.children.length;LA++)$(vA.children[LA],hA.children[LA])};$(Q,X);const N=Q.getBoundingClientRect(),q=window.devicePixelRatio*o;X.hasAttribute("viewBox")||X.setAttribute("viewBox",`0 0 ${N.width} ${N.height}`),X.setAttribute("width",(N.width*q).toString()),X.setAttribute("height",(N.height*q).toString());let tA=new XMLSerializer().serializeToString(X);return tA.includes("xmlns=")||(tA=tA.replace("<svg",'<svg xmlns="http://www.w3.org/2000/svg"')),`data:image/svg+xml;utf8,${encodeURIComponent(tA)}`};aA=x(!1),U!==void 0&&(E||F||k||K)&&(lA=x(!0))}else if(L.backgroundImage&&L.backgroundImage!=="none"){const E=L.backgroundImage.match(/url\(['"]?(.*?)['"]?\)/);E&&(aA=E[1])}const m={backgroundColor:L.backgroundColor,backgroundImage:L.backgroundImage,opacity:Q.dataset[rA.KEY]===rA.VALUES.HIDE?1:parseFloat(L.opacity),zIndex:IA,borderRadius:L.borderRadius,borderColor:L.borderColor,borderWidth:L.borderWidth,boxShadow:L.boxShadow,imageSrc:aA,isTraveler:S},j=m;let DA,bA;const ee=[],Oe=L.overflow==="hidden"?[...g||[],Q]:g;return Q.tagName.toLowerCase()!=="svg"&&Array.from(Q.childNodes).forEach(E=>{const F=E.nodeType===Node.TEXT_NODE?y:f,k=$A(E,A,F,s,IA,o,E.nodeType===Node.TEXT_NODE?U:void 0,E.nodeType===Node.TEXT_NODE&&Object.keys(u).length>0?u:void 0,Oe,a,H,SA,W,sA);k&&ee.push(k)}),{id:oA,type:"BOX",element:Q,rect:{x:G.left+C,y:G.top+w,width:G.width,height:G.height},styles:j,textContent:DA,textStyles:bA,dirtyMask:A,visibility:y,isTraveler:S,captureLayer:s,nativeLayer:U,nativeStyles:U!==void 0?he(CA({},m),{backgroundColor:(re=u.backgroundColor)!=null?re:m.backgroundColor,backgroundImage:(se=u.backgroundImage)!=null?se:m.backgroundImage,opacity:(oe=u.opacity)!=null?oe:m.opacity,zIndex:u.zIndex!==void 0?u.zIndex+IA:m.zIndex,borderRadius:(ae=u.borderRadius)!=null?ae:m.borderRadius,borderColor:(ne=u.borderColor)!=null?ne:m.borderColor,borderWidth:(ge=u.borderWidth)!=null?ge:m.borderWidth,boxShadow:(ce=u.boxShadow)!=null?ce:m.boxShadow,isTraveler:m.isTraveler,transform:u.transform,imageSrc:lA!=null?lA:aA}):void 0,nativeRect:U!==void 0?{x:u.x!==void 0?parseFloat(u.x):G.left+C,y:u.y!==void 0?parseFloat(u.y):G.top+w,width:u.width!==void 0?parseFloat(u.width):G.width,height:u.height!==void 0?parseFloat(u.height):G.height}:void 0,isFixed:sA,clipElements:g,wasmIndex:H!==-1?H:void 0,children:ee,shaderHooks:fA}}function Re(t,A,e){if(A.size===0)return;const s=new Set;A.forEach((i,o)=>{var n,g,a,I;const r=t.get(o);if(!(!r||!r.userData.basePosition)){if(O.forceUpdateUniforms(r.material,{backgroundColor:i.backgroundColor,backgroundImage:i.backgroundImage,boxShadow:i.boxShadow,opacity:i.opacity,borderRadius:(g=i.borderRadius)!=null?g:(n=r.userData.baseStyles)==null?void 0:n.borderRadius}),r.userData.nativeMesh&&(O.forceUpdateUniforms(r.userData.nativeMesh.material,{backgroundColor:i.backgroundColor,backgroundImage:i.backgroundImage,boxShadow:i.boxShadow,opacity:i.opacity,borderRadius:(I=i.borderRadius)!=null?I:(a=r.userData.baseStyles)==null?void 0:a.borderRadius}),i.scaleX!==void 0||i.scaleY!==void 0)){const c=r.userData.nativeMesh,h=c.scale.x,B=c.scale.y,C=c.scale.z;c.scale.set(i.scaleX!==void 0?i.scaleX*h:h,i.scaleY!==void 0?i.scaleY*B:B,i.scaleZ!==void 0?i.scaleZ*C:C)}if(i.layoutChanged||i.width!==void 0||i.height!==void 0){s.add(o);const c=o.querySelectorAll("*");for(let h=0;h<c.length;h++){const B=c[h];t.has(B)&&s.add(B)}}else if((i.x!==void 0||i.y!==void 0)&&e&&r.userData.wasmIndex!==void 0){const c=r.userData.wasmIndex*V;i.x!==void 0&&r.userData.initialLocalX!==void 0&&(e[c+gA]=r.userData.initialLocalX+i.x),i.y!==void 0&&r.userData.initialLocalY!==void 0&&(e[c+iA]=r.userData.initialLocalY+i.y)}}}),s.forEach(i=>{var g,a;const o=t.get(i);if(!o)return;const r=i.getBoundingClientRect();o.userData.domRect&&(o.userData.domRect.width=r.width,o.userData.domRect.height=r.height);let n=((g=o.material.userData)==null?void 0:g.shadowPadding)||0;if(o.scale.set(r.width+n*2,r.height+n*2,1),O.forceUpdateUniforms(o.material,{width:r.width,height:r.height}),e&&o.userData.wasmIndex!==void 0){const I=o.userData.wasmIndex*V,c=r.left+(o.userData.isFixed?0:window.scrollX),h=r.top+(o.userData.isFixed?0:window.scrollY),B=e[I+pA];let C=0,w=0;if(B!==-1){const Q=B*V;C=e[Q+AA],w=e[Q+BA]}e[I+gA]=c-C,e[I+iA]=h-w}if(o.userData.nativeMesh){const I=o.userData.nativeMesh;let c=((a=I.material.userData)==null?void 0:a.shadowPadding)||0;I.scale.set(r.width+c*2,r.height+c*2,1),O.forceUpdateUniforms(I.material,{width:r.width,height:r.height}),o.userData.nativeRect&&(o.userData.nativeRect.width=r.width,o.userData.nativeRect.height=r.height)}})}class YA{__destroy_into_raw(){const A=this.__wbg_ptr;return this.__wbg_ptr=0,Ae.unregister(this),A}free(){const A=this.__destroy_into_raw();_.__wbg_memorymanager_free(A,0)}get_length(){return _.memorymanager_get_length(this.__wbg_ptr)>>>0}get_pointer(){return _.memorymanager_get_pointer(this.__wbg_ptr)>>>0}constructor(A){const e=_.memorymanager_new(A);return this.__wbg_ptr=e,Ae.register(this,this.__wbg_ptr,this),this}update_physics(A){_.memorymanager_update_physics(this.__wbg_ptr,A)}}Symbol.dispose&&(YA.prototype[Symbol.dispose]=YA.prototype.free);function xe(){return{__proto__:null,"./wasm_compute_bg.js":{__proto__:null,__wbg___wbindgen_throw_5d9e815e6fdf150f:function(A,e){throw new Error(Le(A,e))},__wbindgen_init_externref_table:function(){const A=_.__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 Ae=typeof FinalizationRegistry=="undefined"?{register:()=>{},unregister:()=>{}}:new FinalizationRegistry(t=>_.__wbg_memorymanager_free(t,1));function Le(t,A){return Ye(t>>>0,A)}let yA=null;function Fe(){return(yA===null||yA.byteLength===0)&&(yA=new Uint8Array(_.memory.buffer)),yA}let xA=new TextDecoder("utf-8",{ignoreBOM:!0,fatal:!0});xA.decode();const Te=2146435072;let GA=0;function Ye(t,A){return GA+=A,GA>=Te&&(xA=new TextDecoder("utf-8",{ignoreBOM:!0,fatal:!0}),xA.decode(),GA=A),xA.decode(Fe().subarray(t,t+A))}let _;function Ge(t,A){return _=t.exports,yA=null,_.__wbindgen_start(),_}function ke(t,A){return nA(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(i){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",i);else throw i}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 Ue(t){return nA(this,null,function*(){if(_!==void 0)return _;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,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BEAgAiAKIAH8CgAACyACIQEgChADCyABCwwBCyAFRQRAQQEhAQwCCyAFQQEQJgsiAQ0AIAtBATYCBAwBCyALIAE2AgRBACEMC0EIIQELIAEgC2ogBTYCACALIAw2AgAgCSgCBEEBRgRAIAkoAgggCSgCDBAcAAsgCSgCCCEBIAAgDTYCACAAIAE2AgQgCUEQaiQAC6QEAgl/A30jAEEQayIFJAACQAJAIAAEQCAAQQhrIgYgBigCAEEBaiICNgIAIAJFDQEgACgCAA0CIABBfzYCACAFIAY2AgwgBSAANgIIIAUgAEEEaiIENgIEIAEEQCAEKAIIIQIgBCgCBCIJIQQDQAJAAkACQAJAAkACQAJAAkAgAiADQQFqSwRAIANBAmogAk8NASACIANNDQIgBEEEaioCACEMIARBCGoqAgAhDSAEKgIAIgtDAAAAAGBFBEAgA0EDaiACTw0EIARBDGogDDgCACADQQRqIAJPDQUgBEEQaiANOAIADAkLIAv8AUEFbCIHQQNqIgggAk8NBSAHQQRqIgcgAk8NBiACIANBA2oiCk0EQCAKIAJBjIPAABASAAsgCSAHQQJ0aioCACELIARBDGogDCAJIAhBAnRqKgIAkjgCACADQQRqIgggAkkNByAIIAJBnIPAABASAAsgA0EBaiACQZyCwAAQEgALIANBAmogAkGsgsAAEBIACyADIAJBvILAABASAAsgA0EDaiACQcyCwAAQEgALIANBBGogAkHcgsAAEBIACyAIIAJB7ILAABASAAsgByACQfyCwAAQEgALIARBEGogDSALkjgCAAsgBEEUaiEEIANBBWohAyABQQFrIgENAAsLIAAgACgCAEEBajYCACAGIAYoAgBBAWsiADYCACAARQRAIAVBDGoQEwsgBUEQaiQADwsQKAsACxApAAuNAQICfwF+IwBBIGsiAiQAIAEoAgBBf0YEQCABKAIMIQMgAkEANgIcIAJCgICAgBA3AhQgAkEUakHYhMAAIAMoAgAiAygCACADKAIEEAQaIAIgAigCHCIDNgIQIAIgAikCFCIENwMIIAEgAzYCCCABIAQ3AgALIABBhIfAADYCBCAAIAE2AgAgAkEgaiQAC1QBAX8CQAJAIAAoAgAgACgCCCIDayACSQRAIAAgAyACEA4gACgCCCEDDAELIAJFDQELIAJFDQAgACgC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",self.location));const A=xe();(typeof t=="string"||typeof Request=="function"&&t instanceof Request||typeof URL=="function"&&t instanceof URL)&&(t=fetch(t));const{instance:e,module:s}=yield ke(yield t,A);return Ge(e)})}class He{constructor(){l(this,"memoryManager",null);l(this,"sharedArray",null);l(this,"isInitialized",!1)}initialize(A){return nA(this,null,function*(){if(!this.isInitialized)try{const e=yield Ue();this.memoryManager=new YA(A);const s=this.memoryManager.get_pointer(),i=this.memoryManager.get_length();this.sharedArray=new Float32Array(e.memory.buffer,s,i),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 Xe{constructor(A,e,s,i){l(this,"target");l(this,"renderer");l(this,"registry");l(this,"isTravelEnabled",!1);l(this,"wasmSync");l(this,"lastWasmNodeCount",0);l(this,"tracker");this.target=A,this.renderer=e,this.registry=s,this.wasmSync=new He,this.tracker=new WA(A,{resizeDebounce:i.resizeDebounce}),this.tracker.onLayoutChange.add((o,r)=>{document.querySelector(`[${J.NAME}~='${J.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=$A(this.target,o,P,1,0,this.renderer.qualityFactor,void 0,void 0,void 0,a);I&&(this.lastWasmNodeCount=a.currentIndex,this.renderer.syncScene(I,r),g&&this.renderer.saveInitialLocals(g))}),this.tracker.onStyleChange.add(o=>{Re(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 nA(this,null,function*(){yield this.wasmSync.initialize(1e4*V),this.tracker.start()})}stop(){this.tracker.stop()}}class Je{constructor(){l(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){l(this,"renderer");l(this,"syncer");l(this,"target");l(this,"registry");var i,o,r;if(this.target=A,this.registry=new Je,!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=(l=(i=t.container)!=null?i:this.target.parentElement)!=null?l: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 rt(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",l=>{t[l.key]!==void 0&&(t[l.key]=!0)}),window.addEventListener("keyup",l=>{t[l.key]!==void 0&&(t[l.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()}}class ct{constructor(e={}){u(this,"frontSelector");u(this,"midLayerElement");u(this,"items",[]);u(this,"isInitialized",!1);u(this,"midLayer",null);u(this,"frontLayer",null);u(this,"tracker",null);this.frontSelector=e.frontSelector||".front",this.midLayerElement=e.midLayerElement||null,this.items=[],this.isInitialized=!1,this.tracker=new Le(document.body,e.trackerConfig||{resizeDebounce:!0})}init(){var e;this.isInitialized||(this.createLayers(),this.setupMidLayer(),this.hijackFrontElements(),this.setupHooks(),(e=this.tracker)==null||e.start(),this.isInitialized=!0,console.log("🥪 sand-telepochi initialized!"))}useTracker(e){this.tracker=e,this.setupHooks()}createLayers(){this.midLayer=document.createElement("div"),this.midLayer.id="sand-layer-mid",Object.assign(this.midLayer.style,{position:"fixed",inset:"0",zIndex:"9998",pointerEvents:"none"}),this.frontLayer=document.createElement("div"),this.frontLayer.id="sand-layer-front",Object.assign(this.frontLayer.style,{position:"fixed",inset:"0",zIndex:"9999",pointerEvents:"none"}),document.body.appendChild(this.midLayer),document.body.appendChild(this.frontLayer)}setupMidLayer(){this.midLayerElement&&this.midLayer&&(this.midLayer.appendChild(this.midLayerElement),this.midLayerElement.style.pointerEvents="auto")}hijackFrontElements(){const e=document.querySelectorAll(this.frontSelector);this.frontLayer&&e.forEach(t=>{var s;const r=t.getBoundingClientRect(),i=window.getComputedStyle(t),l=document.createElement("div");l.className="sand-placeholder",Object.assign(l.style,{display:i.display==="inline"?"inline-block":i.display,width:`${r.width}px`,height:`${r.height}px`,boxSizing:"border-box",marginTop:i.marginTop,marginBottom:i.marginBottom,marginLeft:i.marginLeft,marginRight:i.marginRight,visibility:"hidden",pointerEvents:"none"}),(s=t.parentNode)==null||s.insertBefore(l,t),this.frontLayer.appendChild(t),Object.assign(t.style,{position:"fixed",margin:"0",boxSizing:"border-box",width:`${r.width}px`,height:`${r.height}px`,pointerEvents:"auto"}),this.items.push({placeholder:l,original:t})})}setupHooks(){this.tracker&&this.tracker.onBeforeRender.add(()=>{const e=this.items.map(({placeholder:t})=>t.getBoundingClientRect());this.items.forEach(({original:t},r)=>{const i=e[r];t.style.top=`${i.top}px`,t.style.left=`${i.left}px`,t.style.width=`${i.width}px`,t.style.height=`${i.height}px`})})}}class lt{constructor(e,t){u(this,"_engine");u(this,"_sandwich");if(!e)throw new Error("[Mirage] Target element is required.");if(this._engine=new at(e,t),t.sandwich!==!1){const r=typeof t.sandwich=="object"?t.sandwich:{};this._sandwich=new ct({frontSelector:r.frontSelector||`[${Me.NAME}='${Me.VALUES.FRONT}']`}),this._sandwich.useTracker(this._engine.getTracker())}}start(){this._engine.start(),this._sandwich&&this._sandwich.init()}stop(){this._engine.stop()}destroy(){this._engine.dispose()}getTracker(){return this._engine.getTracker()}getCanvas(){return this._engine.getCanvas()}updateUniforms(e,t){this._engine.updateUniforms(e,t)}test(){this._engine.test()}}k.Mirage=lt,Object.defineProperty(k,Symbol.toStringTag,{value:"Module"})});
189
+ `,document.head.appendChild(n)}let s;if(e.mode==="duplicate"?s=(o=(i=e.container)!=null?i:this.target.parentElement)!=null?o:void 0:s=(r=this.target.parentElement)!=null?r:void 0,!s)throw new Error("[Mirage] Cannot find a container (parent or option).");this.renderer=new Ne(this.target,e,s,this.registry),this.renderer.mount(),this.syncer=new Xe(this.target,this.renderer,this.registry,e)}start(){return nA(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,i=()=>{requestAnimationFrame(i),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)};i()}}class _e{constructor(A={}){l(this,"frontSelector");l(this,"midLayerElement");l(this,"items",[]);l(this,"isInitialized",!1);l(this,"midLayer",null);l(this,"frontLayer",null);l(this,"tracker",null);this.frontSelector=A.frontSelector||".front",this.midLayerElement=A.midLayerElement||null,this.items=[],this.isInitialized=!1,this.tracker=new WA(document.body,A.trackerConfig||{resizeDebounce:!0})}init(){var A;this.isInitialized||(this.createLayers(),this.setupMidLayer(),this.hijackFrontElements(),this.setupHooks(),(A=this.tracker)==null||A.start(),this.isInitialized=!0,console.log("🥪 sand-telepochi initialized!"))}useTracker(A){this.tracker=A,this.setupHooks()}createLayers(){this.midLayer=document.createElement("div"),this.midLayer.id="sand-layer-mid",Object.assign(this.midLayer.style,{position:"fixed",inset:"0",zIndex:"9998",pointerEvents:"none"}),this.frontLayer=document.createElement("div"),this.frontLayer.id="sand-layer-front",Object.assign(this.frontLayer.style,{position:"fixed",inset:"0",zIndex:"9999",pointerEvents:"none"}),document.body.appendChild(this.midLayer),document.body.appendChild(this.frontLayer)}setupMidLayer(){this.midLayerElement&&this.midLayer&&(this.midLayer.appendChild(this.midLayerElement),this.midLayerElement.style.pointerEvents="auto")}hijackFrontElements(){const A=document.querySelectorAll(this.frontSelector);this.frontLayer&&A.forEach(e=>{var r;const s=e.getBoundingClientRect(),i=window.getComputedStyle(e),o=document.createElement("div");o.className="sand-placeholder",Object.assign(o.style,{display:i.display==="inline"?"inline-block":i.display,width:`${s.width}px`,height:`${s.height}px`,boxSizing:"border-box",marginTop:i.marginTop,marginBottom:i.marginBottom,marginLeft:i.marginLeft,marginRight:i.marginRight,visibility:"hidden",pointerEvents:"none"}),(r=e.parentNode)==null||r.insertBefore(o,e),this.frontLayer.appendChild(e),Object.assign(e.style,{position:"fixed",margin:"0",boxSizing:"border-box",width:`${s.width}px`,height:`${s.height}px`,pointerEvents:"auto"}),this.items.push({placeholder:o,original:e})})}setupHooks(){this.tracker&&this.tracker.onBeforeRender.add(()=>{const A=this.items.map(({placeholder:e})=>e.getBoundingClientRect());this.items.forEach(({original:e},s)=>{const i=A[s];e.style.top=`${i.top}px`,e.style.left=`${i.left}px`,e.style.width=`${i.width}px`,e.style.height=`${i.height}px`})})}}class We{constructor(A,e){l(this,"_engine");l(this,"_sandwich");if(!A)throw new Error("[Mirage] Target element is required.");if(this._engine=new ze(A,e),e.sandwich!==!1){const s=typeof e.sandwich=="object"?e.sandwich:{};this._sandwich=new _e({frontSelector:s.frontSelector||`[${_A.NAME}='${_A.VALUES.FRONT}']`}),this._sandwich.useTracker(this._engine.getTracker())}}start(){return nA(this,null,function*(){yield this._engine.start(),this._sandwich&&this._sandwich.init()})}stop(){this._engine.stop()}destroy(){this._engine.dispose()}getTracker(){return this._engine.getTracker()}getCanvas(){return this._engine.getCanvas()}updateUniforms(A,e){this._engine.updateUniforms(A,e)}test(){this._engine.test()}}v.Mirage=We,Object.defineProperty(v,Symbol.toStringTag,{value:"Module"})});
@@ -3,7 +3,7 @@ export declare class Mirage {
3
3
  private _engine;
4
4
  private _sandwich?;
5
5
  constructor(target: HTMLElement, config: MirageConfig);
6
- start(): void;
6
+ start(): Promise<void>;
7
7
  stop(): void;
8
8
  destroy(): void;
9
9
  getTracker(): import('../../packages/core/src/index.ts').Tracker;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mirage-engine",
3
- "version": "0.3.20",
3
+ "version": "0.3.22",
4
4
  "description": "An engine that mirrors HTML DOM elements to a WebGL scene in real-time.",
5
5
  "type": "module",
6
6
  "types": "./dist/index.d.ts",
@@ -21,9 +21,9 @@
21
21
  "dist"
22
22
  ],
23
23
  "dependencies": {
24
- "@mirage-engine/sandwich": "0.2.8",
25
- "@mirage-engine/painter": "1.0.10",
26
- "@mirage-engine/core": "0.3.20"
24
+ "@mirage-engine/painter": "1.0.12",
25
+ "@mirage-engine/core": "0.3.22",
26
+ "@mirage-engine/sandwich": "0.2.9"
27
27
  },
28
28
  "peerDependencies": {
29
29
  "three": "^0.160.0"