@tresjs/core 4.1.0 → 4.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/components/TresCanvas.vue.d.ts +9 -6
- package/dist/src/composables/index.d.ts +0 -1
- package/dist/src/composables/useCamera/index.d.ts +652 -615
- package/dist/src/composables/useLoader/index.d.ts +9 -9
- package/dist/src/composables/useRaycaster/index.d.ts +5 -5
- package/dist/src/composables/useRenderer/index.d.ts +5 -0
- package/dist/src/composables/useTresContextProvider/index.d.ts +1 -2
- package/dist/src/composables/useTresEventManager/index.d.ts +4 -0
- package/dist/src/types/index.d.ts +10 -5
- package/dist/src/utils/index.d.ts +20 -1
- package/dist/src/utils/is.d.ts +9 -3
- package/dist/src/utils/primitive/createRetargetingProxy.d.ts +1 -0
- package/dist/tres.js +986 -968
- package/dist/tres.umd.cjs +2 -2
- package/package.json +20 -20
- package/dist/src/composables/usePointerEventHandler/index.d.ts +0 -19
- package/dist/src/utils/nodeOpsUtils.d.ts +0 -6
package/dist/tres.umd.cjs
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* name: @tresjs/core
|
|
3
|
-
* version: v4.1
|
|
3
|
+
* version: v4.2.1
|
|
4
4
|
* (c) 2024
|
|
5
5
|
* description: Declarative ThreeJS using Vue Components
|
|
6
6
|
* author: Alvaro Saburido <hola@alvarosaburido.dev> (https://github.com/alvarosabu/)
|
|
7
7
|
*/
|
|
8
|
-
(function(P,p){typeof exports=="object"&&typeof module<"u"?p(exports,require("vue"),require("three"),require("@vueuse/core")):typeof define=="function"&&define.amd?define(["exports","vue","three","@vueuse/core"],p):(P=typeof globalThis<"u"?globalThis:P||self,p(P.tres={},P.Vue,P.Three,P.VueUseCore))})(this,function(P,p,y,S){"use strict";var rn=Object.defineProperty;var on=(P,p,y)=>p in P?rn(P,p,{enumerable:!0,configurable:!0,writable:!0,value:y}):P[p]=y;var me=(P,p,y)=>(on(P,typeof p!="symbol"?p+"":p,y),y);function Ze(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 ge=Ze(y),et={name:"@tresjs/core",type:"module",version:"4.1.0",packageManager:"pnpm@9.1.4",description:"Declarative ThreeJS using Vue Components",author:"Alvaro Saburido <hola@alvarosaburido.dev> (https://github.com/alvarosabu/)",license:"MIT",keywords:["vue","3d","threejs","three","threejs-vue"],sideEffects:!1,exports:{".":{types:"./dist/index.d.ts",import:"./dist/tres.js",require:"./dist/tres.umd.cjs"},"./components":{types:"./dist/src/components/index.d.ts"},"./composables":{types:"./dist/src/composables/index.d.ts"},"./types":{types:"./dist/src/types/index.d.ts"},"./utils":{types:"./dist/src/utils/index.d.ts"},"./*":"./*"},main:"./dist/tres.js",module:"./dist/tres.js",types:"./dist/index.d.ts",files:["*.d.ts","dist"],publishConfig:{access:"public"},scripts:{dev:"cd playground && npm run dev",build:"vite build",playground:"cd playground && npm run dev",test:"vitest","test:ci":"vitest run","test:ui":"vitest --ui --coverage.enabled=true",release:"release-it",coverage:"vitest run --coverage",lint:"eslint .","lint:fix":"eslint . --fix","docs:dev":"vitepress dev docs","docs:build":"vitepress build docs","docs:serve":"vitepress serve docs","docs:preview":"vitepress preview docs","docs:contributors":"esno scripts/update-contributors.ts",prepare:"node .husky/install.mjs"},peerDependencies:{three:">=0.133",vue:">=3.4"},dependencies:{"@alvarosabu/utils":"^3.2.0","@vue/devtools-api":"^6.6.2","@vueuse/core":"^10.10.0"},devDependencies:{"@release-it/conventional-changelog":"^8.0.1","@stackblitz/sdk":"^1.10.0","@tresjs/cientos":"3.9.0","@tresjs/eslint-config":"^1.1.0","@types/three":"^0.165.0","@typescript-eslint/eslint-plugin":"^7.11.0","@typescript-eslint/parser":"^7.11.0","@vitejs/plugin-vue":"^5.0.5","@vitest/coverage-c8":"^0.33.0","@vitest/coverage-v8":"^1.6.0","@vitest/ui":"^1.6.0","@vue/test-utils":"^2.4.6",eslint:"^9.4.0","eslint-plugin-vue":"^9.26.0",esno:"^4.7.0",gsap:"^3.12.5",husky:"^9.0.11",jsdom:"^24.1.0",kolorist:"^1.8.0",ohmyfetch:"^0.4.21",pathe:"^1.1.2","release-it":"^17.3.0","rollup-plugin-analyzer":"^4.0.0","rollup-plugin-copy":"^3.5.0","rollup-plugin-visualizer":"^5.12.0",sponsorkit:"^0.14.6",three:"^0.165.0",unocss:"^0.60.4",unplugin:"^1.10.1","unplugin-vue-components":"^0.27.0",vite:"^5.2.12","vite-plugin-banner":"^0.7.1","vite-plugin-dts":"3.9.1","vite-plugin-inspect":"^0.8.4","vite-plugin-require-transform":"^1.0.21","vite-svg-loader":"^5.1.0",vitepress:"1.2.2",vitest:"^1.6.0",vue:"^3.4.27","vue-demi":"^0.14.8"}};function le(e){return Array.isArray(e)}function z(e){return typeof e=="function"}function q(e){return e===Object(e)&&!le(e)&&!z(e)}function $(e){return q(e)&&"isObject3D"in e&&!!e.isObject3D}function he(e){return q(e)&&"isCamera"in e&&!!e.isCamera}function tt(e){return q(e)&&"isBufferGeometry"in e&&!!e.isBufferGeometry}function nt(e){return q(e)&&"isMaterial"in e&&!!e.isMaterial}function ve(e){return q(e)&&"isFog"in e&&!!e.isFog}function ye(e){return $(e)||tt(e)||nt(e)||ve(e)}const we=({sizes:e})=>{const t=p.ref([]),n=p.computed(()=>t.value[0]),r=i=>{const a=i instanceof y.Camera?i:t.value.find(o=>o.uuid===i);if(!a)return;const d=t.value.filter(({uuid:o})=>o!==a.uuid);t.value=[a,...d]},s=(i,a=!1)=>{if(he(i)){const d=i;if(t.value.some(({uuid:o})=>o===d.uuid))return;a?r(d):t.value.push(d)}},l=i=>{if(he(i)){const a=i;t.value=t.value.filter(({uuid:d})=>d!==a.uuid)}};return p.watchEffect(()=>{e.aspectRatio.value&&t.value.forEach(i=>{!i.manual&&(i instanceof y.PerspectiveCamera||rt(i))&&(i instanceof y.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())})}),p.onUnmounted(()=>{t.value=[]}),{camera:n,cameras:t,registerCamera:s,deregisterCamera:l,setCameraActive:r}};function rt(e){return e.hasOwnProperty("isOrthographicCamera")&&e.isOrthographicCamera}const be=S.createEventHook(),Me=S.createEventHook(),ce=S.createEventHook(),H=new y.Clock;let K=0,X=0;const{pause:ot,resume:Ce,isActive:it}=S.useRafFn(()=>{be.trigger({delta:K,elapsed:X,clock:H}),Me.trigger({delta:K,elapsed:X,clock:H}),ce.trigger({delta:K,elapsed:X,clock:H})},{immediate:!1});ce.on(()=>{K=H.getDelta(),X=H.getElapsedTime()});let _e=!1;const st=()=>(_e||(_e=!0,Ce()),{onBeforeLoop:be.on,onLoop:Me.on,onAfterLoop:ce.on,pause:ot,resume:Ce,isActive:it}),at=!0,Z="[TresJS ▲ ■ ●] ";function I(){function e(...r){typeof r[0]=="string"?r[0]=Z+r[0]:r.unshift(Z),console.error(...r)}function t(...r){typeof r[0]=="string"?r[0]=Z+r[0]:r.unshift(Z),console.warn(...r)}function n(r,s){}return{logError:e,logWarning:t,logMessage:n}}function lt(e){return typeof e=="number"?[e,e,e]:e instanceof y.Vector3?[e.x,e.y,e.z]:e}function Pe(e){return e instanceof y.Color?e:Array.isArray(e)?new y.Color(...e):new y.Color(e)}class ct extends ge.Mesh{constructor(...n){super(...n);me(this,"type","HightlightMesh");me(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 ke=(e,t)=>{for(const n of Object.keys(t))t[n]instanceof Object&&Object.assign(t[n],ke(e[n],t[n]));return Object.assign(e||{},t),e},ut=pt("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 ee(e){return e.replace(/-([a-z])/g,(t,n)=>n.toUpperCase())}const ft=/\B([A-Z])/g;function dt(e){return e.replace(ft,"-$1").toLowerCase()}function pt(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 mt=(e,t)=>{const n=new Set,r=[];for(const s of e){const l=t(s);n.has(l)||(n.add(l),r.push(s))}return r},Ae=(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)},gt=(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 Oe(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)||!Oe(e[s],t[s]))return!1;return!0}function ht(e,t){if(!Array.isArray(e)||!Array.isArray(t)||e.length!==t.length)return!1;for(let n=0;n<e.length;n++)if(!Oe(e[n],t[n]))return!1;return!0}const vt=Array.isArray;function yt(e,t,n,r){const s=d=>{if(d.uuid===t)return d;for(const o of d.children){const v=s(o);if(v)return v}},l=s(e);if(!l){console.warn("Object with UUID not found in the scene.");return}let i=l;for(let d=0;d<n.length-1;d++)if(i[n[d]]!==void 0)i=i[n[d]];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 wt(e){const t=new y.MeshBasicMaterial({color:11003607,transparent:!0,opacity:.2,depthTest:!1,side:y.DoubleSide});return new ct(e.geometry.clone(),t)}function bt(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 y.Vector3(...t)),t}function Mt(e){return"map"in e}function Le(e){Mt(e)&&e.map&&e.map.dispose(),e.dispose()}function te(e){var n,r;if(e.parent&&((n=e.removeFromParent)==null||n.call(e)),delete e.__tres,[...e.children].forEach(s=>te(s)),!(e instanceof y.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 Ct(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}const _t=Number.parseInt(y.REVISION.replace("dev","")),ne={realistic:{shadows:!0,physicallyCorrectLights:!0,outputColorSpace:y.SRGBColorSpace,toneMapping:y.ACESFilmicToneMapping,toneMappingExposure:3,shadowMap:{enabled:!0,type:y.PCFSoftShadowMap}},flat:{toneMapping:y.NoToneMapping,toneMappingExposure:1}};function De({canvas:e,options:t,contextParts:{sizes:n,render:r,invalidate:s,advance:l}}){const i=p.computed(()=>({alpha:S.toValue(t.alpha)??!0,depth:S.toValue(t.depth),canvas:S.unrefElement(e),context:S.toValue(t.context),stencil:S.toValue(t.stencil),antialias:S.toValue(t.antialias)??!0,precision:S.toValue(t.precision),powerPreference:S.toValue(t.powerPreference),premultipliedAlpha:S.toValue(t.premultipliedAlpha),preserveDrawingBuffer:S.toValue(t.preserveDrawingBuffer),logarithmicDepthBuffer:S.toValue(t.logarithmicDepthBuffer),failIfMajorPerformanceCaveat:S.toValue(t.failIfMajorPerformanceCaveat)})),a=p.shallowRef(new y.WebGLRenderer(i.value));function d(){t.renderMode==="on-demand"&&s()}p.watch(i,()=>{a.value.dispose(),a.value=new y.WebGLRenderer(i.value),d()}),p.watch([n.width,n.height],()=>{a.value.setSize(n.width.value,n.height.value),d()},{immediate:!0}),p.watch(()=>t.clearColor,d);const{pixelRatio:o}=S.useDevicePixelRatio();p.watch(o,()=>{a.value.setPixelRatio(o.value)});const{logError:v}=I(),c=(()=>{const f=new y.WebGLRenderer,k={shadowMap:{enabled:f.shadowMap.enabled,type:f.shadowMap.type},toneMapping:f.toneMapping,toneMappingExposure:f.toneMappingExposure,outputColorSpace:f.outputColorSpace};return f.dispose(),k})(),w=S.toValue(t.renderMode);return w==="on-demand"&&s(),w==="manual"&&setTimeout(()=>{l()},100),p.watchEffect(()=>{const f=S.toValue(t.preset);f&&(f in ne||v(`Renderer Preset must be one of these: ${Object.keys(ne).join(", ")}`),ke(a.value,ne[f])),w==="always"&&(r.frames.value=Math.max(1,r.frames.value));const k=(b,D)=>{const A=S.toValue(b),O=()=>{if(f)return Ae(ne[f],D)};if(A!==void 0)return A;const C=O();return C!==void 0?C:Ae(c,D)},g=(b,D)=>gt(a.value,D,k(b,D));g(t.shadows,"shadowMap.enabled"),g(t.toneMapping??y.ACESFilmicToneMapping,"toneMapping"),g(t.shadowMapType,"shadowMap.type"),_t<150&&g(!t.useLegacyLights,"physicallyCorrectLights"),g(t.outputColorSpace,"outputColorSpace"),g(t.toneMappingExposure,"toneMappingExposure");const M=k(t.clearColor,"clearColor");M&&a.value.setClearColor(M?Pe(M):new y.Color(0))}),p.onUnmounted(()=>{a.value.dispose(),a.value.forceContextLoss()}),{renderer:a}}const Pt=e=>!!e&&e.constructor===Array;function Te(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 kt(e,t,n,r,s){const{logError:l}=I(),i=new e;s&&s(i),n&&n(i);const d=(Array.isArray(t)?t:[t]).map(o=>new Promise((v,m)=>{i.load(o,c=>{c.scene&&Object.assign(c,Te(c.scene)),v(c)},r,c=>m(l("[useLoader] - Failed to load resource",c)))}));return Pt(t)?await Promise.all(d):await d[0]}async function St(e,t){const n=new y.TextureLoader(t),r=s=>new Promise((l,i)=>{n.load(s,a=>l(a),()=>null,()=>{i(new Error("[useTextures] - Failed to load texture"))})});if(vt(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:d,aoMap:o,alphaMap:v,matcap:m}=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:d?await r(d):null,aoMap:o?await r(o):null,alphaMap:v?await r(v):null,matcap:m?await r(m):null}}}const ue=(e,t)=>{const n=p.computed(()=>t.renderer.value.domElement),r=p.shallowRef([]),{x:s,y:l}=S.usePointer({target:n});let i=0;const{width:a,height:d,top:o,left:v}=S.useElementBounding(n),m=({x:h,y:T})=>{if(n.value)return{x:(h-v.value)/a.value*2-1,y:-((T-o.value)/d.value)*2+1}},c=({x:h,y:T})=>{if(t.camera.value)return t.raycaster.value.setFromCamera(new y.Vector2(h,T),t.camera.value),r.value=t.raycaster.value.intersectObjects(e.value,!0),r.value},w=h=>{const T=m({x:(h==null?void 0:h.clientX)??s.value,y:(h==null?void 0:h.clientY)??l.value});return T?c(T)||[]:[]},f=S.createEventHook(),k=S.createEventHook(),g=S.createEventHook(),M=S.createEventHook(),b=S.createEventHook(),D=S.createEventHook(),A=S.createEventHook(),O=S.createEventHook();function C(h){const T={};for(const V in h)typeof V!="function"&&(T[V]=h[V]);return T}const u=(h,T)=>{var Qe,Ke,Xe;const V=C(T),ae=new y.Vector3(T==null?void 0:T.clientX,T==null?void 0:T.clientY,0).unproject((Qe=t.camera)==null?void 0:Qe.value);h.trigger({...V,intersections:r.value,unprojectedPoint:ae,ray:(Ke=t.raycaster)==null?void 0:Ke.value.ray,camera:(Xe=t.camera)==null?void 0:Xe.value,sourceEvent:T,delta:i,stopPropagating:!1})};let _;const L=h=>{w(h),u(g,h),_=h},x=()=>{_&&L(_)};let R,j,B;const N=h=>{var T;R=(T=r.value[0])==null?void 0:T.object,i=0,j=new y.Vector2((h==null?void 0:h.clientX)??s.value,(h==null?void 0:h.clientY)??l.value),u(b,h)};let E,G=!1;const se=h=>{var T,V,ae;h instanceof PointerEvent&&(r.value.length===0&&u(D,h),R===((T=r.value[0])==null?void 0:T.object)&&(B=new y.Vector2((h==null?void 0:h.clientX)??s.value,(h==null?void 0:h.clientY)??l.value),i=j==null?void 0:j.distanceTo(B),h.button===0?(u(f,h),E===((V=r.value[0])==null?void 0:V.object)?G=!0:(E=(ae=r.value[0])==null?void 0:ae.object,G=!1)):h.button===2&&u(A,h)),u(M,h))},He=h=>{G&&(u(k,h),E=void 0,G=!1)},Ye=h=>u(g,h),Je=h=>u(O,h);return n.value.addEventListener("pointerup",se),n.value.addEventListener("pointerdown",N),n.value.addEventListener("pointermove",L),n.value.addEventListener("pointerleave",Ye),n.value.addEventListener("dblclick",He),n.value.addEventListener("wheel",Je),p.onUnmounted(()=>{n!=null&&n.value&&(n.value.removeEventListener("pointerup",se),n.value.removeEventListener("pointerdown",N),n.value.removeEventListener("pointermove",L),n.value.removeEventListener("pointerleave",Ye),n.value.removeEventListener("dblclick",He),n.value.removeEventListener("wheel",Je))}),{intersects:r,onClick:h=>f.on(h).off,onDblClick:h=>k.on(h).off,onContextMenu:h=>A.on(h).off,onPointerMove:h=>g.on(h).off,onPointerUp:h=>M.on(h).off,onPointerDown:h=>b.on(h).off,onPointerMissed:h=>D.on(h).off,onWheel:h=>O.on(h).off,forceUpdate:x}};function At(){const{logWarning:e}=I();function t(l,i,a){let d=null;return l.traverse(o=>{o[i]===a&&(d=o)}),d||e(`Child with ${i} '${a}' not found.`),d}function n(l,i,a){const d=[];return l.traverse(o=>{o[i].includes(a)&&d.push(o)}),d.length||e(`Children with ${i} '${a}' not found.`),d}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}}const Ot=e=>{const t=p.reactive({click:new Map,pointerMove:new Map,pointerEnter:new Map,pointerLeave:new Map}),n=p.ref(new Set),r=m=>{n.value.add(m)},s=m=>{n.value.delete(m)},l=m=>{Object.values(t).forEach(c=>c.delete(m)),s(m)},i=m=>{const{onClick:c,onPointerMove:w,onPointerEnter:f,onPointerLeave:k}=m;c&&t.click.set(m,c),w&&t.pointerMove.set(m,w),f&&t.pointerEnter.set(m,f),k&&t.pointerLeave.set(m,k)},a=p.computed(()=>mt([...Array.from(n.value),...Object.values(t).map(m=>Array.from(m.keys())).flat()],({uuid:m})=>m));e.registerObjectAtPointerEventHandler=i,e.deregisterObjectAtPointerEventHandler=l,e.registerBlockingObjectAtPointerEventHandler=r,e.deregisterBlockingObjectAtPointerEventHandler=s;const{onClick:d,onPointerMove:o}=ue(a,e);d(({intersects:m,event:c})=>{var w;m.length&&((w=t.click.get(m[0].object))==null||w(m[0],c))});let v;return o(({intersects:m,event:c})=>{var M,b,D,A;const w=(M=m==null?void 0:m[0])==null?void 0:M.object,{pointerLeave:f,pointerEnter:k,pointerMove:g}=t;v&&v!==w&&((b=f.get(v))==null||b(v,c)),w&&(v!==w&&((D=k.get(w))==null||D(m[0],c)),(A=g.get(w))==null||A(m[0],c)),v=w||null}),{registerObject:i,deregisterObject:l,registerBlockingObject:r,deregisterBlockingObject:s}};function fe(e){let t=0;return e.traverse(n=>{if(n.isMesh&&n.geometry){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,d=s+l+i+a;t+=d}}),t}function Lt(e){return(e/1024).toFixed(2)}const re=p.ref({}),oe=e=>Object.assign(re.value,e);function Dt(e,t,n=10){const r=S.toValue(e)?S.useWindowSize():S.useElementSize(p.computed(()=>S.toValue(t).parentElement)),s=p.readonly(S.refDebounced(r.width,n)),l=p.readonly(S.refDebounced(r.height,n)),i=p.computed(()=>s.value/l.value);return{height:l,width:s,aspectRatio:i}}function de(){const e=new Map,t=new Set;let n=0,r=!1;const s=()=>{const o=Array.from(e.entries()).sort((v,m)=>{const c=v[1].priority-m[1].priority;return c===0?v[1].addI-m[1].addI:c});t.clear(),o.forEach(v=>t.add(v[0]))},l=o=>{e.delete(o),t.delete(o)};return{on:(o,v=0)=>{e.set(o,{priority:v,addI:n++});const m=()=>l(o);return S.tryOnScopeDispose(m),r=!0,{off:m}},off:l,trigger:(...o)=>{r&&(s(),r=!1),t.forEach(v=>v(...o))},dispose:()=>{e.clear(),t.clear()},get count(){return e.size}}}function xe(){let e=!0,t=!0,n=!1;const r=new y.Clock(!1),s=p.ref(r.running),l=p.ref(!1);let i;const a=y.MathUtils.generateUUID();let d=null;const o=de(),v=de(),m=de();C();let c={};function w(u){c=u}function f(u,_,L=0){switch(_){case"before":return o.on(u,L);case"render":return d||(d=u),v.dispose(),v.on(u);case"after":return m.on(u,L)}}function k(){t&&(t=!1,C(),O())}function g(){t=!0,C(),cancelAnimationFrame(i)}function M(){n=!1,C()}function b(){n=!0,C()}function D(){l.value=!0}function A(){l.value=!1}function O(){if(!e){i=requestAnimationFrame(O);return}const u=r.getDelta(),_=r.getElapsedTime(),L={camera:p.unref(c.camera),scene:p.unref(c.scene),renderer:p.unref(c.renderer),raycaster:p.unref(c.raycaster),controls:p.unref(c.controls),invalidate:c.invalidate,advance:c.advance},x={delta:u,elapsed:_,clock:r,...L};s.value&&o.trigger(x),l.value||(v.count?v.trigger(x):d&&d(x)),s.value&&m.trigger(x),i=requestAnimationFrame(O)}function C(){const u=!t&&!n;r.running!==u&&(r.running?r.stop():r.start()),s.value=r.running}return{loopId:a,register:(u,_,L)=>f(u,_,L),start:k,stop:g,pause:b,resume:M,pauseRender:D,resumeRender:A,isRenderPaused:l,isActive:s,setContext:w,setReady:u=>e=u}}function Tt(e,t,n=100){n=n<=0?100:n;const r=S.createEventHook(),s=new Set;let l=!1,i=!1,a=null;function d(){a&&clearTimeout(a),!i&&!l&&e()?(r.trigger(t),s.forEach(c=>c()),s.clear(),l=!0):!i&&!l&&(a=setTimeout(d,n))}function o(){i=!0,a&&clearTimeout(a)}d();const v=(c,...w)=>{c(...w)};return{on:c=>{if(l)return v(c,t),{off:()=>{}};{const w=r.on(c);return s.add(w.off),r.on(c)}},off:r.off,trigger:r.trigger,cancel:o}}const Y=new WeakMap;function je(e){if(e=e||J(),Y.has(e))return Y.get(e);const t=100,n=Date.now(),l=Tt(()=>{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 Y.set(e,l),l}function xt(e){const t=J();if(t)return Y.has(t)?Y.get(t).on(e):je(t).on(e)}function Be({scene:e,canvas:t,windowSize:n,disableRender:r,rendererOptions:s,emit:l}){const{logWarning:i}=I(),a=p.shallowRef(e),d=Dt(n,t),{camera:o,cameras:v,registerCamera:m,deregisterCamera:c,setCameraActive:w}=we({sizes:d,scene:e}),f={mode:p.ref(s.renderMode||"always"),priority:p.ref(0),frames:p.ref(0),maxFrames:60,canBeInvalidated:p.computed(()=>f.mode.value==="on-demand"&&f.frames.value===0)};function k(E=1){s.renderMode==="on-demand"?f.frames.value=Math.min(f.maxFrames,f.frames.value+E):i("`invalidate` can only be used when `renderMode` is set to `on-demand`")}function g(){s.renderMode==="manual"?f.frames.value=1:i("`advance` can only be used when `renderMode` is set to `manual`")}const{renderer:M}=De({scene:e,canvas:t,options:s,emit:l,contextParts:{sizes:d,camera:o,render:f,invalidate:k,advance:g},disableRender:r}),b={sizes:d,scene:a,camera:o,cameras:p.readonly(v),renderer:M,raycaster:p.shallowRef(new y.Raycaster),controls:p.ref(null),perf:{maxFrames:160,fps:{value:0,accumulator:[]},memory:{currentMem:0,allocatedMem:0,accumulator:[]}},render:f,advance:g,extend:oe,invalidate:k,registerCamera:m,setCameraActive:w,deregisterCamera:c,loop:xe()};p.provide("useTres",b),b.scene.value.__tres={root:b},b.loop.register(()=>{o.value&&f.frames.value>0&&(M.value.render(e,o.value),l("render",b.renderer.value)),f.priority.value=0,f.mode.value==="always"?f.frames.value=1:f.frames.value=Math.max(0,f.frames.value-1)},"render");const{on:D,cancel:A}=je(b);b.loop.setReady(!1),b.loop.start(),D(()=>{l("ready",b),b.loop.setReady(!0)}),p.onUnmounted(()=>{A(),b.loop.stop()});const O=100,C=S.useFps({every:O}),{isSupported:u,memory:_}=S.useMemory({interval:O}),L=160;let x=performance.now();const R=({timestamp:E})=>{b.scene.value&&(b.perf.memory.allocatedMem=fe(b.scene.value)),E-x>=O&&(x=E,b.perf.fps.accumulator.push(C.value),b.perf.fps.accumulator.length>L&&b.perf.fps.accumulator.shift(),b.perf.fps.value=C.value,u.value&&_.value&&(b.perf.memory.accumulator.push(_.value.usedJSHeapSize/1024/1024),b.perf.memory.accumulator.length>L&&b.perf.memory.accumulator.shift(),b.perf.memory.currentMem=b.perf.memory.accumulator.reduce((G,se)=>G+se,0)/b.perf.memory.accumulator.length))};let j=0;const B=1,{pause:N}=S.useRafFn(({delta:E})=>{window.__TRES__DEVTOOLS__&&(R({timestamp:performance.now()}),j+=E,j>=B&&(window.__TRES__DEVTOOLS__.cb(b),j=0))},{immediate:!0});return p.onUnmounted(()=>{N()}),b}function J(){const e=p.inject("useTres");if(!e)throw new Error("useTresContext must be used together with useTresContextProvider");return e}const jt=J;function Bt(){const{camera:e,scene:t,renderer:n,loop:r,raycaster:s,controls:l,invalidate:i,advance:a}=J();r.setContext({camera:e,scene:t,renderer:n,raycaster:s,controls:l,invalidate:i,advance:a});function d(m,c=0){return r.register(m,"before",c)}function o(m){return r.register(m,"render")}function v(m,c=0){return r.register(m,"after",c)}return{pause:r.pause,resume:r.resume,pauseRender:r.pauseRender,resumeRender:r.resumeRender,isActive:r.isActive,onBeforeRender:d,render:o,onAfterRender:v}}function Ee(e,t,n){const r=p.shallowRef(),s=p.shallowRef();e&&(r.value=e),t&&(s.value=t);const l=u=>{var _;return((_=u.__tres)==null?void 0:_.eventCount)>0},i=u=>{var _;return((_=u.children)==null?void 0:_.some(L=>i(L)))||l(u)},a=p.computed(()=>{var u,_;return((_=(u=r.value)==null?void 0:u.children)==null?void 0:_.filter(i))||[]});function d(u,_){if(Array.isArray(u))for(const L of u)L(_);typeof u=="function"&&u(_)}function o(u,_){const L=[],x=()=>_.stopPropagating=!0;_.stopPropagation=x;for(const R of _==null?void 0:_.intersections){if(_.stopPropagating)return;_={..._,...R};const{object:j}=R;_.eventObject=j,d(j[u],_),L.push(j);let B=j.parent;for(;B!==null&&!_.stopPropagating&&!L.includes(B);)_.eventObject=B,d(B[u],_),L.push(B),B=B.parent;const N=dt(u.slice(2));n(N,{intersection:R,event:_})}}const{onClick:v,onDblClick:m,onContextMenu:c,onPointerMove:w,onPointerDown:f,onPointerUp:k,onPointerMissed:g,onWheel:M,forceUpdate:b}=ue(a,t);k(u=>o("onPointerUp",u)),f(u=>o("onPointerDown",u)),v(u=>o("onClick",u)),m(u=>o("onDoubleClick",u)),c(u=>o("onContextMenu",u)),M(u=>o("onWheel",u));let D=[];w(u=>{const _=u.intersections.map(({object:x})=>x),L=u.intersections;D.forEach(({object:x})=>{_.includes(x)||(u.intersections=D,o("onPointerLeave",u),o("onPointerOut",u))}),u.intersections=L,u.intersections.forEach(({object:x})=>{D.includes(x)||(o("onPointerEnter",u),o("onPointerOver",u))}),o("onPointerMove",u),D=u.intersections});const A=[];g(u=>{const _=()=>u.stopPropagating=!0;u.stopPropagation=_,A.forEach(L=>{u.stopPropagating||(u.eventObject=L,d(L.onPointerMissed,u))}),n("pointer-missed",{event:u})});function O(u){ye(u)&&$(u)&&u.onPointerMissed&&A.push(u)}function C(u){if(ye(u)&&$(u)){const _=A.indexOf(u);_>-1&&A.splice(_,1)}}return t.eventManager={forceUpdate:b,registerPointerMissedObject:O,deregisterPointerMissedObject:C},{forceUpdate:b,registerPointerMissedObject:O,deregisterPointerMissedObject:C}}function Ie(e,t,n){const r=e;return r.__tres={type:"unknown",eventCount:0,root:n,handlers:{},memoizedProps:{},objects:[],parent:null,...t},r}function Ue(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 Sn(e){}const{logError:Fe}=I(),Re=["onClick","onContextMenu","onPointerMove","onPointerEnter","onPointerLeave","onPointerOver","onPointerOut","onDoubleClick","onPointerDown","onPointerUp","onPointerCancel","onPointerMissed","onLostPointerCapture","onWheel"],Et=e=>{const t=e.scene.value;function n(o,v,m,c){if(c||(c={}),c.args||(c.args=[]),o==="template"||ut(o))return null;let w=o.replace("Tres",""),f;if(o==="primitive"){(c==null?void 0:c.object)===void 0&&Fe("Tres primitives need a prop 'object'");const k=c.object;w=k.type,f=Object.assign(k.clone(),{type:w})}else{const k=re.value[w];k||Fe(`${w} is not defined on the THREE namespace. Use extend to add it to the catalog.`),f=new k(...c.args)}return f?(f.isCamera&&(c!=null&&c.position||f.position.set(3,3,3),c!=null&&c.lookAt||f.lookAt(0,0,0)),(c==null?void 0:c.attach)===void 0&&(f.isMaterial?f.attach="material":f.isBufferGeometry&&(f.attach="geometry")),f=Ie(f,{...f.__tres,type:w,memoizedProps:c,eventCount:0,disposable:!0,primitive:o==="primitive"},e),f.isObject3D&&f.__tres&&(c!=null&&c.material||c!=null&&c.geometry)&&(f.__tres.disposable=!1),f):null}function r(o,v){var f,k;if(!o)return;const m=o.__tres?o:Ie(o,{}),c=v||t;e.registerCamera(o),(f=e.eventManager)==null||f.registerPointerMissedObject(o);let w=!1;$(o)&&$(c)?(c.add(o),w=!0,o.dispatchEvent({type:"added"})):ve(o)?c.fog=o:typeof o.attach=="string"&&(o.__previousAttach=o[c==null?void 0:c.attach],c&&(c[o.attach]=o)),m.__tres.parent=c,(k=c.__tres)!=null&&k.objects&&!w&&(c.__tres.objects.includes(o)||c.__tres.objects.push(o))}function s(o){var m,c,w,f,k;if(!o)return;o.parent=o.parent||t;const v=((m=o.__tres)==null?void 0:m.parent)||t;o.__tres&&(o.__tres.parent=null),v.__tres&&"objects"in v.__tres&&Ct(v.__tres.objects,g=>g!==o),$(o)&&((c=o.removeFromParent)==null||c.call(o),o.traverse(M=>{var b;e.deregisterCamera(M),(b=e.eventManager)==null||b.deregisterPointerMissedObject(M)}),e.deregisterCamera(o),Ue(o),!((w=o.__tres)!=null&&w.primitive)&&((f=o.__tres)!=null&&f.disposable)&&te(o),(k=o.dispose)==null||k.call(o))}function l(o,v,m,c){var b,D;if(!o)return;let w=o,f=v;if((b=o.__tres)!=null&&b.primitive&&f==="object"&&m!==null){const A=n("primitive",void 0,void 0,{object:c});for(const O in A){if(O==="uuid")continue;const C=o[O],u=A[O];!(C!=null&&C.set)&&!z(C)?o[O]=u:C.constructor===u.constructor&&(C!=null&&C.copy)?C==null||C.copy(u):Array.isArray(u)?C.set(...u):!C.isColor&&C.setScalar?C.setScalar(u):C.set(u)}A!=null&&A.__tres&&(A.__tres.root=e),A!=null&&A.isGroup?(o.geometry=void 0,o.material=void 0):delete o.isGroup}if($(o)&&f==="blocks-pointer-events"){c||c===""?o[f]=c:delete o[f];return}Re.includes(v)&&(o.__tres.eventCount+=1);let k=ee(f),g=w==null?void 0:w[k];if(f==="args"){const A=o,O=m??[],C=c??[],u=((D=o.__tres)==null?void 0:D.type)||o.type;u&&O.length&&!ht(O,C)&&(w=Object.assign(A,new re.value[u](...c)));return}if(w.type==="BufferGeometry"){if(f==="args")return;w.setAttribute(ee(f),new y.BufferAttribute(...c));return}if(f.includes("-")&&g===void 0){const A=f.split("-");g=A.reduce((O,C)=>O[ee(C)],w),f=A.pop(),k=f,g!=null&&g.set||(w=A.reduce((O,C)=>O[ee(C)],w))}let M=c;if(M===""&&(M=!0),z(g)){Re.includes(v)||(le(M)?o[k](...M):o[k](M)),k.startsWith("on")&&z(M)&&(w[k]=M);return}!(g!=null&&g.set)&&!z(g)?w[k]=M:g.constructor===M.constructor&&(g!=null&&g.copy)?g==null||g.copy(M):le(M)?g.set(...M):!g.isColor&&g.setScalar?g.setScalar(M):g.set(M),Ue(o)}function i(o){return(o==null?void 0:o.parent)||null}function a(o){const v=new y.Object3D;return v.name=o,v.__tres={type:"Comment"},v.__tres.root=t==null?void 0:t.__tres.root,v}function d(o){if(!o)return null;const v=o.parent||t,m=v.children.indexOf(o);return v.children[m+1]||null}return{insert:r,remove:s,createElement:n,patchProp:l,parentNode:i,createText:()=>void 0,createComment:a,setText:()=>void 0,setElementText:()=>void 0,nextSibling:d,querySelector:()=>void 0,setScopeId:()=>void 0,cloneNode:()=>void 0,insertStaticContent:()=>void 0}};function It(){return Ve().__VUE_DEVTOOLS_GLOBAL_HOOK__}function Ve(){return typeof navigator<"u"&&typeof window<"u"?window:typeof globalThis<"u"?globalThis:{}}const Ut=typeof Proxy=="function",Ft="devtools-plugin:setup",Rt="plugin:settings:set";let W,pe;function Vt(){var e;return W!==void 0||(typeof window<"u"&&window.performance?(W=!0,pe=window.performance):typeof globalThis<"u"&&(!((e=globalThis.perf_hooks)===null||e===void 0)&&e.performance)?(W=!0,pe=globalThis.perf_hooks.performance):W=!1),W}function $t(){return Vt()?pe.now():Date.now()}class Wt{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 $t()}},n&&n.on(Rt,(i,a)=>{i===this.plugin.id&&this.fallbacks.setSettings(a)}),this.proxiedOn=new Proxy({},{get:(i,a)=>this.target?this.target.on[a]:(...d)=>{this.onQueue.push({method:a,args:d})}}),this.proxiedTarget=new Proxy({},{get:(i,a)=>this.target?this.target[a]:a==="on"?this.proxiedOn:Object.keys(this.fallbacks).includes(a)?(...d)=>(this.targetQueue.push({method:a,args:d,resolve:()=>{}}),this.fallbacks[a](...d)):(...d)=>new Promise(o=>{this.targetQueue.push({method:a,args:d,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 Nt(e,t){const n=e,r=Ve(),s=It(),l=Ut&&n.enableEarlyProxy;if(s&&(r.__VUE_DEVTOOLS_PLUGIN_API_AVAILABLE__||!l))s.emit(Ft,e,t);else{const i=l?new Wt(n,s):null;(r.__VUE_DEVTOOLS_PLUGINS__=r.__VUE_DEVTOOLS_PLUGINS__||[]).push({pluginDescriptor:n,setupFn:t,proxy:i}),i&&t(i.proxiedTarget)}}function Gt(e,t){const n=`▲ ■ ●${e}`;typeof $e=="function"?$e(n,t):console.log(n)}function $e(e,t){throw new Error(e+t)}const We=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=fe(e);return n>0&&t.tags.push({label:`${Lt(n)} KB`,textColor:15707189,backgroundColor:16775644,tooltip:"Memory usage"}),e.type.includes("Light")&&(t.tags.push({label:`${e.intensity}`,textColor:9738662,backgroundColor:16316922,tooltip:"Intensity"}),t.tags.push({label:`#${e.color.getHexString()}`,textColor:9738662,backgroundColor:16316922,tooltip:"Color"})),e.type.includes("Camera")&&(t.tags.push({label:`${e.fov}°`,textColor:9738662,backgroundColor:16316922,tooltip:"Field of view"}),t.tags.push({label:`x: ${Math.round(e.position.x)} y: ${Math.round(e.position.y)} z: ${Math.round(e.position.z)}`,textColor:9738662,backgroundColor:16316922,tooltip:"Position"})),t};function Ne(e,t,n=""){e.children.forEach(r=>{if(r.type==="HightlightMesh"||n&&!r.type.includes(n)&&!r.name.includes(n))return;const s=We(r);t.children.push(s),Ne(r,s,n)})}const zt=[],Q="tres:inspector",qt=p.reactive({sceneGraph:null});function Ht(e,t){Nt({id:"dev.esm.tres",label:"TresJS 🪐",logo:"https://raw.githubusercontent.com/Tresjs/tres/main/public/favicon.svg",packageName:"tresjs",homepage:"https://tresjs.org",componentStateTypes:zt,app:e},n=>{typeof n.now!="function"&&Gt("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:Q,label:"TresJS 🪐",icon:"account_tree",treeFilterPlaceholder:"Search instances"}),setInterval(()=>{n.sendInspectorTree(Q)},1e3),setInterval(()=>{n.notifyComponentUpdate()},5e3),n.on.getInspectorTree(l=>{if(l.inspectorId===Q){const i=We(t.scene.value);Ne(t.scene.value,i,l.filter),qt.sceneGraph=i,l.rootNodes=[i]}});let r=null,s=null;n.on.getInspectorState(l=>{var i;if(l.inspectorId===Q){const[a]=t.scene.value.getObjectsByProperty("uuid",l.nodeId);if(!a)return;if(s&&r&&r.parent&&s.remove(r),a.isMesh){const d=wt(a);a.add(d),r=d,s=a}l.state={object:[{key:"uuid",editable:!0,value:a.uuid},{key:"name",editable:!0,value:a.name},{key:"type",editable:!0,value:a.type},{key:"position",editable:!0,value:a.position},{key:"rotation",editable:!0,value:a.rotation},{key:"scale",editable:!0,value:a.scale},{key:"geometry",value:a.geometry},{key:"material",value:a.material},{key:"color",editable:!0,value:a.color},{key:"intensity",editable:!0,value:a.intensity},{key:"castShadow",editable:!0,value:a.castShadow},{key:"receiveShadow",editable:!0,value:a.receiveShadow},{key:"frustumCulled",editable:!0,value:a.frustumCulled},{key:"matrixAutoUpdate",editable:!0,value:a.matrixAutoUpdate},{key:"matrixWorldNeedsUpdate",editable:!0,value:a.matrixWorldNeedsUpdate},{key:"matrixWorld",value:a.matrixWorld},{key:"visible",editable:!0,value:a.visible}]},a.isScene&&(l.state.info={memory:fe(a),objects:a.children.length,calls:t.renderer.value.info.render.calls,triangles:t.renderer.value.info.render.triangles,points:t.renderer.value.info.render.points,lines:t.renderer.value.info.render.lines},l.state.programs=((i=t.renderer.value.info.programs)==null?void 0:i.map(d=>({key:d.name,value:{...d,vertexShader:d.vertexShader,attributes:d.getAttributes(),uniforms:d.getUniforms()}})))||[])}}),n.on.editInspectorState(l=>{l.inspectorId===Q&&yt(t.scene.value,l.nodeId,l.path,l.state.value)})})}const Yt=["data-scene","data-tres"],Ge=p.defineComponent({__name:"TresCanvas",props:{shadows:{type:Boolean,default:void 0},clearColor:{},toneMapping:{},shadowMapType:{},useLegacyLights:{type:Boolean,default:void 0},outputColorSpace:{},toneMappingExposure:{},renderMode:{default:"always"},camera:{},preset:{},windowSize:{type:Boolean,default:void 0},disableRender:{type:Boolean,default:void 0},context:{},precision:{},alpha:{type:Boolean,default:void 0},premultipliedAlpha:{type:Boolean},antialias:{type:Boolean,default:void 0},stencil:{type:Boolean,default:void 0},preserveDrawingBuffer:{type:Boolean,default:void 0},powerPreference:{},depth:{type:Boolean,default:void 0},logarithmicDepthBuffer:{type:Boolean,default:void 0},failIfMajorPerformanceCaveat:{type:Boolean,default:void 0}},emits:["render","click","double-click","context-menu","pointer-move","pointer-up","pointer-down","pointer-enter","pointer-leave","pointer-over","pointer-out","pointer-missed","wheel","ready"],setup(e,{expose:t,emit:n}){var k;const r=e,s=n,l=p.useSlots(),{logWarning:i}=I(),a=p.ref(),d=p.shallowRef(new y.Scene),o=(k=p.getCurrentInstance())==null?void 0:k.appContext.app;oe(ge);const v=g=>p.defineComponent({setup(){var b;const M=(b=p.getCurrentInstance())==null?void 0:b.appContext;return M&&(M.app=o),p.provide("useTres",g),p.provide("extend",oe),typeof window<"u"&&Ht(M==null?void 0:M.app,g),()=>p.h(p.Fragment,null,l!=null&&l.default?l.default():[])}}),m=g=>{const M=v(g),{render:b}=p.createRenderer(Et(g));b(p.h(M),d.value)},c=(g,M=!1)=>{te(g.scene.value),M&&(g.renderer.value.dispose(),g.renderer.value.renderLists.dispose(),g.renderer.value.forceContextLoss()),d.value.__tres={root:g},m(g)},w=p.computed(()=>r.disableRender),f=p.shallowRef(null);return t({context:f,dispose:()=>c(f.value,!0)}),p.onMounted(()=>{const g=a;f.value=Be({scene:d.value,canvas:g,windowSize:r.windowSize??!1,disableRender:w.value??!1,rendererOptions:r,emit:s}),Ee(d.value,f.value,s);const{registerCamera:M,camera:b,cameras:D,deregisterCamera:A}=f.value;m(f.value);const O=()=>{const C=new y.PerspectiveCamera(45,window.innerWidth/window.innerHeight,.1,1e3);C.position.set(3,3,3),C.lookAt(0,0,0),M(C);const u=p.watchEffect(()=>{D.value.length>=2&&(C.removeFromParent(),A(C),u==null||u())})};p.watch(()=>r.camera,(C,u)=>{C&&M(C),u&&(u.removeFromParent(),A(u))},{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."),O())}),p.onUnmounted(()=>{c(f.value)}),(g,M)=>(p.openBlock(),p.createElementBlock("canvas",{ref_key:"canvas",ref:a,"data-scene":d.value.uuid,class:p.normalizeClass(g.$attrs.class),"data-tres":`tresjs ${p.unref(et).version}`,style:p.normalizeStyle({display:"block",width:"100%",height:"100%",position:g.windowSize?"fixed":"relative",top:0,left:0,pointerEvents:"auto",touchAction:"none",...g.$attrs.style})},null,14,Yt))}}),Jt=["TresCanvas","TresLeches","TresScene"],Qt={template:{compilerOptions:{isCustomElement:e=>e.startsWith("Tres")&&!Jt.includes(e)||e==="primitive"}}},Kt={mounted:(e,t)=>{if(t.arg){console.log(`v-log:${t.arg}`,e[t.arg]);return}console.log("v-log",e)}};class ze extends y.Line{constructor(t,n){const r=[1,1,0,-1,1,0,-1,-1,0,1,-1,0,1,1,0],s=new y.BufferGeometry;s.setAttribute("position",new y.Float32BufferAttribute(r,3)),s.computeBoundingSphere();const l=new y.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 y.BufferGeometry;a.setAttribute("position",new y.Float32BufferAttribute(i,3)),a.computeBoundingSphere(),this.add(new y.Mesh(a,new y.MeshBasicMaterial({side:y.BackSide,fog:!1})))}updateMatrixWorld(){if(this.scale.set(.5*this.light.width,.5*this.light.height,1),this.color!==void 0)this.material.color.set(this.color),this.children[0].material.color.set(this.color);else{this.material.color.copy(this.light.color).multiplyScalar(this.light.intensity);const t=this.material.color,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:qe}=I();let ie,F;const Xt={DirectionalLight:y.DirectionalLightHelper,PointLight:y.PointLightHelper,SpotLight:y.SpotLightHelper,HemisphereLight:y.HemisphereLightHelper,RectAreaLight:ze},Zt={mounted:e=>{if(!e.isLight){qe(`${e.type} is not a light`);return}ie=Xt[e.type],e.parent.add(new ie(e,1,e.color.getHex()))},updated:e=>{F=e.parent.children.find(t=>t instanceof ie),!(F instanceof ze)&&F.update()},unmounted:e=>{if(!e.isLight){qe(`${e.type} is not a light`);return}F=e.parent.children.find(t=>t instanceof ie),F&&F.dispose&&F.dispose(),e.parent.remove(F)}},{logWarning:en}=I();let U=null;const tn={updated:(e,t)=>{var s;const n=bt(t);if(!n){en(`v-distance-to: problem with binding value: ${t.value}`);return}U&&(U.dispose(),e.parent.remove(U));const r=n.clone().sub(e.position);r.normalize(),U=new y.ArrowHelper(r,e.position,e.position.distanceTo(n),16776960),e.parent.add(U),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=>{U==null||U.dispose(),e.parent.remove(U)}},nn={install(e){e.component("TresCanvas",Ge)}};P.TresCanvas=Ge,P.catalogue=re,P.createRenderLoop=xe,P.default=nn,P.dispose=te,P.extend=oe,P.isProd=at,P.normalizeColor=Pe,P.normalizeVectorFlexibleParam=lt,P.onTresReady=xt,P.templateCompilerOptions=Qt,P.trasverseObjects=Te,P.useCamera=we,P.useLoader=kt,P.useLogger=I,P.useLoop=Bt,P.usePointerEventHandler=Ot,P.useRaycaster=ue,P.useRenderLoop=st,P.useRenderer=De,P.useSeek=At,P.useTexture=St,P.useTres=jt,P.useTresContext=J,P.useTresContextProvider=Be,P.useTresEventManager=Ee,P.vDistanceTo=tn,P.vLightHelper=Zt,P.vLog=Kt,Object.defineProperties(P,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
|
|
8
|
+
(function(C,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):(C=typeof globalThis<"u"?globalThis:C||self,d(C.tres={},C.Vue,C.Three,C.VueUseCore))})(this,function(C,d,v,M){"use strict";var yn=Object.defineProperty;var _n=(C,d,v)=>d in C?yn(C,d,{enumerable:!0,configurable:!0,writable:!0,value:v}):C[d]=v;var ye=(C,d,v)=>_n(C,typeof d!="symbol"?d+"":d,v);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(v),at={name:"@tresjs/core",type:"module",version:"4.2.1",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 ee(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 V(e){return e===Object(e)&&!ee(e)&&!G(e)}function F(e){return V(e)&&"isObject3D"in e&&!!e.isObject3D}function be(e){return V(e)&&"isCamera"in e&&!!e.isCamera}function ct(e){return V(e)&&"isBufferGeometry"in e&&!!e.isBufferGeometry}function ut(e){return V(e)&&"isMaterial"in e&&!!e.isMaterial}function ft(e){return V(e)&&"isFog"in e&&!!e.isFog}function dt(e){return V(e)&&"isScene"in e&&!!e.isScene}function te(e){return F(e)||ct(e)||ut(e)||ft(e)}function pt(e){return V(e)&&!!e.isPrimitive}const Ce=({sizes:e})=>{const t=d.ref([]),n=d.computed(()=>t.value[0]),r=i=>{const l=i instanceof v.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 v.PerspectiveCamera||mt(i))&&(i instanceof v.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 mt(e){return e.hasOwnProperty("isOrthographicCamera")&&e.isOrthographicCamera}const Me=M.createEventHook(),Pe=M.createEventHook(),de=M.createEventHook(),Q=new v.Clock;let ne=0,re=0;const{pause:ht,resume:Se,isActive:gt}=M.useRafFn(()=>{Me.trigger({delta:ne,elapsed:re,clock:Q}),Pe.trigger({delta:ne,elapsed:re,clock:Q}),de.trigger({delta:ne,elapsed:re,clock:Q})},{immediate:!1});de.on(()=>{ne=Q.getDelta(),re=Q.getElapsedTime()});let ke=!1;const vt=()=>(ke||(ke=!0,Se()),{onBeforeLoop:Me.on,onLoop:Pe.on,onAfterLoop:de.on,pause:ht,resume:Se,isActive:gt}),yt=!0,oe="[TresJS ▲ ■ ●] ";function $(){function e(...r){typeof r[0]=="string"?r[0]=oe+r[0]:r.unshift(oe),console.error(...r)}function t(...r){typeof r[0]=="string"?r[0]=oe+r[0]:r.unshift(oe),console.warn(...r)}function n(r,s){}return{logError:e,logWarning:t,logMessage:n}}function _t(e){return typeof e=="number"?[e,e,e]:e instanceof v.Vector3?[e.x,e.y,e.z]:e}function Ae(e){return e instanceof v.Color?e:Array.isArray(e)?new v.Color(...e):new v.Color(e)}class wt 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},bt=Pt("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 se(e){return e.replace(/-([a-z])/g,(t,n)=>n.toUpperCase())}const Ct=/\B([A-Z])/g;function Mt(e){return e.replace(Ct,"-$1").toLowerCase()}function Pt(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)},St=(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 kt(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 At=Array.isArray;function Lt(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 Ot(e){const t=new v.MeshBasicMaterial({color:11003607,transparent:!0,opacity:.2,depthTest:!1,side:v.DoubleSide});return new wt(e.geometry.clone(),t)}function Dt(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 v.Vector3(...t)),t}function jt(e){return"map"in e}function Te(e){jt(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 v.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 Tt(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 xt(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 Bt(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 Vn(e){}function It(e,t,n){var s;if(!G(e.setPixelRatio))return;let r=0;if(ee(n)&&n.length>=2){const[a,i]=n;r=v.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 Rt(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,_]of Object.entries(o))r.patchProp(l,u,l[u],_);n(e),r.insert(t,c);for(const u of a)r.insert(u,t);return!0}function Y(e){return pt(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&&Tt(n.__tres.objects,l=>l!==e),(s=e.__tres)!=null&&s.attach?Bt(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 Et=Number.parseInt(v.REVISION.replace("dev","")),ie={realistic:{shadows:!0,physicallyCorrectLights:!0,outputColorSpace:v.SRGBColorSpace,toneMapping:v.ACESFilmicToneMapping,toneMappingExposure:3,shadowMap:{enabled:!0,type:v.PCFSoftShadowMap}},flat:{toneMapping:v.NoToneMapping,toneMappingExposure:1}};function $e({canvas:e,options:t,contextParts:{sizes:n,render:r,invalidate:s,advance:a}}){const i=d.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)})),l=d.shallowRef(new v.WebGLRenderer(i.value));function c(){t.renderMode==="on-demand"&&s()}d.watch(i,()=>{l.value.dispose(),l.value=new v.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}=M.useDevicePixelRatio(),{logError:u}=$(),f=(()=>{const m=new v.WebGLRenderer,k={shadowMap:{enabled:m.shadowMap.enabled,type:m.shadowMap.type},toneMapping:m.toneMapping,toneMappingExposure:m.toneMappingExposure,outputColorSpace:m.outputColorSpace};return m.dispose(),k})(),b=M.toValue(t.renderMode);return b==="on-demand"&&s(),b==="manual"&&setTimeout(()=>{a()},100),d.watchEffect(()=>{const m=M.toValue(t.preset);m&&(m in ie||u(`Renderer Preset must be one of these: ${Object.keys(ie).join(", ")}`),Le(l.value,ie[m])),It(l.value,o.value,M.toValue(t.dpr)),b==="always"&&(r.frames.value=Math.max(1,r.frames.value));const k=(y,O)=>{const L=M.toValue(y),D=()=>{if(m)return De(ie[m],O)};if(L!==void 0)return L;const A=D();return A!==void 0?A:De(f,O)},h=(y,O)=>St(l.value,O,k(y,O));h(t.shadows,"shadowMap.enabled"),h(t.toneMapping??v.ACESFilmicToneMapping,"toneMapping"),h(t.shadowMapType,"shadowMap.type"),Et<150&&h(!t.useLegacyLights,"physicallyCorrectLights"),h(t.outputColorSpace,"outputColorSpace"),h(t.toneMappingExposure,"toneMappingExposure");const w=k(t.clearColor,"clearColor");w&&l.value.setClearColor(w?Ae(w):new v.Color(0))}),d.onUnmounted(()=>{l.value.dispose(),l.value.forceContextLoss()}),{renderer:l}}const $t=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 Ut(e,t,n,r,s){const{logError:a}=$(),i=new e;s&&s(i),n&&n(i);const c=(Array.isArray(t)?t:[t]).map(o=>new Promise((u,_)=>{i.load(o,f=>{const b=f;b.scene&&Object.assign(b,Ue(b.scene)),u(b)},r,f=>_(a("[useLoader] - Failed to load resource",f)))}));return $t(t)?await Promise.all(c):await c[0]}async function Vt(e,t){const n=new v.TextureLoader(t),r=s=>new Promise((a,i)=>{n.load(s,l=>a(l),()=>null,()=>{i(new Error("[useTextures] - Failed to load texture"))})});if(At(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:_}=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:_?await r(_):null}}}const Ve=(e,t)=>{const n=d.computed(()=>t.renderer.value.domElement),r=d.shallowRef([]),{x:s,y:a}=M.usePointer({target:n});let i=0;const{width:l,height:c,top:o,left:u}=M.useElementBounding(n),_=({x:g,y:j})=>{if(n.value)return{x:(g-u.value)/l.value*2-1,y:-((j-o.value)/c.value)*2+1}},f=({x:g,y:j})=>{if(t.camera.value)return t.raycaster.value.setFromCamera(new v.Vector2(g,j),t.camera.value),r.value=t.raycaster.value.intersectObjects(e.value,!0),r.value},b=g=>{const j=_({x:(g==null?void 0:g.clientX)??s.value,y:(g==null?void 0:g.clientY)??a.value});return j?f(j)||[]:[]},m=M.createEventHook(),k=M.createEventHook(),h=M.createEventHook(),w=M.createEventHook(),y=M.createEventHook(),O=M.createEventHook(),L=M.createEventHook(),D=M.createEventHook();function A(g){const j={};for(const z in g)typeof z!="function"&&(j[z]=g[z]);return j}const P=(g,j)=>{var rt,ot,st;const z=A(j),ue=new v.Vector3(j==null?void 0:j.clientX,j==null?void 0:j.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:j,delta:i,stopPropagating:!1})};let B;const x=g=>{b(g),P(h,g),B=g},p=()=>{B&&x(B)};let S,T,E;const N=g=>{var j;S=(j=r.value[0])==null?void 0:j.object,i=0,T=new v.Vector2((g==null?void 0:g.clientX)??s.value,(g==null?void 0:g.clientY)??a.value),P(y,g)};let I,R=!1;const K=g=>{var j,z,ue;g instanceof PointerEvent&&(r.value.length===0&&P(O,g),S===((j=r.value[0])==null?void 0:j.object)&&(E=new v.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?(P(m,g),I===((z=r.value[0])==null?void 0:z.object)?R=!0:(I=(ue=r.value[0])==null?void 0:ue.object,R=!1)):g.button===2&&P(L,g)),P(w,g))},et=g=>{R&&(P(k,g),I=void 0,R=!1)},tt=g=>P(h,g),nt=g=>P(D,g);return n.value.addEventListener("pointerup",K),n.value.addEventListener("pointerdown",N),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",K),n.value.removeEventListener("pointerdown",N),n.value.removeEventListener("pointermove",x),n.value.removeEventListener("pointerleave",tt),n.value.removeEventListener("dblclick",et),n.value.removeEventListener("wheel",nt))}),{intersects:r,onClick:g=>m.on(g).off,onDblClick:g=>k.on(g).off,onContextMenu:g=>L.on(g).off,onPointerMove:g=>h.on(g).off,onPointerUp:g=>w.on(g).off,onPointerDown:g=>y.on(g).off,onPointerMissed:g=>O.on(g).off,onWheel:g=>D.on(g).off,forceUpdate:p}};function Ft(){const{logWarning:e}=$();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){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 Wt(e){return(e/1024).toFixed(2)}const ae=d.ref({}),le=e=>Object.assign(ae.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=p=>{var S;return((S=p.__tres)==null?void 0:S.eventCount)>0},i=p=>{var S;return((S=p.children)==null?void 0:S.some(T=>i(T)))||a(p)},l=d.shallowRef(((x=r.value)==null?void 0:x.children).filter(i)||[]);function c(p,S){if(Array.isArray(p))for(const T of p)T(S);typeof p=="function"&&p(S)}function o(p,S){const T=[],E=()=>S.stopPropagating=!0;S.stopPropagation=E;for(const N of S==null?void 0:S.intersections){if(S.stopPropagating)return;S={...S,...N};const{object:I}=N;S.eventObject=I,c(I[p],S),T.push(I);let R=I.parent;for(;R!==null&&!S.stopPropagating&&!T.includes(R);)S.eventObject=R,c(R[p],S),T.push(R),R=R.parent;const K=Mt(p.slice(2));n(K,{intersection:N,event:S})}}const{onClick:u,onDblClick:_,onContextMenu:f,onPointerMove:b,onPointerDown:m,onPointerUp:k,onPointerMissed:h,onWheel:w,forceUpdate:y}=Ve(l,t);k(p=>o("onPointerUp",p)),m(p=>o("onPointerDown",p)),u(p=>o("onClick",p)),_(p=>o("onDoubleClick",p)),f(p=>o("onContextMenu",p)),w(p=>o("onWheel",p));let O=[];b(p=>{const S=p.intersections.map(({object:E})=>E),T=p.intersections;O.forEach(({object:E})=>{S.includes(E)||(p.intersections=O,o("onPointerLeave",p),o("onPointerOut",p))}),p.intersections=T,p.intersections.forEach(({object:E})=>{O.includes(E)||(o("onPointerEnter",p),o("onPointerOver",p))}),o("onPointerMove",p),O=p.intersections});const L=[];h(p=>{const S=()=>p.stopPropagating=!0;p.stopPropagation=S,L.forEach(T=>{p.stopPropagating||(p.eventObject=T,c(T.onPointerMissed,p))}),n("pointer-missed",{event:p})});function D(p){te(p)&&F(p)&&l.value.push(p)}function A(p){if(te(p)&&F(p)){const S=l.value.indexOf(p);S>-1&&l.value.splice(S,1)}}function P(p){te(p)&&F(p)&&p.onPointerMissed&&L.push(p)}function B(p){if(te(p)&&F(p)){const S=L.indexOf(p);S>-1&&L.splice(S,1)}}return t.eventManager={forceUpdate:y,registerObject:D,deregisterObject:A,registerPointerMissedObject:P,deregisterPointerMissedObject:B},{forceUpdate:y,registerObject:D,deregisterObject:A,registerPointerMissedObject:P,deregisterPointerMissedObject:B}}function Nt(e,t,n=10){const r=M.toValue(e)?M.useWindowSize():M.useElementSize(d.computed(()=>M.toValue(t).parentElement)),s=d.readonly(M.refDebounced(r.width,n)),a=d.readonly(M.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,_)=>{const f=u[1].priority-_[1].priority;return f===0?u[1].addI-_[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 _=()=>a(o);return M.tryOnScopeDispose(_),r=!0,{off:_}},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 v.Clock(!1),s=d.ref(r.running),a=d.ref(!1);let i;const l=v.MathUtils.generateUUID();let c=null;const o=ge(),u=ge(),_=ge();A();let f={};function b(P){f=P}function m(P,B,x=0){switch(B){case"before":return o.on(P,x);case"render":return c||(c=P),u.dispose(),u.on(P);case"after":return _.on(P,x)}}function k(){t&&(t=!1,A(),D())}function h(){t=!0,A(),cancelAnimationFrame(i)}function w(){n=!1,A()}function y(){n=!0,A()}function O(){a.value=!0}function L(){a.value=!1}function D(){if(!e){i=requestAnimationFrame(D);return}const P=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},p={delta:P,elapsed:B,clock:r,...x};s.value&&o.trigger(p),a.value||(u.count?u.trigger(p):c&&c(p)),s.value&&_.trigger(p),i=requestAnimationFrame(D)}function A(){const P=!t&&!n;r.running!==P&&(r.running?r.stop():r.start()),s.value=r.running}return{loopId:l,register:(P,B,x)=>m(P,B,x),start:k,stop:h,pause:y,resume:w,pauseRender:O,resumeRender:L,isRenderPaused:a,isActive:s,setContext:b,setReady:P=>e=P}}function zt(e,t,n=100){n=n<=0?100:n;const r=M.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,...b)=>{f(...b)};return{on:f=>{if(a)return u(f,t),{off:()=>{}};{const b=r.on(f);return s.add(b.off),r.on(f)}},off:r.off,trigger:r.trigger,cancel:o}}const X=new WeakMap;function Ne(e){if(e=e||H(),X.has(e))return X.get(e);const t=100,n=Date.now(),a=zt(()=>{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 X.set(e,a),a}function Gt(e){const t=H();if(t)return X.has(t)?X.get(t).on(e):Ne(t).on(e)}function ze({scene:e,canvas:t,windowSize:n,disableRender:r,rendererOptions:s,emit:a}){const{logWarning:i}=$(),l=d.shallowRef(e),c=Nt(n,t),{camera:o,cameras:u,registerCamera:_,deregisterCamera:f,setCameraActive:b}=Ce({sizes:c,scene:e}),m={mode:d.ref(s.renderMode||"always"),priority:d.ref(0),frames:d.ref(0),maxFrames:60,canBeInvalidated:d.computed(()=>m.mode.value==="on-demand"&&m.frames.value===0)};function k(I=1){s.renderMode==="on-demand"?m.frames.value=Math.min(m.maxFrames,m.frames.value+I):i("`invalidate` can only be used when `renderMode` is set to `on-demand`")}function h(){s.renderMode==="manual"?m.frames.value=1:i("`advance` can only be used when `renderMode` is set to `manual`")}const{renderer:w}=$e({scene:e,canvas:t,options:s,emit:a,contextParts:{sizes:c,camera:o,render:m,invalidate:k,advance:h},disableRender:r}),y={sizes:c,scene:l,camera:o,cameras:d.readonly(u),renderer:w,raycaster:d.shallowRef(new v.Raycaster),controls:d.ref(null),perf:{maxFrames:160,fps:{value:0,accumulator:[]},memory:{currentMem:0,allocatedMem:0,accumulator:[]}},render:m,advance:h,extend:le,invalidate:k,registerCamera:_,setCameraActive:b,deregisterCamera:f,loop:We()};d.provide("useTres",y),y.scene.value.__tres={root:y},y.loop.register(()=>{o.value&&m.frames.value>0&&(w.value.render(e,o.value),a("render",y.renderer.value)),m.priority.value=0,m.mode.value==="always"?m.frames.value=1:m.frames.value=Math.max(0,m.frames.value-1)},"render");const{on:O,cancel:L}=Ne(y);y.loop.setReady(!1),y.loop.start(),O(()=>{a("ready",y),y.loop.setReady(!0),Fe(e,y,a)}),d.onUnmounted(()=>{L(),y.loop.stop()});const D=100,A=M.useFps({every:D}),{isSupported:P,memory:B}=M.useMemory({interval:D}),x=160;let p=performance.now();const S=({timestamp:I})=>{y.scene.value&&(y.perf.memory.allocatedMem=he(y.scene.value)),I-p>=D&&(p=I,y.perf.fps.accumulator.push(A.value),y.perf.fps.accumulator.length>x&&y.perf.fps.accumulator.shift(),y.perf.fps.value=A.value,P.value&&B.value&&(y.perf.memory.accumulator.push(B.value.usedJSHeapSize/1024/1024),y.perf.memory.accumulator.length>x&&y.perf.memory.accumulator.shift(),y.perf.memory.currentMem=y.perf.memory.accumulator.reduce((R,K)=>R+K,0)/y.perf.memory.accumulator.length))};let T=0;const E=1,{pause:N}=M.useRafFn(({delta:I})=>{window.__TRES__DEVTOOLS__&&(S({timestamp:performance.now()}),T+=I,T>=E&&(window.__TRES__DEVTOOLS__.cb(y),T=0))},{immediate:!0});return d.onUnmounted(()=>{N()}),y}function H(){const e=d.inject("useTres");if(!e)throw new Error("useTresContext must be used together with useTresContextProvider");return e}const qt=H;function Yt(){const{camera:e,scene:t,renderer:n,loop:r,raycaster:s,controls:a,invalidate:i,advance:l}=H();r.setContext({camera:e,scene:t,renderer:n,raycaster:s,controls:a,invalidate:i,advance:l});function c(_,f=0){return r.register(_,"before",f)}function o(_){return r.register(_,"render")}function u(_,f=0){return r.register(_,"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 Jt(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}=$(),qe=["onClick","onContextMenu","onPointerMove","onPointerEnter","onPointerLeave","onPointerOver","onPointerOut","onDoubleClick","onPointerDown","onPointerUp","onPointerCancel","onPointerMissed","onLostPointerCapture","onWheel"],Kt=e=>{const t=e.scene.value;function n(o,u,_,f){if(f||(f={}),f.args||(f.args=[]),o==="template"||bt(o))return null;let b=o.replace("Tres",""),m;if(o==="primitive"){(!V(f.object)||d.isRef(f.object))&&Ge("Tres primitives need an 'object' prop, whose value is an object or shallowRef<object>"),b=f.object.type;const k={};m=Jt(f.object,{object:w=>w,isPrimitive:()=>!0,__tres:()=>k},{object:(w,y,O,L)=>{Rt(w,O,L,{patchProp:a,remove:s,insert:r},e)},__tres:w=>{Object.assign(k,w)}})}else{const k=ae.value[b];k||Ge(`${b} is not defined on the THREE namespace. Use extend to add it to the catalog.`),m=new k(...f.args)}return m?(m.isCamera&&(f!=null&&f.position||m.position.set(3,3,3),f!=null&&f.lookAt||m.lookAt(0,0,0)),m=q(m,{...m.__tres,type:b,memoizedProps:f,eventCount:0,primitive:o==="primitive",attach:f.attach},e),m):null}function r(o,u){var b,m,k;if(!o)return;u=u||t;const _=o.__tres?o:q(o,{},e),f=u.__tres?u:q(u,{},e);o=Y(_),u=Y(f),o.__tres&&((b=o.__tres)==null?void 0:b.eventCount)>0&&((m=e.eventManager)==null||m.registerObject(o)),e.registerCamera(o),(k=e.eventManager)==null||k.registerPointerMissedObject(o),_.__tres.attach?xt(f,_,_.__tres.attach):F(o)&&F(f)&&(f.add(o),o.dispatchEvent({type:"added"})),_.__tres.parent=f,f.__tres.objects&&!f.__tres.objects.includes(_)&&f.__tres.objects.push(_)}function s(o,u){var m,k,h,w;if(!o)return;o!=null&&o.__tres&&((m=o.__tres)==null?void 0:m.eventCount)>0&&((k=e.eventManager)==null||k.deregisterObject(o)),u=fe(u)?"default":u;const _=(h=o.__tres)==null?void 0:h.dispose;fe(_)||(_===null?u=!1:u=_);const f=(w=o.__tres)==null?void 0:w.primitive,b=u==="default"?!f:!!u;if(o.__tres&&"objects"in o.__tres&&[...o.__tres.objects].forEach(y=>s(y,u)),b&&o.children&&[...o.children].forEach(y=>s(y,u)),Re(o,e),Ee(o,e),b&&!dt(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,_,f){var y,O;if(!o)return;let b=o,m=u;if(o.__tres&&(o.__tres.memoizedProps[u]=f),u==="attach"){const L=((y=o.__tres)==null?void 0:y.parent)||o.parent;s(o),q(o,{attach:f},e),L&&r(o,L);return}if(u==="dispose"){o.__tres||(o=q(o,{},e)),o.__tres.dispose=f;return}if(F(o)&&m==="blocks-pointer-events"){f||f===""?o[m]=f:delete o[m];return}qe.includes(u)&&o.__tres&&(o.__tres.eventCount+=1);let k=se(m),h=b==null?void 0:b[k];if(m==="args"){const L=o,D=_??[],A=f??[],P=((O=o.__tres)==null?void 0:O.type)||o.type;P&&D.length&&!kt(D,A)&&(b=Object.assign(L,new ae.value[P](...f)));return}if(b.type==="BufferGeometry"){if(m==="args")return;b.setAttribute(se(m),new v.BufferAttribute(...f));return}if(m.includes("-")&&h===void 0){const L=m.split("-");h=L.reduce((D,A)=>D[se(A)],b),m=L.pop(),k=m,h!=null&&h.set||(b=L.reduce((D,A)=>D[se(A)],b))}let w=f;if(w===""&&(w=!0),G(h)){qe.includes(u)||(ee(w)?o[k](...w):o[k](w)),k.startsWith("on")&&G(w)&&(b[k]=w);return}!(h!=null&&h.set)&&!G(h)?b[k]=w:h.constructor===w.constructor&&(h!=null&&h.copy)?h==null||h.copy(w):ee(w)?h.set(...w):!h.isColor&&h.setScalar?h.setScalar(w):h.set(w),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 v.Object3D,{type:"Comment"},e);return u.name=o,u}function c(o){var b;const u=i(o),_=((b=u==null?void 0:u.__tres)==null?void 0:b.objects)||[],f=_.indexOf(o);return f<0||f>=_.length-1?null:_[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 Qt(){return Ye().__VUE_DEVTOOLS_GLOBAL_HOOK__}function Ye(){return typeof navigator<"u"&&typeof window<"u"?window:typeof globalThis<"u"?globalThis:{}}const Xt=typeof Proxy=="function",Ht="devtools-plugin:setup",Zt="plugin:settings:set";let J,ve;function en(){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 tn(){return en()?ve.now():Date.now()}class nn{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 tn()}},n&&n.on(Zt,(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 rn(e,t){const n=e,r=Ye(),s=Qt(),a=Xt&&n.enableEarlyProxy;if(s&&(r.__VUE_DEVTOOLS_PLUGIN_API_AVAILABLE__||!a))s.emit(Ht,e,t);else{const i=a?new nn(n,s):null;(r.__VUE_DEVTOOLS_PLUGINS__=r.__VUE_DEVTOOLS_PLUGINS__||[]).push({pluginDescriptor:n,setupFn:t,proxy:i}),i&&t(i.proxiedTarget)}}function on(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:`${Wt(n)} KB`,textColor:15707189,backgroundColor:16775644,tooltip:"Memory usage"}),e.type.includes("Light")&&(t.tags.push({label:`${e.intensity}`,textColor:9738662,backgroundColor:16316922,tooltip:"Intensity"}),t.tags.push({label:`#${e.color.getHexString()}`,textColor:9738662,backgroundColor:16316922,tooltip:"Color"})),e.type.includes("Camera")&&(t.tags.push({label:`${e.fov}°`,textColor:9738662,backgroundColor:16316922,tooltip:"Field of view"}),t.tags.push({label:`x: ${Math.round(e.position.x)} y: ${Math.round(e.position.y)} z: ${Math.round(e.position.z)}`,textColor:9738662,backgroundColor:16316922,tooltip:"Position"})),t};function 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 sn=[],Z="tres:inspector",an=d.reactive({sceneGraph:null});function ln(e,t){rn({id:"dev.esm.tres",label:"TresJS 🪐",logo:"https://raw.githubusercontent.com/Tresjs/tres/main/public/favicon.svg",packageName:"tresjs",homepage:"https://tresjs.org",componentStateTypes:sn,app:e},n=>{typeof n.now!="function"&&on("You seem to be using an outdated version of Vue Devtools. Are you still using the Beta release instead of the stable one? You can find the links at https://devtools.vuejs.org/guide/installation.html."),n.addInspector({id:Z,label:"TresJS 🪐",icon:"account_tree",treeFilterPlaceholder:"Search instances"}),setInterval(()=>{n.sendInspectorTree(Z)},1e3),setInterval(()=>{n.notifyComponentUpdate()},5e3),n.on.getInspectorTree(a=>{if(a.inspectorId===Z){const i=Ke(t.scene.value);Qe(t.scene.value,i,a.filter),an.sceneGraph=i,a.rootNodes=[i]}});let r=null,s=null;n.on.getInspectorState(a=>{var i;if(a.inspectorId===Z){const[l]=t.scene.value.getObjectsByProperty("uuid",a.nodeId);if(!l)return;if(s&&r&&r.parent&&s.remove(r),l.isMesh){const c=Ot(l);l.add(c),r=c,s=l}a.state={object:Object.entries(l).map(([c,o])=>({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===Z&&Lt(t.scene.value,a.nodeId,a.path,a.state.value)})})}const cn=["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 k;const r=e,s=n,a=d.useSlots(),{logWarning:i}=$(),l=d.ref(),c=d.shallowRef(new v.Scene),o=(k=d.getCurrentInstance())==null?void 0:k.appContext.app;le(_e);const u=h=>d.defineComponent({setup(){var y;const w=(y=d.getCurrentInstance())==null?void 0:y.appContext;return w&&(w.app=o),d.provide("useTres",h),d.provide("extend",le),typeof window<"u"&&ln(w==null?void 0:w.app,h),()=>d.h(d.Fragment,null,a!=null&&a.default?a.default():[])}}),_=h=>{const w=u(h),{render:y}=d.createRenderer(Kt(h));y(d.h(w),c.value)},f=(h,w=!1)=>{pe(h.scene.value),w&&(h.renderer.value.dispose(),h.renderer.value.renderLists.dispose(),h.renderer.value.forceContextLoss()),c.value.__tres={root:h},_(h)},b=d.computed(()=>r.disableRender),m=d.shallowRef(null);return t({context:m,dispose:()=>f(m.value,!0)}),d.onMounted(()=>{const h=l;m.value=ze({scene:c.value,canvas:h,windowSize:r.windowSize??!1,disableRender:b.value??!1,rendererOptions:r,emit:s});const{registerCamera:w,camera:y,cameras:O,deregisterCamera:L}=m.value;_(m.value);const D=()=>{const A=new v.PerspectiveCamera(45,window.innerWidth/window.innerHeight,.1,1e3);A.position.set(3,3,3),A.lookAt(0,0,0),w(A);const P=d.watchEffect(()=>{O.value.length>=2&&(A.removeFromParent(),L(A),P==null||P())})};d.watch(()=>r.camera,(A,P)=>{A&&w(A),P&&(P.removeFromParent(),L(P))},{immediate:!0}),y.value||(i("No camera found. Creating a default perspective camera. To have full control over a camera, please add one to the scene."),D())}),d.onUnmounted(()=>{f(m.value)}),(h,w)=>(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,cn))}}),un=["TresCanvas","TresLeches","TresScene"],fn={template:{compilerOptions:{isCustomElement:e=>e.startsWith("Tres")&&!un.includes(e)||e==="primitive"}}},dn={mounted:(e,t)=>{if(t.arg){console.log(`v-log:${t.arg}`,e[t.arg]);return}console.log("v-log",e)}};class He extends v.Line{constructor(t,n){const r=[1,1,0,-1,1,0,-1,-1,0,1,-1,0,1,1,0],s=new v.BufferGeometry;s.setAttribute("position",new v.Float32BufferAttribute(r,3)),s.computeBoundingSphere();const a=new v.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 v.BufferGeometry;l.setAttribute("position",new v.Float32BufferAttribute(i,3)),l.computeBoundingSphere(),this.add(new v.Mesh(l,new v.MeshBasicMaterial({side:v.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}=$();let ce,W;const pn={DirectionalLight:v.DirectionalLightHelper,PointLight:v.PointLightHelper,SpotLight:v.SpotLightHelper,HemisphereLight:v.HemisphereLightHelper,RectAreaLight:He},mn={mounted:e=>{if(!e.isLight){Ze(`${e.type} is not a light`);return}ce=pn[e.type],e.parent.add(new ce(e,1,e.color.getHex()))},updated:e=>{W=e.parent.children.find(t=>t instanceof ce),!(W instanceof He)&&W.update()},unmounted:e=>{if(!e.isLight){Ze(`${e.type} is not a light`);return}W=e.parent.children.find(t=>t instanceof ce),W&&W.dispose&&W.dispose(),e.parent.remove(W)}},{logWarning:hn}=$();let U=null;const gn={updated:(e,t)=>{var s;const n=Dt(t);if(!n){hn(`v-distance-to: problem with binding value: ${t.value}`);return}U&&(U.dispose(),e.parent.remove(U));const r=n.clone().sub(e.position);r.normalize(),U=new v.ArrowHelper(r,e.position,e.position.distanceTo(n),16776960),e.parent.add(U),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=>{U==null||U.dispose(),e.parent.remove(U)}},vn={install(e){e.component("TresCanvas",Xe)}};C.TresCanvas=Xe,C.catalogue=ae,C.createRenderLoop=We,C.default=vn,C.dispose=pe,C.extend=le,C.isProd=yt,C.normalizeColor=Ae,C.normalizeVectorFlexibleParam=_t,C.onTresReady=Gt,C.templateCompilerOptions=fn,C.trasverseObjects=Ue,C.useCamera=Ce,C.useLoader=Ut,C.useLogger=$,C.useLoop=Yt,C.useRaycaster=Ve,C.useRenderLoop=vt,C.useRenderer=$e,C.useSeek=Ft,C.useTexture=Vt,C.useTres=qt,C.useTresContext=H,C.useTresContextProvider=ze,C.useTresEventManager=Fe,C.vDistanceTo=gn,C.vLightHelper=mn,C.vLog=dn,Object.defineProperties(C,{__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.1
|
|
4
|
+
"version": "4.2.1",
|
|
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/)",
|
|
@@ -68,24 +68,24 @@
|
|
|
68
68
|
},
|
|
69
69
|
"dependencies": {
|
|
70
70
|
"@alvarosabu/utils": "^3.2.0",
|
|
71
|
-
"@vue/devtools-api": "^6.6.
|
|
72
|
-
"@vueuse/core": "^10.
|
|
71
|
+
"@vue/devtools-api": "^6.6.3",
|
|
72
|
+
"@vueuse/core": "^10.11.0"
|
|
73
73
|
},
|
|
74
74
|
"devDependencies": {
|
|
75
75
|
"@release-it/conventional-changelog": "^8.0.1",
|
|
76
|
-
"@stackblitz/sdk": "^1.
|
|
76
|
+
"@stackblitz/sdk": "^1.11.0",
|
|
77
77
|
"@tresjs/cientos": "3.9.0",
|
|
78
78
|
"@tresjs/eslint-config": "^1.1.0",
|
|
79
|
-
"@types/three": "^0.
|
|
80
|
-
"@typescript-eslint/eslint-plugin": "^7.
|
|
81
|
-
"@typescript-eslint/parser": "^7.
|
|
79
|
+
"@types/three": "^0.166.0",
|
|
80
|
+
"@typescript-eslint/eslint-plugin": "^7.16.0",
|
|
81
|
+
"@typescript-eslint/parser": "^7.16.0",
|
|
82
82
|
"@vitejs/plugin-vue": "^5.0.5",
|
|
83
83
|
"@vitest/coverage-c8": "^0.33.0",
|
|
84
|
-
"@vitest/coverage-v8": "^
|
|
85
|
-
"@vitest/ui": "^
|
|
84
|
+
"@vitest/coverage-v8": "^2.0.2",
|
|
85
|
+
"@vitest/ui": "^2.0.2",
|
|
86
86
|
"@vue/test-utils": "^2.4.6",
|
|
87
|
-
"eslint": "^9.
|
|
88
|
-
"eslint-plugin-vue": "^9.
|
|
87
|
+
"eslint": "^9.6.0",
|
|
88
|
+
"eslint-plugin-vue": "^9.27.0",
|
|
89
89
|
"esno": "^4.7.0",
|
|
90
90
|
"gsap": "^3.12.5",
|
|
91
91
|
"husky": "^9.0.11",
|
|
@@ -93,24 +93,24 @@
|
|
|
93
93
|
"kolorist": "^1.8.0",
|
|
94
94
|
"ohmyfetch": "^0.4.21",
|
|
95
95
|
"pathe": "^1.1.2",
|
|
96
|
-
"release-it": "^17.
|
|
96
|
+
"release-it": "^17.5.0",
|
|
97
97
|
"rollup-plugin-analyzer": "^4.0.0",
|
|
98
98
|
"rollup-plugin-copy": "^3.5.0",
|
|
99
99
|
"rollup-plugin-visualizer": "^5.12.0",
|
|
100
100
|
"sponsorkit": "^0.14.6",
|
|
101
|
-
"three": "^0.
|
|
102
|
-
"unocss": "^0.
|
|
103
|
-
"unplugin": "^1.
|
|
104
|
-
"unplugin-vue-components": "^0.27.
|
|
105
|
-
"vite": "^5.
|
|
101
|
+
"three": "^0.166.1",
|
|
102
|
+
"unocss": "^0.61.3",
|
|
103
|
+
"unplugin": "^1.11.0",
|
|
104
|
+
"unplugin-vue-components": "^0.27.2",
|
|
105
|
+
"vite": "^5.3.3",
|
|
106
106
|
"vite-plugin-banner": "^0.7.1",
|
|
107
107
|
"vite-plugin-dts": "3.9.1",
|
|
108
108
|
"vite-plugin-inspect": "^0.8.4",
|
|
109
109
|
"vite-plugin-require-transform": "^1.0.21",
|
|
110
110
|
"vite-svg-loader": "^5.1.0",
|
|
111
|
-
"vitepress": "1.
|
|
112
|
-
"vitest": "^
|
|
113
|
-
"vue": "^3.4.
|
|
111
|
+
"vitepress": "1.3.0",
|
|
112
|
+
"vitest": "^2.0.2",
|
|
113
|
+
"vue": "^3.4.31",
|
|
114
114
|
"vue-demi": "^0.14.8"
|
|
115
115
|
}
|
|
116
116
|
}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { Intersection, Object3D, Object3DEventMap } from 'three';
|
|
2
|
-
import { TresObject } from 'src/types';
|
|
3
|
-
import { TresContext } from '../useTresContextProvider';
|
|
4
|
-
|
|
5
|
-
type CallbackFn = (intersection: Intersection<Object3D<Object3DEventMap>>, event: PointerEvent) => void;
|
|
6
|
-
type CallbackFnPointerLeave = (object: Object3D, event: PointerEvent) => void;
|
|
7
|
-
export interface EventProps {
|
|
8
|
-
onClick?: CallbackFn;
|
|
9
|
-
onPointerEnter?: CallbackFn;
|
|
10
|
-
onPointerMove?: CallbackFn;
|
|
11
|
-
onPointerLeave?: CallbackFnPointerLeave;
|
|
12
|
-
}
|
|
13
|
-
export declare const usePointerEventHandler: (ctx: TresContext) => {
|
|
14
|
-
registerObject: (object: TresObject & EventProps) => void;
|
|
15
|
-
deregisterObject: (object: TresObject) => void;
|
|
16
|
-
registerBlockingObject: (object: TresObject) => void;
|
|
17
|
-
deregisterBlockingObject: (object: TresObject) => void;
|
|
18
|
-
};
|
|
19
|
-
export {};
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import { TresContext } from '../composables/useTresContextProvider';
|
|
2
|
-
import { LocalState, TresInstance, TresObject } from '../types';
|
|
3
|
-
|
|
4
|
-
export declare function prepareTresInstance<T extends TresObject>(obj: T, state: Partial<LocalState>, context: TresContext): TresInstance;
|
|
5
|
-
export declare function invalidateInstance(instance: TresObject): void;
|
|
6
|
-
export declare function noop(fn: string): any;
|