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