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