@tresjs/core 3.7.0-next.0 → 3.7.0

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.
Files changed (38) hide show
  1. package/dist/index.d.ts +3 -18
  2. package/dist/{components → src/components}/TresCanvas.vue.d.ts +4 -3
  3. package/dist/{composables → src/composables}/useRenderer/index.d.ts +1 -1
  4. package/dist/src/devtools/highlight.d.ts +7 -0
  5. package/dist/src/devtools/index.d.ts +1 -0
  6. package/dist/src/devtools/plugin.d.ts +15 -0
  7. package/dist/src/devtools/utils.d.ts +7 -0
  8. package/dist/src/directives/index.d.ts +5 -0
  9. package/dist/src/directives/vAlwaysLookAt.d.ts +6 -0
  10. package/dist/src/directives/vDistanceTo.d.ts +6 -0
  11. package/dist/src/directives/vLightHelper.d.ts +6 -0
  12. package/dist/src/directives/vLog.d.ts +6 -0
  13. package/dist/src/index.d.ts +18 -0
  14. package/dist/{utils → src/utils}/index.d.ts +8 -8
  15. package/dist/tres.js +1010 -468
  16. package/dist/tres.umd.cjs +3 -3
  17. package/package.json +1 -1
  18. /package/dist/{components → src/components}/index.d.ts +0 -0
  19. /package/dist/{composables → src/composables}/index.d.ts +0 -0
  20. /package/dist/{composables → src/composables}/useCamera/index.d.ts +0 -0
  21. /package/dist/{composables → src/composables}/useLoader/index.d.ts +0 -0
  22. /package/dist/{composables → src/composables}/useLogger.d.ts +0 -0
  23. /package/dist/{composables → src/composables}/usePointerEventHandler/index.d.ts +0 -0
  24. /package/dist/{composables → src/composables}/useRaycaster/index.d.ts +0 -0
  25. /package/dist/{composables → src/composables}/useRenderLoop/index.d.ts +0 -0
  26. /package/dist/{composables → src/composables}/useRenderer/const.d.ts +0 -0
  27. /package/dist/{composables → src/composables}/useSeek/index.d.ts +0 -0
  28. /package/dist/{composables → src/composables}/useTexture/index.d.ts +0 -0
  29. /package/dist/{composables → src/composables}/useTresContextProvider/index.d.ts +0 -0
  30. /package/dist/{core → src/core}/catalogue.d.ts +0 -0
  31. /package/dist/{core → src/core}/nodeOps.d.ts +0 -0
  32. /package/dist/{core → src/core}/renderer.d.ts +0 -0
  33. /package/dist/{core → src/core}/revision.d.ts +0 -0
  34. /package/dist/{types → src/types}/index.d.ts +0 -0
  35. /package/dist/{utils → src/utils}/normalize.d.ts +0 -0
  36. /package/dist/{utils → src/utils}/perf.d.ts +0 -0
  37. /package/dist/{utils → src/utils}/template-compiler-options.d.ts +0 -0
  38. /package/dist/{utils → src/utils}/test-utils.d.ts +0 -0
