@tresjs/core 4.3.1 → 4.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/tres.umd.cjs CHANGED
@@ -1,8 +1,8 @@
1
1
  /**
2
2
  * name: @tresjs/core
3
- * version: v4.3.1
4
- * (c) 2024
3
+ * version: v4.3.2
4
+ * (c) 2025
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,f){typeof exports=="object"&&typeof module<"u"?f(exports,require("vue"),require("three"),require("@vueuse/core")):typeof define=="function"&&define.amd?define(["exports","vue","three","@vueuse/core"],f):(C=typeof globalThis<"u"?globalThis:C||self,f(C.tres={},C.Vue,C.Three,C.VueUseCore))})(this,function(C,f,g,M){"use strict";var Pn=Object.defineProperty;var Sn=(C,f,g)=>f in C?Pn(C,f,{enumerable:!0,configurable:!0,writable:!0,value:g}):C[f]=g;var ye=(C,f,g)=>Sn(C,typeof f!="symbol"?f+"":f,g);function ct(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=ct(g),ut={name:"@tresjs/core",type:"module",version:"4.3.1",packageManager:"pnpm@9.1.4",description:"Declarative ThreeJS using Vue Components",author:"Alvaro Saburido <hola@alvarosaburido.dev> (https://github.com/alvarosabu/)",license:"MIT",repository:{type:"git",url:"git+https://github.com/Tresjs/tres.git"},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/vue && npm run dev","dev:nuxt":"cd playground/nuxt && npm run dev",build:"vite build",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"},peerDependencies:{three:">=0.133",vue:">=3.4"},dependencies:{"@alvarosabu/utils":"^3.2.0","@vue/devtools-api":"^6.6.3","@vueuse/core":"^11.1.0"},devDependencies:{"@release-it/conventional-changelog":"^9.0.0","@stackblitz/sdk":"^1.11.0","@tresjs/cientos":"4.0.3","@tresjs/eslint-config":"^1.4.0","@types/three":"^0.169.0","@typescript-eslint/eslint-plugin":"^8.8.1","@typescript-eslint/parser":"^8.8.1","@vitejs/plugin-vue":"^5.1.4","@vitest/coverage-c8":"^0.33.0","@vitest/coverage-v8":"^2.1.2","@vitest/ui":"^2.1.2","@vue/test-utils":"^2.4.6",eslint:"^9.12.0","eslint-plugin-vue":"^9.29.0",esno:"^4.8.0",gsap:"^3.12.5",husky:"^9.1.6",jsdom:"^25.0.1",kolorist:"^1.8.0",ohmyfetch:"^0.4.21",pathe:"^1.1.2","release-it":"^17.8.2","rollup-plugin-analyzer":"^4.0.0","rollup-plugin-copy":"^3.5.0","rollup-plugin-visualizer":"^5.12.0",sponsorkit:"^0.15.5",three:"^0.169.0",unocss:"^0.63.4",unplugin:"^1.14.1","unplugin-vue-components":"^0.27.4",vite:"^5.4.8","vite-plugin-banner":"^0.8.0","vite-plugin-dts":"4.2.4","vite-plugin-inspect":"^0.8.7","vite-plugin-require-transform":"^1.0.21","vite-svg-loader":"^5.1.0",vitepress:"1.4.0",vitest:"^2.1.2",vue:"3.5.12","vue-demi":"^0.14.10"}};function we(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 be(e,t,n,r,s){const{logError:l}=F(),i=new e;return s&&s(i),n&&n(i),await new Promise((a,c)=>{i.load(t,o=>{const d=o;d.scene&&Object.assign(d,we(d.scene)),a(d)},r,o=>{l("[useLoader] - Failed to load resource",o),c(o)})})}const ft=f.defineComponent({__name:"component",props:{loader:{},url:{}},async setup(e){let t,n;const r=e,s=([t,n]=f.withAsyncContext(()=>f.reactive(be(r.loader,r.url))),t=await t,n(),t);return(l,i)=>f.renderSlot(l.$slots,"default",{data:f.unref(s)})}});class dt 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)}}function ue(e){return typeof e>"u"}function Z(e){return Array.isArray(e)}function pt(e){return typeof e=="number"}function Ce(e){return typeof e=="string"}function z(e){return typeof e=="function"}function $(e){return e===Object(e)&&!Z(e)&&!z(e)}function V(e){return $(e)&&"isObject3D"in e&&!!e.isObject3D}function Me(e){return $(e)&&"isCamera"in e&&!!e.isCamera}function mt(e){return $(e)&&"isBufferGeometry"in e&&!!e.isBufferGeometry}function ht(e){return $(e)&&"isMaterial"in e&&!!e.isMaterial}function gt(e){return $(e)&&"isLight"in e&&!!e.isLight}function vt(e){return $(e)&&"isFog"in e&&!!e.isFog}function yt(e){return $(e)&&"isScene"in e&&!!e.isScene}function ee(e){return V(e)||mt(e)||ht(e)||vt(e)}function _t(e){return $(e)&&!!e.isPrimitive}const Pe=(e,t)=>{for(const n of Object.keys(t))t[n]instanceof Object&&Object.assign(t[n],Pe(e[n],t[n]));return Object.assign(e||{},t),e},wt=Mt("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 Se(e){return e&&e.nodeType===1}function te(e){return e.replace(/-([a-z])/g,(t,n)=>n.toUpperCase())}const bt=/\B([A-Z])/g;function Ct(e){return e.replace(bt,"-$1").toLowerCase()}function Mt(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 ke=(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)},Pt=(e,t,n)=>{const r=Array.isArray(t)?t:t.match(/([^[.\]])+/g);r&&r.reduce((s,l,i)=>(s[l]===void 0&&(s[l]={}),i===r.length-1&&(s[l]=n),s[l]),e)};function Ae(e,t){if(Se(e)&&Se(t)){const s=e.attributes,l=t.attributes;return s.length!==l.length?!1:Array.from(s).every(({name:i,value:a})=>t.getAttribute(i)===a)}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)||!Ae(e[s],t[s]))return!1;return!0}function St(e,t){if(!Array.isArray(e)||!Array.isArray(t)||e.length!==t.length)return!1;for(let n=0;n<e.length;n++)if(!Ae(e[n],t[n]))return!1;return!0}const kt=Array.isArray;function At(e,t,n,r){const s=c=>{if(c.uuid===t)return c;for(const o of c.children){const d=s(o);if(d)return d}},l=s(e);if(!l){console.warn("Object with UUID not found in the scene.");return}let i=l;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 a=n[n.length-1];i[a]!==void 0?i[a]=r:console.warn(`Property path is not valid: ${n.join(".")}`)}function Lt(e){const t=new g.MeshBasicMaterial({color:11003607,transparent:!0,opacity:.2,depthTest:!1,side:g.DoubleSide});return new dt(e.geometry.clone(),t)}function Ot(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 g.Vector3(...t)),t}function Dt(e){return"map"in e}function Le(e){Dt(e)&&e.map&&e.map.dispose(),e.dispose()}function fe(e){var n,r;if(e.parent&&((n=e.removeFromParent)==null||n.call(e)),delete e.__tres,[...e.children].forEach(s=>fe(s)),!(e instanceof g.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(l=>Le(l)),delete s.material):s.material&&(Le(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 de(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=Oe(s,r.shift());return{target:n,key:Oe(s,...r)}}else return{target:n,key:t}}function Oe(...e){return e.map((t,n)=>n===0?t:t.charAt(0).toUpperCase()+t.slice(1)).join("")}const De=/-\d+$/;function Tt(e,t,n){if(Ce(n)){if(De.test(n)){const l=n.replace(De,""),{target:i,key:a}=de(e,l);if(!Array.isArray(i[a])){const c=i[a],o=[];o.__tresDetach=()=>{o.every(d=>ue(d))&&(i[a]=c)},i[a]=o}}const{target:r,key:s}=de(e,n);t.__tres.previousAttach=r[s],r[s]=q(t)}else t.__tres.previousAttach=n(e,t)}function jt(e,t,n){var r,s,l;if(Ce(n)){const{target:i,key:a}=de(e,n),c=t.__tres.previousAttach;c===void 0?delete i[a]:i[a]=c,"__tresDetach"in i&&i.__tresDetach()}else(s=(r=t.__tres)==null?void 0:r.previousAttach)==null||s.call(r,e,t);(l=t.__tres)==null||delete l.previousAttach}function G(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 xe(e){var n;const t=(n=e==null?void 0:e.__tres)==null?void 0:n.root;t&&t.render&&t.render.canBeInvalidated.value&&t.invalidate()}function Yn(e){}function Bt(e,t,n){var s;if(!z(e.setPixelRatio))return;let r=0;if(Z(n)&&n.length>=2){const[l,i]=n;r=g.MathUtils.clamp(t,l,i)}else pt(n)?r=n:r=t;r!==((s=e.getPixelRatio)==null?void 0:s.call(e))&&e.setPixelRatio(r)}function It(e,t,n,r,s){const l=[...t.__tres.objects],i=q(t);if(e=q(e),i===e)return!0;const a=G(e,t.__tres??{},s),c=t.parent??t.__tres.parent??null,o={...t.__tres.memoizedProps};delete o.object;for(const d of l)Te(d,s),je(d,s);i.__tres.objects=[],r.remove(t);for(const[d,w]of Object.entries(o))r.patchProp(a,d,a[d],w);n(e),r.insert(t,c);for(const d of l)r.insert(d,t);return!0}function q(e){return _t(e)?(e.object.__tres=e.__tres,e.object):e}function Te(e,t){var r,s,l,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,a=>a!==e),(s=e.__tres)!=null&&s.attach?jt(n,e,e.__tres.attach):((i=(l=e.parent)==null?void 0:l.remove)==null||i.call(l,q(e)),e.parent=null)}function je(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),xe(e)}async function Be(e,t){const n=new g.TextureLoader(t),r=s=>new Promise((l,i)=>{n.load(s,a=>l(a),()=>null,()=>{i(new Error("[useTextures] - Failed to load texture"))})});if(kt(e)){const s=await Promise.all(e.map(l=>r(l)));return e.length>1?s:s[0]}else{const{map:s,displacementMap:l,normalMap:i,roughnessMap:a,metalnessMap:c,aoMap:o,alphaMap:d,matcap:w}=e;return{map:s?await r(s):null,displacementMap:l?await r(l):null,normalMap:i?await r(i):null,roughnessMap:a?await r(a):null,metalnessMap:c?await r(c):null,aoMap:o?await r(o):null,alphaMap:d?await r(d):null,matcap:w?await r(w):null}}}const Et=f.defineComponent({__name:"component",props:{map:{},displacementMap:{},normalMap:{},roughnessMap:{},metalnessMap:{},aoMap:{},alphaMap:{},matcap:{}},async setup(e){let t,n;const r=e,s=([t,n]=f.withAsyncContext(()=>f.reactive(Be(r))),t=await t,n(),t);return(l,i)=>f.renderSlot(l.$slots,"default",{textures:f.unref(s)})}}),Ie=({sizes:e})=>{const t=f.ref([]),n=f.computed(()=>t.value[0]),r=i=>{const a=i instanceof g.Camera?i:t.value.find(o=>o.uuid===i);if(!a)return;const c=t.value.filter(({uuid:o})=>o!==a.uuid);t.value=[a,...c]},s=(i,a=!1)=>{if(Me(i)){const c=i;if(t.value.some(({uuid:o})=>o===c.uuid))return;a?r(c):t.value.push(c)}},l=i=>{if(Me(i)){const a=i;t.value=t.value.filter(({uuid:c})=>c!==a.uuid)}};return f.watchEffect(()=>{e.aspectRatio.value&&t.value.forEach(i=>{!i.manual&&(i instanceof g.PerspectiveCamera||$t(i))&&(i instanceof g.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())})}),f.onUnmounted(()=>{t.value=[]}),{camera:n,cameras:t,registerCamera:s,deregisterCamera:l,setCameraActive:r}};function $t(e){return e.hasOwnProperty("isOrthographicCamera")&&e.isOrthographicCamera}const Rt=!0,ne="[TresJS ▲ ■ ●] ";function Ut(...e){typeof e[0]=="string"?e[0]=ne+e[0]:e.unshift(ne),console.error(...e)}function Vt(...e){typeof e[0]=="string"?e[0]=ne+e[0]:e.unshift(ne),console.warn(...e)}function Ft(e,t){}function F(){return{logError:Ut,logWarning:Vt,logMessage:Ft}}const re=f.ref({}),oe=e=>Object.assign(re.value,e);function pe(){const e=new Map,t=new Set;let n=0,r=!1;const s=()=>{const o=Array.from(e.entries()).sort((d,w)=>{const u=d[1].priority-w[1].priority;return u===0?d[1].addI-w[1].addI:u});t.clear(),o.forEach(d=>t.add(d[0]))},l=o=>{e.delete(o),t.delete(o)};return{on:(o,d=0)=>{e.set(o,{priority:d,addI:n++});const w=()=>l(o);return M.tryOnScopeDispose(w),r=!0,{off:w}},off:l,trigger:(...o)=>{r&&(s(),r=!1),t.forEach(d=>d(...o))},dispose:()=>{e.clear(),t.clear()},get count(){return e.size}}}function Ee(){let e=!0,t=!0,n=!1;const r=new g.Clock(!1),s=f.ref(r.running),l=f.ref(!1);let i;const a=g.MathUtils.generateUUID();let c=null;const o=pe(),d=pe(),w=pe();O();let u={};function _(k){u=k}function v(k,T,m=0){switch(T){case"before":return o.on(k,m);case"render":return c||(c=k),d.dispose(),d.on(k);case"after":return w.on(k,m)}}function y(){t&&(t=!1,O(),S())}function p(){t=!0,O(),cancelAnimationFrame(i)}function b(){n=!1,O()}function A(){n=!0,O()}function L(){l.value=!0}function D(){l.value=!1}function S(){if(!e){i=requestAnimationFrame(S);return}const k=r.getDelta(),T=r.getElapsedTime(),m={camera:f.unref(u.camera),scene:f.unref(u.scene),renderer:f.unref(u.renderer),raycaster:f.unref(u.raycaster),controls:f.unref(u.controls),invalidate:u.invalidate,advance:u.advance},P={delta:k,elapsed:T,clock:r,...m};s.value&&o.trigger(P),l.value||(d.count?d.trigger(P):c&&c(P)),s.value&&w.trigger(P),i=requestAnimationFrame(S)}function O(){const k=!t&&!n;r.running!==k&&(r.running?r.stop():r.start()),s.value=r.running}return{loopId:a,register:(k,T,m)=>v(k,T,m),start:y,stop:p,pause:A,resume:b,pauseRender:L,resumeRender:D,isRenderPaused:l,isActive:s,setContext:_,setReady:k=>e=k}}function me(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,l=r.index?r.index.count*Uint32Array.BYTES_PER_ELEMENT:0,i=r.attributes.normal?r.attributes.normal.count*3*Float32Array.BYTES_PER_ELEMENT:0,a=r.attributes.uv?r.attributes.uv.count*2*Float32Array.BYTES_PER_ELEMENT:0,c=s+l+i+a;t+=c}}),t}function Wt(e){return(e/1024).toFixed(2)}const Nt=Number.parseInt(g.REVISION.replace("dev",""));function zt(e){return typeof e=="number"?[e,e,e]:e instanceof g.Vector3?[e.x,e.y,e.z]:e}function $e(e){return e instanceof g.Color?e:Array.isArray(e)?new g.Color(...e):new g.Color(e)}const se={realistic:{shadows:!0,physicallyCorrectLights:!0,outputColorSpace:g.SRGBColorSpace,toneMapping:g.ACESFilmicToneMapping,toneMappingExposure:3,shadowMap:{enabled:!0,type:g.PCFSoftShadowMap}},flat:{toneMapping:g.NoToneMapping,toneMappingExposure:1}};function Re({canvas:e,options:t,contextParts:{sizes:n,render:r,invalidate:s,advance:l}}){const i=f.computed(()=>({alpha:M.toValue(t.alpha)??!0,depth:M.toValue(t.depth),canvas:M.unrefElement(e),context:M.toValue(t.context),stencil:M.toValue(t.stencil),antialias:M.toValue(t.antialias)??!0,precision:M.toValue(t.precision),powerPreference:M.toValue(t.powerPreference),premultipliedAlpha:M.toValue(t.premultipliedAlpha),preserveDrawingBuffer:M.toValue(t.preserveDrawingBuffer),logarithmicDepthBuffer:M.toValue(t.logarithmicDepthBuffer),failIfMajorPerformanceCaveat:M.toValue(t.failIfMajorPerformanceCaveat)})),a=f.shallowRef(new g.WebGLRenderer(i.value));function c(){t.renderMode==="on-demand"&&s()}f.watch(i,()=>{a.value.dispose(),a.value=new g.WebGLRenderer(i.value),c()}),f.watch([n.width,n.height],()=>{a.value.setSize(n.width.value,n.height.value),c()},{immediate:!0}),f.watch(()=>t.clearColor,c);const{pixelRatio:o}=M.useDevicePixelRatio(),{logError:d}=F(),u=(()=>{const v=new g.WebGLRenderer,y={shadowMap:{enabled:v.shadowMap.enabled,type:v.shadowMap.type},toneMapping:v.toneMapping,toneMappingExposure:v.toneMappingExposure,outputColorSpace:v.outputColorSpace};return v.dispose(),y})(),_=M.toValue(t.renderMode);return _==="on-demand"&&s(),_==="manual"&&setTimeout(()=>{l()},100),f.watchEffect(()=>{const v=M.toValue(t.preset);v&&(v in se||d(`Renderer Preset must be one of these: ${Object.keys(se).join(", ")}`),Pe(a.value,se[v])),Bt(a.value,o.value,M.toValue(t.dpr)),_==="always"&&(r.frames.value=Math.max(1,r.frames.value));const y=(A,L)=>{const D=M.toValue(A),S=()=>{if(v)return ke(se[v],L)};if(D!==void 0)return D;const O=S();return O!==void 0?O:ke(u,L)},p=(A,L)=>Pt(a.value,L,y(A,L));p(t.shadows,"shadowMap.enabled"),p(t.toneMapping??g.ACESFilmicToneMapping,"toneMapping"),p(t.shadowMapType,"shadowMap.type"),Nt<150&&p(!t.useLegacyLights,"physicallyCorrectLights"),p(t.outputColorSpace,"outputColorSpace"),p(t.toneMappingExposure,"toneMappingExposure");const b=y(t.clearColor,"clearColor");b&&a.value.setClearColor(b?$e(b):new g.Color(0))}),f.onUnmounted(()=>{a.value.dispose(),a.value.forceContextLoss()}),{renderer:a}}function Gt(e,t,n=10){const r=M.toValue(e)?M.useWindowSize():M.useElementSize(f.computed(()=>M.toValue(t).parentElement)),s=f.readonly(M.refDebounced(r.width,n)),l=f.readonly(M.refDebounced(r.height,n)),i=f.computed(()=>s.value/l.value);return{height:l,width:s,aspectRatio:i}}const Ue=(e,t)=>{const n=f.computed(()=>t.renderer.value.domElement),r=f.shallowRef([]),{x:s,y:l}=M.usePointer({target:n});let i=0;const{width:a,height:c,top:o,left:d}=M.useElementBounding(n),w=({x:h,y:x})=>{if(n.value)return{x:(h-d.value)/a.value*2-1,y:-((x-o.value)/c.value)*2+1}},u=({x:h,y:x})=>{if(t.camera.value)return t.raycaster.value.setFromCamera(new g.Vector2(h,x),t.camera.value),r.value=t.raycaster.value.intersectObjects(e.value,!0),r.value},_=h=>{const x=w({x:(h==null?void 0:h.clientX)??s.value,y:(h==null?void 0:h.clientY)??l.value});return x?u(x)||[]:[]},v=M.createEventHook(),y=M.createEventHook(),p=M.createEventHook(),b=M.createEventHook(),A=M.createEventHook(),L=M.createEventHook(),D=M.createEventHook(),S=M.createEventHook();function O(h){const x={};for(const N in h)typeof N!="function"&&(x[N]=h[N]);return x}const k=(h,x)=>{var it,at,lt;const N=O(x),ce=new g.Vector3(x==null?void 0:x.clientX,x==null?void 0:x.clientY,0).unproject((it=t.camera)==null?void 0:it.value);h.trigger({...N,intersections:r.value,unprojectedPoint:ce,ray:(at=t.raycaster)==null?void 0:at.value.ray,camera:(lt=t.camera)==null?void 0:lt.value,sourceEvent:x,delta:i,stopPropagating:!1})};let T;const m=h=>{_(h),k(p,h),T=h},P=()=>{T&&m(T)};let j,B,I;const U=h=>{var x;j=(x=r.value[0])==null?void 0:x.object,i=0,B=new g.Vector2((h==null?void 0:h.clientX)??s.value,(h==null?void 0:h.clientY)??l.value),k(A,h)};let E,K=!1;const nt=h=>{var x,N,ce;h instanceof PointerEvent&&(r.value.length===0&&k(L,h),j===((x=r.value[0])==null?void 0:x.object)&&(I=new g.Vector2((h==null?void 0:h.clientX)??s.value,(h==null?void 0:h.clientY)??l.value),i=B==null?void 0:B.distanceTo(I),h.button===0?(k(v,h),E===((N=r.value[0])==null?void 0:N.object)?K=!0:(E=(ce=r.value[0])==null?void 0:ce.object,K=!1)):h.button===2&&k(D,h)),k(b,h))},rt=h=>{K&&(k(y,h),E=void 0,K=!1)},ot=h=>k(p,h),st=h=>k(S,h);return n.value.addEventListener("pointerup",nt),n.value.addEventListener("pointerdown",U),n.value.addEventListener("pointermove",m),n.value.addEventListener("pointerleave",ot),n.value.addEventListener("dblclick",rt),n.value.addEventListener("wheel",st),f.onUnmounted(()=>{n!=null&&n.value&&(n.value.removeEventListener("pointerup",nt),n.value.removeEventListener("pointerdown",U),n.value.removeEventListener("pointermove",m),n.value.removeEventListener("pointerleave",ot),n.value.removeEventListener("dblclick",rt),n.value.removeEventListener("wheel",st))}),{intersects:r,onClick:h=>v.on(h).off,onDblClick:h=>y.on(h).off,onContextMenu:h=>D.on(h).off,onPointerMove:h=>p.on(h).off,onPointerUp:h=>b.on(h).off,onPointerDown:h=>A.on(h).off,onPointerMissed:h=>L.on(h).off,onWheel:h=>S.on(h).off,forceUpdate:P}};function he(e,t){if(Array.isArray(e))for(const n of e)n(t);typeof e=="function"&&e(t)}function Ve(e,t,n){var T;const r=f.shallowRef(),s=f.shallowRef();e&&(r.value=e),t&&(s.value=t);const l=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(j=>i(j)))||l(m)},a=f.shallowRef(((T=r.value)==null?void 0:T.children).filter(i)||[]);function c(m,P){const j=[],B=()=>P.stopPropagating=!0;P.stopPropagation=B;for(const I of P==null?void 0:P.intersections){if(P.stopPropagating)return;P={...P,...I};const{object:U}=I;P.eventObject=U,he(U[m],P),j.push(U);let E=U.parent;for(;E!==null&&!P.stopPropagating&&!j.includes(E);)P.eventObject=E,he(E[m],P),j.push(E),E=E.parent;const K=Ct(m.slice(2));n(K,{intersection:I,event:P})}}const{onClick:o,onDblClick:d,onContextMenu:w,onPointerMove:u,onPointerDown:_,onPointerUp:v,onPointerMissed:y,onWheel:p,forceUpdate:b}=Ue(a,t);v(m=>c("onPointerUp",m)),_(m=>c("onPointerDown",m)),o(m=>c("onClick",m)),d(m=>c("onDoubleClick",m)),w(m=>c("onContextMenu",m)),p(m=>c("onWheel",m));let A=[];u(m=>{const P=m.intersections.map(({object:B})=>B),j=m.intersections;A.forEach(({object:B})=>{P.includes(B)||(m.intersections=A,c("onPointerLeave",m),c("onPointerOut",m))}),m.intersections=j,m.intersections.forEach(({object:B})=>{A.includes(B)||(c("onPointerEnter",m),c("onPointerOver",m))}),c("onPointerMove",m),A=m.intersections});const L=[];y(m=>{const P=()=>m.stopPropagating=!0;m.stopPropagation=P,L.forEach(j=>{m.stopPropagating||(m.eventObject=j,he(j.onPointerMissed,m))}),n("pointer-missed",{event:m})});function D(m){ee(m)&&V(m)&&a.value.push(m)}function S(m){if(ee(m)&&V(m)){const P=a.value.indexOf(m);P>-1&&a.value.splice(P,1)}}function O(m){ee(m)&&V(m)&&m.onPointerMissed&&L.push(m)}function k(m){if(ee(m)&&V(m)){const P=L.indexOf(m);P>-1&&L.splice(P,1)}}return t.eventManager={forceUpdate:b,registerObject:D,deregisterObject:S,registerPointerMissedObject:O,deregisterPointerMissedObject:k},{forceUpdate:b,registerObject:D,deregisterObject:S,registerPointerMissedObject:O,deregisterPointerMissedObject:k}}function qt(e,t,n=100){n=n<=0?100:n;const r=M.createEventHook(),s=new Set;let l=!1,i=!1,a=null;function c(){a&&clearTimeout(a),!i&&!l&&e()?(r.trigger(t),s.forEach(u=>u()),s.clear(),l=!0):!i&&!l&&(a=setTimeout(c,n))}function o(){i=!0,a&&clearTimeout(a)}c();const d=(u,..._)=>{u(..._)};return{on:u=>{if(l)return d(u,t),{off:()=>{}};{const _=r.on(u);return s.add(_.off),r.on(u)}},off:r.off,trigger:r.trigger,cancel:o}}const J=new WeakMap;function Fe(e){if(e=e||Q(),J.has(e))return J.get(e);const t=100,n=Date.now(),l=qt(()=>{if(Date.now()-n>=t)return!0;{const i=e.renderer.value,a=(i==null?void 0:i.domElement)||{width:0,height:0};return!!(i&&a.width>0&&a.height>0)}},e);return J.set(e,l),l}function Yt(e){const t=Q();if(t)return J.has(t)?J.get(t).on(e):Fe(t).on(e)}function We({scene:e,canvas:t,windowSize:n,rendererOptions:r,emit:s}){const l=f.shallowRef(e),i=Gt(n,t),{camera:a,cameras:c,registerCamera:o,deregisterCamera:d,setCameraActive:w}=Ie({sizes:i,scene:e}),u={mode:f.ref(r.renderMode||"always"),priority:f.ref(0),frames:f.ref(0),maxFrames:60,canBeInvalidated:f.computed(()=>u.mode.value==="on-demand"&&u.frames.value===0)};function _(I=1){r.renderMode==="on-demand"&&(u.frames.value=Math.min(u.maxFrames,u.frames.value+I))}function v(){r.renderMode==="manual"&&(u.frames.value=1)}const{renderer:y}=Re({scene:e,canvas:t,options:r,emit:s,contextParts:{sizes:i,camera:a,render:u,invalidate:_,advance:v}}),p={sizes:i,scene:l,camera:a,cameras:f.readonly(c),renderer:y,raycaster:f.shallowRef(new g.Raycaster),controls:f.ref(null),perf:{maxFrames:160,fps:{value:0,accumulator:[]},memory:{currentMem:0,allocatedMem:0,accumulator:[]}},render:u,advance:v,extend:oe,invalidate:_,registerCamera:o,setCameraActive:w,deregisterCamera:d,loop:Ee()};f.provide("useTres",p),p.scene.value.__tres={root:p},p.loop.register(()=>{a.value&&u.frames.value>0&&(y.value.render(e,a.value),s("render",p.renderer.value)),u.priority.value=0,u.mode.value==="always"?u.frames.value=1:u.frames.value=Math.max(0,u.frames.value-1)},"render");const{on:b,cancel:A}=Fe(p);p.loop.setReady(!1),p.loop.start(),b(()=>{s("ready",p),p.loop.setReady(!0),Ve(e,p,s)}),f.onUnmounted(()=>{A(),p.loop.stop()});const L=100,D=M.useFps({every:L}),{isSupported:S,memory:O}=M.useMemory({interval:L}),k=160;let T=performance.now();const m=({timestamp:I})=>{p.scene.value&&(p.perf.memory.allocatedMem=me(p.scene.value)),I-T>=L&&(T=I,p.perf.fps.accumulator.push(D.value),p.perf.fps.accumulator.length>k&&p.perf.fps.accumulator.shift(),p.perf.fps.value=D.value,S.value&&O.value&&(p.perf.memory.accumulator.push(O.value.usedJSHeapSize/1024/1024),p.perf.memory.accumulator.length>k&&p.perf.memory.accumulator.shift(),p.perf.memory.currentMem=p.perf.memory.accumulator.reduce((U,E)=>U+E,0)/p.perf.memory.accumulator.length))};let P=0;const j=1,{pause:B}=M.useRafFn(({delta:I})=>{window.__TRES__DEVTOOLS__&&(m({timestamp:performance.now()}),P+=I,P>=j&&(window.__TRES__DEVTOOLS__.cb(p),P=0))},{immediate:!0});return f.onUnmounted(()=>{B()}),p}function Q(){const e=f.inject("useTres");if(!e)throw new Error("useTresContext must be used together with useTresContextProvider");return e}const Kt=Q;function Jt(){const{camera:e,scene:t,renderer:n,loop:r,raycaster:s,controls:l,invalidate:i,advance:a}=Q();r.setContext({camera:e,scene:t,renderer:n,raycaster:s,controls:l,invalidate:i,advance:a});function c(w,u=0){return r.register(w,"before",u)}function o(w){return r.register(w,"render")}function d(w,u=0){return r.register(w,"after",u)}return{pause:r.pause,resume:r.resume,pauseRender:r.pauseRender,resumeRender:r.resumeRender,isActive:r.isActive,onBeforeRender:c,render:o,onAfterRender:d}}const Ne=M.createEventHook(),ze=M.createEventHook(),ge=M.createEventHook(),X=new g.Clock;let ie=0,ae=0;const{pause:Qt,resume:Ge,isActive:Xt}=M.useRafFn(()=>{Ne.trigger({delta:ie,elapsed:ae,clock:X}),ze.trigger({delta:ie,elapsed:ae,clock:X}),ge.trigger({delta:ie,elapsed:ae,clock:X})},{immediate:!1});ge.on(()=>{ie=X.getDelta(),ae=X.getElapsedTime()});let qe=!1;const Ht=()=>(qe||(qe=!0,Ge()),{onBeforeLoop:Ne.on,onLoop:ze.on,onAfterLoop:ge.on,pause:Qt,resume:Ge,isActive:Xt});function Zt(){const{logWarning:e}=F();function t(l,i,a){let c=null;return l.traverse(o=>{o[i]===a&&(c=o)}),c||e(`Child with ${i} '${a}' not found.`),c}function n(l,i,a){const c=[];return l.traverse(o=>{o[i].includes(a)&&c.push(o)}),c.length||e(`Children with ${i} '${a}' not found.`),c}function r(l,i){return t(l,"name",i)}function s(l,i){return n(l,"name",i)}return{seek:t,seekByName:r,seekAll:n,seekAllByName:s}}function en(e,t={},n={}){let r=e;const s=a=>{r=a};let l=new Proxy({},{});const i={has(a,c){return c in t||c in r},get(a,c,o){return c in t?t[c](r):r[c]},set(a,c,o){return n[c]?n[c](o,r,l,s):r[c]=o,!0}};return l=new Proxy({},i),l}const{logError:Ye}=F(),Ke=["onClick","onContextMenu","onPointerMove","onPointerEnter","onPointerLeave","onPointerOver","onPointerOut","onDoubleClick","onPointerDown","onPointerUp","onPointerCancel","onPointerMissed","onLostPointerCapture","onWheel"],tn=e=>{const t=e.scene.value;function n(o,d,w,u){if(u||(u={}),u.args||(u.args=[]),o==="template"||wt(o))return null;let _=o.replace("Tres",""),v;if(o==="primitive"){(!$(u.object)||f.isRef(u.object))&&Ye("Tres primitives need an 'object' prop, whose value is an object or shallowRef<object>"),_=u.object.type;const y={};v=en(u.object,{object:b=>b,isPrimitive:()=>!0,__tres:()=>y},{object:(b,A,L,D)=>{It(b,L,D,{patchProp:l,remove:s,insert:r},e)},__tres:b=>{Object.assign(y,b)}})}else{const y=re.value[_];y||Ye(`${_} is not defined on the THREE namespace. Use extend to add it to the catalog.`),v=new y(...u.args)}return v?(v.isCamera&&(u!=null&&u.position||v.position.set(3,3,3),u!=null&&u.lookAt||v.lookAt(0,0,0)),v=G(v,{...v.__tres,type:_,memoizedProps:u,eventCount:0,primitive:o==="primitive",attach:u.attach},e),v):null}function r(o,d){var _,v,y;if(!o)return;d=d||t;const w=o.__tres?o:G(o,{},e),u=d.__tres?d:G(d,{},e);o=q(w),d=q(u),o.__tres&&((_=o.__tres)==null?void 0:_.eventCount)>0&&((v=e.eventManager)==null||v.registerObject(o)),e.registerCamera(o),(y=e.eventManager)==null||y.registerPointerMissedObject(o),w.__tres.attach?Tt(u,w,w.__tres.attach):V(o)&&V(u)&&(u.add(o),o.dispatchEvent({type:"added"})),w.__tres.parent=u,u.__tres.objects&&!u.__tres.objects.includes(w)&&u.__tres.objects.push(w)}function s(o,d){var v,y,p,b;if(!o)return;o!=null&&o.__tres&&((v=o.__tres)==null?void 0:v.eventCount)>0&&((y=e.eventManager)==null||y.deregisterObject(o)),d=ue(d)?"default":d;const w=(p=o.__tres)==null?void 0:p.dispose;ue(w)||(w===null?d=!1:d=w);const u=(b=o.__tres)==null?void 0:b.primitive,_=d==="default"?!u:!!d;if(o.__tres&&"objects"in o.__tres&&[...o.__tres.objects].forEach(A=>s(A,d)),_&&o.children&&[...o.children].forEach(A=>s(A,d)),Te(o,e),je(o,e),_&&!yt(o)){if(z(d))d(o);else if(z(o.dispose))try{o.dispose()}catch{}}"__tres"in o&&delete o.__tres}function l(o,d,w,u){var A,L;if(!o)return;let _=o,v=d;if(o.__tres&&(o.__tres.memoizedProps[d]=u),d==="attach"){const D=((A=o.__tres)==null?void 0:A.parent)||o.parent;s(o),G(o,{attach:u},e),D&&r(o,D);return}if(d==="dispose"){o.__tres||(o=G(o,{},e)),o.__tres.dispose=u;return}if(V(o)&&v==="blocks-pointer-events"){u||u===""?o[v]=u:delete o[v];return}Ke.includes(d)&&o.__tres&&(o.__tres.eventCount+=1);let y=te(v),p=_==null?void 0:_[y];if(v==="args"){const D=o,S=w??[],O=u??[],k=((L=o.__tres)==null?void 0:L.type)||o.type;k&&S.length&&!St(S,O)&&(_=Object.assign(D,new re.value[k](...u)));return}if(_.type==="BufferGeometry"){if(v==="args")return;_.setAttribute(te(v),new g.BufferAttribute(...u));return}if(v.includes("-")&&p===void 0){const D=v.split("-");p=D.reduce((S,O)=>S[te(O)],_),v=D.pop(),y=v,p!=null&&p.set||(_=D.reduce((S,O)=>S[te(O)],_))}let b=u;if(b===""&&(b=!0),z(p)){Ke.includes(d)||(Z(b)?o[y](...b):o[y](b)),y.startsWith("on")&&z(b)&&(_[y]=b);return}!(p!=null&&p.set)&&!z(p)?_[y]=b:p.constructor===b.constructor&&(p!=null&&p.copy)?p==null||p.copy(b):Z(b)?p.set(...b):!p.isColor&&p.setScalar?p.setScalar(b):p.set(b),xe(o)}function i(o){var d;return((d=o==null?void 0:o.__tres)==null?void 0:d.parent)||null}function a(o){const d=G(new g.Object3D,{type:"Comment"},e);return d.name=o,d}function c(o){var _;const d=i(o),w=((_=d==null?void 0:d.__tres)==null?void 0:_.objects)||[],u=w.indexOf(o);return u<0||u>=w.length-1?null:w[u+1]}return{insert:r,remove:s,createElement:n,patchProp:l,parentNode:i,createText:()=>void 0,createComment:a,setText:()=>void 0,setElementText:()=>void 0,nextSibling:c,querySelector:()=>void 0,setScopeId:()=>void 0,cloneNode:()=>void 0,insertStaticContent:()=>void 0}};function nn(){return Je().__VUE_DEVTOOLS_GLOBAL_HOOK__}function Je(){return typeof navigator<"u"&&typeof window<"u"?window:typeof globalThis<"u"?globalThis:{}}const rn=typeof Proxy=="function",on="devtools-plugin:setup",sn="plugin:settings:set";let Y,ve;function an(){var e;return Y!==void 0||(typeof window<"u"&&window.performance?(Y=!0,ve=window.performance):typeof globalThis<"u"&&(!((e=globalThis.perf_hooks)===null||e===void 0)&&e.performance)?(Y=!0,ve=globalThis.perf_hooks.performance):Y=!1),Y}function ln(){return an()?ve.now():Date.now()}class cn{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 a=t.settings[i];r[i]=a.defaultValue}const s=`__vue-devtools-plugin-settings__${t.id}`;let l=Object.assign({},r);try{const i=localStorage.getItem(s),a=JSON.parse(i);Object.assign(l,a)}catch{}this.fallbacks={getSettings(){return l},setSettings(i){try{localStorage.setItem(s,JSON.stringify(i))}catch{}l=i},now(){return ln()}},n&&n.on(sn,(i,a)=>{i===this.plugin.id&&this.fallbacks.setSettings(a)}),this.proxiedOn=new Proxy({},{get:(i,a)=>this.target?this.target.on[a]:(...c)=>{this.onQueue.push({method:a,args:c})}}),this.proxiedTarget=new Proxy({},{get:(i,a)=>this.target?this.target[a]:a==="on"?this.proxiedOn:Object.keys(this.fallbacks).includes(a)?(...c)=>(this.targetQueue.push({method:a,args:c,resolve:()=>{}}),this.fallbacks[a](...c)):(...c)=>new Promise(o=>{this.targetQueue.push({method:a,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 un(e,t){const n=e,r=Je(),s=nn(),l=rn&&n.enableEarlyProxy;if(s&&(r.__VUE_DEVTOOLS_PLUGIN_API_AVAILABLE__||!l))s.emit(on,e,t);else{const i=l?new cn(n,s):null;(r.__VUE_DEVTOOLS_PLUGINS__=r.__VUE_DEVTOOLS_PLUGINS__||[]).push({pluginDescriptor:n,setupFn:t,proxy:i}),i&&t(i.proxiedTarget)}}function fn(e,t){const n=`▲ ■ ●${e}`;typeof Qe=="function"?Qe(n,t):console.log(n)}function Qe(e,t){throw new Error(e+t)}const Xe=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=me(e);return n>0&&t.tags.push({label:`${Wt(n)} KB`,textColor:15707189,backgroundColor:16775644,tooltip:"Memory usage"}),e.type.includes("Light")&&(gt(e)&&t.tags.push({label:`${e.intensity}`,textColor:9738662,backgroundColor:16316922,tooltip:"Intensity"}),t.tags.push({label:`#${new g.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 He(e,t,n=""){e.children.forEach(r=>{if(r.type==="HightlightMesh"||n&&!r.type.includes(n)&&!r.name.includes(n))return;const s=Xe(r);t.children.push(s),He(r,s,n)})}const dn=[],H="tres:inspector",pn=f.reactive({sceneGraph:null});function mn(e,t){un({id:"dev.esm.tres",label:"TresJS 🪐",logo:"https://raw.githubusercontent.com/Tresjs/tres/main/public/favicon.svg",packageName:"tresjs",homepage:"https://tresjs.org",componentStateTypes:dn,app:e},n=>{typeof n.now!="function"&&fn("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(l=>{if(l.inspectorId===H){const i=Xe(t.scene.value);He(t.scene.value,i,l.filter),pn.sceneGraph=i,l.rootNodes=[i]}});let r=null,s=null;n.on.getInspectorState(l=>{var i;if(l.inspectorId===H){const[a]=t.scene.value.getObjectsByProperty("uuid",l.nodeId);if(!a)return;if(s&&r&&r.parent&&s.remove(r),a.isMesh){const c=Lt(a);a.add(c),r=c,s=a}l.state={object:Object.entries(a).map(([c,o])=>c==="children"?{key:c,value:o.filter(d=>d.type!=="HightlightMesh")}:{key:c,value:o,editable:!0}).filter(({key:c})=>c!=="parent")},a.isScene&&(l.state.info={objects:a.children.length,memory:me(a),calls:t.renderer.value.info.render.calls,triangles:t.renderer.value.info.render.triangles,points:t.renderer.value.info.render.points,lines:t.renderer.value.info.render.lines},l.state.programs=((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(l=>{l.inspectorId===H&&At(t.scene.value,l.nodeId,l.path,l.state.value)})})}const hn=["data-scene","data-tres"],Ze=f.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},enableProvideBridge:{type:Boolean,default:!0},context:{},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},failIfMajorPerformanceCaveat:{type:Boolean,default:void 0},precision:{},logarithmicDepthBuffer:{type:Boolean,default:void 0},reverseDepthBuffer:{type:Boolean}},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}){const r=e,s=n,l=f.useSlots(),{logWarning:i}=F(),a=f.ref(),c=f.shallowRef(new g.Scene),o=f.getCurrentInstance();oe(_e);const d=(y,p=!1)=>f.defineComponent({setup(){var D;const b=(D=f.getCurrentInstance())==null?void 0:D.appContext;b&&(b.app=o==null?void 0:o.appContext.app);const A={};function L(S){S&&(S.parent&&L(S.parent),S.provides&&Object.assign(A,S.provides))}return o!=null&&o.parent&&r.enableProvideBridge&&(L(o.parent),Reflect.ownKeys(A).forEach(S=>{f.provide(S,A[S])})),f.provide("useTres",y),f.provide("extend",oe),typeof window<"u"&&mn(b==null?void 0:b.app,y),()=>f.h(f.Fragment,null,p?[]:l.default())}}),w=(y,p=!1)=>{const b=d(y,p),{render:A}=f.createRenderer(tn(y));A(f.h(b),c.value)},u=(y,p=!1)=>{fe(y.scene.value),p&&(y.renderer.value.dispose(),y.renderer.value.renderLists.dispose(),y.renderer.value.forceContextLoss()),c.value.__tres={root:y}},_=f.shallowRef(null);t({context:_,dispose:()=>u(_.value,!0)});const v=()=>{u(_.value),w(_.value,!0)};return f.onMounted(()=>{const y=a;_.value=We({scene:c.value,canvas:y,windowSize:r.windowSize??!1,rendererOptions:r,emit:s});const{registerCamera:p,camera:b,cameras:A,deregisterCamera:L}=_.value;w(_.value);const D=()=>{const S=new g.PerspectiveCamera(45,window.innerWidth/window.innerHeight,.1,1e3);S.position.set(3,3,3),S.lookAt(0,0,0),p(S);const O=f.watchEffect(()=>{A.value.length>=2&&(S.removeFromParent(),L(S),O==null||O())})};f.watch(()=>r.camera,(S,O)=>{S&&p(S),O&&(O.removeFromParent(),L(O))},{immediate:!0}),b.value||(i("No camera found. Creating a default perspective camera. To have full control over a camera, please add one to the scene."),D())}),f.onUnmounted(v),(y,p)=>(f.openBlock(),f.createElementBlock("canvas",{ref_key:"canvas",ref:a,"data-scene":c.value.uuid,class:f.normalizeClass(y.$attrs.class),"data-tres":`tresjs ${f.unref(ut).version}`,style:f.normalizeStyle({display:"block",width:"100%",height:"100%",position:y.windowSize?"fixed":"relative",top:0,left:0,pointerEvents:"auto",touchAction:"none",...y.$attrs.style})},null,14,hn))}}),gn=["TresCanvas","TresLeches","TresScene"],vn={template:{compilerOptions:{isCustomElement:e=>e.startsWith("Tres")&&!gn.includes(e)||e==="primitive"}}},{logWarning:yn}=F();let R=null;const _n={updated:(e,t)=>{var s;const n=Ot(t);if(!n){yn(`v-distance-to: problem with binding value: ${t.value}`);return}R&&(R.dispose(),e.parent.remove(R));const r=n.clone().sub(e.position);r.normalize(),R=new g.ArrowHelper(r,e.position,e.position.distanceTo(n),16776960),e.parent.add(R),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=>{R==null||R.dispose(),e.parent.remove(R)}};class et extends g.Line{constructor(t,n){const r=[1,1,0,-1,1,0,-1,-1,0,1,-1,0,1,1,0],s=new g.BufferGeometry;s.setAttribute("position",new g.Float32BufferAttribute(r,3)),s.computeBoundingSphere();const l=new g.LineBasicMaterial({fog:!1});super(s,l),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],a=new g.BufferGeometry;a.setAttribute("position",new g.Float32BufferAttribute(i,3)),a.computeBoundingSphere(),this.add(new g.Mesh(a,new g.MeshBasicMaterial({side:g.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:tt}=F();let le,W;const wn={DirectionalLight:g.DirectionalLightHelper,PointLight:g.PointLightHelper,SpotLight:g.SpotLightHelper,HemisphereLight:g.HemisphereLightHelper,RectAreaLight:et},bn={mounted:e=>{if(!e.isLight){tt(`${e.type} is not a light`);return}le=wn[e.type],e.parent.add(new le(e,1,e.color.getHex()))},updated:e=>{W=e.parent.children.find(t=>t instanceof le),!(W instanceof et)&&W.update()},unmounted:e=>{if(!e.isLight){tt(`${e.type} is not a light`);return}W=e.parent.children.find(t=>t instanceof le),W&&W.dispose&&W.dispose(),e.parent.remove(W)}},Cn={mounted:(e,t)=>{if(t.arg){console.log(`v-log:${t.arg}`,e[t.arg]);return}console.log("v-log",e)}},Mn={install(e){e.component("TresCanvas",Ze)}};C.TresCanvas=Ze,C.UseLoader=ft,C.UseTexture=Et,C.catalogue=re,C.createRenderLoop=Ee,C.default=Mn,C.dispose=fe,C.extend=oe,C.isProd=Rt,C.normalizeColor=$e,C.normalizeVectorFlexibleParam=zt,C.onTresReady=Yt,C.templateCompilerOptions=vn,C.trasverseObjects=we,C.useCamera=Ie,C.useLoader=be,C.useLogger=F,C.useLoop=Jt,C.useRaycaster=Ue,C.useRenderLoop=Ht,C.useRenderer=Re,C.useSeek=Zt,C.useTexture=Be,C.useTres=Kt,C.useTresContext=Q,C.useTresContextProvider=We,C.useTresEventManager=Ve,C.vDistanceTo=_n,C.vLightHelper=bn,C.vLog=Cn,Object.defineProperties(C,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
8
+ (function(C,f){typeof exports=="object"&&typeof module<"u"?f(exports,require("vue"),require("three"),require("@vueuse/core")):typeof define=="function"&&define.amd?define(["exports","vue","three","@vueuse/core"],f):(C=typeof globalThis<"u"?globalThis:C||self,f(C.tres={},C.Vue,C.Three,C.VueUseCore))})(this,function(C,f,g,M){"use strict";var Pn=Object.defineProperty;var Sn=(C,f,g)=>f in C?Pn(C,f,{enumerable:!0,configurable:!0,writable:!0,value:g}):C[f]=g;var ye=(C,f,g)=>Sn(C,typeof f!="symbol"?f+"":f,g);function ct(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=ct(g),ut={name:"@tresjs/core",type:"module",version:"4.3.2",packageManager:"pnpm@9.15.1",description:"Declarative ThreeJS using Vue Components",author:"Alvaro Saburido <hola@alvarosaburido.dev> (https://github.com/alvarosabu/)",license:"MIT",repository:{type:"git",url:"git+https://github.com/Tresjs/tres.git"},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:"pnpm --filter='./playground/vue' dev","dev:nuxt":"pnpm --filter='./playground/nuxt' dev",build:"vite build",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"},peerDependencies:{three:">=0.133",vue:">=3.4"},dependencies:{"@alvarosabu/utils":"^3.2.0","@vue/devtools-api":"^6.6.3","@vueuse/core":"^12.0.0"},devDependencies:{"@release-it/conventional-changelog":"^9.0.3","@stackblitz/sdk":"^1.11.0","@tresjs/cientos":"4.0.3","@tresjs/eslint-config":"^1.4.0","@types/three":"^0.171.0","@typescript-eslint/eslint-plugin":"^8.18.1","@typescript-eslint/parser":"^8.18.1","@vitejs/plugin-vue":"^5.2.1","@vitest/coverage-c8":"^0.33.0","@vitest/coverage-v8":"^2.1.8","@vitest/ui":"^2.1.8","@vue/test-utils":"^2.4.6",eslint:"^9.17.0","eslint-plugin-vue":"^9.32.0",esno:"^4.8.0",gsap:"^3.12.5",jsdom:"^25.0.1",kolorist:"^1.8.0",ohmyfetch:"^0.4.21",pathe:"^1.1.2","release-it":"^17.10.0","rollup-plugin-analyzer":"^4.0.0","rollup-plugin-copy":"^3.5.0","rollup-plugin-visualizer":"^5.12.0",sponsorkit:"^0.16.2",three:"^0.171.0",unocss:"^0.65.2",unplugin:"^2.1.0","unplugin-vue-components":"^0.28.0",vite:"^6.0.5","vite-plugin-banner":"^0.8.0","vite-plugin-dts":"4.4.0","vite-plugin-inspect":"^0.10.4","vite-plugin-require-transform":"^1.0.21","vite-svg-loader":"^5.1.0",vitepress:"1.5.0",vitest:"2.1.8",vue:"3.5.13","vue-demi":"^0.14.10"}};function we(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 be(e,t,n,r,s){const{logError:l}=F(),i=new e;return s&&s(i),n&&n(i),await new Promise((a,c)=>{i.load(t,o=>{const d=o;d.scene&&Object.assign(d,we(d.scene)),a(d)},r,o=>{l("[useLoader] - Failed to load resource",o),c(o)})})}const ft=f.defineComponent({__name:"component",props:{loader:{},url:{}},async setup(e){let t,n;const r=e,s=([t,n]=f.withAsyncContext(()=>f.reactive(be(r.loader,r.url))),t=await t,n(),t);return(l,i)=>f.renderSlot(l.$slots,"default",{data:f.unref(s)})}});class dt 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)}}function ue(e){return typeof e>"u"}function Z(e){return Array.isArray(e)}function pt(e){return typeof e=="number"}function Ce(e){return typeof e=="string"}function z(e){return typeof e=="function"}function $(e){return e===Object(e)&&!Z(e)&&!z(e)}function V(e){return $(e)&&"isObject3D"in e&&!!e.isObject3D}function Me(e){return $(e)&&"isCamera"in e&&!!e.isCamera}function mt(e){return $(e)&&"isBufferGeometry"in e&&!!e.isBufferGeometry}function ht(e){return $(e)&&"isMaterial"in e&&!!e.isMaterial}function gt(e){return $(e)&&"isLight"in e&&!!e.isLight}function vt(e){return $(e)&&"isFog"in e&&!!e.isFog}function yt(e){return $(e)&&"isScene"in e&&!!e.isScene}function ee(e){return V(e)||mt(e)||ht(e)||vt(e)}function _t(e){return $(e)&&!!e.isPrimitive}const Pe=(e,t)=>{for(const n of Object.keys(t))t[n]instanceof Object&&Object.assign(t[n],Pe(e[n],t[n]));return Object.assign(e||{},t),e},wt=Mt("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 Se(e){return e&&e.nodeType===1}function te(e){return e.replace(/-([a-z])/g,(t,n)=>n.toUpperCase())}const bt=/\B([A-Z])/g;function Ct(e){return e.replace(bt,"-$1").toLowerCase()}function Mt(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 ke=(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)},Pt=(e,t,n)=>{const r=Array.isArray(t)?t:t.match(/([^[.\]])+/g);r&&r.reduce((s,l,i)=>(s[l]===void 0&&(s[l]={}),i===r.length-1&&(s[l]=n),s[l]),e)};function Ae(e,t){if(Se(e)&&Se(t)){const s=e.attributes,l=t.attributes;return s.length!==l.length?!1:Array.from(s).every(({name:i,value:a})=>t.getAttribute(i)===a)}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)||!Ae(e[s],t[s]))return!1;return!0}function St(e,t){if(!Array.isArray(e)||!Array.isArray(t)||e.length!==t.length)return!1;for(let n=0;n<e.length;n++)if(!Ae(e[n],t[n]))return!1;return!0}const kt=Array.isArray;function At(e,t,n,r){const s=c=>{if(c.uuid===t)return c;for(const o of c.children){const d=s(o);if(d)return d}},l=s(e);if(!l){console.warn("Object with UUID not found in the scene.");return}let i=l;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 a=n[n.length-1];i[a]!==void 0?i[a]=r:console.warn(`Property path is not valid: ${n.join(".")}`)}function Lt(e){const t=new g.MeshBasicMaterial({color:11003607,transparent:!0,opacity:.2,depthTest:!1,side:g.DoubleSide});return new dt(e.geometry.clone(),t)}function Ot(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 g.Vector3(...t)),t}function Dt(e){return"map"in e}function Le(e){Dt(e)&&e.map&&e.map.dispose(),e.dispose()}function fe(e){var n,r;if(e.parent&&((n=e.removeFromParent)==null||n.call(e)),delete e.__tres,[...e.children].forEach(s=>fe(s)),!(e instanceof g.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(l=>Le(l)),delete s.material):s.material&&(Le(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 de(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=Oe(s,r.shift());return{target:n,key:Oe(s,...r)}}else return{target:n,key:t}}function Oe(...e){return e.map((t,n)=>n===0?t:t.charAt(0).toUpperCase()+t.slice(1)).join("")}const De=/-\d+$/;function Tt(e,t,n){if(Ce(n)){if(De.test(n)){const l=n.replace(De,""),{target:i,key:a}=de(e,l);if(!Array.isArray(i[a])){const c=i[a],o=[];o.__tresDetach=()=>{o.every(d=>ue(d))&&(i[a]=c)},i[a]=o}}const{target:r,key:s}=de(e,n);t.__tres.previousAttach=r[s],r[s]=q(t)}else t.__tres.previousAttach=n(e,t)}function jt(e,t,n){var r,s,l;if(Ce(n)){const{target:i,key:a}=de(e,n),c=t.__tres.previousAttach;c===void 0?delete i[a]:i[a]=c,"__tresDetach"in i&&i.__tresDetach()}else(s=(r=t.__tres)==null?void 0:r.previousAttach)==null||s.call(r,e,t);(l=t.__tres)==null||delete l.previousAttach}function G(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 xe(e){var n;const t=(n=e==null?void 0:e.__tres)==null?void 0:n.root;t&&t.render&&t.render.canBeInvalidated.value&&t.invalidate()}function Yn(e){}function Bt(e,t,n){var s;if(!z(e.setPixelRatio))return;let r=0;if(n&&Z(n)&&n.length>=2){const[l,i]=n;r=g.MathUtils.clamp(t,l,i)}else pt(n)?r=n:r=t;r!==((s=e.getPixelRatio)==null?void 0:s.call(e))&&e.setPixelRatio(r)}function It(e,t,n,r,s){const l=[...t.__tres.objects],i=q(t);if(e=q(e),i===e)return!0;const a=G(e,t.__tres??{},s),c=t.parent??t.__tres.parent??null,o={...t.__tres.memoizedProps};delete o.object;for(const d of l)Te(d,s),je(d,s);i.__tres.objects=[],r.remove(t);for(const[d,w]of Object.entries(o))r.patchProp(a,d,a[d],w);n(e),r.insert(t,c);for(const d of l)r.insert(d,t);return!0}function q(e){return _t(e)?(e.object.__tres=e.__tres,e.object):e}function Te(e,t){var r,s,l,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,a=>a!==e),(s=e.__tres)!=null&&s.attach?jt(n,e,e.__tres.attach):((i=(l=e.parent)==null?void 0:l.remove)==null||i.call(l,q(e)),e.parent=null)}function je(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),xe(e)}async function Be(e,t){const n=new g.TextureLoader(t),r=s=>new Promise((l,i)=>{n.load(s,a=>l(a),()=>null,()=>{i(new Error("[useTextures] - Failed to load texture"))})});if(kt(e)){const s=await Promise.all(e.map(l=>r(l)));return e.length>1?s:s[0]}else{const{map:s,displacementMap:l,normalMap:i,roughnessMap:a,metalnessMap:c,aoMap:o,alphaMap:d,matcap:w}=e;return{map:s?await r(s):null,displacementMap:l?await r(l):null,normalMap:i?await r(i):null,roughnessMap:a?await r(a):null,metalnessMap:c?await r(c):null,aoMap:o?await r(o):null,alphaMap:d?await r(d):null,matcap:w?await r(w):null}}}const Et=f.defineComponent({__name:"component",props:{map:{},displacementMap:{},normalMap:{},roughnessMap:{},metalnessMap:{},aoMap:{},alphaMap:{},matcap:{}},async setup(e){let t,n;const r=e,s=([t,n]=f.withAsyncContext(()=>f.reactive(Be(r))),t=await t,n(),t);return(l,i)=>f.renderSlot(l.$slots,"default",{textures:f.unref(s)})}}),Ie=({sizes:e})=>{const t=f.ref([]),n=f.computed(()=>t.value[0]),r=i=>{const a=i instanceof g.Camera?i:t.value.find(o=>o.uuid===i);if(!a)return;const c=t.value.filter(({uuid:o})=>o!==a.uuid);t.value=[a,...c]},s=(i,a=!1)=>{if(Me(i)){const c=i;if(t.value.some(({uuid:o})=>o===c.uuid))return;a?r(c):t.value.push(c)}},l=i=>{if(Me(i)){const a=i;t.value=t.value.filter(({uuid:c})=>c!==a.uuid)}};return f.watchEffect(()=>{e.aspectRatio.value&&t.value.forEach(i=>{!i.manual&&(i instanceof g.PerspectiveCamera||$t(i))&&(i instanceof g.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())})}),f.onUnmounted(()=>{t.value=[]}),{camera:n,cameras:t,registerCamera:s,deregisterCamera:l,setCameraActive:r}};function $t(e){return e.hasOwnProperty("isOrthographicCamera")&&e.isOrthographicCamera}const Rt=!0,ne="[TresJS ▲ ■ ●] ";function Ut(...e){typeof e[0]=="string"?e[0]=ne+e[0]:e.unshift(ne),console.error(...e)}function Vt(...e){typeof e[0]=="string"?e[0]=ne+e[0]:e.unshift(ne),console.warn(...e)}function Ft(e,t){}function F(){return{logError:Ut,logWarning:Vt,logMessage:Ft}}const re=f.ref({}),oe=e=>Object.assign(re.value,e);function pe(){const e=new Map,t=new Set;let n=0,r=!1;const s=()=>{const o=Array.from(e.entries()).sort((d,w)=>{const u=d[1].priority-w[1].priority;return u===0?d[1].addI-w[1].addI:u});t.clear(),o.forEach(d=>t.add(d[0]))},l=o=>{e.delete(o),t.delete(o)};return{on:(o,d=0)=>{e.set(o,{priority:d,addI:n++});const w=()=>l(o);return M.tryOnScopeDispose(w),r=!0,{off:w}},off:l,trigger:(...o)=>{r&&(s(),r=!1),t.forEach(d=>d(...o))},dispose:()=>{e.clear(),t.clear()},get count(){return e.size}}}function Ee(){let e=!0,t=!0,n=!1;const r=new g.Clock(!1),s=f.ref(r.running),l=f.ref(!1);let i;const a=g.MathUtils.generateUUID();let c=null;const o=pe(),d=pe(),w=pe();O();let u={};function _(k){u=k}function v(k,T,m=0){switch(T){case"before":return o.on(k,m);case"render":return c||(c=k),d.dispose(),d.on(k);case"after":return w.on(k,m)}}function y(){t&&(t=!1,O(),S())}function p(){t=!0,O(),cancelAnimationFrame(i)}function b(){n=!1,O()}function A(){n=!0,O()}function L(){l.value=!0}function D(){l.value=!1}function S(){if(!e){i=requestAnimationFrame(S);return}const k=r.getDelta(),T=r.getElapsedTime(),m={camera:f.unref(u.camera),scene:f.unref(u.scene),renderer:f.unref(u.renderer),raycaster:f.unref(u.raycaster),controls:f.unref(u.controls),invalidate:u.invalidate,advance:u.advance},P={delta:k,elapsed:T,clock:r,...m};s.value&&o.trigger(P),l.value||(d.count?d.trigger(P):c&&c(P)),s.value&&w.trigger(P),i=requestAnimationFrame(S)}function O(){const k=!t&&!n;r.running!==k&&(r.running?r.stop():r.start()),s.value=r.running}return{loopId:a,register:(k,T,m)=>v(k,T,m),start:y,stop:p,pause:A,resume:b,pauseRender:L,resumeRender:D,isRenderPaused:l,isActive:s,setContext:_,setReady:k=>e=k}}function me(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,l=r.index?r.index.count*Uint32Array.BYTES_PER_ELEMENT:0,i=r.attributes.normal?r.attributes.normal.count*3*Float32Array.BYTES_PER_ELEMENT:0,a=r.attributes.uv?r.attributes.uv.count*2*Float32Array.BYTES_PER_ELEMENT:0,c=s+l+i+a;t+=c}}),t}function Wt(e){return(e/1024).toFixed(2)}const Nt=Number.parseInt(g.REVISION.replace("dev",""));function zt(e){return typeof e=="number"?[e,e,e]:e instanceof g.Vector3?[e.x,e.y,e.z]:e}function $e(e){return e instanceof g.Color?e:Array.isArray(e)?new g.Color(...e):new g.Color(e)}const se={realistic:{shadows:!0,physicallyCorrectLights:!0,outputColorSpace:g.SRGBColorSpace,toneMapping:g.ACESFilmicToneMapping,toneMappingExposure:3,shadowMap:{enabled:!0,type:g.PCFSoftShadowMap}},flat:{toneMapping:g.NoToneMapping,toneMappingExposure:1}};function Re({canvas:e,options:t,contextParts:{sizes:n,render:r,invalidate:s,advance:l}}){const i=f.computed(()=>({alpha:M.toValue(t.alpha)??!0,depth:M.toValue(t.depth),canvas:M.unrefElement(e),context:M.toValue(t.context),stencil:M.toValue(t.stencil),antialias:M.toValue(t.antialias)??!0,precision:M.toValue(t.precision),powerPreference:M.toValue(t.powerPreference),premultipliedAlpha:M.toValue(t.premultipliedAlpha),preserveDrawingBuffer:M.toValue(t.preserveDrawingBuffer),logarithmicDepthBuffer:M.toValue(t.logarithmicDepthBuffer),failIfMajorPerformanceCaveat:M.toValue(t.failIfMajorPerformanceCaveat)})),a=f.shallowRef(new g.WebGLRenderer(i.value));function c(){t.renderMode==="on-demand"&&s()}f.watch(i,()=>{a.value.dispose(),a.value=new g.WebGLRenderer(i.value),c()}),f.watch([n.width,n.height],()=>{a.value.setSize(n.width.value,n.height.value),c()},{immediate:!0}),f.watch(()=>t.clearColor,c);const{pixelRatio:o}=M.useDevicePixelRatio(),{logError:d}=F(),u=(()=>{const v=new g.WebGLRenderer,y={shadowMap:{enabled:v.shadowMap.enabled,type:v.shadowMap.type},toneMapping:v.toneMapping,toneMappingExposure:v.toneMappingExposure,outputColorSpace:v.outputColorSpace};return v.dispose(),y})(),_=M.toValue(t.renderMode);return _==="on-demand"&&s(),_==="manual"&&setTimeout(()=>{l()},100),f.watchEffect(()=>{const v=M.toValue(t.preset);v&&(v in se||d(`Renderer Preset must be one of these: ${Object.keys(se).join(", ")}`),Pe(a.value,se[v])),Bt(a.value,o.value,M.toValue(t.dpr)),_==="always"&&(r.frames.value=Math.max(1,r.frames.value));const y=(A,L)=>{const D=M.toValue(A),S=()=>{if(v)return ke(se[v],L)};if(D!==void 0)return D;const O=S();return O!==void 0?O:ke(u,L)},p=(A,L)=>Pt(a.value,L,y(A,L));p(t.shadows,"shadowMap.enabled"),p(t.toneMapping??g.ACESFilmicToneMapping,"toneMapping"),p(t.shadowMapType,"shadowMap.type"),Nt<150&&p(!t.useLegacyLights,"physicallyCorrectLights"),p(t.outputColorSpace,"outputColorSpace"),p(t.toneMappingExposure,"toneMappingExposure");const b=y(t.clearColor,"clearColor");b&&a.value.setClearColor(b?$e(b):new g.Color(0))}),f.onUnmounted(()=>{a.value.dispose(),a.value.forceContextLoss()}),{renderer:a}}function Gt(e,t,n=10){const r=M.toValue(e)?M.useWindowSize():M.useElementSize(f.computed(()=>M.toValue(t).parentElement)),s=f.readonly(M.refDebounced(r.width,n)),l=f.readonly(M.refDebounced(r.height,n)),i=f.computed(()=>s.value/l.value);return{height:l,width:s,aspectRatio:i}}const Ue=(e,t)=>{const n=f.computed(()=>t.renderer.value.domElement),r=f.shallowRef([]),{x:s,y:l}=M.usePointer({target:n});let i=0;const{width:a,height:c,top:o,left:d}=M.useElementBounding(n),w=({x:h,y:x})=>{if(n.value)return{x:(h-d.value)/a.value*2-1,y:-((x-o.value)/c.value)*2+1}},u=({x:h,y:x})=>{if(t.camera.value)return t.raycaster.value.setFromCamera(new g.Vector2(h,x),t.camera.value),r.value=t.raycaster.value.intersectObjects(e.value,!0),r.value},_=h=>{const x=w({x:(h==null?void 0:h.clientX)??s.value,y:(h==null?void 0:h.clientY)??l.value});return x?u(x)||[]:[]},v=M.createEventHook(),y=M.createEventHook(),p=M.createEventHook(),b=M.createEventHook(),A=M.createEventHook(),L=M.createEventHook(),D=M.createEventHook(),S=M.createEventHook();function O(h){const x={};for(const N in h)typeof N!="function"&&(x[N]=h[N]);return x}const k=(h,x)=>{var it,at,lt;const N=O(x),ce=new g.Vector3(x==null?void 0:x.clientX,x==null?void 0:x.clientY,0).unproject((it=t.camera)==null?void 0:it.value);h.trigger({...N,intersections:r.value,unprojectedPoint:ce,ray:(at=t.raycaster)==null?void 0:at.value.ray,camera:(lt=t.camera)==null?void 0:lt.value,sourceEvent:x,delta:i,stopPropagating:!1})};let T;const m=h=>{_(h),k(p,h),T=h},P=()=>{T&&m(T)};let j,B,I;const U=h=>{var x;j=(x=r.value[0])==null?void 0:x.object,i=0,B=new g.Vector2((h==null?void 0:h.clientX)??s.value,(h==null?void 0:h.clientY)??l.value),k(A,h)};let E,K=!1;const nt=h=>{var x,N,ce;h instanceof PointerEvent&&(r.value.length===0&&k(L,h),j===((x=r.value[0])==null?void 0:x.object)&&(I=new g.Vector2((h==null?void 0:h.clientX)??s.value,(h==null?void 0:h.clientY)??l.value),i=B==null?void 0:B.distanceTo(I),h.button===0?(k(v,h),E===((N=r.value[0])==null?void 0:N.object)?K=!0:(E=(ce=r.value[0])==null?void 0:ce.object,K=!1)):h.button===2&&k(D,h)),k(b,h))},rt=h=>{K&&(k(y,h),E=void 0,K=!1)},ot=h=>k(p,h),st=h=>k(S,h);return n.value.addEventListener("pointerup",nt),n.value.addEventListener("pointerdown",U),n.value.addEventListener("pointermove",m),n.value.addEventListener("pointerleave",ot),n.value.addEventListener("dblclick",rt),n.value.addEventListener("wheel",st),f.onUnmounted(()=>{n!=null&&n.value&&(n.value.removeEventListener("pointerup",nt),n.value.removeEventListener("pointerdown",U),n.value.removeEventListener("pointermove",m),n.value.removeEventListener("pointerleave",ot),n.value.removeEventListener("dblclick",rt),n.value.removeEventListener("wheel",st))}),{intersects:r,onClick:h=>v.on(h).off,onDblClick:h=>y.on(h).off,onContextMenu:h=>D.on(h).off,onPointerMove:h=>p.on(h).off,onPointerUp:h=>b.on(h).off,onPointerDown:h=>A.on(h).off,onPointerMissed:h=>L.on(h).off,onWheel:h=>S.on(h).off,forceUpdate:P}};function he(e,t){if(Array.isArray(e))for(const n of e)n(t);typeof e=="function"&&e(t)}function Ve(e,t,n){var T;const r=f.shallowRef(),s=f.shallowRef();e&&(r.value=e),t&&(s.value=t);const l=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(j=>i(j)))||l(m)},a=f.shallowRef(((T=r.value)==null?void 0:T.children).filter(i)||[]);function c(m,P){const j=[],B=()=>P.stopPropagating=!0;P.stopPropagation=B;for(const I of P==null?void 0:P.intersections){if(P.stopPropagating)return;P={...P,...I};const{object:U}=I;P.eventObject=U,he(U[m],P),j.push(U);let E=U.parent;for(;E!==null&&!P.stopPropagating&&!j.includes(E);)P.eventObject=E,he(E[m],P),j.push(E),E=E.parent;const K=Ct(m.slice(2));n(K,{intersection:I,event:P})}}const{onClick:o,onDblClick:d,onContextMenu:w,onPointerMove:u,onPointerDown:_,onPointerUp:v,onPointerMissed:y,onWheel:p,forceUpdate:b}=Ue(a,t);v(m=>c("onPointerUp",m)),_(m=>c("onPointerDown",m)),o(m=>c("onClick",m)),d(m=>c("onDoubleClick",m)),w(m=>c("onContextMenu",m)),p(m=>c("onWheel",m));let A=[];u(m=>{const P=m.intersections.map(({object:B})=>B),j=m.intersections;A.forEach(({object:B})=>{P.includes(B)||(m.intersections=A,c("onPointerLeave",m),c("onPointerOut",m))}),m.intersections=j,m.intersections.forEach(({object:B})=>{A.includes(B)||(c("onPointerEnter",m),c("onPointerOver",m))}),c("onPointerMove",m),A=m.intersections});const L=[];y(m=>{const P=()=>m.stopPropagating=!0;m.stopPropagation=P,L.forEach(j=>{m.stopPropagating||(m.eventObject=j,he(j.onPointerMissed,m))}),n("pointer-missed",{event:m})});function D(m){ee(m)&&V(m)&&a.value.push(m)}function S(m){if(ee(m)&&V(m)){const P=a.value.indexOf(m);P>-1&&a.value.splice(P,1)}}function O(m){ee(m)&&V(m)&&m.onPointerMissed&&L.push(m)}function k(m){if(ee(m)&&V(m)){const P=L.indexOf(m);P>-1&&L.splice(P,1)}}return t.eventManager={forceUpdate:b,registerObject:D,deregisterObject:S,registerPointerMissedObject:O,deregisterPointerMissedObject:k},{forceUpdate:b,registerObject:D,deregisterObject:S,registerPointerMissedObject:O,deregisterPointerMissedObject:k}}function qt(e,t,n=100){n=n<=0?100:n;const r=M.createEventHook(),s=new Set;let l=!1,i=!1,a=null;function c(){a&&clearTimeout(a),!i&&!l&&e()?(r.trigger(t),s.forEach(u=>u()),s.clear(),l=!0):!i&&!l&&(a=setTimeout(c,n))}function o(){i=!0,a&&clearTimeout(a)}c();const d=(u,..._)=>{u(..._)};return{on:u=>{if(l)return d(u,t),{off:()=>{}};{const _=r.on(u);return s.add(_.off),r.on(u)}},off:r.off,trigger:r.trigger,cancel:o}}const J=new WeakMap;function Fe(e){if(e=e||Q(),J.has(e))return J.get(e);const t=100,n=Date.now(),l=qt(()=>{if(Date.now()-n>=t)return!0;{const i=e.renderer.value,a=(i==null?void 0:i.domElement)||{width:0,height:0};return!!(i&&a.width>0&&a.height>0)}},e);return J.set(e,l),l}function Yt(e){const t=Q();if(t)return J.has(t)?J.get(t).on(e):Fe(t).on(e)}function We({scene:e,canvas:t,windowSize:n,rendererOptions:r,emit:s}){const l=f.shallowRef(e),i=Gt(n,t),{camera:a,cameras:c,registerCamera:o,deregisterCamera:d,setCameraActive:w}=Ie({sizes:i,scene:e}),u={mode:f.ref(r.renderMode||"always"),priority:f.ref(0),frames:f.ref(0),maxFrames:60,canBeInvalidated:f.computed(()=>u.mode.value==="on-demand"&&u.frames.value===0)};function _(I=1){r.renderMode==="on-demand"&&(u.frames.value=Math.min(u.maxFrames,u.frames.value+I))}function v(){r.renderMode==="manual"&&(u.frames.value=1)}const{renderer:y}=Re({scene:e,canvas:t,options:r,emit:s,contextParts:{sizes:i,camera:a,render:u,invalidate:_,advance:v}}),p={sizes:i,scene:l,camera:a,cameras:f.readonly(c),renderer:y,raycaster:f.shallowRef(new g.Raycaster),controls:f.ref(null),perf:{maxFrames:160,fps:{value:0,accumulator:[]},memory:{currentMem:0,allocatedMem:0,accumulator:[]}},render:u,advance:v,extend:oe,invalidate:_,registerCamera:o,setCameraActive:w,deregisterCamera:d,loop:Ee()};f.provide("useTres",p),p.scene.value.__tres={root:p},p.loop.register(()=>{a.value&&u.frames.value>0&&(y.value.render(e,a.value),s("render",p.renderer.value)),u.priority.value=0,u.mode.value==="always"?u.frames.value=1:u.frames.value=Math.max(0,u.frames.value-1)},"render");const{on:b,cancel:A}=Fe(p);p.loop.setReady(!1),p.loop.start(),b(()=>{s("ready",p),p.loop.setReady(!0),Ve(e,p,s)}),f.onUnmounted(()=>{A(),p.loop.stop()});const L=100,D=M.useFps({every:L}),{isSupported:S,memory:O}=M.useMemory({interval:L}),k=160;let T=performance.now();const m=({timestamp:I})=>{p.scene.value&&(p.perf.memory.allocatedMem=me(p.scene.value)),I-T>=L&&(T=I,p.perf.fps.accumulator.push(D.value),p.perf.fps.accumulator.length>k&&p.perf.fps.accumulator.shift(),p.perf.fps.value=D.value,S.value&&O.value&&(p.perf.memory.accumulator.push(O.value.usedJSHeapSize/1024/1024),p.perf.memory.accumulator.length>k&&p.perf.memory.accumulator.shift(),p.perf.memory.currentMem=p.perf.memory.accumulator.reduce((U,E)=>U+E,0)/p.perf.memory.accumulator.length))};let P=0;const j=1,{pause:B}=M.useRafFn(({delta:I})=>{window.__TRES__DEVTOOLS__&&(m({timestamp:performance.now()}),P+=I,P>=j&&(window.__TRES__DEVTOOLS__.cb(p),P=0))},{immediate:!0});return f.onUnmounted(()=>{B()}),p}function Q(){const e=f.inject("useTres");if(!e)throw new Error("useTresContext must be used together with useTresContextProvider");return e}const Kt=Q;function Jt(){const{camera:e,scene:t,renderer:n,loop:r,raycaster:s,controls:l,invalidate:i,advance:a}=Q();r.setContext({camera:e,scene:t,renderer:n,raycaster:s,controls:l,invalidate:i,advance:a});function c(w,u=0){return r.register(w,"before",u)}function o(w){return r.register(w,"render")}function d(w,u=0){return r.register(w,"after",u)}return{pause:r.pause,resume:r.resume,pauseRender:r.pauseRender,resumeRender:r.resumeRender,isActive:r.isActive,onBeforeRender:c,render:o,onAfterRender:d}}const Ne=M.createEventHook(),ze=M.createEventHook(),ge=M.createEventHook(),X=new g.Clock;let ie=0,ae=0;const{pause:Qt,resume:Ge,isActive:Xt}=M.useRafFn(()=>{Ne.trigger({delta:ie,elapsed:ae,clock:X}),ze.trigger({delta:ie,elapsed:ae,clock:X}),ge.trigger({delta:ie,elapsed:ae,clock:X})},{immediate:!1});ge.on(()=>{ie=X.getDelta(),ae=X.getElapsedTime()});let qe=!1;const Ht=()=>(qe||(qe=!0,Ge()),{onBeforeLoop:Ne.on,onLoop:ze.on,onAfterLoop:ge.on,pause:Qt,resume:Ge,isActive:Xt});function Zt(){const{logWarning:e}=F();function t(l,i,a){let c=null;return l.traverse(o=>{o[i]===a&&(c=o)}),c||e(`Child with ${i} '${a}' not found.`),c}function n(l,i,a){const c=[];return l.traverse(o=>{o[i].includes(a)&&c.push(o)}),c.length||e(`Children with ${i} '${a}' not found.`),c}function r(l,i){return t(l,"name",i)}function s(l,i){return n(l,"name",i)}return{seek:t,seekByName:r,seekAll:n,seekAllByName:s}}function en(e,t={},n={}){let r=e;const s=a=>{r=a};let l=new Proxy({},{});const i={has(a,c){return c in t||c in r},get(a,c,o){return c in t?t[c](r):r[c]},set(a,c,o){return n[c]?n[c](o,r,l,s):r[c]=o,!0}};return l=new Proxy({},i),l}const{logError:Ye}=F(),Ke=["onClick","onContextMenu","onPointerMove","onPointerEnter","onPointerLeave","onPointerOver","onPointerOut","onDoubleClick","onPointerDown","onPointerUp","onPointerCancel","onPointerMissed","onLostPointerCapture","onWheel"],tn=e=>{const t=e.scene.value;function n(o,d,w,u){if(u||(u={}),u.args||(u.args=[]),o==="template"||wt(o))return null;let _=o.replace("Tres",""),v;if(o==="primitive"){(!$(u.object)||f.isRef(u.object))&&Ye("Tres primitives need an 'object' prop, whose value is an object or shallowRef<object>"),_=u.object.type;const y={};v=en(u.object,{object:b=>b,isPrimitive:()=>!0,__tres:()=>y},{object:(b,A,L,D)=>{It(b,L,D,{patchProp:l,remove:s,insert:r},e)},__tres:b=>{Object.assign(y,b)}})}else{const y=re.value[_];y||Ye(`${_} is not defined on the THREE namespace. Use extend to add it to the catalog.`),v=new y(...u.args)}return v?(v.isCamera&&(u!=null&&u.position||v.position.set(3,3,3),u!=null&&u.lookAt||v.lookAt(0,0,0)),v=G(v,{...v.__tres,type:_,memoizedProps:u,eventCount:0,primitive:o==="primitive",attach:u.attach},e),v):null}function r(o,d){var _,v,y;if(!o)return;d=d||t;const w=o.__tres?o:G(o,{},e),u=d.__tres?d:G(d,{},e);o=q(w),d=q(u),o.__tres&&((_=o.__tres)==null?void 0:_.eventCount)>0&&((v=e.eventManager)==null||v.registerObject(o)),e.registerCamera(o),(y=e.eventManager)==null||y.registerPointerMissedObject(o),w.__tres.attach?Tt(u,w,w.__tres.attach):V(o)&&V(u)&&(u.add(o),o.dispatchEvent({type:"added"})),w.__tres.parent=u,u.__tres.objects&&!u.__tres.objects.includes(w)&&u.__tres.objects.push(w)}function s(o,d){var v,y,p,b;if(!o)return;o!=null&&o.__tres&&((v=o.__tres)==null?void 0:v.eventCount)>0&&((y=e.eventManager)==null||y.deregisterObject(o)),d=ue(d)?"default":d;const w=(p=o.__tres)==null?void 0:p.dispose;ue(w)||(w===null?d=!1:d=w);const u=(b=o.__tres)==null?void 0:b.primitive,_=d==="default"?!u:!!d;if(o.__tres&&"objects"in o.__tres&&[...o.__tres.objects].forEach(A=>s(A,d)),_&&o.children&&[...o.children].forEach(A=>s(A,d)),Te(o,e),je(o,e),_&&!yt(o)){if(z(d))d(o);else if(z(o.dispose))try{o.dispose()}catch{}}"__tres"in o&&delete o.__tres}function l(o,d,w,u){var A,L;if(!o)return;let _=o,v=d;if(o.__tres&&(o.__tres.memoizedProps[d]=u),d==="attach"){const D=((A=o.__tres)==null?void 0:A.parent)||o.parent;s(o),G(o,{attach:u},e),D&&r(o,D);return}if(d==="dispose"){o.__tres||(o=G(o,{},e)),o.__tres.dispose=u;return}if(V(o)&&v==="blocks-pointer-events"){u||u===""?o[v]=u:delete o[v];return}Ke.includes(d)&&o.__tres&&(o.__tres.eventCount+=1);let y=te(v),p=_==null?void 0:_[y];if(v==="args"){const D=o,S=w??[],O=u??[],k=((L=o.__tres)==null?void 0:L.type)||o.type;k&&S.length&&!St(S,O)&&(_=Object.assign(D,new re.value[k](...u)));return}if(_.type==="BufferGeometry"){if(v==="args")return;_.setAttribute(te(v),new g.BufferAttribute(...u));return}if(v.includes("-")&&p===void 0){const D=v.split("-");p=D.reduce((S,O)=>S[te(O)],_),v=D.pop(),y=v,p!=null&&p.set||(_=D.reduce((S,O)=>S[te(O)],_))}let b=u;if(b===""&&(b=!0),z(p)){Ke.includes(d)||(Z(b)?o[y](...b):o[y](b)),y.startsWith("on")&&z(b)&&(_[y]=b);return}!(p!=null&&p.set)&&!z(p)?_[y]=b:p.constructor===b.constructor&&(p!=null&&p.copy)?p==null||p.copy(b):Z(b)?p.set(...b):!p.isColor&&p.setScalar?p.setScalar(b):p.set(b),xe(o)}function i(o){var d;return((d=o==null?void 0:o.__tres)==null?void 0:d.parent)||null}function a(o){const d=G(new g.Object3D,{type:"Comment"},e);return d.name=o,d}function c(o){var _;const d=i(o),w=((_=d==null?void 0:d.__tres)==null?void 0:_.objects)||[],u=w.indexOf(o);return u<0||u>=w.length-1?null:w[u+1]}return{insert:r,remove:s,createElement:n,patchProp:l,parentNode:i,createText:()=>void 0,createComment:a,setText:()=>void 0,setElementText:()=>void 0,nextSibling:c,querySelector:()=>void 0,setScopeId:()=>void 0,cloneNode:()=>void 0,insertStaticContent:()=>void 0}};function nn(){return Je().__VUE_DEVTOOLS_GLOBAL_HOOK__}function Je(){return typeof navigator<"u"&&typeof window<"u"?window:typeof globalThis<"u"?globalThis:{}}const rn=typeof Proxy=="function",on="devtools-plugin:setup",sn="plugin:settings:set";let Y,ve;function an(){var e;return Y!==void 0||(typeof window<"u"&&window.performance?(Y=!0,ve=window.performance):typeof globalThis<"u"&&(!((e=globalThis.perf_hooks)===null||e===void 0)&&e.performance)?(Y=!0,ve=globalThis.perf_hooks.performance):Y=!1),Y}function ln(){return an()?ve.now():Date.now()}class cn{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 a=t.settings[i];r[i]=a.defaultValue}const s=`__vue-devtools-plugin-settings__${t.id}`;let l=Object.assign({},r);try{const i=localStorage.getItem(s),a=JSON.parse(i);Object.assign(l,a)}catch{}this.fallbacks={getSettings(){return l},setSettings(i){try{localStorage.setItem(s,JSON.stringify(i))}catch{}l=i},now(){return ln()}},n&&n.on(sn,(i,a)=>{i===this.plugin.id&&this.fallbacks.setSettings(a)}),this.proxiedOn=new Proxy({},{get:(i,a)=>this.target?this.target.on[a]:(...c)=>{this.onQueue.push({method:a,args:c})}}),this.proxiedTarget=new Proxy({},{get:(i,a)=>this.target?this.target[a]:a==="on"?this.proxiedOn:Object.keys(this.fallbacks).includes(a)?(...c)=>(this.targetQueue.push({method:a,args:c,resolve:()=>{}}),this.fallbacks[a](...c)):(...c)=>new Promise(o=>{this.targetQueue.push({method:a,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 un(e,t){const n=e,r=Je(),s=nn(),l=rn&&n.enableEarlyProxy;if(s&&(r.__VUE_DEVTOOLS_PLUGIN_API_AVAILABLE__||!l))s.emit(on,e,t);else{const i=l?new cn(n,s):null;(r.__VUE_DEVTOOLS_PLUGINS__=r.__VUE_DEVTOOLS_PLUGINS__||[]).push({pluginDescriptor:n,setupFn:t,proxy:i}),i&&t(i.proxiedTarget)}}function fn(e,t){const n=`▲ ■ ●${e}`;typeof Qe=="function"?Qe(n,t):console.log(n)}function Qe(e,t){throw new Error(e+t)}const Xe=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=me(e);return n>0&&t.tags.push({label:`${Wt(n)} KB`,textColor:15707189,backgroundColor:16775644,tooltip:"Memory usage"}),e.type.includes("Light")&&(gt(e)&&t.tags.push({label:`${e.intensity}`,textColor:9738662,backgroundColor:16316922,tooltip:"Intensity"}),t.tags.push({label:`#${new g.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 He(e,t,n=""){e.children.forEach(r=>{if(r.type==="HightlightMesh"||n&&!r.type.includes(n)&&!r.name.includes(n))return;const s=Xe(r);t.children.push(s),He(r,s,n)})}const dn=[],H="tres:inspector",pn=f.reactive({sceneGraph:null});function mn(e,t){un({id:"dev.esm.tres",label:"TresJS 🪐",logo:"https://raw.githubusercontent.com/Tresjs/tres/main/public/favicon.svg",packageName:"tresjs",homepage:"https://tresjs.org",componentStateTypes:dn,app:e},n=>{typeof n.now!="function"&&fn("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(l=>{if(l.inspectorId===H){const i=Xe(t.scene.value);He(t.scene.value,i,l.filter),pn.sceneGraph=i,l.rootNodes=[i]}});let r=null,s=null;n.on.getInspectorState(l=>{var i;if(l.inspectorId===H){const[a]=t.scene.value.getObjectsByProperty("uuid",l.nodeId);if(!a)return;if(s&&r&&r.parent&&s.remove(r),a.isMesh){const c=Lt(a);a.add(c),r=c,s=a}l.state={object:Object.entries(a).map(([c,o])=>c==="children"?{key:c,value:o.filter(d=>d.type!=="HightlightMesh")}:{key:c,value:o,editable:!0}).filter(({key:c})=>c!=="parent")},a.isScene&&(l.state.info={objects:a.children.length,memory:me(a),calls:t.renderer.value.info.render.calls,triangles:t.renderer.value.info.render.triangles,points:t.renderer.value.info.render.points,lines:t.renderer.value.info.render.lines},l.state.programs=((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(l=>{l.inspectorId===H&&At(t.scene.value,l.nodeId,l.path,l.state.value)})})}const hn=["data-scene","data-tres"],Ze=f.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},enableProvideBridge:{type:Boolean,default:!0},context:{},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},failIfMajorPerformanceCaveat:{type:Boolean,default:void 0},precision:{},logarithmicDepthBuffer:{type:Boolean,default:void 0},reverseDepthBuffer:{type:Boolean}},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}){const r=e,s=n,l=f.useSlots(),{logWarning:i}=F(),a=f.ref(),c=f.shallowRef(new g.Scene),o=f.getCurrentInstance();oe(_e);const d=(y,p=!1)=>f.defineComponent({setup(){var D;const b=(D=f.getCurrentInstance())==null?void 0:D.appContext;b&&(b.app=o==null?void 0:o.appContext.app);const A={};function L(S){S&&(S.parent&&L(S.parent),S.provides&&Object.assign(A,S.provides))}return o!=null&&o.parent&&r.enableProvideBridge&&(L(o.parent),Reflect.ownKeys(A).forEach(S=>{f.provide(S,A[S])})),f.provide("useTres",y),f.provide("extend",oe),typeof window<"u"&&mn(b==null?void 0:b.app,y),()=>f.h(f.Fragment,null,p?[]:l.default())}}),w=(y,p=!1)=>{const b=d(y,p),{render:A}=f.createRenderer(tn(y));A(f.h(b),c.value)},u=(y,p=!1)=>{fe(y.scene.value),p&&(y.renderer.value.dispose(),y.renderer.value.renderLists.dispose(),y.renderer.value.forceContextLoss()),c.value.__tres={root:y}},_=f.shallowRef(null);t({context:_,dispose:()=>u(_.value,!0)});const v=()=>{u(_.value),w(_.value,!0)};return f.onMounted(()=>{const y=a;_.value=We({scene:c.value,canvas:y,windowSize:r.windowSize??!1,rendererOptions:r,emit:s});const{registerCamera:p,camera:b,cameras:A,deregisterCamera:L}=_.value;w(_.value);const D=()=>{const S=new g.PerspectiveCamera(45,window.innerWidth/window.innerHeight,.1,1e3);S.position.set(3,3,3),S.lookAt(0,0,0),p(S);const O=f.watchEffect(()=>{A.value.length>=2&&(S.removeFromParent(),L(S),O==null||O())})};f.watch(()=>r.camera,(S,O)=>{S&&p(S),O&&(O.removeFromParent(),L(O))},{immediate:!0}),b.value||(i("No camera found. Creating a default perspective camera. To have full control over a camera, please add one to the scene."),D())}),f.onUnmounted(v),(y,p)=>(f.openBlock(),f.createElementBlock("canvas",{ref_key:"canvas",ref:a,"data-scene":c.value.uuid,class:f.normalizeClass(y.$attrs.class),"data-tres":`tresjs ${f.unref(ut).version}`,style:f.normalizeStyle({display:"block",width:"100%",height:"100%",position:y.windowSize?"fixed":"relative",top:0,left:0,pointerEvents:"auto",touchAction:"none",...y.$attrs.style})},null,14,hn))}}),gn=["TresCanvas","TresLeches","TresScene"],vn={template:{compilerOptions:{isCustomElement:e=>e.startsWith("Tres")&&!gn.includes(e)||e==="primitive"}}},{logWarning:yn}=F();let R=null;const _n={updated:(e,t)=>{var s;const n=Ot(t);if(!n){yn(`v-distance-to: problem with binding value: ${t.value}`);return}R&&(R.dispose(),e.parent.remove(R));const r=n.clone().sub(e.position);r.normalize(),R=new g.ArrowHelper(r,e.position,e.position.distanceTo(n),16776960),e.parent.add(R),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=>{R==null||R.dispose(),e.parent.remove(R)}};class et extends g.Line{constructor(t,n){const r=[1,1,0,-1,1,0,-1,-1,0,1,-1,0,1,1,0],s=new g.BufferGeometry;s.setAttribute("position",new g.Float32BufferAttribute(r,3)),s.computeBoundingSphere();const l=new g.LineBasicMaterial({fog:!1});super(s,l),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],a=new g.BufferGeometry;a.setAttribute("position",new g.Float32BufferAttribute(i,3)),a.computeBoundingSphere(),this.add(new g.Mesh(a,new g.MeshBasicMaterial({side:g.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:tt}=F();let le,W;const wn={DirectionalLight:g.DirectionalLightHelper,PointLight:g.PointLightHelper,SpotLight:g.SpotLightHelper,HemisphereLight:g.HemisphereLightHelper,RectAreaLight:et},bn={mounted:e=>{if(!e.isLight){tt(`${e.type} is not a light`);return}le=wn[e.type],e.parent.add(new le(e,1,e.color.getHex()))},updated:e=>{W=e.parent.children.find(t=>t instanceof le),!(W instanceof et)&&W.update()},unmounted:e=>{if(!e.isLight){tt(`${e.type} is not a light`);return}W=e.parent.children.find(t=>t instanceof le),W&&W.dispose&&W.dispose(),e.parent.remove(W)}},Cn={mounted:(e,t)=>{if(t.arg){console.log(`v-log:${t.arg}`,e[t.arg]);return}console.log("v-log",e)}},Mn={install(e){e.component("TresCanvas",Ze)}};C.TresCanvas=Ze,C.UseLoader=ft,C.UseTexture=Et,C.catalogue=re,C.createRenderLoop=Ee,C.default=Mn,C.dispose=fe,C.extend=oe,C.isProd=Rt,C.normalizeColor=$e,C.normalizeVectorFlexibleParam=zt,C.onTresReady=Yt,C.templateCompilerOptions=vn,C.traverseObjects=we,C.useCamera=Ie,C.useLoader=be,C.useLogger=F,C.useLoop=Jt,C.useRaycaster=Ue,C.useRenderLoop=Ht,C.useRenderer=Re,C.useSeek=Zt,C.useTexture=Be,C.useTres=Kt,C.useTresContext=Q,C.useTresContextProvider=We,C.useTresEventManager=Ve,C.vDistanceTo=_n,C.vLightHelper=bn,C.vLog=Cn,Object.defineProperties(C,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "@tresjs/core",
3
3
  "type": "module",
4
- "version": "4.3.1",
5
- "packageManager": "pnpm@9.1.4",
4
+ "version": "4.3.2",
5
+ "packageManager": "pnpm@9.15.1",
6
6
  "description": "Declarative ThreeJS using Vue Components",
7
7
  "author": "Alvaro Saburido <hola@alvarosaburido.dev> (https://github.com/alvarosabu/)",
8
8
  "license": "MIT",
@@ -49,8 +49,8 @@
49
49
  "access": "public"
50
50
  },
51
51
  "scripts": {
52
- "dev": "cd playground/vue && npm run dev",
53
- "dev:nuxt": "cd playground/nuxt && npm run dev",
52
+ "dev": "pnpm --filter='./playground/vue' dev",
53
+ "dev:nuxt": "pnpm --filter='./playground/nuxt' dev",
54
54
  "build": "vite build",
55
55
  "test": "vitest",
56
56
  "test:ci": "vitest run",
@@ -72,48 +72,47 @@
72
72
  "dependencies": {
73
73
  "@alvarosabu/utils": "^3.2.0",
74
74
  "@vue/devtools-api": "^6.6.3",
75
- "@vueuse/core": "^11.1.0"
75
+ "@vueuse/core": "^12.0.0"
76
76
  },
77
77
  "devDependencies": {
78
- "@release-it/conventional-changelog": "^9.0.0",
78
+ "@release-it/conventional-changelog": "^9.0.3",
79
79
  "@stackblitz/sdk": "^1.11.0",
80
80
  "@tresjs/cientos": "4.0.3",
81
81
  "@tresjs/eslint-config": "^1.4.0",
82
- "@types/three": "^0.169.0",
83
- "@typescript-eslint/eslint-plugin": "^8.8.1",
84
- "@typescript-eslint/parser": "^8.8.1",
85
- "@vitejs/plugin-vue": "^5.1.4",
82
+ "@types/three": "^0.171.0",
83
+ "@typescript-eslint/eslint-plugin": "^8.18.1",
84
+ "@typescript-eslint/parser": "^8.18.1",
85
+ "@vitejs/plugin-vue": "^5.2.1",
86
86
  "@vitest/coverage-c8": "^0.33.0",
87
- "@vitest/coverage-v8": "^2.1.2",
88
- "@vitest/ui": "^2.1.2",
87
+ "@vitest/coverage-v8": "^2.1.8",
88
+ "@vitest/ui": "^2.1.8",
89
89
  "@vue/test-utils": "^2.4.6",
90
- "eslint": "^9.12.0",
91
- "eslint-plugin-vue": "^9.29.0",
90
+ "eslint": "^9.17.0",
91
+ "eslint-plugin-vue": "^9.32.0",
92
92
  "esno": "^4.8.0",
93
93
  "gsap": "^3.12.5",
94
- "husky": "^9.1.6",
95
94
  "jsdom": "^25.0.1",
96
95
  "kolorist": "^1.8.0",
97
96
  "ohmyfetch": "^0.4.21",
98
97
  "pathe": "^1.1.2",
99
- "release-it": "^17.8.2",
98
+ "release-it": "^17.10.0",
100
99
  "rollup-plugin-analyzer": "^4.0.0",
101
100
  "rollup-plugin-copy": "^3.5.0",
102
101
  "rollup-plugin-visualizer": "^5.12.0",
103
- "sponsorkit": "^0.15.5",
104
- "three": "^0.169.0",
105
- "unocss": "^0.63.4",
106
- "unplugin": "^1.14.1",
107
- "unplugin-vue-components": "^0.27.4",
108
- "vite": "^5.4.8",
102
+ "sponsorkit": "^0.16.2",
103
+ "three": "^0.171.0",
104
+ "unocss": "^0.65.2",
105
+ "unplugin": "^2.1.0",
106
+ "unplugin-vue-components": "^0.28.0",
107
+ "vite": "^6.0.5",
109
108
  "vite-plugin-banner": "^0.8.0",
110
- "vite-plugin-dts": "4.2.4",
111
- "vite-plugin-inspect": "^0.8.7",
109
+ "vite-plugin-dts": "4.4.0",
110
+ "vite-plugin-inspect": "^0.10.4",
112
111
  "vite-plugin-require-transform": "^1.0.21",
113
112
  "vite-svg-loader": "^5.1.0",
114
- "vitepress": "1.4.0",
115
- "vitest": "^2.1.2",
116
- "vue": "3.5.12",
113
+ "vitepress": "1.5.0",
114
+ "vitest": "2.1.8",
115
+ "vue": "3.5.13",
117
116
  "vue-demi": "^0.14.10"
118
117
  }
119
118
  }