@tresjs/core 4.2.3 → 4.2.4

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.
@@ -1,7 +1,7 @@
1
- import { Camera, EventDispatcher, WebGLRenderer, Raycaster } from 'three';
1
+ import { Camera, WebGLRenderer, Raycaster } from 'three';
2
2
  import { ComputedRef, DeepReadonly, MaybeRef, MaybeRefOrGetter, Ref, ShallowRef } from 'vue';
3
3
  import { UseRendererOptions } from '../useRenderer';
4
- import { EmitEventFn, TresObject, TresScene } from '../../types';
4
+ import { EmitEventFn, TresControl, TresObject, TresScene } from '../../types';
5
5
  import { TresEventManager } from '../useTresEventManager';
6
6
  import { SizesType } from '../useSizes';
7
7
  import { RendererLoop } from '../../core/loop';
@@ -41,9 +41,7 @@ export interface TresContext {
41
41
  extend: (objects: any) => void;
42
42
  camera: ComputedRef<Camera | undefined>;
43
43
  cameras: DeepReadonly<Ref<Camera[]>>;
44
- controls: Ref<(EventDispatcher & {
45
- enabled: boolean;
46
- }) | null>;
44
+ controls: TresControl | null;
47
45
  renderer: ShallowRef<WebGLRenderer>;
48
46
  raycaster: ShallowRef<Raycaster>;
49
47
  perf: PerformanceState;
@@ -19,3 +19,4 @@ export interface TresPlugin {
19
19
  declare const plugin: TresPlugin;
20
20
  export default plugin;
21
21
  export { normalizeColor, normalizeVectorFlexibleParam, templateCompilerOptions, dispose, };
22
+ export type { VectorFlexibleParams } from './utils/normalize';
@@ -151,6 +151,9 @@ export type TresColorArray = typeof THREE.Color | [color: THREE.ColorRepresentat
151
151
  export type TresLayers = THREE.Layers | Parameters<THREE.Layers['set']>[0];
152
152
  export type TresQuaternion = THREE.Quaternion | Parameters<THREE.Quaternion['set']>;
153
153
  export type TresEuler = THREE.Euler;
154
+ export type TresControl = THREE.EventDispatcher & {
155
+ enabled: boolean;
156
+ };
154
157
  type WithMathProps<P> = {
155
158
  [K in keyof P]: P[K] extends MathRepresentation | THREE.Euler ? MathType<P[K]> : P[K];
156
159
  };
package/dist/tres.js CHANGED
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * name: @tresjs/core
3
- * version: v4.2.3
3
+ * version: v4.2.4
4
4
  * (c) 2024
5
5
  * description: Declarative ThreeJS using Vue Components
6
6
  * author: Alvaro Saburido <hola@alvarosaburido.dev> (https://github.com/alvarosabu/)
@@ -12,7 +12,7 @@ import { ref as H, computed as V, watchEffect as Te, onUnmounted as K, shallowRe
12
12
  import * as et from "three";
13
13
  import { PerspectiveCamera as we, Camera as Dt, Clock as tt, Vector3 as Se, Color as Z, Scene as nt, MathUtils as rt, MeshBasicMaterial as ot, DoubleSide as jt, REVISION as Bt, SRGBColorSpace as It, ACESFilmicToneMapping as st, PCFSoftShadowMap as Ht, NoToneMapping as $t, WebGLRenderer as he, TextureLoader as Ut, Vector2 as ge, Raycaster as Ft, BufferAttribute as Wt, Object3D as Nt, Line as zt, BufferGeometry as $e, Float32BufferAttribute as Ue, LineBasicMaterial as Gt, Mesh as Vt, BackSide as Yt, DirectionalLightHelper as qt, PointLightHelper as Jt, SpotLightHelper as Kt, HemisphereLightHelper as Qt, ArrowHelper as Xt } from "three";
14
14
  import { createEventHook as j, useRafFn as it, toValue as k, unrefElement as Zt, useDevicePixelRatio as en, usePointer as tn, useElementBounding as nn, useWindowSize as rn, useElementSize as on, refDebounced as Fe, tryOnScopeDispose as sn, useFps as an, useMemory as ln } from "@vueuse/core";
15
- const cn = "@tresjs/core", un = "module", fn = "4.2.3", dn = "pnpm@9.1.4", pn = "Declarative ThreeJS using Vue Components", mn = "Alvaro Saburido <hola@alvarosaburido.dev> (https://github.com/alvarosabu/)", hn = "MIT", gn = [
15
+ const cn = "@tresjs/core", un = "module", fn = "4.2.4", dn = "pnpm@9.1.4", pn = "Declarative ThreeJS using Vue Components", mn = "Alvaro Saburido <hola@alvarosaburido.dev> (https://github.com/alvarosabu/)", hn = "MIT", gn = [
16
16
  "vue",
17
17
  "3d",
18
18
  "threejs",
package/dist/tres.umd.cjs CHANGED
@@ -1,8 +1,8 @@
1
1
  /**
2
2
  * name: @tresjs/core
3
- * version: v4.2.3
3
+ * version: v4.2.4
4
4
  * (c) 2024
5
5
  * description: Declarative ThreeJS using Vue Components
6
6
  * author: Alvaro Saburido <hola@alvarosaburido.dev> (https://github.com/alvarosabu/)
7
7
  */
8
- (function(b,d){typeof exports=="object"&&typeof module<"u"?d(exports,require("vue"),require("three"),require("@vueuse/core")):typeof define=="function"&&define.amd?define(["exports","vue","three","@vueuse/core"],d):(b=typeof globalThis<"u"?globalThis:b||self,d(b.tres={},b.Vue,b.Three,b.VueUseCore))})(this,function(b,d,_,C){"use strict";var _n=Object.defineProperty;var wn=(b,d,_)=>d in b?_n(b,d,{enumerable:!0,configurable:!0,writable:!0,value:_}):b[d]=_;var ye=(b,d,_)=>wn(b,typeof d!="symbol"?d+"":d,_);function it(e){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const n in e)if(n!=="default"){const r=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(t,n,r.get?r:{enumerable:!0,get:()=>e[n]})}}return t.default=e,Object.freeze(t)}const _e=it(_),at={name:"@tresjs/core",type:"module",version:"4.2.3",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.3","@vueuse/core":"^10.11.0"},devDependencies:{"@release-it/conventional-changelog":"^8.0.1","@stackblitz/sdk":"^1.11.0","@tresjs/cientos":"3.9.0","@tresjs/eslint-config":"^1.1.0","@types/three":"^0.166.0","@typescript-eslint/eslint-plugin":"^7.16.0","@typescript-eslint/parser":"^7.16.0","@vitejs/plugin-vue":"^5.0.5","@vitest/coverage-c8":"^0.33.0","@vitest/coverage-v8":"^2.0.2","@vitest/ui":"^2.0.2","@vue/test-utils":"^2.4.6",eslint:"^9.6.0","eslint-plugin-vue":"^9.27.0",esno:"^4.7.0",gsap:"^3.12.5",husky:"^9.0.11",jsdom:"^24.1.0",kolorist:"^1.8.0",ohmyfetch:"^0.4.21",pathe:"^1.1.2","release-it":"^17.5.0","rollup-plugin-analyzer":"^4.0.0","rollup-plugin-copy":"^3.5.0","rollup-plugin-visualizer":"^5.12.0",sponsorkit:"^0.14.6",three:"^0.166.1",unocss:"^0.61.3",unplugin:"^1.11.0","unplugin-vue-components":"^0.27.2",vite:"^5.3.3","vite-plugin-banner":"^0.7.1","vite-plugin-dts":"3.9.1","vite-plugin-inspect":"^0.8.4","vite-plugin-require-transform":"^1.0.21","vite-svg-loader":"^5.1.0",vitepress:"1.3.0",vitest:"^2.0.2",vue:"^3.4.31","vue-demi":"^0.14.8"}};function fe(e){return typeof e>"u"}function Z(e){return Array.isArray(e)}function lt(e){return typeof e=="number"}function we(e){return typeof e=="string"}function G(e){return typeof e=="function"}function U(e){return e===Object(e)&&!Z(e)&&!G(e)}function F(e){return U(e)&&"isObject3D"in e&&!!e.isObject3D}function be(e){return U(e)&&"isCamera"in e&&!!e.isCamera}function ct(e){return U(e)&&"isBufferGeometry"in e&&!!e.isBufferGeometry}function ut(e){return U(e)&&"isMaterial"in e&&!!e.isMaterial}function ft(e){return U(e)&&"isLight"in e&&!!e.isLight}function dt(e){return U(e)&&"isFog"in e&&!!e.isFog}function pt(e){return U(e)&&"isScene"in e&&!!e.isScene}function ee(e){return F(e)||ct(e)||ut(e)||dt(e)}function mt(e){return U(e)&&!!e.isPrimitive}const Ce=({sizes:e})=>{const t=d.ref([]),n=d.computed(()=>t.value[0]),r=i=>{const l=i instanceof _.Camera?i:t.value.find(o=>o.uuid===i);if(!l)return;const c=t.value.filter(({uuid:o})=>o!==l.uuid);t.value=[l,...c]},s=(i,l=!1)=>{if(be(i)){const c=i;if(t.value.some(({uuid:o})=>o===c.uuid))return;l?r(c):t.value.push(c)}},a=i=>{if(be(i)){const l=i;t.value=t.value.filter(({uuid:c})=>c!==l.uuid)}};return d.watchEffect(()=>{e.aspectRatio.value&&t.value.forEach(i=>{!i.manual&&(i instanceof _.PerspectiveCamera||ht(i))&&(i instanceof _.PerspectiveCamera?i.aspect=e.aspectRatio.value:(i.left=e.width.value*-.5,i.right=e.width.value*.5,i.top=e.height.value*.5,i.bottom=e.height.value*-.5),i.updateProjectionMatrix())})}),d.onUnmounted(()=>{t.value=[]}),{camera:n,cameras:t,registerCamera:s,deregisterCamera:a,setCameraActive:r}};function ht(e){return e.hasOwnProperty("isOrthographicCamera")&&e.isOrthographicCamera}const Me=C.createEventHook(),Pe=C.createEventHook(),de=C.createEventHook(),K=new _.Clock;let te=0,ne=0;const{pause:gt,resume:Se,isActive:vt}=C.useRafFn(()=>{Me.trigger({delta:te,elapsed:ne,clock:K}),Pe.trigger({delta:te,elapsed:ne,clock:K}),de.trigger({delta:te,elapsed:ne,clock:K})},{immediate:!1});de.on(()=>{te=K.getDelta(),ne=K.getElapsedTime()});let ke=!1;const yt=()=>(ke||(ke=!0,Se()),{onBeforeLoop:Me.on,onLoop:Pe.on,onAfterLoop:de.on,pause:gt,resume:Se,isActive:vt}),_t=!0,re="[TresJS ▲ ■ ●] ";function W(){function e(...r){typeof r[0]=="string"?r[0]=re+r[0]:r.unshift(re),console.error(...r)}function t(...r){typeof r[0]=="string"?r[0]=re+r[0]:r.unshift(re),console.warn(...r)}function n(r,s){}return{logError:e,logWarning:t,logMessage:n}}function wt(e){return typeof e=="number"?[e,e,e]:e instanceof _.Vector3?[e.x,e.y,e.z]:e}function Ae(e){return e instanceof _.Color?e:Array.isArray(e)?new _.Color(...e):new _.Color(e)}class bt extends _e.Mesh{constructor(...n){super(...n);ye(this,"type","HightlightMesh");ye(this,"createTime");this.createTime=Date.now()}onBeforeRender(){const r=(Date.now()-this.createTime)/1e3,i=1+.07*Math.sin(2.5*r);this.scale.set(i,i,i)}}const Le=(e,t)=>{for(const n of Object.keys(t))t[n]instanceof Object&&Object.assign(t[n],Le(e[n],t[n]));return Object.assign(e||{},t),e},Ct=St("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 Oe(e){return e&&e.nodeType===1}function oe(e){return e.replace(/-([a-z])/g,(t,n)=>n.toUpperCase())}const Mt=/\B([A-Z])/g;function Pt(e){return e.replace(Mt,"-$1").toLowerCase()}function St(e,t){const n=Object.create(null),r=e.split(",");for(let s=0;s<r.length;s++)n[r[s]]=!0;return s=>!!n[s]}const De=(e,t)=>{if(!t)return;const n=Array.isArray(t)?t:t.match(/([^[.\]])+/g);return n==null?void 0:n.reduce((r,s)=>r&&r[s],e)},kt=(e,t,n)=>{const r=Array.isArray(t)?t:t.match(/([^[.\]])+/g);r&&r.reduce((s,a,i)=>(s[a]===void 0&&(s[a]={}),i===r.length-1&&(s[a]=n),s[a]),e)};function je(e,t){if(Oe(e)&&Oe(t)){const s=e.attributes,a=t.attributes;return s.length!==a.length?!1:Array.from(s).every(({name:i,value:l})=>t.getAttribute(i)===l)}if(e===t)return!0;if(e===null||typeof e!="object"||t===null||typeof t!="object")return!1;const n=Object.keys(e),r=Object.keys(t);if(n.length!==r.length)return!1;for(const s of n)if(!r.includes(s)||!je(e[s],t[s]))return!1;return!0}function At(e,t){if(!Array.isArray(e)||!Array.isArray(t)||e.length!==t.length)return!1;for(let n=0;n<e.length;n++)if(!je(e[n],t[n]))return!1;return!0}const Lt=Array.isArray;function Ot(e,t,n,r){const s=c=>{if(c.uuid===t)return c;for(const o of c.children){const u=s(o);if(u)return u}},a=s(e);if(!a){console.warn("Object with UUID not found in the scene.");return}let i=a;for(let c=0;c<n.length-1;c++)if(i[n[c]]!==void 0)i=i[n[c]];else{console.warn(`Property path is not valid: ${n.join(".")}`);return}const l=n[n.length-1];i[l]!==void 0?i[l]=r:console.warn(`Property path is not valid: ${n.join(".")}`)}function Dt(e){const t=new _.MeshBasicMaterial({color:11003607,transparent:!0,opacity:.2,depthTest:!1,side:_.DoubleSide});return new bt(e.geometry.clone(),t)}function jt(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 _.Vector3(...t)),t}function Tt(e){return"map"in e}function Te(e){Tt(e)&&e.map&&e.map.dispose(),e.dispose()}function pe(e){var n,r;if(e.parent&&((n=e.removeFromParent)==null||n.call(e)),delete e.__tres,[...e.children].forEach(s=>pe(s)),!(e instanceof _.Scene)){const s=e;e&&((r=e.dispose)==null||r.call(e)),s.geometry&&(s.geometry.dispose(),delete s.geometry),Array.isArray(s.material)?(s.material.forEach(a=>Te(a)),delete s.material):s.material&&(Te(s.material),delete s.material)}}function xt(e,t){let n=0;for(let r=0;r<e.length;r++)t(e[r],r)&&(e[n]=e[r],n++);return e.length=n,e}function me(e,t){let n=e;if(t.includes("-")){const r=t.split("-");let s=r.shift();for(;n&&r.length;)s in n?(n=n[s],s=r.shift()):s=xe(s,r.shift());return{target:n,key:xe(s,...r)}}else return{target:n,key:t}}function xe(...e){return e.map((t,n)=>n===0?t:t.charAt(0).toUpperCase()+t.slice(1)).join("")}const Be=/-\d+$/;function Bt(e,t,n){if(we(n)){if(Be.test(n)){const a=n.replace(Be,""),{target:i,key:l}=me(e,a);if(!Array.isArray(i[l])){const c=i[l],o=[];o.__tresDetach=()=>{o.every(u=>fe(u))&&(i[l]=c)},i[l]=o}}const{target:r,key:s}=me(e,n);t.__tres.previousAttach=r[s],r[s]=Y(t)}else t.__tres.previousAttach=n(e,t)}function It(e,t,n){var r,s,a;if(we(n)){const{target:i,key:l}=me(e,n),c=t.__tres.previousAttach;c===void 0?delete i[l]:i[l]=c,"__tresDetach"in i&&i.__tresDetach()}else(s=(r=t.__tres)==null?void 0:r.previousAttach)==null||s.call(r,e,t);(a=t.__tres)==null||delete a.previousAttach}function q(e,t,n){const r=e;return r.__tres={type:"unknown",eventCount:0,root:n,handlers:{},memoizedProps:{},objects:[],parent:null,previousAttach:null,...t},r.__tres.attach||(r.isMaterial?r.__tres.attach="material":r.isBufferGeometry?r.__tres.attach="geometry":r.isFog&&(r.__tres.attach="fog")),r}function Ie(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()}function Fn(e){}function Rt(e,t,n){var s;if(!G(e.setPixelRatio))return;let r=0;if(Z(n)&&n.length>=2){const[a,i]=n;r=_.MathUtils.clamp(t,a,i)}else lt(n)?r=n:r=t;r!==((s=e.getPixelRatio)==null?void 0:s.call(e))&&e.setPixelRatio(r)}function Et(e,t,n,r,s){const a=[...t.__tres.objects],i=Y(t);if(e=Y(e),i===e)return!0;const l=q(e,t.__tres??{},s),c=t.parent??t.__tres.parent??null,o={...t.__tres.memoizedProps};delete o.object;for(const u of a)Re(u,s),Ee(u,s);i.__tres.objects=[],r.remove(t);for(const[u,w]of Object.entries(o))r.patchProp(l,u,l[u],w);n(e),r.insert(t,c);for(const u of a)r.insert(u,t);return!0}function Y(e){return mt(e)?(e.object.__tres=e.__tres,e.object):e}function Re(e,t){var r,s,a,i;const n=((r=e.__tres)==null?void 0:r.parent)||t.scene.value;e.__tres&&(e.__tres.parent=null),n&&n.__tres&&"objects"in n.__tres&&xt(n.__tres.objects,l=>l!==e),(s=e.__tres)!=null&&s.attach?It(n,e,e.__tres.attach):((i=(a=e.parent)==null?void 0:a.remove)==null||i.call(a,Y(e)),e.parent=null)}function Ee(e,t){var n;(n=e.traverse)==null||n.call(e,r=>{var s;t.deregisterCamera(r),(s=t.eventManager)==null||s.deregisterPointerMissedObject(r)}),t.deregisterCamera(e),Ie(e)}const $t=Number.parseInt(_.REVISION.replace("dev","")),se={realistic:{shadows:!0,physicallyCorrectLights:!0,outputColorSpace:_.SRGBColorSpace,toneMapping:_.ACESFilmicToneMapping,toneMappingExposure:3,shadowMap:{enabled:!0,type:_.PCFSoftShadowMap}},flat:{toneMapping:_.NoToneMapping,toneMappingExposure:1}};function $e({canvas:e,options:t,contextParts:{sizes:n,render:r,invalidate:s,advance:a}}){const i=d.computed(()=>({alpha:C.toValue(t.alpha)??!0,depth:C.toValue(t.depth),canvas:C.unrefElement(e),context:C.toValue(t.context),stencil:C.toValue(t.stencil),antialias:C.toValue(t.antialias)??!0,precision:C.toValue(t.precision),powerPreference:C.toValue(t.powerPreference),premultipliedAlpha:C.toValue(t.premultipliedAlpha),preserveDrawingBuffer:C.toValue(t.preserveDrawingBuffer),logarithmicDepthBuffer:C.toValue(t.logarithmicDepthBuffer),failIfMajorPerformanceCaveat:C.toValue(t.failIfMajorPerformanceCaveat)})),l=d.shallowRef(new _.WebGLRenderer(i.value));function c(){t.renderMode==="on-demand"&&s()}d.watch(i,()=>{l.value.dispose(),l.value=new _.WebGLRenderer(i.value),c()}),d.watch([n.width,n.height],()=>{l.value.setSize(n.width.value,n.height.value),c()},{immediate:!0}),d.watch(()=>t.clearColor,c);const{pixelRatio:o}=C.useDevicePixelRatio(),{logError:u}=W(),f=(()=>{const y=new _.WebGLRenderer,S={shadowMap:{enabled:y.shadowMap.enabled,type:y.shadowMap.type},toneMapping:y.toneMapping,toneMappingExposure:y.toneMappingExposure,outputColorSpace:y.outputColorSpace};return y.dispose(),S})(),v=C.toValue(t.renderMode);return v==="on-demand"&&s(),v==="manual"&&setTimeout(()=>{a()},100),d.watchEffect(()=>{const y=C.toValue(t.preset);y&&(y in se||u(`Renderer Preset must be one of these: ${Object.keys(se).join(", ")}`),Le(l.value,se[y])),Rt(l.value,o.value,C.toValue(t.dpr)),v==="always"&&(r.frames.value=Math.max(1,r.frames.value));const S=(L,O)=>{const k=C.toValue(L),j=()=>{if(y)return De(se[y],O)};if(k!==void 0)return k;const A=j();return A!==void 0?A:De(f,O)},h=(L,O)=>kt(l.value,O,S(L,O));h(t.shadows,"shadowMap.enabled"),h(t.toneMapping??_.ACESFilmicToneMapping,"toneMapping"),h(t.shadowMapType,"shadowMap.type"),$t<150&&h(!t.useLegacyLights,"physicallyCorrectLights"),h(t.outputColorSpace,"outputColorSpace"),h(t.toneMappingExposure,"toneMappingExposure");const p=S(t.clearColor,"clearColor");p&&l.value.setClearColor(p?Ae(p):new _.Color(0))}),d.onUnmounted(()=>{l.value.dispose(),l.value.forceContextLoss()}),{renderer:l}}const Ut=e=>!!e&&e.constructor===Array;function Ue(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 Vt(e,t,n,r,s){const{logError:a}=W(),i=new e;s&&s(i),n&&n(i);const c=(Array.isArray(t)?t:[t]).map(o=>new Promise((u,w)=>{i.load(o,f=>{const v=f;v.scene&&Object.assign(v,Ue(v.scene)),u(v)},r,f=>w(a("[useLoader] - Failed to load resource",f)))}));return Ut(t)?await Promise.all(c):await c[0]}async function Ft(e,t){const n=new _.TextureLoader(t),r=s=>new Promise((a,i)=>{n.load(s,l=>a(l),()=>null,()=>{i(new Error("[useTextures] - Failed to load texture"))})});if(Lt(e)){const s=await Promise.all(e.map(a=>r(a)));return e.length>1?s:s[0]}else{const{map:s,displacementMap:a,normalMap:i,roughnessMap:l,metalnessMap:c,aoMap:o,alphaMap:u,matcap:w}=e;return{map:s?await r(s):null,displacementMap:a?await r(a):null,normalMap:i?await r(i):null,roughnessMap:l?await r(l):null,metalnessMap:c?await r(c):null,aoMap:o?await r(o):null,alphaMap:u?await r(u):null,matcap:w?await r(w):null}}}const Ve=(e,t)=>{const n=d.computed(()=>t.renderer.value.domElement),r=d.shallowRef([]),{x:s,y:a}=C.usePointer({target:n});let i=0;const{width:l,height:c,top:o,left:u}=C.useElementBounding(n),w=({x:g,y:D})=>{if(n.value)return{x:(g-u.value)/l.value*2-1,y:-((D-o.value)/c.value)*2+1}},f=({x:g,y:D})=>{if(t.camera.value)return t.raycaster.value.setFromCamera(new _.Vector2(g,D),t.camera.value),r.value=t.raycaster.value.intersectObjects(e.value,!0),r.value},v=g=>{const D=w({x:(g==null?void 0:g.clientX)??s.value,y:(g==null?void 0:g.clientY)??a.value});return D?f(D)||[]:[]},y=C.createEventHook(),S=C.createEventHook(),h=C.createEventHook(),p=C.createEventHook(),L=C.createEventHook(),O=C.createEventHook(),k=C.createEventHook(),j=C.createEventHook();function A(g){const D={};for(const z in g)typeof z!="function"&&(D[z]=g[z]);return D}const M=(g,D)=>{var rt,ot,st;const z=A(D),ue=new _.Vector3(D==null?void 0:D.clientX,D==null?void 0:D.clientY,0).unproject((rt=t.camera)==null?void 0:rt.value);g.trigger({...z,intersections:r.value,unprojectedPoint:ue,ray:(ot=t.raycaster)==null?void 0:ot.value.ray,camera:(st=t.camera)==null?void 0:st.value,sourceEvent:D,delta:i,stopPropagating:!1})};let B;const x=g=>{v(g),M(h,g),B=g},m=()=>{B&&x(B)};let P,T,E;const R=g=>{var D;P=(D=r.value[0])==null?void 0:D.object,i=0,T=new _.Vector2((g==null?void 0:g.clientX)??s.value,(g==null?void 0:g.clientY)??a.value),M(L,g)};let $,I=!1;const ce=g=>{var D,z,ue;g instanceof PointerEvent&&(r.value.length===0&&M(O,g),P===((D=r.value[0])==null?void 0:D.object)&&(E=new _.Vector2((g==null?void 0:g.clientX)??s.value,(g==null?void 0:g.clientY)??a.value),i=T==null?void 0:T.distanceTo(E),g.button===0?(M(y,g),$===((z=r.value[0])==null?void 0:z.object)?I=!0:($=(ue=r.value[0])==null?void 0:ue.object,I=!1)):g.button===2&&M(k,g)),M(p,g))},et=g=>{I&&(M(S,g),$=void 0,I=!1)},tt=g=>M(h,g),nt=g=>M(j,g);return n.value.addEventListener("pointerup",ce),n.value.addEventListener("pointerdown",R),n.value.addEventListener("pointermove",x),n.value.addEventListener("pointerleave",tt),n.value.addEventListener("dblclick",et),n.value.addEventListener("wheel",nt),d.onUnmounted(()=>{n!=null&&n.value&&(n.value.removeEventListener("pointerup",ce),n.value.removeEventListener("pointerdown",R),n.value.removeEventListener("pointermove",x),n.value.removeEventListener("pointerleave",tt),n.value.removeEventListener("dblclick",et),n.value.removeEventListener("wheel",nt))}),{intersects:r,onClick:g=>y.on(g).off,onDblClick:g=>S.on(g).off,onContextMenu:g=>k.on(g).off,onPointerMove:g=>h.on(g).off,onPointerUp:g=>p.on(g).off,onPointerDown:g=>L.on(g).off,onPointerMissed:g=>O.on(g).off,onWheel:g=>j.on(g).off,forceUpdate:m}};function Wt(){const{logWarning:e}=W();function t(a,i,l){let c=null;return a.traverse(o=>{o[i]===l&&(c=o)}),c||e(`Child with ${i} '${l}' not found.`),c}function n(a,i,l){const c=[];return a.traverse(o=>{o[i].includes(l)&&c.push(o)}),c.length||e(`Children with ${i} '${l}' not found.`),c}function r(a,i){return t(a,"name",i)}function s(a,i){return n(a,"name",i)}return{seek:t,seekByName:r,seekAll:n,seekAllByName:s}}function he(e){let t=0;return e.traverse(n=>{if(n.isMesh&&n.geometry&&n.type!=="HightlightMesh"){const r=n.geometry,s=r.attributes.position.count*3*Float32Array.BYTES_PER_ELEMENT,a=r.index?r.index.count*Uint32Array.BYTES_PER_ELEMENT:0,i=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,c=s+a+i+l;t+=c}}),t}function Nt(e){return(e/1024).toFixed(2)}const ie=d.ref({}),ae=e=>Object.assign(ie.value,e);function Fe(e,t,n){var x;const r=d.shallowRef(),s=d.shallowRef();e&&(r.value=e),t&&(s.value=t);const a=m=>{var P;return((P=m.__tres)==null?void 0:P.eventCount)>0},i=m=>{var P;return((P=m.children)==null?void 0:P.some(T=>i(T)))||a(m)},l=d.shallowRef(((x=r.value)==null?void 0:x.children).filter(i)||[]);function c(m,P){if(Array.isArray(m))for(const T of m)T(P);typeof m=="function"&&m(P)}function o(m,P){const T=[],E=()=>P.stopPropagating=!0;P.stopPropagation=E;for(const R of P==null?void 0:P.intersections){if(P.stopPropagating)return;P={...P,...R};const{object:$}=R;P.eventObject=$,c($[m],P),T.push($);let I=$.parent;for(;I!==null&&!P.stopPropagating&&!T.includes(I);)P.eventObject=I,c(I[m],P),T.push(I),I=I.parent;const ce=Pt(m.slice(2));n(ce,{intersection:R,event:P})}}const{onClick:u,onDblClick:w,onContextMenu:f,onPointerMove:v,onPointerDown:y,onPointerUp:S,onPointerMissed:h,onWheel:p,forceUpdate:L}=Ve(l,t);S(m=>o("onPointerUp",m)),y(m=>o("onPointerDown",m)),u(m=>o("onClick",m)),w(m=>o("onDoubleClick",m)),f(m=>o("onContextMenu",m)),p(m=>o("onWheel",m));let O=[];v(m=>{const P=m.intersections.map(({object:E})=>E),T=m.intersections;O.forEach(({object:E})=>{P.includes(E)||(m.intersections=O,o("onPointerLeave",m),o("onPointerOut",m))}),m.intersections=T,m.intersections.forEach(({object:E})=>{O.includes(E)||(o("onPointerEnter",m),o("onPointerOver",m))}),o("onPointerMove",m),O=m.intersections});const k=[];h(m=>{const P=()=>m.stopPropagating=!0;m.stopPropagation=P,k.forEach(T=>{m.stopPropagating||(m.eventObject=T,c(T.onPointerMissed,m))}),n("pointer-missed",{event:m})});function j(m){ee(m)&&F(m)&&l.value.push(m)}function A(m){if(ee(m)&&F(m)){const P=l.value.indexOf(m);P>-1&&l.value.splice(P,1)}}function M(m){ee(m)&&F(m)&&m.onPointerMissed&&k.push(m)}function B(m){if(ee(m)&&F(m)){const P=k.indexOf(m);P>-1&&k.splice(P,1)}}return t.eventManager={forceUpdate:L,registerObject:j,deregisterObject:A,registerPointerMissedObject:M,deregisterPointerMissedObject:B},{forceUpdate:L,registerObject:j,deregisterObject:A,registerPointerMissedObject:M,deregisterPointerMissedObject:B}}function zt(e,t,n=10){const r=C.toValue(e)?C.useWindowSize():C.useElementSize(d.computed(()=>C.toValue(t).parentElement)),s=d.readonly(C.refDebounced(r.width,n)),a=d.readonly(C.refDebounced(r.height,n)),i=d.computed(()=>s.value/a.value);return{height:a,width:s,aspectRatio:i}}function ge(){const e=new Map,t=new Set;let n=0,r=!1;const s=()=>{const o=Array.from(e.entries()).sort((u,w)=>{const f=u[1].priority-w[1].priority;return f===0?u[1].addI-w[1].addI:f});t.clear(),o.forEach(u=>t.add(u[0]))},a=o=>{e.delete(o),t.delete(o)};return{on:(o,u=0)=>{e.set(o,{priority:u,addI:n++});const w=()=>a(o);return C.tryOnScopeDispose(w),r=!0,{off:w}},off:a,trigger:(...o)=>{r&&(s(),r=!1),t.forEach(u=>u(...o))},dispose:()=>{e.clear(),t.clear()},get count(){return e.size}}}function We(){let e=!0,t=!0,n=!1;const r=new _.Clock(!1),s=d.ref(r.running),a=d.ref(!1);let i;const l=_.MathUtils.generateUUID();let c=null;const o=ge(),u=ge(),w=ge();A();let f={};function v(M){f=M}function y(M,B,x=0){switch(B){case"before":return o.on(M,x);case"render":return c||(c=M),u.dispose(),u.on(M);case"after":return w.on(M,x)}}function S(){t&&(t=!1,A(),j())}function h(){t=!0,A(),cancelAnimationFrame(i)}function p(){n=!1,A()}function L(){n=!0,A()}function O(){a.value=!0}function k(){a.value=!1}function j(){if(!e){i=requestAnimationFrame(j);return}const M=r.getDelta(),B=r.getElapsedTime(),x={camera:d.unref(f.camera),scene:d.unref(f.scene),renderer:d.unref(f.renderer),raycaster:d.unref(f.raycaster),controls:d.unref(f.controls),invalidate:f.invalidate,advance:f.advance},m={delta:M,elapsed:B,clock:r,...x};s.value&&o.trigger(m),a.value||(u.count?u.trigger(m):c&&c(m)),s.value&&w.trigger(m),i=requestAnimationFrame(j)}function A(){const M=!t&&!n;r.running!==M&&(r.running?r.stop():r.start()),s.value=r.running}return{loopId:l,register:(M,B,x)=>y(M,B,x),start:S,stop:h,pause:L,resume:p,pauseRender:O,resumeRender:k,isRenderPaused:a,isActive:s,setContext:v,setReady:M=>e=M}}function Gt(e,t,n=100){n=n<=0?100:n;const r=C.createEventHook(),s=new Set;let a=!1,i=!1,l=null;function c(){l&&clearTimeout(l),!i&&!a&&e()?(r.trigger(t),s.forEach(f=>f()),s.clear(),a=!0):!i&&!a&&(l=setTimeout(c,n))}function o(){i=!0,l&&clearTimeout(l)}c();const u=(f,...v)=>{f(...v)};return{on:f=>{if(a)return u(f,t),{off:()=>{}};{const v=r.on(f);return s.add(v.off),r.on(f)}},off:r.off,trigger:r.trigger,cancel:o}}const Q=new WeakMap;function Ne(e){if(e=e||X(),Q.has(e))return Q.get(e);const t=100,n=Date.now(),a=Gt(()=>{if(Date.now()-n>=t)return!0;{const i=e.renderer.value,l=(i==null?void 0:i.domElement)||{width:0,height:0};return!!(i&&l.width>0&&l.height>0)}},e);return Q.set(e,a),a}function qt(e){const t=X();if(t)return Q.has(t)?Q.get(t).on(e):Ne(t).on(e)}function ze({scene:e,canvas:t,windowSize:n,disableRender:r,rendererOptions:s,emit:a}){const i=d.shallowRef(e),l=zt(n,t),{camera:c,cameras:o,registerCamera:u,deregisterCamera:w,setCameraActive:f}=Ce({sizes:l,scene:e}),v={mode:d.ref(s.renderMode||"always"),priority:d.ref(0),frames:d.ref(0),maxFrames:60,canBeInvalidated:d.computed(()=>v.mode.value==="on-demand"&&v.frames.value===0)};function y(R=1){s.renderMode==="on-demand"&&(v.frames.value=Math.min(v.maxFrames,v.frames.value+R))}function S(){s.renderMode==="manual"&&(v.frames.value=1)}const{renderer:h}=$e({scene:e,canvas:t,options:s,emit:a,contextParts:{sizes:l,camera:c,render:v,invalidate:y,advance:S},disableRender:r}),p={sizes:l,scene:i,camera:c,cameras:d.readonly(o),renderer:h,raycaster:d.shallowRef(new _.Raycaster),controls:d.ref(null),perf:{maxFrames:160,fps:{value:0,accumulator:[]},memory:{currentMem:0,allocatedMem:0,accumulator:[]}},render:v,advance:S,extend:ae,invalidate:y,registerCamera:u,setCameraActive:f,deregisterCamera:w,loop:We()};d.provide("useTres",p),p.scene.value.__tres={root:p},p.loop.register(()=>{c.value&&v.frames.value>0&&(h.value.render(e,c.value),a("render",p.renderer.value)),v.priority.value=0,v.mode.value==="always"?v.frames.value=1:v.frames.value=Math.max(0,v.frames.value-1)},"render");const{on:L,cancel:O}=Ne(p);p.loop.setReady(!1),p.loop.start(),L(()=>{a("ready",p),p.loop.setReady(!0),Fe(e,p,a)}),d.onUnmounted(()=>{O(),p.loop.stop()});const k=100,j=C.useFps({every:k}),{isSupported:A,memory:M}=C.useMemory({interval:k}),B=160;let x=performance.now();const m=({timestamp:R})=>{p.scene.value&&(p.perf.memory.allocatedMem=he(p.scene.value)),R-x>=k&&(x=R,p.perf.fps.accumulator.push(j.value),p.perf.fps.accumulator.length>B&&p.perf.fps.accumulator.shift(),p.perf.fps.value=j.value,A.value&&M.value&&(p.perf.memory.accumulator.push(M.value.usedJSHeapSize/1024/1024),p.perf.memory.accumulator.length>B&&p.perf.memory.accumulator.shift(),p.perf.memory.currentMem=p.perf.memory.accumulator.reduce(($,I)=>$+I,0)/p.perf.memory.accumulator.length))};let P=0;const T=1,{pause:E}=C.useRafFn(({delta:R})=>{window.__TRES__DEVTOOLS__&&(m({timestamp:performance.now()}),P+=R,P>=T&&(window.__TRES__DEVTOOLS__.cb(p),P=0))},{immediate:!0});return d.onUnmounted(()=>{E()}),p}function X(){const e=d.inject("useTres");if(!e)throw new Error("useTresContext must be used together with useTresContextProvider");return e}const Yt=X;function Jt(){const{camera:e,scene:t,renderer:n,loop:r,raycaster:s,controls:a,invalidate:i,advance:l}=X();r.setContext({camera:e,scene:t,renderer:n,raycaster:s,controls:a,invalidate:i,advance:l});function c(w,f=0){return r.register(w,"before",f)}function o(w){return r.register(w,"render")}function u(w,f=0){return r.register(w,"after",f)}return{pause:r.pause,resume:r.resume,pauseRender:r.pauseRender,resumeRender:r.resumeRender,isActive:r.isActive,onBeforeRender:c,render:o,onAfterRender:u}}function Kt(e,t={},n={}){let r=e;const s=l=>{r=l};let a=new Proxy({},{});const i={has(l,c){return c in t||c in r},get(l,c,o){return c in t?t[c](r):r[c]},set(l,c,o){return n[c]?n[c](o,r,a,s):r[c]=o,!0}};return a=new Proxy({},i),a}const{logError:Ge}=W(),qe=["onClick","onContextMenu","onPointerMove","onPointerEnter","onPointerLeave","onPointerOver","onPointerOut","onDoubleClick","onPointerDown","onPointerUp","onPointerCancel","onPointerMissed","onLostPointerCapture","onWheel"],Qt=e=>{const t=e.scene.value;function n(o,u,w,f){if(f||(f={}),f.args||(f.args=[]),o==="template"||Ct(o))return null;let v=o.replace("Tres",""),y;if(o==="primitive"){(!U(f.object)||d.isRef(f.object))&&Ge("Tres primitives need an 'object' prop, whose value is an object or shallowRef<object>"),v=f.object.type;const S={};y=Kt(f.object,{object:p=>p,isPrimitive:()=>!0,__tres:()=>S},{object:(p,L,O,k)=>{Et(p,O,k,{patchProp:a,remove:s,insert:r},e)},__tres:p=>{Object.assign(S,p)}})}else{const S=ie.value[v];S||Ge(`${v} is not defined on the THREE namespace. Use extend to add it to the catalog.`),y=new S(...f.args)}return y?(y.isCamera&&(f!=null&&f.position||y.position.set(3,3,3),f!=null&&f.lookAt||y.lookAt(0,0,0)),y=q(y,{...y.__tres,type:v,memoizedProps:f,eventCount:0,primitive:o==="primitive",attach:f.attach},e),y):null}function r(o,u){var v,y,S;if(!o)return;u=u||t;const w=o.__tres?o:q(o,{},e),f=u.__tres?u:q(u,{},e);o=Y(w),u=Y(f),o.__tres&&((v=o.__tres)==null?void 0:v.eventCount)>0&&((y=e.eventManager)==null||y.registerObject(o)),e.registerCamera(o),(S=e.eventManager)==null||S.registerPointerMissedObject(o),w.__tres.attach?Bt(f,w,w.__tres.attach):F(o)&&F(f)&&(f.add(o),o.dispatchEvent({type:"added"})),w.__tres.parent=f,f.__tres.objects&&!f.__tres.objects.includes(w)&&f.__tres.objects.push(w)}function s(o,u){var y,S,h,p;if(!o)return;o!=null&&o.__tres&&((y=o.__tres)==null?void 0:y.eventCount)>0&&((S=e.eventManager)==null||S.deregisterObject(o)),u=fe(u)?"default":u;const w=(h=o.__tres)==null?void 0:h.dispose;fe(w)||(w===null?u=!1:u=w);const f=(p=o.__tres)==null?void 0:p.primitive,v=u==="default"?!f:!!u;if(o.__tres&&"objects"in o.__tres&&[...o.__tres.objects].forEach(L=>s(L,u)),v&&o.children&&[...o.children].forEach(L=>s(L,u)),Re(o,e),Ee(o,e),v&&!pt(o)){if(G(u))u(o);else if(G(o.dispose))try{o.dispose()}catch{}}"__tres"in o&&delete o.__tres}function a(o,u,w,f){var L,O;if(!o)return;let v=o,y=u;if(o.__tres&&(o.__tres.memoizedProps[u]=f),u==="attach"){const k=((L=o.__tres)==null?void 0:L.parent)||o.parent;s(o),q(o,{attach:f},e),k&&r(o,k);return}if(u==="dispose"){o.__tres||(o=q(o,{},e)),o.__tres.dispose=f;return}if(F(o)&&y==="blocks-pointer-events"){f||f===""?o[y]=f:delete o[y];return}qe.includes(u)&&o.__tres&&(o.__tres.eventCount+=1);let S=oe(y),h=v==null?void 0:v[S];if(y==="args"){const k=o,j=w??[],A=f??[],M=((O=o.__tres)==null?void 0:O.type)||o.type;M&&j.length&&!At(j,A)&&(v=Object.assign(k,new ie.value[M](...f)));return}if(v.type==="BufferGeometry"){if(y==="args")return;v.setAttribute(oe(y),new _.BufferAttribute(...f));return}if(y.includes("-")&&h===void 0){const k=y.split("-");h=k.reduce((j,A)=>j[oe(A)],v),y=k.pop(),S=y,h!=null&&h.set||(v=k.reduce((j,A)=>j[oe(A)],v))}let p=f;if(p===""&&(p=!0),G(h)){qe.includes(u)||(Z(p)?o[S](...p):o[S](p)),S.startsWith("on")&&G(p)&&(v[S]=p);return}!(h!=null&&h.set)&&!G(h)?v[S]=p:h.constructor===p.constructor&&(h!=null&&h.copy)?h==null||h.copy(p):Z(p)?h.set(...p):!h.isColor&&h.setScalar?h.setScalar(p):h.set(p),Ie(o)}function i(o){var u;return((u=o==null?void 0:o.__tres)==null?void 0:u.parent)||null}function l(o){const u=q(new _.Object3D,{type:"Comment"},e);return u.name=o,u}function c(o){var v;const u=i(o),w=((v=u==null?void 0:u.__tres)==null?void 0:v.objects)||[],f=w.indexOf(o);return f<0||f>=w.length-1?null:w[f+1]}return{insert:r,remove:s,createElement:n,patchProp:a,parentNode:i,createText:()=>void 0,createComment:l,setText:()=>void 0,setElementText:()=>void 0,nextSibling:c,querySelector:()=>void 0,setScopeId:()=>void 0,cloneNode:()=>void 0,insertStaticContent:()=>void 0}};function Xt(){return Ye().__VUE_DEVTOOLS_GLOBAL_HOOK__}function Ye(){return typeof navigator<"u"&&typeof window<"u"?window:typeof globalThis<"u"?globalThis:{}}const Ht=typeof Proxy=="function",Zt="devtools-plugin:setup",en="plugin:settings:set";let J,ve;function tn(){var e;return J!==void 0||(typeof window<"u"&&window.performance?(J=!0,ve=window.performance):typeof globalThis<"u"&&(!((e=globalThis.perf_hooks)===null||e===void 0)&&e.performance)?(J=!0,ve=globalThis.perf_hooks.performance):J=!1),J}function nn(){return tn()?ve.now():Date.now()}class rn{constructor(t,n){this.target=null,this.targetQueue=[],this.onQueue=[],this.plugin=t,this.hook=n;const r={};if(t.settings)for(const i in t.settings){const l=t.settings[i];r[i]=l.defaultValue}const s=`__vue-devtools-plugin-settings__${t.id}`;let a=Object.assign({},r);try{const i=localStorage.getItem(s),l=JSON.parse(i);Object.assign(a,l)}catch{}this.fallbacks={getSettings(){return a},setSettings(i){try{localStorage.setItem(s,JSON.stringify(i))}catch{}a=i},now(){return nn()}},n&&n.on(en,(i,l)=>{i===this.plugin.id&&this.fallbacks.setSettings(l)}),this.proxiedOn=new Proxy({},{get:(i,l)=>this.target?this.target.on[l]:(...c)=>{this.onQueue.push({method:l,args:c})}}),this.proxiedTarget=new Proxy({},{get:(i,l)=>this.target?this.target[l]:l==="on"?this.proxiedOn:Object.keys(this.fallbacks).includes(l)?(...c)=>(this.targetQueue.push({method:l,args:c,resolve:()=>{}}),this.fallbacks[l](...c)):(...c)=>new Promise(o=>{this.targetQueue.push({method:l,args:c,resolve:o})})})}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 on(e,t){const n=e,r=Ye(),s=Xt(),a=Ht&&n.enableEarlyProxy;if(s&&(r.__VUE_DEVTOOLS_PLUGIN_API_AVAILABLE__||!a))s.emit(Zt,e,t);else{const i=a?new rn(n,s):null;(r.__VUE_DEVTOOLS_PLUGINS__=r.__VUE_DEVTOOLS_PLUGINS__||[]).push({pluginDescriptor:n,setupFn:t,proxy:i}),i&&t(i.proxiedTarget)}}function sn(e,t){const n=`▲ ■ ●${e}`;typeof Je=="function"?Je(n,t):console.log(n)}function Je(e,t){throw new Error(e+t)}const Ke=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=he(e);return n>0&&t.tags.push({label:`${Nt(n)} KB`,textColor:15707189,backgroundColor:16775644,tooltip:"Memory usage"}),e.type.includes("Light")&&(ft(e)&&t.tags.push({label:`${e.intensity}`,textColor:9738662,backgroundColor:16316922,tooltip:"Intensity"}),t.tags.push({label:`#${new _.Color(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 Qe(e,t,n=""){e.children.forEach(r=>{if(r.type==="HightlightMesh"||n&&!r.type.includes(n)&&!r.name.includes(n))return;const s=Ke(r);t.children.push(s),Qe(r,s,n)})}const an=[],H="tres:inspector",ln=d.reactive({sceneGraph:null});function cn(e,t){on({id:"dev.esm.tres",label:"TresJS 🪐",logo:"https://raw.githubusercontent.com/Tresjs/tres/main/public/favicon.svg",packageName:"tresjs",homepage:"https://tresjs.org",componentStateTypes:an,app:e},n=>{typeof n.now!="function"&&sn("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:H,label:"TresJS 🪐",icon:"account_tree",treeFilterPlaceholder:"Search instances"}),setInterval(()=>{n.sendInspectorTree(H)},1e3),setInterval(()=>{n.notifyComponentUpdate()},5e3),n.on.getInspectorTree(a=>{if(a.inspectorId===H){const i=Ke(t.scene.value);Qe(t.scene.value,i,a.filter),ln.sceneGraph=i,a.rootNodes=[i]}});let r=null,s=null;n.on.getInspectorState(a=>{var i;if(a.inspectorId===H){const[l]=t.scene.value.getObjectsByProperty("uuid",a.nodeId);if(!l)return;if(s&&r&&r.parent&&s.remove(r),l.isMesh){const c=Dt(l);l.add(c),r=c,s=l}a.state={object:Object.entries(l).map(([c,o])=>c==="children"?{key:c,value:o.filter(u=>u.type!=="HightlightMesh")}:{key:c,value:o,editable:!0}).filter(({key:c})=>c!=="parent")},l.isScene&&(a.state.info={memory:he(l),objects:l.children.length,calls:t.renderer.value.info.render.calls,triangles:t.renderer.value.info.render.triangles,points:t.renderer.value.info.render.points,lines:t.renderer.value.info.render.lines},a.state.programs=((i=t.renderer.value.info.programs)==null?void 0:i.map(c=>({key:c.name,value:{...c,vertexShader:c.vertexShader,attributes:c.getAttributes(),uniforms:c.getUniforms()}})))||[])}}),n.on.editInspectorState(a=>{a.inspectorId===H&&Ot(t.scene.value,a.nodeId,a.path,a.state.value)})})}const un=["data-scene","data-tres"],Xe=d.defineComponent({__name:"TresCanvas",props:{shadows:{type:Boolean,default:void 0},clearColor:{},toneMapping:{},shadowMapType:{},useLegacyLights:{type:Boolean,default:void 0},outputColorSpace:{},toneMappingExposure:{},renderMode:{default:"always"},dpr:{},camera:{},preset:{},windowSize:{type:Boolean,default:void 0},disableRender:{type:Boolean,default:void 0},context:{},precision:{},alpha:{type:Boolean,default:void 0},premultipliedAlpha:{type:Boolean},antialias:{type:Boolean,default:void 0},stencil:{type:Boolean,default:void 0},preserveDrawingBuffer:{type:Boolean,default:void 0},powerPreference:{},depth:{type:Boolean,default:void 0},logarithmicDepthBuffer:{type:Boolean,default:void 0},failIfMajorPerformanceCaveat:{type:Boolean,default:void 0}},emits:["render","click","double-click","context-menu","pointer-move","pointer-up","pointer-down","pointer-enter","pointer-leave","pointer-over","pointer-out","pointer-missed","wheel","ready"],setup(e,{expose:t,emit:n}){var S;const r=e,s=n,a=d.useSlots(),{logWarning:i}=W(),l=d.ref(),c=d.shallowRef(new _.Scene),o=(S=d.getCurrentInstance())==null?void 0:S.appContext.app;ae(_e);const u=h=>d.defineComponent({setup(){var L;const p=(L=d.getCurrentInstance())==null?void 0:L.appContext;return p&&(p.app=o),d.provide("useTres",h),d.provide("extend",ae),typeof window<"u"&&cn(p==null?void 0:p.app,h),()=>d.h(d.Fragment,null,a!=null&&a.default?a.default():[])}}),w=h=>{const p=u(h),{render:L}=d.createRenderer(Qt(h));L(d.h(p),c.value)},f=(h,p=!1)=>{pe(h.scene.value),p&&(h.renderer.value.dispose(),h.renderer.value.renderLists.dispose(),h.renderer.value.forceContextLoss()),c.value.__tres={root:h},w(h)},v=d.computed(()=>r.disableRender),y=d.shallowRef(null);return t({context:y,dispose:()=>f(y.value,!0)}),d.onMounted(()=>{const h=l;y.value=ze({scene:c.value,canvas:h,windowSize:r.windowSize??!1,disableRender:v.value??!1,rendererOptions:r,emit:s});const{registerCamera:p,camera:L,cameras:O,deregisterCamera:k}=y.value;w(y.value);const j=()=>{const A=new _.PerspectiveCamera(45,window.innerWidth/window.innerHeight,.1,1e3);A.position.set(3,3,3),A.lookAt(0,0,0),p(A);const M=d.watchEffect(()=>{O.value.length>=2&&(A.removeFromParent(),k(A),M==null||M())})};d.watch(()=>r.camera,(A,M)=>{A&&p(A),M&&(M.removeFromParent(),k(M))},{immediate:!0}),L.value||(i("No camera found. Creating a default perspective camera. To have full control over a camera, please add one to the scene."),j())}),d.onUnmounted(()=>{f(y.value)}),(h,p)=>(d.openBlock(),d.createElementBlock("canvas",{ref_key:"canvas",ref:l,"data-scene":c.value.uuid,class:d.normalizeClass(h.$attrs.class),"data-tres":`tresjs ${d.unref(at).version}`,style:d.normalizeStyle({display:"block",width:"100%",height:"100%",position:h.windowSize?"fixed":"relative",top:0,left:0,pointerEvents:"auto",touchAction:"none",...h.$attrs.style})},null,14,un))}}),fn=["TresCanvas","TresLeches","TresScene"],dn={template:{compilerOptions:{isCustomElement:e=>e.startsWith("Tres")&&!fn.includes(e)||e==="primitive"}}},pn={mounted:(e,t)=>{if(t.arg){console.log(`v-log:${t.arg}`,e[t.arg]);return}console.log("v-log",e)}};class He extends _.Line{constructor(t,n){const r=[1,1,0,-1,1,0,-1,-1,0,1,-1,0,1,1,0],s=new _.BufferGeometry;s.setAttribute("position",new _.Float32BufferAttribute(r,3)),s.computeBoundingSphere();const a=new _.LineBasicMaterial({fog:!1});super(s,a),this.light=t,this.color=n,this.type="RectAreaLightHelper";const i=[1,1,0,-1,1,0,-1,-1,0,1,1,0,-1,-1,0,1,-1,0],l=new _.BufferGeometry;l.setAttribute("position",new _.Float32BufferAttribute(i,3)),l.computeBoundingSphere(),this.add(new _.Mesh(l,new _.MeshBasicMaterial({side:_.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:Ze}=W();let le,N;const mn={DirectionalLight:_.DirectionalLightHelper,PointLight:_.PointLightHelper,SpotLight:_.SpotLightHelper,HemisphereLight:_.HemisphereLightHelper,RectAreaLight:He},hn={mounted:e=>{if(!e.isLight){Ze(`${e.type} is not a light`);return}le=mn[e.type],e.parent.add(new le(e,1,e.color.getHex()))},updated:e=>{N=e.parent.children.find(t=>t instanceof le),!(N instanceof He)&&N.update()},unmounted:e=>{if(!e.isLight){Ze(`${e.type} is not a light`);return}N=e.parent.children.find(t=>t instanceof le),N&&N.dispose&&N.dispose(),e.parent.remove(N)}},{logWarning:gn}=W();let V=null;const vn={updated:(e,t)=>{var s;const n=jt(t);if(!n){gn(`v-distance-to: problem with binding value: ${t.value}`);return}V&&(V.dispose(),e.parent.remove(V));const r=n.clone().sub(e.position);r.normalize(),V=new _.ArrowHelper(r,e.position,e.position.distanceTo(n),16776960),e.parent.add(V),console.table([["Distance:",e.position.distanceTo(n)],[`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:${n.x}, y:${n.y}, z:${n==null?void 0:n.z}`]])},unmounted:e=>{V==null||V.dispose(),e.parent.remove(V)}},yn={install(e){e.component("TresCanvas",Xe)}};b.TresCanvas=Xe,b.catalogue=ie,b.createRenderLoop=We,b.default=yn,b.dispose=pe,b.extend=ae,b.isProd=_t,b.normalizeColor=Ae,b.normalizeVectorFlexibleParam=wt,b.onTresReady=qt,b.templateCompilerOptions=dn,b.trasverseObjects=Ue,b.useCamera=Ce,b.useLoader=Vt,b.useLogger=W,b.useLoop=Jt,b.useRaycaster=Ve,b.useRenderLoop=yt,b.useRenderer=$e,b.useSeek=Wt,b.useTexture=Ft,b.useTres=Yt,b.useTresContext=X,b.useTresContextProvider=ze,b.useTresEventManager=Fe,b.vDistanceTo=vn,b.vLightHelper=hn,b.vLog=pn,Object.defineProperties(b,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
8
+ (function(b,d){typeof exports=="object"&&typeof module<"u"?d(exports,require("vue"),require("three"),require("@vueuse/core")):typeof define=="function"&&define.amd?define(["exports","vue","three","@vueuse/core"],d):(b=typeof globalThis<"u"?globalThis:b||self,d(b.tres={},b.Vue,b.Three,b.VueUseCore))})(this,function(b,d,_,C){"use strict";var _n=Object.defineProperty;var wn=(b,d,_)=>d in b?_n(b,d,{enumerable:!0,configurable:!0,writable:!0,value:_}):b[d]=_;var ye=(b,d,_)=>wn(b,typeof d!="symbol"?d+"":d,_);function it(e){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const n in e)if(n!=="default"){const r=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(t,n,r.get?r:{enumerable:!0,get:()=>e[n]})}}return t.default=e,Object.freeze(t)}const _e=it(_),at={name:"@tresjs/core",type:"module",version:"4.2.4",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.3","@vueuse/core":"^10.11.0"},devDependencies:{"@release-it/conventional-changelog":"^8.0.1","@stackblitz/sdk":"^1.11.0","@tresjs/cientos":"3.9.0","@tresjs/eslint-config":"^1.1.0","@types/three":"^0.166.0","@typescript-eslint/eslint-plugin":"^7.16.0","@typescript-eslint/parser":"^7.16.0","@vitejs/plugin-vue":"^5.0.5","@vitest/coverage-c8":"^0.33.0","@vitest/coverage-v8":"^2.0.2","@vitest/ui":"^2.0.2","@vue/test-utils":"^2.4.6",eslint:"^9.6.0","eslint-plugin-vue":"^9.27.0",esno:"^4.7.0",gsap:"^3.12.5",husky:"^9.0.11",jsdom:"^24.1.0",kolorist:"^1.8.0",ohmyfetch:"^0.4.21",pathe:"^1.1.2","release-it":"^17.5.0","rollup-plugin-analyzer":"^4.0.0","rollup-plugin-copy":"^3.5.0","rollup-plugin-visualizer":"^5.12.0",sponsorkit:"^0.14.6",three:"^0.166.1",unocss:"^0.61.3",unplugin:"^1.11.0","unplugin-vue-components":"^0.27.2",vite:"^5.3.3","vite-plugin-banner":"^0.7.1","vite-plugin-dts":"3.9.1","vite-plugin-inspect":"^0.8.4","vite-plugin-require-transform":"^1.0.21","vite-svg-loader":"^5.1.0",vitepress:"1.3.0",vitest:"^2.0.2",vue:"^3.4.31","vue-demi":"^0.14.8"}};function fe(e){return typeof e>"u"}function Z(e){return Array.isArray(e)}function lt(e){return typeof e=="number"}function we(e){return typeof e=="string"}function G(e){return typeof e=="function"}function U(e){return e===Object(e)&&!Z(e)&&!G(e)}function F(e){return U(e)&&"isObject3D"in e&&!!e.isObject3D}function be(e){return U(e)&&"isCamera"in e&&!!e.isCamera}function ct(e){return U(e)&&"isBufferGeometry"in e&&!!e.isBufferGeometry}function ut(e){return U(e)&&"isMaterial"in e&&!!e.isMaterial}function ft(e){return U(e)&&"isLight"in e&&!!e.isLight}function dt(e){return U(e)&&"isFog"in e&&!!e.isFog}function pt(e){return U(e)&&"isScene"in e&&!!e.isScene}function ee(e){return F(e)||ct(e)||ut(e)||dt(e)}function mt(e){return U(e)&&!!e.isPrimitive}const Ce=({sizes:e})=>{const t=d.ref([]),n=d.computed(()=>t.value[0]),r=i=>{const l=i instanceof _.Camera?i:t.value.find(o=>o.uuid===i);if(!l)return;const c=t.value.filter(({uuid:o})=>o!==l.uuid);t.value=[l,...c]},s=(i,l=!1)=>{if(be(i)){const c=i;if(t.value.some(({uuid:o})=>o===c.uuid))return;l?r(c):t.value.push(c)}},a=i=>{if(be(i)){const l=i;t.value=t.value.filter(({uuid:c})=>c!==l.uuid)}};return d.watchEffect(()=>{e.aspectRatio.value&&t.value.forEach(i=>{!i.manual&&(i instanceof _.PerspectiveCamera||ht(i))&&(i instanceof _.PerspectiveCamera?i.aspect=e.aspectRatio.value:(i.left=e.width.value*-.5,i.right=e.width.value*.5,i.top=e.height.value*.5,i.bottom=e.height.value*-.5),i.updateProjectionMatrix())})}),d.onUnmounted(()=>{t.value=[]}),{camera:n,cameras:t,registerCamera:s,deregisterCamera:a,setCameraActive:r}};function ht(e){return e.hasOwnProperty("isOrthographicCamera")&&e.isOrthographicCamera}const Me=C.createEventHook(),Pe=C.createEventHook(),de=C.createEventHook(),K=new _.Clock;let te=0,ne=0;const{pause:gt,resume:Se,isActive:vt}=C.useRafFn(()=>{Me.trigger({delta:te,elapsed:ne,clock:K}),Pe.trigger({delta:te,elapsed:ne,clock:K}),de.trigger({delta:te,elapsed:ne,clock:K})},{immediate:!1});de.on(()=>{te=K.getDelta(),ne=K.getElapsedTime()});let ke=!1;const yt=()=>(ke||(ke=!0,Se()),{onBeforeLoop:Me.on,onLoop:Pe.on,onAfterLoop:de.on,pause:gt,resume:Se,isActive:vt}),_t=!0,re="[TresJS ▲ ■ ●] ";function W(){function e(...r){typeof r[0]=="string"?r[0]=re+r[0]:r.unshift(re),console.error(...r)}function t(...r){typeof r[0]=="string"?r[0]=re+r[0]:r.unshift(re),console.warn(...r)}function n(r,s){}return{logError:e,logWarning:t,logMessage:n}}function wt(e){return typeof e=="number"?[e,e,e]:e instanceof _.Vector3?[e.x,e.y,e.z]:e}function Ae(e){return e instanceof _.Color?e:Array.isArray(e)?new _.Color(...e):new _.Color(e)}class bt extends _e.Mesh{constructor(...n){super(...n);ye(this,"type","HightlightMesh");ye(this,"createTime");this.createTime=Date.now()}onBeforeRender(){const r=(Date.now()-this.createTime)/1e3,i=1+.07*Math.sin(2.5*r);this.scale.set(i,i,i)}}const Le=(e,t)=>{for(const n of Object.keys(t))t[n]instanceof Object&&Object.assign(t[n],Le(e[n],t[n]));return Object.assign(e||{},t),e},Ct=St("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 Oe(e){return e&&e.nodeType===1}function oe(e){return e.replace(/-([a-z])/g,(t,n)=>n.toUpperCase())}const Mt=/\B([A-Z])/g;function Pt(e){return e.replace(Mt,"-$1").toLowerCase()}function St(e,t){const n=Object.create(null),r=e.split(",");for(let s=0;s<r.length;s++)n[r[s]]=!0;return s=>!!n[s]}const De=(e,t)=>{if(!t)return;const n=Array.isArray(t)?t:t.match(/([^[.\]])+/g);return n==null?void 0:n.reduce((r,s)=>r&&r[s],e)},kt=(e,t,n)=>{const r=Array.isArray(t)?t:t.match(/([^[.\]])+/g);r&&r.reduce((s,a,i)=>(s[a]===void 0&&(s[a]={}),i===r.length-1&&(s[a]=n),s[a]),e)};function je(e,t){if(Oe(e)&&Oe(t)){const s=e.attributes,a=t.attributes;return s.length!==a.length?!1:Array.from(s).every(({name:i,value:l})=>t.getAttribute(i)===l)}if(e===t)return!0;if(e===null||typeof e!="object"||t===null||typeof t!="object")return!1;const n=Object.keys(e),r=Object.keys(t);if(n.length!==r.length)return!1;for(const s of n)if(!r.includes(s)||!je(e[s],t[s]))return!1;return!0}function At(e,t){if(!Array.isArray(e)||!Array.isArray(t)||e.length!==t.length)return!1;for(let n=0;n<e.length;n++)if(!je(e[n],t[n]))return!1;return!0}const Lt=Array.isArray;function Ot(e,t,n,r){const s=c=>{if(c.uuid===t)return c;for(const o of c.children){const u=s(o);if(u)return u}},a=s(e);if(!a){console.warn("Object with UUID not found in the scene.");return}let i=a;for(let c=0;c<n.length-1;c++)if(i[n[c]]!==void 0)i=i[n[c]];else{console.warn(`Property path is not valid: ${n.join(".")}`);return}const l=n[n.length-1];i[l]!==void 0?i[l]=r:console.warn(`Property path is not valid: ${n.join(".")}`)}function Dt(e){const t=new _.MeshBasicMaterial({color:11003607,transparent:!0,opacity:.2,depthTest:!1,side:_.DoubleSide});return new bt(e.geometry.clone(),t)}function jt(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 _.Vector3(...t)),t}function Tt(e){return"map"in e}function Te(e){Tt(e)&&e.map&&e.map.dispose(),e.dispose()}function pe(e){var n,r;if(e.parent&&((n=e.removeFromParent)==null||n.call(e)),delete e.__tres,[...e.children].forEach(s=>pe(s)),!(e instanceof _.Scene)){const s=e;e&&((r=e.dispose)==null||r.call(e)),s.geometry&&(s.geometry.dispose(),delete s.geometry),Array.isArray(s.material)?(s.material.forEach(a=>Te(a)),delete s.material):s.material&&(Te(s.material),delete s.material)}}function xt(e,t){let n=0;for(let r=0;r<e.length;r++)t(e[r],r)&&(e[n]=e[r],n++);return e.length=n,e}function me(e,t){let n=e;if(t.includes("-")){const r=t.split("-");let s=r.shift();for(;n&&r.length;)s in n?(n=n[s],s=r.shift()):s=xe(s,r.shift());return{target:n,key:xe(s,...r)}}else return{target:n,key:t}}function xe(...e){return e.map((t,n)=>n===0?t:t.charAt(0).toUpperCase()+t.slice(1)).join("")}const Be=/-\d+$/;function Bt(e,t,n){if(we(n)){if(Be.test(n)){const a=n.replace(Be,""),{target:i,key:l}=me(e,a);if(!Array.isArray(i[l])){const c=i[l],o=[];o.__tresDetach=()=>{o.every(u=>fe(u))&&(i[l]=c)},i[l]=o}}const{target:r,key:s}=me(e,n);t.__tres.previousAttach=r[s],r[s]=Y(t)}else t.__tres.previousAttach=n(e,t)}function It(e,t,n){var r,s,a;if(we(n)){const{target:i,key:l}=me(e,n),c=t.__tres.previousAttach;c===void 0?delete i[l]:i[l]=c,"__tresDetach"in i&&i.__tresDetach()}else(s=(r=t.__tres)==null?void 0:r.previousAttach)==null||s.call(r,e,t);(a=t.__tres)==null||delete a.previousAttach}function q(e,t,n){const r=e;return r.__tres={type:"unknown",eventCount:0,root:n,handlers:{},memoizedProps:{},objects:[],parent:null,previousAttach:null,...t},r.__tres.attach||(r.isMaterial?r.__tres.attach="material":r.isBufferGeometry?r.__tres.attach="geometry":r.isFog&&(r.__tres.attach="fog")),r}function Ie(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()}function Fn(e){}function Rt(e,t,n){var s;if(!G(e.setPixelRatio))return;let r=0;if(Z(n)&&n.length>=2){const[a,i]=n;r=_.MathUtils.clamp(t,a,i)}else lt(n)?r=n:r=t;r!==((s=e.getPixelRatio)==null?void 0:s.call(e))&&e.setPixelRatio(r)}function Et(e,t,n,r,s){const a=[...t.__tres.objects],i=Y(t);if(e=Y(e),i===e)return!0;const l=q(e,t.__tres??{},s),c=t.parent??t.__tres.parent??null,o={...t.__tres.memoizedProps};delete o.object;for(const u of a)Re(u,s),Ee(u,s);i.__tres.objects=[],r.remove(t);for(const[u,w]of Object.entries(o))r.patchProp(l,u,l[u],w);n(e),r.insert(t,c);for(const u of a)r.insert(u,t);return!0}function Y(e){return mt(e)?(e.object.__tres=e.__tres,e.object):e}function Re(e,t){var r,s,a,i;const n=((r=e.__tres)==null?void 0:r.parent)||t.scene.value;e.__tres&&(e.__tres.parent=null),n&&n.__tres&&"objects"in n.__tres&&xt(n.__tres.objects,l=>l!==e),(s=e.__tres)!=null&&s.attach?It(n,e,e.__tres.attach):((i=(a=e.parent)==null?void 0:a.remove)==null||i.call(a,Y(e)),e.parent=null)}function Ee(e,t){var n;(n=e.traverse)==null||n.call(e,r=>{var s;t.deregisterCamera(r),(s=t.eventManager)==null||s.deregisterPointerMissedObject(r)}),t.deregisterCamera(e),Ie(e)}const $t=Number.parseInt(_.REVISION.replace("dev","")),se={realistic:{shadows:!0,physicallyCorrectLights:!0,outputColorSpace:_.SRGBColorSpace,toneMapping:_.ACESFilmicToneMapping,toneMappingExposure:3,shadowMap:{enabled:!0,type:_.PCFSoftShadowMap}},flat:{toneMapping:_.NoToneMapping,toneMappingExposure:1}};function $e({canvas:e,options:t,contextParts:{sizes:n,render:r,invalidate:s,advance:a}}){const i=d.computed(()=>({alpha:C.toValue(t.alpha)??!0,depth:C.toValue(t.depth),canvas:C.unrefElement(e),context:C.toValue(t.context),stencil:C.toValue(t.stencil),antialias:C.toValue(t.antialias)??!0,precision:C.toValue(t.precision),powerPreference:C.toValue(t.powerPreference),premultipliedAlpha:C.toValue(t.premultipliedAlpha),preserveDrawingBuffer:C.toValue(t.preserveDrawingBuffer),logarithmicDepthBuffer:C.toValue(t.logarithmicDepthBuffer),failIfMajorPerformanceCaveat:C.toValue(t.failIfMajorPerformanceCaveat)})),l=d.shallowRef(new _.WebGLRenderer(i.value));function c(){t.renderMode==="on-demand"&&s()}d.watch(i,()=>{l.value.dispose(),l.value=new _.WebGLRenderer(i.value),c()}),d.watch([n.width,n.height],()=>{l.value.setSize(n.width.value,n.height.value),c()},{immediate:!0}),d.watch(()=>t.clearColor,c);const{pixelRatio:o}=C.useDevicePixelRatio(),{logError:u}=W(),f=(()=>{const y=new _.WebGLRenderer,S={shadowMap:{enabled:y.shadowMap.enabled,type:y.shadowMap.type},toneMapping:y.toneMapping,toneMappingExposure:y.toneMappingExposure,outputColorSpace:y.outputColorSpace};return y.dispose(),S})(),v=C.toValue(t.renderMode);return v==="on-demand"&&s(),v==="manual"&&setTimeout(()=>{a()},100),d.watchEffect(()=>{const y=C.toValue(t.preset);y&&(y in se||u(`Renderer Preset must be one of these: ${Object.keys(se).join(", ")}`),Le(l.value,se[y])),Rt(l.value,o.value,C.toValue(t.dpr)),v==="always"&&(r.frames.value=Math.max(1,r.frames.value));const S=(L,O)=>{const k=C.toValue(L),j=()=>{if(y)return De(se[y],O)};if(k!==void 0)return k;const A=j();return A!==void 0?A:De(f,O)},h=(L,O)=>kt(l.value,O,S(L,O));h(t.shadows,"shadowMap.enabled"),h(t.toneMapping??_.ACESFilmicToneMapping,"toneMapping"),h(t.shadowMapType,"shadowMap.type"),$t<150&&h(!t.useLegacyLights,"physicallyCorrectLights"),h(t.outputColorSpace,"outputColorSpace"),h(t.toneMappingExposure,"toneMappingExposure");const p=S(t.clearColor,"clearColor");p&&l.value.setClearColor(p?Ae(p):new _.Color(0))}),d.onUnmounted(()=>{l.value.dispose(),l.value.forceContextLoss()}),{renderer:l}}const Ut=e=>!!e&&e.constructor===Array;function Ue(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 Vt(e,t,n,r,s){const{logError:a}=W(),i=new e;s&&s(i),n&&n(i);const c=(Array.isArray(t)?t:[t]).map(o=>new Promise((u,w)=>{i.load(o,f=>{const v=f;v.scene&&Object.assign(v,Ue(v.scene)),u(v)},r,f=>w(a("[useLoader] - Failed to load resource",f)))}));return Ut(t)?await Promise.all(c):await c[0]}async function Ft(e,t){const n=new _.TextureLoader(t),r=s=>new Promise((a,i)=>{n.load(s,l=>a(l),()=>null,()=>{i(new Error("[useTextures] - Failed to load texture"))})});if(Lt(e)){const s=await Promise.all(e.map(a=>r(a)));return e.length>1?s:s[0]}else{const{map:s,displacementMap:a,normalMap:i,roughnessMap:l,metalnessMap:c,aoMap:o,alphaMap:u,matcap:w}=e;return{map:s?await r(s):null,displacementMap:a?await r(a):null,normalMap:i?await r(i):null,roughnessMap:l?await r(l):null,metalnessMap:c?await r(c):null,aoMap:o?await r(o):null,alphaMap:u?await r(u):null,matcap:w?await r(w):null}}}const Ve=(e,t)=>{const n=d.computed(()=>t.renderer.value.domElement),r=d.shallowRef([]),{x:s,y:a}=C.usePointer({target:n});let i=0;const{width:l,height:c,top:o,left:u}=C.useElementBounding(n),w=({x:g,y:D})=>{if(n.value)return{x:(g-u.value)/l.value*2-1,y:-((D-o.value)/c.value)*2+1}},f=({x:g,y:D})=>{if(t.camera.value)return t.raycaster.value.setFromCamera(new _.Vector2(g,D),t.camera.value),r.value=t.raycaster.value.intersectObjects(e.value,!0),r.value},v=g=>{const D=w({x:(g==null?void 0:g.clientX)??s.value,y:(g==null?void 0:g.clientY)??a.value});return D?f(D)||[]:[]},y=C.createEventHook(),S=C.createEventHook(),h=C.createEventHook(),p=C.createEventHook(),L=C.createEventHook(),O=C.createEventHook(),k=C.createEventHook(),j=C.createEventHook();function A(g){const D={};for(const z in g)typeof z!="function"&&(D[z]=g[z]);return D}const M=(g,D)=>{var rt,ot,st;const z=A(D),ue=new _.Vector3(D==null?void 0:D.clientX,D==null?void 0:D.clientY,0).unproject((rt=t.camera)==null?void 0:rt.value);g.trigger({...z,intersections:r.value,unprojectedPoint:ue,ray:(ot=t.raycaster)==null?void 0:ot.value.ray,camera:(st=t.camera)==null?void 0:st.value,sourceEvent:D,delta:i,stopPropagating:!1})};let B;const x=g=>{v(g),M(h,g),B=g},m=()=>{B&&x(B)};let P,T,E;const R=g=>{var D;P=(D=r.value[0])==null?void 0:D.object,i=0,T=new _.Vector2((g==null?void 0:g.clientX)??s.value,(g==null?void 0:g.clientY)??a.value),M(L,g)};let $,I=!1;const ce=g=>{var D,z,ue;g instanceof PointerEvent&&(r.value.length===0&&M(O,g),P===((D=r.value[0])==null?void 0:D.object)&&(E=new _.Vector2((g==null?void 0:g.clientX)??s.value,(g==null?void 0:g.clientY)??a.value),i=T==null?void 0:T.distanceTo(E),g.button===0?(M(y,g),$===((z=r.value[0])==null?void 0:z.object)?I=!0:($=(ue=r.value[0])==null?void 0:ue.object,I=!1)):g.button===2&&M(k,g)),M(p,g))},et=g=>{I&&(M(S,g),$=void 0,I=!1)},tt=g=>M(h,g),nt=g=>M(j,g);return n.value.addEventListener("pointerup",ce),n.value.addEventListener("pointerdown",R),n.value.addEventListener("pointermove",x),n.value.addEventListener("pointerleave",tt),n.value.addEventListener("dblclick",et),n.value.addEventListener("wheel",nt),d.onUnmounted(()=>{n!=null&&n.value&&(n.value.removeEventListener("pointerup",ce),n.value.removeEventListener("pointerdown",R),n.value.removeEventListener("pointermove",x),n.value.removeEventListener("pointerleave",tt),n.value.removeEventListener("dblclick",et),n.value.removeEventListener("wheel",nt))}),{intersects:r,onClick:g=>y.on(g).off,onDblClick:g=>S.on(g).off,onContextMenu:g=>k.on(g).off,onPointerMove:g=>h.on(g).off,onPointerUp:g=>p.on(g).off,onPointerDown:g=>L.on(g).off,onPointerMissed:g=>O.on(g).off,onWheel:g=>j.on(g).off,forceUpdate:m}};function Wt(){const{logWarning:e}=W();function t(a,i,l){let c=null;return a.traverse(o=>{o[i]===l&&(c=o)}),c||e(`Child with ${i} '${l}' not found.`),c}function n(a,i,l){const c=[];return a.traverse(o=>{o[i].includes(l)&&c.push(o)}),c.length||e(`Children with ${i} '${l}' not found.`),c}function r(a,i){return t(a,"name",i)}function s(a,i){return n(a,"name",i)}return{seek:t,seekByName:r,seekAll:n,seekAllByName:s}}function he(e){let t=0;return e.traverse(n=>{if(n.isMesh&&n.geometry&&n.type!=="HightlightMesh"){const r=n.geometry,s=r.attributes.position.count*3*Float32Array.BYTES_PER_ELEMENT,a=r.index?r.index.count*Uint32Array.BYTES_PER_ELEMENT:0,i=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,c=s+a+i+l;t+=c}}),t}function Nt(e){return(e/1024).toFixed(2)}const ie=d.ref({}),ae=e=>Object.assign(ie.value,e);function Fe(e,t,n){var x;const r=d.shallowRef(),s=d.shallowRef();e&&(r.value=e),t&&(s.value=t);const a=m=>{var P;return((P=m.__tres)==null?void 0:P.eventCount)>0},i=m=>{var P;return((P=m.children)==null?void 0:P.some(T=>i(T)))||a(m)},l=d.shallowRef(((x=r.value)==null?void 0:x.children).filter(i)||[]);function c(m,P){if(Array.isArray(m))for(const T of m)T(P);typeof m=="function"&&m(P)}function o(m,P){const T=[],E=()=>P.stopPropagating=!0;P.stopPropagation=E;for(const R of P==null?void 0:P.intersections){if(P.stopPropagating)return;P={...P,...R};const{object:$}=R;P.eventObject=$,c($[m],P),T.push($);let I=$.parent;for(;I!==null&&!P.stopPropagating&&!T.includes(I);)P.eventObject=I,c(I[m],P),T.push(I),I=I.parent;const ce=Pt(m.slice(2));n(ce,{intersection:R,event:P})}}const{onClick:u,onDblClick:w,onContextMenu:f,onPointerMove:v,onPointerDown:y,onPointerUp:S,onPointerMissed:h,onWheel:p,forceUpdate:L}=Ve(l,t);S(m=>o("onPointerUp",m)),y(m=>o("onPointerDown",m)),u(m=>o("onClick",m)),w(m=>o("onDoubleClick",m)),f(m=>o("onContextMenu",m)),p(m=>o("onWheel",m));let O=[];v(m=>{const P=m.intersections.map(({object:E})=>E),T=m.intersections;O.forEach(({object:E})=>{P.includes(E)||(m.intersections=O,o("onPointerLeave",m),o("onPointerOut",m))}),m.intersections=T,m.intersections.forEach(({object:E})=>{O.includes(E)||(o("onPointerEnter",m),o("onPointerOver",m))}),o("onPointerMove",m),O=m.intersections});const k=[];h(m=>{const P=()=>m.stopPropagating=!0;m.stopPropagation=P,k.forEach(T=>{m.stopPropagating||(m.eventObject=T,c(T.onPointerMissed,m))}),n("pointer-missed",{event:m})});function j(m){ee(m)&&F(m)&&l.value.push(m)}function A(m){if(ee(m)&&F(m)){const P=l.value.indexOf(m);P>-1&&l.value.splice(P,1)}}function M(m){ee(m)&&F(m)&&m.onPointerMissed&&k.push(m)}function B(m){if(ee(m)&&F(m)){const P=k.indexOf(m);P>-1&&k.splice(P,1)}}return t.eventManager={forceUpdate:L,registerObject:j,deregisterObject:A,registerPointerMissedObject:M,deregisterPointerMissedObject:B},{forceUpdate:L,registerObject:j,deregisterObject:A,registerPointerMissedObject:M,deregisterPointerMissedObject:B}}function zt(e,t,n=10){const r=C.toValue(e)?C.useWindowSize():C.useElementSize(d.computed(()=>C.toValue(t).parentElement)),s=d.readonly(C.refDebounced(r.width,n)),a=d.readonly(C.refDebounced(r.height,n)),i=d.computed(()=>s.value/a.value);return{height:a,width:s,aspectRatio:i}}function ge(){const e=new Map,t=new Set;let n=0,r=!1;const s=()=>{const o=Array.from(e.entries()).sort((u,w)=>{const f=u[1].priority-w[1].priority;return f===0?u[1].addI-w[1].addI:f});t.clear(),o.forEach(u=>t.add(u[0]))},a=o=>{e.delete(o),t.delete(o)};return{on:(o,u=0)=>{e.set(o,{priority:u,addI:n++});const w=()=>a(o);return C.tryOnScopeDispose(w),r=!0,{off:w}},off:a,trigger:(...o)=>{r&&(s(),r=!1),t.forEach(u=>u(...o))},dispose:()=>{e.clear(),t.clear()},get count(){return e.size}}}function We(){let e=!0,t=!0,n=!1;const r=new _.Clock(!1),s=d.ref(r.running),a=d.ref(!1);let i;const l=_.MathUtils.generateUUID();let c=null;const o=ge(),u=ge(),w=ge();A();let f={};function v(M){f=M}function y(M,B,x=0){switch(B){case"before":return o.on(M,x);case"render":return c||(c=M),u.dispose(),u.on(M);case"after":return w.on(M,x)}}function S(){t&&(t=!1,A(),j())}function h(){t=!0,A(),cancelAnimationFrame(i)}function p(){n=!1,A()}function L(){n=!0,A()}function O(){a.value=!0}function k(){a.value=!1}function j(){if(!e){i=requestAnimationFrame(j);return}const M=r.getDelta(),B=r.getElapsedTime(),x={camera:d.unref(f.camera),scene:d.unref(f.scene),renderer:d.unref(f.renderer),raycaster:d.unref(f.raycaster),controls:d.unref(f.controls),invalidate:f.invalidate,advance:f.advance},m={delta:M,elapsed:B,clock:r,...x};s.value&&o.trigger(m),a.value||(u.count?u.trigger(m):c&&c(m)),s.value&&w.trigger(m),i=requestAnimationFrame(j)}function A(){const M=!t&&!n;r.running!==M&&(r.running?r.stop():r.start()),s.value=r.running}return{loopId:l,register:(M,B,x)=>y(M,B,x),start:S,stop:h,pause:L,resume:p,pauseRender:O,resumeRender:k,isRenderPaused:a,isActive:s,setContext:v,setReady:M=>e=M}}function Gt(e,t,n=100){n=n<=0?100:n;const r=C.createEventHook(),s=new Set;let a=!1,i=!1,l=null;function c(){l&&clearTimeout(l),!i&&!a&&e()?(r.trigger(t),s.forEach(f=>f()),s.clear(),a=!0):!i&&!a&&(l=setTimeout(c,n))}function o(){i=!0,l&&clearTimeout(l)}c();const u=(f,...v)=>{f(...v)};return{on:f=>{if(a)return u(f,t),{off:()=>{}};{const v=r.on(f);return s.add(v.off),r.on(f)}},off:r.off,trigger:r.trigger,cancel:o}}const Q=new WeakMap;function Ne(e){if(e=e||X(),Q.has(e))return Q.get(e);const t=100,n=Date.now(),a=Gt(()=>{if(Date.now()-n>=t)return!0;{const i=e.renderer.value,l=(i==null?void 0:i.domElement)||{width:0,height:0};return!!(i&&l.width>0&&l.height>0)}},e);return Q.set(e,a),a}function qt(e){const t=X();if(t)return Q.has(t)?Q.get(t).on(e):Ne(t).on(e)}function ze({scene:e,canvas:t,windowSize:n,disableRender:r,rendererOptions:s,emit:a}){const i=d.shallowRef(e),l=zt(n,t),{camera:c,cameras:o,registerCamera:u,deregisterCamera:w,setCameraActive:f}=Ce({sizes:l,scene:e}),v={mode:d.ref(s.renderMode||"always"),priority:d.ref(0),frames:d.ref(0),maxFrames:60,canBeInvalidated:d.computed(()=>v.mode.value==="on-demand"&&v.frames.value===0)};function y(R=1){s.renderMode==="on-demand"&&(v.frames.value=Math.min(v.maxFrames,v.frames.value+R))}function S(){s.renderMode==="manual"&&(v.frames.value=1)}const{renderer:h}=$e({scene:e,canvas:t,options:s,emit:a,contextParts:{sizes:l,camera:c,render:v,invalidate:y,advance:S},disableRender:r}),p={sizes:l,scene:i,camera:c,cameras:d.readonly(o),renderer:h,raycaster:d.shallowRef(new _.Raycaster),controls:d.ref(null),perf:{maxFrames:160,fps:{value:0,accumulator:[]},memory:{currentMem:0,allocatedMem:0,accumulator:[]}},render:v,advance:S,extend:ae,invalidate:y,registerCamera:u,setCameraActive:f,deregisterCamera:w,loop:We()};d.provide("useTres",p),p.scene.value.__tres={root:p},p.loop.register(()=>{c.value&&v.frames.value>0&&(h.value.render(e,c.value),a("render",p.renderer.value)),v.priority.value=0,v.mode.value==="always"?v.frames.value=1:v.frames.value=Math.max(0,v.frames.value-1)},"render");const{on:L,cancel:O}=Ne(p);p.loop.setReady(!1),p.loop.start(),L(()=>{a("ready",p),p.loop.setReady(!0),Fe(e,p,a)}),d.onUnmounted(()=>{O(),p.loop.stop()});const k=100,j=C.useFps({every:k}),{isSupported:A,memory:M}=C.useMemory({interval:k}),B=160;let x=performance.now();const m=({timestamp:R})=>{p.scene.value&&(p.perf.memory.allocatedMem=he(p.scene.value)),R-x>=k&&(x=R,p.perf.fps.accumulator.push(j.value),p.perf.fps.accumulator.length>B&&p.perf.fps.accumulator.shift(),p.perf.fps.value=j.value,A.value&&M.value&&(p.perf.memory.accumulator.push(M.value.usedJSHeapSize/1024/1024),p.perf.memory.accumulator.length>B&&p.perf.memory.accumulator.shift(),p.perf.memory.currentMem=p.perf.memory.accumulator.reduce(($,I)=>$+I,0)/p.perf.memory.accumulator.length))};let P=0;const T=1,{pause:E}=C.useRafFn(({delta:R})=>{window.__TRES__DEVTOOLS__&&(m({timestamp:performance.now()}),P+=R,P>=T&&(window.__TRES__DEVTOOLS__.cb(p),P=0))},{immediate:!0});return d.onUnmounted(()=>{E()}),p}function X(){const e=d.inject("useTres");if(!e)throw new Error("useTresContext must be used together with useTresContextProvider");return e}const Yt=X;function Jt(){const{camera:e,scene:t,renderer:n,loop:r,raycaster:s,controls:a,invalidate:i,advance:l}=X();r.setContext({camera:e,scene:t,renderer:n,raycaster:s,controls:a,invalidate:i,advance:l});function c(w,f=0){return r.register(w,"before",f)}function o(w){return r.register(w,"render")}function u(w,f=0){return r.register(w,"after",f)}return{pause:r.pause,resume:r.resume,pauseRender:r.pauseRender,resumeRender:r.resumeRender,isActive:r.isActive,onBeforeRender:c,render:o,onAfterRender:u}}function Kt(e,t={},n={}){let r=e;const s=l=>{r=l};let a=new Proxy({},{});const i={has(l,c){return c in t||c in r},get(l,c,o){return c in t?t[c](r):r[c]},set(l,c,o){return n[c]?n[c](o,r,a,s):r[c]=o,!0}};return a=new Proxy({},i),a}const{logError:Ge}=W(),qe=["onClick","onContextMenu","onPointerMove","onPointerEnter","onPointerLeave","onPointerOver","onPointerOut","onDoubleClick","onPointerDown","onPointerUp","onPointerCancel","onPointerMissed","onLostPointerCapture","onWheel"],Qt=e=>{const t=e.scene.value;function n(o,u,w,f){if(f||(f={}),f.args||(f.args=[]),o==="template"||Ct(o))return null;let v=o.replace("Tres",""),y;if(o==="primitive"){(!U(f.object)||d.isRef(f.object))&&Ge("Tres primitives need an 'object' prop, whose value is an object or shallowRef<object>"),v=f.object.type;const S={};y=Kt(f.object,{object:p=>p,isPrimitive:()=>!0,__tres:()=>S},{object:(p,L,O,k)=>{Et(p,O,k,{patchProp:a,remove:s,insert:r},e)},__tres:p=>{Object.assign(S,p)}})}else{const S=ie.value[v];S||Ge(`${v} is not defined on the THREE namespace. Use extend to add it to the catalog.`),y=new S(...f.args)}return y?(y.isCamera&&(f!=null&&f.position||y.position.set(3,3,3),f!=null&&f.lookAt||y.lookAt(0,0,0)),y=q(y,{...y.__tres,type:v,memoizedProps:f,eventCount:0,primitive:o==="primitive",attach:f.attach},e),y):null}function r(o,u){var v,y,S;if(!o)return;u=u||t;const w=o.__tres?o:q(o,{},e),f=u.__tres?u:q(u,{},e);o=Y(w),u=Y(f),o.__tres&&((v=o.__tres)==null?void 0:v.eventCount)>0&&((y=e.eventManager)==null||y.registerObject(o)),e.registerCamera(o),(S=e.eventManager)==null||S.registerPointerMissedObject(o),w.__tres.attach?Bt(f,w,w.__tres.attach):F(o)&&F(f)&&(f.add(o),o.dispatchEvent({type:"added"})),w.__tres.parent=f,f.__tres.objects&&!f.__tres.objects.includes(w)&&f.__tres.objects.push(w)}function s(o,u){var y,S,h,p;if(!o)return;o!=null&&o.__tres&&((y=o.__tres)==null?void 0:y.eventCount)>0&&((S=e.eventManager)==null||S.deregisterObject(o)),u=fe(u)?"default":u;const w=(h=o.__tres)==null?void 0:h.dispose;fe(w)||(w===null?u=!1:u=w);const f=(p=o.__tres)==null?void 0:p.primitive,v=u==="default"?!f:!!u;if(o.__tres&&"objects"in o.__tres&&[...o.__tres.objects].forEach(L=>s(L,u)),v&&o.children&&[...o.children].forEach(L=>s(L,u)),Re(o,e),Ee(o,e),v&&!pt(o)){if(G(u))u(o);else if(G(o.dispose))try{o.dispose()}catch{}}"__tres"in o&&delete o.__tres}function a(o,u,w,f){var L,O;if(!o)return;let v=o,y=u;if(o.__tres&&(o.__tres.memoizedProps[u]=f),u==="attach"){const k=((L=o.__tres)==null?void 0:L.parent)||o.parent;s(o),q(o,{attach:f},e),k&&r(o,k);return}if(u==="dispose"){o.__tres||(o=q(o,{},e)),o.__tres.dispose=f;return}if(F(o)&&y==="blocks-pointer-events"){f||f===""?o[y]=f:delete o[y];return}qe.includes(u)&&o.__tres&&(o.__tres.eventCount+=1);let S=oe(y),h=v==null?void 0:v[S];if(y==="args"){const k=o,j=w??[],A=f??[],M=((O=o.__tres)==null?void 0:O.type)||o.type;M&&j.length&&!At(j,A)&&(v=Object.assign(k,new ie.value[M](...f)));return}if(v.type==="BufferGeometry"){if(y==="args")return;v.setAttribute(oe(y),new _.BufferAttribute(...f));return}if(y.includes("-")&&h===void 0){const k=y.split("-");h=k.reduce((j,A)=>j[oe(A)],v),y=k.pop(),S=y,h!=null&&h.set||(v=k.reduce((j,A)=>j[oe(A)],v))}let p=f;if(p===""&&(p=!0),G(h)){qe.includes(u)||(Z(p)?o[S](...p):o[S](p)),S.startsWith("on")&&G(p)&&(v[S]=p);return}!(h!=null&&h.set)&&!G(h)?v[S]=p:h.constructor===p.constructor&&(h!=null&&h.copy)?h==null||h.copy(p):Z(p)?h.set(...p):!h.isColor&&h.setScalar?h.setScalar(p):h.set(p),Ie(o)}function i(o){var u;return((u=o==null?void 0:o.__tres)==null?void 0:u.parent)||null}function l(o){const u=q(new _.Object3D,{type:"Comment"},e);return u.name=o,u}function c(o){var v;const u=i(o),w=((v=u==null?void 0:u.__tres)==null?void 0:v.objects)||[],f=w.indexOf(o);return f<0||f>=w.length-1?null:w[f+1]}return{insert:r,remove:s,createElement:n,patchProp:a,parentNode:i,createText:()=>void 0,createComment:l,setText:()=>void 0,setElementText:()=>void 0,nextSibling:c,querySelector:()=>void 0,setScopeId:()=>void 0,cloneNode:()=>void 0,insertStaticContent:()=>void 0}};function Xt(){return Ye().__VUE_DEVTOOLS_GLOBAL_HOOK__}function Ye(){return typeof navigator<"u"&&typeof window<"u"?window:typeof globalThis<"u"?globalThis:{}}const Ht=typeof Proxy=="function",Zt="devtools-plugin:setup",en="plugin:settings:set";let J,ve;function tn(){var e;return J!==void 0||(typeof window<"u"&&window.performance?(J=!0,ve=window.performance):typeof globalThis<"u"&&(!((e=globalThis.perf_hooks)===null||e===void 0)&&e.performance)?(J=!0,ve=globalThis.perf_hooks.performance):J=!1),J}function nn(){return tn()?ve.now():Date.now()}class rn{constructor(t,n){this.target=null,this.targetQueue=[],this.onQueue=[],this.plugin=t,this.hook=n;const r={};if(t.settings)for(const i in t.settings){const l=t.settings[i];r[i]=l.defaultValue}const s=`__vue-devtools-plugin-settings__${t.id}`;let a=Object.assign({},r);try{const i=localStorage.getItem(s),l=JSON.parse(i);Object.assign(a,l)}catch{}this.fallbacks={getSettings(){return a},setSettings(i){try{localStorage.setItem(s,JSON.stringify(i))}catch{}a=i},now(){return nn()}},n&&n.on(en,(i,l)=>{i===this.plugin.id&&this.fallbacks.setSettings(l)}),this.proxiedOn=new Proxy({},{get:(i,l)=>this.target?this.target.on[l]:(...c)=>{this.onQueue.push({method:l,args:c})}}),this.proxiedTarget=new Proxy({},{get:(i,l)=>this.target?this.target[l]:l==="on"?this.proxiedOn:Object.keys(this.fallbacks).includes(l)?(...c)=>(this.targetQueue.push({method:l,args:c,resolve:()=>{}}),this.fallbacks[l](...c)):(...c)=>new Promise(o=>{this.targetQueue.push({method:l,args:c,resolve:o})})})}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 on(e,t){const n=e,r=Ye(),s=Xt(),a=Ht&&n.enableEarlyProxy;if(s&&(r.__VUE_DEVTOOLS_PLUGIN_API_AVAILABLE__||!a))s.emit(Zt,e,t);else{const i=a?new rn(n,s):null;(r.__VUE_DEVTOOLS_PLUGINS__=r.__VUE_DEVTOOLS_PLUGINS__||[]).push({pluginDescriptor:n,setupFn:t,proxy:i}),i&&t(i.proxiedTarget)}}function sn(e,t){const n=`▲ ■ ●${e}`;typeof Je=="function"?Je(n,t):console.log(n)}function Je(e,t){throw new Error(e+t)}const Ke=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=he(e);return n>0&&t.tags.push({label:`${Nt(n)} KB`,textColor:15707189,backgroundColor:16775644,tooltip:"Memory usage"}),e.type.includes("Light")&&(ft(e)&&t.tags.push({label:`${e.intensity}`,textColor:9738662,backgroundColor:16316922,tooltip:"Intensity"}),t.tags.push({label:`#${new _.Color(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 Qe(e,t,n=""){e.children.forEach(r=>{if(r.type==="HightlightMesh"||n&&!r.type.includes(n)&&!r.name.includes(n))return;const s=Ke(r);t.children.push(s),Qe(r,s,n)})}const an=[],H="tres:inspector",ln=d.reactive({sceneGraph:null});function cn(e,t){on({id:"dev.esm.tres",label:"TresJS 🪐",logo:"https://raw.githubusercontent.com/Tresjs/tres/main/public/favicon.svg",packageName:"tresjs",homepage:"https://tresjs.org",componentStateTypes:an,app:e},n=>{typeof n.now!="function"&&sn("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:H,label:"TresJS 🪐",icon:"account_tree",treeFilterPlaceholder:"Search instances"}),setInterval(()=>{n.sendInspectorTree(H)},1e3),setInterval(()=>{n.notifyComponentUpdate()},5e3),n.on.getInspectorTree(a=>{if(a.inspectorId===H){const i=Ke(t.scene.value);Qe(t.scene.value,i,a.filter),ln.sceneGraph=i,a.rootNodes=[i]}});let r=null,s=null;n.on.getInspectorState(a=>{var i;if(a.inspectorId===H){const[l]=t.scene.value.getObjectsByProperty("uuid",a.nodeId);if(!l)return;if(s&&r&&r.parent&&s.remove(r),l.isMesh){const c=Dt(l);l.add(c),r=c,s=l}a.state={object:Object.entries(l).map(([c,o])=>c==="children"?{key:c,value:o.filter(u=>u.type!=="HightlightMesh")}:{key:c,value:o,editable:!0}).filter(({key:c})=>c!=="parent")},l.isScene&&(a.state.info={memory:he(l),objects:l.children.length,calls:t.renderer.value.info.render.calls,triangles:t.renderer.value.info.render.triangles,points:t.renderer.value.info.render.points,lines:t.renderer.value.info.render.lines},a.state.programs=((i=t.renderer.value.info.programs)==null?void 0:i.map(c=>({key:c.name,value:{...c,vertexShader:c.vertexShader,attributes:c.getAttributes(),uniforms:c.getUniforms()}})))||[])}}),n.on.editInspectorState(a=>{a.inspectorId===H&&Ot(t.scene.value,a.nodeId,a.path,a.state.value)})})}const un=["data-scene","data-tres"],Xe=d.defineComponent({__name:"TresCanvas",props:{shadows:{type:Boolean,default:void 0},clearColor:{},toneMapping:{},shadowMapType:{},useLegacyLights:{type:Boolean,default:void 0},outputColorSpace:{},toneMappingExposure:{},renderMode:{default:"always"},dpr:{},camera:{},preset:{},windowSize:{type:Boolean,default:void 0},disableRender:{type:Boolean,default:void 0},context:{},precision:{},alpha:{type:Boolean,default:void 0},premultipliedAlpha:{type:Boolean},antialias:{type:Boolean,default:void 0},stencil:{type:Boolean,default:void 0},preserveDrawingBuffer:{type:Boolean,default:void 0},powerPreference:{},depth:{type:Boolean,default:void 0},logarithmicDepthBuffer:{type:Boolean,default:void 0},failIfMajorPerformanceCaveat:{type:Boolean,default:void 0}},emits:["render","click","double-click","context-menu","pointer-move","pointer-up","pointer-down","pointer-enter","pointer-leave","pointer-over","pointer-out","pointer-missed","wheel","ready"],setup(e,{expose:t,emit:n}){var S;const r=e,s=n,a=d.useSlots(),{logWarning:i}=W(),l=d.ref(),c=d.shallowRef(new _.Scene),o=(S=d.getCurrentInstance())==null?void 0:S.appContext.app;ae(_e);const u=h=>d.defineComponent({setup(){var L;const p=(L=d.getCurrentInstance())==null?void 0:L.appContext;return p&&(p.app=o),d.provide("useTres",h),d.provide("extend",ae),typeof window<"u"&&cn(p==null?void 0:p.app,h),()=>d.h(d.Fragment,null,a!=null&&a.default?a.default():[])}}),w=h=>{const p=u(h),{render:L}=d.createRenderer(Qt(h));L(d.h(p),c.value)},f=(h,p=!1)=>{pe(h.scene.value),p&&(h.renderer.value.dispose(),h.renderer.value.renderLists.dispose(),h.renderer.value.forceContextLoss()),c.value.__tres={root:h},w(h)},v=d.computed(()=>r.disableRender),y=d.shallowRef(null);return t({context:y,dispose:()=>f(y.value,!0)}),d.onMounted(()=>{const h=l;y.value=ze({scene:c.value,canvas:h,windowSize:r.windowSize??!1,disableRender:v.value??!1,rendererOptions:r,emit:s});const{registerCamera:p,camera:L,cameras:O,deregisterCamera:k}=y.value;w(y.value);const j=()=>{const A=new _.PerspectiveCamera(45,window.innerWidth/window.innerHeight,.1,1e3);A.position.set(3,3,3),A.lookAt(0,0,0),p(A);const M=d.watchEffect(()=>{O.value.length>=2&&(A.removeFromParent(),k(A),M==null||M())})};d.watch(()=>r.camera,(A,M)=>{A&&p(A),M&&(M.removeFromParent(),k(M))},{immediate:!0}),L.value||(i("No camera found. Creating a default perspective camera. To have full control over a camera, please add one to the scene."),j())}),d.onUnmounted(()=>{f(y.value)}),(h,p)=>(d.openBlock(),d.createElementBlock("canvas",{ref_key:"canvas",ref:l,"data-scene":c.value.uuid,class:d.normalizeClass(h.$attrs.class),"data-tres":`tresjs ${d.unref(at).version}`,style:d.normalizeStyle({display:"block",width:"100%",height:"100%",position:h.windowSize?"fixed":"relative",top:0,left:0,pointerEvents:"auto",touchAction:"none",...h.$attrs.style})},null,14,un))}}),fn=["TresCanvas","TresLeches","TresScene"],dn={template:{compilerOptions:{isCustomElement:e=>e.startsWith("Tres")&&!fn.includes(e)||e==="primitive"}}},pn={mounted:(e,t)=>{if(t.arg){console.log(`v-log:${t.arg}`,e[t.arg]);return}console.log("v-log",e)}};class He extends _.Line{constructor(t,n){const r=[1,1,0,-1,1,0,-1,-1,0,1,-1,0,1,1,0],s=new _.BufferGeometry;s.setAttribute("position",new _.Float32BufferAttribute(r,3)),s.computeBoundingSphere();const a=new _.LineBasicMaterial({fog:!1});super(s,a),this.light=t,this.color=n,this.type="RectAreaLightHelper";const i=[1,1,0,-1,1,0,-1,-1,0,1,1,0,-1,-1,0,1,-1,0],l=new _.BufferGeometry;l.setAttribute("position",new _.Float32BufferAttribute(i,3)),l.computeBoundingSphere(),this.add(new _.Mesh(l,new _.MeshBasicMaterial({side:_.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:Ze}=W();let le,N;const mn={DirectionalLight:_.DirectionalLightHelper,PointLight:_.PointLightHelper,SpotLight:_.SpotLightHelper,HemisphereLight:_.HemisphereLightHelper,RectAreaLight:He},hn={mounted:e=>{if(!e.isLight){Ze(`${e.type} is not a light`);return}le=mn[e.type],e.parent.add(new le(e,1,e.color.getHex()))},updated:e=>{N=e.parent.children.find(t=>t instanceof le),!(N instanceof He)&&N.update()},unmounted:e=>{if(!e.isLight){Ze(`${e.type} is not a light`);return}N=e.parent.children.find(t=>t instanceof le),N&&N.dispose&&N.dispose(),e.parent.remove(N)}},{logWarning:gn}=W();let V=null;const vn={updated:(e,t)=>{var s;const n=jt(t);if(!n){gn(`v-distance-to: problem with binding value: ${t.value}`);return}V&&(V.dispose(),e.parent.remove(V));const r=n.clone().sub(e.position);r.normalize(),V=new _.ArrowHelper(r,e.position,e.position.distanceTo(n),16776960),e.parent.add(V),console.table([["Distance:",e.position.distanceTo(n)],[`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:${n.x}, y:${n.y}, z:${n==null?void 0:n.z}`]])},unmounted:e=>{V==null||V.dispose(),e.parent.remove(V)}},yn={install(e){e.component("TresCanvas",Xe)}};b.TresCanvas=Xe,b.catalogue=ie,b.createRenderLoop=We,b.default=yn,b.dispose=pe,b.extend=ae,b.isProd=_t,b.normalizeColor=Ae,b.normalizeVectorFlexibleParam=wt,b.onTresReady=qt,b.templateCompilerOptions=dn,b.trasverseObjects=Ue,b.useCamera=Ce,b.useLoader=Vt,b.useLogger=W,b.useLoop=Jt,b.useRaycaster=Ve,b.useRenderLoop=yt,b.useRenderer=$e,b.useSeek=Wt,b.useTexture=Ft,b.useTres=Yt,b.useTresContext=X,b.useTresContextProvider=ze,b.useTresEventManager=Fe,b.vDistanceTo=vn,b.vLightHelper=hn,b.vLog=pn,Object.defineProperties(b,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@tresjs/core",
3
3
  "type": "module",
4
- "version": "4.2.3",
4
+ "version": "4.2.4",
5
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/)",