mirage-engine 0.3.21 → 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.
- package/dist/mirage-engine.js +1432 -1228
- package/dist/mirage-engine.umd.js +18 -18
- package/dist/src/core/Mirage.d.ts +1 -1
- package/package.json +4 -4
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
(function(
|
|
2
|
-
`),
|
|
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
|
-
}`,
|
|
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
|
-
`,
|
|
167
|
+
`,me=`uniform sampler2D uTexture;
|
|
168
168
|
varying vec4 vScreenPos;
|
|
169
169
|
uniform vec2 uTextureRepeat;
|
|
170
|
-
uniform vec2 uTextureOffset;`,
|
|
170
|
+
uniform vec2 uTextureOffset;`,ye=`vec2 screenUv = (vScreenPos.xy / vScreenPos.w) * 0.5 + 0.5;
|
|
171
171
|
vec2 resultUv = screenUv;
|
|
172
172
|
|
|
173
|
-
`,
|
|
174
|
-
baseColor = blendSrcOver(baseColor, texColor);`,
|
|
175
|
-
`,
|
|
176
|
-
`,
|
|
177
|
-
`,
|
|
178
|
-
`,
|
|
179
|
-
`,
|
|
180
|
-
`,
|
|
181
|
-
`+
|
|
182
|
-
`,
|
|
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=c||l?f+h+((i==null?void 0:i.uvModifier)||""):"",m=c||l?Ue.baseColorChunk:"",p=(i==null?void 0:i.colorModifier)||"",M=Oe.fragmentShader.replace("#INJECT_DECLARATIONS",o).replace("#INJECT_UV_MODIFIER",d).replace("#INJECT_BASE_COLOR",m).replace("#INJECT_COLOR_MODIFIER",p),v=ce(n.backgroundColor),b=ce(n.borderColor),E={uSize:{value:new y.Vector2(e,t)},uMeshSize:{value:new y.Vector2(e,t)},uShadowColor:{value:new y.Vector4(0,0,0,0)},uShadowOffset:{value:new y.Vector2(0,0)},uShadowBlur:{value:0},uShadowSpread:{value:0},uBgColor:{value:new y.Vector4(v.color.r,v.color.g,v.color.b,v.alpha)},uBorderColor:{value:new y.Vector4(b.color.r,b.color.g,b.color.b,b.alpha)},uBorderRadius:{value:new y.Vector4(0,0,0,0)},uBorderWidth:{value:le(n.borderWidth)},uOpacity:{value:(C=n.opacity)!=null?C:1},uTexture:{value:null},uTextureRepeat:{value:new y.Vector2(1,1)},uTextureOffset:{value:new y.Vector2(0,0)},uGradientCount:{value:0},uGradientAngle:{value:0},uGradientColors:{value:Array.from({length:8},()=>new y.Vector4(0,0,0,0))},uGradientStops:{value:new Float32Array(8)}};_e(E.uBorderRadius.value,n.borderRadius,Math.min(e,t)),c&&(E.uTexture.value=r);const A=new y.ShaderMaterial({uniforms:oe(oe({},E),a),vertexShader:Oe.vertexShader,fragmentShader:M,transparent:!0,side:y.FrontSide});return n.backgroundImage&&Ee(A,{backgroundImage:n.backgroundImage}),A}function it(n,e,t,r,i){const c=le(e.borderWidth);Ee(n,{width:t,height:r,borderRadius:e.borderRadius,borderWidth:c,backgroundColor:e.backgroundColor,borderColor:e.borderColor,opacity:e.opacity,texture:i,backgroundImage:e.backgroundImage,boxShadow:e.boxShadow})}function Ee(n,e){var r,i,c;if(e.boxShadow!==void 0){const s=Ke(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,l=e.height!==void 0?e.height:n.uniforms.uSize.value.y;n.uniforms.uMeshSize.value.set(a+s*2,l+s*2)}if(e.borderRadius!==void 0){const s=e.width!==void 0&&e.height!==void 0?Math.min(e.width,e.height):Math.min(n.uniforms.uSize.value.x,n.uniforms.uSize.value.y);_e(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,l=(i=e.width)!=null?i:n.uniforms.uSize.value.x,o=(c=e.height)!=null?c:n.uniforms.uSize.value.y;if(s&&a&&l&&o){const f=s/a,h=l/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=je(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 l=s.stops[a];n.uniforms.uGradientColors.value[a].set(l.color.r,l.color.g,l.color.b,l.alpha),n.uniforms.uGradientStops.value[a]=l.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 _e(n,e,t=0){var l,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=le(r[0],t),c=le((l=r[1])!=null?l:r[0],t),s=le((o=r[2])!=null?o:r[0],t),a=le((h=(f=r[3])!=null?f:r[1])!=null?h:r[0],t);n.set(i,c,s,a)}const G={create(n,e,t,r,i,c=2,s=null,a){return n==="BOX"?rt(e,r,i,s,a):n==="TEXT"?new qe(t||"",e,r,i,c):new y.MeshBasicMaterial({visible:!1})},update(n,e,t,r,i,c,s=2,a){e==="BOX"?it(n,t,i,c,a):e==="TEXT"&&n.updateText(r||"",t,i,c,s)},forceUpdateUniforms(n,e){Ee(n,e)}};class st{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 c=i.target;i.isIntersecting?this.loadTexture(c):this.disposeTexture(c)}},{rootMargin:"300px"}))}register(e,t){if(e.nodeType!==Node.ELEMENT_NODE)return;this.elementUrls.get(e)!==t&&(this.elementUrls.set(e,t),this.observer?(this.observer.unobserve(e),this.observer.observe(e)):this.loadTexture(e))}unregister(e){e.nodeType===Node.ELEMENT_NODE&&this.observer&&this.observer.unobserve(e),this.disposeTexture(e),this.elementUrls.delete(e),this.loadStatus.delete(e)}loadTexture(e){return Pe(this,null,function*(){if(this.loadStatus.get(e)||this.textures.has(e))return;const t=this.elementUrls.get(e);if(t){this.loadStatus.set(e,!0);try{let r;if(t.startsWith("data:image/svg+xml"))r=yield new Promise((c,s)=>{const a=new Image;a.onload=()=>c(a),a.onerror=s,a.src=t});else{const s=yield(yield fetch(t)).blob();r=yield createImageBitmap(s,{imageOrientation:"flipY"})}if(this.elementUrls.get(e)!==t){"close"in r&&r.close();return}const i=new y.Texture(r);r instanceof HTMLImageElement||(i.flipY=!1),i.colorSpace=y.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 nt{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:z.MAX_LAYERS},()=>new Set));u(this,"textureManager");u(this,"fixedMeshes",new Set);var a,l,o,f,h;this.target=e,this.mountContainer=r,this.registry=i,this.mode=(a=t.mode)!=null?a:"overlay",this.canvasSize=(l=t.canvasSize)!=null?l:"viewport",this.clipArea=(o=t.travelerClipArea)!=null?o:1,this.targetLayer=(f=t.layer)!=null?f:"base",this.textureManager=new st((d,m)=>{const p=this.registry.get(d);p&&p.material instanceof y.ShaderMaterial&&G.forceUpdateUniforms(p.material,{texture:m})},this.isViewport),this.canvas=document.createElement("canvas"),this.scene=new y.Scene,this.targetRect=this.target.getBoundingClientRect();const c=this.isViewport?window.innerWidth+this.overscan*2:this.targetRect.width,s=this.isViewport?window.innerHeight+this.overscan*2:this.targetRect.height;this.camera=new y.OrthographicCamera(c/-2,c/2,s/2,s/-2,1,1e3),this.camera.position.z=100,this.camera.layers.set(this.getSceneLayer()),this.renderer=new y.WebGLRenderer({canvas:this.canvas,alpha:!0,antialias:!0}),y.ColorManagement.enabled=!1,this.renderer.outputColorSpace=y.LinearSRGBColorSpace,this.renderer.setPixelRatio(window.devicePixelRatio),this.renderer.setSize(c,s),this.applyTextQuality((h=t.quality)!=null?h:"medium")}get isViewport(){return this.mode==="overlay"&&this.canvasSize==="viewport"}getSceneLayer(){return typeof this.targetLayer=="number"?this.targetLayer:this.targetLayer==="selected"?N.SELECTED:N.BASE}createRenderTarget(){for(let e=0;e<z.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 y.WebGLRenderTarget(t*this.qualityFactor,r*this.qualityFactor,{minFilter:y.LinearFilter,magFilter:y.LinearFilter,format:y.RGBAFormat,stencilBuffer:!1,depthBuffer:!0}))}}applyTextQuality(e){if(typeof e=="number"){this.qualityFactor=Math.max(.1,e);return}switch(e){case"low":this.qualityFactor=1;break;case"high":this.qualityFactor=4;break;case"medium":this.qualityFactor=2;break;default:this.qualityFactor=2;break}}mount(){this.mountContainer.prepend(this.canvas),this.canvas.style.pointerEvents=this.mode==="overlay"?"none":"auto",this.updateCanvasLayout()}updateCanvasLayout(){const e=this.isViewport?window.innerWidth+this.overscan*2:this.targetRect.width,t=this.isViewport?window.innerHeight+this.overscan*2:this.targetRect.height;this.canvas.style.width=`${e}px`,this.canvas.style.height=`${t}px`,this.mode==="duplicate"?(this.canvas.style.position="",this.canvas.style.top="",this.canvas.style.left="",this.canvas.style.display="block"):(this.canvas.style.position=this.isViewport?"fixed":"absolute",this.canvas.style.top=this.isViewport?`-${this.overscan}px`:`${this.target.offsetTop}px`,this.canvas.style.left=this.isViewport?`-${this.overscan}px`:`${this.target.offsetLeft}px`,this.canvas.style.display="block")}updateUniforms(e,t){const r=this.registry.get(e);r&&(r.traverse(i=>{i.isMesh&&i.material&&G.forceUpdateUniforms(i.material,t)}),r.userData.nativeMesh&&r.userData.nativeMesh.traverse(i=>{i.isMesh&&i.material&&G.forceUpdateUniforms(i.material,t)}))}dispose(){this.renderer.dispose(),this.canvas.remove(),this.textureManager.disposeAll()}setSize(e,t){this.renderer.setSize(e,t);for(const r of this.renderTargets)r.setSize(e*this.qualityFactor,t*this.qualityFactor);this.camera.left=e/-2,this.camera.right=e/2,this.camera.top=t/2,this.camera.bottom=t/-2,this.camera.updateProjectionMatrix()}syncScene(e,t){const r=this.target.getBoundingClientRect(),i=this.isViewport?window.innerWidth+this.overscan*2:r.width,c=this.isViewport?window.innerHeight+this.overscan*2:r.height,s=this.isViewport?this.canvas.clientWidth:this.targetRect.width,a=this.isViewport?this.canvas.clientHeight:this.targetRect.height,l=Math.abs(i-s)>.1||Math.abs(c-a)>.1,o=this.mode==="overlay"&&(Math.abs(r.top-this.targetRect.top)>.1||Math.abs(r.left-this.targetRect.left)>.1);l?(this.targetRect=r,this.setSize(i,c),this.updateCanvasLayout()):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 y.Mesh&&(d.geometry&&d.geometry.dispose(),d.material&&(Array.isArray(d.material)?d.material.forEach(m=>m.dispose()):d.material.dispose()))}),this.registry.remove(f),this.textureManager.unregister(f)}})}reconcileNode(e){var i,c;let t=this.registry.get(e.element);const r=JSON.stringify(e.shaderHooks||null);if(t&&t.userData.shaderHash!==r&&(this.scene.remove(t),t.geometry.dispose(),t.material instanceof y.Material&&t.material.dispose(),this.registry.remove(e.element),t=void 0),!t){const s=new y.PlaneGeometry(1,1),a=e.isTraveler?(i=this.renderTargets[e.captureLayer-2])==null?void 0:i.texture:this.textureManager.get(e.element),l=G.create("BOX",e.styles,"",e.rect.width,e.rect.height,this.qualityFactor,a,e.shaderHooks);t=new y.Mesh(s,l),e.type==="TEXT"&&(t.name="BG_MESH"),this.scene.add(t),this.registry.register(e.element,t),t.userData.baseMaterial=l,t.userData.domElement=e.element,t.userData.shaderHash=r}if(t.userData.clipElements=e.clipElements,(c=e.nativeStyles)!=null&&c.transform?t.userData.nativeTransform=e.nativeStyles.transform:t.userData.nativeTransform=void 0,this.updateMeshProperties(t,e),this.updateMeshLayers(t,e),e.isTraveler)for(let s=0;s<z.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}],c=r?t.nativeStyles:t.textStyles,s=JSON.stringify(c)+t.textContent+i.map(f=>f.text).join("|"),a=(o=e.userData)==null?void 0:o.textChildStyleHash;if(t.dirtyMask&Se||s!==a){e.children.filter(p=>p.name.startsWith("TEXT_CHILD")).forEach(p=>{var v;const M=p;(v=M.material.map)==null||v.dispose(),M.geometry.dispose(),e.remove(M)});const h=t.rect,d=h.x+h.width/2,m=h.y+h.height/2;i.forEach((p,M)=>{const v=G.create("TEXT",c,p.text,p.rect.width,p.rect.height,this.qualityFactor),b=new y.PlaneGeometry(1,1),E=new y.Mesh(b,v);E.name=`TEXT_CHILD_${M}`;const A=t.rect.width===0?1:p.rect.width/t.rect.width,C=t.rect.height===0?1:p.rect.height/t.rect.height;E.scale.set(A,C,1);const w=p.rect.x+p.rect.width/2,x=p.rect.y+p.rect.height/2,H=w-d,q=-(x-m);E.position.set(t.rect.width===0?0:H/t.rect.width,t.rect.height===0?0:q/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&ae&&h.layers.enable(N.SELECTED),t.visibility&J)if(!r&&t.nativeLayer!==void 0&&t.nativeStyles!==void 0)for(let m=t.captureLayer;m<=z.MAX_LAYERS+1;m++)m!==t.nativeLayer&&h.layers.enable(N.getCaptureLayer(m));else for(let m=t.captureLayer;m<=z.MAX_LAYERS+1;m++)h.layers.enable(N.getCaptureLayer(m))}})}updateMeshProperties(e,t){var C,w,x,H,q;const{rect:r,styles:i}=t,c=this.renderer.getPixelRatio(),s=this.renderer.domElement.width/c,a=this.renderer.domElement.height/c;e.material=e.userData.baseMaterial;let l=((C=e.material.userData)==null?void 0:C.shadowPadding)||0;e.scale.set(r.width+l*2,r.height+l*2,1),e.userData.domRect={x:r.x,y:r.y,width:r.width,height:r.height};const o=.001;this.renderOrder++;const f=this.targetRect.left+window.scrollX,h=this.targetRect.top+window.scrollY;let d,m;if(this.isViewport)d=r.x-window.innerWidth/2+r.width/2,m=-r.y+window.innerHeight/2-r.height/2;else{const B=r.x-f,W=r.y-h;d=B-s/2+r.width/2,m=-W+a/2-r.height/2}e.position.set(d,m,i.zIndex+this.renderOrder*o);const p=r.x,M=r.y;e.userData.basePosition={x:d,y:m},e.userData.originalBasePosition={x:d,y:m},e.userData.baseSize={width:r.width,height:r.height},e.userData.baseDOM={x:p,y:M},e.userData.isFixed=t.isFixed,e.userData.initialScroll={x:window.scrollX,y:window.scrollY};const v=t.element.nodeType===Node.TEXT_NODE?t.element.parentElement:t.element,b=window.getComputedStyle(v);let E=0,A=0;if(b.transform&&b.transform!=="none"){const B=new DOMMatrix(b.transform);E=B.m41,A=B.m42}if(e.userData.baseTransform={x:E,y:A},delete e.userData.originRatioX,delete e.userData.originRatioY,G.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 V=G.create("BOX",t.nativeStyles,"",t.nativeRect.width,t.nativeRect.height,this.qualityFactor,t.isTraveler?(x=this.renderTargets[t.captureLayer-2])==null?void 0:x.texture:t.nativeStyles.imageSrc&&t.nativeStyles.imageSrc!==t.styles.imageSrc?new y.TextureLoader().load(t.nativeStyles.imageSrc):this.textureManager.get(t.element),t.shaderHooks),j=new y.Mesh(e.geometry,V);t.type==="TEXT"&&(j.name="BG_MESH"),this.scene.add(j),e.userData.nativeMesh=j}const B=e.userData.nativeMesh;let W,F;if(this.isViewport)W=t.nativeRect.x-window.innerWidth/2+t.nativeRect.width/2,F=-t.nativeRect.y+window.innerHeight/2-t.nativeRect.height/2;else{const V=t.nativeRect.x-f,j=t.nativeRect.y-h;W=V-s/2+t.nativeRect.width/2,F=-j+a/2-t.nativeRect.height/2}let ee=t.nativeRect.width,te=t.nativeRect.height,L=W,X=F;if(t.nativeStyles.transform){const V=t.nativeStyles.transform,j=V.match(/scale\(([\d.]+%?)\)/);if(j){let g=parseFloat(j[1]);j[1].includes("%")&&(g/=100),ee*=g,te*=g}const he=V.match(/scaleX\(([\d.]+%?)\)/);if(he){let g=parseFloat(he[1]);he[1].includes("%")&&(g/=100),ee*=g}const de=V.match(/scaleY\(([\d.]+%?)\)/);if(de){let g=parseFloat(de[1]);de[1].includes("%")&&(g/=100),te*=g}const ue=V.match(/translate\(([^,]+),\s*([^)]+)\)/);if(ue){const g=ue[1].trim(),S=ue[2].trim();let O=parseFloat(g);g.includes("%")&&(O=O/100*t.nativeRect.width);let Y=parseFloat(S);S.includes("%")&&(Y=Y/100*t.nativeRect.height),L+=O,X-=Y}const pe=V.match(/translateX\(([^)]+)\)/);if(pe){const g=pe[1].trim();let S=parseFloat(g);g.includes("%")&&(S=S/100*t.nativeRect.width),L+=S}const me=V.match(/translateY\(([^)]+)\)/);if(me){const g=me[1].trim();let S=parseFloat(g);g.includes("%")&&(S=S/100*t.nativeRect.height),X-=S}}let re=((H=B.material.userData)==null?void 0:H.shadowPadding)||0;B.scale.set(ee+re*2,te+re*2,1),B.position.set(L,X,t.nativeStyles.zIndex+this.renderOrder*o),G.update(B.material,"BOX",t.nativeStyles,"",t.nativeRect.width,t.nativeRect.height,this.qualityFactor,t.isTraveler?(q=this.renderTargets[t.captureLayer-2])==null?void 0:q.texture:B.material.uniforms.uTexture.value||this.textureManager.get(t.element))}else e.userData.nativeMesh&&(this.scene.remove(e.userData.nativeMesh),e.userData.nativeMesh.material instanceof y.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&ae&&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 c=t.captureLayer;c<=z.MAX_LAYERS+1;c++)c!==t.nativeLayer&&e.layers.enable(N.getCaptureLayer(c))}}else if(t.visibility&J)for(let i=t.captureLayer;i<=z.MAX_LAYERS+1;i++)e.layers.enable(N.getCaptureLayer(i))}captureRenderTarget(e,t,r){if(e.size===0||!r)return;const i=new y.Color,c=this.renderer.getClearAlpha();this.renderer.getClearColor(i),this.renderer.setClearColor(0,0),this.renderer.setRenderTarget(r),this.renderer.clear(),this.renderer.autoClear=!1,this.renderer.setScissorTest(!0),this.camera.layers.set(t);const s=new y.Vector3,a=this.isViewport?window.innerWidth+this.overscan*2:this.targetRect.width,l=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*l;let m=0,p=1;typeof this.clipArea=="number"?p=this.clipArea:this.clipArea.endsWith("%")?p=parseFloat(this.clipArea)/100:this.clipArea.endsWith("px")&&(m=parseFloat(this.clipArea));const M=f.scale.x*p+.5,v=f.scale.y*p+.5,b=h-M/2,E=d-v/2,A=(b*this.qualityFactor-m)/o,C=(E*this.qualityFactor-m)/o,w=(M*this.qualityFactor+m*2)/o,x=(v*this.qualityFactor+m*2)/o;this.renderer.setScissor(A,C,w,x),this.renderer.render(this.scene,this.camera)}this.renderer.setScissorTest(!1),this.renderer.autoClear=!0,this.renderer.setRenderTarget(null),this.camera.layers.set(this.getSceneLayer()),this.renderer.setClearColor(i,c)}render(){for(let l=0;l<z.MAX_LAYERS;l++){const o=l+1;this.captureRenderTarget(this.travelersByLayer[l],N.getCaptureLayer(o),this.renderTargets[l])}const e=this.renderer.getContext(),t=this.renderer.getPixelRatio(),r=this.renderer.domElement.height/t,i=this.renderer.domElement,c=i.getBoundingClientRect().top,s=i.getBoundingClientRect().left,a=(l,o)=>{if(o&&o.width>0&&o.height>0){const f=Math.floor((o.x-s)*t),h=Math.floor((r-(o.y-c+o.height))*t),d=Math.ceil(o.width*t),m=Math.ceil(o.height*t);l.onBeforeRender=()=>{e.enable(e.SCISSOR_TEST),e.scissor(f,h,d,m)},l.onAfterRender=()=>{e.disable(e.SCISSOR_TEST)},l.__hasScissorHook=!0}else l.__hasScissorHook&&(l.onBeforeRender=()=>{},l.onAfterRender=()=>{},l.__hasScissorHook=!1)};this.scene.children.forEach(l=>{var h;const o=l,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,c=this.renderer.domElement.height/r;this.scene.children.forEach(s=>{var h,d;const a=s;if(!a.userData||!a.userData.domElement)return;const l=a.userData.domElement;if(!l.isConnected)return;let o;if(l.nodeType===Node.TEXT_NODE){const m=document.createRange();m.selectNode(l),o=m.getBoundingClientRect()}else o=l.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 m=a.userData.clipElements;if(m&&m.length>0){let b=-1/0,E=-1/0,A=1/0,C=1/0;for(const w of m){const x=w.getBoundingClientRect();b=Math.max(b,x.left),E=Math.max(E,x.top),A=Math.min(A,x.right),C=Math.min(C,x.bottom)}a.userData.scissorRect={x:b,y:E,width:Math.max(0,A-b),height:Math.max(0,C-E)}}else a.userData.scissorRect=void 0;let p,M;if(this.isViewport)p=o.x-window.innerWidth/2+o.width/2,M=-o.y+window.innerHeight/2-o.height/2;else{const b=o.x-e,E=o.y-t;p=b-i/2+o.width/2,M=-E+c/2-o.height/2}a.position.setX(p),a.position.setY(M);let v=((h=a.material.userData)==null?void 0:h.shadowPadding)||0;if(a.scale.set(o.width+v*2,o.height+v*2,1),a.updateMatrixWorld(),a.material instanceof y.ShaderMaterial&&G.forceUpdateUniforms(a.material,{width:o.width,height:o.height}),a.userData.nativeMesh){const b=a.userData.nativeMesh;let E=o.width,A=o.height,C=p,w=M;if(a.userData.nativeTransform){const H=a.userData.nativeTransform,q=H.match(/scale\(([\d.]+%?)\)/);if(q){let L=parseFloat(q[1]);q[1].includes("%")&&(L/=100),E*=L,A*=L}const B=H.match(/scaleX\(([\d.]+%?)\)/);if(B){let L=parseFloat(B[1]);B[1].includes("%")&&(L/=100),E*=L}const W=H.match(/scaleY\(([\d.]+%?)\)/);if(W){let L=parseFloat(W[1]);W[1].includes("%")&&(L/=100),A*=L}const F=H.match(/translate\(([^,]+),\s*([^)]+)\)/);if(F){const L=F[1].trim(),X=F[2].trim();let re=parseFloat(L);L.includes("%")&&(re=re/100*o.width);let V=parseFloat(X);X.includes("%")&&(V=V/100*o.height),C+=re,w-=V}const ee=H.match(/translateX\(([^)]+)\)/);if(ee){const L=ee[1].trim();let X=parseFloat(L);L.includes("%")&&(X=X/100*o.width),C+=X}const te=H.match(/translateY\(([^)]+)\)/);if(te){const L=te[1].trim();let X=parseFloat(L);L.includes("%")&&(X=X/100*o.height),w-=X}}let x=((d=b.material.userData)==null?void 0:d.shadowPadding)||0;b.position.setX(C),b.position.setY(w),b.scale.set(E+x*2,A+x*2,1),b.updateMatrixWorld(),b.material instanceof y.ShaderMaterial&&G.forceUpdateUniforms(b.material,{width:E,height:A})}}})}}function ot(n){const e=n.textContent||"",t=[];let r="",i=null,c=-1;const s=(o,f)=>{for(let h=0;h<o.length;h++){const d=o[h],m=document.createRange();m.setStart(n,f+h),m.setEnd(n,f+h+1);const p=m.getBoundingClientRect();if(p.width===0&&p.height===0){r+=d;continue}c===-1||Math.abs(p.top-c)>p.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:p.left,top:p.top,right:p.right,bottom:p.bottom},c=p.top):(r+=d,i&&(i.left=Math.min(i.left,p.left),i.top=Math.min(i.top,p.top),i.right=Math.max(i.right,p.right),i.bottom=Math.max(i.bottom,p.bottom)))}},a=e.match(/[^\s\-]+\-?|\-|\s+/g)||[];let l=0;for(const o of a){const f=document.createRange();f.setStart(n,l),f.setEnd(n,l+o.length);const h=f.getClientRects();if(h.length>1)s(o,l);else{const d=h.length===1?h[0]:f.getBoundingClientRect();if(d.width===0&&d.height===0){r+=o,l+=o.length;continue}c===-1||Math.abs(d.top-c)>d.height/2?(r&&i&&t.push({text:r,rect:{left:i.left,top:i.top,width:i.right-i.left,height:i.bottom-i.top}}),r=o,i={left:d.left,top:d.top,right:d.right,bottom:d.bottom},c=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)))}l+=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 Fe(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 ze(n,e=ne|ge|We|Se|be,t,r=1,i=0,c=2,s,a,l){var V,j,he,de,ue,pe,me;if(n.nodeType===Node.TEXT_NODE){const g=n;if(!g.textContent||!g.textContent.trim())return null;const S=g.textContent.replace(/\s+/g," ");if(S.length===0)return null;const O=ot(g);if(O.length===0)return null;const Y=g.parentElement,U=Y?window.getComputedStyle(Y):null;if(!U)return null;const K=Math.min(...O.map(T=>T.rect.left)),$=Math.min(...O.map(T=>T.rect.top)),ie=Math.max(...O.map(T=>T.rect.left+T.rect.width)),k=Math.max(...O.map(T=>T.rect.top+T.rect.height));return{id:Math.random().toString(36).substring(2,9),type:"TEXT",element:g,rect:{x:K+window.scrollX,y:$+window.scrollY,width:ie-K,height:k-$},styles:{backgroundColor:"transparent",backgroundImage:"",opacity:Y&&Y.dataset[Q.KEY]===Q.VALUES.HIDE?1:parseFloat(U.opacity),zIndex:(isNaN(parseInt(U.zIndex))?0:parseInt(U.zIndex))+i,borderRadius:"0px",borderColor:"transparent",borderWidth:"0px",isTraveler:!1},textContent:S,textLines:O.map(T=>({text:T.text.trim(),rect:{x:T.rect.left+window.scrollX,y:T.rect.top+window.scrollY,width:T.rect.width,height:T.rect.height}})),textStyles:Fe(U),dirtyMask:e,visibility:t,isTraveler:!1,captureLayer:r,isFixed:U.position==="fixed",nativeLayer:s,nativeStyles:a?oe(oe({backgroundColor:"transparent",backgroundImage:"",opacity:Y&&Y.dataset[Q.KEY]===Q.VALUES.HIDE?1:parseFloat(U.opacity),zIndex:(isNaN(parseInt(U.zIndex))?0:parseInt(U.zIndex))+i,borderRadius:"0px",borderColor:"transparent",borderWidth:"0px",isTraveler:!1},Fe(U)),a):void 0,nativeRect:a?{x:K+window.scrollX,y:$+window.scrollY,width:ie-K,height:k-$}:void 0,clipElements:l,children:[]}}if(n.nodeType!==Node.ELEMENT_NODE)return null;const o=n,f=o.dataset[_.KEY];let h=t,d=t;if(f){const g=new Set(f.split(/\s+/));for(const S of g)if(!ke.includes(S))throw new Error(`[MirageEngine] Invalid filter token: '${S}'. Expected one of: 'include-tree', 'exclude-tree', 'include-self', 'exclude-self', 'end'.`);if(g.has(_.VALUES.END))return null;if(g.has(_.VALUES.INCLUDE_TREE)&&g.has(_.VALUES.EXCLUDE_TREE))throw new Error("[MirageEngine] Conflicting filters: 'include-tree' and 'exclude-tree' cannot be used together on the same element.");if(g.has(_.VALUES.INCLUDE_SELF)&&g.has(_.VALUES.EXCLUDE_SELF))throw new Error("[MirageEngine] Conflicting filters: 'include-self' and 'exclude-self' cannot be used together on the same element.");g.has(_.VALUES.INCLUDE_TREE)?h=h|J:g.has(_.VALUES.EXCLUDE_TREE)&&(h=h&~J),d=h,g.has(_.VALUES.INCLUDE_SELF)?d=d|J:g.has(_.VALUES.EXCLUDE_SELF)&&(d=d&~J)}const m=o.dataset[P.KEY];if(m){const g=new Set(m.split(/\s+/));for(const S of g)if(!ke.includes(S))throw new Error(`[MirageEngine] Invalid select token: '${S}'. Expected one of: 'include-tree', 'exclude-tree', 'include-self', 'exclude-self', 'end'.`);if(g.has(P.VALUES.END))return null;if(g.has(P.VALUES.INCLUDE_TREE)&&g.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(g.has(P.VALUES.INCLUDE_SELF)&&g.has(P.VALUES.EXCLUDE_SELF))throw new Error("[MirageEngine] Conflicting selects: 'include-self' and 'exclude-self' cannot be used together on the same element.");g.has(P.VALUES.INCLUDE_TREE)?h=h|ae:g.has(P.VALUES.EXCLUDE_TREE)&&(h=h&~ae),d=h,g.has(P.VALUES.INCLUDE_SELF)?d=d|ae:g.has(P.VALUES.EXCLUDE_SELF)&&(d=d&~ae)}const p=o.dataset[z.KEY];let M=!1,v=a?oe({},a):{},b=s;if(p){let g=1;const S=p.indexOf("{"),O=p.lastIndexOf("}");let Y=p;if(S!==-1&&O!==-1&&O>S){Y=p.substring(0,S).trim();const k=p.substring(S,O+1);try{v=new Function("return "+k)()}catch(T){console.warn(`[MirageEngine] Failed to parse travel styles JSON: ${k}`)}}const U=Y.split(/\s+/);let K=!1;const $=U.indexOf(z.VALUES.TRAVELER);if($!==-1){M=!0,K=!0;const k=U[$+1];if(k&&!isNaN(parseInt(k,10)))g=parseInt(k,10);else{const T=U.find(se=>!isNaN(parseInt(se,10)));T&&(g=parseInt(T,10))}}const ie=U.indexOf(z.VALUES.NATIVE);if(ie!==-1){const k=U[ie+1];if(k&&!isNaN(parseInt(k,10)))b=parseInt(k,10);else if(!M){const T=U.find(se=>!isNaN(parseInt(se,10)));T&&(b=parseInt(T,10))}}if(K){const k=g+1;if(k<r)throw new Error(`[MirageEngine] Traveler layer (${g}) cannot be smaller than inherited capture layer (${r-1}).`);r=Math.min(k,z.MAX_LAYERS+1)}}const E=o.dataset[He.KEY];let A;E&&(A=JSON.parse(E));const C=o.getBoundingClientRect(),w=window.getComputedStyle(o);if(C.width===0||C.height===0||w.display==="none")return null;let x=o.getAttribute("data-mid");x||(x=Math.random().toString(36).substring(2,11),o.setAttribute("data-mid",x));const H=parseInt(w.zIndex),q=(isNaN(H)?0:H)+i;let B,W;if(o.tagName==="IMG")B=o.src;else if(o.tagName.toLowerCase()==="svg"){const g=v==null?void 0:v.color,S=v==null?void 0:v.fill,O=v==null?void 0:v.stroke,Y=v==null?void 0:v.opacity,U=K=>{const $=o.cloneNode(!0),ie=(Ce,Ne)=>{const Z=window.getComputedStyle(Ce),ve=Ne,ft=Z.fill===Z.color,gt=Z.stroke===Z.color,Te=(K?S||(ft?g:void 0):void 0)||Z.fill;Te&&Te!=="none"&&(ve.style.fill=Te);const Re=(K?O||(gt?g:void 0):void 0)||Z.stroke;Re&&Re!=="none"&&(ve.style.stroke=Re),Z.strokeWidth&&Z.strokeWidth!=="0px"&&(ve.style.strokeWidth=Z.strokeWidth);const Xe=(K?g:void 0)||Z.color;Xe&&(ve.style.color=Xe);const Me=(K?Y:void 0)||Z.opacity;Me&&Me!=="1"&&(ve.style.opacity=Me);for(let xe=0;xe<Ce.children.length;xe++)ie(Ce.children[xe],Ne.children[xe])};ie(o,$);const k=o.getBoundingClientRect(),T=window.devicePixelRatio*c;$.hasAttribute("viewBox")||$.setAttribute("viewBox",`0 0 ${k.width} ${k.height}`),$.setAttribute("width",(k.width*T).toString()),$.setAttribute("height",(k.height*T).toString());let se=new XMLSerializer().serializeToString($);return se.includes("xmlns=")||(se=se.replace("<svg",'<svg xmlns="http://www.w3.org/2000/svg"')),`data:image/svg+xml;utf8,${encodeURIComponent(se)}`};B=U(!1),b!==void 0&&(g||S||O||Y)&&(W=U(!0))}else if(w.backgroundImage&&w.backgroundImage!=="none"){const g=w.backgroundImage.match(/url\(['"]?(.*?)['"]?\)/);g&&(B=g[1])}const F={backgroundColor:w.backgroundColor,backgroundImage:w.backgroundImage,opacity:o.dataset[Q.KEY]===Q.VALUES.HIDE?1:parseFloat(w.opacity),zIndex:q,borderRadius:w.borderRadius,borderColor:w.borderColor,borderWidth:w.borderWidth,boxShadow:w.boxShadow,imageSrc:B,isTraveler:M},ee=F;let te,L;const X=[],re=w.overflow==="hidden"?[...l||[],o]:l;return o.tagName.toLowerCase()!=="svg"&&Array.from(o.childNodes).forEach(g=>{const S=g.nodeType===Node.TEXT_NODE?d:h,O=ze(g,e,S,r,q,c,g.nodeType===Node.TEXT_NODE?b:void 0,g.nodeType===Node.TEXT_NODE&&Object.keys(v).length>0?v:void 0,re);O&&X.push(O)}),{id:x,type:"BOX",element:o,rect:{x:C.left+window.scrollX,y:C.top+window.scrollY,width:C.width,height:C.height},styles:ee,textContent:te,textStyles:L,dirtyMask:e,visibility:d,isTraveler:M,captureLayer:r,nativeLayer:b,nativeStyles:b!==void 0?Ye(oe({},F),{backgroundColor:(V=v.backgroundColor)!=null?V:F.backgroundColor,backgroundImage:(j=v.backgroundImage)!=null?j:F.backgroundImage,opacity:(he=v.opacity)!=null?he:F.opacity,zIndex:v.zIndex!==void 0?v.zIndex+q:F.zIndex,borderRadius:(de=v.borderRadius)!=null?de:F.borderRadius,borderColor:(ue=v.borderColor)!=null?ue:F.borderColor,borderWidth:(pe=v.borderWidth)!=null?pe:F.borderWidth,boxShadow:(me=v.boxShadow)!=null?me:F.boxShadow,isTraveler:F.isTraveler,transform:v.transform,imageSrc:W!=null?W:B}):void 0,nativeRect:b!==void 0?{x:v.x!==void 0?parseFloat(v.x):C.left+window.scrollX,y:v.y!==void 0?parseFloat(v.y):C.top+window.scrollY,width:v.width!==void 0?parseFloat(v.width):C.width,height:v.height!==void 0?parseFloat(v.height):C.height}:void 0,isFixed:w.position==="fixed",clipElements:l,children:X,shaderHooks:A}}function at(n,e){e.size!==0&&e.forEach((t,r)=>{var c,s,a,l;const i=n.get(r);!i||!i.userData.basePosition||(G.forceUpdateUniforms(i.material,{backgroundColor:t.backgroundColor,backgroundImage:t.backgroundImage,boxShadow:t.boxShadow,opacity:t.opacity,borderRadius:(s=t.borderRadius)!=null?s:(c=i.userData.baseStyles)==null?void 0:c.borderRadius}),i.userData.nativeMesh&&G.forceUpdateUniforms(i.userData.nativeMesh.material,{backgroundColor:t.backgroundColor,backgroundImage:t.backgroundImage,boxShadow:t.boxShadow,opacity:t.opacity,borderRadius:(l=t.borderRadius)!=null?l:(a=i.userData.baseStyles)==null?void 0:a.borderRadius}))})}class lt{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 Ae(e,{resizeDebounce:i.resizeDebounce}),this.tracker.onLayoutChange.add((c,s)=>{document.querySelector(`[${z.NAME}~='${z.VALUES.TRAVELER}']`)!==null&&!this.isTravelEnabled&&(this.isTravelEnabled=!0,this.renderer.createRenderTarget());const l=ze(this.target,c,J,1,0,this.renderer.qualityFactor);l&&this.renderer.syncScene(l,s)}),this.tracker.onStyleChange.add(c=>{at(this.registry,c)}),this.tracker.onRender.add(()=>{this.renderer.syncMeshesByDOM(),this.renderer.render()})}start(){this.tracker.start()}stop(){this.tracker.stop()}}class ct{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 ht{constructor(e,t){u(this,"renderer");u(this,"syncer");u(this,"target");u(this,"registry");var i,c,s;if(this.target=e,this.registry=new ct,!document.getElementById("mirage-engine-styles")){const a=document.createElement("style");a.id="mirage-engine-styles",a.textContent=`
|
|
186
|
-
[${
|
|
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(
|
|
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.
|
|
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/painter": "1.0.
|
|
25
|
-
"@mirage-engine/
|
|
26
|
-
"@mirage-engine/
|
|
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"
|