@tresjs/core 3.7.0 → 4.0.0-next.1

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/tres.umd.cjs CHANGED
@@ -1,8 +1,8 @@
1
1
  /**
2
2
  * name: @tresjs/core
3
- * version: v3.7.0
3
+ * version: v4.0.0-next.1
4
4
  * (c) 2024
5
5
  * description: Declarative ThreeJS using Vue Components
6
6
  * author: Alvaro Saburido <hola@alvarosaburido.dev> (https://github.com/alvarosabu/)
7
7
  */
8
- (function(h,u){typeof exports=="object"&&typeof module<"u"?u(exports,require("vue"),require("three"),require("@vueuse/core")):typeof define=="function"&&define.amd?define(["exports","vue","three","@vueuse/core"],u):(h=typeof globalThis<"u"?globalThis:h||self,u(h.tres={},h.Vue,h.Three,h.VueUseCore))})(this,function(h,u,f,v){"use strict";var _t=Object.defineProperty;var Ct=(h,u,f)=>u in h?_t(h,u,{enumerable:!0,configurable:!0,writable:!0,value:f}):h[u]=f;var Q=(h,u,f)=>(Ct(h,typeof u!="symbol"?u+"":u,f),f);function Ce(e){const r=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const t in e)if(t!=="default"){const n=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(r,t,n.get?n:{enumerable:!0,get:()=>e[t]})}}return r.default=e,Object.freeze(r)}const Y=Ce(f),Me={name:"@tresjs/core",type:"module",version:"3.7.0",packageManager:"pnpm@8.10.2",description:"Declarative ThreeJS using Vue Components",author:"Alvaro Saburido <hola@alvarosaburido.dev> (https://github.com/alvarosabu/)",license:"MIT",keywords:["vue","3d","threejs","three","threejs-vue"],sideEffects:!1,exports:{".":{types:"./dist/index.d.ts",require:"./dist/tres.umd.cjs",import:"./dist/tres.js"},"./components":{types:"./dist/components/index.d.ts"},"./composables":{types:"./dist/composables/index.d.ts"},"./types":{types:"./dist/types/index.d.ts"},"./utils":{types:"./dist/utils/index.d.ts"},"./*":"./*"},main:"./dist/tres.js",module:"./dist/tres.js",types:"./dist/index.d.ts",files:["dist","*.d.ts"],publishConfig:{access:"public"},scripts:{dev:"cd playground && npm run dev",build:"vite build",playground:"cd playground && npm run dev",test:"vitest","test:ci":"vitest run","test:ui":"vitest --ui",release:"release-it",coverage:"vitest run --coverage",lint:"eslint . --ext .js,.jsx,.ts,.tsx,.vue","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"},peerDependencies:{three:">=0.133",vue:">=3.3"},dependencies:{"@alvarosabu/utils":"^3.1.1","@vueuse/core":"^10.7.0"},devDependencies:{"@release-it/conventional-changelog":"^8.0.1","@stackblitz/sdk":"^1.9.0","@tresjs/cientos":"3.6.0","@tresjs/eslint-config-vue":"^0.2.1","@types/three":"^0.159.0","@typescript-eslint/eslint-plugin":"^6.14.0","@typescript-eslint/parser":"^6.14.0","@vitejs/plugin-vue":"^4.5.2","@vitest/coverage-c8":"^0.33.0","@vitest/ui":"^1.0.4","@vue/test-utils":"^2.4.3",eslint:"^8.55.0","eslint-plugin-vue":"^9.19.2",esno:"^4.0.0",gsap:"^3.12.3",jsdom:"^23.0.1",kolorist:"^1.8.0",ohmyfetch:"^0.4.21",pathe:"^1.1.1","release-it":"^17.0.1","rollup-plugin-analyzer":"^4.0.0","rollup-plugin-copy":"^3.5.0","rollup-plugin-visualizer":"^5.11.0",three:"^0.159.0",unocss:"^0.58.0",unplugin:"^1.5.1","unplugin-vue-components":"^0.26.0",vite:"^5.0.8","vite-plugin-banner":"^0.7.1","vite-plugin-dts":"3.6.4","vite-plugin-inspect":"^0.8.1","vite-plugin-require-transform":"^1.0.21","vite-svg-loader":"^5.1.0",vitepress:"1.0.0-rc.31",vitest:"^1.0.4",vue:"^3.3.11","vue-demi":"^0.14.6"}},K=({sizes:e,scene:r})=>{const t=u.ref([]),n=u.computed(()=>t.value[0]),s=(i,l=!1)=>{t.value.some(({uuid:d})=>d===i.uuid)||(l?o(i):t.value.push(i))},a=i=>{t.value=t.value.filter(({uuid:l})=>l!==i.uuid)},o=i=>{const l=i instanceof f.Camera?i:t.value.find(g=>g.uuid===i);if(!l)return;const d=t.value.filter(({uuid:g})=>g!==l.uuid);t.value=[l,...d]};return u.watchEffect(()=>{e.aspectRatio.value&&t.value.forEach(i=>{i instanceof f.PerspectiveCamera&&(i.aspect=e.aspectRatio.value),(i instanceof f.PerspectiveCamera||i instanceof f.OrthographicCamera)&&i.updateProjectionMatrix()})}),r.userData.tres__registerCamera=s,r.userData.tres__deregisterCamera=a,u.onUnmounted(()=>{t.value=[]}),{camera:n,cameras:t,registerCamera:s,deregisterCamera:a,setCameraActive:o}},X=v.createEventHook(),Z=v.createEventHook(),R=v.createEventHook(),j=new f.Clock;let $=0,I=0;const{pause:Se,resume:Pe,isActive:ke}=v.useRafFn(()=>{X.trigger({delta:$,elapsed:I,clock:j}),Z.trigger({delta:$,elapsed:I,clock:j}),R.trigger({delta:$,elapsed:I,clock:j})},{immediate:!1});R.on(()=>{$=j.getDelta(),I=j.getElapsedTime()});const E=()=>({onBeforeLoop:X.on,onLoop:Z.on,onAfterLoop:R.on,pause:Se,resume:Pe,isActive:ke}),Ae=!0,ee="[TresJS ▲ ■ ●] ";function x(){function e(n,s){console.error(`${ee} ${n}`,s||"")}function r(n){console.warn(`${ee} ${n}`)}function t(n,s){}return{logError:e,logWarning:r,logMessage:t}}function Le(e){return typeof e=="number"?[e,e,e]:e instanceof f.Vector3?[e.x,e.y,e.z]:e}function te(e){return e instanceof f.Color?e:Array.isArray(e)?new f.Color(...e):new f.Color(e)}class Oe extends Y.Mesh{constructor(...t){super(...t);Q(this,"type","HightlightMesh");Q(this,"createTime");this.createTime=Date.now()}onBeforeRender(){const n=(Date.now()-this.createTime)/1e3,o=1+.07*Math.sin(2.5*n);this.scale.set(o,o,o)}}const re=(e,r)=>{for(const t of Object.keys(r))r[t]instanceof Object&&Object.assign(r[t],re(e[t],r[t]));return Object.assign(e||{},r),e},xe=De("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");function ne(e){return e&&e.nodeType===1}function z(e){return e.replace(/-([a-z])/g,(r,t)=>t.toUpperCase())}function De(e,r){const t=Object.create(null),n=e.split(",");for(let s=0;s<n.length;s++)t[n[s]]=!0;return r?s=>!!t[s.toLowerCase()]:s=>!!t[s]}const Be=(e,r)=>{const t=new Set,n=[];for(const s of e){const a=r(s);t.has(a)||(t.add(a),n.push(s))}return n},oe=(e,r)=>{if(!r)return;const t=Array.isArray(r)?r:r.match(/([^[.\]])+/g);return t==null?void 0:t.reduce((n,s)=>n&&n[s],e)},Te=(e,r,t)=>{const n=Array.isArray(r)?r:r.match(/([^[.\]])+/g);n&&n.reduce((s,a,o)=>(s[a]===void 0&&(s[a]={}),o===n.length-1&&(s[a]=t),s[a]),e)};function se(e,r){if(ne(e)&&ne(r)){const s=e.attributes,a=r.attributes;return s.length!==a.length?!1:Array.from(s).every(({name:o,value:i})=>r.getAttribute(o)===i)}if(e===r)return!0;if(e===null||typeof e!="object"||r===null||typeof r!="object")return!1;const t=Object.keys(e),n=Object.keys(r);if(t.length!==n.length)return!1;for(const s of t)if(!n.includes(s)||!se(e[s],r[s]))return!1;return!0}function je(e,r){if(!Array.isArray(e)||!Array.isArray(r)||e.length!==r.length)return!1;for(let t=0;t<e.length;t++)if(!se(e[t],r[t]))return!1;return!0}const Ve=Array.isArray;function $e(e,r,t,n){const s=l=>{if(l.uuid===r)return l;for(const d of l.children){const g=s(d);if(g)return g}},a=s(e);if(!a){console.warn("Object with UUID not found in the scene.");return}let o=a;for(let l=0;l<t.length-1;l++)if(o[t[l]]!==void 0)o=o[t[l]];else{console.warn(`Property path is not valid: ${t.join(".")}`);return}const i=t[t.length-1];o[i]!==void 0?o[i]=n:console.warn(`Property path is not valid: ${t.join(".")}`)}function Ie(e){const r=new f.MeshBasicMaterial({color:11003607,transparent:!0,opacity:.2,depthTest:!1,side:f.DoubleSide});return new Oe(e.geometry.clone(),r)}function ie(e){var t;let r=e.value;return e.value&&((t=e.value)!=null&&t.isMesh)&&(r=e.value.position),Array.isArray(e.value)&&(r=new f.Vector3(...r)),r}const Ee=Number.parseInt(f.REVISION.replace("dev","")),N={realistic:{shadows:!0,physicallyCorrectLights:!0,outputColorSpace:f.SRGBColorSpace,toneMapping:f.ACESFilmicToneMapping,toneMappingExposure:3,shadowMap:{enabled:!0,type:f.PCFSoftShadowMap}}};function ae({scene:e,canvas:r,options:t,disableRender:n,contextParts:{sizes:s,camera:a}}){const o=u.computed(()=>({alpha:v.toValue(t.alpha),depth:v.toValue(t.depth),canvas:v.unrefElement(r),context:v.toValue(t.context),stencil:v.toValue(t.stencil),antialias:v.toValue(t.antialias)===void 0?!0:v.toValue(t.antialias),precision:v.toValue(t.precision),powerPreference:v.toValue(t.powerPreference),premultipliedAlpha:v.toValue(t.premultipliedAlpha),preserveDrawingBuffer:v.toValue(t.preserveDrawingBuffer),logarithmicDepthBuffer:v.toValue(t.logarithmicDepthBuffer),failIfMajorPerformanceCaveat:v.toValue(t.failIfMajorPerformanceCaveat)})),i=u.shallowRef(new f.WebGLRenderer(o.value));u.watch(o,()=>{i.value.dispose(),i.value=new f.WebGLRenderer(o.value)}),u.watchEffect(()=>{i.value.setSize(s.width.value,s.height.value)});const{pixelRatio:l}=v.useDevicePixelRatio();u.watchEffect(()=>{i.value.setPixelRatio(l.value)});const{logError:d}=x(),p=(()=>{const m=new f.WebGLRenderer,_={shadowMap:{enabled:m.shadowMap.enabled,type:m.shadowMap.type},toneMapping:m.toneMapping,toneMappingExposure:m.toneMappingExposure,outputColorSpace:m.outputColorSpace};return m.dispose(),_})();u.watchEffect(()=>{const m=v.toValue(t.preset);m&&(m in N||d(`Renderer Preset must be one of these: ${Object.keys(N).join(", ")}`),re(i.value,N[m]));const _=(A,L)=>{const S=v.toValue(A),O=()=>{if(m)return oe(N[m],L)};if(S!==void 0)return S;const b=O();return b!==void 0?b:oe(p,L)},P=(A,L)=>Te(i.value,L,_(A,L));P(t.shadows,"shadowMap.enabled"),P(t.toneMapping,"toneMapping"),P(t.shadowMapType,"shadowMap.type"),Ee<150&&P(!t.useLegacyLights,"physicallyCorrectLights"),P(t.outputColorSpace,"outputColorSpace"),P(t.toneMappingExposure,"toneMappingExposure");const M=_(t.clearColor,"clearColor");M&&i.value.setClearColor(M?te(M):new f.Color(0))});const{pause:c,resume:w,onLoop:C}=E();return C(()=>{a.value&&!v.toValue(n)&&i.value.render(e,a.value)}),w(),u.onUnmounted(()=>{c(),i.value.dispose(),i.value.forceContextLoss()}),{renderer:i}}const le=e=>typeof e=="function",ze=e=>!!e&&e.constructor===Array;function ue(e){const r={nodes:{},materials:{}};return e&&e.traverse(t=>{t.name&&(r.nodes[t.name]=t),t.material&&!r.materials[t.material.name]&&(r.materials[t.material.name]=t.material)}),r}async function Ne(e,r,t,n,s){const{logError:a}=x(),o=new e;s&&s(o),t&&t(o);const l=(Array.isArray(r)?r:[r]).map(d=>new Promise((g,p)=>{o.load(d,c=>{c.scene&&Object.assign(c,ue(c.scene)),g(c)},n,c=>p(a("[useLoader] - Failed to load resource",c)))}));return ze(r)?await Promise.all(l):await l[0]}async function Ue(e){const r=new f.LoadingManager,t=new f.TextureLoader(r),n=s=>new Promise((a,o)=>{t.load(s,i=>a(i),()=>null,()=>{o(new Error("[useTextures] - Failed to load texture"))})});if(Ve(e)){const s=await Promise.all(e.map(a=>n(a)));return e.length>1?s:s[0]}else{const{map:s,displacementMap:a,normalMap:o,roughnessMap:i,metalnessMap:l,aoMap:d,alphaMap:g,matcap:p}=e;return{map:s?await n(s):null,displacementMap:a?await n(a):null,normalMap:o?await n(o):null,roughnessMap:i?await n(i):null,metalnessMap:l?await n(l):null,aoMap:d?await n(d):null,alphaMap:g?await n(g):null,matcap:p?await n(p):null}}}const ce=(e,{renderer:r,camera:t,raycaster:n})=>{const s=u.computed(()=>r.value.domElement),{x:a,y:o}=v.usePointer({target:s}),{width:i,height:l,top:d,left:g}=v.useElementBounding(s),p=({x:b,y:k})=>{if(s.value)return{x:(b-g.value)/i.value*2-1,y:-((k-d.value)/l.value)*2+1}},c=({x:b,y:k})=>{if(t.value)return n.value.setFromCamera(new f.Vector2(b,k),t.value),n.value.intersectObjects(e.value,!1)},w=b=>{const k=p({x:(b==null?void 0:b.clientX)??a.value,y:(b==null?void 0:b.clientY)??o.value});return k?c(k)||[]:[]},C=u.computed(()=>w()),m=v.createEventHook(),_=v.createEventHook(),P=(b,k)=>{b.trigger({event:k,intersects:w(k)})},M=b=>{P(_,b)};let A;const L=b=>{var k;A=(k=w(b)[0])==null?void 0:k.object},S=b=>{var k;b instanceof PointerEvent&&A===((k=w(b)[0])==null?void 0:k.object)&&P(m,b)},O=b=>_.trigger({event:b,intersects:[]});return s.value.addEventListener("pointerup",S),s.value.addEventListener("pointerdown",L),s.value.addEventListener("pointermove",M),s.value.addEventListener("pointerleave",O),u.onUnmounted(()=>{s!=null&&s.value&&(s.value.removeEventListener("pointerup",S),s.value.removeEventListener("pointerdown",L),s.value.removeEventListener("pointermove",M),s.value.removeEventListener("pointerleave",O))}),{intersects:C,onClick:b=>m.on(b).off,onPointerMove:b=>_.on(b).off}};function We(){const{logWarning:e}=x();function r(a,o,i){let l=null;return a.traverse(d=>{d[o]===i&&(l=d)}),l||e(`Child with ${o} '${i}' not found.`),l}function t(a,o,i){const l=[];return a.traverse(d=>{d[o].includes(i)&&l.push(d)}),l.length||e(`Children with ${o} '${i}' not found.`),l}function n(a,o){return r(a,"name",o)}function s(a,o){return t(a,"name",o)}return{seek:r,seekByName:n,seekAll:t,seekAllByName:s}}const de=({scene:e,contextParts:r})=>{const t=u.reactive({click:new Map,pointerMove:new Map,pointerEnter:new Map,pointerLeave:new Map}),n=u.ref(new Set),s=c=>{n.value.add(c)},a=c=>{n.value.delete(c)},o=c=>{Object.values(t).forEach(w=>w.delete(c)),a(c)},i=c=>{const{onClick:w,onPointerMove:C,onPointerEnter:m,onPointerLeave:_}=c;w&&t.click.set(c,w),C&&t.pointerMove.set(c,C),m&&t.pointerEnter.set(c,m),_&&t.pointerLeave.set(c,_)};e.userData.tres__registerAtPointerEventHandler=i,e.userData.tres__deregisterAtPointerEventHandler=o,e.userData.tres__registerBlockingObjectAtPointerEventHandler=s,e.userData.tres__deregisterBlockingObjectAtPointerEventHandler=a;const l=u.computed(()=>Be([...Array.from(n.value),...Object.values(t).map(c=>Array.from(c.keys())).flat()],({uuid:c})=>c)),{onClick:d,onPointerMove:g}=ce(l,r);d(({intersects:c,event:w})=>{var C;c.length&&((C=t.click.get(c[0].object))==null||C(c[0],w))});let p;return g(({intersects:c,event:w})=>{var M,A,L,S;const C=(M=c==null?void 0:c[0])==null?void 0:M.object,{pointerLeave:m,pointerEnter:_,pointerMove:P}=t;p&&p!==C&&((A=m.get(p))==null||A(p,w)),C&&(p!==C&&((L=_.get(C))==null||L(c[0],w)),(S=P.get(C))==null||S(c[0],w)),p=C||null}),{registerObject:i,deregisterObject:o}};function fe(e){let r=0;return e.traverse(t=>{if(t.isMesh&&t.geometry){const n=t.geometry,s=n.attributes.position.count*3*Float32Array.BYTES_PER_ELEMENT,a=n.index?n.index.count*Uint32Array.BYTES_PER_ELEMENT:0,o=n.attributes.normal?n.attributes.normal.count*3*Float32Array.BYTES_PER_ELEMENT:0,i=n.attributes.uv?n.attributes.uv.count*2*Float32Array.BYTES_PER_ELEMENT:0,l=s+a+o+i;r+=l}}),r}function Fe(e){return(e/1024).toFixed(2)}const U=u.ref({}),W=e=>Object.assign(U.value,e);function pe({scene:e,canvas:r,windowSize:t,disableRender:n,rendererOptions:s}){const a=u.computed(()=>v.toValue(t)?v.useWindowSize():v.useElementSize(v.toValue(r).parentElement)),o=u.shallowRef({width:0,height:0}),i=v.refDebounced(o,10),l=u.watchEffect(()=>{o.value={width:a.value.width.value,height:a.value.height.value}}),d=u.computed(()=>i.value.width/i.value.height),g={height:u.computed(()=>i.value.height),width:u.computed(()=>i.value.width),aspectRatio:d},p=u.shallowRef(e),{camera:c,cameras:w,registerCamera:C,deregisterCamera:m,setCameraActive:_}=K({sizes:g,scene:e}),{renderer:P}=ae({scene:e,canvas:r,options:s,contextParts:{sizes:g,camera:c},disableRender:n}),M={sizes:g,scene:p,camera:c,cameras:u.readonly(w),renderer:P,raycaster:u.shallowRef(new f.Raycaster),controls:u.ref(null),perf:{maxFrames:160,fps:{value:0,accumulator:[]},memory:{currentMem:0,allocatedMem:0,accumulator:[]}},extend:W,registerCamera:C,setCameraActive:_,deregisterCamera:m};u.provide("useTres",M);const A=100,L=v.useFps({every:A}),{isSupported:S,memory:O}=v.useMemory({interval:A}),b=160;let k=performance.now();const ht=({timestamp:G})=>{M.scene.value&&(M.perf.memory.allocatedMem=fe(M.scene.value)),G-k>=A&&(k=G,M.perf.fps.accumulator.push(L.value),M.perf.fps.accumulator.length>b&&M.perf.fps.accumulator.shift(),M.perf.fps.value=L.value,S.value&&O.value&&(M.perf.memory.accumulator.push(O.value.usedJSHeapSize/1024/1024),M.perf.memory.accumulator.length>b&&M.perf.memory.accumulator.shift(),M.perf.memory.currentMem=M.perf.memory.accumulator.reduce((wt,bt)=>wt+bt,0)/M.perf.memory.accumulator.length))};let J=0;const vt=1,{pause:yt,resume:Rt}=v.useRafFn(({delta:G})=>{window.__TRES__DEVTOOLS__&&(ht({timestamp:performance.now()}),J+=G,J>=vt&&(window.__TRES__DEVTOOLS__.cb(M),J=0))},{immediate:!0});return u.onUnmounted(()=>{l(),yt()}),M}function me(){const e=u.inject("useTres");if(!e)throw new Error("useTresContext must be used together with useTresContextProvider");return e}const Ge=me;function Ft(e){}let y=null;const{logError:ge}=x(),q=["onClick","onPointerMove","onPointerEnter","onPointerLeave"],Re={createElement(e,r,t,n){var o,i;if(n||(n={}),n.args||(n.args=[]),e==="template"||xe(e))return null;let s=e.replace("Tres",""),a;if(e==="primitive"){(n==null?void 0:n.object)===void 0&&ge("Tres primitives need a prop 'object'");const l=n.object;s=l.type,a=Object.assign(l,{type:s,attach:n.attach,primitive:!0})}else{const l=U.value[s];l||ge(`${s} is not defined on the THREE namespace. Use extend to add it to the catalog.`),a=new l(...n.args)}return a.isCamera&&(n!=null&&n.position||a.position.set(3,3,3),n!=null&&n.lookAt||a.lookAt(0,0,0)),(n==null?void 0:n.attach)===void 0&&(a.isMaterial?a.attach="material":a.isBufferGeometry&&(a.attach="geometry")),a.isObject3D&&((o=n==null?void 0:n.material)!=null&&o.isMaterial&&(a.userData.tres__materialViaProp=!0),(i=n==null?void 0:n.geometry)!=null&&i.isBufferGeometry&&(a.userData.tres__geometryViaProp=!0)),a.userData={...a.userData,tres__name:s},a},insert(e,r){var n,s,a,o;r&&r.isScene&&(y=r);const t=r||y;if(e!=null&&e.isObject3D){if(e!=null&&e.isCamera){if(!(y!=null&&y.userData.tres__registerCamera))throw"could not find tres__registerCamera on scene's userData";(s=y==null?void 0:(n=y.userData).tres__registerCamera)==null||s.call(n,e)}if(e&&q.some(i=>e[i])){if(!(y!=null&&y.userData.tres__registerAtPointerEventHandler))throw"could not find tres__registerAtPointerEventHandler on scene's userData";(o=y==null?void 0:(a=y.userData).tres__registerAtPointerEventHandler)==null||o.call(a,e)}}e!=null&&e.isObject3D&&(t!=null&&t.isObject3D)?(t.add(e),e.dispatchEvent({type:"added"})):e!=null&&e.isFog?t.fog=e:typeof(e==null?void 0:e.attach)=="string"&&(e.__previousAttach=e[t==null?void 0:t.attach],t&&(t[e.attach]=e))},remove(e){var r,t;if(e){if(e.isObject3D){const n=e,s=d=>{var p,c;const g=d;d.userData.tres__materialViaProp||((p=g.material)==null||p.dispose(),g.material=void 0),d.userData.tres__geometryViaProp||((c=g.geometry)==null||c.dispose(),g.geometry=void 0)},a=y==null?void 0:y.userData.tres__deregisterAtPointerEventHandler,o=y==null?void 0:y.userData.tres__deregisterBlockingObjectAtPointerEventHandler,i=d=>{var g,p;if(!o)throw"could not find tres__deregisterBlockingObjectAtPointerEventHandler on scene's userData";if((p=y==null?void 0:(g=y.userData).tres__deregisterBlockingObjectAtPointerEventHandler)==null||p.call(g,d),!a)throw"could not find tres__deregisterAtPointerEventHandler on scene's userData";d&&q.some(c=>d[c])&&(a==null||a(d))},l=d=>{const g=y==null?void 0:y.userData.tres__deregisterCamera;if(!g)throw"could not find tres__deregisterCamera on scene's userData";d.isCamera&&(g==null||g(d))};(r=e.removeFromParent)==null||r.call(e),n.traverse(d=>{s(d),l(d),i==null||i(d)}),s(n),l(n),i==null||i(n)}(t=e.dispose)==null||t.call(e)}},patchProp(e,r,t,n){var s,a,o,i;if(e){let l=e,d=r;if(e.isObject3D&&d==="blocks-pointer-events"){n||n===""?(a=y==null?void 0:(s=y.userData).tres__registerBlockingObjectAtPointerEventHandler)==null||a.call(s,e):(i=y==null?void 0:(o=y.userData).tres__deregisterBlockingObjectAtPointerEventHandler)==null||i.call(o,e);return}let g=z(d),p=l==null?void 0:l[g];if(d==="args"){const w=e,C=t??[],m=n??[],_=e.userData.tres__name||e.type;_&&C.length&&!je(C,m)&&(l=Object.assign(w,new U.value[_](...n)));return}if(l.type==="BufferGeometry"){if(d==="args")return;l.setAttribute(z(d),new f.BufferAttribute(...n));return}if(d.includes("-")&&p===void 0){const w=d.split("-");p=w.reduce((C,m)=>C[z(m)],l),d=w.pop(),g=d.toLowerCase(),p!=null&&p.set||(l=w.reduce((C,m)=>C[z(m)],l))}let c=n;if(c===""&&(c=!0),le(p)){q.includes(r)||(Array.isArray(c)?e[g](...c):e[g](c));return}!(p!=null&&p.set)&&!le(p)?l[g]=c:p.constructor===c.constructor&&(p!=null&&p.copy)?p==null||p.copy(c):Array.isArray(c)?p.set(...c):!p.isColor&&p.setScalar?p.setScalar(c):p.set(c)}},parentNode(e){return(e==null?void 0:e.parent)||null},createText:()=>void 0,createComment:()=>void 0,setText:()=>void 0,setElementText:()=>void 0,nextSibling:()=>void 0,querySelector:()=>void 0,setScopeId:()=>void 0,cloneNode:()=>void 0,insertStaticContent:()=>void 0},{render:qe}=u.createRenderer(Re);W(Y);function He(){return he().__VUE_DEVTOOLS_GLOBAL_HOOK__}function he(){return typeof navigator<"u"&&typeof window<"u"?window:typeof global<"u"?global:{}}const Je=typeof Proxy=="function",Qe="devtools-plugin:setup",Ye="plugin:settings:set";let T,H;function Ke(){var e;return T!==void 0||(typeof window<"u"&&window.performance?(T=!0,H=window.performance):typeof global<"u"&&(!((e=global.perf_hooks)===null||e===void 0)&&e.performance)?(T=!0,H=global.perf_hooks.performance):T=!1),T}function Xe(){return Ke()?H.now():Date.now()}class Ze{constructor(r,t){this.target=null,this.targetQueue=[],this.onQueue=[],this.plugin=r,this.hook=t;const n={};if(r.settings)for(const o in r.settings){const i=r.settings[o];n[o]=i.defaultValue}const s=`__vue-devtools-plugin-settings__${r.id}`;let a=Object.assign({},n);try{const o=localStorage.getItem(s),i=JSON.parse(o);Object.assign(a,i)}catch{}this.fallbacks={getSettings(){return a},setSettings(o){try{localStorage.setItem(s,JSON.stringify(o))}catch{}a=o},now(){return Xe()}},t&&t.on(Ye,(o,i)=>{o===this.plugin.id&&this.fallbacks.setSettings(i)}),this.proxiedOn=new Proxy({},{get:(o,i)=>this.target?this.target.on[i]:(...l)=>{this.onQueue.push({method:i,args:l})}}),this.proxiedTarget=new Proxy({},{get:(o,i)=>this.target?this.target[i]:i==="on"?this.proxiedOn:Object.keys(this.fallbacks).includes(i)?(...l)=>(this.targetQueue.push({method:i,args:l,resolve:()=>{}}),this.fallbacks[i](...l)):(...l)=>new Promise(d=>{this.targetQueue.push({method:i,args:l,resolve:d})})})}async setRealTarget(r){this.target=r;for(const t of this.onQueue)this.target.on[t.method](...t.args);for(const t of this.targetQueue)t.resolve(await this.target[t.method](...t.args))}}function et(e,r){const t=e,n=he(),s=He(),a=Je&&t.enableEarlyProxy;if(s&&(n.__VUE_DEVTOOLS_PLUGIN_API_AVAILABLE__||!a))s.emit(Qe,e,r);else{const o=a?new Ze(t,s):null;(n.__VUE_DEVTOOLS_PLUGINS__=n.__VUE_DEVTOOLS_PLUGINS__||[]).push({pluginDescriptor:t,setupFn:r,proxy:o}),o&&r(o.proxiedTarget)}}function tt(e,r){const t=`▲ ■ ●${e}`;typeof __VUE_DEVTOOLS_TOAST__=="function"?__VUE_DEVTOOLS_TOAST__(t,r):r==="error"?console.error(t):r==="warn"?console.warn(t):console.log(t)}const ve=e=>{const r={id:e.uuid,label:e.type,children:[],tags:[]};e.name!==""&&r.tags.push({label:e.name,textColor:5750629,backgroundColor:15793395});const t=fe(e);return t>0&&r.tags.push({label:`${Fe(t)} KB`,textColor:15707189,backgroundColor:16775644,tooltip:"Memory usage"}),e.type.includes("Light")&&(r.tags.push({label:`${e.intensity}`,textColor:9738662,backgroundColor:16316922,tooltip:"Intensity"}),r.tags.push({label:`#${e.color.getHexString()}`,textColor:9738662,backgroundColor:16316922,tooltip:"Color"})),e.type.includes("Camera")&&(r.tags.push({label:`${e.fov}°`,textColor:9738662,backgroundColor:16316922,tooltip:"Field of view"}),r.tags.push({label:`x: ${Math.round(e.position.x)} y: ${Math.round(e.position.y)} z: ${Math.round(e.position.z)}`,textColor:9738662,backgroundColor:16316922,tooltip:"Position"})),r};function ye(e,r){e.children.forEach(t=>{if(t.type==="HightlightMesh")return;const n=ve(t);r.children.push(n),ye(t,n)})}const rt=[],V="tres:inspector",nt=u.reactive({sceneGraph:null});function ot(e,r){et({id:"dev.esm.tres",label:"TresJS 🪐",logo:"https://raw.githubusercontent.com/Tresjs/tres/main/public/favicon.svg",packageName:"tresjs",homepage:"https://tresjs.org",componentStateTypes:rt,app:e},t=>{typeof t.now!="function"&&tt("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."),t.addInspector({id:V,label:"TresJS 🪐",icon:"account_tree",treeFilterPlaceholder:"Search instances"}),setInterval(()=>{t.sendInspectorTree(V)},1e3),setInterval(()=>{t.notifyComponentUpdate()},5e3),t.on.getInspectorTree(a=>{if(a.inspectorId===V){const o=ve(r.scene.value);ye(r.scene.value,o),nt.sceneGraph=o,a.rootNodes=[o]}});let n=null,s=null;t.on.getInspectorState(a=>{if(a.inspectorId===V){const[o]=r.scene.value.getObjectsByProperty("uuid",a.nodeId);if(!o)return;if(s&&n&&n.parent&&s.remove(n),o.isMesh){const i=Ie(o);o.add(i),n=i,s=o}a.state={object:[{key:"uuid",editable:!0,value:o.uuid},{key:"name",editable:!0,value:o.name},{key:"type",editable:!0,value:o.type},{key:"position",editable:!0,value:o.position},{key:"rotation",editable:!0,value:o.rotation},{key:"scale",editable:!0,value:o.scale},{key:"geometry",value:o.geometry},{key:"material",value:o.material},{key:"color",editable:!0,value:o.color},{key:"intensity",editable:!0,value:o.intensity},{key:"castShadow",editable:!0,value:o.castShadow},{key:"receiveShadow",editable:!0,value:o.receiveShadow},{key:"frustumCulled",editable:!0,value:o.frustumCulled},{key:"matrixAutoUpdate",editable:!0,value:o.matrixAutoUpdate},{key:"matrixWorldNeedsUpdate",editable:!0,value:o.matrixWorldNeedsUpdate},{key:"matrixWorld",value:o.matrixWorld},{key:"visible",editable:!0,value:o.visible}]}}}),t.on.editInspectorState(a=>{a.inspectorId===V&&$e(r.scene.value,a.nodeId,a.path,a.state.value)})})}const st=["data-scene","data-tres"],we=u.defineComponent({__name:"TresCanvas",props:{shadows:{type:Boolean,default:void 0},clearColor:{},toneMapping:{},shadowMapType:{},useLegacyLights:{type:Boolean,default:void 0},outputColorSpace:{},toneMappingExposure:{},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}},setup(e,{expose:r}){var C;const t=e,{logWarning:n}=x(),s=u.ref(),a=u.shallowRef(new f.Scene),{resume:o}=E(),i=u.useSlots(),l=(C=u.getCurrentInstance())==null?void 0:C.appContext.app,d=m=>u.defineComponent({setup(){var P;const _=(P=u.getCurrentInstance())==null?void 0:P.appContext;return _&&(_.app=l),u.provide("useTres",m),u.provide("extend",W),typeof window<"u"&&ot(_.app,m),()=>u.h(u.Fragment,null,i!=null&&i.default?i.default():[])}}),g=m=>{const _=d(m);qe(u.h(_),a.value)},p=(m,_=!1)=>{a.value.children=[],_&&(m.renderer.value.dispose(),m.renderer.value.renderLists.dispose(),m.renderer.value.forceContextLoss()),g(m),o()},c=u.computed(()=>t.disableRender),w=u.shallowRef(null);return r({context:w,dispose:()=>p(w.value,!0)}),u.onMounted(()=>{const m=s;w.value=pe({scene:a.value,canvas:m,windowSize:t.windowSize,disableRender:c,rendererOptions:t}),de({scene:a.value,contextParts:w.value});const{registerCamera:_,camera:P,cameras:M,deregisterCamera:A}=w.value;g(w.value);const L=()=>{const S=new f.PerspectiveCamera(45,window.innerWidth/window.innerHeight,.1,1e3);S.position.set(3,3,3),S.lookAt(0,0,0),_(S);const O=u.watchEffect(()=>{M.value.length>=2&&(S.removeFromParent(),A(S),O==null||O())})};u.watch(()=>t.camera,(S,O)=>{S&&_(S),O&&(O.removeFromParent(),A(O))},{immediate:!0}),P.value||(n("No camera found. Creating a default perspective camera. To have full control over a camera, please add one to the scene."),L())}),(m,_)=>(u.openBlock(),u.createElementBlock("canvas",{ref_key:"canvas",ref:s,"data-scene":a.value.uuid,class:u.normalizeClass(m.$attrs.class),"data-tres":`tresjs ${u.unref(Me).version}`,style:u.normalizeStyle({display:"block",width:"100%",height:"100%",position:m.windowSize?"fixed":"relative",top:0,left:0,pointerEvents:"auto",touchAction:"none",...m.$attrs.style})},null,14,st))}}),it=["TresCanvas","TresLeches","TresScene"],at={template:{compilerOptions:{isCustomElement:e=>e.startsWith("Tres")&&!it.includes(e)||e==="primitive"}}},lt={mounted:(e,r)=>{if(r.arg){console.log(`v-log:${r.arg}`,e[r.arg]);return}console.log("v-log",e)}};class be extends f.Line{constructor(r,t){const n=[1,1,0,-1,1,0,-1,-1,0,1,-1,0,1,1,0],s=new f.BufferGeometry;s.setAttribute("position",new f.Float32BufferAttribute(n,3)),s.computeBoundingSphere();const a=new f.LineBasicMaterial({fog:!1});super(s,a),this.light=r,this.color=t,this.type="RectAreaLightHelper";const o=[1,1,0,-1,1,0,-1,-1,0,1,1,0,-1,-1,0,1,-1,0],i=new f.BufferGeometry;i.setAttribute("position",new f.Float32BufferAttribute(o,3)),i.computeBoundingSphere(),this.add(new f.Mesh(i,new f.MeshBasicMaterial({side:f.BackSide,fog:!1})))}updateMatrixWorld(){if(this.scale.set(.5*this.light.width,.5*this.light.height,1),this.color!==void 0)this.material.color.set(this.color),this.children[0].material.color.set(this.color);else{this.material.color.copy(this.light.color).multiplyScalar(this.light.intensity);const r=this.material.color,t=Math.max(r.r,r.g,r.b);t>1&&r.multiplyScalar(1/t),this.children[0].material.color.copy(this.material.color)}this.matrixWorld.extractRotation(this.light.matrixWorld).scale(this.scale).copyPosition(this.light.matrixWorld),this.children[0].matrixWorld.copy(this.matrixWorld)}dispose(){this.geometry.dispose(),this.material.dispose(),this.children[0].geometry.dispose(),this.children[0].material.dispose()}}const{logWarning:_e}=x();let F,B;const ut={DirectionalLight:f.DirectionalLightHelper,PointLight:f.PointLightHelper,SpotLight:f.SpotLightHelper,HemisphereLight:f.HemisphereLightHelper,RectAreaLight:be},ct={mounted:e=>{if(!e.isLight){_e(`${e.type} is not a light`);return}F=ut[e.type],e.parent.add(new F(e,1,e.color.getHex()))},updated:e=>{B=e.parent.children.find(r=>r instanceof F),!(B instanceof be)&&B.update()},unmounted:e=>{if(!e.isLight){_e(`${e.type} is not a light`);return}B=e.parent.children.find(r=>r instanceof F),B&&B.dispose&&B.dispose(),e.parent.remove(B)}},{logWarning:dt}=x(),ft={updated:(e,r)=>{const t=ie(r);if(!t){dt(`v-always-look-at: problem with binding value: ${r.value}`);return}const{onLoop:n}=E();n(()=>{e.lookAt(t)})}},{logWarning:pt}=x(),mt={updated:(e,r)=>{var s;const t=ie(r);if(!t){pt(`v-distance-to: problem with binding value: ${r.value}`);return}D&&(D.dispose(),e.parent.remove(D));const n=t.clone().sub(e.position);n.normalize(),D=new f.ArrowHelper(n,e.position,e.position.distanceTo(t),16776960),e.parent.add(D),console.table([["Distance:",e.position.distanceTo(t)],[`origin: ${e.name||e.type}`,`x:${e.position.x}, y:${e.position.y}, z:${(s=e.position)==null?void 0:s.z}`],[`Destiny: ${e.name||e.type}`,`x:${t.x}, y:${t.y}, z:${t==null?void 0:t.z}`]])},unmounted:e=>{D==null||D.dispose(),e.parent.remove(D)}};let D=null;const gt={install(e){e.component("TresCanvas",we)}};h.TresCanvas=we,h.catalogue=U,h.default=gt,h.extend=W,h.isProd=Ae,h.normalizeColor=te,h.normalizeVectorFlexibleParam=Le,h.templateCompilerOptions=at,h.trasverseObjects=ue,h.useCamera=K,h.useLoader=Ne,h.useLogger=x,h.usePointerEventHandler=de,h.useRaycaster=ce,h.useRenderLoop=E,h.useRenderer=ae,h.useSeek=We,h.useTexture=Ue,h.useTres=Ge,h.useTresContext=me,h.useTresContextProvider=pe,h.vAlwaysLookAt=ft,h.vDistanceTo=mt,h.vLightHelper=ct,h.vLog=lt,Object.defineProperties(h,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
8
+ (function(g,c){typeof exports=="object"&&typeof module<"u"?c(exports,require("vue"),require("three"),require("@vueuse/core")):typeof define=="function"&&define.amd?define(["exports","vue","three","@vueuse/core"],c):(g=typeof globalThis<"u"?globalThis:g||self,c(g.tres={},g.Vue,g.Three,g.VueUseCore))})(this,function(g,c,p,h){"use strict";var _t=Object.defineProperty;var Ct=(g,c,p)=>c in g?_t(g,c,{enumerable:!0,configurable:!0,writable:!0,value:p}):g[c]=p;var X=(g,c,p)=>(Ct(g,typeof c!="symbol"?c+"":c,p),p);function Pe(t){const e=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(t){for(const n in t)if(n!=="default"){const s=Object.getOwnPropertyDescriptor(t,n);Object.defineProperty(e,n,s.get?s:{enumerable:!0,get:()=>t[n]})}}return e.default=t,Object.freeze(e)}const Z=Pe(p),Le={name:"@tresjs/core",type:"module",version:"4.0.0-next.1",packageManager:"pnpm@8.10.2",description:"Declarative ThreeJS using Vue Components",author:"Alvaro Saburido <hola@alvarosaburido.dev> (https://github.com/alvarosabu/)",license:"MIT",keywords:["vue","3d","threejs","three","threejs-vue"],sideEffects:!1,exports:{".":{types:"./dist/index.d.ts",require:"./dist/tres.umd.cjs",import:"./dist/tres.js"},"./components":{types:"./dist/components/index.d.ts"},"./composables":{types:"./dist/composables/index.d.ts"},"./types":{types:"./dist/types/index.d.ts"},"./utils":{types:"./dist/utils/index.d.ts"},"./*":"./*"},main:"./dist/tres.js",module:"./dist/tres.js",types:"./dist/index.d.ts",files:["dist","*.d.ts"],publishConfig:{access:"public"},scripts:{dev:"cd playground && npm run dev",build:"vite build",playground:"cd playground && npm run dev",test:"vitest","test:ci":"vitest run","test:ui":"vitest --ui",release:"release-it",coverage:"vitest run --coverage",lint:"eslint . --ext .js,.jsx,.ts,.tsx,.vue","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"},peerDependencies:{three:">=0.133",vue:">=3.4"},dependencies:{"@alvarosabu/utils":"^3.1.1","@vueuse/core":"^10.7.1"},devDependencies:{"@release-it/conventional-changelog":"^8.0.1","@stackblitz/sdk":"^1.9.0","@tresjs/cientos":"3.7.0","@tresjs/eslint-config-vue":"^0.2.1","@types/three":"^0.160.0","@typescript-eslint/eslint-plugin":"^6.17.0","@typescript-eslint/parser":"^6.17.0","@vitejs/plugin-vue":"^5.0.2","@vitest/coverage-c8":"^0.33.0","@vitest/ui":"^1.1.1","@vue/test-utils":"^2.4.3",eslint:"^8.56.0","eslint-plugin-vue":"^9.19.2",esno:"^4.0.0",gsap:"^3.12.4",jsdom:"^23.0.1",kolorist:"^1.8.0",ohmyfetch:"^0.4.21",pathe:"^1.1.1","release-it":"^17.0.1","rollup-plugin-analyzer":"^4.0.0","rollup-plugin-copy":"^3.5.0","rollup-plugin-visualizer":"^5.12.0",three:"^0.160.0",unocss:"^0.58.3",unplugin:"^1.6.0","unplugin-vue-components":"^0.26.0",vite:"^5.0.10","vite-plugin-banner":"^0.7.1","vite-plugin-dts":"3.7.0","vite-plugin-inspect":"^0.8.1","vite-plugin-require-transform":"^1.0.21","vite-svg-loader":"^5.1.0",vitepress:"1.0.0-rc.34",vitest:"^1.1.1",vue:"^3.4.3","vue-demi":"^0.14.6"}},ee=({sizes:t,scene:e})=>{const n=c.ref([]),s=c.computed(()=>n.value[0]),o=(a,l=!1)=>{n.value.some(({uuid:m})=>m===a.uuid)||(l?r(a):n.value.push(a))},i=a=>{n.value=n.value.filter(({uuid:l})=>l!==a.uuid)},r=a=>{const l=a instanceof p.Camera?a:n.value.find(d=>d.uuid===a);if(!l)return;const m=n.value.filter(({uuid:d})=>d!==l.uuid);n.value=[l,...m]};return c.watchEffect(()=>{t.aspectRatio.value&&n.value.forEach(a=>{!a.manual&&(a instanceof p.PerspectiveCamera||Ae(a))&&(a instanceof p.PerspectiveCamera?a.aspect=t.aspectRatio.value:(a.left=t.width.value*-.5,a.right=t.width.value*.5,a.top=t.height.value*.5,a.bottom=t.height.value*-.5),a.updateProjectionMatrix())})}),c.onUnmounted(()=>{n.value=[]}),{camera:s,cameras:n,registerCamera:o,deregisterCamera:i,setCameraActive:r}};function Ae(t){return t.hasOwnProperty("isOrthographicCamera")&&t.isOrthographicCamera}const te=h.createEventHook(),ne=h.createEventHook(),J=h.createEventHook(),$=new p.Clock;let E=0,F=0;const{pause:Oe,resume:xe,isActive:Be}=h.useRafFn(()=>{te.trigger({delta:E,elapsed:F,clock:$}),ne.trigger({delta:E,elapsed:F,clock:$}),J.trigger({delta:E,elapsed:F,clock:$})},{immediate:!1});J.on(()=>{E=$.getDelta(),F=$.getElapsedTime()});const N=()=>({onBeforeLoop:te.on,onLoop:ne.on,onAfterLoop:J.on,pause:Oe,resume:xe,isActive:Be}),Te=!0,re="[TresJS ▲ ■ ●] ";function A(){function t(s,o){console.error(`${re} ${s}`,o||"")}function e(s){console.warn(`${re} ${s}`)}function n(s,o){}return{logError:t,logWarning:e,logMessage:n}}function je(t){return typeof t=="number"?[t,t,t]:t instanceof p.Vector3?[t.x,t.y,t.z]:t}function oe(t){return t instanceof p.Color?t:Array.isArray(t)?new p.Color(...t):new p.Color(t)}class De extends Z.Mesh{constructor(...n){super(...n);X(this,"type","HightlightMesh");X(this,"createTime");this.createTime=Date.now()}onBeforeRender(){const s=(Date.now()-this.createTime)/1e3,r=1+.07*Math.sin(2.5*s);this.scale.set(r,r,r)}}const se=(t,e)=>{for(const n of Object.keys(e))e[n]instanceof Object&&Object.assign(e[n],se(t[n],e[n]));return Object.assign(t||{},e),t},Ie=$e("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");function ie(t){return t&&t.nodeType===1}function U(t){return t.replace(/-([a-z])/g,(e,n)=>n.toUpperCase())}function $e(t,e){const n=Object.create(null),s=t.split(",");for(let o=0;o<s.length;o++)n[s[o]]=!0;return e?o=>!!n[o.toLowerCase()]:o=>!!n[o]}const Ve=(t,e)=>{const n=new Set,s=[];for(const o of t){const i=e(o);n.has(i)||(n.add(i),s.push(o))}return s},ae=(t,e)=>{if(!e)return;const n=Array.isArray(e)?e:e.match(/([^[.\]])+/g);return n==null?void 0:n.reduce((s,o)=>s&&s[o],t)},Ee=(t,e,n)=>{const s=Array.isArray(e)?e:e.match(/([^[.\]])+/g);s&&s.reduce((o,i,r)=>(o[i]===void 0&&(o[i]={}),r===s.length-1&&(o[i]=n),o[i]),t)};function le(t,e){if(ie(t)&&ie(e)){const o=t.attributes,i=e.attributes;return o.length!==i.length?!1:Array.from(o).every(({name:r,value:a})=>e.getAttribute(r)===a)}if(t===e)return!0;if(t===null||typeof t!="object"||e===null||typeof e!="object")return!1;const n=Object.keys(t),s=Object.keys(e);if(n.length!==s.length)return!1;for(const o of n)if(!s.includes(o)||!le(t[o],e[o]))return!1;return!0}function Fe(t,e){if(!Array.isArray(t)||!Array.isArray(e)||t.length!==e.length)return!1;for(let n=0;n<t.length;n++)if(!le(t[n],e[n]))return!1;return!0}const Ne=Array.isArray;function Ue(t,e,n,s){const o=l=>{if(l.uuid===e)return l;for(const m of l.children){const d=o(m);if(d)return d}},i=o(t);if(!i){console.warn("Object with UUID not found in the scene.");return}let r=i;for(let l=0;l<n.length-1;l++)if(r[n[l]]!==void 0)r=r[n[l]];else{console.warn(`Property path is not valid: ${n.join(".")}`);return}const a=n[n.length-1];r[a]!==void 0?r[a]=s:console.warn(`Property path is not valid: ${n.join(".")}`)}function We(t){const e=new p.MeshBasicMaterial({color:11003607,transparent:!0,opacity:.2,depthTest:!1,side:p.DoubleSide});return new De(t.geometry.clone(),e)}function ue(t){var n;let e=t.value;return t.value&&((n=t.value)!=null&&n.isMesh)&&(e=t.value.position),Array.isArray(t.value)&&(e=new p.Vector3(...e)),e}const Ge=Number.parseInt(p.REVISION.replace("dev","")),W={realistic:{shadows:!0,physicallyCorrectLights:!0,outputColorSpace:p.SRGBColorSpace,toneMapping:p.ACESFilmicToneMapping,toneMappingExposure:3,shadowMap:{enabled:!0,type:p.PCFSoftShadowMap}},flat:{toneMapping:p.NoToneMapping,toneMappingExposure:1}};function ce({scene:t,canvas:e,options:n,disableRender:s,emit:o,contextParts:{sizes:i,camera:r,render:a,invalidate:l,advance:m}}){const d=c.computed(()=>({alpha:h.toValue(n.alpha)??!0,depth:h.toValue(n.depth),canvas:h.unrefElement(e),context:h.toValue(n.context),stencil:h.toValue(n.stencil),antialias:h.toValue(n.antialias)??!0,precision:h.toValue(n.precision),powerPreference:h.toValue(n.powerPreference),premultipliedAlpha:h.toValue(n.premultipliedAlpha),preserveDrawingBuffer:h.toValue(n.preserveDrawingBuffer),logarithmicDepthBuffer:h.toValue(n.logarithmicDepthBuffer),failIfMajorPerformanceCaveat:h.toValue(n.failIfMajorPerformanceCaveat)})),u=c.shallowRef(new p.WebGLRenderer(d.value));function f(){n.renderMode==="on-demand"&&l()}c.watch(d,()=>{u.value.dispose(),u.value=new p.WebGLRenderer(d.value),f()}),c.watch([i.width,i.height],()=>{u.value.setSize(i.width.value,i.height.value),f()},{immediate:!0}),c.watch(()=>n.clearColor,f);const{pixelRatio:v}=h.useDevicePixelRatio();c.watch(v,()=>{u.value.setPixelRatio(v.value)});const{logError:M}=A(),{resume:k,onLoop:_}=N();_(()=>{r.value&&!h.toValue(s)&&a.frames.value>0&&(u.value.render(t,r.value),o("render",u.value)),a.priority.value=0,h.toValue(n.renderMode)==="always"?a.frames.value=1:a.frames.value=Math.max(0,a.frames.value-1)}),k();const b=(()=>{const C=new p.WebGLRenderer,y={shadowMap:{enabled:C.shadowMap.enabled,type:C.shadowMap.type},toneMapping:C.toneMapping,toneMappingExposure:C.toneMappingExposure,outputColorSpace:C.outputColorSpace};return C.dispose(),y})(),P=h.toValue(n.renderMode);return P==="on-demand"&&l(),P==="manual"&&setTimeout(()=>{m()},1),c.watchEffect(()=>{const C=h.toValue(n.preset);C&&(C in W||M(`Renderer Preset must be one of these: ${Object.keys(W).join(", ")}`),se(u.value,W[C])),P==="always"&&(a.frames.value=Math.max(1,a.frames.value));const y=(j,B)=>{const D=h.toValue(j),H=()=>{if(C)return ae(W[C],B)};if(D!==void 0)return D;const q=H();return q!==void 0?q:ae(b,B)},w=(j,B)=>Ee(u.value,B,y(j,B));w(n.shadows,"shadowMap.enabled"),w(n.toneMapping??p.ACESFilmicToneMapping,"toneMapping"),w(n.shadowMapType,"shadowMap.type"),Ge<150&&w(!n.useLegacyLights,"physicallyCorrectLights"),w(n.outputColorSpace,"outputColorSpace"),w(n.toneMappingExposure,"toneMappingExposure");const L=y(n.clearColor,"clearColor");L&&u.value.setClearColor(L?oe(L):new p.Color(0))}),c.onUnmounted(()=>{u.value.dispose(),u.value.forceContextLoss()}),{renderer:u}}const Q=t=>typeof t=="function",ze=t=>!!t&&t.constructor===Array;function de(t){const e={nodes:{},materials:{}};return t&&t.traverse(n=>{n.name&&(e.nodes[n.name]=n),n.material&&!e.materials[n.material.name]&&(e.materials[n.material.name]=n.material)}),e}async function Re(t,e,n,s,o){const{logError:i}=A(),r=new t;o&&o(r),n&&n(r);const l=(Array.isArray(e)?e:[e]).map(m=>new Promise((d,u)=>{r.load(m,f=>{f.scene&&Object.assign(f,de(f.scene)),d(f)},s,f=>u(i("[useLoader] - Failed to load resource",f)))}));return ze(e)?await Promise.all(l):await l[0]}async function qe(t){const e=new p.LoadingManager,n=new p.TextureLoader(e),s=o=>new Promise((i,r)=>{n.load(o,a=>i(a),()=>null,()=>{r(new Error("[useTextures] - Failed to load texture"))})});if(Ne(t)){const o=await Promise.all(t.map(i=>s(i)));return t.length>1?o:o[0]}else{const{map:o,displacementMap:i,normalMap:r,roughnessMap:a,metalnessMap:l,aoMap:m,alphaMap:d,matcap:u}=t;return{map:o?await s(o):null,displacementMap:i?await s(i):null,normalMap:r?await s(r):null,roughnessMap:a?await s(a):null,metalnessMap:l?await s(l):null,aoMap:m?await s(m):null,alphaMap:d?await s(d):null,matcap:u?await s(u):null}}}const fe=(t,e)=>{const n=c.computed(()=>e.renderer.value.domElement),{x:s,y:o}=h.usePointer({target:n}),{width:i,height:r,top:a,left:l}=h.useElementBounding(n),m=({x:y,y:w})=>{if(n.value)return{x:(y-l.value)/i.value*2-1,y:-((w-a.value)/r.value)*2+1}},d=({x:y,y:w})=>{if(e.camera.value)return e.raycaster.value.setFromCamera(new p.Vector2(y,w),e.camera.value),e.raycaster.value.intersectObjects(t.value,!1)},u=y=>{const w=m({x:(y==null?void 0:y.clientX)??s.value,y:(y==null?void 0:y.clientY)??o.value});return w?d(w)||[]:[]},f=c.computed(()=>u()),v=h.createEventHook(),M=h.createEventHook(),k=(y,w)=>{y.trigger({event:w,intersects:u(w)})},_=y=>{k(M,y)};let S;const b=y=>{var w;S=(w=u(y)[0])==null?void 0:w.object},P=y=>{var w;y instanceof PointerEvent&&S===((w=u(y)[0])==null?void 0:w.object)&&k(v,y)},C=y=>M.trigger({event:y,intersects:[]});return n.value.addEventListener("pointerup",P),n.value.addEventListener("pointerdown",b),n.value.addEventListener("pointermove",_),n.value.addEventListener("pointerleave",C),c.onUnmounted(()=>{n!=null&&n.value&&(n.value.removeEventListener("pointerup",P),n.value.removeEventListener("pointerdown",b),n.value.removeEventListener("pointermove",_),n.value.removeEventListener("pointerleave",C))}),{intersects:f,onClick:y=>v.on(y).off,onPointerMove:y=>M.on(y).off}};function Je(){const{logWarning:t}=A();function e(i,r,a){let l=null;return i.traverse(m=>{m[r]===a&&(l=m)}),l||t(`Child with ${r} '${a}' not found.`),l}function n(i,r,a){const l=[];return i.traverse(m=>{m[r].includes(a)&&l.push(m)}),l.length||t(`Children with ${r} '${a}' not found.`),l}function s(i,r){return e(i,"name",r)}function o(i,r){return n(i,"name",r)}return{seek:e,seekByName:s,seekAll:n,seekAllByName:o}}const pe=t=>{const e=c.reactive({click:new Map,pointerMove:new Map,pointerEnter:new Map,pointerLeave:new Map}),n=c.ref(new Set),s=u=>{n.value.add(u)},o=u=>{n.value.delete(u)},i=u=>{Object.values(e).forEach(f=>f.delete(u)),o(u)},r=u=>{const{onClick:f,onPointerMove:v,onPointerEnter:M,onPointerLeave:k}=u;f&&e.click.set(u,f),v&&e.pointerMove.set(u,v),M&&e.pointerEnter.set(u,M),k&&e.pointerLeave.set(u,k)},a=c.computed(()=>Ve([...Array.from(n.value),...Object.values(e).map(u=>Array.from(u.keys())).flat()],({uuid:u})=>u));t.registerObjectAtPointerEventHandler=r,t.deregisterObjectAtPointerEventHandler=i,t.registerBlockingObjectAtPointerEventHandler=s,t.deregisterBlockingObjectAtPointerEventHandler=o;const{onClick:l,onPointerMove:m}=fe(a,t);l(({intersects:u,event:f})=>{var v;u.length&&((v=e.click.get(u[0].object))==null||v(u[0],f))});let d;return m(({intersects:u,event:f})=>{var S,b,P,C;const v=(S=u==null?void 0:u[0])==null?void 0:S.object,{pointerLeave:M,pointerEnter:k,pointerMove:_}=e;d&&d!==v&&((b=M.get(d))==null||b(d,f)),v&&(d!==v&&((P=k.get(v))==null||P(u[0],f)),(C=_.get(v))==null||C(u[0],f)),d=v||null}),{registerObject:r,deregisterObject:i,registerBlockingObject:s,deregisterBlockingObject:o}};function me(t){let e=0;return t.traverse(n=>{if(n.isMesh&&n.geometry){const s=n.geometry,o=s.attributes.position.count*3*Float32Array.BYTES_PER_ELEMENT,i=s.index?s.index.count*Uint32Array.BYTES_PER_ELEMENT:0,r=s.attributes.normal?s.attributes.normal.count*3*Float32Array.BYTES_PER_ELEMENT:0,a=s.attributes.uv?s.attributes.uv.count*2*Float32Array.BYTES_PER_ELEMENT:0,l=o+i+r+a;e+=l}}),e}function Qe(t){return(t/1024).toFixed(2)}const G=c.ref({}),z=t=>Object.assign(G.value,t);function Ye(t,e,n=10){const s=h.toValue(t)?h.useWindowSize():h.useElementSize(c.computed(()=>h.toValue(e).parentElement)),o=c.readonly(h.refDebounced(s.width,n)),i=c.readonly(h.refDebounced(s.height,n)),r=c.computed(()=>o.value/i.value);return{height:i,width:o,aspectRatio:r}}function ge({scene:t,canvas:e,windowSize:n,disableRender:s,rendererOptions:o,emit:i}){const{logWarning:r}=A(),a=c.shallowRef(t),l=Ye(n,e),{camera:m,cameras:d,registerCamera:u,deregisterCamera:f,setCameraActive:v}=ee({sizes:l,scene:t}),M={mode:c.ref(o.renderMode||"always"),priority:c.ref(0),frames:c.ref(0),maxFrames:60,canBeInvalidated:c.computed(()=>M.mode.value==="on-demand"&&M.frames.value===0)};function k(I=1){o.renderMode==="on-demand"?M.frames.value=Math.min(M.maxFrames,M.frames.value+I):r("`invalidate` can only be used when `renderMode` is set to `on-demand`")}function _(){o.renderMode==="manual"?M.frames.value=1:r("`advance` can only be used when `renderMode` is set to `manual`")}const{renderer:S}=ce({scene:t,canvas:e,options:o,emit:i,contextParts:{sizes:l,camera:m,render:M,invalidate:k,advance:_},disableRender:s}),b={sizes:l,scene:a,camera:m,cameras:c.readonly(d),renderer:S,raycaster:c.shallowRef(new p.Raycaster),controls:c.ref(null),perf:{maxFrames:160,fps:{value:0,accumulator:[]},memory:{currentMem:0,allocatedMem:0,accumulator:[]}},render:M,advance:_,extend:z,invalidate:k,registerCamera:u,setCameraActive:v,deregisterCamera:f};c.provide("useTres",b),b.scene.value.__tres={root:b};const P=100,C=h.useFps({every:P}),{isSupported:y,memory:w}=h.useMemory({interval:P}),L=160;let j=performance.now();const B=({timestamp:I})=>{b.scene.value&&(b.perf.memory.allocatedMem=me(b.scene.value)),I-j>=P&&(j=I,b.perf.fps.accumulator.push(C.value),b.perf.fps.accumulator.length>L&&b.perf.fps.accumulator.shift(),b.perf.fps.value=C.value,y.value&&w.value&&(b.perf.memory.accumulator.push(w.value.usedJSHeapSize/1024/1024),b.perf.memory.accumulator.length>L&&b.perf.memory.accumulator.shift(),b.perf.memory.currentMem=b.perf.memory.accumulator.reduce((bt,Mt)=>bt+Mt,0)/b.perf.memory.accumulator.length))};let D=0;const H=1,{pause:q}=h.useRafFn(({delta:I})=>{window.__TRES__DEVTOOLS__&&(B({timestamp:performance.now()}),D+=I,D>=H&&(window.__TRES__DEVTOOLS__.cb(b),D=0))},{immediate:!0});return c.onUnmounted(()=>{q()}),b}function ve(){const t=c.inject("useTres");if(!t)throw new Error("useTresContext must be used together with useTresContextProvider");return t}const Ke=ve;function zt(t){}const{logError:he}=A(),Y=["onClick","onPointerMove","onPointerEnter","onPointerLeave"];function ye(t){const e=t.__tres.root;e&&e.render&&e.render.canBeInvalidated.value&&e.invalidate()}const we=()=>{let t=null;return{createElement(e,n,s,o){if(o||(o={}),o.args||(o.args=[]),e==="template"||Ie(e))return null;let i=e.replace("Tres",""),r;if(e==="primitive"){(o==null?void 0:o.object)===void 0&&he("Tres primitives need a prop 'object'");const a=o.object;i=a.type,r=Object.assign(a.clone(),{type:i})}else{const a=G.value[i];a||he(`${i} is not defined on the THREE namespace. Use extend to add it to the catalog.`),r=new a(...o.args)}return r?(r.isCamera&&(o!=null&&o.position||r.position.set(3,3,3),o!=null&&o.lookAt||r.lookAt(0,0,0)),(o==null?void 0:o.attach)===void 0&&(r.isMaterial?r.attach="material":r.isBufferGeometry&&(r.attach="geometry")),r.__tres={...r.__tres,type:i,memoizedProps:o,eventCount:0,disposable:!0,primitive:e==="primitive"},r.isObject3D&&(o!=null&&o.material||o!=null&&o.geometry)&&(r.__tres.disposable=!1),r):null},insert(e,n){if(!e)return;n&&n.isScene&&(t=n),t&&(e.__tres.root=t.__tres.root);const s=n||t;if(e!=null&&e.isObject3D){const{registerCamera:o,registerObjectAtPointerEventHandler:i}=e.__tres.root;e!=null&&e.isCamera&&o(e),e&&Y.some(r=>e[r])&&i(e)}e!=null&&e.isObject3D&&(s!=null&&s.isObject3D)?(s.add(e),e.dispatchEvent({type:"added"})):e!=null&&e.isFog?s.fog=e:typeof(e==null?void 0:e.attach)=="string"&&(e.__previousAttach=e[s==null?void 0:s.attach],s&&(s[e.attach]=e))},remove(e){var i,r;if(!e)return;const n=e.__tres;e.parent=e.parent||t;const{deregisterObjectAtPointerEventHandler:s,deregisterBlockingObjectAtPointerEventHandler:o}=n.root;if(e.isObject3D){const a=d=>{var f,v;const u=d;n.disposable&&((f=u.material)==null||f.dispose(),u.material=void 0,(v=u.geometry)==null||v.dispose(),u.geometry=void 0)},l=d=>{o(d),d&&Y.some(u=>d[u])&&(s==null||s(d))},m=d=>{const u=e.__tres.root.deregisterCamera;d.isCamera&&(u==null||u(d))};(i=e.removeFromParent)==null||i.call(e),e.traverse(d=>{a(d),m(d),l==null||l(d)}),a(e),m(e),l==null||l(e),ye(e),(r=e.dispose)==null||r.call(e)}},patchProp(e,n,s,o){if(e){let i=e,r=n;if(e.__tres.primitive&&r==="object"&&s!==null){const d=we.createElement("primitive",void 0,void 0,{object:o});for(const u in d){if(u==="uuid")continue;const f=e[u],v=d[u];!(f!=null&&f.set)&&!Q(f)?e[u]=v:f.constructor===v.constructor&&(f!=null&&f.copy)?f==null||f.copy(v):Array.isArray(v)?f.set(...v):!f.isColor&&f.setScalar?f.setScalar(v):f.set(v)}d.__tres.root=t==null?void 0:t.__tres.root,d.isGroup?(e.geometry=void 0,e.material=void 0):delete e.isGroup}if(e.__tres.root){const{registerBlockingObjectAtPointerEventHandler:d,deregisterBlockingObjectAtPointerEventHandler:u}=e.__tres.root;if(e.isObject3D&&r==="blocks-pointer-events"){o||o===""?d(e):u(e);return}}let a=U(r),l=i==null?void 0:i[a];if(r==="args"){const d=e,u=s??[],f=o??[],v=e.__tres.type||e.type;v&&u.length&&!Fe(u,f)&&(i=Object.assign(d,new G.value[v](...o)));return}if(i.type==="BufferGeometry"){if(r==="args")return;i.setAttribute(U(r),new p.BufferAttribute(...o));return}if(r.includes("-")&&l===void 0){const d=r.split("-");l=d.reduce((u,f)=>u[U(f)],i),r=d.pop(),a=r.toLowerCase(),l!=null&&l.set||(i=d.reduce((u,f)=>u[U(f)],i))}let m=o;if(m===""&&(m=!0),Q(l)){Y.includes(n)||(Array.isArray(m)?e[a](...m):e[a](m));return}!(l!=null&&l.set)&&!Q(l)?i[a]=m:l.constructor===m.constructor&&(l!=null&&l.copy)?l==null||l.copy(m):Array.isArray(m)?l.set(...m):!l.isColor&&l.setScalar?l.setScalar(m):l.set(m),ye(e)}},parentNode(e){return(e==null?void 0:e.parent)||null},createText:()=>void 0,createComment:()=>void 0,setText:()=>void 0,setElementText:()=>void 0,nextSibling:()=>void 0,querySelector:()=>void 0,setScopeId:()=>void 0,cloneNode:()=>void 0,insertStaticContent:()=>void 0}};function He(){return be().__VUE_DEVTOOLS_GLOBAL_HOOK__}function be(){return typeof navigator<"u"&&typeof window<"u"?window:typeof global<"u"?global:{}}const Xe=typeof Proxy=="function",Ze="devtools-plugin:setup",et="plugin:settings:set";let T,K;function tt(){var t;return T!==void 0||(typeof window<"u"&&window.performance?(T=!0,K=window.performance):typeof global<"u"&&(!((t=global.perf_hooks)===null||t===void 0)&&t.performance)?(T=!0,K=global.perf_hooks.performance):T=!1),T}function nt(){return tt()?K.now():Date.now()}class rt{constructor(e,n){this.target=null,this.targetQueue=[],this.onQueue=[],this.plugin=e,this.hook=n;const s={};if(e.settings)for(const r in e.settings){const a=e.settings[r];s[r]=a.defaultValue}const o=`__vue-devtools-plugin-settings__${e.id}`;let i=Object.assign({},s);try{const r=localStorage.getItem(o),a=JSON.parse(r);Object.assign(i,a)}catch{}this.fallbacks={getSettings(){return i},setSettings(r){try{localStorage.setItem(o,JSON.stringify(r))}catch{}i=r},now(){return nt()}},n&&n.on(et,(r,a)=>{r===this.plugin.id&&this.fallbacks.setSettings(a)}),this.proxiedOn=new Proxy({},{get:(r,a)=>this.target?this.target.on[a]:(...l)=>{this.onQueue.push({method:a,args:l})}}),this.proxiedTarget=new Proxy({},{get:(r,a)=>this.target?this.target[a]:a==="on"?this.proxiedOn:Object.keys(this.fallbacks).includes(a)?(...l)=>(this.targetQueue.push({method:a,args:l,resolve:()=>{}}),this.fallbacks[a](...l)):(...l)=>new Promise(m=>{this.targetQueue.push({method:a,args:l,resolve:m})})})}async setRealTarget(e){this.target=e;for(const n of this.onQueue)this.target.on[n.method](...n.args);for(const n of this.targetQueue)n.resolve(await this.target[n.method](...n.args))}}function ot(t,e){const n=t,s=be(),o=He(),i=Xe&&n.enableEarlyProxy;if(o&&(s.__VUE_DEVTOOLS_PLUGIN_API_AVAILABLE__||!i))o.emit(Ze,t,e);else{const r=i?new rt(n,o):null;(s.__VUE_DEVTOOLS_PLUGINS__=s.__VUE_DEVTOOLS_PLUGINS__||[]).push({pluginDescriptor:n,setupFn:e,proxy:r}),r&&e(r.proxiedTarget)}}function st(t,e){const n=`▲ ■ ●${t}`;typeof __VUE_DEVTOOLS_TOAST__=="function"?__VUE_DEVTOOLS_TOAST__(n,e):e==="error"?console.error(n):e==="warn"?console.warn(n):console.log(n)}const Me=t=>{const e={id:t.uuid,label:t.type,children:[],tags:[]};t.name!==""&&e.tags.push({label:t.name,textColor:5750629,backgroundColor:15793395});const n=me(t);return n>0&&e.tags.push({label:`${Qe(n)} KB`,textColor:15707189,backgroundColor:16775644,tooltip:"Memory usage"}),t.type.includes("Light")&&(e.tags.push({label:`${t.intensity}`,textColor:9738662,backgroundColor:16316922,tooltip:"Intensity"}),e.tags.push({label:`#${t.color.getHexString()}`,textColor:9738662,backgroundColor:16316922,tooltip:"Color"})),t.type.includes("Camera")&&(e.tags.push({label:`${t.fov}°`,textColor:9738662,backgroundColor:16316922,tooltip:"Field of view"}),e.tags.push({label:`x: ${Math.round(t.position.x)} y: ${Math.round(t.position.y)} z: ${Math.round(t.position.z)}`,textColor:9738662,backgroundColor:16316922,tooltip:"Position"})),e};function _e(t,e){t.children.forEach(n=>{if(n.type==="HightlightMesh")return;const s=Me(n);e.children.push(s),_e(n,s)})}const it=[],V="tres:inspector",at=c.reactive({sceneGraph:null});function lt(t,e){ot({id:"dev.esm.tres",label:"TresJS 🪐",logo:"https://raw.githubusercontent.com/Tresjs/tres/main/public/favicon.svg",packageName:"tresjs",homepage:"https://tresjs.org",componentStateTypes:it,app:t},n=>{typeof n.now!="function"&&st("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."),n.addInspector({id:V,label:"TresJS 🪐",icon:"account_tree",treeFilterPlaceholder:"Search instances"}),setInterval(()=>{n.sendInspectorTree(V)},1e3),setInterval(()=>{n.notifyComponentUpdate()},5e3),n.on.getInspectorTree(i=>{if(i.inspectorId===V){const r=Me(e.scene.value);_e(e.scene.value,r),at.sceneGraph=r,i.rootNodes=[r]}});let s=null,o=null;n.on.getInspectorState(i=>{if(i.inspectorId===V){const[r]=e.scene.value.getObjectsByProperty("uuid",i.nodeId);if(!r)return;if(o&&s&&s.parent&&o.remove(s),r.isMesh){const a=We(r);r.add(a),s=a,o=r}i.state={object:[{key:"uuid",editable:!0,value:r.uuid},{key:"name",editable:!0,value:r.name},{key:"type",editable:!0,value:r.type},{key:"position",editable:!0,value:r.position},{key:"rotation",editable:!0,value:r.rotation},{key:"scale",editable:!0,value:r.scale},{key:"geometry",value:r.geometry},{key:"material",value:r.material},{key:"color",editable:!0,value:r.color},{key:"intensity",editable:!0,value:r.intensity},{key:"castShadow",editable:!0,value:r.castShadow},{key:"receiveShadow",editable:!0,value:r.receiveShadow},{key:"frustumCulled",editable:!0,value:r.frustumCulled},{key:"matrixAutoUpdate",editable:!0,value:r.matrixAutoUpdate},{key:"matrixWorldNeedsUpdate",editable:!0,value:r.matrixWorldNeedsUpdate},{key:"matrixWorld",value:r.matrixWorld},{key:"visible",editable:!0,value:r.visible}]}}}),n.on.editInspectorState(i=>{i.inspectorId===V&&Ue(e.scene.value,i.nodeId,i.path,i.state.value)})})}const ut=["data-scene","data-tres"],Ce=c.defineComponent({__name:"TresCanvas",props:{shadows:{type:Boolean,default:void 0},clearColor:{},toneMapping:{},shadowMapType:{},useLegacyLights:{type:Boolean,default:void 0},outputColorSpace:{},toneMappingExposure:{},renderMode:{default:"always"},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"],setup(t,{expose:e,emit:n}){var k;const s=t,o=n,i=c.ref(),r=c.shallowRef(new p.Scene),{resume:a}=N(),l=c.useSlots(),m=(k=c.getCurrentInstance())==null?void 0:k.appContext.app;z(Z);const d=_=>c.defineComponent({setup(){var b;const S=(b=c.getCurrentInstance())==null?void 0:b.appContext;return S&&(S.app=m),c.provide("useTres",_),c.provide("extend",z),typeof window<"u"&&lt(S==null?void 0:S.app,_),()=>c.h(c.Fragment,null,l!=null&&l.default?l.default():[])}}),u=_=>{const S=d(_),{render:b}=c.createRenderer(we());b(c.h(S),r.value)},f=(_,S=!1)=>{r.value.children=[],S&&(_.renderer.value.dispose(),_.renderer.value.renderLists.dispose(),_.renderer.value.forceContextLoss()),u(_),a()},v=c.computed(()=>s.disableRender),M=c.shallowRef(null);return e({context:M,dispose:()=>f(M.value,!0)}),c.onMounted(()=>{const _=i;M.value=ge({scene:r.value,canvas:_,windowSize:s.windowSize??!1,disableRender:v.value??!1,rendererOptions:s,emit:o}),pe(M.value);const{registerCamera:S,camera:b,cameras:P,deregisterCamera:C}=M.value;u(M.value);const y=()=>{const w=new p.PerspectiveCamera(45,window.innerWidth/window.innerHeight,.1,1e3);w.position.set(3,3,3),w.lookAt(0,0,0),S(w);const L=c.watchEffect(()=>{P.value.length>=2&&(w.removeFromParent(),C(w),L==null||L())})};c.watch(()=>s.camera,(w,L)=>{w&&S(w),L&&(L.removeFromParent(),C(L))},{immediate:!0}),b.value||y()}),(_,S)=>(c.openBlock(),c.createElementBlock("canvas",{ref_key:"canvas",ref:i,"data-scene":r.value.uuid,class:c.normalizeClass(_.$attrs.class),"data-tres":`tresjs ${c.unref(Le).version}`,style:c.normalizeStyle({display:"block",width:"100%",height:"100%",position:_.windowSize?"fixed":"relative",top:0,left:0,pointerEvents:"auto",touchAction:"none",..._.$attrs.style})},null,14,ut))}}),ct=["TresCanvas","TresLeches","TresScene"],dt={template:{compilerOptions:{isCustomElement:t=>t.startsWith("Tres")&&!ct.includes(t)||t==="primitive"}}},ft={mounted:(t,e)=>{if(e.arg){console.log(`v-log:${e.arg}`,t[e.arg]);return}console.log("v-log",t)}};class Se extends p.Line{constructor(e,n){const s=[1,1,0,-1,1,0,-1,-1,0,1,-1,0,1,1,0],o=new p.BufferGeometry;o.setAttribute("position",new p.Float32BufferAttribute(s,3)),o.computeBoundingSphere();const i=new p.LineBasicMaterial({fog:!1});super(o,i),this.light=e,this.color=n,this.type="RectAreaLightHelper";const r=[1,1,0,-1,1,0,-1,-1,0,1,1,0,-1,-1,0,1,-1,0],a=new p.BufferGeometry;a.setAttribute("position",new p.Float32BufferAttribute(r,3)),a.computeBoundingSphere(),this.add(new p.Mesh(a,new p.MeshBasicMaterial({side:p.BackSide,fog:!1})))}updateMatrixWorld(){if(this.scale.set(.5*this.light.width,.5*this.light.height,1),this.color!==void 0)this.material.color.set(this.color),this.children[0].material.color.set(this.color);else{this.material.color.copy(this.light.color).multiplyScalar(this.light.intensity);const e=this.material.color,n=Math.max(e.r,e.g,e.b);n>1&&e.multiplyScalar(1/n),this.children[0].material.color.copy(this.material.color)}this.matrixWorld.extractRotation(this.light.matrixWorld).scale(this.scale).copyPosition(this.light.matrixWorld),this.children[0].matrixWorld.copy(this.matrixWorld)}dispose(){this.geometry.dispose(),this.material.dispose(),this.children[0].geometry.dispose(),this.children[0].material.dispose()}}const{logWarning:ke}=A();let R,x;const pt={DirectionalLight:p.DirectionalLightHelper,PointLight:p.PointLightHelper,SpotLight:p.SpotLightHelper,HemisphereLight:p.HemisphereLightHelper,RectAreaLight:Se},mt={mounted:t=>{if(!t.isLight){ke(`${t.type} is not a light`);return}R=pt[t.type],t.parent.add(new R(t,1,t.color.getHex()))},updated:t=>{x=t.parent.children.find(e=>e instanceof R),!(x instanceof Se)&&x.update()},unmounted:t=>{if(!t.isLight){ke(`${t.type} is not a light`);return}x=t.parent.children.find(e=>e instanceof R),x&&x.dispose&&x.dispose(),t.parent.remove(x)}},{logWarning:gt}=A(),vt={updated:(t,e)=>{const n=ue(e);if(!n){gt(`v-always-look-at: problem with binding value: ${e.value}`);return}const{onLoop:s}=N();s(()=>{t.lookAt(n)})}},{logWarning:ht}=A(),yt={updated:(t,e)=>{var o;const n=ue(e);if(!n){ht(`v-distance-to: problem with binding value: ${e.value}`);return}O&&(O.dispose(),t.parent.remove(O));const s=n.clone().sub(t.position);s.normalize(),O=new p.ArrowHelper(s,t.position,t.position.distanceTo(n),16776960),t.parent.add(O),console.table([["Distance:",t.position.distanceTo(n)],[`origin: ${t.name||t.type}`,`x:${t.position.x}, y:${t.position.y}, z:${(o=t.position)==null?void 0:o.z}`],[`Destiny: ${t.name||t.type}`,`x:${n.x}, y:${n.y}, z:${n==null?void 0:n.z}`]])},unmounted:t=>{O==null||O.dispose(),t.parent.remove(O)}};let O=null;const wt={install(t){t.component("TresCanvas",Ce)}};g.TresCanvas=Ce,g.catalogue=G,g.default=wt,g.extend=z,g.isProd=Te,g.normalizeColor=oe,g.normalizeVectorFlexibleParam=je,g.templateCompilerOptions=dt,g.trasverseObjects=de,g.useCamera=ee,g.useLoader=Re,g.useLogger=A,g.usePointerEventHandler=pe,g.useRaycaster=fe,g.useRenderLoop=N,g.useRenderer=ce,g.useSeek=Je,g.useTexture=qe,g.useTres=Ke,g.useTresContext=ve,g.useTresContextProvider=ge,g.vAlwaysLookAt=vt,g.vDistanceTo=yt,g.vLightHelper=mt,g.vLog=ft,Object.defineProperties(g,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@tresjs/core",
3
3
  "type": "module",
4
- "version": "3.7.0",
4
+ "version": "4.0.0-next.1",
5
5
  "packageManager": "pnpm@8.10.2",
6
6
  "description": "Declarative ThreeJS using Vue Components",
7
7
  "author": "Alvaro Saburido <hola@alvarosaburido.dev> (https://github.com/alvarosabu/)",
@@ -62,28 +62,28 @@
62
62
  },
63
63
  "peerDependencies": {
64
64
  "three": ">=0.133",
65
- "vue": ">=3.3"
65
+ "vue": ">=3.4"
66
66
  },
67
67
  "dependencies": {
68
68
  "@alvarosabu/utils": "^3.1.1",
69
- "@vueuse/core": "^10.7.0"
69
+ "@vueuse/core": "^10.7.1"
70
70
  },
71
71
  "devDependencies": {
72
72
  "@release-it/conventional-changelog": "^8.0.1",
73
73
  "@stackblitz/sdk": "^1.9.0",
74
- "@tresjs/cientos": "3.6.0",
74
+ "@tresjs/cientos": "3.7.0",
75
75
  "@tresjs/eslint-config-vue": "^0.2.1",
76
- "@types/three": "^0.159.0",
77
- "@typescript-eslint/eslint-plugin": "^6.14.0",
78
- "@typescript-eslint/parser": "^6.14.0",
79
- "@vitejs/plugin-vue": "^4.5.2",
76
+ "@types/three": "^0.160.0",
77
+ "@typescript-eslint/eslint-plugin": "^6.17.0",
78
+ "@typescript-eslint/parser": "^6.17.0",
79
+ "@vitejs/plugin-vue": "^5.0.2",
80
80
  "@vitest/coverage-c8": "^0.33.0",
81
- "@vitest/ui": "^1.0.4",
81
+ "@vitest/ui": "^1.1.1",
82
82
  "@vue/test-utils": "^2.4.3",
83
- "eslint": "^8.55.0",
83
+ "eslint": "^8.56.0",
84
84
  "eslint-plugin-vue": "^9.19.2",
85
85
  "esno": "^4.0.0",
86
- "gsap": "^3.12.3",
86
+ "gsap": "^3.12.4",
87
87
  "jsdom": "^23.0.1",
88
88
  "kolorist": "^1.8.0",
89
89
  "ohmyfetch": "^0.4.21",
@@ -91,20 +91,20 @@
91
91
  "release-it": "^17.0.1",
92
92
  "rollup-plugin-analyzer": "^4.0.0",
93
93
  "rollup-plugin-copy": "^3.5.0",
94
- "rollup-plugin-visualizer": "^5.11.0",
95
- "three": "^0.159.0",
96
- "unocss": "^0.58.0",
97
- "unplugin": "^1.5.1",
94
+ "rollup-plugin-visualizer": "^5.12.0",
95
+ "three": "^0.160.0",
96
+ "unocss": "^0.58.3",
97
+ "unplugin": "^1.6.0",
98
98
  "unplugin-vue-components": "^0.26.0",
99
- "vite": "^5.0.8",
99
+ "vite": "^5.0.10",
100
100
  "vite-plugin-banner": "^0.7.1",
101
- "vite-plugin-dts": "3.6.4",
101
+ "vite-plugin-dts": "3.7.0",
102
102
  "vite-plugin-inspect": "^0.8.1",
103
103
  "vite-plugin-require-transform": "^1.0.21",
104
104
  "vite-svg-loader": "^5.1.0",
105
- "vitepress": "1.0.0-rc.31",
106
- "vitest": "^1.0.4",
107
- "vue": "^3.3.11",
105
+ "vitepress": "1.0.0-rc.34",
106
+ "vitest": "^1.1.1",
107
+ "vue": "^3.4.3",
108
108
  "vue-demi": "^0.14.6"
109
109
  }
110
110
  }
@@ -1,5 +0,0 @@
1
- export declare const render: import("vue").RootRenderFunction<import("..").TresObject>;
2
- declare const _default: {
3
- extend: (objects: any) => any;
4
- };
5
- export default _default;