UNPKG

@sfgrp/encase

Version:

Encase is a viz library for managing containers (things with things in them).

2 lines 530 kB
(function(R,T){typeof exports=="object"&&typeof module<"u"?T(exports,require("vue"),require("three")):typeof define=="function"&&define.amd?define(["exports","vue","three"],T):(R=typeof globalThis<"u"?globalThis:R||self,T(R.encase={},R.Vue,R.Three))})(this,function(R,T,w){"use strict";function Qg(g){const I=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(g){for(const M in g)if(M!=="default"){const D=Object.getOwnPropertyDescriptor(g,M);Object.defineProperty(I,M,D.get?D:{enumerable:!0,get:()=>g[M]})}}return I.default=g,Object.freeze(I)}const lI=Qg(w);function W(g){return T.getCurrentScope()?(T.onScopeDispose(g),!0):!1}function d(){const g=new Set,I=A=>{g.delete(A)};return{on:A=>{g.add(A);const N=()=>I(A);return W(N),{off:N}},off:I,trigger:(...A)=>Promise.all(Array.from(g).map(N=>N(...A)))}}function h(g){return typeof g=="function"?g():T.unref(g)}const sI=typeof window<"u"&&typeof document<"u";typeof WorkerGlobalScope<"u"&&globalThis instanceof WorkerGlobalScope;const Bg=g=>g!=null,eg=Object.prototype.toString,Yg=g=>eg.call(g)==="[object Object]",tI=()=>{};function Ug(g,I){function M(...D){return new Promise((A,N)=>{Promise.resolve(g(()=>I.apply(this,D),{fn:I,thisArg:this,args:D})).then(A).catch(N)})}return M}function kg(g,I={}){let M,D,A=tI;const N=C=>{clearTimeout(C),A(),A=tI};return C=>{const E=h(g),O=h(I.maxWait);return M&&N(M),E<=0||O!==void 0&&O<=0?(D&&(N(D),D=null),Promise.resolve(C())):new Promise((x,S)=>{A=I.rejectOnCancel?S:x,O&&!D&&(D=setTimeout(()=>{M&&N(M),D=null,x(C())},O)),M=setTimeout(()=>{D&&N(D),D=null,x(C())},E)})}}function bg(g,I,M=!1){return I.reduce((D,A)=>(A in g&&(!M||g[A]!==void 0)&&(D[A]=g[A]),D),{})}function og(g){return T.getCurrentInstance()}function ng(g,I=200,M={}){return Ug(kg(I,M),g)}function uI(g,I=200,M={}){const D=T.ref(g.value),A=ng(()=>{D.value=g.value},I,M);return T.watch(g,()=>A()),D}function Gg(g,I={}){if(!T.isRef(g))return T.toRefs(g);const M=Array.isArray(g.value)?Array.from({length:g.value.length}):{};for(const D in g.value)M[D]=T.customRef(()=>({get(){return g.value[D]},set(A){var N;if((N=h(I.replaceRef))!=null?N:!0)if(Array.isArray(g.value)){const C=[...g.value];C[D]=A,g.value=C}else{const C={...g.value,[D]:A};Object.setPrototypeOf(C,Object.getPrototypeOf(g.value)),g.value=C}else g.value[D]=A}}));return M}function QI(g,I=!0,M){og()?T.onMounted(g,M):I?g():T.nextTick(g)}function Hg(g,I=1e3,M={}){const{immediate:D=!0,immediateCallback:A=!1}=M;let N=null;const z=T.ref(!1);function C(){N&&(clearInterval(N),N=null)}function E(){z.value=!1,C()}function O(){const x=h(I);x<=0||(z.value=!0,A&&g(),C(),N=setInterval(g,x))}if(D&&sI&&O(),T.isRef(I)||typeof I=="function"){const x=T.watch(I,()=>{z.value&&sI&&O()});W(x)}return W(E),{isActive:z,pause:E,resume:O}}function F(g){var I;const M=h(g);return(I=M==null?void 0:M.$el)!=null?I:M}const v=sI?window:void 0;function gI(...g){let I,M,D,A;if(typeof g[0]=="string"||Array.isArray(g[0])?([M,D,A]=g,I=v):[I,M,D,A]=g,!I)return tI;Array.isArray(M)||(M=[M]),Array.isArray(D)||(D=[D]);const N=[],z=()=>{N.forEach(x=>x()),N.length=0},C=(x,S,i,j)=>(x.addEventListener(S,i,j),()=>x.removeEventListener(S,i,j)),E=T.watch(()=>[F(I),h(A)],([x,S])=>{if(z(),!x)return;const i=Yg(S)?{...S}:S;N.push(...M.flatMap(j=>D.map(Q=>C(x,j,Q,i))))},{immediate:!0,flush:"post"}),O=()=>{E(),z()};return W(O),O}function ag(){const g=T.ref(!1),I=T.getCurrentInstance();return I&&T.onMounted(()=>{g.value=!0},I),g}function CI(g){const I=ag();return T.computed(()=>(I.value,!!g()))}function rg(g,I,M={}){const{window:D=v,...A}=M;let N;const z=CI(()=>D&&"MutationObserver"in D),C=()=>{N&&(N.disconnect(),N=void 0)},E=T.computed(()=>{const i=h(g),j=(Array.isArray(i)?i:[i]).map(F).filter(Bg);return new Set(j)}),O=T.watch(()=>E.value,i=>{C(),z.value&&i.size&&(N=new MutationObserver(I),i.forEach(j=>N.observe(j,A)))},{immediate:!0,flush:"post"}),x=()=>N==null?void 0:N.takeRecords(),S=()=>{C(),O()};return W(S),{isSupported:z,stop:S,takeRecords:x}}function BI(g,I={}){const{immediate:M=!0,fpsLimit:D=void 0,window:A=v}=I,N=T.ref(!1),z=D?1e3/D:null;let C=0,E=null;function O(i){if(!N.value||!A)return;C||(C=i);const j=i-C;if(z&&j<z){E=A.requestAnimationFrame(O);return}C=i,g({delta:j,timestamp:i}),E=A.requestAnimationFrame(O)}function x(){!N.value&&A&&(N.value=!0,C=0,E=A.requestAnimationFrame(O))}function S(){N.value=!1,E!=null&&A&&(A.cancelAnimationFrame(E),E=null)}return M&&x(),W(S),{isActive:T.readonly(N),pause:S,resume:x}}function hg(g,I={}){const{window:M=v}=I,D=CI(()=>M&&"matchMedia"in M&&typeof M.matchMedia=="function");let A;const N=T.ref(!1),z=O=>{N.value=O.matches},C=()=>{A&&("removeEventListener"in A?A.removeEventListener("change",z):A.removeListener(z))},E=T.watchEffect(()=>{D.value&&(C(),A=M.matchMedia(h(g)),"addEventListener"in A?A.addEventListener("change",z):A.addListener(z),N.value=A.matches)});return W(()=>{E(),C(),A=void 0}),N}function Lg(g={}){const{window:I=v}=g,M=T.ref(1);if(I){let D=function(){M.value=I.devicePixelRatio,A(),N=I.matchMedia(`(resolution: ${M.value}dppx)`),N.addEventListener("change",D,{once:!0})},A=function(){N==null||N.removeEventListener("change",D)},N;D(),W(A)}return{pixelRatio:M}}function fI(g,I,M={}){const{window:D=v,...A}=M;let N;const z=CI(()=>D&&"ResizeObserver"in D),C=()=>{N&&(N.disconnect(),N=void 0)},E=T.computed(()=>Array.isArray(g)?g.map(S=>F(S)):[F(g)]),O=T.watch(E,S=>{if(C(),z.value&&D){N=new ResizeObserver(I);for(const i of S)i&&N.observe(i,A)}},{immediate:!0,flush:"post"}),x=()=>{C(),O()};return W(x),{isSupported:z,stop:x}}function lg(g,I={}){const{reset:M=!0,windowResize:D=!0,windowScroll:A=!0,immediate:N=!0}=I,z=T.ref(0),C=T.ref(0),E=T.ref(0),O=T.ref(0),x=T.ref(0),S=T.ref(0),i=T.ref(0),j=T.ref(0);function Q(){const c=F(g);if(!c){M&&(z.value=0,C.value=0,E.value=0,O.value=0,x.value=0,S.value=0,i.value=0,j.value=0);return}const B=c.getBoundingClientRect();z.value=B.height,C.value=B.bottom,E.value=B.left,O.value=B.right,x.value=B.top,S.value=B.width,i.value=B.x,j.value=B.y}return fI(g,Q),T.watch(()=>F(g),c=>!c&&Q()),rg(g,Q,{attributeFilter:["style","class"]}),A&&gI("scroll",Q,{capture:!0,passive:!0}),D&&gI("resize",Q,{passive:!0}),QI(()=>{N&&Q()}),{height:z,bottom:C,left:E,right:O,top:x,width:S,x:i,y:j,update:Q}}function ug(g,I={width:0,height:0},M={}){const{window:D=v,box:A="content-box"}=M,N=T.computed(()=>{var S,i;return(i=(S=F(g))==null?void 0:S.namespaceURI)==null?void 0:i.includes("svg")}),z=T.ref(I.width),C=T.ref(I.height),{stop:E}=fI(g,([S])=>{const i=A==="border-box"?S.borderBoxSize:A==="content-box"?S.contentBoxSize:S.devicePixelContentBoxSize;if(D&&N.value){const j=F(g);if(j){const Q=j.getBoundingClientRect();z.value=Q.width,C.value=Q.height}}else if(i){const j=Array.isArray(i)?i:[i];z.value=j.reduce((Q,{inlineSize:c})=>Q+c,0),C.value=j.reduce((Q,{blockSize:c})=>Q+c,0)}else z.value=S.contentRect.width,C.value=S.contentRect.height},M);QI(()=>{const S=F(g);S&&(z.value="offsetWidth"in S?S.offsetWidth:I.width,C.value="offsetHeight"in S?S.offsetHeight:I.height)});const O=T.watch(()=>F(g),S=>{z.value=S?I.width:0,C.value=S?I.height:0});function x(){E(),O()}return{width:z,height:C,stop:x}}function fg(g){var I;const M=T.ref(0);if(typeof performance>"u")return M;const D=(I=g==null?void 0:g.every)!=null?I:10;let A=performance.now(),N=0;return BI(()=>{if(N+=1,N>=D){const z=performance.now(),C=z-A;M.value=Math.round(1e3/(C/N)),A=z,N=0}}),M}function Jg(g={}){const I=T.ref(),M=CI(()=>typeof performance<"u"&&"memory"in performance);if(M.value){const{interval:D=1e3}=g;Hg(()=>{I.value=performance.memory},D,{immediate:g.immediate,immediateCallback:g.immediateCallback})}return{isSupported:M,memory:I}}const JI={x:0,y:0,pointerId:0,pressure:0,tiltX:0,tiltY:0,width:0,height:0,twist:0,pointerType:null},pg=Object.keys(JI);function mg(g={}){const{target:I=v}=g,M=T.ref(!1),D=T.ref(g.initialValue||{});Object.assign(D.value,JI,D.value);const A=N=>{M.value=!0,!(g.pointerTypes&&!g.pointerTypes.includes(N.pointerType))&&(D.value=bg(N,pg,!1))};if(I){const N={passive:!0};gI(I,["pointerdown","pointermove","pointerup"],A,N),gI(I,"pointerleave",()=>M.value=!1,N)}return{...Gg(D),isInside:M}}function dg(g={}){const{window:I=v,initialWidth:M=Number.POSITIVE_INFINITY,initialHeight:D=Number.POSITIVE_INFINITY,listenOrientation:A=!0,includeScrollbar:N=!0}=g,z=T.ref(M),C=T.ref(D),E=()=>{I&&(N?(z.value=I.innerWidth,C.value=I.innerHeight):(z.value=I.document.documentElement.clientWidth,C.value=I.document.documentElement.clientHeight))};if(E(),QI(E),gI("resize",E,{passive:!0}),A){const O=hg("(orientation: portrait)");T.watch(O,()=>E())}return{width:z,height:C}}var Fg=Object.defineProperty,Wg=(g,I,M)=>I in g?Fg(g,I,{enumerable:!0,configurable:!0,writable:!0,value:M}):g[I]=M,pI=(g,I,M)=>Wg(g,typeof I!="symbol"?I+"":I,M);const Xg="@tresjs/core",vg="module",_g="4.2.9",Pg="pnpm@9.1.4",Rg="Declarative ThreeJS using Vue Components",Kg="Alvaro Saburido <hola@alvarosaburido.dev> (https://github.com/alvarosabu/)",Vg="MIT",qg={type:"git",url:"git+https://github.com/Tresjs/tres.git"},Zg=["vue","3d","threejs","three","threejs-vue"],$g=!1,IM={".":{types:"./dist/index.d.ts",import:"./dist/tres.js",require:"./dist/tres.umd.cjs"},"./components":{types:"./dist/src/components/index.d.ts"},"./composables":{types:"./dist/src/composables/index.d.ts"},"./types":{types:"./dist/src/types/index.d.ts"},"./utils":{types:"./dist/src/utils/index.d.ts"},"./*":"./*"},gM="./dist/tres.js",MM="./dist/tres.js",DM="./dist/index.d.ts",AM=["*.d.ts","dist"],NM={access:"public"},TM={dev:"cd playground/vue && npm run dev","dev:nuxt":"cd playground/nuxt && npm run dev",build:"vite build",test:"vitest","test:ci":"vitest run","test:ui":"vitest --ui --coverage.enabled=true",release:"release-it",coverage:"vitest run --coverage",lint:"eslint .","lint:fix":"eslint . --fix","docs:dev":"vitepress dev docs","docs:build":"vitepress build docs","docs:serve":"vitepress serve docs","docs:preview":"vitepress preview docs","docs:contributors":"esno scripts/update-contributors.ts",prepare:"node .husky/install.mjs"},zM={three:">=0.133",vue:">=3.4"},CM={"@alvarosabu/utils":"^3.2.0","@vue/devtools-api":"^6.6.3","@vueuse/core":"^10.11.0"},OM={"@release-it/conventional-changelog":"^8.0.1","@stackblitz/sdk":"^1.11.0","@tresjs/cientos":"3.9.0","@tresjs/eslint-config":"^1.1.0","@types/three":"^0.166.0","@typescript-eslint/eslint-plugin":"^7.16.0","@typescript-eslint/parser":"^7.16.0","@vitejs/plugin-vue":"^5.0.5","@vitest/coverage-c8":"^0.33.0","@vitest/coverage-v8":"^2.0.2","@vitest/ui":"^2.0.2","@vue/test-utils":"^2.4.6",eslint:"^9.6.0","eslint-plugin-vue":"^9.27.0",esno:"^4.7.0",gsap:"^3.12.5",husky:"^9.0.11",jsdom:"^24.1.0",kolorist:"^1.8.0",ohmyfetch:"^0.4.21",pathe:"^1.1.2","release-it":"^17.5.0","rollup-plugin-analyzer":"^4.0.0","rollup-plugin-copy":"^3.5.0","rollup-plugin-visualizer":"^5.12.0",sponsorkit:"^0.14.6",three:"^0.166.1",unocss:"^0.61.3",unplugin:"^1.11.0","unplugin-vue-components":"^0.27.2",vite:"^5.3.3","vite-plugin-banner":"^0.7.1","vite-plugin-dts":"3.9.1","vite-plugin-inspect":"^0.8.4","vite-plugin-require-transform":"^1.0.21","vite-svg-loader":"^5.1.0",vitepress:"1.3.0",vitest:"^2.0.2",vue:"^3.4.31","vue-demi":"^0.14.8"},EM={name:Xg,type:vg,version:_g,packageManager:Pg,description:Rg,author:Kg,license:Vg,repository:qg,keywords:Zg,sideEffects:$g,exports:IM,main:gM,module:MM,types:DM,files:AM,publishConfig:NM,scripts:TM,peerDependencies:zM,dependencies:CM,devDependencies:OM};function eI(g){return typeof g>"u"}function OI(g){return Array.isArray(g)}function xM(g){return typeof g=="number"}function mI(g){return typeof g=="string"}function V(g){return typeof g=="function"}function _(g){return g===Object(g)&&!OI(g)&&!V(g)}function K(g){return _(g)&&"isObject3D"in g&&!!g.isObject3D}function dI(g){return _(g)&&"isCamera"in g&&!!g.isCamera}function yM(g){return _(g)&&"isBufferGeometry"in g&&!!g.isBufferGeometry}function iM(g){return _(g)&&"isMaterial"in g&&!!g.isMaterial}function cM(g){return _(g)&&"isLight"in g&&!!g.isLight}function SM(g){return _(g)&&"isFog"in g&&!!g.isFog}function jM(g){return _(g)&&"isScene"in g&&!!g.isScene}function EI(g){return K(g)||yM(g)||iM(g)||SM(g)}function wM(g){return _(g)&&!!g.isPrimitive}const sM=({sizes:g})=>{const I=T.ref([]),M=T.computed(()=>I.value[0]),D=z=>{const C=z instanceof w.Camera?z:I.value.find(O=>O.uuid===z);if(!C)return;const E=I.value.filter(({uuid:O})=>O!==C.uuid);I.value=[C,...E]},A=(z,C=!1)=>{if(dI(z)){const E=z;if(I.value.some(({uuid:O})=>O===E.uuid))return;C?D(E):I.value.push(E)}},N=z=>{if(dI(z)){const C=z;I.value=I.value.filter(({uuid:E})=>E!==C.uuid)}};return T.watchEffect(()=>{g.aspectRatio.value&&I.value.forEach(z=>{!z.manual&&(z instanceof w.PerspectiveCamera||tM(z))&&(z instanceof w.PerspectiveCamera?z.aspect=g.aspectRatio.value:(z.left=g.width.value*-.5,z.right=g.width.value*.5,z.top=g.height.value*.5,z.bottom=g.height.value*-.5),z.updateProjectionMatrix())})}),T.onUnmounted(()=>{I.value=[]}),{camera:M,cameras:I,registerCamera:A,deregisterCamera:N,setCameraActive:D}};function tM(g){return g.hasOwnProperty("isOrthographicCamera")&&g.isOrthographicCamera}const FI=d(),WI=d(),YI=d(),MI=new w.Clock;let xI=0,yI=0;const{pause:QM,resume:XI,isActive:BM}=BI(()=>{FI.trigger({delta:xI,elapsed:yI,clock:MI}),WI.trigger({delta:xI,elapsed:yI,clock:MI}),YI.trigger({delta:xI,elapsed:yI,clock:MI})},{immediate:!1});YI.on(()=>{xI=MI.getDelta(),yI=MI.getElapsedTime()});let vI=!1;const _I=()=>(vI||(vI=!0,XI()),{onBeforeLoop:FI.on,onLoop:WI.on,onAfterLoop:YI.on,pause:QM,resume:XI,isActive:BM}),iI="[TresJS ▲ ■ ●] ";function cI(){function g(...D){typeof D[0]=="string"?D[0]=iI+D[0]:D.unshift(iI),console.error(...D)}function I(...D){typeof D[0]=="string"?D[0]=iI+D[0]:D.unshift(iI),console.warn(...D)}function M(D,A){}return{logError:g,logWarning:I,logMessage:M}}function eM(g){return g instanceof w.Color?g:Array.isArray(g)?new w.Color(...g):new w.Color(g)}class YM extends lI.Mesh{constructor(...I){super(...I),pI(this,"type","HightlightMesh"),pI(this,"createTime"),this.createTime=Date.now()}onBeforeRender(){const I=(Date.now()-this.createTime)/1e3,M=1+.07*Math.sin(2.5*I);this.scale.set(M,M,M)}}const PI=(g,I)=>{for(const M of Object.keys(I))I[M]instanceof Object&&Object.assign(I[M],PI(g[M],I[M]));return Object.assign(g||{},I),g},UM="html,body,base,head,link,meta,style,title,address,article,aside,footer,header,hgroup,h1,h2,h3,h4,h5,h6,nav,section,div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,ruby,s,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,output,progress,select,textarea,details,dialog,menu,summary,template,blockquote,iframe,tfoot",kM=nM(UM);function RI(g){return g&&g.nodeType===1}function SI(g){return g.replace(/-([a-z])/g,(I,M)=>M.toUpperCase())}const bM=/\B([A-Z])/g;function oM(g){return g.replace(bM,"-$1").toLowerCase()}function nM(g,I){const M=Object.create(null),D=g.split(",");for(let A=0;A<D.length;A++)M[D[A]]=!0;return A=>!!M[A]}const KI=(g,I)=>{if(!I)return;const M=Array.isArray(I)?I:I.match(/([^[.\]])+/g);return M==null?void 0:M.reduce((D,A)=>D&&D[A],g)},GM=(g,I,M)=>{const D=Array.isArray(I)?I:I.match(/([^[.\]])+/g);D&&D.reduce((A,N,z)=>(A[N]===void 0&&(A[N]={}),z===D.length-1&&(A[N]=M),A[N]),g)};function VI(g,I){if(RI(g)&&RI(I)){const A=g.attributes,N=I.attributes;return A.length!==N.length?!1:Array.from(A).every(({name:z,value:C})=>I.getAttribute(z)===C)}if(g===I)return!0;if(g===null||typeof g!="object"||I===null||typeof I!="object")return!1;const M=Object.keys(g),D=Object.keys(I);if(M.length!==D.length)return!1;for(const A of M)if(!D.includes(A)||!VI(g[A],I[A]))return!1;return!0}function HM(g,I){if(!Array.isArray(g)||!Array.isArray(I)||g.length!==I.length)return!1;for(let M=0;M<g.length;M++)if(!VI(g[M],I[M]))return!1;return!0}function aM(g,I,M,D){const A=E=>{if(E.uuid===I)return E;for(const O of E.children){const x=A(O);if(x)return x}},N=A(g);if(!N){console.warn("Object with UUID not found in the scene.");return}let z=N;for(let E=0;E<M.length-1;E++)if(z[M[E]]!==void 0)z=z[M[E]];else{console.warn(`Property path is not valid: ${M.join(".")}`);return}const C=M[M.length-1];z[C]!==void 0?z[C]=D:console.warn(`Property path is not valid: ${M.join(".")}`)}function rM(g){const I=new w.MeshBasicMaterial({color:11003607,transparent:!0,opacity:.2,depthTest:!1,side:w.DoubleSide});return new YM(g.geometry.clone(),I)}function hM(g){return"map"in g}function qI(g){hM(g)&&g.map&&g.map.dispose(),g.dispose()}function ZI(g){var I,M;if(g.parent&&((I=g.removeFromParent)==null||I.call(g)),delete g.__tres,[...g.children].forEach(D=>ZI(D)),!(g instanceof w.Scene)){const D=g;g&&((M=g.dispose)==null||M.call(g)),D.geometry&&(D.geometry.dispose(),delete D.geometry),Array.isArray(D.material)?(D.material.forEach(A=>qI(A)),delete D.material):D.material&&(qI(D.material),delete D.material)}}function LM(g,I){let M=0;for(let D=0;D<g.length;D++)I(g[D],D)&&(g[M]=g[D],M++);return g.length=M,g}function UI(g,I){let M=g;if(I.includes("-")){const D=I.split("-");let A=D.shift();for(;M&&D.length;)A in M?(M=M[A],A=D.shift()):A=$I(A,D.shift());return{target:M,key:$I(A,...D)}}else return{target:M,key:I}}function $I(...g){return g.map((I,M)=>M===0?I:I.charAt(0).toUpperCase()+I.slice(1)).join("")}const Ig=/-\d+$/;function lM(g,I,M){if(mI(M)){if(Ig.test(M)){const N=M.replace(Ig,""),{target:z,key:C}=UI(g,N);if(!Array.isArray(z[C])){const E=z[C],O=[];O.__tresDetach=()=>{O.every(x=>eI(x))&&(z[C]=E)},z[C]=O}}const{target:D,key:A}=UI(g,M);I.__tres.previousAttach=D[A],D[A]=$(I)}else I.__tres.previousAttach=M(g,I)}function uM(g,I,M){var D,A,N;if(mI(M)){const{target:z,key:C}=UI(g,M),E=I.__tres.previousAttach;E===void 0?delete z[C]:z[C]=E,"__tresDetach"in z&&z.__tresDetach()}else(A=(D=I.__tres)==null?void 0:D.previousAttach)==null||A.call(D,g,I);(N=I.__tres)==null||delete N.previousAttach}function q(g,I,M){const D=g;return D.__tres={type:"unknown",eventCount:0,root:M,handlers:{},memoizedProps:{},objects:[],parent:null,previousAttach:null,...I},D.__tres.attach||(D.isMaterial?D.__tres.attach="material":D.isBufferGeometry?D.__tres.attach="geometry":D.isFog&&(D.__tres.attach="fog")),D}function gg(g){var I;const M=(I=g==null?void 0:g.__tres)==null?void 0:I.root;M&&M.render&&M.render.canBeInvalidated.value&&M.invalidate()}function fM(g,I,M){var D;if(!V(g.setPixelRatio))return;let A=0;if(OI(M)&&M.length>=2){const[N,z]=M;A=w.MathUtils.clamp(I,N,z)}else xM(M)?A=M:A=I;A!==((D=g.getPixelRatio)==null?void 0:D.call(g))&&g.setPixelRatio(A)}function JM(g,I,M,D,A){const N=[...I.__tres.objects],z=$(I);if(g=$(g),z===g)return!0;const C=q(g,I.__tres??{},A),E=I.parent??I.__tres.parent??null,O={...I.__tres.memoizedProps};delete O.object;for(const x of N)Mg(x,A),Dg(x,A);z.__tres.objects=[],D.remove(I);for(const[x,S]of Object.entries(O))D.patchProp(C,x,C[x],S);M(g),D.insert(I,E);for(const x of N)D.insert(x,I);return!0}function $(g){return wM(g)?(g.object.__tres=g.__tres,g.object):g}function Mg(g,I){var M,D,A,N;const z=((M=g.__tres)==null?void 0:M.parent)||I.scene.value;g.__tres&&(g.__tres.parent=null),z&&z.__tres&&"objects"in z.__tres&&LM(z.__tres.objects,C=>C!==g),(D=g.__tres)!=null&&D.attach?uM(z,g,g.__tres.attach):((N=(A=g.parent)==null?void 0:A.remove)==null||N.call(A,$(g)),g.parent=null)}function Dg(g,I){var M;(M=g.traverse)==null||M.call(g,D=>{var A;I.deregisterCamera(D),(A=I.eventManager)==null||A.deregisterPointerMissedObject(D)}),I.deregisterCamera(g),gg(g)}const pM=Number.parseInt(w.REVISION.replace("dev","")),jI={realistic:{shadows:!0,physicallyCorrectLights:!0,outputColorSpace:w.SRGBColorSpace,toneMapping:w.ACESFilmicToneMapping,toneMappingExposure:3,shadowMap:{enabled:!0,type:w.PCFSoftShadowMap}},flat:{toneMapping:w.NoToneMapping,toneMappingExposure:1}};function mM({canvas:g,options:I,contextParts:{sizes:M,render:D,invalidate:A,advance:N}}){const z=T.computed(()=>({alpha:h(I.alpha)??!0,depth:h(I.depth),canvas:F(g),context:h(I.context),stencil:h(I.stencil),antialias:h(I.antialias)??!0,precision:h(I.precision),powerPreference:h(I.powerPreference),premultipliedAlpha:h(I.premultipliedAlpha),preserveDrawingBuffer:h(I.preserveDrawingBuffer),logarithmicDepthBuffer:h(I.logarithmicDepthBuffer),failIfMajorPerformanceCaveat:h(I.failIfMajorPerformanceCaveat)})),C=T.shallowRef(new w.WebGLRenderer(z.value));function E(){I.renderMode==="on-demand"&&A()}T.watch(z,()=>{C.value.dispose(),C.value=new w.WebGLRenderer(z.value),E()}),T.watch([M.width,M.height],()=>{C.value.setSize(M.width.value,M.height.value),E()},{immediate:!0}),T.watch(()=>I.clearColor,E);const{pixelRatio:O}=Lg(),{logError:x}=cI(),S=(()=>{const j=new w.WebGLRenderer,Q={shadowMap:{enabled:j.shadowMap.enabled,type:j.shadowMap.type},toneMapping:j.toneMapping,toneMappingExposure:j.toneMappingExposure,outputColorSpace:j.outputColorSpace};return j.dispose(),Q})(),i=h(I.renderMode);return i==="on-demand"&&A(),i==="manual"&&setTimeout(()=>{N()},100),T.watchEffect(()=>{const j=h(I.preset);j&&(j in jI||x(`Renderer Preset must be one of these: ${Object.keys(jI).join(", ")}`),PI(C.value,jI[j])),fM(C.value,O.value,h(I.dpr)),i==="always"&&(D.frames.value=Math.max(1,D.frames.value));const Q=(t,U)=>{const k=h(t),o=()=>{if(j)return KI(jI[j],U)};if(k!==void 0)return k;const n=o();return n!==void 0?n:KI(S,U)},c=(t,U)=>GM(C.value,U,Q(t,U));c(I.shadows,"shadowMap.enabled"),c(I.toneMapping??w.ACESFilmicToneMapping,"toneMapping"),c(I.shadowMapType,"shadowMap.type"),pM<150&&c(!I.useLegacyLights,"physicallyCorrectLights"),c(I.outputColorSpace,"outputColorSpace"),c(I.toneMappingExposure,"toneMappingExposure");const B=Q(I.clearColor,"clearColor");B&&C.value.setClearColor(B?eM(B):new w.Color(0))}),T.onUnmounted(()=>{C.value.dispose(),C.value.forceContextLoss()}),{renderer:C}}const dM=(g,I)=>{const M=T.computed(()=>I.renderer.value.domElement),D=T.shallowRef([]),{x:A,y:N}=mg({target:M});let z=0;const{width:C,height:E,top:O,left:x}=lg(M),S=({x:Y,y:f})=>{if(M.value)return{x:(Y-x.value)/C.value*2-1,y:-((f-O.value)/E.value)*2+1}},i=({x:Y,y:f})=>{if(I.camera.value)return I.raycaster.value.setFromCamera(new w.Vector2(Y,f),I.camera.value),D.value=I.raycaster.value.intersectObjects(g.value,!0),D.value},j=Y=>{const f=S({x:(Y==null?void 0:Y.clientX)??A.value,y:(Y==null?void 0:Y.clientY)??N.value});return f?i(f)||[]:[]},Q=d(),c=d(),B=d(),t=d(),U=d(),k=d(),o=d(),n=d();function G(Y){const f={};for(const P in Y)typeof P!="function"&&(f[P]=Y[P]);return f}const e=(Y,f)=>{var P,zI,tg;const VD=G(f),qD=new w.Vector3(f==null?void 0:f.clientX,f==null?void 0:f.clientY,0).unproject((P=I.camera)==null?void 0:P.value);Y.trigger({...VD,intersections:D.value,unprojectedPoint:qD,ray:(zI=I.raycaster)==null?void 0:zI.value.ray,camera:(tg=I.camera)==null?void 0:tg.value,sourceEvent:f,delta:z,stopPropagating:!1})};let a;const u=Y=>{j(Y),e(B,Y),a=Y},y=()=>{a&&u(a)};let s,b,L;const r=Y=>{var f;s=(f=D.value[0])==null?void 0:f.object,z=0,b=new w.Vector2((Y==null?void 0:Y.clientX)??A.value,(Y==null?void 0:Y.clientY)??N.value),e(U,Y)};let p,l=!1;const TI=Y=>{var f,P,zI;Y instanceof PointerEvent&&(D.value.length===0&&e(k,Y),s===((f=D.value[0])==null?void 0:f.object)&&(L=new w.Vector2((Y==null?void 0:Y.clientX)??A.value,(Y==null?void 0:Y.clientY)??N.value),z=b==null?void 0:b.distanceTo(L),Y.button===0?(e(Q,Y),p===((P=D.value[0])==null?void 0:P.object)?l=!0:(p=(zI=D.value[0])==null?void 0:zI.object,l=!1)):Y.button===2&&e(o,Y)),e(t,Y))},Z=Y=>{l&&(e(c,Y),p=void 0,l=!1)},wg=Y=>e(B,Y),sg=Y=>e(n,Y);return M.value.addEventListener("pointerup",TI),M.value.addEventListener("pointerdown",r),M.value.addEventListener("pointermove",u),M.value.addEventListener("pointerleave",wg),M.value.addEventListener("dblclick",Z),M.value.addEventListener("wheel",sg),T.onUnmounted(()=>{M!=null&&M.value&&(M.value.removeEventListener("pointerup",TI),M.value.removeEventListener("pointerdown",r),M.value.removeEventListener("pointermove",u),M.value.removeEventListener("pointerleave",wg),M.value.removeEventListener("dblclick",Z),M.value.removeEventListener("wheel",sg))}),{intersects:D,onClick:Y=>Q.on(Y).off,onDblClick:Y=>c.on(Y).off,onContextMenu:Y=>o.on(Y).off,onPointerMove:Y=>B.on(Y).off,onPointerUp:Y=>t.on(Y).off,onPointerDown:Y=>U.on(Y).off,onPointerMissed:Y=>k.on(Y).off,onWheel:Y=>n.on(Y).off,forceUpdate:y}};function FM(){const{logWarning:g}=cI();function I(N,z,C){let E=null;return N.traverse(O=>{O[z]===C&&(E=O)}),E||g(`Child with ${z} '${C}' not found.`),E}function M(N,z,C){const E=[];return N.traverse(O=>{O[z].includes(C)&&E.push(O)}),E.length||g(`Children with ${z} '${C}' not found.`),E}function D(N,z){return I(N,"name",z)}function A(N,z){return M(N,"name",z)}return{seek:I,seekByName:D,seekAll:M,seekAllByName:A}}function kI(g){let I=0;return g.traverse(M=>{if(M.isMesh&&M.geometry&&M.type!=="HightlightMesh"){const D=M.geometry,A=D.attributes.position.count*3*Float32Array.BYTES_PER_ELEMENT,N=D.index?D.index.count*Uint32Array.BYTES_PER_ELEMENT:0,z=D.attributes.normal?D.attributes.normal.count*3*Float32Array.BYTES_PER_ELEMENT:0,C=D.attributes.uv?D.attributes.uv.count*2*Float32Array.BYTES_PER_ELEMENT:0,E=A+N+z+C;I+=E}}),I}function WM(g){return(g/1024).toFixed(2)}const bI=T.ref({}),oI=g=>Object.assign(bI.value,g);function XM(g,I,M){var D;const A=T.shallowRef(),N=T.shallowRef();g&&(A.value=g),I&&(N.value=I);const z=y=>{var s;return((s=y.__tres)==null?void 0:s.eventCount)>0},C=y=>{var s;return((s=y.children)==null?void 0:s.some(b=>C(b)))||z(y)},E=T.shallowRef(((D=A.value)==null?void 0:D.children).filter(C)||[]);function O(y,s){if(Array.isArray(y))for(const b of y)b(s);typeof y=="function"&&y(s)}function x(y,s){const b=[],L=()=>s.stopPropagating=!0;s.stopPropagation=L;for(const r of s==null?void 0:s.intersections){if(s.stopPropagating)return;s={...s,...r};const{object:p}=r;s.eventObject=p,O(p[y],s),b.push(p);let l=p.parent;for(;l!==null&&!s.stopPropagating&&!b.includes(l);)s.eventObject=l,O(l[y],s),b.push(l),l=l.parent;const TI=oM(y.slice(2));M(TI,{intersection:r,event:s})}}const{onClick:S,onDblClick:i,onContextMenu:j,onPointerMove:Q,onPointerDown:c,onPointerUp:B,onPointerMissed:t,onWheel:U,forceUpdate:k}=dM(E,I);B(y=>x("onPointerUp",y)),c(y=>x("onPointerDown",y)),S(y=>x("onClick",y)),i(y=>x("onDoubleClick",y)),j(y=>x("onContextMenu",y)),U(y=>x("onWheel",y));let o=[];Q(y=>{const s=y.intersections.map(({object:L})=>L),b=y.intersections;o.forEach(({object:L})=>{s.includes(L)||(y.intersections=o,x("onPointerLeave",y),x("onPointerOut",y))}),y.intersections=b,y.intersections.forEach(({object:L})=>{o.includes(L)||(x("onPointerEnter",y),x("onPointerOver",y))}),x("onPointerMove",y),o=y.intersections});const n=[];t(y=>{const s=()=>y.stopPropagating=!0;y.stopPropagation=s,n.forEach(b=>{y.stopPropagating||(y.eventObject=b,O(b.onPointerMissed,y))}),M("pointer-missed",{event:y})});function G(y){EI(y)&&K(y)&&E.value.push(y)}function e(y){if(EI(y)&&K(y)){const s=E.value.indexOf(y);s>-1&&E.value.splice(s,1)}}function a(y){EI(y)&&K(y)&&y.onPointerMissed&&n.push(y)}function u(y){if(EI(y)&&K(y)){const s=n.indexOf(y);s>-1&&n.splice(s,1)}}return I.eventManager={forceUpdate:k,registerObject:G,deregisterObject:e,registerPointerMissedObject:a,deregisterPointerMissedObject:u},{forceUpdate:k,registerObject:G,deregisterObject:e,registerPointerMissedObject:a,deregisterPointerMissedObject:u}}function vM(g,I,M=10){const D=h(g)?dg():ug(T.computed(()=>h(I).parentElement)),A=T.readonly(uI(D.width,M)),N=T.readonly(uI(D.height,M)),z=T.computed(()=>A.value/N.value);return{height:N,width:A,aspectRatio:z}}function nI(){const g=new Map,I=new Set;let M=0,D=!1;const A=()=>{const z=Array.from(g.entries()).sort((C,E)=>{const O=C[1].priority-E[1].priority;return O===0?C[1].addI-E[1].addI:O});I.clear(),z.forEach(C=>I.add(C[0]))},N=z=>{g.delete(z),I.delete(z)};return{on:(z,C=0)=>{g.set(z,{priority:C,addI:M++});const E=()=>N(z);return W(E),D=!0,{off:E}},off:N,trigger:(...z)=>{D&&(A(),D=!1),I.forEach(C=>C(...z))},dispose:()=>{g.clear(),I.clear()},get count(){return g.size}}}function _M(){let g=!0,I=!0,M=!1;const D=new w.Clock(!1),A=T.ref(D.running),N=T.ref(!1);let z;const C=w.MathUtils.generateUUID();let E=null;const O=nI(),x=nI(),S=nI();G();let i={};function j(e){i=e}function Q(e,a,u=0){switch(a){case"before":return O.on(e,u);case"render":return E||(E=e),x.dispose(),x.on(e);case"after":return S.on(e,u)}}function c(){I&&(I=!1,G(),n())}function B(){I=!0,G(),cancelAnimationFrame(z)}function t(){M=!1,G()}function U(){M=!0,G()}function k(){N.value=!0}function o(){N.value=!1}function n(){if(!g){z=requestAnimationFrame(n);return}const e=D.getDelta(),a=D.getElapsedTime(),u={camera:T.unref(i.camera),scene:T.unref(i.scene),renderer:T.unref(i.renderer),raycaster:T.unref(i.raycaster),controls:T.unref(i.controls),invalidate:i.invalidate,advance:i.advance},y={delta:e,elapsed:a,clock:D,...u};A.value&&O.trigger(y),N.value||(x.count?x.trigger(y):E&&E(y)),A.value&&S.trigger(y),z=requestAnimationFrame(n)}function G(){const e=!I&&!M;D.running!==e&&(D.running?D.stop():D.start()),A.value=D.running}return{loopId:C,register:(e,a,u)=>Q(e,a,u),start:c,stop:B,pause:U,resume:t,pauseRender:k,resumeRender:o,isRenderPaused:N,isActive:A,setContext:j,setReady:e=>g=e}}function PM(g,I,M=100){M=M<=0?100:M;const D=d(),A=new Set;let N=!1,z=!1,C=null;function E(){C&&clearTimeout(C),!z&&!N&&g()?(D.trigger(I),A.forEach(S=>S()),A.clear(),N=!0):!z&&!N&&(C=setTimeout(E,M))}function O(){z=!0,C&&clearTimeout(C)}E();const x=(S,...i)=>{S(...i)};return{on:S=>{if(N)return x(S,I),{off:()=>{}};{const i=D.on(S);return A.add(i.off),D.on(S)}},off:D.off,trigger:D.trigger,cancel:O}}const GI=new WeakMap;function RM(g){if(g=g||HI(),GI.has(g))return GI.get(g);const I=100,M=Date.now(),D=PM(()=>{if(Date.now()-M>=I)return!0;{const A=g.renderer.value,N=(A==null?void 0:A.domElement)||{width:0,height:0};return!!(A&&N.width>0&&N.height>0)}},g);return GI.set(g,D),D}function KM({scene:g,canvas:I,windowSize:M,disableRender:D,rendererOptions:A,emit:N}){const z=T.shallowRef(g),C=vM(M,I),{camera:E,cameras:O,registerCamera:x,deregisterCamera:S,setCameraActive:i}=sM({sizes:C,scene:g}),j={mode:T.ref(A.renderMode||"always"),priority:T.ref(0),frames:T.ref(0),maxFrames:60,canBeInvalidated:T.computed(()=>j.mode.value==="on-demand"&&j.frames.value===0)};function Q(r=1){A.renderMode==="on-demand"&&(j.frames.value=Math.min(j.maxFrames,j.frames.value+r))}function c(){A.renderMode==="manual"&&(j.frames.value=1)}const{renderer:B}=mM({scene:g,canvas:I,options:A,emit:N,contextParts:{sizes:C,camera:E,render:j,invalidate:Q,advance:c},disableRender:D}),t={sizes:C,scene:z,camera:E,cameras:T.readonly(O),renderer:B,raycaster:T.shallowRef(new w.Raycaster),controls:T.ref(null),perf:{maxFrames:160,fps:{value:0,accumulator:[]},memory:{currentMem:0,allocatedMem:0,accumulator:[]}},render:j,advance:c,extend:oI,invalidate:Q,registerCamera:x,setCameraActive:i,deregisterCamera:S,loop:_M()};T.provide("useTres",t),t.scene.value.__tres={root:t},t.loop.register(()=>{E.value&&j.frames.value>0&&(B.value.render(g,E.value),N("render",t.renderer.value)),j.priority.value=0,j.mode.value==="always"?j.frames.value=1:j.frames.value=Math.max(0,j.frames.value-1)},"render");const{on:U,cancel:k}=RM(t);t.loop.setReady(!1),t.loop.start(),U(()=>{N("ready",t),t.loop.setReady(!0),XM(g,t,N)}),T.onUnmounted(()=>{k(),t.loop.stop()});const o=100,n=fg({every:o}),{isSupported:G,memory:e}=Jg({interval:o}),a=160;let u=performance.now();const y=({timestamp:r})=>{t.scene.value&&(t.perf.memory.allocatedMem=kI(t.scene.value)),r-u>=o&&(u=r,t.perf.fps.accumulator.push(n.value),t.perf.fps.accumulator.length>a&&t.perf.fps.accumulator.shift(),t.perf.fps.value=n.value,G.value&&e.value&&(t.perf.memory.accumulator.push(e.value.usedJSHeapSize/1024/1024),t.perf.memory.accumulator.length>a&&t.perf.memory.accumulator.shift(),t.perf.memory.currentMem=t.perf.memory.accumulator.reduce((p,l)=>p+l,0)/t.perf.memory.accumulator.length))};let s=0;const b=1,{pause:L}=BI(({delta:r})=>{window.__TRES__DEVTOOLS__&&(y({timestamp:performance.now()}),s+=r,s>=b&&(window.__TRES__DEVTOOLS__.cb(t),s=0))},{immediate:!0});return T.onUnmounted(()=>{L()}),t}function HI(){const g=T.inject("useTres");if(!g)throw new Error("useTresContext must be used together with useTresContextProvider");return g}function VM(g,I={},M={}){let D=g;const A=C=>{D=C};let N=new Proxy({},{});const z={has(C,E){return E in I||E in D},get(C,E,O){return E in I?I[E](D):D[E]},set(C,E,O){return M[E]?M[E](O,D,N,A):D[E]=O,!0}};return N=new Proxy({},z),N}const{logError:Ag}=cI(),Ng=["onClick","onContextMenu","onPointerMove","onPointerEnter","onPointerLeave","onPointerOver","onPointerOut","onDoubleClick","onPointerDown","onPointerUp","onPointerCancel","onPointerMissed","onLostPointerCapture","onWheel"],qM=g=>{const I=g.scene.value;function M(O,x,S,i){if(i||(i={}),i.args||(i.args=[]),O==="template"||kM(O))return null;let j=O.replace("Tres",""),Q;if(O==="primitive"){(!_(i.object)||T.isRef(i.object))&&Ag("Tres primitives need an 'object' prop, whose value is an object or shallowRef<object>"),j=i.object.type;const c={};Q=VM(i.object,{object:B=>B,isPrimitive:()=>!0,__tres:()=>c},{object:(B,t,U,k)=>{JM(B,U,k,{patchProp:N,remove:A,insert:D},g)},__tres:B=>{Object.assign(c,B)}})}else{const c=bI.value[j];c||Ag(`${j} is not defined on the THREE namespace. Use extend to add it to the catalog.`),Q=new c(...i.args)}return Q?(Q.isCamera&&(i!=null&&i.position||Q.position.set(3,3,3),i!=null&&i.lookAt||Q.lookAt(0,0,0)),Q=q(Q,{...Q.__tres,type:j,memoizedProps:i,eventCount:0,primitive:O==="primitive",attach:i.attach},g),Q):null}function D(O,x){var S,i,j;if(!O)return;x=x||I;const Q=O.__tres?O:q(O,{},g),c=x.__tres?x:q(x,{},g);O=$(Q),x=$(c),O.__tres&&((S=O.__tres)==null?void 0:S.eventCount)>0&&((i=g.eventManager)==null||i.registerObject(O)),g.registerCamera(O),(j=g.eventManager)==null||j.registerPointerMissedObject(O),Q.__tres.attach?lM(c,Q,Q.__tres.attach):K(O)&&K(c)&&(c.add(O),O.dispatchEvent({type:"added"})),Q.__tres.parent=c,c.__tres.objects&&!c.__tres.objects.includes(Q)&&c.__tres.objects.push(Q)}function A(O,x){var S,i,j,Q;if(!O)return;O!=null&&O.__tres&&((S=O.__tres)==null?void 0:S.eventCount)>0&&((i=g.eventManager)==null||i.deregisterObject(O)),x=eI(x)?"default":x;const c=(j=O.__tres)==null?void 0:j.dispose;eI(c)||(c===null?x=!1:x=c);const B=(Q=O.__tres)==null?void 0:Q.primitive,t=x==="default"?!B:!!x;if(O.__tres&&"objects"in O.__tres&&[...O.__tres.objects].forEach(U=>A(U,x)),t&&O.children&&[...O.children].forEach(U=>A(U,x)),Mg(O,g),Dg(O,g),t&&!jM(O)){if(V(x))x(O);else if(V(O.dispose))try{O.dispose()}catch{}}"__tres"in O&&delete O.__tres}function N(O,x,S,i){var j,Q;if(!O)return;let c=O,B=x;if(O.__tres&&(O.__tres.memoizedProps[x]=i),x==="attach"){const o=((j=O.__tres)==null?void 0:j.parent)||O.parent;A(O),q(O,{attach:i},g),o&&D(O,o);return}if(x==="dispose"){O.__tres||(O=q(O,{},g)),O.__tres.dispose=i;return}if(K(O)&&B==="blocks-pointer-events"){i||i===""?O[B]=i:delete O[B];return}Ng.includes(x)&&O.__tres&&(O.__tres.eventCount+=1);let t=SI(B),U=c==null?void 0:c[t];if(B==="args"){const o=O,n=S??[],G=i??[],e=((Q=O.__tres)==null?void 0:Q.type)||O.type;e&&n.length&&!HM(n,G)&&(c=Object.assign(o,new bI.value[e](...i)));return}if(c.type==="BufferGeometry"){if(B==="args")return;c.setAttribute(SI(B),new w.BufferAttribute(...i));return}if(B.includes("-")&&U===void 0){const o=B.split("-");U=o.reduce((n,G)=>n[SI(G)],c),B=o.pop(),t=B,U!=null&&U.set||(c=o.reduce((n,G)=>n[SI(G)],c))}let k=i;if(k===""&&(k=!0),V(U)){Ng.includes(x)||(OI(k)?O[t](...k):O[t](k)),t.startsWith("on")&&V(k)&&(c[t]=k);return}!(U!=null&&U.set)&&!V(U)?c[t]=k:U.constructor===k.constructor&&U!=null&&U.copy?U==null||U.copy(k):OI(k)?U.set(...k):!U.isColor&&U.setScalar?U.setScalar(k):U.set(k),gg(O)}function z(O){var x;return((x=O==null?void 0:O.__tres)==null?void 0:x.parent)||null}function C(O){const x=q(new w.Object3D,{type:"Comment"},g);return x.name=O,x}function E(O){var x;const S=z(O),i=((x=S==null?void 0:S.__tres)==null?void 0:x.objects)||[],j=i.indexOf(O);return j<0||j>=i.length-1?null:i[j+1]}return{insert:D,remove:A,createElement:M,patchProp:N,parentNode:z,createText:()=>{},createComment:C,setText:()=>{},setElementText:()=>{},nextSibling:E,querySelector:()=>{},setScopeId:()=>{},cloneNode:()=>{},insertStaticContent:()=>{}}};function ZM(){return Tg().__VUE_DEVTOOLS_GLOBAL_HOOK__}function Tg(){return typeof navigator<"u"&&typeof window<"u"?window:typeof globalThis<"u"?globalThis:{}}const $M=typeof Proxy=="function",ID="devtools-plugin:setup",gD="plugin:settings:set";let DI,aI;function MD(){var g;return DI!==void 0||(typeof window<"u"&&window.performance?(DI=!0,aI=window.performance):typeof globalThis<"u"&&!((g=globalThis.perf_hooks)===null||g===void 0)&&g.performance?(DI=!0,aI=globalThis.perf_hooks.performance):DI=!1),DI}function DD(){return MD()?aI.now():Date.now()}class AD{constructor(I,M){this.target=null,this.targetQueue=[],this.onQueue=[],this.plugin=I,this.hook=M;const D={};if(I.settings)for(const z in I.settings){const C=I.settings[z];D[z]=C.defaultValue}const A=`__vue-devtools-plugin-settings__${I.id}`;let N=Object.assign({},D);try{const z=localStorage.getItem(A),C=JSON.parse(z);Object.assign(N,C)}catch{}this.fallbacks={getSettings(){return N},setSettings(z){try{localStorage.setItem(A,JSON.stringify(z))}catch{}N=z},now(){return DD()}},M&&M.on(gD,(z,C)=>{z===this.plugin.id&&this.fallbacks.setSettings(C)}),this.proxiedOn=new Proxy({},{get:(z,C)=>this.target?this.target.on[C]:(...E)=>{this.onQueue.push({method:C,args:E})}}),this.proxiedTarget=new Proxy({},{get:(z,C)=>this.target?this.target[C]:C==="on"?this.proxiedOn:Object.keys(this.fallbacks).includes(C)?(...E)=>(this.targetQueue.push({method:C,args:E,resolve:()=>{}}),this.fallbacks[C](...E)):(...E)=>new Promise(O=>{this.targetQueue.push({method:C,args:E,resolve:O})})})}async setRealTarget(I){this.target=I;for(const M of this.onQueue)this.target.on[M.method](...M.args);for(const M of this.targetQueue)M.resolve(await this.target[M.method](...M.args))}}function ND(g,I){const M=g,D=Tg(),A=ZM(),N=$M&&M.enableEarlyProxy;if(A&&(D.__VUE_DEVTOOLS_PLUGIN_API_AVAILABLE__||!N))A.emit(ID,g,I);else{const z=N?new AD(M,A):null;(D.__VUE_DEVTOOLS_PLUGINS__=D.__VUE_DEVTOOLS_PLUGINS__||[]).push({pluginDescriptor:M,setupFn:I,proxy:z}),z&&I(z.proxiedTarget)}}function TD(g,I){const M=`▲ ■ ●${g}`;typeof zg=="function"?zg(M,I):console.log(M)}function zg(g,I){throw new Error(g+I)}const Cg=g=>{const I={id:g.uuid,label:g.type,children:[],tags:[]};g.name!==""&&I.tags.push({label:g.name,textColor:5750629,backgroundColor:15793395});const M=kI(g);return M>0&&I.tags.push({label:`${WM(M)} KB`,textColor:15707189,backgroundColor:16775644,tooltip:"Memory usage"}),g.type.includes("Light")&&(cM(g)&&I.tags.push({label:`${g.intensity}`,textColor:9738662,backgroundColor:16316922,tooltip:"Intensity"}),I.tags.push({label:`#${new w.Color(g.color).getHexString()}`,textColor:9738662,backgroundColor:16316922,tooltip:"Color"})),g.type.includes("Camera")&&(I.tags.push({label:`${g.fov}°`,textColor:9738662,backgroundColor:16316922,tooltip:"Field of view"}),I.tags.push({label:`x: ${Math.round(g.position.x)} y: ${Math.round(g.position.y)} z: ${Math.round(g.position.z)}`,textColor:9738662,backgroundColor:16316922,tooltip:"Position"})),I};function Og(g,I,M=""){g.children.forEach(D=>{if(D.type==="HightlightMesh"||M&&!D.type.includes(M)&&!D.name.includes(M))return;const A=Cg(D);I.children.push(A),Og(D,A,M)})}const zD=[],AI="tres:inspector",CD=T.reactive({sceneGraph:null});function OD(g,I){ND({id:"dev.esm.tres",label:"TresJS 🪐",logo:"https://raw.githubusercontent.com/Tresjs/tres/main/public/favicon.svg",packageName:"tresjs",homepage:"https://tresjs.org",componentStateTypes:zD,app:g},M=>{typeof M.now!="function"&&TD("You seem to be using an outdated version of Vue Devtools. Are you still using the Beta release instead of the stable one? You can find the links at https://devtools.vuejs.org/guide/installation.html."),M.addInspector({id:AI,label:"TresJS 🪐",icon:"account_tree",treeFilterPlaceholder:"Search instances"}),setInterval(()=>{M.sendInspectorTree(AI)},1e3),setInterval(()=>{M.notifyComponentUpdate()},5e3),M.on.getInspectorTree(N=>{if(N.inspectorId===AI){const z=Cg(I.scene.value);Og(I.scene.value,z,N.filter),CD.sceneGraph=z,N.rootNodes=[z]}});let D=null,A=null;M.on.getInspectorState(N=>{var z;if(N.inspectorId===AI){const[C]=I.scene.value.getObjectsByProperty("uuid",N.nodeId);if(!C)return;if(A&&D&&D.parent&&A.remove(D),C.isMesh){const E=rM(C);C.add(E),D=E,A=C}N.state={object:Object.entries(C).map(([E,O])=>E==="children"?{key:E,value:O.filter(x=>x.type!=="HightlightMesh")}:{key:E,value:O,editable:!0}).filter(({key:E})=>E!=="parent")},C.isScene&&(N.state.info={memory:kI(C),objects:C.children.length,calls:I.renderer.value.info.render.calls,triangles:I.renderer.value.info.render.triangles,points:I.renderer.value.info.render.points,lines:I.renderer.value.info.render.lines},N.state.programs=((z=I.renderer.value.info.programs)==null?void 0:z.map(E=>({key:E.name,value:{...E,vertexShader:E.vertexShader,attributes:E.getAttributes(),uniforms:E.getUniforms()}})))||[])}}),M.on.editInspectorState(N=>{N.inspectorId===AI&&aM(I.scene.value,N.nodeId,N.path,N.state.value)})})}const ED=["data-scene","data-tres"],xD=T.defineComponent({__name:"TresCanvas",props:{shadows:{type:Boolean,default:void 0},clearColor:{},toneMapping:{},shadowMapType:{},useLegacyLights:{type:Boolean,default:void 0},outputColorSpace:{},toneMappingExposure:{},renderMode:{default:"always"},dpr:{},camera:{},preset:{},windowSize:{type:Boolean,default:void 0},disableRender:{type:Boolean,default:void 0},context:{},precision:{},alpha:{type:Boolean,default:void 0},premultipliedAlpha:{type:Boolean},antialias:{type:Boolean,default:void 0},stencil:{type:Boolean,default:void 0},preserveDrawingBuffer:{type:Boolean,default:void 0},powerPreference:{},depth:{type:Boolean,default:void 0},logarithmicDepthBuffer:{type:Boolean,default:void 0},failIfMajorPerformanceCaveat:{type:Boolean,default:void 0}},emits:["render","click","double-click","context-menu","pointer-move","pointer-up","pointer-down","pointer-enter","pointer-leave","pointer-over","pointer-out","pointer-missed","wheel","ready"],setup(g,{expose:I,emit:M}){var D;const A=g,N=M,z=T.useSlots(),{logWarning:C}=cI(),E=T.ref(),O=T.shallowRef(new w.Scene),x=(D=T.getCurrentInstance())==null?void 0:D.appContext.app;oI(lI);const S=(t,U=!1)=>T.defineComponent({setup(){var k;const o=(k=T.getCurrentInstance())==null?void 0:k.appContext;return o&&(o.app=x),T.provide("useTres",t),T.provide("extend",oI),typeof window<"u"&&OD(o==null?void 0:o.app,t),()=>T.h(T.Fragment,null,U?[]:z.default())}}),i=(t,U=!1)=>{const k=S(t,U),{render:o}=T.createRenderer(qM(t));o(T.h(k),O.value)},j=(t,U=!1)=>{ZI(t.scene.value),U&&(t.renderer.value.dispose(),t.renderer.value.renderLists.dispose(),t.renderer.value.forceContextLoss()),O.value.__tres={root:t}},Q=T.computed(()=>A.disableRender),c=T.shallowRef(null);I({context:c,dispose:()=>j(c.value,!0)});const B=()=>{j(c.value),i(c.value,!0)};return T.onMounted(()=>{const t=E;c.value=KM({scene:O.value,canvas:t,windowSize:A.windowSize??!1,disableRender:Q.value??!1,rendererOptions:A,emit:N});const{registerCamera:U,camera:k,cameras:o,deregisterCamera:n}=c.value;i(c.value);const G=()=>{const e=new w.PerspectiveCamera(45,window.innerWidth/window.innerHeight,.1,1e3);e.position.set(3,3,3),e.lookAt(0,0,0),U(e);const a=T.watchEffect(()=>{o.value.length>=2&&(e.removeFromParent(),n(e),a==null||a())})};T.watch(()=>A.camera,(e,a)=>{e&&U(e),a&&(a.removeFromParent(),n(a))},{immediate:!0}),k.value||(C("No camera found. Creating a default perspective camera. To have full control over a camera, please add one to the scene."),G())}),T.onUnmounted(B),(t,U)=>(T.openBlock(),T.createElementBlock("canvas",{ref_key:"canvas",ref:E,"data-scene":O.value.uuid,class:T.normalizeClass(t.$attrs.class),"data-tres":`tresjs ${T.unref(EM).version}`,style:T.normalizeStyle({display:"block",width:"100%",height:"100%",position:t.windowSize?"fixed":"relative",top:0,left:0,pointerEvents:"auto",touchAction:"none",...t.$attrs.style})},null,14,ED))}}),Eg={Control:"Control",Shift:"Shift"};function yD(){const g=T.ref([]),I=T.computed(()=>g.value.includes(Eg.Control)),M=T.computed(()=>g.value.includes(Eg.Shift)),D=N=>{g.value.includes(N.key)||g.value.push(N.key)},A=N=>{g.value=g.value.filter(z=>N.key!==z)};return T.onMounted(()=>{window.addEventListener("keydown",D),window.addEventListener("keyup",A)}),T.onBeforeUnmount(()=>{window.removeEventListener("keydown",D),window.removeEventListener("keyup",A)}),{isKeyControlPressed:I,isKeyShiftPressed:M}}function iD(g,I,M){const D=I.x-g.x,A=I.y-g.y,N=I.z-g.z,z=Math.sqrt(D*D+A*A+N*N),C=M/2;return Math.tan(C*Math.PI/180)*z/Math.sin(C*Math.PI/180)}function xg(g,I){const M=g.getBoundingClientRect();return{x:I.clientX-M.left,y:I.clientY-M.top}}function II({position:g,padding:I,itemSize:M}){return g*(M+I)}function rI(g,I){return g.x===I.x&&g.y===I.y&&g.z===I.z}const NI={Scene:"#46a5fd",ContainerItemSelected:"#008080",ContainerItemFilled:"#FF0000",ContainerItemEmpty:"#efefef"},X={ContainerItemClick:"container-item:click",ContainerItemLeftClick:"container-item:left-click",ContainerItemRightClick:"container-item:right-click",ContainerItemMouseOver:"container-item:mouseover",ContainerItemMouseOut:"container-item:mouseout"};class yg extends w.ExtrudeGeometry{constructor(I,M={}){const D=M.font;if(D===void 0)super();else{const A=D.generateShapes(I,M.size);M.depth===void 0&&M.height!==void 0&&console.warn("THREE.TextGeometry: .height is now depreciated. Please use .depth instead"),M.depth=M.depth!==void 0?M.depth:M.height!==void 0?M.height:50,M.bevelThickness===void 0&&(M.bevelThickness=10),M.bevelSize===void 0&&(M.bevelSize=8),M.bevelEnabled===void 0&&(M.bevelEnabled=!1),super(A,M)}this.type="TextGeometry"}}class cD extends w.Loader{constructor(I){super(I)}load(I,M,D,A){const N=this,z=new w.FileLoader(this.manager);z.setPath(this.path),z.setRequestHeader(this.requestHeader),z.setWithCredentials(this.withCredentials),z.load(I,function(C){const E=N.parse(JSON.parse(C));M&&M(E)},D,A)}parse(I){return new SD(I)}}class SD{constructor(I){this.isFont=!0,this.type="Font",this.data=I}generateShapes(I,M=100){const D=[],A=jD(I,M,this.data);for(let N=0,z=A.length;N<z;N++)D.push(...A[N].toShapes());return D}}function jD(g,I,M){const D=Array.from(g),A=I/M.resolution,N=(M.boundingBox.yMax-M.boundingBox.yMin+M.underlineThickness)*A,z=[];let C=0,E=0;for(let O=0;O<D.length;O++){const x=D[O];if(x===` `)C=0,E-=N;else{const S=wD(x,A,C,E,M);C+=S.offsetX,z.push(S.path)}}return z}function wD(g,I,M,D,A){const N=A.glyphs[g]||A.glyphs["?"];if(!N){console.error('THREE.Font: character "'+g+'" does not exists in font family '+A.familyName+".");return}const z=new w.ShapePath;let C,E,O,x,S,i,j,Q;if(N.o){const c=N._cachedOutline||(N._cachedOutline=N.o.split(" "));for(let B=0,t=c.length;B<t;)switch(c[B++]){case"m":C=c[B++]*I+M,E=c[B++]*I+D,z.moveTo(C,E);break;case"l":C=c[B++]*I+M,E=c[B++]*I+D,z.lineTo(C,E);break;case"q":O=c[B++]*I+M,x=c[B++]*I+D,S=c[B++]*I+M,i=c[B++]*I+D,z.quadraticCurveTo(S,i,O,x);break;case"b":O=c[B++]*I+M,x=c[B++]*I+D,S=c[B++]*I+M,i=c[B++]*I+D,j=c[B++]*I+M,Q=c[B++]*I+D,z.bezierCurveTo(S,i,j,Q,O,x);break}}return{offsetX:N.ha*I,path:z}}const sD=["args","center"],tD=T.defineComponent({__name:"Text3D",props:{font:{},text:{},size:{default:.5},depth:{default:0},curveSegments:{default:5},bevelEnabled:{type:Boolean,default:!0},bevelThickness:{default:.05},bevelSize:{default:.02},bevelOffset:{default:0},bevelSegments:{default:4},center:{type:Boolean,default:!1},lookAtCamera:{type:Boolean,default:!1},needUpdates:{type:Boolean,default:!1}},async setup(g,{expose:I}){let M,D;const A=g,{center:N,font:z,text:C,needUpdates:E,size:O,depth:x,curveSegments:S,bevelEnabled:i,bevelThickness:j,bevelSize:Q,bevelOffset:c,bevelSegments:B}=T.toRefs(A),{extend:t,camera:U}=HI(),{onLoop:k}=_I();t({TextGeometry:yg});const o=new cD,n=T.useSlots(),G=T.computed(()=>{var y;if(C!=null&&C.value)return C.value;if(n.default)return(y=n.default()[0].children)==null?void 0:y.trim();if(E)return""}),e=T.shallowRef();I({value:e});const a=([M,D]=T.withAsyncContext(()=>new Promise((y,s)=>{try{typeof z.value=="string"?o.load(z.value,b=>{y(b)}):y(z.value)}catch(b){s(console.error("error",b))}})),M=await M,D(),M),u=T.computed(()=>({font:a,size:T.toValue(O),depth:T.toValue(x),curveSegments:T.toValue(S),bevelEnabled:T.toValue(i),bevelThickness:T.toValue(j),bevelSize:T.toValue(Q),bevelOffset:T.toValue(c),bevelSegments:T.toValue(B)}));return T.watchEffect(()=>{e.value&&E.value&&(e.value.geometry.dispose(),e.value.geometry=new yg(G.value,u.value),N.value&&e.value.geometry.center())}),k(()=>{var y,s;A.lookAtCamera&&((s=e.value)==null||s.lookAt((y=U.value)==null?void 0:y.position))}),T.onUnmounted(()=>{e.value&&e.value.dispose()}),(y,s)=>T.unref(z)&&G.value?(T.openBlock(),T.createElementBlock("TresMesh",{key:0,ref_key:"text3DRef",ref:e},[T.createElementVNode("TresTextGeometry",{args:[G.value,u.value],center:T.unref(N)},null,8,sD),T.renderSlot(y.$slots,"default")],512)):T.createCommentVNode("",!0)}}),QD="data:application/json;base64,eyJnbHlwaHMiOnsiMCI6eyJoYSI6NzgwLCJ4X21pbiI6NzgsInhfbWF4Ijo3MDEsIm8iOiJtIDcwMSA0MjEgcSA2MjYgOTQgNzAxIDIwMSBxIDM5MSAtMTQgNTUxIC0xNCBxIDE1NyA5MSAyMzMgLTE0IHEgNzggNDA0IDgxIDE5NiBsIDc4IDU3MiBxIDE1MyA4OTUgNzggNzg5IHEgMzg5IDEwMDEgMjI5IDEwMDEgcSA2MjQgODk5IDU0OSAxMDAxIHEgNzAxIDU4NCA2OTkgNzk3IGwgNzAxIDQyMSBtIDU3NiA1OTMgcSA1MzEgODI1IDU3NiA3NTIgcSAzODkgODk4IDQ4NiA4OTggcSAyNDkgODI1IDI5MyA4OTggcSAyMDMgNjAyIDIwNSA3NTMgbCAyMDMgNDAxIHEgMjUwIDE2NSAyMDMgMjQxIHEgMzkxIDg5IDI5NiA4OSBxIDUyOSAxNjEgNDg0IDg5IHEgNTc2IDM4NyA1NzQgMjMzIGwgNTc2IDU5MyB6ICJ9LCIxIjp7ImhhIjo3ODAsInhfbWluIjoxMTUsInhfbWF4Ijo0OTQsIm8iOiJtIDQ5NCAwIGwgMzY4IDAgbCAzNjggODM2IGwgMTE1IDc0MyBsIDExNSA4NTcgbCA0NzUgOTkyIGwgNDk0IDk5MiBsIDQ5NCAwIHogIn0sIjIiOnsiaGEiOjc4MCwieF9taW4iOjYzLCJ4X21heCI6NzI5LCJvIjoibSA3MjkgMCBsIDgyIDAgbCA4MiA5MCBsIDQyNCA0NzAgcSA1MjkgNjEwIDUwMCA1NTYgcSA