@tresjs/core 3.6.0 → 4.0.0-next.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -6
- package/dist/components/TresCanvas.vue.d.ts +4 -3
- package/dist/composables/useRenderer/index.d.ts +1 -1
- package/dist/devtools/highlight.d.ts +7 -0
- package/dist/devtools/index.d.ts +1 -0
- package/dist/devtools/plugin.d.ts +15 -0
- package/dist/devtools/utils.d.ts +7 -0
- package/dist/tres.js +768 -427
- package/dist/tres.umd.cjs +2 -2
- package/dist/types/index.d.ts +1 -1
- package/dist/utils/index.d.ts +7 -0
- package/package.json +1 -1
package/dist/tres.umd.cjs
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* name: @tresjs/core
|
|
3
|
-
* version:
|
|
3
|
+
* version: v4.0.0-next.0
|
|
4
4
|
* (c) 2023
|
|
5
5
|
* description: Declarative ThreeJS using Vue Components
|
|
6
6
|
* author: Alvaro Saburido <hola@alvarosaburido.dev> (https://github.com/alvarosabu/)
|
|
7
7
|
*/
|
|
8
|
-
(function(h,u){typeof exports=="object"&&typeof module<"u"?u(exports,require("vue"),require("three"),require("@vueuse/core")):typeof define=="function"&&define.amd?define(["exports","vue","three","@vueuse/core"],u):(h=typeof globalThis<"u"?globalThis:h||self,u(h.tres={},h.Vue,h.Three,h.VueUseCore))})(this,function(h,u,M,v){"use strict";function se(e){const a=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const t in e)if(t!=="default"){const r=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(a,t,r.get?r:{enumerable:!0,get:()=>e[t]})}}return a.default=e,Object.freeze(a)}const ie=se(M),G=({sizes:e,scene:a})=>{const t=u.ref([]),r=u.computed(()=>t.value[0]),n=(s,c=!1)=>{t.value.some(({uuid:i})=>i===s.uuid)||(c?f(s):t.value.push(s))},o=s=>{t.value=t.value.filter(({uuid:c})=>c!==s.uuid)},f=s=>{const c=s instanceof M.Camera?s:t.value.find(p=>p.uuid===s);if(!c)return;const i=t.value.filter(({uuid:p})=>p!==c.uuid);t.value=[c,...i]};return u.watchEffect(()=>{e.aspectRatio.value&&t.value.forEach(s=>{s instanceof M.PerspectiveCamera&&(s.aspect=e.aspectRatio.value),(s instanceof M.PerspectiveCamera||s instanceof M.OrthographicCamera)&&s.updateProjectionMatrix()})}),a.userData.tres__registerCamera=n,a.userData.tres__deregisterCamera=o,u.onUnmounted(()=>{t.value=[]}),{camera:r,cameras:t,registerCamera:n,deregisterCamera:o,setCameraActive:f}},I=v.createEventHook(),W=v.createEventHook(),z=v.createEventHook(),E=new M.Clock;let B=0,T=0;const{pause:le,resume:ue,isActive:ce}=v.useRafFn(()=>{I.trigger({delta:B,elapsed:T,clock:E}),W.trigger({delta:B,elapsed:T,clock:E}),z.trigger({delta:B,elapsed:T,clock:E})},{immediate:!1});z.on(()=>{B=E.getDelta(),T=E.getElapsedTime()});const N=()=>({onBeforeLoop:I.on,onLoop:W.on,onAfterLoop:z.on,pause:le,resume:ue,isActive:ce}),fe=!0,U="[TresJS ▲ ■ ●] ";function S(){function e(r,n){console.error(`${U} ${r}`,n||"")}function a(r){console.warn(`${U} ${r}`)}function t(r,n){}return{logError:e,logWarning:a,logMessage:t}}function me(e){return typeof e=="number"?[e,e,e]:e instanceof M.Vector3?[e.x,e.y,e.z]:e}function q(e){return e instanceof M.Color?e:Array.isArray(e)?new M.Color(...e):new M.Color(e)}const Y=(e,a)=>{for(const t of Object.keys(a))a[t]instanceof Object&&Object.assign(a[t],Y(e[t],a[t]));return Object.assign(e||{},a),e},de=pe("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 H(e){return e&&e.nodeType===1}function x(e){return e.replace(/-([a-z])/g,(a,t)=>t.toUpperCase())}function pe(e,a){const t=Object.create(null),r=e.split(",");for(let n=0;n<r.length;n++)t[r[n]]=!0;return a?n=>!!t[n.toLowerCase()]:n=>!!t[n]}const ge=(e,a)=>{const t=new Set,r=[];for(const n of e){const o=a(n);t.has(o)||(t.add(o),r.push(n))}return r},J=(e,a)=>{if(!a)return;const t=Array.isArray(a)?a:a.match(/([^[.\]])+/g);return t==null?void 0:t.reduce((r,n)=>r&&r[n],e)},ve=(e,a,t)=>{const r=Array.isArray(a)?a:a.match(/([^[.\]])+/g);r&&r.reduce((n,o,f)=>(n[o]===void 0&&(n[o]={}),f===r.length-1&&(n[o]=t),n[o]),e)};function K(e,a){if(H(e)&&H(a)){const n=e.attributes,o=a.attributes;return n.length!==o.length?!1:Array.from(n).every(({name:f,value:s})=>a.getAttribute(f)===s)}if(e===a)return!0;if(e===null||typeof e!="object"||a===null||typeof a!="object")return!1;const t=Object.keys(e),r=Object.keys(a);if(t.length!==r.length)return!1;for(const n of t)if(!r.includes(n)||!K(e[n],a[n]))return!1;return!0}function ye(e,a){if(!Array.isArray(e)||!Array.isArray(a)||e.length!==a.length)return!1;for(let t=0;t<e.length;t++)if(!K(e[t],a[t]))return!1;return!0}const we=Array.isArray,Ce=Number.parseInt(M.REVISION.replace("dev","")),V={realistic:{shadows:!0,physicallyCorrectLights:!0,outputColorSpace:M.SRGBColorSpace,toneMapping:M.ACESFilmicToneMapping,toneMappingExposure:3,shadowMap:{enabled:!0,type:M.PCFSoftShadowMap}}};function X({scene:e,canvas:a,options:t,disableRender:r,contextParts:{sizes:n,camera:o}}){const f=u.computed(()=>({alpha:v.toValue(t.alpha),depth:v.toValue(t.depth),canvas:v.unrefElement(a),context:v.toValue(t.context),stencil:v.toValue(t.stencil),antialias:v.toValue(t.antialias)===void 0?!0:v.toValue(t.antialias),precision:v.toValue(t.precision),powerPreference:v.toValue(t.powerPreference),premultipliedAlpha:v.toValue(t.premultipliedAlpha),preserveDrawingBuffer:v.toValue(t.preserveDrawingBuffer),logarithmicDepthBuffer:v.toValue(t.logarithmicDepthBuffer),failIfMajorPerformanceCaveat:v.toValue(t.failIfMajorPerformanceCaveat)})),s=u.shallowRef(new M.WebGLRenderer(f.value));u.watch(f,()=>{s.value.dispose(),s.value=new M.WebGLRenderer(f.value)}),u.watchEffect(()=>{s.value.setSize(n.width.value,n.height.value)});const{pixelRatio:c}=v.useDevicePixelRatio();u.watchEffect(()=>{s.value.setPixelRatio(c.value)});const{logError:i}=S(),m=(()=>{const d=new M.WebGLRenderer,_={shadowMap:{enabled:d.shadowMap.enabled,type:d.shadowMap.type},toneMapping:d.toneMapping,toneMappingExposure:d.toneMappingExposure,outputColorSpace:d.outputColorSpace};return d.dispose(),_})();u.watchEffect(()=>{const d=v.toValue(t.preset);d&&(d in V||i(`Renderer Preset must be one of these: ${Object.keys(V).join(", ")}`),Y(s.value,V[d]));const _=(L,D)=>{const A=v.toValue(L),O=()=>{if(d)return J(V[d],D)};if(A!==void 0)return A;const C=O();return C!==void 0?C:J(m,D)},g=(L,D)=>ve(s.value,D,_(L,D));g(t.shadows,"shadowMap.enabled"),g(t.toneMapping,"toneMapping"),g(t.shadowMapType,"shadowMap.type"),Ce<150&&g(!t.useLegacyLights,"physicallyCorrectLights"),g(t.outputColorSpace,"outputColorSpace"),g(t.toneMappingExposure,"toneMappingExposure");const k=_(t.clearColor,"clearColor");k&&s.value.setClearColor(k?q(k):new M.Color(0))});const{pause:l,resume:w,onLoop:P}=N();return P(()=>{o.value&&!v.toValue(r)&&s.value.render(e,o.value)}),w(),u.onUnmounted(()=>{l(),s.value.dispose(),s.value.forceContextLoss()}),{renderer:s}}const Q=e=>typeof e=="function",he=e=>!!e&&e.constructor===Array;function Z(e){const a={nodes:{},materials:{}};return e&&e.traverse(t=>{t.name&&(a.nodes[t.name]=t),t.material&&!a.materials[t.material.name]&&(a.materials[t.material.name]=t.material)}),a}async function _e(e,a,t,r,n){const{logError:o}=S(),f=new e;n&&n(f),t&&t(f);const c=(Array.isArray(a)?a:[a]).map(i=>new Promise((p,m)=>{f.load(i,l=>{l.scene&&Object.assign(l,Z(l.scene)),p(l)},r,l=>m(o("[useLoader] - Failed to load resource",l)))}));return he(a)?await Promise.all(c):await c[0]}async function Pe(e){const a=new M.LoadingManager,t=new M.TextureLoader(a),r=n=>new Promise((o,f)=>{t.load(n,s=>o(s),()=>null,()=>{f(new Error("[useTextures] - Failed to load texture"))})});if(we(e)){const n=await Promise.all(e.map(o=>r(o)));return e.length>1?n:n[0]}else{const{map:n,displacementMap:o,normalMap:f,roughnessMap:s,metalnessMap:c,aoMap:i,alphaMap:p,matcap:m}=e;return{map:n?await r(n):null,displacementMap:o?await r(o):null,normalMap:f?await r(f):null,roughnessMap:s?await r(s):null,metalnessMap:c?await r(c):null,aoMap:i?await r(i):null,alphaMap:p?await r(p):null,matcap:m?await r(m):null}}}const ee=(e,{renderer:a,camera:t,raycaster:r})=>{const n=u.computed(()=>a.value.domElement),{x:o,y:f}=v.usePointer({target:n}),{width:s,height:c,top:i,left:p}=v.useElementBounding(n),m=({x:C,y:b})=>{if(n.value)return{x:(C-p.value)/s.value*2-1,y:-((b-i.value)/c.value)*2+1}},l=({x:C,y:b})=>{if(t.value)return r.value.setFromCamera(new M.Vector2(C,b),t.value),r.value.intersectObjects(e.value,!1)},w=C=>{const b=m({x:(C==null?void 0:C.clientX)??o.value,y:(C==null?void 0:C.clientY)??f.value});return b?l(b)||[]:[]},P=u.computed(()=>w()),d=v.createEventHook(),_=v.createEventHook(),g=(C,b)=>{C.trigger({event:b,intersects:w(b)})},k=C=>{g(_,C)};let L;const D=C=>{var b;L=(b=w(C)[0])==null?void 0:b.object},A=C=>{var b;C instanceof PointerEvent&&L===((b=w(C)[0])==null?void 0:b.object)&&g(d,C)},O=C=>_.trigger({event:C,intersects:[]});return n.value.addEventListener("pointerup",A),n.value.addEventListener("pointerdown",D),n.value.addEventListener("pointermove",k),n.value.addEventListener("pointerleave",O),u.onUnmounted(()=>{n!=null&&n.value&&(n.value.removeEventListener("pointerup",A),n.value.removeEventListener("pointerdown",D),n.value.removeEventListener("pointermove",k),n.value.removeEventListener("pointerleave",O))}),{intersects:P,onClick:C=>d.on(C).off,onPointerMove:C=>_.on(C).off}};function Me(){const{logWarning:e}=S();function a(o,f,s){let c=null;return o.traverse(i=>{i[f]===s&&(c=i)}),c||e(`Child with ${f} '${s}' not found.`),c}function t(o,f,s){const c=[];return o.traverse(i=>{i[f].includes(s)&&c.push(i)}),c.length||e(`Children with ${f} '${s}' not found.`),c}function r(o,f){return a(o,"name",f)}function n(o,f){return t(o,"name",f)}return{seek:a,seekByName:r,seekAll:t,seekAllByName:n}}const te=({scene:e,contextParts:a})=>{const t=u.reactive({click:new Map,pointerMove:new Map,pointerEnter:new Map,pointerLeave:new Map}),r=u.ref(new Set),n=l=>{r.value.add(l)},o=l=>{r.value.delete(l)},f=l=>{Object.values(t).forEach(w=>w.delete(l)),o(l)},s=l=>{const{onClick:w,onPointerMove:P,onPointerEnter:d,onPointerLeave:_}=l;w&&t.click.set(l,w),P&&t.pointerMove.set(l,P),d&&t.pointerEnter.set(l,d),_&&t.pointerLeave.set(l,_)};e.userData.tres__registerAtPointerEventHandler=s,e.userData.tres__deregisterAtPointerEventHandler=f,e.userData.tres__registerBlockingObjectAtPointerEventHandler=n,e.userData.tres__deregisterBlockingObjectAtPointerEventHandler=o;const c=u.computed(()=>ge([...Array.from(r.value),...Object.values(t).map(l=>Array.from(l.keys())).flat()],({uuid:l})=>l)),{onClick:i,onPointerMove:p}=ee(c,a);i(({intersects:l,event:w})=>{var P;l.length&&((P=t.click.get(l[0].object))==null||P(l[0],w))});let m;return p(({intersects:l,event:w})=>{var k,L,D,A;const P=(k=l==null?void 0:l[0])==null?void 0:k.object,{pointerLeave:d,pointerEnter:_,pointerMove:g}=t;m&&m!==P&&((L=d.get(m))==null||L(m,w)),P&&(m!==P&&((D=_.get(P))==null||D(l[0],w)),(A=g.get(P))==null||A(l[0],w)),m=P||null}),{registerObject:s,deregisterObject:f}};function Ae(e){let a=0;return e.traverse(t=>{if(t.isMesh&&t.geometry){const r=t.geometry,n=r.attributes.position.count*3*Float32Array.BYTES_PER_ELEMENT,o=r.index?r.index.count*Uint32Array.BYTES_PER_ELEMENT:0,f=r.attributes.normal?r.attributes.normal.count*3*Float32Array.BYTES_PER_ELEMENT:0,s=r.attributes.uv?r.attributes.uv.count*2*Float32Array.BYTES_PER_ELEMENT:0,c=n+o+f+s;a+=c}}),a}const j=u.ref({}),F=e=>Object.assign(j.value,e);function re({scene:e,canvas:a,windowSize:t,disableRender:r,rendererOptions:n}){const o=u.computed(()=>v.toValue(t)?v.useWindowSize():v.useElementSize(v.toValue(a).parentElement)),f=u.computed(()=>o.value.width.value),s=u.computed(()=>o.value.height.value),c=u.computed(()=>f.value/s.value),i={height:s,width:f,aspectRatio:c},p=u.shallowRef(e),{camera:m,cameras:l,registerCamera:w,deregisterCamera:P,setCameraActive:d}=G({sizes:i,scene:e}),{renderer:_}=X({scene:e,canvas:a,options:n,contextParts:{sizes:i,camera:m},disableRender:r}),g={sizes:i,scene:p,camera:m,cameras:u.readonly(l),renderer:_,raycaster:u.shallowRef(new M.Raycaster),controls:u.ref(null),perf:{maxFrames:160,fps:{value:0,accumulator:[]},memory:{currentMem:0,allocatedMem:0,accumulator:[]}},extend:F,registerCamera:w,setCameraActive:d,deregisterCamera:P};u.provide("useTres",g);const k=100,L=v.useFps({every:k}),{isSupported:D,memory:A}=v.useMemory({interval:k}),O=160;let C=performance.now();const b=({timestamp:R})=>{g.scene.value&&(g.perf.memory.allocatedMem=Ae(g.scene.value)),R-C>=k&&(C=R,g.perf.fps.accumulator.push(L.value),g.perf.fps.accumulator.length>O&&g.perf.fps.accumulator.shift(),g.perf.fps.value=L.value,D.value&&A.value&&(g.perf.memory.accumulator.push(A.value.usedJSHeapSize/1024/1024),g.perf.memory.accumulator.length>O&&g.perf.memory.accumulator.shift(),g.perf.memory.currentMem=g.perf.memory.accumulator.reduce((xe,Ve)=>xe+Ve,0)/g.perf.memory.accumulator.length))};let $=0;const Be=1,{pause:Te,resume:ze}=v.useRafFn(({delta:R})=>{window.__TRES__DEVTOOLS__&&(b({timestamp:performance.now()}),$+=R,$>=Be&&(window.__TRES__DEVTOOLS__.cb(g),$=0))},{immediate:!0});return u.onUnmounted(()=>{Te()}),g}function ne(){const e=u.inject("useTres");if(!e)throw new Error("useTresContext must be used together with useTresContextProvider");return e}const be=ne;function Fe(e){}let y=null;const{logError:ae}=S(),ke={createElement(e,a,t,r){var f,s;if(r||(r={}),r.args||(r.args=[]),e==="template"||de(e))return null;let n=e.replace("Tres",""),o;if(e==="primitive"){(r==null?void 0:r.object)===void 0&&ae("Tres primitives need a prop 'object'");const c=r.object;n=c.type,o=Object.assign(c,{type:n,attach:r.attach,primitive:!0})}else{const c=j.value[n];c||ae(`${n} is not defined on the THREE namespace. Use extend to add it to the catalog.`),o=new c(...r.args)}return o.isCamera&&(r!=null&&r.position||o.position.set(3,3,3),r!=null&&r.lookAt||o.lookAt(0,0,0)),(r==null?void 0:r.attach)===void 0&&(o.isMaterial?o.attach="material":o.isBufferGeometry&&(o.attach="geometry")),o.isObject3D&&((f=r==null?void 0:r.material)!=null&&f.isMaterial&&(o.userData.tres__materialViaProp=!0),(s=r==null?void 0:r.geometry)!=null&&s.isBufferGeometry&&(o.userData.tres__geometryViaProp=!0)),o.userData={...o.userData,tres__name:n},o},insert(e,a){var r,n,o,f;a&&a.isScene&&(y=a);const t=a||y;if(e!=null&&e.isObject3D){if(e!=null&&e.isCamera){if(!(y!=null&&y.userData.tres__registerCamera))throw"could not find tres__registerCamera on scene's userData";(n=y==null?void 0:(r=y.userData).tres__registerCamera)==null||n.call(r,e)}if(e!=null&&e.onClick||e!=null&&e.onPointerMove||e!=null&&e.onPointerEnter||e!=null&&e.onPointerLeave){if(!(y!=null&&y.userData.tres__registerAtPointerEventHandler))throw"could not find tres__registerAtPointerEventHandler on scene's userData";(f=y==null?void 0:(o=y.userData).tres__registerAtPointerEventHandler)==null||f.call(o,e)}}e!=null&&e.isObject3D&&(t!=null&&t.isObject3D)?(t.add(e),e.dispatchEvent({type:"added"})):e!=null&&e.isFog?t.fog=e:typeof(e==null?void 0:e.attach)=="string"&&(e.__previousAttach=e[t==null?void 0:t.attach],t&&(t[e.attach]=e))},remove(e){var a,t;if(e){if(e.isObject3D){const r=e,n=i=>{var m,l;const p=i;i.userData.tres__materialViaProp||((m=p.material)==null||m.dispose(),p.material=void 0),i.userData.tres__geometryViaProp||((l=p.geometry)==null||l.dispose(),p.geometry=void 0)},o=y==null?void 0:y.userData.tres__deregisterAtPointerEventHandler,f=y==null?void 0:y.userData.tres__deregisterBlockingObjectAtPointerEventHandler,s=i=>{var p,m;if(!f)throw"could not find tres__deregisterBlockingObjectAtPointerEventHandler on scene's userData";if((m=y==null?void 0:(p=y.userData).tres__deregisterBlockingObjectAtPointerEventHandler)==null||m.call(p,i),!o)throw"could not find tres__deregisterAtPointerEventHandler on scene's userData";(i!=null&&i.onClick||i!=null&&i.onPointerMove||i!=null&&i.onPointerEnter||i!=null&&i.onPointerLeave)&&(o==null||o(i))},c=i=>{const p=y==null?void 0:y.userData.tres__deregisterCamera;if(!p)throw"could not find tres__deregisterCamera on scene's userData";i.isCamera&&(p==null||p(i))};(a=e.removeFromParent)==null||a.call(e),r.traverse(i=>{n(i),c(i),s==null||s(i)}),n(r),c(r),s==null||s(r)}(t=e.dispose)==null||t.call(e)}},patchProp(e,a,t,r){var n,o,f,s;if(e){let c=e,i=a;if(e.isObject3D&&i==="blocks-pointer-events"){r||r===""?(o=y==null?void 0:(n=y.userData).tres__registerBlockingObjectAtPointerEventHandler)==null||o.call(n,e):(s=y==null?void 0:(f=y.userData).tres__deregisterBlockingObjectAtPointerEventHandler)==null||s.call(f,e);return}let p=x(i),m=c==null?void 0:c[p];if(i==="args"){const w=e,P=t??[],d=r??[],_=e.userData.tres__name||e.type;_&&P.length&&!ye(P,d)&&(c=Object.assign(w,new j.value[_](...r)));return}if(c.type==="BufferGeometry"){if(i==="args")return;c.setAttribute(x(i),new M.BufferAttribute(...r));return}if(i.includes("-")&&m===void 0){const w=i.split("-");m=w.reduce((P,d)=>P[x(d)],c),i=w.pop(),p=i.toLowerCase(),m!=null&&m.set||(c=w.reduce((P,d)=>P[x(d)],c))}let l=r;if(l===""&&(l=!0),Q(m)){Array.isArray(l)?e[p](...l):e[p](l);return}!(m!=null&&m.set)&&!Q(m)?c[p]=l:m.constructor===l.constructor&&(m!=null&&m.copy)?m==null||m.copy(l):Array.isArray(l)?m.set(...l):!m.isColor&&m.setScalar?m.setScalar(l):m.set(l)}},parentNode(e){return(e==null?void 0:e.parent)||null},createText:()=>void 0,createComment:()=>void 0,setText:()=>void 0,setElementText:()=>void 0,nextSibling:()=>void 0,querySelector:()=>void 0,setScopeId:()=>void 0,cloneNode:()=>void 0,insertStaticContent:()=>void 0},{render:Le}=u.createRenderer(ke);F(ie);const De=["data-scene"],oe=u.defineComponent({__name:"TresCanvas",props:{shadows:{type:Boolean,default:void 0},clearColor:{},toneMapping:{},shadowMapType:{},useLegacyLights:{type:Boolean,default:void 0},outputColorSpace:{},toneMappingExposure:{},camera:{},preset:{},windowSize:{type:Boolean,default:void 0},disableRender:{type:Boolean,default:void 0},context:{},precision:{},alpha:{type:Boolean,default:void 0},premultipliedAlpha:{type:Boolean},antialias:{type:Boolean,default:void 0},stencil:{type:Boolean,default:void 0},preserveDrawingBuffer:{type:Boolean,default:void 0},powerPreference:{},depth:{type:Boolean,default:void 0},logarithmicDepthBuffer:{type:Boolean,default:void 0},failIfMajorPerformanceCaveat:{type:Boolean,default:void 0}},setup(e,{expose:a}){var P;const t=e,{logWarning:r}=S(),n=u.ref(),o=u.shallowRef(new M.Scene),{resume:f}=N(),s=u.useSlots(),c=(P=u.getCurrentInstance())==null?void 0:P.appContext.app,i=d=>u.defineComponent({setup(){var g;const _=(g=u.getCurrentInstance())==null?void 0:g.appContext;return _&&(_.app=c),u.provide("useTres",d),u.provide("extend",F),()=>u.h(u.Fragment,null,s!=null&&s.default?s.default():[])}}),p=d=>{const _=i(d);Le(u.h(_),o.value)},m=(d,_=!1)=>{o.value.children=[],_&&(d.renderer.value.dispose(),d.renderer.value.renderLists.dispose(),d.renderer.value.forceContextLoss()),p(d),f()},l=u.computed(()=>t.disableRender),w=u.shallowRef(null);return a({context:w,dispose:()=>m(w.value,!0)}),u.onMounted(()=>{const d=n;w.value=re({scene:o.value,canvas:d,windowSize:t.windowSize,disableRender:l,rendererOptions:t}),te({scene:o.value,contextParts:w.value});const{registerCamera:_,camera:g,cameras:k,deregisterCamera:L}=w.value;p(w.value);const D=()=>{const A=new M.PerspectiveCamera(45,window.innerWidth/window.innerHeight,.1,1e3);A.position.set(3,3,3),A.lookAt(0,0,0),_(A);const O=u.watchEffect(()=>{k.value.length>=2&&(A.removeFromParent(),L(A),O==null||O())})};u.watch(()=>t.camera,(A,O)=>{A&&_(A),O&&(O.removeFromParent(),L(O))},{immediate:!0}),g.value||(r("No camera found. Creating a default perspective camera. To have full control over a camera, please add one to the scene."),D())}),(d,_)=>(u.openBlock(),u.createElementBlock("canvas",{ref_key:"canvas",ref:n,"data-scene":o.value.uuid,class:u.normalizeClass(d.$attrs.class),style:u.normalizeStyle({display:"block",width:"100%",height:"100%",position:d.windowSize?"fixed":"relative",top:0,left:0,pointerEvents:"auto",touchAction:"none",...d.$attrs.style})},null,14,De))}}),Oe=["TresCanvas","TresLeches","TresScene"],Se={template:{compilerOptions:{isCustomElement:e=>e.startsWith("Tres")&&!Oe.includes(e)||e==="primitive"}}},Ee={install(e){e.component("TresCanvas",oe)}};h.TresCanvas=oe,h.catalogue=j,h.default=Ee,h.extend=F,h.isProd=fe,h.normalizeColor=q,h.normalizeVectorFlexibleParam=me,h.templateCompilerOptions=Se,h.trasverseObjects=Z,h.useCamera=G,h.useLoader=_e,h.useLogger=S,h.usePointerEventHandler=te,h.useRaycaster=ee,h.useRenderLoop=N,h.useRenderer=X,h.useSeek=Me,h.useTexture=Pe,h.useTres=be,h.useTresContext=ne,h.useTresContextProvider=re,Object.defineProperties(h,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
|
|
8
|
+
(function(g,u){typeof exports=="object"&&typeof module<"u"?u(exports,require("vue"),require("three"),require("@vueuse/core")):typeof define=="function"&&define.amd?define(["exports","vue","three","@vueuse/core"],u):(g=typeof globalThis<"u"?globalThis:g||self,u(g.tres={},g.Vue,g.Three,g.VueUseCore))})(this,function(g,u,v,y){"use strict";var st=Object.defineProperty;var it=(g,u,v)=>u in g?st(g,u,{enumerable:!0,configurable:!0,writable:!0,value:v}):g[u]=v;var H=(g,u,v)=>(it(g,typeof u!="symbol"?u+"":u,v),v);function ve(e){const n=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const t in e)if(t!=="default"){const r=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(n,t,r.get?r:{enumerable:!0,get:()=>e[t]})}}return n.default=e,Object.freeze(n)}const q=ve(v),Q=({sizes:e,scene:n})=>{const t=u.ref([]),r=u.computed(()=>t.value[0]),a=(i,l=!1)=>{t.value.some(({uuid:f})=>f===i.uuid)||(l?o(i):t.value.push(i))},s=i=>{t.value=t.value.filter(({uuid:l})=>l!==i.uuid)},o=i=>{const l=i instanceof v.Camera?i:t.value.find(p=>p.uuid===i);if(!l)return;const f=t.value.filter(({uuid:p})=>p!==l.uuid);t.value=[l,...f]};return u.watchEffect(()=>{e.aspectRatio.value&&t.value.forEach(i=>{i instanceof v.PerspectiveCamera&&(i.aspect=e.aspectRatio.value),(i instanceof v.PerspectiveCamera||i instanceof v.OrthographicCamera)&&i.updateProjectionMatrix()})}),n.userData.tres__registerCamera=a,n.userData.tres__deregisterCamera=s,u.onUnmounted(()=>{t.value=[]}),{camera:r,cameras:t,registerCamera:a,deregisterCamera:s,setCameraActive:o}},Y=y.createEventHook(),J=y.createEventHook(),F=y.createEventHook(),E=new v.Clock;let B=0,j=0;const{pause:he,resume:ye,isActive:we}=y.useRafFn(()=>{Y.trigger({delta:B,elapsed:j,clock:E}),J.trigger({delta:B,elapsed:j,clock:E}),F.trigger({delta:B,elapsed:j,clock:E})},{immediate:!1});F.on(()=>{B=E.getDelta(),j=E.getElapsedTime()});const G=()=>({onBeforeLoop:Y.on,onLoop:J.on,onAfterLoop:F.on,pause:he,resume:ye,isActive:we}),_e=!0,K="[TresJS ▲ ■ ●] ";function D(){function e(r,a){console.error(`${K} ${r}`,a||"")}function n(r){console.warn(`${K} ${r}`)}function t(r,a){}return{logError:e,logWarning:n,logMessage:t}}function be(e){return typeof e=="number"?[e,e,e]:e instanceof v.Vector3?[e.x,e.y,e.z]:e}function X(e){return e instanceof v.Color?e:Array.isArray(e)?new v.Color(...e):new v.Color(e)}class Ce extends q.Mesh{constructor(...t){super(...t);H(this,"type","HightlightMesh");H(this,"createTime");this.createTime=Date.now()}onBeforeRender(){const r=(Date.now()-this.createTime)/1e3,o=1+.07*Math.sin(2.5*r);this.scale.set(o,o,o)}}const Z=(e,n)=>{for(const t of Object.keys(n))n[t]instanceof Object&&Object.assign(n[t],Z(e[t],n[t]));return Object.assign(e||{},n),e},Me=Pe("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 ee(e){return e&&e.nodeType===1}function V(e){return e.replace(/-([a-z])/g,(n,t)=>t.toUpperCase())}function Pe(e,n){const t=Object.create(null),r=e.split(",");for(let a=0;a<r.length;a++)t[r[a]]=!0;return n?a=>!!t[a.toLowerCase()]:a=>!!t[a]}const Se=(e,n)=>{const t=new Set,r=[];for(const a of e){const s=n(a);t.has(s)||(t.add(s),r.push(a))}return r},te=(e,n)=>{if(!n)return;const t=Array.isArray(n)?n:n.match(/([^[.\]])+/g);return t==null?void 0:t.reduce((r,a)=>r&&r[a],e)},ke=(e,n,t)=>{const r=Array.isArray(n)?n:n.match(/([^[.\]])+/g);r&&r.reduce((a,s,o)=>(a[s]===void 0&&(a[s]={}),o===r.length-1&&(a[s]=t),a[s]),e)};function re(e,n){if(ee(e)&&ee(n)){const a=e.attributes,s=n.attributes;return a.length!==s.length?!1:Array.from(a).every(({name:o,value:i})=>n.getAttribute(o)===i)}if(e===n)return!0;if(e===null||typeof e!="object"||n===null||typeof n!="object")return!1;const t=Object.keys(e),r=Object.keys(n);if(t.length!==r.length)return!1;for(const a of t)if(!r.includes(a)||!re(e[a],n[a]))return!1;return!0}function Oe(e,n){if(!Array.isArray(e)||!Array.isArray(n)||e.length!==n.length)return!1;for(let t=0;t<e.length;t++)if(!re(e[t],n[t]))return!1;return!0}const Ae=Array.isArray;function Le(e,n,t,r){const a=l=>{if(l.uuid===n)return l;for(const f of l.children){const p=a(f);if(p)return p}},s=a(e);if(!s){console.warn("Object with UUID not found in the scene.");return}let o=s;for(let l=0;l<t.length-1;l++)if(o[t[l]]!==void 0)o=o[t[l]];else{console.warn(`Property path is not valid: ${t.join(".")}`);return}const i=t[t.length-1];o[i]!==void 0?o[i]=r:console.warn(`Property path is not valid: ${t.join(".")}`)}function De(e){const n=new v.MeshBasicMaterial({color:11003607,transparent:!0,opacity:.2,depthTest:!1,side:v.DoubleSide});return new Ce(e.geometry.clone(),n)}const Te=Number.parseInt(v.REVISION.replace("dev","")),I={realistic:{shadows:!0,physicallyCorrectLights:!0,outputColorSpace:v.SRGBColorSpace,toneMapping:v.ACESFilmicToneMapping,toneMappingExposure:3,shadowMap:{enabled:!0,type:v.PCFSoftShadowMap}}};function ne({scene:e,canvas:n,options:t,disableRender:r,contextParts:{sizes:a,camera:s}}){const o=u.computed(()=>({alpha:y.toValue(t.alpha),depth:y.toValue(t.depth),canvas:y.unrefElement(n),context:y.toValue(t.context),stencil:y.toValue(t.stencil),antialias:y.toValue(t.antialias)===void 0?!0:y.toValue(t.antialias),precision:y.toValue(t.precision),powerPreference:y.toValue(t.powerPreference),premultipliedAlpha:y.toValue(t.premultipliedAlpha),preserveDrawingBuffer:y.toValue(t.preserveDrawingBuffer),logarithmicDepthBuffer:y.toValue(t.logarithmicDepthBuffer),failIfMajorPerformanceCaveat:y.toValue(t.failIfMajorPerformanceCaveat)})),i=u.shallowRef(new v.WebGLRenderer(o.value));u.watch(o,()=>{i.value.dispose(),i.value=new v.WebGLRenderer(o.value)}),u.watchEffect(()=>{i.value.setSize(a.width.value,a.height.value)});const{pixelRatio:l}=y.useDevicePixelRatio();u.watchEffect(()=>{i.value.setPixelRatio(l.value)});const{logError:f}=D(),d=(()=>{const m=new v.WebGLRenderer,C={shadowMap:{enabled:m.shadowMap.enabled,type:m.shadowMap.type},toneMapping:m.toneMapping,toneMappingExposure:m.toneMappingExposure,outputColorSpace:m.outputColorSpace};return m.dispose(),C})();u.watchEffect(()=>{const m=y.toValue(t.preset);m&&(m in I||f(`Renderer Preset must be one of these: ${Object.keys(I).join(", ")}`),Z(i.value,I[m]));const C=(O,A)=>{const P=y.toValue(O),L=()=>{if(m)return te(I[m],A)};if(P!==void 0)return P;const b=L();return b!==void 0?b:te(d,A)},h=(O,A)=>ke(i.value,A,C(O,A));h(t.shadows,"shadowMap.enabled"),h(t.toneMapping,"toneMapping"),h(t.shadowMapType,"shadowMap.type"),Te<150&&h(!t.useLegacyLights,"physicallyCorrectLights"),h(t.outputColorSpace,"outputColorSpace"),h(t.toneMappingExposure,"toneMappingExposure");const k=C(t.clearColor,"clearColor");k&&i.value.setClearColor(k?X(k):new v.Color(0))});const{pause:c,resume:_,onLoop:M}=G();return M(()=>{s.value&&!y.toValue(r)&&i.value.render(e,s.value)}),_(),u.onUnmounted(()=>{c(),i.value.dispose(),i.value.forceContextLoss()}),{renderer:i}}const oe=e=>typeof e=="function",Ee=e=>!!e&&e.constructor===Array;function ae(e){const n={nodes:{},materials:{}};return e&&e.traverse(t=>{t.name&&(n.nodes[t.name]=t),t.material&&!n.materials[t.material.name]&&(n.materials[t.material.name]=t.material)}),n}async function xe(e,n,t,r,a){const{logError:s}=D(),o=new e;a&&a(o),t&&t(o);const l=(Array.isArray(n)?n:[n]).map(f=>new Promise((p,d)=>{o.load(f,c=>{c.scene&&Object.assign(c,ae(c.scene)),p(c)},r,c=>d(s("[useLoader] - Failed to load resource",c)))}));return Ee(n)?await Promise.all(l):await l[0]}async function Be(e){const n=new v.LoadingManager,t=new v.TextureLoader(n),r=a=>new Promise((s,o)=>{t.load(a,i=>s(i),()=>null,()=>{o(new Error("[useTextures] - Failed to load texture"))})});if(Ae(e)){const a=await Promise.all(e.map(s=>r(s)));return e.length>1?a:a[0]}else{const{map:a,displacementMap:s,normalMap:o,roughnessMap:i,metalnessMap:l,aoMap:f,alphaMap:p,matcap:d}=e;return{map:a?await r(a):null,displacementMap:s?await r(s):null,normalMap:o?await r(o):null,roughnessMap:i?await r(i):null,metalnessMap:l?await r(l):null,aoMap:f?await r(f):null,alphaMap:p?await r(p):null,matcap:d?await r(d):null}}}const se=(e,{renderer:n,camera:t,raycaster:r})=>{const a=u.computed(()=>n.value.domElement),{x:s,y:o}=y.usePointer({target:a}),{width:i,height:l,top:f,left:p}=y.useElementBounding(a),d=({x:b,y:S})=>{if(a.value)return{x:(b-p.value)/i.value*2-1,y:-((S-f.value)/l.value)*2+1}},c=({x:b,y:S})=>{if(t.value)return r.value.setFromCamera(new v.Vector2(b,S),t.value),r.value.intersectObjects(e.value,!1)},_=b=>{const S=d({x:(b==null?void 0:b.clientX)??s.value,y:(b==null?void 0:b.clientY)??o.value});return S?c(S)||[]:[]},M=u.computed(()=>_()),m=y.createEventHook(),C=y.createEventHook(),h=(b,S)=>{b.trigger({event:S,intersects:_(S)})},k=b=>{h(C,b)};let O;const A=b=>{var S;O=(S=_(b)[0])==null?void 0:S.object},P=b=>{var S;b instanceof PointerEvent&&O===((S=_(b)[0])==null?void 0:S.object)&&h(m,b)},L=b=>C.trigger({event:b,intersects:[]});return a.value.addEventListener("pointerup",P),a.value.addEventListener("pointerdown",A),a.value.addEventListener("pointermove",k),a.value.addEventListener("pointerleave",L),u.onUnmounted(()=>{a!=null&&a.value&&(a.value.removeEventListener("pointerup",P),a.value.removeEventListener("pointerdown",A),a.value.removeEventListener("pointermove",k),a.value.removeEventListener("pointerleave",L))}),{intersects:M,onClick:b=>m.on(b).off,onPointerMove:b=>C.on(b).off}};function je(){const{logWarning:e}=D();function n(s,o,i){let l=null;return s.traverse(f=>{f[o]===i&&(l=f)}),l||e(`Child with ${o} '${i}' not found.`),l}function t(s,o,i){const l=[];return s.traverse(f=>{f[o].includes(i)&&l.push(f)}),l.length||e(`Children with ${o} '${i}' not found.`),l}function r(s,o){return n(s,"name",o)}function a(s,o){return t(s,"name",o)}return{seek:n,seekByName:r,seekAll:t,seekAllByName:a}}const ie=({scene:e,contextParts:n})=>{const t=u.reactive({click:new Map,pointerMove:new Map,pointerEnter:new Map,pointerLeave:new Map}),r=u.ref(new Set),a=c=>{r.value.add(c)},s=c=>{r.value.delete(c)},o=c=>{Object.values(t).forEach(_=>_.delete(c)),s(c)},i=c=>{const{onClick:_,onPointerMove:M,onPointerEnter:m,onPointerLeave:C}=c;_&&t.click.set(c,_),M&&t.pointerMove.set(c,M),m&&t.pointerEnter.set(c,m),C&&t.pointerLeave.set(c,C)};e.userData.tres__registerAtPointerEventHandler=i,e.userData.tres__deregisterAtPointerEventHandler=o,e.userData.tres__registerBlockingObjectAtPointerEventHandler=a,e.userData.tres__deregisterBlockingObjectAtPointerEventHandler=s;const l=u.computed(()=>Se([...Array.from(r.value),...Object.values(t).map(c=>Array.from(c.keys())).flat()],({uuid:c})=>c)),{onClick:f,onPointerMove:p}=se(l,n);f(({intersects:c,event:_})=>{var M;c.length&&((M=t.click.get(c[0].object))==null||M(c[0],_))});let d;return p(({intersects:c,event:_})=>{var k,O,A,P;const M=(k=c==null?void 0:c[0])==null?void 0:k.object,{pointerLeave:m,pointerEnter:C,pointerMove:h}=t;d&&d!==M&&((O=m.get(d))==null||O(d,_)),M&&(d!==M&&((A=C.get(M))==null||A(c[0],_)),(P=h.get(M))==null||P(c[0],_)),d=M||null}),{registerObject:i,deregisterObject:o}};function le(e){let n=0;return e.traverse(t=>{if(t.isMesh&&t.geometry){const r=t.geometry,a=r.attributes.position.count*3*Float32Array.BYTES_PER_ELEMENT,s=r.index?r.index.count*Uint32Array.BYTES_PER_ELEMENT:0,o=r.attributes.normal?r.attributes.normal.count*3*Float32Array.BYTES_PER_ELEMENT:0,i=r.attributes.uv?r.attributes.uv.count*2*Float32Array.BYTES_PER_ELEMENT:0,l=a+s+o+i;n+=l}}),n}function Ve(e){return(e/1024).toFixed(2)}const N=u.ref({}),U=e=>Object.assign(N.value,e);function ue({scene:e,canvas:n,windowSize:t,disableRender:r,rendererOptions:a}){const s=u.computed(()=>y.toValue(t)?y.useWindowSize():y.useElementSize(y.toValue(n).parentElement)),o=u.computed(()=>s.value.width.value),i=u.computed(()=>s.value.height.value),l=u.computed(()=>o.value/i.value),f={height:i,width:o,aspectRatio:l},p=u.shallowRef(e),{camera:d,cameras:c,registerCamera:_,deregisterCamera:M,setCameraActive:m}=Q({sizes:f,scene:e}),{renderer:C}=ne({scene:e,canvas:n,options:a,contextParts:{sizes:f,camera:d},disableRender:r}),h={sizes:f,scene:p,camera:d,cameras:u.readonly(c),renderer:C,raycaster:u.shallowRef(new v.Raycaster),controls:u.ref(null),perf:{maxFrames:160,fps:{value:0,accumulator:[]},memory:{currentMem:0,allocatedMem:0,accumulator:[]}},extend:U,registerCamera:_,setCameraActive:m,deregisterCamera:M};u.provide("useTres",h);const k=100,O=y.useFps({every:k}),{isSupported:A,memory:P}=y.useMemory({interval:k}),L=160;let b=performance.now();const S=({timestamp:$})=>{h.scene.value&&(h.perf.memory.allocatedMem=le(h.scene.value)),$-b>=k&&(b=$,h.perf.fps.accumulator.push(O.value),h.perf.fps.accumulator.length>L&&h.perf.fps.accumulator.shift(),h.perf.fps.value=O.value,A.value&&P.value&&(h.perf.memory.accumulator.push(P.value.usedJSHeapSize/1024/1024),h.perf.memory.accumulator.length>L&&h.perf.memory.accumulator.shift(),h.perf.memory.currentMem=h.perf.memory.accumulator.reduce((ot,at)=>ot+at,0)/h.perf.memory.accumulator.length))};let W=0;const rt=1,{pause:nt,resume:ft}=y.useRafFn(({delta:$})=>{window.__TRES__DEVTOOLS__&&(S({timestamp:performance.now()}),W+=$,W>=rt&&(window.__TRES__DEVTOOLS__.cb(h),W=0))},{immediate:!0});return u.onUnmounted(()=>{nt()}),h}function ce(){const e=u.inject("useTres");if(!e)throw new Error("useTresContext must be used together with useTresContextProvider");return e}const Ie=ce;function ut(e){}let w=null;const{logError:fe}=D(),R=["onClick","onPointerMove","onPointerEnter","onPointerLeave"],Ne={createElement(e,n,t,r){var o,i;if(r||(r={}),r.args||(r.args=[]),e==="template"||Me(e))return null;let a=e.replace("Tres",""),s;if(e==="primitive"){(r==null?void 0:r.object)===void 0&&fe("Tres primitives need a prop 'object'");const l=r.object;a=l.type,s=Object.assign(l,{type:a,attach:r.attach,primitive:!0})}else{const l=N.value[a];l||fe(`${a} is not defined on the THREE namespace. Use extend to add it to the catalog.`),s=new l(...r.args)}return s.isCamera&&(r!=null&&r.position||s.position.set(3,3,3),r!=null&&r.lookAt||s.lookAt(0,0,0)),(r==null?void 0:r.attach)===void 0&&(s.isMaterial?s.attach="material":s.isBufferGeometry&&(s.attach="geometry")),s.isObject3D&&((o=r==null?void 0:r.material)!=null&&o.isMaterial&&(s.userData.tres__materialViaProp=!0),(i=r==null?void 0:r.geometry)!=null&&i.isBufferGeometry&&(s.userData.tres__geometryViaProp=!0)),s.userData={...s.userData,tres__name:a},s},insert(e,n){var r,a,s,o;n&&n.isScene&&(w=n);const t=n||w;if(e!=null&&e.isObject3D){if(e!=null&&e.isCamera){if(!(w!=null&&w.userData.tres__registerCamera))throw"could not find tres__registerCamera on scene's userData";(a=w==null?void 0:(r=w.userData).tres__registerCamera)==null||a.call(r,e)}if(e&&R.some(i=>e[i])){if(!(w!=null&&w.userData.tres__registerAtPointerEventHandler))throw"could not find tres__registerAtPointerEventHandler on scene's userData";(o=w==null?void 0:(s=w.userData).tres__registerAtPointerEventHandler)==null||o.call(s,e)}}e!=null&&e.isObject3D&&(t!=null&&t.isObject3D)?(t.add(e),e.dispatchEvent({type:"added"})):e!=null&&e.isFog?t.fog=e:typeof(e==null?void 0:e.attach)=="string"&&(e.__previousAttach=e[t==null?void 0:t.attach],t&&(t[e.attach]=e))},remove(e){var n,t;if(e){if(e.isObject3D){const r=e,a=f=>{var d,c;const p=f;f.userData.tres__materialViaProp||((d=p.material)==null||d.dispose(),p.material=void 0),f.userData.tres__geometryViaProp||((c=p.geometry)==null||c.dispose(),p.geometry=void 0)},s=w==null?void 0:w.userData.tres__deregisterAtPointerEventHandler,o=w==null?void 0:w.userData.tres__deregisterBlockingObjectAtPointerEventHandler,i=f=>{var p,d;if(!o)throw"could not find tres__deregisterBlockingObjectAtPointerEventHandler on scene's userData";if((d=w==null?void 0:(p=w.userData).tres__deregisterBlockingObjectAtPointerEventHandler)==null||d.call(p,f),!s)throw"could not find tres__deregisterAtPointerEventHandler on scene's userData";f&&R.some(c=>f[c])&&(s==null||s(f))},l=f=>{const p=w==null?void 0:w.userData.tres__deregisterCamera;if(!p)throw"could not find tres__deregisterCamera on scene's userData";f.isCamera&&(p==null||p(f))};(n=e.removeFromParent)==null||n.call(e),r.traverse(f=>{a(f),l(f),i==null||i(f)}),a(r),l(r),i==null||i(r)}(t=e.dispose)==null||t.call(e)}},patchProp(e,n,t,r){var a,s,o,i;if(e){let l=e,f=n;if(e.isObject3D&&f==="blocks-pointer-events"){r||r===""?(s=w==null?void 0:(a=w.userData).tres__registerBlockingObjectAtPointerEventHandler)==null||s.call(a,e):(i=w==null?void 0:(o=w.userData).tres__deregisterBlockingObjectAtPointerEventHandler)==null||i.call(o,e);return}let p=V(f),d=l==null?void 0:l[p];if(f==="args"){const _=e,M=t??[],m=r??[],C=e.userData.tres__name||e.type;C&&M.length&&!Oe(M,m)&&(l=Object.assign(_,new N.value[C](...r)));return}if(l.type==="BufferGeometry"){if(f==="args")return;l.setAttribute(V(f),new v.BufferAttribute(...r));return}if(f.includes("-")&&d===void 0){const _=f.split("-");d=_.reduce((M,m)=>M[V(m)],l),f=_.pop(),p=f.toLowerCase(),d!=null&&d.set||(l=_.reduce((M,m)=>M[V(m)],l))}let c=r;if(c===""&&(c=!0),oe(d)){R.includes(n)||(Array.isArray(c)?e[p](...c):e[p](c));return}!(d!=null&&d.set)&&!oe(d)?l[p]=c:d.constructor===c.constructor&&(d!=null&&d.copy)?d==null||d.copy(c):Array.isArray(c)?d.set(...c):!d.isColor&&d.setScalar?d.setScalar(c):d.set(c)}},parentNode(e){return(e==null?void 0:e.parent)||null},createText:()=>void 0,createComment:()=>void 0,setText:()=>void 0,setElementText:()=>void 0,nextSibling:()=>void 0,querySelector:()=>void 0,setScopeId:()=>void 0,cloneNode:()=>void 0,insertStaticContent:()=>void 0},{render:Ue}=u.createRenderer(Ne);U(q);function $e(){return de().__VUE_DEVTOOLS_GLOBAL_HOOK__}function de(){return typeof navigator<"u"&&typeof window<"u"?window:typeof global<"u"?global:{}}const Fe=typeof Proxy=="function",Ge="devtools-plugin:setup",Re="plugin:settings:set";let T,z;function ze(){var e;return T!==void 0||(typeof window<"u"&&window.performance?(T=!0,z=window.performance):typeof global<"u"&&(!((e=global.perf_hooks)===null||e===void 0)&&e.performance)?(T=!0,z=global.perf_hooks.performance):T=!1),T}function We(){return ze()?z.now():Date.now()}class He{constructor(n,t){this.target=null,this.targetQueue=[],this.onQueue=[],this.plugin=n,this.hook=t;const r={};if(n.settings)for(const o in n.settings){const i=n.settings[o];r[o]=i.defaultValue}const a=`__vue-devtools-plugin-settings__${n.id}`;let s=Object.assign({},r);try{const o=localStorage.getItem(a),i=JSON.parse(o);Object.assign(s,i)}catch{}this.fallbacks={getSettings(){return s},setSettings(o){try{localStorage.setItem(a,JSON.stringify(o))}catch{}s=o},now(){return We()}},t&&t.on(Re,(o,i)=>{o===this.plugin.id&&this.fallbacks.setSettings(i)}),this.proxiedOn=new Proxy({},{get:(o,i)=>this.target?this.target.on[i]:(...l)=>{this.onQueue.push({method:i,args:l})}}),this.proxiedTarget=new Proxy({},{get:(o,i)=>this.target?this.target[i]:i==="on"?this.proxiedOn:Object.keys(this.fallbacks).includes(i)?(...l)=>(this.targetQueue.push({method:i,args:l,resolve:()=>{}}),this.fallbacks[i](...l)):(...l)=>new Promise(f=>{this.targetQueue.push({method:i,args:l,resolve:f})})})}async setRealTarget(n){this.target=n;for(const t of this.onQueue)this.target.on[t.method](...t.args);for(const t of this.targetQueue)t.resolve(await this.target[t.method](...t.args))}}function qe(e,n){const t=e,r=de(),a=$e(),s=Fe&&t.enableEarlyProxy;if(a&&(r.__VUE_DEVTOOLS_PLUGIN_API_AVAILABLE__||!s))a.emit(Ge,e,n);else{const o=s?new He(t,a):null;(r.__VUE_DEVTOOLS_PLUGINS__=r.__VUE_DEVTOOLS_PLUGINS__||[]).push({pluginDescriptor:t,setupFn:n,proxy:o}),o&&n(o.proxiedTarget)}}function Qe(e,n){const t=`▲ ■ ●${e}`;typeof __VUE_DEVTOOLS_TOAST__=="function"?__VUE_DEVTOOLS_TOAST__(t,n):n==="error"?console.error(t):n==="warn"?console.warn(t):console.log(t)}const me=e=>{const n={id:e.uuid,label:e.type,children:[],tags:[]};e.name!==""&&n.tags.push({label:e.name,textColor:5750629,backgroundColor:15793395});const t=le(e);return t>0&&n.tags.push({label:`${Ve(t)} KB`,textColor:15707189,backgroundColor:16775644,tooltip:"Memory usage"}),e.type.includes("Light")&&(n.tags.push({label:`${e.intensity}`,textColor:9738662,backgroundColor:16316922,tooltip:"Intensity"}),n.tags.push({label:`#${e.color.getHexString()}`,textColor:9738662,backgroundColor:16316922,tooltip:"Color"})),e.type.includes("Camera")&&(n.tags.push({label:`${e.fov}°`,textColor:9738662,backgroundColor:16316922,tooltip:"Field of view"}),n.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"})),n};function pe(e,n){e.children.forEach(t=>{if(t.type==="HightlightMesh")return;const r=me(t);n.children.push(r),pe(t,r)})}const Ye=[],x="tres:inspector",Je=u.reactive({sceneGraph:null});function Ke(e,n){qe({id:"dev.esm.tres",label:"TresJS 🪐",logo:"https://raw.githubusercontent.com/Tresjs/tres/main/public/favicon.svg",packageName:"tresjs",homepage:"https://tresjs.org",componentStateTypes:Ye,app:e},t=>{typeof t.now!="function"&&Qe("You seem to be using an outdated version of Vue Devtools. Are you still using the Beta release instead of the stable one? You can find the links at https://devtools.vuejs.org/guide/installation.html."),t.addInspector({id:x,label:"TresJS 🪐",icon:"account_tree",treeFilterPlaceholder:"Search instances"}),setInterval(()=>{t.sendInspectorTree(x)},1e3),setInterval(()=>{t.notifyComponentUpdate()},5e3),t.on.getInspectorTree(s=>{if(s.inspectorId===x){const o=me(n.scene.value);pe(n.scene.value,o),Je.sceneGraph=o,s.rootNodes=[o]}});let r=null,a=null;t.on.getInspectorState(s=>{if(s.inspectorId===x){const[o]=n.scene.value.getObjectsByProperty("uuid",s.nodeId);if(!o)return;if(a&&r&&r.parent&&a.remove(r),o.isMesh){const i=De(o);o.add(i),r=i,a=o}s.state={object:[{key:"uuid",editable:!0,value:o.uuid},{key:"name",editable:!0,value:o.name},{key:"type",editable:!0,value:o.type},{key:"position",editable:!0,value:o.position},{key:"rotation",editable:!0,value:o.rotation},{key:"scale",editable:!0,value:o.scale},{key:"geometry",value:o.geometry},{key:"material",value:o.material},{key:"color",editable:!0,value:o.color},{key:"intensity",editable:!0,value:o.intensity},{key:"castShadow",editable:!0,value:o.castShadow},{key:"receiveShadow",editable:!0,value:o.receiveShadow},{key:"frustumCulled",editable:!0,value:o.frustumCulled},{key:"matrixAutoUpdate",editable:!0,value:o.matrixAutoUpdate},{key:"matrixWorldNeedsUpdate",editable:!0,value:o.matrixWorldNeedsUpdate},{key:"matrixWorld",value:o.matrixWorld},{key:"visible",editable:!0,value:o.visible}]}}}),t.on.editInspectorState(s=>{s.inspectorId===x&&Le(n.scene.value,s.nodeId,s.path,s.state.value)})})}const Xe=["data-scene"],ge=u.defineComponent({__name:"TresCanvas",props:{shadows:{type:Boolean,default:void 0},clearColor:{},toneMapping:{},shadowMapType:{},useLegacyLights:{type:Boolean,default:void 0},outputColorSpace:{},toneMappingExposure:{},camera:{},preset:{},windowSize:{type:Boolean,default:void 0},disableRender:{type:Boolean,default:void 0},context:{},precision:{},alpha:{type:Boolean,default:void 0},premultipliedAlpha:{type:Boolean},antialias:{type:Boolean,default:void 0},stencil:{type:Boolean,default:void 0},preserveDrawingBuffer:{type:Boolean,default:void 0},powerPreference:{},depth:{type:Boolean,default:void 0},logarithmicDepthBuffer:{type:Boolean,default:void 0},failIfMajorPerformanceCaveat:{type:Boolean,default:void 0}},setup(e,{expose:n}){var M;const t=e,{logWarning:r}=D(),a=u.ref(),s=u.shallowRef(new v.Scene),{resume:o}=G(),i=u.useSlots(),l=(M=u.getCurrentInstance())==null?void 0:M.appContext.app,f=m=>u.defineComponent({setup(){var h;const C=(h=u.getCurrentInstance())==null?void 0:h.appContext;return C&&(C.app=l),u.provide("useTres",m),u.provide("extend",U),typeof window<"u"&&Ke(C.app,m),()=>u.h(u.Fragment,null,i!=null&&i.default?i.default():[])}}),p=m=>{const C=f(m);Ue(u.h(C),s.value)},d=(m,C=!1)=>{s.value.children=[],C&&(m.renderer.value.dispose(),m.renderer.value.renderLists.dispose(),m.renderer.value.forceContextLoss()),p(m),o()},c=u.computed(()=>t.disableRender),_=u.shallowRef(null);return n({context:_,dispose:()=>d(_.value,!0)}),u.onMounted(()=>{const m=a;_.value=ue({scene:s.value,canvas:m,windowSize:t.windowSize,disableRender:c,rendererOptions:t}),ie({scene:s.value,contextParts:_.value});const{registerCamera:C,camera:h,cameras:k,deregisterCamera:O}=_.value;p(_.value);const A=()=>{const P=new v.PerspectiveCamera(45,window.innerWidth/window.innerHeight,.1,1e3);P.position.set(3,3,3),P.lookAt(0,0,0),C(P);const L=u.watchEffect(()=>{k.value.length>=2&&(P.removeFromParent(),O(P),L==null||L())})};u.watch(()=>t.camera,(P,L)=>{P&&C(P),L&&(L.removeFromParent(),O(L))},{immediate:!0}),h.value||(r("No camera found. Creating a default perspective camera. To have full control over a camera, please add one to the scene."),A())}),(m,C)=>(u.openBlock(),u.createElementBlock("canvas",{ref_key:"canvas",ref:a,"data-scene":s.value.uuid,class:u.normalizeClass(m.$attrs.class),style:u.normalizeStyle({display:"block",width:"100%",height:"100%",position:m.windowSize?"fixed":"relative",top:0,left:0,pointerEvents:"auto",touchAction:"none",...m.$attrs.style})},null,14,Xe))}}),Ze=["TresCanvas","TresLeches","TresScene"],et={template:{compilerOptions:{isCustomElement:e=>e.startsWith("Tres")&&!Ze.includes(e)||e==="primitive"}}},tt={install(e){e.component("TresCanvas",ge)}};g.TresCanvas=ge,g.catalogue=N,g.default=tt,g.extend=U,g.isProd=_e,g.normalizeColor=X,g.normalizeVectorFlexibleParam=be,g.templateCompilerOptions=et,g.trasverseObjects=ae,g.useCamera=Q,g.useLoader=xe,g.useLogger=D,g.usePointerEventHandler=ie,g.useRaycaster=se,g.useRenderLoop=G,g.useRenderer=ne,g.useSeek=je,g.useTexture=Be,g.useTres=Ie,g.useTresContext=ce,g.useTresContextProvider=ue,Object.defineProperties(g,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
|
package/dist/types/index.d.ts
CHANGED
|
@@ -107,7 +107,7 @@ export interface EventHandlers {
|
|
|
107
107
|
onWheel?: (event: ThreeEvent<WheelEvent>) => void;
|
|
108
108
|
}
|
|
109
109
|
interface MathRepresentation {
|
|
110
|
-
set(...args: number[]): any;
|
|
110
|
+
set(...args: number[] | [THREE.ColorRepresentation]): any;
|
|
111
111
|
}
|
|
112
112
|
interface VectorRepresentation extends MathRepresentation {
|
|
113
113
|
setScalar(s: number): any;
|
package/dist/utils/index.d.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { MeshBasicMaterial } from 'three';
|
|
2
|
+
import type { Mesh, type Scene, type Object3D } from 'three';
|
|
1
3
|
export declare function toSetMethodName(key: string): string;
|
|
2
4
|
export declare const merge: (target: any, source: any) => any;
|
|
3
5
|
export declare const isHTMLTag: (key: string) => boolean;
|
|
@@ -13,3 +15,8 @@ export declare function deepArrayEqual(arr1: any[], arr2: any[]): boolean;
|
|
|
13
15
|
* TypeSafe version of Array.isArray
|
|
14
16
|
*/
|
|
15
17
|
export declare const isArray: (a: any) => a is any[] | readonly any[];
|
|
18
|
+
export declare function editSceneObject(scene: Scene, objectUuid: string, propertyPath: string[], value: any): void;
|
|
19
|
+
export declare function createHighlightMaterial(): MeshBasicMaterial;
|
|
20
|
+
export declare function animateHighlight(highlightMesh: Mesh, startTime: number): void;
|
|
21
|
+
export declare function stopHighlightAnimation(): void;
|
|
22
|
+
export declare function createHighlightMesh(object: Object3D): Mesh;
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tresjs/core",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "
|
|
4
|
+
"version": "4.0.0-next.0",
|
|
5
5
|
"packageManager": "pnpm@8.10.2",
|
|
6
6
|
"description": "Declarative ThreeJS using Vue Components",
|
|
7
7
|
"author": "Alvaro Saburido <hola@alvarosaburido.dev> (https://github.com/alvarosabu/)",
|