package/dist/tres.umd.cjs CHANGED
@@ -1,8 +1,8 @@
1
1
  /**
2
2
  * name: @tresjs/core
3
- * version: v3.7.0-next.0
4
- * (c) 2023
3
+ * version: v3.7.0
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(C,u){typeof exports=="object"&&typeof module<"u"?u(exports,require("vue"),require("three"),require("@vueuse/core")):typeof define=="function"&&define.amd?define(["exports","vue","three","@vueuse/core"],u):(C=typeof globalThis<"u"?globalThis:C||self,u(C.tres={},C.Vue,C.Three,C.VueUseCore))})(this,function(C,u,P,y){"use strict";function ue(e){const n=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const t in e)if(t!=="default"){const r=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(n,t,r.get?r:{enumerable:!0,get:()=>e[t]})}}return n.default=e,Object.freeze(n)}const ce=ue(P),W=({sizes:e,scene:n})=>{const t=u.ref([]),r=u.computed(()=>t.value[0]),a=(l,f=!1)=>{t.value.some(({uuid:d})=>d===l.uuid)||(f?c(l):t.value.push(l))},o=l=>{t.value=t.value.filter(({uuid:f})=>f!==l.uuid)},c=l=>{const f=l instanceof P.Camera?l:t.value.find(_=>_.uuid===l);if(!f)return;const d=t.value.filter(({uuid:_})=>_!==f.uuid);t.value=[f,...d]};return u.watchEffect(()=>{e.aspectRatio.value&&t.value.forEach(l=>{l instanceof P.PerspectiveCamera&&(l.aspect=e.aspectRatio.value),(l instanceof P.PerspectiveCamera||l instanceof P.OrthographicCamera)&&l.updateProjectionMatrix()})}),n.userData.tres__registerCamera=a,n.userData.tres__deregisterCamera=o,u.onUnmounted(()=>{t.value=[]}),{camera:r,cameras:t,registerCamera:a,deregisterCamera:o,setCameraActive:c}},U=y.createEventHook(),q=y.createEventHook(),z=y.createEventHook(),L=new P.Clock;let B=0,T=0;const{pause:fe,resume:me,isActive:de}=y.useRafFn(()=>{U.trigger({delta:B,elapsed:T,clock:L}),q.trigger({delta:B,elapsed:T,clock:L}),z.trigger({delta:B,elapsed:T,clock:L})},{immediate:!1});z.on(()=>{B=L.getDelta(),T=L.getElapsedTime()});const I=()=>({onBeforeLoop:U.on,onLoop:q.on,onAfterLoop:z.on,pause:fe,resume:me,isActive:de}),pe=!0,H="[TresJS ▲ ■ ●] ";function E(){function e(r,a){console.error(`${H} ${r}`,a||"")}function n(r){console.warn(`${H} ${r}`)}function t(r,a){}return{logError:e,logWarning:n,logMessage:t}}function ge(e){return typeof e=="number"?[e,e,e]:e instanceof P.Vector3?[e.x,e.y,e.z]:e}function Y(e){return e instanceof P.Color?e:Array.isArray(e)?new P.Color(...e):new P.Color(e)}const J=(e,n)=>{for(const t of Object.keys(n))n[t]instanceof Object&&Object.assign(n[t],J(e[t],n[t]));return Object.assign(e||{},n),e},ve=ye("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 K(e){return e&&e.nodeType===1}function j(e){return e.replace(/-([a-z])/g,(n,t)=>t.toUpperCase())}function ye(e,n){const t=Object.create(null),r=e.split(",");for(let a=0;a<r.length;a++)t[r[a]]=!0;return n?a=>!!t[a.toLowerCase()]:a=>!!t[a]}const he=(e,n)=>{const t=new Set,r=[];for(const a of e){const o=n(a);t.has(o)||(t.add(o),r.push(a))}return r},X=(e,n)=>{if(!n)return;const t=Array.isArray(n)?n:n.match(/([^[.\]])+/g);return t==null?void 0:t.reduce((r,a)=>r&&r[a],e)},we=(e,n,t)=>{const r=Array.isArray(n)?n:n.match(/([^[.\]])+/g);r&&r.reduce((a,o,c)=>(a[o]===void 0&&(a[o]={}),c===r.length-1&&(a[o]=t),a[o]),e)};function Q(e,n){if(K(e)&&K(n)){const a=e.attributes,o=n.attributes;return a.length!==o.length?!1:Array.from(a).every(({name:c,value:l})=>n.getAttribute(c)===l)}if(e===n)return!0;if(e===null||typeof e!="object"||n===null||typeof n!="object")return!1;const t=Object.keys(e),r=Object.keys(n);if(t.length!==r.length)return!1;for(const a of t)if(!r.includes(a)||!Q(e[a],n[a]))return!1;return!0}function Ce(e,n){if(!Array.isArray(e)||!Array.isArray(n)||e.length!==n.length)return!1;for(let t=0;t<e.length;t++)if(!Q(e[t],n[t]))return!1;return!0}const _e=Array.isArray;function N(e){var n,t;e.children&&e.children.forEach(r=>N(r));for(const r in e)(t=(n=e[r])==null?void 0:n.dispose)==null||t.call(n),delete e[r];e.dispose&&e.type!=="Scene"&&e.dispose()}const Pe=Number.parseInt(P.REVISION.replace("dev","")),x={realistic:{shadows:!0,physicallyCorrectLights:!0,outputColorSpace:P.SRGBColorSpace,toneMapping:P.ACESFilmicToneMapping,toneMappingExposure:3,shadowMap:{enabled:!0,type:P.PCFSoftShadowMap}}};function Z({scene:e,canvas:n,options:t,disableRender:r,contextParts:{sizes:a,camera:o}}){const c=u.computed(()=>({alpha:y.toValue(t.alpha),depth:y.toValue(t.depth),canvas:y.unrefElement(n),context:y.toValue(t.context),stencil:y.toValue(t.stencil),antialias:y.toValue(t.antialias)===void 0?!0:y.toValue(t.antialias),precision:y.toValue(t.precision),powerPreference:y.toValue(t.powerPreference),premultipliedAlpha:y.toValue(t.premultipliedAlpha),preserveDrawingBuffer:y.toValue(t.preserveDrawingBuffer),logarithmicDepthBuffer:y.toValue(t.logarithmicDepthBuffer),failIfMajorPerformanceCaveat:y.toValue(t.failIfMajorPerformanceCaveat)})),l=u.shallowRef(new P.WebGLRenderer(c.value));u.watch(c,()=>{l.value.dispose(),l.value=new P.WebGLRenderer(c.value)}),u.watchEffect(()=>{l.value.setSize(a.width.value,a.height.value)});const{pixelRatio:f}=y.useDevicePixelRatio();u.watchEffect(()=>{l.value.setPixelRatio(f.value)});const{logError:d}=E(),i=(()=>{const p=new P.WebGLRenderer,M={shadowMap:{enabled:p.shadowMap.enabled,type:p.shadowMap.type},toneMapping:p.toneMapping,toneMappingExposure:p.toneMappingExposure,outputColorSpace:p.outputColorSpace};return p.dispose(),M})();u.watchEffect(()=>{const p=y.toValue(t.preset);p&&(p in x||d(`Renderer Preset must be one of these: ${Object.keys(x).join(", ")}`),J(l.value,x[p]));const M=(D,O)=>{const b=y.toValue(D),S=()=>{if(p)return X(x[p],O)};if(b!==void 0)return b;const w=S();return w!==void 0?w:X(i,O)},v=(D,O)=>we(l.value,O,M(D,O));v(t.shadows,"shadowMap.enabled"),v(t.toneMapping,"toneMapping"),v(t.shadowMapType,"shadowMap.type"),Pe<150&&v(!t.useLegacyLights,"physicallyCorrectLights"),v(t.outputColorSpace,"outputColorSpace"),v(t.toneMappingExposure,"toneMappingExposure");const k=M(t.clearColor,"clearColor");k&&l.value.setClearColor(k?Y(k):new P.Color(0))});const{pause:s,resume:m,onLoop:g}=I();return g(()=>{o.value&&!y.toValue(r)&&l.value.render(e,o.value)}),m(),u.onUnmounted(()=>{s(),l.value.dispose(),l.value.forceContextLoss()}),{renderer:l}}const ee=e=>typeof e=="function",Me=e=>!!e&&e.constructor===Array;function te(e){const n={nodes:{},materials:{}};return e&&e.traverse(t=>{t.name&&(n.nodes[t.name]=t),t.material&&!n.materials[t.material.name]&&(n.materials[t.material.name]=t.material)}),n}async function be(e,n,t,r,a){const{logError:o}=E(),c=new e;a&&a(c),t&&t(c);const f=(Array.isArray(n)?n:[n]).map(d=>new Promise((_,i)=>{c.load(d,s=>{s.scene&&Object.assign(s,te(s.scene)),_(s)},r,s=>i(o("[useLoader] - Failed to load resource",s)))}));return Me(n)?await Promise.all(f):await f[0]}async function Ae(e){const n=new P.LoadingManager,t=new P.TextureLoader(n),r=a=>new Promise((o,c)=>{t.load(a,l=>o(l),()=>null,()=>{c(new Error("[useTextures] - Failed to load texture"))})});if(_e(e)){const a=await Promise.all(e.map(o=>r(o)));return e.length>1?a:a[0]}else{const{map:a,displacementMap:o,normalMap:c,roughnessMap:l,metalnessMap:f,aoMap:d,alphaMap:_,matcap:i}=e;return{map:a?await r(a):null,displacementMap:o?await r(o):null,normalMap:c?await r(c):null,roughnessMap:l?await r(l):null,metalnessMap:f?await r(f):null,aoMap:d?await r(d):null,alphaMap:_?await r(_):null,matcap:i?await r(i):null}}}const re=(e,{renderer:n,camera:t,raycaster:r})=>{const a=u.computed(()=>n.value.domElement),{x:o,y:c}=y.usePointer({target:a}),{width:l,height:f,top:d,left:_}=y.useElementBounding(a),i=({x:w,y:A})=>{if(a.value)return{x:(w-_.value)/l.value*2-1,y:-((A-d.value)/f.value)*2+1}},s=({x:w,y:A})=>{if(t.value)return r.value.setFromCamera(new P.Vector2(w,A),t.value),r.value.intersectObjects(e.value,!1)},m=w=>{const A=i({x:(w==null?void 0:w.clientX)??o.value,y:(w==null?void 0:w.clientY)??c.value});return A?s(A)||[]:[]},g=u.computed(()=>m()),p=y.createEventHook(),M=y.createEventHook(),v=(w,A)=>{w.trigger({event:A,intersects:m(A)})},k=w=>{v(M,w)};let D;const O=w=>{var A;D=(A=m(w)[0])==null?void 0:A.object},b=w=>{var A;w instanceof PointerEvent&&D===((A=m(w)[0])==null?void 0:A.object)&&v(p,w)},S=w=>M.trigger({event:w,intersects:[]});return a.value.addEventListener("pointerup",b),a.value.addEventListener("pointerdown",O),a.value.addEventListener("pointermove",k),a.value.addEventListener("pointerleave",S),u.onUnmounted(()=>{a!=null&&a.value&&(a.value.removeEventListener("pointerup",b),a.value.removeEventListener("pointerdown",O),a.value.removeEventListener("pointermove",k),a.value.removeEventListener("pointerleave",S))}),{intersects:g,onClick:w=>p.on(w).off,onPointerMove:w=>M.on(w).off}};function ke(){const{logWarning:e}=E();function n(o,c,l){let f=null;return o.traverse(d=>{d[c]===l&&(f=d)}),f||e(`Child with ${c} '${l}' not found.`),f}function t(o,c,l){const f=[];return o.traverse(d=>{d[c].includes(l)&&f.push(d)}),f.length||e(`Children with ${c} '${l}' not found.`),f}function r(o,c){return n(o,"name",c)}function a(o,c){return t(o,"name",c)}return{seek:n,seekByName:r,seekAll:t,seekAllByName:a}}const ne=({scene:e,contextParts:n})=>{const t=u.reactive({click:new Map,pointerMove:new Map,pointerEnter:new Map,pointerLeave:new Map}),r=u.ref(new Set),a=s=>{r.value.add(s)},o=s=>{r.value.delete(s)},c=s=>{Object.values(t).forEach(m=>m.delete(s)),o(s)},l=s=>{const{onClick:m,onPointerMove:g,onPointerEnter:p,onPointerLeave:M}=s;m&&t.click.set(s,m),g&&t.pointerMove.set(s,g),p&&t.pointerEnter.set(s,p),M&&t.pointerLeave.set(s,M)};e.userData.tres__registerAtPointerEventHandler=l,e.userData.tres__deregisterAtPointerEventHandler=c,e.userData.tres__registerBlockingObjectAtPointerEventHandler=a,e.userData.tres__deregisterBlockingObjectAtPointerEventHandler=o;const f=u.computed(()=>he([...Array.from(r.value),...Object.values(t).map(s=>Array.from(s.keys())).flat()],({uuid:s})=>s)),{onClick:d,onPointerMove:_}=re(f,n);d(({intersects:s,event:m})=>{var g;s.length&&((g=t.click.get(s[0].object))==null||g(s[0],m))});let i;return _(({intersects:s,event:m})=>{var k,D,O,b;const g=(k=s==null?void 0:s[0])==null?void 0:k.object,{pointerLeave:p,pointerEnter:M,pointerMove:v}=t;i&&i!==g&&((D=p.get(i))==null||D(i,m)),g&&(i!==g&&((O=M.get(g))==null||O(s[0],m)),(b=v.get(g))==null||b(s[0],m)),i=g||null}),{registerObject:l,deregisterObject:c}};function De(e){let n=0;return e.traverse(t=>{if(t.isMesh&&t.geometry){const r=t.geometry,a=r.attributes.position.count*3*Float32Array.BYTES_PER_ELEMENT,o=r.index?r.index.count*Uint32Array.BYTES_PER_ELEMENT:0,c=r.attributes.normal?r.attributes.normal.count*3*Float32Array.BYTES_PER_ELEMENT:0,l=r.attributes.uv?r.attributes.uv.count*2*Float32Array.BYTES_PER_ELEMENT:0,f=a+o+c+l;n+=f}}),n}const V=u.ref({}),F=e=>Object.assign(V.value,e);function ae({scene:e,canvas:n,windowSize:t,disableRender:r,rendererOptions:a}){const o=u.computed(()=>y.toValue(t)?y.useWindowSize():y.useElementSize(y.toValue(n).parentElement)),c=u.computed(()=>o.value.width.value),l=u.computed(()=>o.value.height.value),f=u.computed(()=>c.value/l.value),d={height:l,width:c,aspectRatio:f},_=u.shallowRef(e),{camera:i,cameras:s,registerCamera:m,deregisterCamera:g,setCameraActive:p}=W({sizes:d,scene:e}),{renderer:M}=Z({scene:e,canvas:n,options:a,contextParts:{sizes:d,camera:i},disableRender:r}),v={sizes:d,scene:_,camera:i,cameras:u.readonly(s),renderer:M,raycaster:u.shallowRef(new P.Raycaster),controls:u.ref(null),perf:{maxFrames:160,fps:{value:0,accumulator:[]},memory:{currentMem:0,allocatedMem:0,accumulator:[]}},extend:F,registerCamera:m,setCameraActive:p,deregisterCamera:g};u.provide("useTres",v);const k=100,D=y.useFps({every:k}),{isSupported:O,memory:b}=y.useMemory({interval:k}),S=160;let w=performance.now();const A=({timestamp:R})=>{v.scene.value&&(v.perf.memory.allocatedMem=De(v.scene.value)),R-w>=k&&(w=R,v.perf.fps.accumulator.push(D.value),v.perf.fps.accumulator.length>S&&v.perf.fps.accumulator.shift(),v.perf.fps.value=D.value,O.value&&b.value&&(v.perf.memory.accumulator.push(b.value.usedJSHeapSize/1024/1024),v.perf.memory.accumulator.length>S&&v.perf.memory.accumulator.shift(),v.perf.memory.currentMem=v.perf.memory.accumulator.reduce((Ve,Fe)=>Ve+Fe,0)/v.perf.memory.accumulator.length))};let G=0;const je=1,{pause:xe,resume:Ne}=y.useRafFn(({delta:R})=>{window.__TRES__DEVTOOLS__&&(A({timestamp:performance.now()}),G+=R,G>=je&&(window.__TRES__DEVTOOLS__.cb(v),G=0))},{immediate:!0});return u.onUnmounted(()=>{xe()}),v}function oe(){const e=u.inject("useTres");if(!e)throw new Error("useTresContext must be used together with useTresContextProvider");return e}const Oe=oe;function ze(e){}let h=null;const{logError:se}=E(),$=["onClick","onPointerMove","onPointerEnter","onPointerLeave"],ie={createElement(e,n,t,r){var c,l;if(r||(r={}),r.args||(r.args=[]),e==="template"||ve(e))return null;let a=e.replace("Tres",""),o;if(e==="primitive"){(r==null?void 0:r.object)===void 0&&se("Tres primitives need a prop 'object'");const f=r.object;a=f.type,o=Object.assign(f,{type:a,attach:r.attach,primitive:!0})}else{const f=V.value[a];f||se(`${a} is not defined on the THREE namespace. Use extend to add it to the catalog.`),o=new f(...r.args)}return o.isCamera&&(r!=null&&r.position||o.position.set(3,3,3),r!=null&&r.lookAt||o.lookAt(0,0,0)),(r==null?void 0:r.attach)===void 0&&(o.isMaterial?o.attach="material":o.isBufferGeometry&&(o.attach="geometry")),o.isObject3D&&((c=r==null?void 0:r.material)!=null&&c.isMaterial&&(o.userData.tres__materialViaProp=!0),(l=r==null?void 0:r.geometry)!=null&&l.isBufferGeometry&&(o.userData.tres__geometryViaProp=!0)),o.userData={...o.userData,tres__name:a},o},insert(e,n){var r,a,o,c;n&&n.isScene&&(h=n);const t=n||h;if(e!=null&&e.isObject3D){if(e!=null&&e.isCamera){if(!(h!=null&&h.userData.tres__registerCamera))throw"could not find tres__registerCamera on scene's userData";(a=h==null?void 0:(r=h.userData).tres__registerCamera)==null||a.call(r,e)}if(e&&$.some(l=>e[l])){if(!(h!=null&&h.userData.tres__registerAtPointerEventHandler))throw"could not find tres__registerAtPointerEventHandler on scene's userData";(c=h==null?void 0:(o=h.userData).tres__registerAtPointerEventHandler)==null||c.call(o,e)}}e!=null&&e.isObject3D&&(t!=null&&t.isObject3D)?(t.add(e),e.dispatchEvent({type:"added"})):e!=null&&e.isFog?t.fog=e:typeof(e==null?void 0:e.attach)=="string"&&(e.__previousAttach=e[t==null?void 0:t.attach],t&&(t[e.attach]=e))},remove(e){var f,d,_;if(!e)return;const n=i=>{var m,g;const s=i;i.userData.tres__materialViaProp||((m=s.material)==null||m.dispose(),delete s.material),i.userData.tres__geometryViaProp||((g=s.geometry)==null||g.dispose(),delete s.geometry)},t=h==null?void 0:h.userData.tres__deregisterAtPointerEventHandler,r=h==null?void 0:h.userData.tres__deregisterBlockingObjectAtPointerEventHandler,a=i=>{var s,m;if(!r)throw"could not find tres__deregisterBlockingObjectAtPointerEventHandler on scene's userData";if((m=h==null?void 0:(s=h.userData).tres__deregisterBlockingObjectAtPointerEventHandler)==null||m.call(s,i),!t)throw"could not find tres__deregisterAtPointerEventHandler on scene's userData";i&&$.some(g=>i[g])&&(t==null||t(i))},o=i=>{const s=h==null?void 0:h.userData.tres__deregisterCamera;if(!s)throw"could not find tres__deregisterCamera on scene's userData";i.isCamera&&(s==null||s(i))},c=e==null?void 0:e.primitive,l=!c&&(e.dispose===void 0?e.dispose!==null:!1);if(e!=null&&e.isObject3D&&((f=e.parent)!=null&&f.isObject3D)&&(e.parent.remove(e),(d=e.removeFromParent)==null||d.call(e)),!c&&(e!=null&&e.isObject3D)){e.children.forEach(i=>ie.remove(i)),n(e),o(e),a==null||a(e);for(const i in e)i!=="geometry"&&i!=="material"&&((_=i.dispose)==null||_.call(i),delete e[i])}l&&e.dispose&&e.type!=="Scene"&&e.dispose()},patchProp(e,n,t,r){var a,o,c,l;if(e){let f=e,d=n;if(e.isObject3D&&d==="blocks-pointer-events"){r||r===""?(o=h==null?void 0:(a=h.userData).tres__registerBlockingObjectAtPointerEventHandler)==null||o.call(a,e):(l=h==null?void 0:(c=h.userData).tres__deregisterBlockingObjectAtPointerEventHandler)==null||l.call(c,e);return}let _=j(d),i=f==null?void 0:f[_];if(d==="args"){const m=e,g=t??[],p=r??[],M=e.userData.tres__name||e.type;M&&g.length&&!Ce(g,p)&&(f=Object.assign(m,new V.value[M](...r)));return}if(f.type==="BufferGeometry"){if(d==="args")return;f.setAttribute(j(d),new P.BufferAttribute(...r));return}if(d.includes("-")&&i===void 0){const m=d.split("-");i=m.reduce((g,p)=>g[j(p)],f),d=m.pop(),_=d.toLowerCase(),i!=null&&i.set||(f=m.reduce((g,p)=>g[j(p)],f))}let s=r;if(s===""&&(s=!0),ee(i)){$.includes(n)||(Array.isArray(s)?e[_](...s):e[_](s));return}!(i!=null&&i.set)&&!ee(i)?f[_]=s:i.constructor===s.constructor&&(i!=null&&i.copy)?i==null||i.copy(s):Array.isArray(s)?i.set(...s):!i.isColor&&i.setScalar?i.setScalar(s):i.set(s)}},parentNode(e){return(e==null?void 0:e.parent)||null},createText:()=>void 0,createComment:()=>void 0,setText:()=>void 0,setElementText:()=>void 0,nextSibling:()=>void 0,querySelector:()=>void 0,setScopeId:()=>void 0,cloneNode:()=>void 0,insertStaticContent:()=>void 0},{render:Se}=u.createRenderer(ie);F(ce);const Ee=["data-scene"],le=u.defineComponent({__name:"TresCanvas",props:{shadows:{type:Boolean,default:void 0},clearColor:{},toneMapping:{},shadowMapType:{},useLegacyLights:{type:Boolean,default:void 0},outputColorSpace:{},toneMappingExposure:{},camera:{},preset:{},windowSize:{type:Boolean,default:void 0},disableRender:{type:Boolean,default:void 0},context:{},precision:{},alpha:{type:Boolean,default:void 0},premultipliedAlpha:{type:Boolean},antialias:{type:Boolean,default:void 0},stencil:{type:Boolean,default:void 0},preserveDrawingBuffer:{type:Boolean,default:void 0},powerPreference:{},depth:{type:Boolean,default:void 0},logarithmicDepthBuffer:{type:Boolean,default:void 0},failIfMajorPerformanceCaveat:{type:Boolean,default:void 0}},setup(e,{expose:n}){var g;const t=e,{logWarning:r}=E(),a=u.ref(),o=u.shallowRef(new P.Scene);I();const c=u.useSlots(),l=(g=u.getCurrentInstance())==null?void 0:g.appContext.app;let f=null;const d=p=>u.defineComponent({setup(){var v;const M=(v=u.getCurrentInstance())==null?void 0:v.appContext;return M&&(M.app=l),u.provide("useTres",p),u.provide("extend",F),()=>u.h(u.Fragment,null,c!=null&&c.default?c.default():[])}}),_=p=>{f=d(p),Se(u.h(f),o.value)},i=p=>{N(o.value),o.value=null},s=u.computed(()=>t.disableRender),m=u.shallowRef(null);return n({context:m,dispose:()=>i(m.value)}),u.onMounted(()=>{const p=a;m.value=ae({scene:o.value,canvas:p,windowSize:t.windowSize,disableRender:s,rendererOptions:t}),ne({scene:o.value,contextParts:m.value});const{registerCamera:M,camera:v,cameras:k,deregisterCamera:D}=m.value;_(m.value);const O=()=>{const b=new P.PerspectiveCamera(45,window.innerWidth/window.innerHeight,.1,1e3);b.position.set(3,3,3),b.lookAt(0,0,0),M(b);const S=u.watchEffect(()=>{k.value.length>=2&&(b.removeFromParent(),D(b),S==null||S())})};u.watch(()=>t.camera,(b,S)=>{b&&M(b),S&&(S.removeFromParent(),D(S))},{immediate:!0}),v.value||(r("No camera found. Creating a default perspective camera. To have full control over a camera, please add one to the scene."),O())}),u.onUnmounted(()=>{m.value&&i(m.value)}),(p,M)=>(u.openBlock(),u.createElementBlock("canvas",{ref_key:"canvas",ref:a,"data-scene":o.value.uuid,class:u.normalizeClass(p.$attrs.class),style:u.normalizeStyle({display:"block",width:"100%",height:"100%",position:p.windowSize?"fixed":"relative",top:0,left:0,pointerEvents:"auto",touchAction:"none",...p.$attrs.style})},null,14,Ee))}}),Le=["TresCanvas","TresLeches","TresScene"],Be={template:{compilerOptions:{isCustomElement:e=>e.startsWith("Tres")&&!Le.includes(e)||e==="primitive"}}},Te={install(e){e.component("TresCanvas",le)}};C.TresCanvas=le,C.catalogue=V,C.default=Te,C.dispose=N,C.extend=F,C.isProd=pe,C.normalizeColor=Y,C.normalizeVectorFlexibleParam=ge,C.templateCompilerOptions=Be,C.trasverseObjects=te,C.useCamera=W,C.useLoader=be,C.useLogger=E,C.usePointerEventHandler=ne,C.useRaycaster=re,C.useRenderLoop=I,C.useRenderer=Z,C.useSeek=ke,C.useTexture=Ae,C.useTres=Oe,C.useTresContext=oe,C.useTresContextProvider=ae,Object.defineProperties(C,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
8
+ (function(h,u){typeof exports=="object"&&typeof module<"u"?u(exports,require("vue"),require("three"),require("@vueuse/core")):typeof define=="function"&&define.amd?define(["exports","vue","three","@vueuse/core"],u):(h=typeof globalThis<"u"?globalThis:h||self,u(h.tres={},h.Vue,h.Three,h.VueUseCore))})(this,function(h,u,f,v){"use strict";var _t=Object.defineProperty;var Ct=(h,u,f)=>u in h?_t(h,u,{enumerable:!0,configurable:!0,writable:!0,value:f}):h[u]=f;var Q=(h,u,f)=>(Ct(h,typeof u!="symbol"?u+"":u,f),f);function Ce(e){const r=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const t in e)if(t!=="default"){const n=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(r,t,n.get?n:{enumerable:!0,get:()=>e[t]})}}return r.default=e,Object.freeze(r)}const Y=Ce(f),Me={name:"@tresjs/core",type:"module",version:"3.7.0",packageManager:"pnpm@8.10.2",description:"Declarative ThreeJS using Vue Components",author:"Alvaro Saburido <hola@alvarosaburido.dev> (https://github.com/alvarosabu/)",license:"MIT",keywords:["vue","3d","threejs","three","threejs-vue"],sideEffects:!1,exports:{".":{types:"./dist/index.d.ts",require:"./dist/tres.umd.cjs",import:"./dist/tres.js"},"./components":{types:"./dist/components/index.d.ts"},"./composables":{types:"./dist/composables/index.d.ts"},"./types":{types:"./dist/types/index.d.ts"},"./utils":{types:"./dist/utils/index.d.ts"},"./*":"./*"},main:"./dist/tres.js",module:"./dist/tres.js",types:"./dist/index.d.ts",files:["dist","*.d.ts"],publishConfig:{access:"public"},scripts:{dev:"cd playground && npm run dev",build:"vite build",playground:"cd playground && npm run dev",test:"vitest","test:ci":"vitest run","test:ui":"vitest --ui",release:"release-it",coverage:"vitest run --coverage",lint:"eslint . --ext .js,.jsx,.ts,.tsx,.vue","docs:dev":"vitepress dev docs","docs:build":"vitepress build docs","docs:serve":"vitepress serve docs","docs:preview":"vitepress preview docs","docs:contributors":"esno scripts/update-contributors.ts"},peerDependencies:{three:">=0.133",vue:">=3.3"},dependencies:{"@alvarosabu/utils":"^3.1.1","@vueuse/core":"^10.7.0"},devDependencies:{"@release-it/conventional-changelog":"^8.0.1","@stackblitz/sdk":"^1.9.0","@tresjs/cientos":"3.6.0","@tresjs/eslint-config-vue":"^0.2.1","@types/three":"^0.159.0","@typescript-eslint/eslint-plugin":"^6.14.0","@typescript-eslint/parser":"^6.14.0","@vitejs/plugin-vue":"^4.5.2","@vitest/coverage-c8":"^0.33.0","@vitest/ui":"^1.0.4","@vue/test-utils":"^2.4.3",eslint:"^8.55.0","eslint-plugin-vue":"^9.19.2",esno:"^4.0.0",gsap:"^3.12.3",jsdom:"^23.0.1",kolorist:"^1.8.0",ohmyfetch:"^0.4.21",pathe:"^1.1.1","release-it":"^17.0.1","rollup-plugin-analyzer":"^4.0.0","rollup-plugin-copy":"^3.5.0","rollup-plugin-visualizer":"^5.11.0",three:"^0.159.0",unocss:"^0.58.0",unplugin:"^1.5.1","unplugin-vue-components":"^0.26.0",vite:"^5.0.8","vite-plugin-banner":"^0.7.1","vite-plugin-dts":"3.6.4","vite-plugin-inspect":"^0.8.1","vite-plugin-require-transform":"^1.0.21","vite-svg-loader":"^5.1.0",vitepress:"1.0.0-rc.31",vitest:"^1.0.4",vue:"^3.3.11","vue-demi":"^0.14.6"}},K=({sizes:e,scene:r})=>{const t=u.ref([]),n=u.computed(()=>t.value[0]),s=(i,l=!1)=>{t.value.some(({uuid:d})=>d===i.uuid)||(l?o(i):t.value.push(i))},a=i=>{t.value=t.value.filter(({uuid:l})=>l!==i.uuid)},o=i=>{const l=i instanceof f.Camera?i:t.value.find(g=>g.uuid===i);if(!l)return;const d=t.value.filter(({uuid:g})=>g!==l.uuid);t.value=[l,...d]};return u.watchEffect(()=>{e.aspectRatio.value&&t.value.forEach(i=>{i instanceof f.PerspectiveCamera&&(i.aspect=e.aspectRatio.value),(i instanceof f.PerspectiveCamera||i instanceof f.OrthographicCamera)&&i.updateProjectionMatrix()})}),r.userData.tres__registerCamera=s,r.userData.tres__deregisterCamera=a,u.onUnmounted(()=>{t.value=[]}),{camera:n,cameras:t,registerCamera:s,deregisterCamera:a,setCameraActive:o}},X=v.createEventHook(),Z=v.createEventHook(),R=v.createEventHook(),j=new f.Clock;let $=0,I=0;const{pause:Se,resume:Pe,isActive:ke}=v.useRafFn(()=>{X.trigger({delta:$,elapsed:I,clock:j}),Z.trigger({delta:$,elapsed:I,clock:j}),R.trigger({delta:$,elapsed:I,clock:j})},{immediate:!1});R.on(()=>{$=j.getDelta(),I=j.getElapsedTime()});const E=()=>({onBeforeLoop:X.on,onLoop:Z.on,onAfterLoop:R.on,pause:Se,resume:Pe,isActive:ke}),Ae=!0,ee="[TresJS ▲ ■ ●] ";function x(){function e(n,s){console.error(`${ee} ${n}`,s||"")}function r(n){console.warn(`${ee} ${n}`)}function t(n,s){}return{logError:e,logWarning:r,logMessage:t}}function Le(e){return typeof e=="number"?[e,e,e]:e instanceof f.Vector3?[e.x,e.y,e.z]:e}function te(e){return e instanceof f.Color?e:Array.isArray(e)?new f.Color(...e):new f.Color(e)}class Oe extends Y.Mesh{constructor(...t){super(...t);Q(this,"type","HightlightMesh");Q(this,"createTime");this.createTime=Date.now()}onBeforeRender(){const n=(Date.now()-this.createTime)/1e3,o=1+.07*Math.sin(2.5*n);this.scale.set(o,o,o)}}const re=(e,r)=>{for(const t of Object.keys(r))r[t]instanceof Object&&Object.assign(r[t],re(e[t],r[t]));return Object.assign(e||{},r),e},xe=De("html,body,base,head,link,meta,style,title,address,article,aside,footer,header,hgroup,h1,h2,h3,h4,h5,h6,nav,section,div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,ruby,s,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,output,progress,select,textarea,details,dialog,menu,summary,template,blockquote,iframe,tfoot");function ne(e){return e&&e.nodeType===1}function z(e){return e.replace(/-([a-z])/g,(r,t)=>t.toUpperCase())}function De(e,r){const t=Object.create(null),n=e.split(",");for(let s=0;s<n.length;s++)t[n[s]]=!0;return r?s=>!!t[s.toLowerCase()]:s=>!!t[s]}const Be=(e,r)=>{const t=new Set,n=[];for(const s of e){const a=r(s);t.has(a)||(t.add(a),n.push(s))}return n},oe=(e,r)=>{if(!r)return;const t=Array.isArray(r)?r:r.match(/([^[.\]])+/g);return t==null?void 0:t.reduce((n,s)=>n&&n[s],e)},Te=(e,r,t)=>{const n=Array.isArray(r)?r:r.match(/([^[.\]])+/g);n&&n.reduce((s,a,o)=>(s[a]===void 0&&(s[a]={}),o===n.length-1&&(s[a]=t),s[a]),e)};function se(e,r){if(ne(e)&&ne(r)){const s=e.attributes,a=r.attributes;return s.length!==a.length?!1:Array.from(s).every(({name:o,value:i})=>r.getAttribute(o)===i)}if(e===r)return!0;if(e===null||typeof e!="object"||r===null||typeof r!="object")return!1;const t=Object.keys(e),n=Object.keys(r);if(t.length!==n.length)return!1;for(const s of t)if(!n.includes(s)||!se(e[s],r[s]))return!1;return!0}function je(e,r){if(!Array.isArray(e)||!Array.isArray(r)||e.length!==r.length)return!1;for(let t=0;t<e.length;t++)if(!se(e[t],r[t]))return!1;return!0}const Ve=Array.isArray;function $e(e,r,t,n){const s=l=>{if(l.uuid===r)return l;for(const d of l.children){const g=s(d);if(g)return g}},a=s(e);if(!a){console.warn("Object with UUID not found in the scene.");return}let o=a;for(let l=0;l<t.length-1;l++)if(o[t[l]]!==void 0)o=o[t[l]];else{console.warn(`Property path is not valid: ${t.join(".")}`);return}const i=t[t.length-1];o[i]!==void 0?o[i]=n:console.warn(`Property path is not valid: ${t.join(".")}`)}function Ie(e){const r=new f.MeshBasicMaterial({color:11003607,transparent:!0,opacity:.2,depthTest:!1,side:f.DoubleSide});return new Oe(e.geometry.clone(),r)}function ie(e){var t;let r=e.value;return e.value&&((t=e.value)!=null&&t.isMesh)&&(r=e.value.position),Array.isArray(e.value)&&(r=new f.Vector3(...r)),r}const Ee=Number.parseInt(f.REVISION.replace("dev","")),N={realistic:{shadows:!0,physicallyCorrectLights:!0,outputColorSpace:f.SRGBColorSpace,toneMapping:f.ACESFilmicToneMapping,toneMappingExposure:3,shadowMap:{enabled:!0,type:f.PCFSoftShadowMap}}};function ae({scene:e,canvas:r,options:t,disableRender:n,contextParts:{sizes:s,camera:a}}){const o=u.computed(()=>({alpha:v.toValue(t.alpha),depth:v.toValue(t.depth),canvas:v.unrefElement(r),context:v.toValue(t.context),stencil:v.toValue(t.stencil),antialias:v.toValue(t.antialias)===void 0?!0:v.toValue(t.antialias),precision:v.toValue(t.precision),powerPreference:v.toValue(t.powerPreference),premultipliedAlpha:v.toValue(t.premultipliedAlpha),preserveDrawingBuffer:v.toValue(t.preserveDrawingBuffer),logarithmicDepthBuffer:v.toValue(t.logarithmicDepthBuffer),failIfMajorPerformanceCaveat:v.toValue(t.failIfMajorPerformanceCaveat)})),i=u.shallowRef(new f.WebGLRenderer(o.value));u.watch(o,()=>{i.value.dispose(),i.value=new f.WebGLRenderer(o.value)}),u.watchEffect(()=>{i.value.setSize(s.width.value,s.height.value)});const{pixelRatio:l}=v.useDevicePixelRatio();u.watchEffect(()=>{i.value.setPixelRatio(l.value)});const{logError:d}=x(),p=(()=>{const m=new f.WebGLRenderer,_={shadowMap:{enabled:m.shadowMap.enabled,type:m.shadowMap.type},toneMapping:m.toneMapping,toneMappingExposure:m.toneMappingExposure,outputColorSpace:m.outputColorSpace};return m.dispose(),_})();u.watchEffect(()=>{const m=v.toValue(t.preset);m&&(m in N||d(`Renderer Preset must be one of these: ${Object.keys(N).join(", ")}`),re(i.value,N[m]));const _=(A,L)=>{const S=v.toValue(A),O=()=>{if(m)return oe(N[m],L)};if(S!==void 0)return S;const b=O();return b!==void 0?b:oe(p,L)},P=(A,L)=>Te(i.value,L,_(A,L));P(t.shadows,"shadowMap.enabled"),P(t.toneMapping,"toneMapping"),P(t.shadowMapType,"shadowMap.type"),Ee<150&&P(!t.useLegacyLights,"physicallyCorrectLights"),P(t.outputColorSpace,"outputColorSpace"),P(t.toneMappingExposure,"toneMappingExposure");const M=_(t.clearColor,"clearColor");M&&i.value.setClearColor(M?te(M):new f.Color(0))});const{pause:c,resume:w,onLoop:C}=E();return C(()=>{a.value&&!v.toValue(n)&&i.value.render(e,a.value)}),w(),u.onUnmounted(()=>{c(),i.value.dispose(),i.value.forceContextLoss()}),{renderer:i}}const le=e=>typeof e=="function",ze=e=>!!e&&e.constructor===Array;function ue(e){const r={nodes:{},materials:{}};return e&&e.traverse(t=>{t.name&&(r.nodes[t.name]=t),t.material&&!r.materials[t.material.name]&&(r.materials[t.material.name]=t.material)}),r}async function Ne(e,r,t,n,s){const{logError:a}=x(),o=new e;s&&s(o),t&&t(o);const l=(Array.isArray(r)?r:[r]).map(d=>new Promise((g,p)=>{o.load(d,c=>{c.scene&&Object.assign(c,ue(c.scene)),g(c)},n,c=>p(a("[useLoader] - Failed to load resource",c)))}));return ze(r)?await Promise.all(l):await l[0]}async function Ue(e){const r=new f.LoadingManager,t=new f.TextureLoader(r),n=s=>new Promise((a,o)=>{t.load(s,i=>a(i),()=>null,()=>{o(new Error("[useTextures] - Failed to load texture"))})});if(Ve(e)){const s=await Promise.all(e.map(a=>n(a)));return e.length>1?s:s[0]}else{const{map:s,displacementMap:a,normalMap:o,roughnessMap:i,metalnessMap:l,aoMap:d,alphaMap:g,matcap:p}=e;return{map:s?await n(s):null,displacementMap:a?await n(a):null,normalMap:o?await n(o):null,roughnessMap:i?await n(i):null,metalnessMap:l?await n(l):null,aoMap:d?await n(d):null,alphaMap:g?await n(g):null,matcap:p?await n(p):null}}}const ce=(e,{renderer:r,camera:t,raycaster:n})=>{const s=u.computed(()=>r.value.domElement),{x:a,y:o}=v.usePointer({target:s}),{width:i,height:l,top:d,left:g}=v.useElementBounding(s),p=({x:b,y:k})=>{if(s.value)return{x:(b-g.value)/i.value*2-1,y:-((k-d.value)/l.value)*2+1}},c=({x:b,y:k})=>{if(t.value)return n.value.setFromCamera(new f.Vector2(b,k),t.value),n.value.intersectObjects(e.value,!1)},w=b=>{const k=p({x:(b==null?void 0:b.clientX)??a.value,y:(b==null?void 0:b.clientY)??o.value});return k?c(k)||[]:[]},C=u.computed(()=>w()),m=v.createEventHook(),_=v.createEventHook(),P=(b,k)=>{b.trigger({event:k,intersects:w(k)})},M=b=>{P(_,b)};let A;const L=b=>{var k;A=(k=w(b)[0])==null?void 0:k.object},S=b=>{var k;b instanceof PointerEvent&&A===((k=w(b)[0])==null?void 0:k.object)&&P(m,b)},O=b=>_.trigger({event:b,intersects:[]});return s.value.addEventListener("pointerup",S),s.value.addEventListener("pointerdown",L),s.value.addEventListener("pointermove",M),s.value.addEventListener("pointerleave",O),u.onUnmounted(()=>{s!=null&&s.value&&(s.value.removeEventListener("pointerup",S),s.value.removeEventListener("pointerdown",L),s.value.removeEventListener("pointermove",M),s.value.removeEventListener("pointerleave",O))}),{intersects:C,onClick:b=>m.on(b).off,onPointerMove:b=>_.on(b).off}};function We(){const{logWarning:e}=x();function r(a,o,i){let l=null;return a.traverse(d=>{d[o]===i&&(l=d)}),l||e(`Child with ${o} '${i}' not found.`),l}function t(a,o,i){const l=[];return a.traverse(d=>{d[o].includes(i)&&l.push(d)}),l.length||e(`Children with ${o} '${i}' not found.`),l}function n(a,o){return r(a,"name",o)}function s(a,o){return t(a,"name",o)}return{seek:r,seekByName:n,seekAll:t,seekAllByName:s}}const de=({scene:e,contextParts:r})=>{const t=u.reactive({click:new Map,pointerMove:new Map,pointerEnter:new Map,pointerLeave:new Map}),n=u.ref(new Set),s=c=>{n.value.add(c)},a=c=>{n.value.delete(c)},o=c=>{Object.values(t).forEach(w=>w.delete(c)),a(c)},i=c=>{const{onClick:w,onPointerMove:C,onPointerEnter:m,onPointerLeave:_}=c;w&&t.click.set(c,w),C&&t.pointerMove.set(c,C),m&&t.pointerEnter.set(c,m),_&&t.pointerLeave.set(c,_)};e.userData.tres__registerAtPointerEventHandler=i,e.userData.tres__deregisterAtPointerEventHandler=o,e.userData.tres__registerBlockingObjectAtPointerEventHandler=s,e.userData.tres__deregisterBlockingObjectAtPointerEventHandler=a;const l=u.computed(()=>Be([...Array.from(n.value),...Object.values(t).map(c=>Array.from(c.keys())).flat()],({uuid:c})=>c)),{onClick:d,onPointerMove:g}=ce(l,r);d(({intersects:c,event:w})=>{var C;c.length&&((C=t.click.get(c[0].object))==null||C(c[0],w))});let p;return g(({intersects:c,event:w})=>{var M,A,L,S;const C=(M=c==null?void 0:c[0])==null?void 0:M.object,{pointerLeave:m,pointerEnter:_,pointerMove:P}=t;p&&p!==C&&((A=m.get(p))==null||A(p,w)),C&&(p!==C&&((L=_.get(C))==null||L(c[0],w)),(S=P.get(C))==null||S(c[0],w)),p=C||null}),{registerObject:i,deregisterObject:o}};function fe(e){let r=0;return e.traverse(t=>{if(t.isMesh&&t.geometry){const n=t.geometry,s=n.attributes.position.count*3*Float32Array.BYTES_PER_ELEMENT,a=n.index?n.index.count*Uint32Array.BYTES_PER_ELEMENT:0,o=n.attributes.normal?n.attributes.normal.count*3*Float32Array.BYTES_PER_ELEMENT:0,i=n.attributes.uv?n.attributes.uv.count*2*Float32Array.BYTES_PER_ELEMENT:0,l=s+a+o+i;r+=l}}),r}function Fe(e){return(e/1024).toFixed(2)}const U=u.ref({}),W=e=>Object.assign(U.value,e);function pe({scene:e,canvas:r,windowSize:t,disableRender:n,rendererOptions:s}){const a=u.computed(()=>v.toValue(t)?v.useWindowSize():v.useElementSize(v.toValue(r).parentElement)),o=u.shallowRef({width:0,height:0}),i=v.refDebounced(o,10),l=u.watchEffect(()=>{o.value={width:a.value.width.value,height:a.value.height.value}}),d=u.computed(()=>i.value.width/i.value.height),g={height:u.computed(()=>i.value.height),width:u.computed(()=>i.value.width),aspectRatio:d},p=u.shallowRef(e),{camera:c,cameras:w,registerCamera:C,deregisterCamera:m,setCameraActive:_}=K({sizes:g,scene:e}),{renderer:P}=ae({scene:e,canvas:r,options:s,contextParts:{sizes:g,camera:c},disableRender:n}),M={sizes:g,scene:p,camera:c,cameras:u.readonly(w),renderer:P,raycaster:u.shallowRef(new f.Raycaster),controls:u.ref(null),perf:{maxFrames:160,fps:{value:0,accumulator:[]},memory:{currentMem:0,allocatedMem:0,accumulator:[]}},extend:W,registerCamera:C,setCameraActive:_,deregisterCamera:m};u.provide("useTres",M);const A=100,L=v.useFps({every:A}),{isSupported:S,memory:O}=v.useMemory({interval:A}),b=160;let k=performance.now();const ht=({timestamp:G})=>{M.scene.value&&(M.perf.memory.allocatedMem=fe(M.scene.value)),G-k>=A&&(k=G,M.perf.fps.accumulator.push(L.value),M.perf.fps.accumulator.length>b&&M.perf.fps.accumulator.shift(),M.perf.fps.value=L.value,S.value&&O.value&&(M.perf.memory.accumulator.push(O.value.usedJSHeapSize/1024/1024),M.perf.memory.accumulator.length>b&&M.perf.memory.accumulator.shift(),M.perf.memory.currentMem=M.perf.memory.accumulator.reduce((wt,bt)=>wt+bt,0)/M.perf.memory.accumulator.length))};let J=0;const vt=1,{pause:yt,resume:Rt}=v.useRafFn(({delta:G})=>{window.__TRES__DEVTOOLS__&&(ht({timestamp:performance.now()}),J+=G,J>=vt&&(window.__TRES__DEVTOOLS__.cb(M),J=0))},{immediate:!0});return u.onUnmounted(()=>{l(),yt()}),M}function me(){const e=u.inject("useTres");if(!e)throw new Error("useTresContext must be used together with useTresContextProvider");return e}const Ge=me;function Ft(e){}let y=null;const{logError:ge}=x(),q=["onClick","onPointerMove","onPointerEnter","onPointerLeave"],Re={createElement(e,r,t,n){var o,i;if(n||(n={}),n.args||(n.args=[]),e==="template"||xe(e))return null;let s=e.replace("Tres",""),a;if(e==="primitive"){(n==null?void 0:n.object)===void 0&&ge("Tres primitives need a prop 'object'");const l=n.object;s=l.type,a=Object.assign(l,{type:s,attach:n.attach,primitive:!0})}else{const l=U.value[s];l||ge(`${s} is not defined on the THREE namespace. Use extend to add it to the catalog.`),a=new l(...n.args)}return a.isCamera&&(n!=null&&n.position||a.position.set(3,3,3),n!=null&&n.lookAt||a.lookAt(0,0,0)),(n==null?void 0:n.attach)===void 0&&(a.isMaterial?a.attach="material":a.isBufferGeometry&&(a.attach="geometry")),a.isObject3D&&((o=n==null?void 0:n.material)!=null&&o.isMaterial&&(a.userData.tres__materialViaProp=!0),(i=n==null?void 0:n.geometry)!=null&&i.isBufferGeometry&&(a.userData.tres__geometryViaProp=!0)),a.userData={...a.userData,tres__name:s},a},insert(e,r){var n,s,a,o;r&&r.isScene&&(y=r);const t=r||y;if(e!=null&&e.isObject3D){if(e!=null&&e.isCamera){if(!(y!=null&&y.userData.tres__registerCamera))throw"could not find tres__registerCamera on scene's userData";(s=y==null?void 0:(n=y.userData).tres__registerCamera)==null||s.call(n,e)}if(e&&q.some(i=>e[i])){if(!(y!=null&&y.userData.tres__registerAtPointerEventHandler))throw"could not find tres__registerAtPointerEventHandler on scene's userData";(o=y==null?void 0:(a=y.userData).tres__registerAtPointerEventHandler)==null||o.call(a,e)}}e!=null&&e.isObject3D&&(t!=null&&t.isObject3D)?(t.add(e),e.dispatchEvent({type:"added"})):e!=null&&e.isFog?t.fog=e:typeof(e==null?void 0:e.attach)=="string"&&(e.__previousAttach=e[t==null?void 0:t.attach],t&&(t[e.attach]=e))},remove(e){var r,t;if(e){if(e.isObject3D){const n=e,s=d=>{var p,c;const g=d;d.userData.tres__materialViaProp||((p=g.material)==null||p.dispose(),g.material=void 0),d.userData.tres__geometryViaProp||((c=g.geometry)==null||c.dispose(),g.geometry=void 0)},a=y==null?void 0:y.userData.tres__deregisterAtPointerEventHandler,o=y==null?void 0:y.userData.tres__deregisterBlockingObjectAtPointerEventHandler,i=d=>{var g,p;if(!o)throw"could not find tres__deregisterBlockingObjectAtPointerEventHandler on scene's userData";if((p=y==null?void 0:(g=y.userData).tres__deregisterBlockingObjectAtPointerEventHandler)==null||p.call(g,d),!a)throw"could not find tres__deregisterAtPointerEventHandler on scene's userData";d&&q.some(c=>d[c])&&(a==null||a(d))},l=d=>{const g=y==null?void 0:y.userData.tres__deregisterCamera;if(!g)throw"could not find tres__deregisterCamera on scene's userData";d.isCamera&&(g==null||g(d))};(r=e.removeFromParent)==null||r.call(e),n.traverse(d=>{s(d),l(d),i==null||i(d)}),s(n),l(n),i==null||i(n)}(t=e.dispose)==null||t.call(e)}},patchProp(e,r,t,n){var s,a,o,i;if(e){let l=e,d=r;if(e.isObject3D&&d==="blocks-pointer-events"){n||n===""?(a=y==null?void 0:(s=y.userData).tres__registerBlockingObjectAtPointerEventHandler)==null||a.call(s,e):(i=y==null?void 0:(o=y.userData).tres__deregisterBlockingObjectAtPointerEventHandler)==null||i.call(o,e);return}let g=z(d),p=l==null?void 0:l[g];if(d==="args"){const w=e,C=t??[],m=n??[],_=e.userData.tres__name||e.type;_&&C.length&&!je(C,m)&&(l=Object.assign(w,new U.value[_](...n)));return}if(l.type==="BufferGeometry"){if(d==="args")return;l.setAttribute(z(d),new f.BufferAttribute(...n));return}if(d.includes("-")&&p===void 0){const w=d.split("-");p=w.reduce((C,m)=>C[z(m)],l),d=w.pop(),g=d.toLowerCase(),p!=null&&p.set||(l=w.reduce((C,m)=>C[z(m)],l))}let c=n;if(c===""&&(c=!0),le(p)){q.includes(r)||(Array.isArray(c)?e[g](...c):e[g](c));return}!(p!=null&&p.set)&&!le(p)?l[g]=c:p.constructor===c.constructor&&(p!=null&&p.copy)?p==null||p.copy(c):Array.isArray(c)?p.set(...c):!p.isColor&&p.setScalar?p.setScalar(c):p.set(c)}},parentNode(e){return(e==null?void 0:e.parent)||null},createText:()=>void 0,createComment:()=>void 0,setText:()=>void 0,setElementText:()=>void 0,nextSibling:()=>void 0,querySelector:()=>void 0,setScopeId:()=>void 0,cloneNode:()=>void 0,insertStaticContent:()=>void 0},{render:qe}=u.createRenderer(Re);W(Y);function He(){return he().__VUE_DEVTOOLS_GLOBAL_HOOK__}function he(){return typeof navigator<"u"&&typeof window<"u"?window:typeof global<"u"?global:{}}const Je=typeof Proxy=="function",Qe="devtools-plugin:setup",Ye="plugin:settings:set";let T,H;function Ke(){var e;return T!==void 0||(typeof window<"u"&&window.performance?(T=!0,H=window.performance):typeof global<"u"&&(!((e=global.perf_hooks)===null||e===void 0)&&e.performance)?(T=!0,H=global.perf_hooks.performance):T=!1),T}function Xe(){return Ke()?H.now():Date.now()}class Ze{constructor(r,t){this.target=null,this.targetQueue=[],this.onQueue=[],this.plugin=r,this.hook=t;const n={};if(r.settings)for(const o in r.settings){const i=r.settings[o];n[o]=i.defaultValue}const s=`__vue-devtools-plugin-settings__${r.id}`;let a=Object.assign({},n);try{const o=localStorage.getItem(s),i=JSON.parse(o);Object.assign(a,i)}catch{}this.fallbacks={getSettings(){return a},setSettings(o){try{localStorage.setItem(s,JSON.stringify(o))}catch{}a=o},now(){return Xe()}},t&&t.on(Ye,(o,i)=>{o===this.plugin.id&&this.fallbacks.setSettings(i)}),this.proxiedOn=new Proxy({},{get:(o,i)=>this.target?this.target.on[i]:(...l)=>{this.onQueue.push({method:i,args:l})}}),this.proxiedTarget=new Proxy({},{get:(o,i)=>this.target?this.target[i]:i==="on"?this.proxiedOn:Object.keys(this.fallbacks).includes(i)?(...l)=>(this.targetQueue.push({method:i,args:l,resolve:()=>{}}),this.fallbacks[i](...l)):(...l)=>new Promise(d=>{this.targetQueue.push({method:i,args:l,resolve:d})})})}async setRealTarget(r){this.target=r;for(const t of this.onQueue)this.target.on[t.method](...t.args);for(const t of this.targetQueue)t.resolve(await this.target[t.method](...t.args))}}function et(e,r){const t=e,n=he(),s=He(),a=Je&&t.enableEarlyProxy;if(s&&(n.__VUE_DEVTOOLS_PLUGIN_API_AVAILABLE__||!a))s.emit(Qe,e,r);else{const o=a?new Ze(t,s):null;(n.__VUE_DEVTOOLS_PLUGINS__=n.__VUE_DEVTOOLS_PLUGINS__||[]).push({pluginDescriptor:t,setupFn:r,proxy:o}),o&&r(o.proxiedTarget)}}function tt(e,r){const t=`▲ ■ ●${e}`;typeof __VUE_DEVTOOLS_TOAST__=="function"?__VUE_DEVTOOLS_TOAST__(t,r):r==="error"?console.error(t):r==="warn"?console.warn(t):console.log(t)}const ve=e=>{const r={id:e.uuid,label:e.type,children:[],tags:[]};e.name!==""&&r.tags.push({label:e.name,textColor:5750629,backgroundColor:15793395});const t=fe(e);return t>0&&r.tags.push({label:`${Fe(t)} KB`,textColor:15707189,backgroundColor:16775644,tooltip:"Memory usage"}),e.type.includes("Light")&&(r.tags.push({label:`${e.intensity}`,textColor:9738662,backgroundColor:16316922,tooltip:"Intensity"}),r.tags.push({label:`#${e.color.getHexString()}`,textColor:9738662,backgroundColor:16316922,tooltip:"Color"})),e.type.includes("Camera")&&(r.tags.push({label:`${e.fov}°`,textColor:9738662,backgroundColor:16316922,tooltip:"Field of view"}),r.tags.push({label:`x: ${Math.round(e.position.x)} y: ${Math.round(e.position.y)} z: ${Math.round(e.position.z)}`,textColor:9738662,backgroundColor:16316922,tooltip:"Position"})),r};function ye(e,r){e.children.forEach(t=>{if(t.type==="HightlightMesh")return;const n=ve(t);r.children.push(n),ye(t,n)})}const rt=[],V="tres:inspector",nt=u.reactive({sceneGraph:null});function ot(e,r){et({id:"dev.esm.tres",label:"TresJS 🪐",logo:"https://raw.githubusercontent.com/Tresjs/tres/main/public/favicon.svg",packageName:"tresjs",homepage:"https://tresjs.org",componentStateTypes:rt,app:e},t=>{typeof t.now!="function"&&tt("You seem to be using an outdated version of Vue Devtools. Are you still using the Beta release instead of the stable one? You can find the links at https://devtools.vuejs.org/guide/installation.html."),t.addInspector({id:V,label:"TresJS 🪐",icon:"account_tree",treeFilterPlaceholder:"Search instances"}),setInterval(()=>{t.sendInspectorTree(V)},1e3),setInterval(()=>{t.notifyComponentUpdate()},5e3),t.on.getInspectorTree(a=>{if(a.inspectorId===V){const o=ve(r.scene.value);ye(r.scene.value,o),nt.sceneGraph=o,a.rootNodes=[o]}});let n=null,s=null;t.on.getInspectorState(a=>{if(a.inspectorId===V){const[o]=r.scene.value.getObjectsByProperty("uuid",a.nodeId);if(!o)return;if(s&&n&&n.parent&&s.remove(n),o.isMesh){const i=Ie(o);o.add(i),n=i,s=o}a.state={object:[{key:"uuid",editable:!0,value:o.uuid},{key:"name",editable:!0,value:o.name},{key:"type",editable:!0,value:o.type},{key:"position",editable:!0,value:o.position},{key:"rotation",editable:!0,value:o.rotation},{key:"scale",editable:!0,value:o.scale},{key:"geometry",value:o.geometry},{key:"material",value:o.material},{key:"color",editable:!0,value:o.color},{key:"intensity",editable:!0,value:o.intensity},{key:"castShadow",editable:!0,value:o.castShadow},{key:"receiveShadow",editable:!0,value:o.receiveShadow},{key:"frustumCulled",editable:!0,value:o.frustumCulled},{key:"matrixAutoUpdate",editable:!0,value:o.matrixAutoUpdate},{key:"matrixWorldNeedsUpdate",editable:!0,value:o.matrixWorldNeedsUpdate},{key:"matrixWorld",value:o.matrixWorld},{key:"visible",editable:!0,value:o.visible}]}}}),t.on.editInspectorState(a=>{a.inspectorId===V&&$e(r.scene.value,a.nodeId,a.path,a.state.value)})})}const st=["data-scene","data-tres"],we=u.defineComponent({__name:"TresCanvas",props:{shadows:{type:Boolean,default:void 0},clearColor:{},toneMapping:{},shadowMapType:{},useLegacyLights:{type:Boolean,default:void 0},outputColorSpace:{},toneMappingExposure:{},camera:{},preset:{},windowSize:{type:Boolean,default:void 0},disableRender:{type:Boolean,default:void 0},context:{},precision:{},alpha:{type:Boolean,default:void 0},premultipliedAlpha:{type:Boolean},antialias:{type:Boolean,default:void 0},stencil:{type:Boolean,default:void 0},preserveDrawingBuffer:{type:Boolean,default:void 0},powerPreference:{},depth:{type:Boolean,default:void 0},logarithmicDepthBuffer:{type:Boolean,default:void 0},failIfMajorPerformanceCaveat:{type:Boolean,default:void 0}},setup(e,{expose:r}){var C;const t=e,{logWarning:n}=x(),s=u.ref(),a=u.shallowRef(new f.Scene),{resume:o}=E(),i=u.useSlots(),l=(C=u.getCurrentInstance())==null?void 0:C.appContext.app,d=m=>u.defineComponent({setup(){var P;const _=(P=u.getCurrentInstance())==null?void 0:P.appContext;return _&&(_.app=l),u.provide("useTres",m),u.provide("extend",W),typeof window<"u"&&ot(_.app,m),()=>u.h(u.Fragment,null,i!=null&&i.default?i.default():[])}}),g=m=>{const _=d(m);qe(u.h(_),a.value)},p=(m,_=!1)=>{a.value.children=[],_&&(m.renderer.value.dispose(),m.renderer.value.renderLists.dispose(),m.renderer.value.forceContextLoss()),g(m),o()},c=u.computed(()=>t.disableRender),w=u.shallowRef(null);return r({context:w,dispose:()=>p(w.value,!0)}),u.onMounted(()=>{const m=s;w.value=pe({scene:a.value,canvas:m,windowSize:t.windowSize,disableRender:c,rendererOptions:t}),de({scene:a.value,contextParts:w.value});const{registerCamera:_,camera:P,cameras:M,deregisterCamera:A}=w.value;g(w.value);const L=()=>{const S=new f.PerspectiveCamera(45,window.innerWidth/window.innerHeight,.1,1e3);S.position.set(3,3,3),S.lookAt(0,0,0),_(S);const O=u.watchEffect(()=>{M.value.length>=2&&(S.removeFromParent(),A(S),O==null||O())})};u.watch(()=>t.camera,(S,O)=>{S&&_(S),O&&(O.removeFromParent(),A(O))},{immediate:!0}),P.value||(n("No camera found. Creating a default perspective camera. To have full control over a camera, please add one to the scene."),L())}),(m,_)=>(u.openBlock(),u.createElementBlock("canvas",{ref_key:"canvas",ref:s,"data-scene":a.value.uuid,class:u.normalizeClass(m.$attrs.class),"data-tres":`tresjs ${u.unref(Me).version}`,style:u.normalizeStyle({display:"block",width:"100%",height:"100%",position:m.windowSize?"fixed":"relative",top:0,left:0,pointerEvents:"auto",touchAction:"none",...m.$attrs.style})},null,14,st))}}),it=["TresCanvas","TresLeches","TresScene"],at={template:{compilerOptions:{isCustomElement:e=>e.startsWith("Tres")&&!it.includes(e)||e==="primitive"}}},lt={mounted:(e,r)=>{if(r.arg){console.log(`v-log:${r.arg}`,e[r.arg]);return}console.log("v-log",e)}};class be extends f.Line{constructor(r,t){const n=[1,1,0,-1,1,0,-1,-1,0,1,-1,0,1,1,0],s=new f.BufferGeometry;s.setAttribute("position",new f.Float32BufferAttribute(n,3)),s.computeBoundingSphere();const a=new f.LineBasicMaterial({fog:!1});super(s,a),this.light=r,this.color=t,this.type="RectAreaLightHelper";const o=[1,1,0,-1,1,0,-1,-1,0,1,1,0,-1,-1,0,1,-1,0],i=new f.BufferGeometry;i.setAttribute("position",new f.Float32BufferAttribute(o,3)),i.computeBoundingSphere(),this.add(new f.Mesh(i,new f.MeshBasicMaterial({side:f.BackSide,fog:!1})))}updateMatrixWorld(){if(this.scale.set(.5*this.light.width,.5*this.light.height,1),this.color!==void 0)this.material.color.set(this.color),this.children[0].material.color.set(this.color);else{this.material.color.copy(this.light.color).multiplyScalar(this.light.intensity);const r=this.material.color,t=Math.max(r.r,r.g,r.b);t>1&&r.multiplyScalar(1/t),this.children[0].material.color.copy(this.material.color)}this.matrixWorld.extractRotation(this.light.matrixWorld).scale(this.scale).copyPosition(this.light.matrixWorld),this.children[0].matrixWorld.copy(this.matrixWorld)}dispose(){this.geometry.dispose(),this.material.dispose(),this.children[0].geometry.dispose(),this.children[0].material.dispose()}}const{logWarning:_e}=x();let F,B;const ut={DirectionalLight:f.DirectionalLightHelper,PointLight:f.PointLightHelper,SpotLight:f.SpotLightHelper,HemisphereLight:f.HemisphereLightHelper,RectAreaLight:be},ct={mounted:e=>{if(!e.isLight){_e(`${e.type} is not a light`);return}F=ut[e.type],e.parent.add(new F(e,1,e.color.getHex()))},updated:e=>{B=e.parent.children.find(r=>r instanceof F),!(B instanceof be)&&B.update()},unmounted:e=>{if(!e.isLight){_e(`${e.type} is not a light`);return}B=e.parent.children.find(r=>r instanceof F),B&&B.dispose&&B.dispose(),e.parent.remove(B)}},{logWarning:dt}=x(),ft={updated:(e,r)=>{const t=ie(r);if(!t){dt(`v-always-look-at: problem with binding value: ${r.value}`);return}const{onLoop:n}=E();n(()=>{e.lookAt(t)})}},{logWarning:pt}=x(),mt={updated:(e,r)=>{var s;const t=ie(r);if(!t){pt(`v-distance-to: problem with binding value: ${r.value}`);return}D&&(D.dispose(),e.parent.remove(D));const n=t.clone().sub(e.position);n.normalize(),D=new f.ArrowHelper(n,e.position,e.position.distanceTo(t),16776960),e.parent.add(D),console.table([["Distance:",e.position.distanceTo(t)],[`origin: ${e.name||e.type}`,`x:${e.position.x}, y:${e.position.y}, z:${(s=e.position)==null?void 0:s.z}`],[`Destiny: ${e.name||e.type}`,`x:${t.x}, y:${t.y}, z:${t==null?void 0:t.z}`]])},unmounted:e=>{D==null||D.dispose(),e.parent.remove(D)}};let D=null;const gt={install(e){e.component("TresCanvas",we)}};h.TresCanvas=we,h.catalogue=U,h.default=gt,h.extend=W,h.isProd=Ae,h.normalizeColor=te,h.normalizeVectorFlexibleParam=Le,h.templateCompilerOptions=at,h.trasverseObjects=ue,h.useCamera=K,h.useLoader=Ne,h.useLogger=x,h.usePointerEventHandler=de,h.useRaycaster=ce,h.useRenderLoop=E,h.useRenderer=ae,h.useSeek=We,h.useTexture=Ue,h.useTres=Ge,h.useTresContext=me,h.useTresContextProvider=pe,h.vAlwaysLookAt=ft,h.vDistanceTo=mt,h.vLightHelper=ct,h.vLog=lt,Object.defineProperties(h,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@tresjs/core",
3
3
  "type": "module",
4
- "version": "3.7.0-next.0",
4
+ "version": "3.7.0",
5
5
  "packageManager": "pnpm@8.10.2",
6
6
  "description": "Declarative ThreeJS using Vue Components",
7
7
  "author": "Alvaro Saburido <hola@alvarosaburido.dev> (https://github.com/alvarosabu/)",
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes