@tresjs/core 4.0.0-rc.0 → 4.0.0-rc.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: v4.0.0-rc.0
3
+ * version: v4.0.0-rc.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(b,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):(b=typeof globalThis<"u"?globalThis:b||self,c(b.tres={},b.Vue,b.Three,b.VueUseCore))})(this,function(b,c,m,M){"use strict";var zt=Object.defineProperty;var Gt=(b,c,m)=>c in b?zt(b,c,{enumerable:!0,configurable:!0,writable:!0,value:m}):b[c]=m;var le=(b,c,m)=>(Gt(b,typeof c!="symbol"?c+"":c,m),m);function Fe(e){const o=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const n in e)if(n!=="default"){const r=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(o,n,r.get?r:{enumerable:!0,get:()=>e[n]})}}return o.default=e,Object.freeze(o)}const ue=Fe(m),Ne={name:"@tresjs/core",type:"module",version:"4.0.0-rc.0",packageManager:"pnpm@8.15.6",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",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"},"./*":"./*"},main:"./dist/tres.js",module:"./dist/tres.js",types:"./dist/index.d.ts",files:["*.d.ts","dist"],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 .","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"},peerDependencies:{three:">=0.133",vue:">=3.4"},dependencies:{"@alvarosabu/utils":"^3.2.0","@vue/devtools-api":"^6.6.1","@vueuse/core":"^10.9.0"},devDependencies:{"@release-it/conventional-changelog":"^8.0.1","@stackblitz/sdk":"^1.9.0","@tresjs/cientos":"3.8.0","@tresjs/eslint-config":"^1.0.0","@types/three":"^0.163.0","@typescript-eslint/eslint-plugin":"^7.7.1","@typescript-eslint/parser":"^7.7.1","@vitejs/plugin-vue":"^5.0.4","@vitest/coverage-c8":"^0.33.0","@vitest/ui":"^1.5.0","@vue/test-utils":"^2.4.5",eslint:"^9.1.1","eslint-plugin-vue":"^9.25.0",esno:"^4.7.0",gsap:"^3.12.5",husky:"^9.0.11",jsdom:"^24.0.0",kolorist:"^1.8.0",ohmyfetch:"^0.4.21",pathe:"^1.1.2","release-it":"^17.2.0","rollup-plugin-analyzer":"^4.0.0","rollup-plugin-copy":"^3.5.0","rollup-plugin-visualizer":"^5.12.0",three:"^0.163.0",unocss:"^0.59.4",unplugin:"^1.10.1","unplugin-vue-components":"^0.26.0",vite:"^5.2.10","vite-plugin-banner":"^0.7.1","vite-plugin-dts":"3.9.0","vite-plugin-inspect":"^0.8.4","vite-plugin-require-transform":"^1.0.21","vite-svg-loader":"^5.1.0",vitepress:"1.1.3",vitest:"^1.5.0",vue:"^3.4.24","vue-demi":"^0.14.7"}},ce=({sizes:e})=>{const o=c.ref([]),n=c.computed(()=>o.value[0]),r=t=>{const s=t instanceof m.Camera?t:o.value.find(f=>f.uuid===t);if(!s)return;const l=o.value.filter(({uuid:f})=>f!==s.uuid);o.value=[s,...l]},i=(t,s=!1)=>{o.value.some(({uuid:l})=>l===t.uuid)||(s?r(t):o.value.push(t))},a=t=>{o.value=o.value.filter(({uuid:s})=>s!==t.uuid)};return c.watchEffect(()=>{e.aspectRatio.value&&o.value.forEach(t=>{!t.manual&&(t instanceof m.PerspectiveCamera||ze(t))&&(t instanceof m.PerspectiveCamera?t.aspect=e.aspectRatio.value:(t.left=e.width.value*-.5,t.right=e.width.value*.5,t.top=e.height.value*.5,t.bottom=e.height.value*-.5),t.updateProjectionMatrix())})}),c.onUnmounted(()=>{o.value=[]}),{camera:n,cameras:o,registerCamera:i,deregisterCamera:a,setCameraActive:r}};function ze(e){return e.hasOwnProperty("isOrthographicCamera")&&e.isOrthographicCamera}const fe=M.createEventHook(),de=M.createEventHook(),oe=M.createEventHook(),F=new m.Clock;let R=0,q=0;const{pause:Ge,resume:Re,isActive:qe}=M.useRafFn(()=>{fe.trigger({delta:R,elapsed:q,clock:F}),de.trigger({delta:R,elapsed:q,clock:F}),oe.trigger({delta:R,elapsed:q,clock:F})},{immediate:!1});oe.on(()=>{R=F.getDelta(),q=F.getElapsedTime()});const N=()=>({onBeforeLoop:fe.on,onLoop:de.on,onAfterLoop:oe.on,pause:Ge,resume:Re,isActive:qe}),Ye=!0,Y="[TresJS ▲ ■ ●] ";function B(){function e(...r){typeof r[0]=="string"?r[0]=Y+r[0]:r.unshift(Y),console.error(...r)}function o(...r){typeof r[0]=="string"?r[0]=Y+r[0]:r.unshift(Y),console.warn(...r)}function n(r,i){}return{logError:e,logWarning:o,logMessage:n}}function He(e){return typeof e=="number"?[e,e,e]:e instanceof m.Vector3?[e.x,e.y,e.z]:e}function pe(e){return e instanceof m.Color?e:Array.isArray(e)?new m.Color(...e):new m.Color(e)}class Qe extends ue.Mesh{constructor(...n){super(...n);le(this,"type","HightlightMesh");le(this,"createTime");this.createTime=Date.now()}onBeforeRender(){const r=(Date.now()-this.createTime)/1e3,t=1+.07*Math.sin(2.5*r);this.scale.set(t,t,t)}}const me=(e,o)=>{for(const n of Object.keys(o))o[n]instanceof Object&&Object.assign(o[n],me(e[n],o[n]));return Object.assign(e||{},o),e},Je=Ze("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 ge(e){return e&&e.nodeType===1}function H(e){return e.replace(/-([a-z])/g,(o,n)=>n.toUpperCase())}const Ke=/\B([A-Z])/g;function Xe(e){return e.replace(Ke,"-$1").toLowerCase()}function Ze(e,o){const n=Object.create(null),r=e.split(",");for(let i=0;i<r.length;i++)n[r[i]]=!0;return o?i=>!!n[i.toLowerCase()]:i=>!!n[i]}const et=(e,o)=>{const n=new Set,r=[];for(const i of e){const a=o(i);n.has(a)||(n.add(a),r.push(i))}return r},he=(e,o)=>{if(!o)return;const n=Array.isArray(o)?o:o.match(/([^[.\]])+/g);return n==null?void 0:n.reduce((r,i)=>r&&r[i],e)},tt=(e,o,n)=>{const r=Array.isArray(o)?o:o.match(/([^[.\]])+/g);r&&r.reduce((i,a,t)=>(i[a]===void 0&&(i[a]={}),t===r.length-1&&(i[a]=n),i[a]),e)};function ve(e,o){if(ge(e)&&ge(o)){const i=e.attributes,a=o.attributes;return i.length!==a.length?!1:Array.from(i).every(({name:t,value:s})=>o.getAttribute(t)===s)}if(e===o)return!0;if(e===null||typeof e!="object"||o===null||typeof o!="object")return!1;const n=Object.keys(e),r=Object.keys(o);if(n.length!==r.length)return!1;for(const i of n)if(!r.includes(i)||!ve(e[i],o[i]))return!1;return!0}function nt(e,o){if(!Array.isArray(e)||!Array.isArray(o)||e.length!==o.length)return!1;for(let n=0;n<e.length;n++)if(!ve(e[n],o[n]))return!1;return!0}const ot=Array.isArray;function rt(e,o,n,r){const i=l=>{if(l.uuid===o)return l;for(const f of l.children){const P=i(f);if(P)return P}},a=i(e);if(!a){console.warn("Object with UUID not found in the scene.");return}let t=a;for(let l=0;l<n.length-1;l++)if(t[n[l]]!==void 0)t=t[n[l]];else{console.warn(`Property path is not valid: ${n.join(".")}`);return}const s=n[n.length-1];t[s]!==void 0?t[s]=r:console.warn(`Property path is not valid: ${n.join(".")}`)}function st(e){const o=new m.MeshBasicMaterial({color:11003607,transparent:!0,opacity:.2,depthTest:!1,side:m.DoubleSide});return new Qe(e.geometry.clone(),o)}function ye(e){var n;let o=e.value;return e.value&&((n=e.value)!=null&&n.isMesh)&&(o=e.value.position),Array.isArray(e.value)&&(o=new m.Vector3(...o)),o}function it(e){return"map"in e}function we(e){it(e)&&e.map&&e.map.dispose(),e.dispose()}function Q(e){var n,r;if(e.parent&&((n=e.removeFromParent)==null||n.call(e)),delete e.__tres,[...e.children].forEach(i=>Q(i)),!(e instanceof m.Scene)){const i=e;i.geometry&&(i.geometry.dispose(),delete i.geometry),Array.isArray(i.material)?(i.material.forEach(a=>we(a)),delete i.material):i.material&&(we(i.material),delete i.material),(r=e.dispose)==null||r.call(e)}}const at=Number.parseInt(m.REVISION.replace("dev","")),J={realistic:{shadows:!0,physicallyCorrectLights:!0,outputColorSpace:m.SRGBColorSpace,toneMapping:m.ACESFilmicToneMapping,toneMappingExposure:3,shadowMap:{enabled:!0,type:m.PCFSoftShadowMap}},flat:{toneMapping:m.NoToneMapping,toneMappingExposure:1}};function be({scene:e,canvas:o,options:n,disableRender:r,emit:i,contextParts:{sizes:a,camera:t,render:s,invalidate:l,advance:f}}){const P=c.computed(()=>({alpha:M.toValue(n.alpha)??!0,depth:M.toValue(n.depth),canvas:M.unrefElement(o),context:M.toValue(n.context),stencil:M.toValue(n.stencil),antialias:M.toValue(n.antialias)??!0,precision:M.toValue(n.precision),powerPreference:M.toValue(n.powerPreference),premultipliedAlpha:M.toValue(n.premultipliedAlpha),preserveDrawingBuffer:M.toValue(n.preserveDrawingBuffer),logarithmicDepthBuffer:M.toValue(n.logarithmicDepthBuffer),failIfMajorPerformanceCaveat:M.toValue(n.failIfMajorPerformanceCaveat)})),u=c.shallowRef(new m.WebGLRenderer(P.value));function g(){n.renderMode==="on-demand"&&l()}c.watch(P,()=>{u.value.dispose(),u.value=new m.WebGLRenderer(P.value),g()}),c.watch([a.width,a.height],()=>{u.value.setSize(a.width.value,a.height.value),g()},{immediate:!0}),c.watch(()=>n.clearColor,g);const{pixelRatio:C}=M.useDevicePixelRatio();c.watch(C,()=>{u.value.setPixelRatio(C.value)});const{logError:S}=B(),{resume:h,onLoop:O}=N();O(()=>{t.value&&!M.toValue(r)&&s.frames.value>0&&(u.value.render(e,t.value),i("render",u.value)),s.priority.value=0,M.toValue(n.renderMode)==="always"?s.frames.value=1:s.frames.value=Math.max(0,s.frames.value-1)}),h();const p=(()=>{const L=new m.WebGLRenderer,v={shadowMap:{enabled:L.shadowMap.enabled,type:L.shadowMap.type},toneMapping:L.toneMapping,toneMappingExposure:L.toneMappingExposure,outputColorSpace:L.outputColorSpace};return L.dispose(),v})(),w=M.toValue(n.renderMode);return w==="on-demand"&&l(),w==="manual"&&setTimeout(()=>{f()},1),c.watchEffect(()=>{const L=M.toValue(n.preset);L&&(L in J||S(`Renderer Preset must be one of these: ${Object.keys(J).join(", ")}`),me(u.value,J[L])),w==="always"&&(s.frames.value=Math.max(1,s.frames.value));const v=(x,D)=>{const j=M.toValue(x),T=()=>{if(L)return he(J[L],D)};if(j!==void 0)return j;const E=T();return E!==void 0?E:he(p,D)},k=(x,D)=>tt(u.value,D,v(x,D));k(n.shadows,"shadowMap.enabled"),k(n.toneMapping??m.ACESFilmicToneMapping,"toneMapping"),k(n.shadowMapType,"shadowMap.type"),at<150&&k(!n.useLegacyLights,"physicallyCorrectLights"),k(n.outputColorSpace,"outputColorSpace"),k(n.toneMappingExposure,"toneMappingExposure");const _=v(n.clearColor,"clearColor");_&&u.value.setClearColor(_?pe(_):new m.Color(0))}),c.onUnmounted(()=>{u.value.dispose(),u.value.forceContextLoss()}),{renderer:u}}const re=e=>typeof e=="function",lt=e=>!!e&&e.constructor===Array;function Me(e){const o={nodes:{},materials:{}};return e&&e.traverse(n=>{n.name&&(o.nodes[n.name]=n),n.material&&!o.materials[n.material.name]&&(o.materials[n.material.name]=n.material)}),o}async function ut(e,o,n,r,i){const{logError:a}=B(),t=new e;i&&i(t),n&&n(t);const l=(Array.isArray(o)?o:[o]).map(f=>new Promise((P,u)=>{t.load(f,g=>{g.scene&&Object.assign(g,Me(g.scene)),P(g)},r,g=>u(a("[useLoader] - Failed to load resource",g)))}));return lt(o)?await Promise.all(l):await l[0]}async function ct(e,o){const n=new m.TextureLoader(o),r=i=>new Promise((a,t)=>{n.load(i,s=>a(s),()=>null,()=>{t(new Error("[useTextures] - Failed to load texture"))})});if(ot(e)){const i=await Promise.all(e.map(a=>r(a)));return e.length>1?i:i[0]}else{const{map:i,displacementMap:a,normalMap:t,roughnessMap:s,metalnessMap:l,aoMap:f,alphaMap:P,matcap:u}=e;return{map:i?await r(i):null,displacementMap:a?await r(a):null,normalMap:t?await r(t):null,roughnessMap:s?await r(s):null,metalnessMap:l?await r(l):null,aoMap:f?await r(f):null,alphaMap:P?await r(P):null,matcap:u?await r(u):null}}}const se=(e,o)=>{const n=c.computed(()=>o.renderer.value.domElement),r=c.shallowRef([]),{x:i,y:a}=M.usePointer({target:n});let t=0;const{width:s,height:l,top:f,left:P}=M.useElementBounding(n),u=({x:d,y:A})=>{if(n.value)return{x:(d-P.value)/s.value*2-1,y:-((A-f.value)/l.value)*2+1}},g=({x:d,y:A})=>{if(o.camera.value)return o.raycaster.value.setFromCamera(new m.Vector2(d,A),o.camera.value),r.value=o.raycaster.value.intersectObjects(e.value,!0),r.value},C=d=>{const A=u({x:(d==null?void 0:d.clientX)??i.value,y:(d==null?void 0:d.clientY)??a.value});return A?g(A)||[]:[]},S=M.createEventHook(),h=M.createEventHook(),O=M.createEventHook(),y=M.createEventHook(),p=M.createEventHook(),w=M.createEventHook(),L=M.createEventHook(),v=M.createEventHook();function k(d){const A={};for(const U in d)typeof U!="function"&&(A[U]=d[U]);return A}const _=(d,A)=>{var $e,Ue,We;const U=k(A),ne=new m.Vector3(A==null?void 0:A.clientX,A==null?void 0:A.clientY,0).unproject(($e=o.camera)==null?void 0:$e.value);d.trigger({...U,intersections:r.value,unprojectedPoint:ne,ray:(Ue=o.raycaster)==null?void 0:Ue.value.ray,camera:(We=o.camera)==null?void 0:We.value,sourceEvent:A,delta:t,stopPropagating:!1})};let x;const D=d=>{C(d),_(O,d),x=d},j=()=>{x&&D(x)};let T,E,V;const ee=d=>{var A;T=(A=r.value[0])==null?void 0:A.object,t=0,E=new m.Vector2((d==null?void 0:d.clientX)??i.value,(d==null?void 0:d.clientY)??a.value),_(p,d)};let G,te=!1;const Be=d=>{var A,U,ne;d instanceof PointerEvent&&(r.value.length===0&&_(w,d),T===((A=r.value[0])==null?void 0:A.object)&&(V=new m.Vector2((d==null?void 0:d.clientX)??i.value,(d==null?void 0:d.clientY)??a.value),t=E==null?void 0:E.distanceTo(V),d.button===0?(_(S,d),G===((U=r.value[0])==null?void 0:U.object)?te=!0:(G=(ne=r.value[0])==null?void 0:ne.object,te=!1)):d.button===2&&_(L,d)),_(y,d))},Ee=d=>{te&&(_(h,d),G=void 0,te=!1)},Ie=d=>_(O,d),Ve=d=>_(v,d);return n.value.addEventListener("pointerup",Be),n.value.addEventListener("pointerdown",ee),n.value.addEventListener("pointermove",D),n.value.addEventListener("pointerleave",Ie),n.value.addEventListener("dblclick",Ee),n.value.addEventListener("wheel",Ve),c.onUnmounted(()=>{n!=null&&n.value&&(n.value.removeEventListener("pointerup",Be),n.value.removeEventListener("pointerdown",ee),n.value.removeEventListener("pointermove",D),n.value.removeEventListener("pointerleave",Ie),n.value.removeEventListener("dblclick",Ee),n.value.removeEventListener("wheel",Ve))}),{intersects:r,onClick:d=>S.on(d).off,onDblClick:d=>h.on(d).off,onContextMenu:d=>L.on(d).off,onPointerMove:d=>O.on(d).off,onPointerUp:d=>y.on(d).off,onPointerDown:d=>p.on(d).off,onPointerMissed:d=>w.on(d).off,onWheel:d=>v.on(d).off,forceUpdate:j}};function ft(){const{logWarning:e}=B();function o(a,t,s){let l=null;return a.traverse(f=>{f[t]===s&&(l=f)}),l||e(`Child with ${t} '${s}' not found.`),l}function n(a,t,s){const l=[];return a.traverse(f=>{f[t].includes(s)&&l.push(f)}),l.length||e(`Children with ${t} '${s}' not found.`),l}function r(a,t){return o(a,"name",t)}function i(a,t){return n(a,"name",t)}return{seek:o,seekByName:r,seekAll:n,seekAllByName:i}}const dt=e=>{const o=c.reactive({click:new Map,pointerMove:new Map,pointerEnter:new Map,pointerLeave:new Map}),n=c.ref(new Set),r=u=>{n.value.add(u)},i=u=>{n.value.delete(u)},a=u=>{Object.values(o).forEach(g=>g.delete(u)),i(u)},t=u=>{const{onClick:g,onPointerMove:C,onPointerEnter:S,onPointerLeave:h}=u;g&&o.click.set(u,g),C&&o.pointerMove.set(u,C),S&&o.pointerEnter.set(u,S),h&&o.pointerLeave.set(u,h)},s=c.computed(()=>et([...Array.from(n.value),...Object.values(o).map(u=>Array.from(u.keys())).flat()],({uuid:u})=>u));e.registerObjectAtPointerEventHandler=t,e.deregisterObjectAtPointerEventHandler=a,e.registerBlockingObjectAtPointerEventHandler=r,e.deregisterBlockingObjectAtPointerEventHandler=i;const{onClick:l,onPointerMove:f}=se(s,e);l(({intersects:u,event:g})=>{var C;u.length&&((C=o.click.get(u[0].object))==null||C(u[0],g))});let P;return f(({intersects:u,event:g})=>{var y,p,w,L;const C=(y=u==null?void 0:u[0])==null?void 0:y.object,{pointerLeave:S,pointerEnter:h,pointerMove:O}=o;P&&P!==C&&((p=S.get(P))==null||p(P,g)),C&&(P!==C&&((w=h.get(C))==null||w(u[0],g)),(L=O.get(C))==null||L(u[0],g)),P=C||null}),{registerObject:t,deregisterObject:a,registerBlockingObject:r,deregisterBlockingObject:i}};function ie(e){let o=0;return e.traverse(n=>{if(n.isMesh&&n.geometry){const r=n.geometry,i=r.attributes.position.count*3*Float32Array.BYTES_PER_ELEMENT,a=r.index?r.index.count*Uint32Array.BYTES_PER_ELEMENT:0,t=r.attributes.normal?r.attributes.normal.count*3*Float32Array.BYTES_PER_ELEMENT:0,s=r.attributes.uv?r.attributes.uv.count*2*Float32Array.BYTES_PER_ELEMENT:0,l=i+a+t+s;o+=l}}),o}function pt(e){return(e/1024).toFixed(2)}const K=c.ref({}),X=e=>Object.assign(K.value,e);function mt(e,o,n=10){const r=M.toValue(e)?M.useWindowSize():M.useElementSize(c.computed(()=>M.toValue(o).parentElement)),i=c.readonly(M.refDebounced(r.width,n)),a=c.readonly(M.refDebounced(r.height,n)),t=c.computed(()=>i.value/a.value);return{height:a,width:i,aspectRatio:t}}function Pe({scene:e,canvas:o,windowSize:n,disableRender:r,rendererOptions:i,emit:a}){const{logWarning:t}=B(),s=c.shallowRef(e),l=mt(n,o),{camera:f,cameras:P,registerCamera:u,deregisterCamera:g,setCameraActive:C}=ce({sizes:l,scene:e}),S={mode:c.ref(i.renderMode||"always"),priority:c.ref(0),frames:c.ref(0),maxFrames:60,canBeInvalidated:c.computed(()=>S.mode.value==="on-demand"&&S.frames.value===0)};function h(V=1){i.renderMode==="on-demand"?S.frames.value=Math.min(S.maxFrames,S.frames.value+V):t("`invalidate` can only be used when `renderMode` is set to `on-demand`")}function O(){i.renderMode==="manual"?S.frames.value=1:t("`advance` can only be used when `renderMode` is set to `manual`")}const{renderer:y}=be({scene:e,canvas:o,options:i,emit:a,contextParts:{sizes:l,camera:f,render:S,invalidate:h,advance:O},disableRender:r}),p={sizes:l,scene:s,camera:f,cameras:c.readonly(P),renderer:y,raycaster:c.shallowRef(new m.Raycaster),controls:c.ref(null),perf:{maxFrames:160,fps:{value:0,accumulator:[]},memory:{currentMem:0,allocatedMem:0,accumulator:[]}},render:S,advance:O,extend:X,invalidate:h,registerCamera:u,setCameraActive:C,deregisterCamera:g};c.provide("useTres",p),p.scene.value.__tres={root:p};const w=100,L=M.useFps({every:w}),{isSupported:v,memory:k}=M.useMemory({interval:w}),_=160;let x=performance.now();const D=({timestamp:V})=>{p.scene.value&&(p.perf.memory.allocatedMem=ie(p.scene.value)),V-x>=w&&(x=V,p.perf.fps.accumulator.push(L.value),p.perf.fps.accumulator.length>_&&p.perf.fps.accumulator.shift(),p.perf.fps.value=L.value,v.value&&k.value&&(p.perf.memory.accumulator.push(k.value.usedJSHeapSize/1024/1024),p.perf.memory.accumulator.length>_&&p.perf.memory.accumulator.shift(),p.perf.memory.currentMem=p.perf.memory.accumulator.reduce((ee,G)=>ee+G,0)/p.perf.memory.accumulator.length))};let j=0;const T=1,{pause:E}=M.useRafFn(({delta:V})=>{window.__TRES__DEVTOOLS__&&(D({timestamp:performance.now()}),j+=V,j>=T&&(window.__TRES__DEVTOOLS__.cb(p),j=0))},{immediate:!0});return c.onUnmounted(()=>{E()}),p}function Ce(){const e=c.inject("useTres");if(!e)throw new Error("useTresContext must be used together with useTresContextProvider");return e}const gt=Ce;function _e(e,o,n){const r=c.shallowRef(),i=c.shallowRef();e&&(r.value=e),o&&(i.value=o);const a=c.computed(()=>r.value?r.value.children:[]);function t(v,k){if(Array.isArray(v))for(const _ of v)_(k);typeof v=="function"&&v(k)}function s(v,k){const _=[],x=()=>k.stopPropagating=!0;k.stopPropagation=x;for(const D of k==null?void 0:k.intersections){if(k.stopPropagating)return;k={...k,...D};const{object:j}=D;k.eventObject=j,t(j[v],k),_.push(j);let T=j.parent;for(;T!==null&&!k.stopPropagating&&!_.includes(T);)k.eventObject=T,t(T[v],k),_.push(T),T=T.parent;const E=Xe(v.slice(2));n(E,{intersection:D,event:k})}}const{onClick:l,onDblClick:f,onContextMenu:P,onPointerMove:u,onPointerDown:g,onPointerUp:C,onPointerMissed:S,onWheel:h,forceUpdate:O}=se(a,o);C(v=>s("onPointerUp",v)),g(v=>s("onPointerDown",v)),l(v=>s("onClick",v)),f(v=>s("onDoubleClick",v)),P(v=>s("onContextMenu",v)),h(v=>s("onWheel",v));let y=[];u(v=>{const k=v.intersections.map(({object:_})=>_);y.forEach(_=>{k.includes(_)||(s("onPointerLeave",v),s("onPointerOut",v))}),v.intersections.forEach(({object:_})=>{y.includes(_)||(s("onPointerEnter",v),s("onPointerOver",v))}),s("onPointerMove",v),y=k});const p=[];S(v=>{const k=()=>v.stopPropagating=!0;v.stopPropagation=k,p.forEach(_=>{v.stopPropagating||(v.eventObject=_,t(_.onPointerMissed,v))}),n("pointer-missed",{event:v})});function w(v){p.push(v)}function L(v){const k=p.indexOf(v);k>-1&&p.splice(k,1)}return o.eventManager={forceUpdate:O,registerPointerMissedObject:w,deregisterPointerMissedObject:L},{forceUpdate:O,registerPointerMissedObject:w,deregisterPointerMissedObject:L}}function dn(e){}const{logError:ke}=B(),ht=["onClick","onContextMenu","onPointerMove","onPointerEnter","onPointerLeave","onPointerOver","onPointerOut","onDoubleClick","onPointerDown","onPointerUp","onPointerCancel","onPointerMissed","onLostPointerCapture","onWheel"];function Se(e){var n;const o=(n=e==null?void 0:e.__tres)==null?void 0:n.root;o&&o.render&&o.render.canBeInvalidated.value&&o.invalidate()}const vt=()=>{let e=null;function o(t,s,l,f){if(f||(f={}),f.args||(f.args=[]),t==="template"||Je(t))return null;let P=t.replace("Tres",""),u;if(t==="primitive"){(f==null?void 0:f.object)===void 0&&ke("Tres primitives need a prop 'object'");const g=f.object;P=g.type,u=Object.assign(g.clone(),{type:P})}else{const g=K.value[P];g||ke(`${P} is not defined on the THREE namespace. Use extend to add it to the catalog.`),u=new g(...f.args)}return u?(u.isCamera&&(f!=null&&f.position||u.position.set(3,3,3),f!=null&&f.lookAt||u.lookAt(0,0,0)),(f==null?void 0:f.attach)===void 0&&(u.isMaterial?u.attach="material":u.isBufferGeometry&&(u.attach="geometry")),u.__tres={...u.__tres,type:P,memoizedProps:f,eventCount:0,disposable:!0,primitive:t==="primitive"},u.isObject3D&&u.__tres&&(f!=null&&f.material||f!=null&&f.geometry)&&(u.__tres.disposable=!1),u):null}function n(t,s){var f,P,u,g,C;if(!t)return;s&&s.isScene&&(e=s),e&&t.__tres&&(t.__tres.root=e.__tres.root);const l=s||e;if(t!=null&&t.isObject3D){const{registerCamera:S}=(f=t==null?void 0:t.__tres)==null?void 0:f.root;t!=null&&t.isCamera&&S(t),t.onPointerMissed&&((P=t==null?void 0:t.__tres)!=null&&P.root)&&((C=(g=(u=t==null?void 0:t.__tres)==null?void 0:u.root)==null?void 0:g.eventManager)==null||C.registerPointerMissedObject(t))}t!=null&&t.isObject3D&&(l!=null&&l.isObject3D)?(l.add(t),t.dispatchEvent({type:"added"})):t!=null&&t.isFog?l.fog=t:typeof(t==null?void 0:t.attach)=="string"&&(t.__previousAttach=t[l==null?void 0:l.attach],l&&(l[t.attach]=t))}function r(t){var l,f,P,u;if(!t)return;const s=t.__tres;if(t.parent=t.parent||e,t.isObject3D){const g=S=>{var O,y;const h=(y=(O=t==null?void 0:t.__tres)==null?void 0:O.root)==null?void 0:y.deregisterCamera;S.isCamera&&(h==null||h(S))};(l=t.removeFromParent)==null||l.call(t),t.traverse(S=>{var h,O;g(S),S.onPointerMissed&&((O=(h=s==null?void 0:s.root)==null?void 0:h.eventManager)==null||O.deregisterPointerMissedObject(S))}),g(t),Se(t),!((f=t.__tres)==null?void 0:f.primitive)&&((P=t.__tres)!=null&&P.disposable)&&Q(t),(u=t.dispose)==null||u.call(t)}}function i(t,s,l,f){var P,u;if(t){let g=t,C=s;if((P=t==null?void 0:t.__tres)!=null&&P.primitive&&C==="object"&&l!==null){const y=o("primitive",void 0,void 0,{object:f});for(const p in y){if(p==="uuid")continue;const w=t[p],L=y[p];!(w!=null&&w.set)&&!re(w)?t[p]=L:w.constructor===L.constructor&&(w!=null&&w.copy)?w==null||w.copy(L):Array.isArray(L)?w.set(...L):!w.isColor&&w.setScalar?w.setScalar(L):w.set(L)}y!=null&&y.__tres&&(y.__tres.root=e==null?void 0:e.__tres.root),y!=null&&y.isGroup?(t.geometry=void 0,t.material=void 0):delete t.isGroup}if(t!=null&&t.isObject3D&&C==="blocks-pointer-events"){f||f===""?t[C]=f:delete t[C];return}let S=H(C),h=g==null?void 0:g[S];if(C==="args"){const y=t,p=l??[],w=f??[],L=((u=t==null?void 0:t.__tres)==null?void 0:u.type)||t.type;L&&p.length&&!nt(p,w)&&(g=Object.assign(y,new K.value[L](...f)));return}if(g.type==="BufferGeometry"){if(C==="args")return;g.setAttribute(H(C),new m.BufferAttribute(...f));return}if(C.includes("-")&&h===void 0){const y=C.split("-");h=y.reduce((p,w)=>p[H(w)],g),C=y.pop(),S=C,h!=null&&h.set||(g=y.reduce((p,w)=>p[H(w)],g))}let O=f;if(O===""&&(O=!0),re(h)){ht.includes(s)||(Array.isArray(O)?t[S](...O):t[S](O));return}!(h!=null&&h.set)&&!re(h)?g[S]=O:h.constructor===O.constructor&&(h!=null&&h.copy)?h==null||h.copy(O):Array.isArray(O)?h.set(...O):!h.isColor&&h.setScalar?h.setScalar(O):h.set(O),Se(t)}}function a(t){return(t==null?void 0:t.parent)||null}return{insert:n,remove:r,createElement:o,patchProp:i,parentNode:a,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 yt(){return Le().__VUE_DEVTOOLS_GLOBAL_HOOK__}function Le(){return typeof navigator<"u"&&typeof window<"u"?window:typeof globalThis<"u"?globalThis:{}}const wt=typeof Proxy=="function",bt="devtools-plugin:setup",Mt="plugin:settings:set";let W,ae;function Pt(){var e;return W!==void 0||(typeof window<"u"&&window.performance?(W=!0,ae=window.performance):typeof globalThis<"u"&&(!((e=globalThis.perf_hooks)===null||e===void 0)&&e.performance)?(W=!0,ae=globalThis.perf_hooks.performance):W=!1),W}function Ct(){return Pt()?ae.now():Date.now()}class _t{constructor(o,n){this.target=null,this.targetQueue=[],this.onQueue=[],this.plugin=o,this.hook=n;const r={};if(o.settings)for(const t in o.settings){const s=o.settings[t];r[t]=s.defaultValue}const i=`__vue-devtools-plugin-settings__${o.id}`;let a=Object.assign({},r);try{const t=localStorage.getItem(i),s=JSON.parse(t);Object.assign(a,s)}catch{}this.fallbacks={getSettings(){return a},setSettings(t){try{localStorage.setItem(i,JSON.stringify(t))}catch{}a=t},now(){return Ct()}},n&&n.on(Mt,(t,s)=>{t===this.plugin.id&&this.fallbacks.setSettings(s)}),this.proxiedOn=new Proxy({},{get:(t,s)=>this.target?this.target.on[s]:(...l)=>{this.onQueue.push({method:s,args:l})}}),this.proxiedTarget=new Proxy({},{get:(t,s)=>this.target?this.target[s]:s==="on"?this.proxiedOn:Object.keys(this.fallbacks).includes(s)?(...l)=>(this.targetQueue.push({method:s,args:l,resolve:()=>{}}),this.fallbacks[s](...l)):(...l)=>new Promise(f=>{this.targetQueue.push({method:s,args:l,resolve:f})})})}async setRealTarget(o){this.target=o;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 kt(e,o){const n=e,r=Le(),i=yt(),a=wt&&n.enableEarlyProxy;if(i&&(r.__VUE_DEVTOOLS_PLUGIN_API_AVAILABLE__||!a))i.emit(bt,e,o);else{const t=a?new _t(n,i):null;(r.__VUE_DEVTOOLS_PLUGINS__=r.__VUE_DEVTOOLS_PLUGINS__||[]).push({pluginDescriptor:n,setupFn:o,proxy:t}),t&&o(t.proxiedTarget)}}function St(e,o){const n=`▲ ■ ●${e}`;typeof Oe=="function"?Oe(n,o):o==="error"?console.error(n):o==="warn"?console.warn(n):console.log(n)}function Oe(e,o){throw new Error(e+o)}const Ae=e=>{const o={id:e.uuid,label:e.type,children:[],tags:[]};e.name!==""&&o.tags.push({label:e.name,textColor:5750629,backgroundColor:15793395});const n=ie(e);return n>0&&o.tags.push({label:`${pt(n)} KB`,textColor:15707189,backgroundColor:16775644,tooltip:"Memory usage"}),e.type.includes("Light")&&(o.tags.push({label:`${e.intensity}`,textColor:9738662,backgroundColor:16316922,tooltip:"Intensity"}),o.tags.push({label:`#${e.color.getHexString()}`,textColor:9738662,backgroundColor:16316922,tooltip:"Color"})),e.type.includes("Camera")&&(o.tags.push({label:`${e.fov}°`,textColor:9738662,backgroundColor:16316922,tooltip:"Field of view"}),o.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"})),o};function xe(e,o,n=""){e.children.forEach(r=>{if(r.type==="HightlightMesh"||n&&!r.type.includes(n)&&!r.name.includes(n))return;const i=Ae(r);o.children.push(i),xe(r,i,n)})}const Lt=[],z="tres:inspector",Ot=c.reactive({sceneGraph:null});function At(e,o){kt({id:"dev.esm.tres",label:"TresJS 🪐",logo:"https://raw.githubusercontent.com/Tresjs/tres/main/public/favicon.svg",packageName:"tresjs",homepage:"https://tresjs.org",componentStateTypes:Lt,app:e},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:z,label:"TresJS 🪐",icon:"account_tree",treeFilterPlaceholder:"Search instances"}),setInterval(()=>{n.sendInspectorTree(z)},1e3),setInterval(()=>{n.notifyComponentUpdate()},5e3),n.on.getInspectorTree(a=>{if(a.inspectorId===z){const t=Ae(o.scene.value);xe(o.scene.value,t,a.filter),Ot.sceneGraph=t,a.rootNodes=[t]}});let r=null,i=null;n.on.getInspectorState(a=>{var t;if(a.inspectorId===z){const[s]=o.scene.value.getObjectsByProperty("uuid",a.nodeId);if(!s)return;if(i&&r&&r.parent&&i.remove(r),s.isMesh){const l=st(s);s.add(l),r=l,i=s}a.state={object:[{key:"uuid",editable:!0,value:s.uuid},{key:"name",editable:!0,value:s.name},{key:"type",editable:!0,value:s.type},{key:"position",editable:!0,value:s.position},{key:"rotation",editable:!0,value:s.rotation},{key:"scale",editable:!0,value:s.scale},{key:"geometry",value:s.geometry},{key:"material",value:s.material},{key:"color",editable:!0,value:s.color},{key:"intensity",editable:!0,value:s.intensity},{key:"castShadow",editable:!0,value:s.castShadow},{key:"receiveShadow",editable:!0,value:s.receiveShadow},{key:"frustumCulled",editable:!0,value:s.frustumCulled},{key:"matrixAutoUpdate",editable:!0,value:s.matrixAutoUpdate},{key:"matrixWorldNeedsUpdate",editable:!0,value:s.matrixWorldNeedsUpdate},{key:"matrixWorld",value:s.matrixWorld},{key:"visible",editable:!0,value:s.visible}]},s.isScene&&(a.state.info={memory:ie(s),objects:s.children.length,calls:o.renderer.value.info.render.calls,triangles:o.renderer.value.info.render.triangles,points:o.renderer.value.info.render.points,lines:o.renderer.value.info.render.lines},a.state.programs=((t=o.renderer.value.info.programs)==null?void 0:t.map(l=>({key:l.name,value:{...l,vertexShader:l.vertexShader,attributes:l.getAttributes(),uniforms:l.getUniforms()}})))||[])}}),n.on.editInspectorState(a=>{a.inspectorId===z&&rt(o.scene.value,a.nodeId,a.path,a.state.value)})})}const xt=["data-scene","data-tres"],De=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","click","double-click","context-menu","pointer-move","pointer-up","pointer-down","pointer-enter","pointer-leave","pointer-over","pointer-out","pointer-missed","wheel"],setup(e,{expose:o,emit:n}){var O;const r=e,i=n,a=c.useSlots(),{logWarning:t}=B(),s=c.ref(),l=c.shallowRef(new m.Scene),{resume:f}=N(),P=(O=c.getCurrentInstance())==null?void 0:O.appContext.app;X(ue);const u=y=>c.defineComponent({setup(){var w;const p=(w=c.getCurrentInstance())==null?void 0:w.appContext;return p&&(p.app=P),c.provide("useTres",y),c.provide("extend",X),typeof window<"u"&&At(p==null?void 0:p.app,y),()=>c.h(c.Fragment,null,a!=null&&a.default?a.default():[])}}),g=y=>{const p=u(y),{render:w}=c.createRenderer(vt());w(c.h(p),l.value)},C=(y,p=!1)=>{Q(y.scene.value),p&&(y.renderer.value.dispose(),y.renderer.value.renderLists.dispose(),y.renderer.value.forceContextLoss()),l.value.__tres={root:y},g(y),f()},S=c.computed(()=>r.disableRender),h=c.shallowRef(null);return o({context:h,dispose:()=>C(h.value,!0)}),c.onMounted(()=>{const y=s;h.value=Pe({scene:l.value,canvas:y,windowSize:r.windowSize??!1,disableRender:S.value??!1,rendererOptions:r,emit:i}),_e(l.value,h.value,i);const{registerCamera:p,camera:w,cameras:L,deregisterCamera:v}=h.value;g(h.value);const k=()=>{const _=new m.PerspectiveCamera(45,window.innerWidth/window.innerHeight,.1,1e3);_.position.set(3,3,3),_.lookAt(0,0,0),p(_);const x=c.watchEffect(()=>{L.value.length>=2&&(_.removeFromParent(),v(_),x==null||x())})};c.watch(()=>r.camera,(_,x)=>{_&&p(_),x&&(x.removeFromParent(),v(x))},{immediate:!0}),w.value||(t("No camera found. Creating a default perspective camera. To have full control over a camera, please add one to the scene."),k())}),c.onUnmounted(()=>{C(h.value)}),(y,p)=>(c.openBlock(),c.createElementBlock("canvas",{ref_key:"canvas",ref:s,"data-scene":l.value.uuid,class:c.normalizeClass(y.$attrs.class),"data-tres":`tresjs ${c.unref(Ne).version}`,style:c.normalizeStyle({display:"block",width:"100%",height:"100%",position:y.windowSize?"fixed":"relative",top:0,left:0,pointerEvents:"auto",touchAction:"none",...y.$attrs.style})},null,14,xt))}}),Dt=["TresCanvas","TresLeches","TresScene"],Tt={template:{compilerOptions:{isCustomElement:e=>e.startsWith("Tres")&&!Dt.includes(e)||e==="primitive"}}},jt={mounted:(e,o)=>{if(o.arg){console.log(`v-log:${o.arg}`,e[o.arg]);return}console.log("v-log",e)}};class Te extends m.Line{constructor(o,n){const r=[1,1,0,-1,1,0,-1,-1,0,1,-1,0,1,1,0],i=new m.BufferGeometry;i.setAttribute("position",new m.Float32BufferAttribute(r,3)),i.computeBoundingSphere();const a=new m.LineBasicMaterial({fog:!1});super(i,a),this.light=o,this.color=n,this.type="RectAreaLightHelper";const t=[1,1,0,-1,1,0,-1,-1,0,1,1,0,-1,-1,0,1,-1,0],s=new m.BufferGeometry;s.setAttribute("position",new m.Float32BufferAttribute(t,3)),s.computeBoundingSphere(),this.add(new m.Mesh(s,new m.MeshBasicMaterial({side:m.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 o=this.material.color,n=Math.max(o.r,o.g,o.b);n>1&&o.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:je}=B();let Z,$;const Bt={DirectionalLight:m.DirectionalLightHelper,PointLight:m.PointLightHelper,SpotLight:m.SpotLightHelper,HemisphereLight:m.HemisphereLightHelper,RectAreaLight:Te},Et={mounted:e=>{if(!e.isLight){je(`${e.type} is not a light`);return}Z=Bt[e.type],e.parent.add(new Z(e,1,e.color.getHex()))},updated:e=>{$=e.parent.children.find(o=>o instanceof Z),!($ instanceof Te)&&$.update()},unmounted:e=>{if(!e.isLight){je(`${e.type} is not a light`);return}$=e.parent.children.find(o=>o instanceof Z),$&&$.dispose&&$.dispose(),e.parent.remove($)}},{logWarning:It}=B(),Vt={updated:(e,o)=>{const n=ye(o);if(!n){It(`v-always-look-at: problem with binding value: ${o.value}`);return}const{onLoop:r}=N();r(()=>{e.lookAt(n)})}},{logWarning:$t}=B();let I=null;const Ut={updated:(e,o)=>{var i;const n=ye(o);if(!n){$t(`v-distance-to: problem with binding value: ${o.value}`);return}I&&(I.dispose(),e.parent.remove(I));const r=n.clone().sub(e.position);r.normalize(),I=new m.ArrowHelper(r,e.position,e.position.distanceTo(n),16776960),e.parent.add(I),console.table([["Distance:",e.position.distanceTo(n)],[`origin: ${e.name||e.type}`,`x:${e.position.x}, y:${e.position.y}, z:${(i=e.position)==null?void 0:i.z}`],[`Destiny: ${e.name||e.type}`,`x:${n.x}, y:${n.y}, z:${n==null?void 0:n.z}`]])},unmounted:e=>{I==null||I.dispose(),e.parent.remove(I)}},{logWarning:Wt}=B(),Ft={mounted:(e,o)=>{if(e.isCamera){Wt(`Rotate the ${e.type} is not a good idea`);return}const n=o.value??.01,r=c.ref(o.modifiers.x||o.arg==="x"?1:0),i=c.ref(o.modifiers.y||o.arg==="y"?1:0),a=c.ref(o.modifiers.z||o.arg==="z"?1:0);r.value+i.value+a.value===0&&(r.value=1,i.value=1);const t=new m.Quaternion().setFromAxisAngle(new m.Vector3(r.value,i.value,a.value).normalize(),n),{onLoop:s}=N();s(()=>{e.applyQuaternion(t)})}},Nt={install(e){e.component("TresCanvas",De)}};b.TresCanvas=De,b.catalogue=K,b.default=Nt,b.dispose=Q,b.extend=X,b.isProd=Ye,b.normalizeColor=pe,b.normalizeVectorFlexibleParam=He,b.templateCompilerOptions=Tt,b.trasverseObjects=Me,b.useCamera=ce,b.useLoader=ut,b.useLogger=B,b.usePointerEventHandler=dt,b.useRaycaster=se,b.useRenderLoop=N,b.useRenderer=be,b.useSeek=ft,b.useTexture=ct,b.useTres=gt,b.useTresContext=Ce,b.useTresContextProvider=Pe,b.useTresEventManager=_e,b.vAlwaysLookAt=Vt,b.vDistanceTo=Ut,b.vLightHelper=Et,b.vLog=jt,b.vRotate=Ft,Object.defineProperties(b,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
8
+ (function(k,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):(k=typeof globalThis<"u"?globalThis:k||self,c(k.tres={},k.Vue,k.Three,k.VueUseCore))})(this,function(k,c,y,S){"use strict";var Nt=Object.defineProperty;var Rt=(k,c,y)=>c in k?Nt(k,c,{enumerable:!0,configurable:!0,writable:!0,value:y}):k[c]=y;var ue=(k,c,y)=>(Rt(k,typeof c!="symbol"?c+"":c,y),y);function Fe(e){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const r in e)if(r!=="default"){const o=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,o.get?o:{enumerable:!0,get:()=>e[r]})}}return t.default=e,Object.freeze(t)}const ce=Fe(y),We={name:"@tresjs/core",type:"module",version:"4.0.0-rc.1",packageManager:"pnpm@8.15.6",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",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"},"./*":"./*"},main:"./dist/tres.js",module:"./dist/tres.js",types:"./dist/index.d.ts",files:["*.d.ts","dist"],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 --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"},peerDependencies:{three:">=0.133",vue:">=3.4"},dependencies:{"@alvarosabu/utils":"^3.2.0","@vue/devtools-api":"^6.6.1","@vueuse/core":"^10.9.0"},devDependencies:{"@release-it/conventional-changelog":"^8.0.1","@stackblitz/sdk":"^1.10.0","@tresjs/cientos":"3.9.0","@tresjs/eslint-config":"^1.0.0","@types/three":"^0.164.0","@typescript-eslint/eslint-plugin":"^7.9.0","@typescript-eslint/parser":"^7.9.0","@vitejs/plugin-vue":"^5.0.4","@vitest/coverage-c8":"^0.33.0","@vitest/coverage-v8":"^1.6.0","@vitest/ui":"^1.6.0","@vue/test-utils":"^2.4.6",eslint:"^9.2.0","eslint-plugin-vue":"^9.26.0",esno:"^4.7.0",gsap:"^3.12.5",husky:"^9.0.11",jsdom:"^24.0.0",kolorist:"^1.8.0",ohmyfetch:"^0.4.21",pathe:"^1.1.2","release-it":"^17.2.1","rollup-plugin-analyzer":"^4.0.0","rollup-plugin-copy":"^3.5.0","rollup-plugin-visualizer":"^5.12.0",three:"^0.164.1",unocss:"^0.60.2",unplugin:"^1.10.1","unplugin-vue-components":"^0.27.0",vite:"^5.2.11","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.1.4",vitest:"^1.6.0",vue:"^3.4.27","vue-demi":"^0.14.7"}},fe=({sizes:e})=>{const t=c.ref([]),r=c.computed(()=>t.value[0]),o=n=>{const s=n instanceof y.Camera?n:t.value.find(l=>l.uuid===n);if(!s)return;const u=t.value.filter(({uuid:l})=>l!==s.uuid);t.value=[s,...u]},i=(n,s=!1)=>{t.value.some(({uuid:u})=>u===n.uuid)||(s?o(n):t.value.push(n))},a=n=>{t.value=t.value.filter(({uuid:s})=>s!==n.uuid)};return c.watchEffect(()=>{e.aspectRatio.value&&t.value.forEach(n=>{!n.manual&&(n instanceof y.PerspectiveCamera||Ne(n))&&(n instanceof y.PerspectiveCamera?n.aspect=e.aspectRatio.value:(n.left=e.width.value*-.5,n.right=e.width.value*.5,n.top=e.height.value*.5,n.bottom=e.height.value*-.5),n.updateProjectionMatrix())})}),c.onUnmounted(()=>{t.value=[]}),{camera:r,cameras:t,registerCamera:i,deregisterCamera:a,setCameraActive:o}};function Ne(e){return e.hasOwnProperty("isOrthographicCamera")&&e.isOrthographicCamera}const de=S.createEventHook(),pe=S.createEventHook(),re=S.createEventHook(),W=new y.Clock;let z=0,G=0;const{pause:Re,resume:ze,isActive:Ge}=S.useRafFn(()=>{de.trigger({delta:z,elapsed:G,clock:W}),pe.trigger({delta:z,elapsed:G,clock:W}),re.trigger({delta:z,elapsed:G,clock:W})},{immediate:!1});re.on(()=>{z=W.getDelta(),G=W.getElapsedTime()});const qe=()=>({onBeforeLoop:de.on,onLoop:pe.on,onAfterLoop:re.on,pause:Re,resume:ze,isActive:Ge}),He=!0,q="[TresJS ▲ ■ ●] ";function T(){function e(...o){typeof o[0]=="string"?o[0]=q+o[0]:o.unshift(q),console.error(...o)}function t(...o){typeof o[0]=="string"?o[0]=q+o[0]:o.unshift(q),console.warn(...o)}function r(o,i){}return{logError:e,logWarning:t,logMessage:r}}function Ye(e){return typeof e=="number"?[e,e,e]:e instanceof y.Vector3?[e.x,e.y,e.z]:e}function me(e){return e instanceof y.Color?e:Array.isArray(e)?new y.Color(...e):new y.Color(e)}class Je extends ce.Mesh{constructor(...r){super(...r);ue(this,"type","HightlightMesh");ue(this,"createTime");this.createTime=Date.now()}onBeforeRender(){const o=(Date.now()-this.createTime)/1e3,n=1+.07*Math.sin(2.5*o);this.scale.set(n,n,n)}}const ge=(e,t)=>{for(const r of Object.keys(t))t[r]instanceof Object&&Object.assign(t[r],ge(e[r],t[r]));return Object.assign(e||{},t),e},Qe=Ze("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 he(e){return e&&e.nodeType===1}function H(e){return e.replace(/-([a-z])/g,(t,r)=>r.toUpperCase())}const Ke=/\B([A-Z])/g;function Xe(e){return e.replace(Ke,"-$1").toLowerCase()}function Ze(e,t){const r=Object.create(null),o=e.split(",");for(let i=0;i<o.length;i++)r[o[i]]=!0;return i=>!!r[i]}const et=(e,t)=>{const r=new Set,o=[];for(const i of e){const a=t(i);r.has(a)||(r.add(a),o.push(i))}return o},ve=(e,t)=>{if(!t)return;const r=Array.isArray(t)?t:t.match(/([^[.\]])+/g);return r==null?void 0:r.reduce((o,i)=>o&&o[i],e)},tt=(e,t,r)=>{const o=Array.isArray(t)?t:t.match(/([^[.\]])+/g);o&&o.reduce((i,a,n)=>(i[a]===void 0&&(i[a]={}),n===o.length-1&&(i[a]=r),i[a]),e)};function ye(e,t){if(he(e)&&he(t)){const i=e.attributes,a=t.attributes;return i.length!==a.length?!1:Array.from(i).every(({name:n,value:s})=>t.getAttribute(n)===s)}if(e===t)return!0;if(e===null||typeof e!="object"||t===null||typeof t!="object")return!1;const r=Object.keys(e),o=Object.keys(t);if(r.length!==o.length)return!1;for(const i of r)if(!o.includes(i)||!ye(e[i],t[i]))return!1;return!0}function nt(e,t){if(!Array.isArray(e)||!Array.isArray(t)||e.length!==t.length)return!1;for(let r=0;r<e.length;r++)if(!ye(e[r],t[r]))return!1;return!0}const rt=Array.isArray;function ot(e,t,r,o){const i=u=>{if(u.uuid===t)return u;for(const l of u.children){const b=i(l);if(b)return b}},a=i(e);if(!a){console.warn("Object with UUID not found in the scene.");return}let n=a;for(let u=0;u<r.length-1;u++)if(n[r[u]]!==void 0)n=n[r[u]];else{console.warn(`Property path is not valid: ${r.join(".")}`);return}const s=r[r.length-1];n[s]!==void 0?n[s]=o:console.warn(`Property path is not valid: ${r.join(".")}`)}function st(e){const t=new y.MeshBasicMaterial({color:11003607,transparent:!0,opacity:.2,depthTest:!1,side:y.DoubleSide});return new Je(e.geometry.clone(),t)}function it(e){var r;let t=e.value;return e.value&&((r=e.value)!=null&&r.isMesh)&&(t=e.value.position),Array.isArray(e.value)&&(t=new y.Vector3(...t)),t}function at(e){return"map"in e}function we(e){at(e)&&e.map&&e.map.dispose(),e.dispose()}function Y(e){var r,o;if(e.parent&&((r=e.removeFromParent)==null||r.call(e)),delete e.__tres,[...e.children].forEach(i=>Y(i)),!(e instanceof y.Scene)){const i=e;e&&((o=e.dispose)==null||o.call(e)),i.geometry&&(i.geometry.dispose(),delete i.geometry),Array.isArray(i.material)?(i.material.forEach(a=>we(a)),delete i.material):i.material&&(we(i.material),delete i.material)}}const lt=Number.parseInt(y.REVISION.replace("dev","")),J={realistic:{shadows:!0,physicallyCorrectLights:!0,outputColorSpace:y.SRGBColorSpace,toneMapping:y.ACESFilmicToneMapping,toneMappingExposure:3,shadowMap:{enabled:!0,type:y.PCFSoftShadowMap}},flat:{toneMapping:y.NoToneMapping,toneMappingExposure:1}};function be({canvas:e,options:t,contextParts:{sizes:r,render:o,invalidate:i,advance:a}}){const n=c.computed(()=>({alpha:S.toValue(t.alpha)??!0,depth:S.toValue(t.depth),canvas:S.unrefElement(e),context:S.toValue(t.context),stencil:S.toValue(t.stencil),antialias:S.toValue(t.antialias)??!0,precision:S.toValue(t.precision),powerPreference:S.toValue(t.powerPreference),premultipliedAlpha:S.toValue(t.premultipliedAlpha),preserveDrawingBuffer:S.toValue(t.preserveDrawingBuffer),logarithmicDepthBuffer:S.toValue(t.logarithmicDepthBuffer),failIfMajorPerformanceCaveat:S.toValue(t.failIfMajorPerformanceCaveat)})),s=c.shallowRef(new y.WebGLRenderer(n.value));function u(){t.renderMode==="on-demand"&&i()}c.watch(n,()=>{s.value.dispose(),s.value=new y.WebGLRenderer(n.value),u()}),c.watch([r.width,r.height],()=>{s.value.setSize(r.width.value,r.height.value),u()},{immediate:!0}),c.watch(()=>t.clearColor,u);const{pixelRatio:l}=S.useDevicePixelRatio();c.watch(l,()=>{s.value.setPixelRatio(l.value)});const{logError:b}=T(),m=(()=>{const d=new y.WebGLRenderer,M={shadowMap:{enabled:d.shadowMap.enabled,type:d.shadowMap.type},toneMapping:d.toneMapping,toneMappingExposure:d.toneMappingExposure,outputColorSpace:d.outputColorSpace};return d.dispose(),M})(),C=S.toValue(t.renderMode);return C==="on-demand"&&i(),C==="manual"&&setTimeout(()=>{a()},1),c.watchEffect(()=>{const d=S.toValue(t.preset);d&&(d in J||b(`Renderer Preset must be one of these: ${Object.keys(J).join(", ")}`),ge(s.value,J[d])),C==="always"&&(o.frames.value=Math.max(1,o.frames.value));const M=(h,w)=>{const A=S.toValue(h),v=()=>{if(d)return ve(J[d],w)};if(A!==void 0)return A;const _=v();return _!==void 0?_:ve(m,w)},g=(h,w)=>tt(s.value,w,M(h,w));g(t.shadows,"shadowMap.enabled"),g(t.toneMapping??y.ACESFilmicToneMapping,"toneMapping"),g(t.shadowMapType,"shadowMap.type"),lt<150&&g(!t.useLegacyLights,"physicallyCorrectLights"),g(t.outputColorSpace,"outputColorSpace"),g(t.toneMappingExposure,"toneMappingExposure");const P=M(t.clearColor,"clearColor");P&&s.value.setClearColor(P?me(P):new y.Color(0))}),c.onUnmounted(()=>{s.value.dispose(),s.value.forceContextLoss()}),{renderer:s}}const Q=e=>typeof e=="function",ut=e=>!!e&&e.constructor===Array;function Me(e){const t={nodes:{},materials:{}};return e&&e.traverse(r=>{r.name&&(t.nodes[r.name]=r),r.material&&!t.materials[r.material.name]&&(t.materials[r.material.name]=r.material)}),t}async function ct(e,t,r,o,i){const{logError:a}=T(),n=new e;i&&i(n),r&&r(n);const u=(Array.isArray(t)?t:[t]).map(l=>new Promise((b,f)=>{n.load(l,m=>{m.scene&&Object.assign(m,Me(m.scene)),b(m)},o,m=>f(a("[useLoader] - Failed to load resource",m)))}));return ut(t)?await Promise.all(u):await u[0]}async function ft(e,t){const r=new y.TextureLoader(t),o=i=>new Promise((a,n)=>{r.load(i,s=>a(s),()=>null,()=>{n(new Error("[useTextures] - Failed to load texture"))})});if(rt(e)){const i=await Promise.all(e.map(a=>o(a)));return e.length>1?i:i[0]}else{const{map:i,displacementMap:a,normalMap:n,roughnessMap:s,metalnessMap:u,aoMap:l,alphaMap:b,matcap:f}=e;return{map:i?await o(i):null,displacementMap:a?await o(a):null,normalMap:n?await o(n):null,roughnessMap:s?await o(s):null,metalnessMap:u?await o(u):null,aoMap:l?await o(l):null,alphaMap:b?await o(b):null,matcap:f?await o(f):null}}}const oe=(e,t)=>{const r=c.computed(()=>t.renderer.value.domElement),o=c.shallowRef([]),{x:i,y:a}=S.usePointer({target:r});let n=0;const{width:s,height:u,top:l,left:b}=S.useElementBounding(r),f=({x:p,y:L})=>{if(r.value)return{x:(p-b.value)/s.value*2-1,y:-((L-l.value)/u.value)*2+1}},m=({x:p,y:L})=>{if(t.camera.value)return t.raycaster.value.setFromCamera(new y.Vector2(p,L),t.camera.value),o.value=t.raycaster.value.intersectObjects(e.value,!0),o.value},C=p=>{const L=f({x:(p==null?void 0:p.clientX)??i.value,y:(p==null?void 0:p.clientY)??a.value});return L?m(L)||[]:[]},d=S.createEventHook(),M=S.createEventHook(),g=S.createEventHook(),P=S.createEventHook(),h=S.createEventHook(),w=S.createEventHook(),A=S.createEventHook(),v=S.createEventHook();function _(p){const L={};for(const $ in p)typeof $!="function"&&(L[$]=p[$]);return L}const O=(p,L)=>{var Ue,Ve,$e;const $=_(L),ne=new y.Vector3(L==null?void 0:L.clientX,L==null?void 0:L.clientY,0).unproject((Ue=t.camera)==null?void 0:Ue.value);p.trigger({...$,intersections:o.value,unprojectedPoint:ne,ray:(Ve=t.raycaster)==null?void 0:Ve.value.ray,camera:($e=t.camera)==null?void 0:$e.value,sourceEvent:L,delta:n,stopPropagating:!1})};let U;const j=p=>{C(p),O(g,p),U=p},D=()=>{U&&j(U)};let x,V,I;const ee=p=>{var L;x=(L=o.value[0])==null?void 0:L.object,n=0,V=new y.Vector2((p==null?void 0:p.clientX)??i.value,(p==null?void 0:p.clientY)??a.value),O(h,p)};let R,te=!1;const Be=p=>{var L,$,ne;p instanceof PointerEvent&&(o.value.length===0&&O(w,p),x===((L=o.value[0])==null?void 0:L.object)&&(I=new y.Vector2((p==null?void 0:p.clientX)??i.value,(p==null?void 0:p.clientY)??a.value),n=V==null?void 0:V.distanceTo(I),p.button===0?(O(d,p),R===(($=o.value[0])==null?void 0:$.object)?te=!0:(R=(ne=o.value[0])==null?void 0:ne.object,te=!1)):p.button===2&&O(A,p)),O(P,p))},je=p=>{te&&(O(M,p),R=void 0,te=!1)},Ie=p=>O(g,p),Ee=p=>O(v,p);return r.value.addEventListener("pointerup",Be),r.value.addEventListener("pointerdown",ee),r.value.addEventListener("pointermove",j),r.value.addEventListener("pointerleave",Ie),r.value.addEventListener("dblclick",je),r.value.addEventListener("wheel",Ee),c.onUnmounted(()=>{r!=null&&r.value&&(r.value.removeEventListener("pointerup",Be),r.value.removeEventListener("pointerdown",ee),r.value.removeEventListener("pointermove",j),r.value.removeEventListener("pointerleave",Ie),r.value.removeEventListener("dblclick",je),r.value.removeEventListener("wheel",Ee))}),{intersects:o,onClick:p=>d.on(p).off,onDblClick:p=>M.on(p).off,onContextMenu:p=>A.on(p).off,onPointerMove:p=>g.on(p).off,onPointerUp:p=>P.on(p).off,onPointerDown:p=>h.on(p).off,onPointerMissed:p=>w.on(p).off,onWheel:p=>v.on(p).off,forceUpdate:D}};function dt(){const{logWarning:e}=T();function t(a,n,s){let u=null;return a.traverse(l=>{l[n]===s&&(u=l)}),u||e(`Child with ${n} '${s}' not found.`),u}function r(a,n,s){const u=[];return a.traverse(l=>{l[n].includes(s)&&u.push(l)}),u.length||e(`Children with ${n} '${s}' not found.`),u}function o(a,n){return t(a,"name",n)}function i(a,n){return r(a,"name",n)}return{seek:t,seekByName:o,seekAll:r,seekAllByName:i}}const pt=e=>{const t=c.reactive({click:new Map,pointerMove:new Map,pointerEnter:new Map,pointerLeave:new Map}),r=c.ref(new Set),o=f=>{r.value.add(f)},i=f=>{r.value.delete(f)},a=f=>{Object.values(t).forEach(m=>m.delete(f)),i(f)},n=f=>{const{onClick:m,onPointerMove:C,onPointerEnter:d,onPointerLeave:M}=f;m&&t.click.set(f,m),C&&t.pointerMove.set(f,C),d&&t.pointerEnter.set(f,d),M&&t.pointerLeave.set(f,M)},s=c.computed(()=>et([...Array.from(r.value),...Object.values(t).map(f=>Array.from(f.keys())).flat()],({uuid:f})=>f));e.registerObjectAtPointerEventHandler=n,e.deregisterObjectAtPointerEventHandler=a,e.registerBlockingObjectAtPointerEventHandler=o,e.deregisterBlockingObjectAtPointerEventHandler=i;const{onClick:u,onPointerMove:l}=oe(s,e);u(({intersects:f,event:m})=>{var C;f.length&&((C=t.click.get(f[0].object))==null||C(f[0],m))});let b;return l(({intersects:f,event:m})=>{var P,h,w,A;const C=(P=f==null?void 0:f[0])==null?void 0:P.object,{pointerLeave:d,pointerEnter:M,pointerMove:g}=t;b&&b!==C&&((h=d.get(b))==null||h(b,m)),C&&(b!==C&&((w=M.get(C))==null||w(f[0],m)),(A=g.get(C))==null||A(f[0],m)),b=C||null}),{registerObject:n,deregisterObject:a,registerBlockingObject:o,deregisterBlockingObject:i}};function se(e){let t=0;return e.traverse(r=>{if(r.isMesh&&r.geometry){const o=r.geometry,i=o.attributes.position.count*3*Float32Array.BYTES_PER_ELEMENT,a=o.index?o.index.count*Uint32Array.BYTES_PER_ELEMENT:0,n=o.attributes.normal?o.attributes.normal.count*3*Float32Array.BYTES_PER_ELEMENT:0,s=o.attributes.uv?o.attributes.uv.count*2*Float32Array.BYTES_PER_ELEMENT:0,u=i+a+n+s;t+=u}}),t}function mt(e){return(e/1024).toFixed(2)}const K=c.ref({}),X=e=>Object.assign(K.value,e);function gt(e,t,r=10){const o=S.toValue(e)?S.useWindowSize():S.useElementSize(c.computed(()=>S.toValue(t).parentElement)),i=c.readonly(S.refDebounced(o.width,r)),a=c.readonly(S.refDebounced(o.height,r)),n=c.computed(()=>i.value/a.value);return{height:a,width:i,aspectRatio:n}}function ie(){const e=new Map,t=new Set;let r=0,o=!1;const i=()=>{const l=Array.from(e.entries()).sort((b,f)=>{const m=b[1].priority-f[1].priority;return m===0?b[1].addI-f[1].addI:m});t.clear(),l.forEach(b=>t.add(b[0]))},a=l=>{e.delete(l),t.delete(l)};return{on:(l,b=0)=>{e.set(l,{priority:b,addI:r++});const f=()=>a(l);return S.tryOnScopeDispose(f),o=!0,{off:f}},off:a,trigger:(...l)=>{o&&(i(),o=!1),t.forEach(b=>b(...l))},dispose:()=>{e.clear(),t.clear()},get count(){return e.size}}}function ht(){const e=new y.Clock(!1),t=c.ref(!1),r=c.ref(!1);let o;const i=y.MathUtils.generateUUID();let a=null;const n=ie(),s=ie(),u=ie();let l={};function b(w){l=w}function f(w,A,v=0){switch(A){case"before":return n.on(w,v);case"render":return a||(a=w),s.dispose(),s.on(w);case"after":return u.on(w,v)}}function m(){t.value||(e.start(),t.value=!0,h())}function C(){t.value&&(e.stop(),cancelAnimationFrame(o),t.value=!1)}function d(){e.stop(),t.value=!1}function M(){e.start(),t.value=!0}function g(){r.value=!0}function P(){r.value=!1}function h(){const w=e.getDelta(),A=e.getElapsedTime(),v={delta:w,elapsed:A,clock:e,...l};t.value&&n.trigger(v),r.value||(s.count?s.trigger(v):a&&a(v)),t.value&&u.trigger(v),o=requestAnimationFrame(h)}return{loopId:i,register:(w,A,v)=>f(w,A,v),start:m,stop:C,pause:d,resume:M,pauseRender:g,resumeRender:P,isRenderPaused:r,isActive:t,setContext:b}}function Pe({scene:e,canvas:t,windowSize:r,disableRender:o,rendererOptions:i,emit:a}){const{logWarning:n}=T(),s=c.shallowRef(e),u=gt(r,t),{camera:l,cameras:b,registerCamera:f,deregisterCamera:m,setCameraActive:C}=fe({sizes:u,scene:e}),d={mode:c.ref(i.renderMode||"always"),priority:c.ref(0),frames:c.ref(0),maxFrames:60,canBeInvalidated:c.computed(()=>d.mode.value==="on-demand"&&d.frames.value===0)};function M(I=1){i.renderMode==="on-demand"?d.frames.value=Math.min(d.maxFrames,d.frames.value+I):n("`invalidate` can only be used when `renderMode` is set to `on-demand`")}function g(){i.renderMode==="manual"?d.frames.value=1:n("`advance` can only be used when `renderMode` is set to `manual`")}const{renderer:P}=be({scene:e,canvas:t,options:i,emit:a,contextParts:{sizes:u,camera:l,render:d,invalidate:M,advance:g},disableRender:o}),h={sizes:u,scene:s,camera:l,cameras:c.readonly(b),renderer:P,raycaster:c.shallowRef(new y.Raycaster),controls:c.ref(null),perf:{maxFrames:160,fps:{value:0,accumulator:[]},memory:{currentMem:0,allocatedMem:0,accumulator:[]}},render:d,advance:g,extend:X,invalidate:M,registerCamera:f,setCameraActive:C,deregisterCamera:m,loop:ht()};c.provide("useTres",h),h.scene.value.__tres={root:h},h.loop.register(()=>{l.value&&d.frames.value>0&&(P.value.render(e,l.value),a("render",h.renderer.value)),d.priority.value=0,d.mode.value==="always"?d.frames.value=1:d.frames.value=Math.max(0,d.frames.value-1)},"render"),h.loop.start(),c.onUnmounted(()=>{h.loop.stop()});const w=100,A=S.useFps({every:w}),{isSupported:v,memory:_}=S.useMemory({interval:w}),O=160;let U=performance.now();const j=({timestamp:I})=>{h.scene.value&&(h.perf.memory.allocatedMem=se(h.scene.value)),I-U>=w&&(U=I,h.perf.fps.accumulator.push(A.value),h.perf.fps.accumulator.length>O&&h.perf.fps.accumulator.shift(),h.perf.fps.value=A.value,v.value&&_.value&&(h.perf.memory.accumulator.push(_.value.usedJSHeapSize/1024/1024),h.perf.memory.accumulator.length>O&&h.perf.memory.accumulator.shift(),h.perf.memory.currentMem=h.perf.memory.accumulator.reduce((ee,R)=>ee+R,0)/h.perf.memory.accumulator.length))};let D=0;const x=1,{pause:V}=S.useRafFn(({delta:I})=>{window.__TRES__DEVTOOLS__&&(j({timestamp:performance.now()}),D+=I,D>=x&&(window.__TRES__DEVTOOLS__.cb(h),D=0))},{immediate:!0});return c.onUnmounted(()=>{V()}),h}function ae(){const e=c.inject("useTres");if(!e)throw new Error("useTresContext must be used together with useTresContextProvider");return e}const vt=ae;function yt(){const{camera:e,scene:t,renderer:r,loop:o,raycaster:i,controls:a,invalidate:n,advance:s}=ae();o.setContext({camera:c.unref(e),scene:c.unref(t),renderer:c.unref(r),raycaster:c.unref(i),controls:c.unref(a),invalidate:n,advance:s});function u(f,m=0){return o.register(f,"before",m)}function l(f){return o.register(f,"render")}function b(f,m=0){return o.register(f,"after",m)}return{pause:o.pause,resume:o.resume,pauseRender:o.pauseRender,resumeRender:o.resumeRender,isActive:o.isActive,onBeforeRender:u,render:l,onAfterRender:b}}function Ce(e,t,r){const o=c.shallowRef(),i=c.shallowRef();e&&(o.value=e),t&&(i.value=t);const a=c.computed(()=>o.value?o.value.children:[]);function n(v,_){if(Array.isArray(v))for(const O of v)O(_);typeof v=="function"&&v(_)}function s(v,_){const O=[],U=()=>_.stopPropagating=!0;_.stopPropagation=U;for(const j of _==null?void 0:_.intersections){if(_.stopPropagating)return;_={..._,...j};const{object:D}=j;_.eventObject=D,n(D[v],_),O.push(D);let x=D.parent;for(;x!==null&&!_.stopPropagating&&!O.includes(x);)_.eventObject=x,n(x[v],_),O.push(x),x=x.parent;const V=Xe(v.slice(2));r(V,{intersection:j,event:_})}}const{onClick:u,onDblClick:l,onContextMenu:b,onPointerMove:f,onPointerDown:m,onPointerUp:C,onPointerMissed:d,onWheel:M,forceUpdate:g}=oe(a,t);C(v=>s("onPointerUp",v)),m(v=>s("onPointerDown",v)),u(v=>s("onClick",v)),l(v=>s("onDoubleClick",v)),b(v=>s("onContextMenu",v)),M(v=>s("onWheel",v));let P=[];f(v=>{const _=v.intersections.map(({object:O})=>O);P.forEach(O=>{_.includes(O)||(s("onPointerLeave",v),s("onPointerOut",v))}),v.intersections.forEach(({object:O})=>{P.includes(O)||(s("onPointerEnter",v),s("onPointerOver",v))}),s("onPointerMove",v),P=_});const h=[];d(v=>{const _=()=>v.stopPropagating=!0;v.stopPropagation=_,h.forEach(O=>{v.stopPropagating||(v.eventObject=O,n(O.onPointerMissed,v))}),r("pointer-missed",{event:v})});function w(v){h.push(v)}function A(v){const _=h.indexOf(v);_>-1&&h.splice(_,1)}return t.eventManager={forceUpdate:g,registerPointerMissedObject:w,deregisterPointerMissedObject:A},{forceUpdate:g,registerPointerMissedObject:w,deregisterPointerMissedObject:A}}function fn(e){}const{logError:_e}=T(),wt=["onClick","onContextMenu","onPointerMove","onPointerEnter","onPointerLeave","onPointerOver","onPointerOut","onDoubleClick","onPointerDown","onPointerUp","onPointerCancel","onPointerMissed","onLostPointerCapture","onWheel"];function ke(e){var r;const t=(r=e==null?void 0:e.__tres)==null?void 0:r.root;t&&t.render&&t.render.canBeInvalidated.value&&t.invalidate()}const bt=()=>{let e=null;function t(n,s,u,l){if(l||(l={}),l.args||(l.args=[]),n==="template"||Qe(n))return null;let b=n.replace("Tres",""),f;if(n==="primitive"){(l==null?void 0:l.object)===void 0&&_e("Tres primitives need a prop 'object'");const m=l.object;b=m.type,f=Object.assign(m.clone(),{type:b})}else{const m=K.value[b];m||_e(`${b} is not defined on the THREE namespace. Use extend to add it to the catalog.`),f=new m(...l.args)}return f?(f.isCamera&&(l!=null&&l.position||f.position.set(3,3,3),l!=null&&l.lookAt||f.lookAt(0,0,0)),(l==null?void 0:l.attach)===void 0&&(f.isMaterial?f.attach="material":f.isBufferGeometry&&(f.attach="geometry")),f.__tres={...f.__tres,type:b,memoizedProps:l,eventCount:0,disposable:!0,primitive:n==="primitive"},f.isObject3D&&f.__tres&&(l!=null&&l.material||l!=null&&l.geometry)&&(f.__tres.disposable=!1),f):null}function r(n,s){var l,b,f,m,C;if(!n)return;s&&s.isScene&&(e=s),e&&n.__tres&&(n.__tres.root=e.__tres.root);const u=s||e;if(n!=null&&n.isObject3D){const{registerCamera:d}=(l=n==null?void 0:n.__tres)==null?void 0:l.root;n!=null&&n.isCamera&&d(n),n.onPointerMissed&&((b=n==null?void 0:n.__tres)!=null&&b.root)&&((C=(m=(f=n==null?void 0:n.__tres)==null?void 0:f.root)==null?void 0:m.eventManager)==null||C.registerPointerMissedObject(n))}n!=null&&n.isObject3D&&(u!=null&&u.isObject3D)?(u.add(n),n.dispatchEvent({type:"added"})):n!=null&&n.isFog?u.fog=n:typeof(n==null?void 0:n.attach)=="string"&&(n.__previousAttach=n[u==null?void 0:u.attach],u&&(u[n.attach]=n))}function o(n){var u,l,b,f;if(!n)return;const s=n.__tres;if(n.parent=n.parent||e,n.isObject3D){const m=d=>{var g,P;const M=(P=(g=n==null?void 0:n.__tres)==null?void 0:g.root)==null?void 0:P.deregisterCamera;d.isCamera&&(M==null||M(d))};(u=n.removeFromParent)==null||u.call(n),n.traverse(d=>{var M,g;m(d),d.onPointerMissed&&((g=(M=s==null?void 0:s.root)==null?void 0:M.eventManager)==null||g.deregisterPointerMissedObject(d))}),m(n),ke(n),!((l=n.__tres)==null?void 0:l.primitive)&&((b=n.__tres)!=null&&b.disposable)&&Y(n),(f=n.dispose)==null||f.call(n)}}function i(n,s,u,l){var b,f;if(n){let m=n,C=s;if((b=n==null?void 0:n.__tres)!=null&&b.primitive&&C==="object"&&u!==null){const P=t("primitive",void 0,void 0,{object:l});for(const h in P){if(h==="uuid")continue;const w=n[h],A=P[h];!(w!=null&&w.set)&&!Q(w)?n[h]=A:w.constructor===A.constructor&&(w!=null&&w.copy)?w==null||w.copy(A):Array.isArray(A)?w.set(...A):!w.isColor&&w.setScalar?w.setScalar(A):w.set(A)}P!=null&&P.__tres&&(P.__tres.root=e==null?void 0:e.__tres.root),P!=null&&P.isGroup?(n.geometry=void 0,n.material=void 0):delete n.isGroup}if(n!=null&&n.isObject3D&&C==="blocks-pointer-events"){l||l===""?n[C]=l:delete n[C];return}let d=H(C),M=m==null?void 0:m[d];if(C==="args"){const P=n,h=u??[],w=l??[],A=((f=n==null?void 0:n.__tres)==null?void 0:f.type)||n.type;A&&h.length&&!nt(h,w)&&(m=Object.assign(P,new K.value[A](...l)));return}if(m.type==="BufferGeometry"){if(C==="args")return;m.setAttribute(H(C),new y.BufferAttribute(...l));return}if(C.includes("-")&&M===void 0){const P=C.split("-");M=P.reduce((h,w)=>h[H(w)],m),C=P.pop(),d=C,M!=null&&M.set||(m=P.reduce((h,w)=>h[H(w)],m))}let g=l;if(g===""&&(g=!0),Q(M)){wt.includes(s)||(Array.isArray(g)?n[d](...g):n[d](g)),d.startsWith("on")&&Q(g)&&(m[d]=g);return}!(M!=null&&M.set)&&!Q(M)?m[d]=g:M.constructor===g.constructor&&(M!=null&&M.copy)?M==null||M.copy(g):Array.isArray(g)?M.set(...g):!M.isColor&&M.setScalar?M.setScalar(g):M.set(g),ke(n)}}function a(n){return(n==null?void 0:n.parent)||null}return{insert:r,remove:o,createElement:t,patchProp:i,parentNode:a,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 Mt(){return Se().__VUE_DEVTOOLS_GLOBAL_HOOK__}function Se(){return typeof navigator<"u"&&typeof window<"u"?window:typeof globalThis<"u"?globalThis:{}}const Pt=typeof Proxy=="function",Ct="devtools-plugin:setup",_t="plugin:settings:set";let F,le;function kt(){var e;return F!==void 0||(typeof window<"u"&&window.performance?(F=!0,le=window.performance):typeof globalThis<"u"&&(!((e=globalThis.perf_hooks)===null||e===void 0)&&e.performance)?(F=!0,le=globalThis.perf_hooks.performance):F=!1),F}function St(){return kt()?le.now():Date.now()}class Ot{constructor(t,r){this.target=null,this.targetQueue=[],this.onQueue=[],this.plugin=t,this.hook=r;const o={};if(t.settings)for(const n in t.settings){const s=t.settings[n];o[n]=s.defaultValue}const i=`__vue-devtools-plugin-settings__${t.id}`;let a=Object.assign({},o);try{const n=localStorage.getItem(i),s=JSON.parse(n);Object.assign(a,s)}catch{}this.fallbacks={getSettings(){return a},setSettings(n){try{localStorage.setItem(i,JSON.stringify(n))}catch{}a=n},now(){return St()}},r&&r.on(_t,(n,s)=>{n===this.plugin.id&&this.fallbacks.setSettings(s)}),this.proxiedOn=new Proxy({},{get:(n,s)=>this.target?this.target.on[s]:(...u)=>{this.onQueue.push({method:s,args:u})}}),this.proxiedTarget=new Proxy({},{get:(n,s)=>this.target?this.target[s]:s==="on"?this.proxiedOn:Object.keys(this.fallbacks).includes(s)?(...u)=>(this.targetQueue.push({method:s,args:u,resolve:()=>{}}),this.fallbacks[s](...u)):(...u)=>new Promise(l=>{this.targetQueue.push({method:s,args:u,resolve:l})})})}async setRealTarget(t){this.target=t;for(const r of this.onQueue)this.target.on[r.method](...r.args);for(const r of this.targetQueue)r.resolve(await this.target[r.method](...r.args))}}function At(e,t){const r=e,o=Se(),i=Mt(),a=Pt&&r.enableEarlyProxy;if(i&&(o.__VUE_DEVTOOLS_PLUGIN_API_AVAILABLE__||!a))i.emit(Ct,e,t);else{const n=a?new Ot(r,i):null;(o.__VUE_DEVTOOLS_PLUGINS__=o.__VUE_DEVTOOLS_PLUGINS__||[]).push({pluginDescriptor:r,setupFn:t,proxy:n}),n&&t(n.proxiedTarget)}}function Lt(e,t){const r=`▲ ■ ●${e}`;typeof Oe=="function"?Oe(r,t):console.log(r)}function Oe(e,t){throw new Error(e+t)}const Ae=e=>{const t={id:e.uuid,label:e.type,children:[],tags:[]};e.name!==""&&t.tags.push({label:e.name,textColor:5750629,backgroundColor:15793395});const r=se(e);return r>0&&t.tags.push({label:`${mt(r)} KB`,textColor:15707189,backgroundColor:16775644,tooltip:"Memory usage"}),e.type.includes("Light")&&(t.tags.push({label:`${e.intensity}`,textColor:9738662,backgroundColor:16316922,tooltip:"Intensity"}),t.tags.push({label:`#${e.color.getHexString()}`,textColor:9738662,backgroundColor:16316922,tooltip:"Color"})),e.type.includes("Camera")&&(t.tags.push({label:`${e.fov}°`,textColor:9738662,backgroundColor:16316922,tooltip:"Field of view"}),t.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"})),t};function Le(e,t,r=""){e.children.forEach(o=>{if(o.type==="HightlightMesh"||r&&!o.type.includes(r)&&!o.name.includes(r))return;const i=Ae(o);t.children.push(i),Le(o,i,r)})}const xt=[],N="tres:inspector",Dt=c.reactive({sceneGraph:null});function Tt(e,t){At({id:"dev.esm.tres",label:"TresJS 🪐",logo:"https://raw.githubusercontent.com/Tresjs/tres/main/public/favicon.svg",packageName:"tresjs",homepage:"https://tresjs.org",componentStateTypes:xt,app:e},r=>{typeof r.now!="function"&&Lt("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."),r.addInspector({id:N,label:"TresJS 🪐",icon:"account_tree",treeFilterPlaceholder:"Search instances"}),setInterval(()=>{r.sendInspectorTree(N)},1e3),setInterval(()=>{r.notifyComponentUpdate()},5e3),r.on.getInspectorTree(a=>{if(a.inspectorId===N){const n=Ae(t.scene.value);Le(t.scene.value,n,a.filter),Dt.sceneGraph=n,a.rootNodes=[n]}});let o=null,i=null;r.on.getInspectorState(a=>{var n;if(a.inspectorId===N){const[s]=t.scene.value.getObjectsByProperty("uuid",a.nodeId);if(!s)return;if(i&&o&&o.parent&&i.remove(o),s.isMesh){const u=st(s);s.add(u),o=u,i=s}a.state={object:[{key:"uuid",editable:!0,value:s.uuid},{key:"name",editable:!0,value:s.name},{key:"type",editable:!0,value:s.type},{key:"position",editable:!0,value:s.position},{key:"rotation",editable:!0,value:s.rotation},{key:"scale",editable:!0,value:s.scale},{key:"geometry",value:s.geometry},{key:"material",value:s.material},{key:"color",editable:!0,value:s.color},{key:"intensity",editable:!0,value:s.intensity},{key:"castShadow",editable:!0,value:s.castShadow},{key:"receiveShadow",editable:!0,value:s.receiveShadow},{key:"frustumCulled",editable:!0,value:s.frustumCulled},{key:"matrixAutoUpdate",editable:!0,value:s.matrixAutoUpdate},{key:"matrixWorldNeedsUpdate",editable:!0,value:s.matrixWorldNeedsUpdate},{key:"matrixWorld",value:s.matrixWorld},{key:"visible",editable:!0,value:s.visible}]},s.isScene&&(a.state.info={memory:se(s),objects:s.children.length,calls:t.renderer.value.info.render.calls,triangles:t.renderer.value.info.render.triangles,points:t.renderer.value.info.render.points,lines:t.renderer.value.info.render.lines},a.state.programs=((n=t.renderer.value.info.programs)==null?void 0:n.map(u=>({key:u.name,value:{...u,vertexShader:u.vertexShader,attributes:u.getAttributes(),uniforms:u.getUniforms()}})))||[])}}),r.on.editInspectorState(a=>{a.inspectorId===N&&ot(t.scene.value,a.nodeId,a.path,a.state.value)})})}const Bt=["data-scene","data-tres"],xe=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","click","double-click","context-menu","pointer-move","pointer-up","pointer-down","pointer-enter","pointer-leave","pointer-over","pointer-out","pointer-missed","wheel"],setup(e,{expose:t,emit:r}){var M;const o=e,i=r,a=c.useSlots(),{logWarning:n}=T(),s=c.ref(),u=c.shallowRef(new y.Scene),l=(M=c.getCurrentInstance())==null?void 0:M.appContext.app;X(ce);const b=g=>c.defineComponent({setup(){var h;const P=(h=c.getCurrentInstance())==null?void 0:h.appContext;return P&&(P.app=l),c.provide("useTres",g),c.provide("extend",X),typeof window<"u"&&Tt(P==null?void 0:P.app,g),()=>c.h(c.Fragment,null,a!=null&&a.default?a.default():[])}}),f=g=>{const P=b(g),{render:h}=c.createRenderer(bt());h(c.h(P),u.value)},m=(g,P=!1)=>{Y(g.scene.value),P&&(g.renderer.value.dispose(),g.renderer.value.renderLists.dispose(),g.renderer.value.forceContextLoss()),u.value.__tres={root:g},f(g)},C=c.computed(()=>o.disableRender),d=c.shallowRef(null);return t({context:d,dispose:()=>m(d.value,!0)}),c.onMounted(()=>{const g=s;d.value=Pe({scene:u.value,canvas:g,windowSize:o.windowSize??!1,disableRender:C.value??!1,rendererOptions:o,emit:i}),Ce(u.value,d.value,i);const{registerCamera:P,camera:h,cameras:w,deregisterCamera:A}=d.value;f(d.value);const v=()=>{const _=new y.PerspectiveCamera(45,window.innerWidth/window.innerHeight,.1,1e3);_.position.set(3,3,3),_.lookAt(0,0,0),P(_);const O=c.watchEffect(()=>{w.value.length>=2&&(_.removeFromParent(),A(_),O==null||O())})};c.watch(()=>o.camera,(_,O)=>{_&&P(_),O&&(O.removeFromParent(),A(O))},{immediate:!0}),h.value||(n("No camera found. Creating a default perspective camera. To have full control over a camera, please add one to the scene."),v())}),c.onUnmounted(()=>{m(d.value)}),(g,P)=>(c.openBlock(),c.createElementBlock("canvas",{ref_key:"canvas",ref:s,"data-scene":u.value.uuid,class:c.normalizeClass(g.$attrs.class),"data-tres":`tresjs ${c.unref(We).version}`,style:c.normalizeStyle({display:"block",width:"100%",height:"100%",position:g.windowSize?"fixed":"relative",top:0,left:0,pointerEvents:"auto",touchAction:"none",...g.$attrs.style})},null,14,Bt))}}),jt=["TresCanvas","TresLeches","TresScene"],It={template:{compilerOptions:{isCustomElement:e=>e.startsWith("Tres")&&!jt.includes(e)||e==="primitive"}}},Et={mounted:(e,t)=>{if(t.arg){console.log(`v-log:${t.arg}`,e[t.arg]);return}console.log("v-log",e)}};class De extends y.Line{constructor(t,r){const o=[1,1,0,-1,1,0,-1,-1,0,1,-1,0,1,1,0],i=new y.BufferGeometry;i.setAttribute("position",new y.Float32BufferAttribute(o,3)),i.computeBoundingSphere();const a=new y.LineBasicMaterial({fog:!1});super(i,a),this.light=t,this.color=r,this.type="RectAreaLightHelper";const n=[1,1,0,-1,1,0,-1,-1,0,1,1,0,-1,-1,0,1,-1,0],s=new y.BufferGeometry;s.setAttribute("position",new y.Float32BufferAttribute(n,3)),s.computeBoundingSphere(),this.add(new y.Mesh(s,new y.MeshBasicMaterial({side:y.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 t=this.material.color,r=Math.max(t.r,t.g,t.b);r>1&&t.multiplyScalar(1/r),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:Te}=T();let Z,E;const Ut={DirectionalLight:y.DirectionalLightHelper,PointLight:y.PointLightHelper,SpotLight:y.SpotLightHelper,HemisphereLight:y.HemisphereLightHelper,RectAreaLight:De},Vt={mounted:e=>{if(!e.isLight){Te(`${e.type} is not a light`);return}Z=Ut[e.type],e.parent.add(new Z(e,1,e.color.getHex()))},updated:e=>{E=e.parent.children.find(t=>t instanceof Z),!(E instanceof De)&&E.update()},unmounted:e=>{if(!e.isLight){Te(`${e.type} is not a light`);return}E=e.parent.children.find(t=>t instanceof Z),E&&E.dispose&&E.dispose(),e.parent.remove(E)}},{logWarning:$t}=T();let B=null;const Ft={updated:(e,t)=>{var i;const r=it(t);if(!r){$t(`v-distance-to: problem with binding value: ${t.value}`);return}B&&(B.dispose(),e.parent.remove(B));const o=r.clone().sub(e.position);o.normalize(),B=new y.ArrowHelper(o,e.position,e.position.distanceTo(r),16776960),e.parent.add(B),console.table([["Distance:",e.position.distanceTo(r)],[`origin: ${e.name||e.type}`,`x:${e.position.x}, y:${e.position.y}, z:${(i=e.position)==null?void 0:i.z}`],[`Destiny: ${e.name||e.type}`,`x:${r.x}, y:${r.y}, z:${r==null?void 0:r.z}`]])},unmounted:e=>{B==null||B.dispose(),e.parent.remove(B)}},Wt={install(e){e.component("TresCanvas",xe)}};k.TresCanvas=xe,k.catalogue=K,k.default=Wt,k.dispose=Y,k.extend=X,k.isProd=He,k.normalizeColor=me,k.normalizeVectorFlexibleParam=Ye,k.templateCompilerOptions=It,k.trasverseObjects=Me,k.useCamera=fe,k.useLoader=ct,k.useLogger=T,k.useLoop=yt,k.usePointerEventHandler=pt,k.useRaycaster=oe,k.useRenderLoop=qe,k.useRenderer=be,k.useSeek=dt,k.useTexture=ft,k.useTres=vt,k.useTresContext=ae,k.useTresContextProvider=Pe,k.useTresEventManager=Ce,k.vDistanceTo=Ft,k.vLightHelper=Vt,k.vLog=Et,Object.defineProperties(k,{__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": "4.0.0-rc.0",
4
+ "version": "4.0.0-rc.1",
5
5
  "packageManager": "pnpm@8.15.6",
6
6
  "description": "Declarative ThreeJS using Vue Components",
7
7
  "author": "Alvaro Saburido <hola@alvarosaburido.dev> (https://github.com/alvarosabu/)",
@@ -50,7 +50,7 @@
50
50
  "playground": "cd playground && npm run dev",
51
51
  "test": "vitest",
52
52
  "test:ci": "vitest run",
53
- "test:ui": "vitest --ui",
53
+ "test:ui": "vitest --ui --coverage.enabled=true",
54
54
  "release": "release-it",
55
55
  "coverage": "vitest run --coverage",
56
56
  "lint": "eslint .",
@@ -73,18 +73,19 @@
73
73
  },
74
74
  "devDependencies": {
75
75
  "@release-it/conventional-changelog": "^8.0.1",
76
- "@stackblitz/sdk": "^1.9.0",
77
- "@tresjs/cientos": "3.8.0",
76
+ "@stackblitz/sdk": "^1.10.0",
77
+ "@tresjs/cientos": "3.9.0",
78
78
  "@tresjs/eslint-config": "^1.0.0",
79
- "@types/three": "^0.163.0",
80
- "@typescript-eslint/eslint-plugin": "^7.7.1",
81
- "@typescript-eslint/parser": "^7.7.1",
79
+ "@types/three": "^0.164.0",
80
+ "@typescript-eslint/eslint-plugin": "^7.9.0",
81
+ "@typescript-eslint/parser": "^7.9.0",
82
82
  "@vitejs/plugin-vue": "^5.0.4",
83
83
  "@vitest/coverage-c8": "^0.33.0",
84
- "@vitest/ui": "^1.5.0",
85
- "@vue/test-utils": "^2.4.5",
86
- "eslint": "^9.1.1",
87
- "eslint-plugin-vue": "^9.25.0",
84
+ "@vitest/coverage-v8": "^1.6.0",
85
+ "@vitest/ui": "^1.6.0",
86
+ "@vue/test-utils": "^2.4.6",
87
+ "eslint": "^9.2.0",
88
+ "eslint-plugin-vue": "^9.26.0",
88
89
  "esno": "^4.7.0",
89
90
  "gsap": "^3.12.5",
90
91
  "husky": "^9.0.11",
@@ -92,23 +93,23 @@
92
93
  "kolorist": "^1.8.0",
93
94
  "ohmyfetch": "^0.4.21",
94
95
  "pathe": "^1.1.2",
95
- "release-it": "^17.2.0",
96
+ "release-it": "^17.2.1",
96
97
  "rollup-plugin-analyzer": "^4.0.0",
97
98
  "rollup-plugin-copy": "^3.5.0",
98
99
  "rollup-plugin-visualizer": "^5.12.0",
99
- "three": "^0.163.0",
100
- "unocss": "^0.59.4",
100
+ "three": "^0.164.1",
101
+ "unocss": "^0.60.2",
101
102
  "unplugin": "^1.10.1",
102
- "unplugin-vue-components": "^0.26.0",
103
- "vite": "^5.2.10",
103
+ "unplugin-vue-components": "^0.27.0",
104
+ "vite": "^5.2.11",
104
105
  "vite-plugin-banner": "^0.7.1",
105
- "vite-plugin-dts": "3.9.0",
106
+ "vite-plugin-dts": "3.9.1",
106
107
  "vite-plugin-inspect": "^0.8.4",
107
108
  "vite-plugin-require-transform": "^1.0.21",
108
109
  "vite-svg-loader": "^5.1.0",
109
- "vitepress": "1.1.3",
110
- "vitest": "^1.5.0",
111
- "vue": "^3.4.24",
110
+ "vitepress": "1.1.4",
111
+ "vitest": "^1.6.0",
112
+ "vue": "^3.4.27",
112
113
  "vue-demi": "^0.14.7"
113
114
  }
114
115
  }
@@ -1,7 +0,0 @@
1
- import { TresVector3 } from '../types';
2
- import { Ref } from 'vue';
3
- import { Object3D } from 'three';
4
-
5
- export declare const vAlwaysLookAt: {
6
- updated: (el: Object3D, binding: Ref<TresVector3>) => void;
7
- };
@@ -1,13 +0,0 @@
1
- import { TresObject } from '../types';
2
-
3
- export declare const vRotate: {
4
- mounted: (el: TresObject, binding: {
5
- arg: 'x' | 'y' | 'z';
6
- value: number;
7
- modifiers: Partial<{
8
- x: boolean;
9
- y: boolean;
10
- z: boolean;
11
- }>;
12
- }) => void;
13
- };