@tresjs/core 4.3.6 → 5.0.0-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/components/TresCanvas.vue.d.ts +70 -64
- package/dist/src/composables/index.d.ts +6 -12
- package/dist/src/composables/useCamera/index.d.ts +42 -8555
- package/dist/src/composables/useCreateRafLoop/index.d.ts +14 -0
- package/dist/src/composables/useEventManager/index.d.ts +10 -0
- package/dist/src/composables/useGraph/index.d.ts +3 -0
- package/dist/src/composables/useLoader/component.vue.d.ts +31 -17
- package/dist/src/composables/useLoader/index.d.ts +44 -37
- package/dist/src/composables/useLoop/index.d.ts +13 -16
- package/dist/src/composables/useRenderer/pixelRatio.d.ts +4 -0
- package/dist/src/composables/useRenderer/useRendererManager.d.ts +194 -0
- package/dist/src/composables/useTres/index.d.ts +37 -0
- package/dist/src/composables/useTresContextProvider/index.d.ts +14 -64
- package/dist/src/devtools/inspectorHandlers.d.ts +60 -0
- package/dist/src/devtools/plugin.d.ts +3 -8
- package/dist/src/devtools/setupDevtools.d.ts +14 -0
- package/dist/src/devtools/types.d.ts +90 -0
- package/dist/src/index.d.ts +4 -1
- package/dist/src/types/index.d.ts +13 -69
- package/dist/src/utils/array.d.ts +6 -0
- package/dist/src/utils/createPriorityEventHook.d.ts +4 -6
- package/dist/src/utils/graph.d.ts +15 -0
- package/dist/src/utils/index.d.ts +2 -34
- package/dist/src/utils/is/dom.d.ts +1 -0
- package/dist/src/utils/is/index.d.ts +4 -0
- package/dist/src/utils/is/three.d.ts +162 -0
- package/dist/src/utils/is/tres.d.ts +70 -0
- package/dist/src/utils/is/typed.d.ts +1 -0
- package/dist/src/utils/is/util.d.ts +1 -0
- package/dist/src/utils/logger.d.ts +25 -0
- package/dist/src/utils/makeMap.d.ts +9 -0
- package/dist/src/utils/perf.d.ts +1 -0
- package/dist/src/utils/pointerEvents.d.ts +10 -0
- package/dist/src/utils/string.d.ts +1 -0
- package/dist/src/utils/three.d.ts +9 -0
- package/dist/tres.js +5281 -1479
- package/package.json +40 -19
- package/dist/src/composables/useLogger.d.ts +0 -11
- package/dist/src/composables/useRaycaster/index.d.ts +0 -16
- package/dist/src/composables/useRenderLoop/index.d.ts +0 -17
- package/dist/src/composables/useRenderer/const.d.ts +0 -18
- package/dist/src/composables/useRenderer/index.d.ts +0 -91
- package/dist/src/composables/useSeek/index.d.ts +0 -20
- package/dist/src/composables/useTexture/component.vue.d.ts +0 -29
- package/dist/src/composables/useTexture/index.d.ts +0 -103
- package/dist/src/composables/useTresEventManager/index.d.ts +0 -25
- package/dist/src/composables/useTresReady/createReadyEventHook/index.d.ts +0 -4
- package/dist/src/composables/useTresReady/index.d.ts +0 -7
- package/dist/src/core/loop.d.ts +0 -38
- package/dist/src/utils/is.d.ts +0 -36
- package/dist/tres.umd.cjs +0 -8
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tresjs/core",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "
|
|
4
|
+
"version": "5.0.0-alpha.1",
|
|
5
5
|
"packageManager": "pnpm@10.6.3",
|
|
6
6
|
"description": "Declarative ThreeJS using Vue Components",
|
|
7
7
|
"author": "Alvaro Saburido <hola@alvarosaburido.dev> (https://github.com/alvarosabu/)",
|
|
@@ -22,7 +22,8 @@
|
|
|
22
22
|
".": {
|
|
23
23
|
"types": "./dist/index.d.ts",
|
|
24
24
|
"import": "./dist/tres.js",
|
|
25
|
-
"require": "./dist/tres.
|
|
25
|
+
"require": "./dist/tres.js",
|
|
26
|
+
"default": "./dist/tres.js"
|
|
26
27
|
},
|
|
27
28
|
"./components": {
|
|
28
29
|
"types": "./dist/src/components/index.d.ts"
|
|
@@ -59,27 +60,31 @@
|
|
|
59
60
|
"coverage": "vitest run --coverage",
|
|
60
61
|
"lint": "eslint .",
|
|
61
62
|
"lint:fix": "eslint . --fix",
|
|
62
|
-
"
|
|
63
|
-
"docs:
|
|
64
|
-
"docs:
|
|
65
|
-
"docs:
|
|
66
|
-
"docs:
|
|
63
|
+
"typecheck": "vue-tsc --noEmit",
|
|
64
|
+
"docs:dev": "pnpm --filter='./docs' dev",
|
|
65
|
+
"docs:generate": "pnpm --filter='./docs' generate",
|
|
66
|
+
"docs:prepare": "pnpm --filter='./docs' prepare",
|
|
67
|
+
"docs:lint": "pnpm --filter='./docs' lint",
|
|
68
|
+
"docs:typecheck": "pnpm --filter='./docs' typecheck",
|
|
69
|
+
"postinstall": "pnpm run build && pnpm --filter='./docs' prepare"
|
|
67
70
|
},
|
|
68
71
|
"peerDependencies": {
|
|
69
72
|
"three": ">=0.133",
|
|
70
73
|
"vue": ">=3.4"
|
|
71
74
|
},
|
|
72
75
|
"dependencies": {
|
|
73
|
-
"@
|
|
74
|
-
"@vue/devtools-api": "^
|
|
75
|
-
"@vueuse/core": "^12.5.0"
|
|
76
|
+
"@pmndrs/pointer-events": "^6.6.17",
|
|
77
|
+
"@vue/devtools-api": "^7.7.2",
|
|
78
|
+
"@vueuse/core": "^12.5.0",
|
|
79
|
+
"radashi": "^12.6.0"
|
|
76
80
|
},
|
|
77
81
|
"devDependencies": {
|
|
78
82
|
"@release-it/conventional-changelog": "^10.0.0",
|
|
79
83
|
"@stackblitz/sdk": "^1.11.0",
|
|
80
|
-
"@tresjs/cientos": "
|
|
84
|
+
"@tresjs/cientos": "5.0.0-next.0",
|
|
81
85
|
"@tresjs/eslint-config": "^1.4.0",
|
|
82
|
-
"@
|
|
86
|
+
"@tresjs/leches": "1.0.0-next.0",
|
|
87
|
+
"@types/three": "^0.177.0",
|
|
83
88
|
"@typescript-eslint/eslint-plugin": "^8.23.0",
|
|
84
89
|
"@typescript-eslint/parser": "^8.23.0",
|
|
85
90
|
"@vitejs/plugin-vue": "^5.2.1",
|
|
@@ -100,19 +105,35 @@
|
|
|
100
105
|
"rollup-plugin-copy": "^3.5.0",
|
|
101
106
|
"rollup-plugin-visualizer": "^5.14.0",
|
|
102
107
|
"sponsorkit": "^16.3.0",
|
|
103
|
-
"three": "^0.
|
|
108
|
+
"three": "^0.179.1",
|
|
104
109
|
"unocss": "^65.4.3",
|
|
105
110
|
"unplugin": "^2.1.2",
|
|
106
111
|
"unplugin-vue-components": "^28.0.0",
|
|
107
|
-
"vite": "^
|
|
112
|
+
"vite": "^7.1.3",
|
|
108
113
|
"vite-plugin-banner": "^0.8.0",
|
|
109
|
-
"vite-plugin-dts": "4.5.
|
|
110
|
-
"vite-plugin-inspect": "^
|
|
114
|
+
"vite-plugin-dts": "4.5.4",
|
|
115
|
+
"vite-plugin-inspect": "^11.3.3",
|
|
111
116
|
"vite-plugin-require-transform": "^1.0.21",
|
|
112
117
|
"vite-svg-loader": "^5.1.0",
|
|
113
118
|
"vitepress": "1.6.3",
|
|
114
|
-
"vitest": "3.
|
|
115
|
-
"vue": "3.5.
|
|
116
|
-
"vue-demi": "^0.14.10"
|
|
119
|
+
"vitest": "3.2.4",
|
|
120
|
+
"vue": "3.5.20",
|
|
121
|
+
"vue-demi": "^0.14.10",
|
|
122
|
+
"vue-tsc": "^3.0.6"
|
|
123
|
+
},
|
|
124
|
+
"pnpm": {
|
|
125
|
+
"onlyBuiltDependencies": [
|
|
126
|
+
"better-sqlite3"
|
|
127
|
+
],
|
|
128
|
+
"ignoredBuiltDependencies": [
|
|
129
|
+
"vue-demi"
|
|
130
|
+
],
|
|
131
|
+
"overrides": {
|
|
132
|
+
"vue": "^3.5.13",
|
|
133
|
+
"vue-router": "^4.5.0"
|
|
134
|
+
}
|
|
135
|
+
},
|
|
136
|
+
"resolutions": {
|
|
137
|
+
"unimport": "4.1.1"
|
|
117
138
|
}
|
|
118
139
|
}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
export declare const isProd: boolean;
|
|
2
|
-
type OneOrMore<T> = {
|
|
3
|
-
0: T;
|
|
4
|
-
} & Array<T>;
|
|
5
|
-
interface LoggerComposition {
|
|
6
|
-
logError: (...args: OneOrMore<any>) => void;
|
|
7
|
-
logWarning: (...args: OneOrMore<any>) => void;
|
|
8
|
-
logMessage: (name: string, value: any) => void;
|
|
9
|
-
}
|
|
10
|
-
export declare function useLogger(): LoggerComposition;
|
|
11
|
-
export {};
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { TresEvent, TresInstance } from 'src/types';
|
|
2
|
-
import { Intersection, Object3D, Object3DEventMap } from 'three';
|
|
3
|
-
import { ShallowRef } from 'vue';
|
|
4
|
-
import { TresContext } from '../useTresContextProvider';
|
|
5
|
-
export declare const useRaycaster: (objectsWithEvents: ShallowRef<TresInstance[]>, ctx: TresContext) => {
|
|
6
|
-
intersects: ShallowRef<Intersection<Object3D<Object3DEventMap>>[]>;
|
|
7
|
-
onClick: (fn: (value: TresEvent) => void) => () => void;
|
|
8
|
-
onDblClick: (fn: (value: TresEvent) => void) => () => void;
|
|
9
|
-
onContextMenu: (fn: (value: TresEvent) => void) => () => void;
|
|
10
|
-
onPointerMove: (fn: (value: TresEvent) => void) => () => void;
|
|
11
|
-
onPointerUp: (fn: (value: TresEvent) => void) => () => void;
|
|
12
|
-
onPointerDown: (fn: (value: TresEvent) => void) => () => void;
|
|
13
|
-
onPointerMissed: (fn: (value: TresEvent) => void) => () => void;
|
|
14
|
-
onWheel: (fn: (value: TresEvent) => void) => () => void;
|
|
15
|
-
forceUpdate: () => void;
|
|
16
|
-
};
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { EventHookOn, Fn } from '@vueuse/core';
|
|
2
|
-
import { Ref } from 'vue';
|
|
3
|
-
import { Clock } from 'three';
|
|
4
|
-
export interface RenderLoop {
|
|
5
|
-
delta: number;
|
|
6
|
-
elapsed: number;
|
|
7
|
-
clock: Clock;
|
|
8
|
-
}
|
|
9
|
-
export interface UseRenderLoopReturn {
|
|
10
|
-
onBeforeLoop: EventHookOn<RenderLoop>;
|
|
11
|
-
onLoop: EventHookOn<RenderLoop>;
|
|
12
|
-
onAfterLoop: EventHookOn<RenderLoop>;
|
|
13
|
-
pause: Fn;
|
|
14
|
-
resume: Fn;
|
|
15
|
-
isActive: Ref<boolean>;
|
|
16
|
-
}
|
|
17
|
-
export declare const useRenderLoop: () => UseRenderLoopReturn;
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
export declare const rendererPresets: {
|
|
2
|
-
realistic: {
|
|
3
|
-
shadows: boolean;
|
|
4
|
-
physicallyCorrectLights: boolean;
|
|
5
|
-
outputColorSpace: "srgb";
|
|
6
|
-
toneMapping: 4;
|
|
7
|
-
toneMappingExposure: number;
|
|
8
|
-
shadowMap: {
|
|
9
|
-
enabled: boolean;
|
|
10
|
-
type: 2;
|
|
11
|
-
};
|
|
12
|
-
};
|
|
13
|
-
flat: {
|
|
14
|
-
toneMapping: 0;
|
|
15
|
-
toneMappingExposure: number;
|
|
16
|
-
};
|
|
17
|
-
};
|
|
18
|
-
export type RendererPresetsType = keyof typeof rendererPresets;
|
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
import { ColorSpace, Scene, ShadowMapType, ToneMapping, WebGLRendererParameters, WebGLRenderer } from 'three';
|
|
2
|
-
import { EmitEventFn, TresColor } from '../../types';
|
|
3
|
-
import { TresContext } from '../useTresContextProvider';
|
|
4
|
-
import { RendererPresetsType } from './const';
|
|
5
|
-
import { MaybeRefOrGetter } from '@vueuse/core';
|
|
6
|
-
import { MaybeRef } from 'vue';
|
|
7
|
-
type TransformToMaybeRefOrGetter<T> = {
|
|
8
|
-
[K in keyof T]: MaybeRefOrGetter<T[K]> | MaybeRefOrGetter<T[K]>;
|
|
9
|
-
};
|
|
10
|
-
export interface UseRendererOptions extends TransformToMaybeRefOrGetter<WebGLRendererParameters> {
|
|
11
|
-
/**
|
|
12
|
-
* Enable shadows in the Renderer
|
|
13
|
-
*
|
|
14
|
-
* @default false
|
|
15
|
-
*/
|
|
16
|
-
shadows?: MaybeRefOrGetter<boolean>;
|
|
17
|
-
/**
|
|
18
|
-
* Set the shadow map type
|
|
19
|
-
* Can be PCFShadowMap, PCFSoftShadowMap, BasicShadowMap, VSMShadowMap
|
|
20
|
-
* [see](https://threejs.org/docs/?q=we#api/en/constants/Renderer)
|
|
21
|
-
*
|
|
22
|
-
* @default PCFSoftShadowMap
|
|
23
|
-
*/
|
|
24
|
-
shadowMapType?: MaybeRefOrGetter<ShadowMapType>;
|
|
25
|
-
/**
|
|
26
|
-
* Whether to use physically correct lighting mode.
|
|
27
|
-
* See the [lights / physical example](https://threejs.org/examples/#webgl_lights_physical).
|
|
28
|
-
*
|
|
29
|
-
* @default false
|
|
30
|
-
* @deprecated Use {@link WebGLRenderer.useLegacyLights useLegacyLights} instead.
|
|
31
|
-
*/
|
|
32
|
-
physicallyCorrectLights?: MaybeRefOrGetter<boolean>;
|
|
33
|
-
/**
|
|
34
|
-
* Whether to use legacy lighting mode.
|
|
35
|
-
*
|
|
36
|
-
* @type {MaybeRefOrGetter<boolean>}
|
|
37
|
-
* @memberof UseRendererOptions
|
|
38
|
-
*/
|
|
39
|
-
useLegacyLights?: MaybeRefOrGetter<boolean>;
|
|
40
|
-
/**
|
|
41
|
-
* Defines the output encoding of the renderer.
|
|
42
|
-
* Can be LinearSRGBColorSpace, SRGBColorSpace
|
|
43
|
-
*
|
|
44
|
-
* @default LinearSRGBColorSpace
|
|
45
|
-
*/
|
|
46
|
-
outputColorSpace?: MaybeRefOrGetter<ColorSpace>;
|
|
47
|
-
/**
|
|
48
|
-
* Defines the tone mapping used by the renderer.
|
|
49
|
-
* Can be NoToneMapping, LinearToneMapping,
|
|
50
|
-
* ReinhardToneMapping, Uncharted2ToneMapping,
|
|
51
|
-
* CineonToneMapping, ACESFilmicToneMapping,
|
|
52
|
-
* CustomToneMapping
|
|
53
|
-
*
|
|
54
|
-
* @default ACESFilmicToneMapping
|
|
55
|
-
*/
|
|
56
|
-
toneMapping?: MaybeRefOrGetter<ToneMapping>;
|
|
57
|
-
/**
|
|
58
|
-
* Defines the tone mapping exposure used by the renderer.
|
|
59
|
-
*
|
|
60
|
-
* @default 1
|
|
61
|
-
*/
|
|
62
|
-
toneMappingExposure?: MaybeRefOrGetter<number>;
|
|
63
|
-
/**
|
|
64
|
-
* The color value to use when clearing the canvas.
|
|
65
|
-
*
|
|
66
|
-
* @default 0x000000
|
|
67
|
-
*/
|
|
68
|
-
clearColor?: MaybeRefOrGetter<TresColor>;
|
|
69
|
-
windowSize?: MaybeRefOrGetter<boolean | string>;
|
|
70
|
-
preset?: MaybeRefOrGetter<RendererPresetsType>;
|
|
71
|
-
renderMode?: MaybeRefOrGetter<'always' | 'on-demand' | 'manual'>;
|
|
72
|
-
/**
|
|
73
|
-
* A `number` sets the renderer's device pixel ratio.
|
|
74
|
-
* `[number, number]` clamp's the renderer's device pixel ratio.
|
|
75
|
-
*/
|
|
76
|
-
dpr?: MaybeRefOrGetter<number | [number, number]>;
|
|
77
|
-
}
|
|
78
|
-
export declare function useRenderer({ canvas, options, contextParts: { sizes, render, invalidate, advance }, }: {
|
|
79
|
-
canvas: MaybeRef<HTMLCanvasElement>;
|
|
80
|
-
scene: Scene;
|
|
81
|
-
options: UseRendererOptions;
|
|
82
|
-
emit: EmitEventFn;
|
|
83
|
-
contextParts: Pick<TresContext, 'sizes' | 'camera' | 'render'> & {
|
|
84
|
-
invalidate: () => void;
|
|
85
|
-
advance: () => void;
|
|
86
|
-
};
|
|
87
|
-
}): {
|
|
88
|
-
renderer: import('vue').ShallowRef<WebGLRenderer, WebGLRenderer>;
|
|
89
|
-
};
|
|
90
|
-
export type UseRendererReturn = ReturnType<typeof useRenderer>;
|
|
91
|
-
export {};
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import { Object3D, Scene } from 'three';
|
|
2
|
-
/**
|
|
3
|
-
* Seek composable return type
|
|
4
|
-
*
|
|
5
|
-
* @export
|
|
6
|
-
* @interface UseSeekReturn
|
|
7
|
-
*/
|
|
8
|
-
export interface UseSeekReturn {
|
|
9
|
-
seek: (parent: Scene | Object3D, property: string, value: string) => Object3D | null;
|
|
10
|
-
seekByName: (parent: Scene | Object3D, value: string) => Object3D | null;
|
|
11
|
-
seekAll: (parent: Scene | Object3D, property: string, value: string) => Object3D[];
|
|
12
|
-
seekAllByName: (parent: Scene | Object3D, value: string) => Object3D[];
|
|
13
|
-
}
|
|
14
|
-
/**
|
|
15
|
-
* Composable that provides utilities to easily traverse and navigate through complex scenes and object children graphs
|
|
16
|
-
*
|
|
17
|
-
* @export
|
|
18
|
-
* @return {*} {UseSeekReturn}
|
|
19
|
-
*/
|
|
20
|
-
export declare function useSeek(): UseSeekReturn;
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import { PBRUseTextureMap } from './index';
|
|
2
|
-
declare function __VLS_template(): {
|
|
3
|
-
attrs: Partial<{}>;
|
|
4
|
-
slots: {
|
|
5
|
-
default?(_: {
|
|
6
|
-
textures: {
|
|
7
|
-
map: import('three').Texture;
|
|
8
|
-
displacementMap: import('three').Texture;
|
|
9
|
-
normalMap: import('three').Texture;
|
|
10
|
-
roughnessMap: import('three').Texture;
|
|
11
|
-
metalnessMap: import('three').Texture;
|
|
12
|
-
aoMap: import('three').Texture;
|
|
13
|
-
alphaMap: import('three').Texture;
|
|
14
|
-
matcap: import('three').Texture;
|
|
15
|
-
};
|
|
16
|
-
}): any;
|
|
17
|
-
};
|
|
18
|
-
refs: {};
|
|
19
|
-
rootEl: any;
|
|
20
|
-
};
|
|
21
|
-
type __VLS_TemplateResult = ReturnType<typeof __VLS_template>;
|
|
22
|
-
declare const __VLS_component: import('vue').DefineComponent<PBRUseTextureMap, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<PBRUseTextureMap> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
|
|
23
|
-
declare const _default: __VLS_WithTemplateSlots<typeof __VLS_component, __VLS_TemplateResult["slots"]>;
|
|
24
|
-
export default _default;
|
|
25
|
-
type __VLS_WithTemplateSlots<T, S> = T & {
|
|
26
|
-
new (): {
|
|
27
|
-
$slots: S;
|
|
28
|
-
};
|
|
29
|
-
};
|
|
@@ -1,103 +0,0 @@
|
|
|
1
|
-
import { Texture } from 'three';
|
|
2
|
-
export interface PBRMaterialOptions {
|
|
3
|
-
/**
|
|
4
|
-
* List of texture maps to load.
|
|
5
|
-
*
|
|
6
|
-
* @type {string[]}
|
|
7
|
-
* @memberof PBRMaterialOptions
|
|
8
|
-
*/
|
|
9
|
-
maps: string[];
|
|
10
|
-
/**
|
|
11
|
-
* Path to the texture maps.
|
|
12
|
-
*
|
|
13
|
-
* @type {('png' | 'jpg')}
|
|
14
|
-
* @memberof PBRMaterialOptions
|
|
15
|
-
*/
|
|
16
|
-
ext: 'png' | 'jpg';
|
|
17
|
-
}
|
|
18
|
-
export interface PBRTextureMaps {
|
|
19
|
-
[key: string]: Texture | null;
|
|
20
|
-
}
|
|
21
|
-
/**
|
|
22
|
-
* Map of textures to load that can be passed to `useTexture()`.
|
|
23
|
-
*/
|
|
24
|
-
export interface PBRUseTextureMap {
|
|
25
|
-
map?: string;
|
|
26
|
-
displacementMap?: string;
|
|
27
|
-
normalMap?: string;
|
|
28
|
-
roughnessMap?: string;
|
|
29
|
-
metalnessMap?: string;
|
|
30
|
-
aoMap?: string;
|
|
31
|
-
alphaMap?: string;
|
|
32
|
-
matcap?: string;
|
|
33
|
-
}
|
|
34
|
-
/**
|
|
35
|
-
* Loads a single texture.
|
|
36
|
-
*
|
|
37
|
-
* ```ts
|
|
38
|
-
* import { useTexture } from 'tres'
|
|
39
|
-
*
|
|
40
|
-
* const matcapTexture = await useTexture(['path/to/texture.png'])
|
|
41
|
-
* ```
|
|
42
|
-
* Then you can use the texture in your material.
|
|
43
|
-
*
|
|
44
|
-
* ```vue
|
|
45
|
-
* <TresMeshMatcapMaterial :matcap="matcapTexture" />
|
|
46
|
-
* ```
|
|
47
|
-
* @see https://tresjs.org/examples/load-textures.html
|
|
48
|
-
* @export
|
|
49
|
-
* @param paths
|
|
50
|
-
* @return A promise of the resulting texture
|
|
51
|
-
*/
|
|
52
|
-
export declare function useTexture(paths: readonly [string]): Promise<Texture>;
|
|
53
|
-
/**
|
|
54
|
-
* Loads multiple textures.
|
|
55
|
-
*
|
|
56
|
-
* ```ts
|
|
57
|
-
* import { useTexture } from 'tres'
|
|
58
|
-
*
|
|
59
|
-
* const [texture1, texture2] = await useTexture([
|
|
60
|
-
* 'path/to/texture1.png',
|
|
61
|
-
* 'path/to/texture2.png',
|
|
62
|
-
* ])
|
|
63
|
-
* ```
|
|
64
|
-
* Then you can use the texture in your material.
|
|
65
|
-
*
|
|
66
|
-
* ```vue
|
|
67
|
-
* <TresMeshStandardMaterial map="texture1" />
|
|
68
|
-
* ```
|
|
69
|
-
* @see https://tresjs.org/examples/load-textures.html
|
|
70
|
-
* @export
|
|
71
|
-
* @param paths
|
|
72
|
-
* @return A promise of the resulting textures
|
|
73
|
-
*/
|
|
74
|
-
export declare function useTexture<T extends string[]>(paths: [...T]): Promise<{
|
|
75
|
-
[K in keyof T]: Texture;
|
|
76
|
-
}>;
|
|
77
|
-
/**
|
|
78
|
-
* Loads a PBR texture map.
|
|
79
|
-
*
|
|
80
|
-
* ```ts
|
|
81
|
-
* import { useTexture } from 'tres'
|
|
82
|
-
*
|
|
83
|
-
* const pbrTexture = await useTexture({
|
|
84
|
-
* map: 'path/to/texture.png',
|
|
85
|
-
* displacementMap: 'path/to/displacement-map.png',
|
|
86
|
-
* roughnessMap: 'path/to/roughness-map.png',
|
|
87
|
-
* normalMap: 'path/to/normal-map.png',
|
|
88
|
-
* ambientOcclusionMap: 'path/to/ambient-occlusion-map.png',
|
|
89
|
-
* })
|
|
90
|
-
* ```
|
|
91
|
-
* Then you can use the texture in your material.
|
|
92
|
-
*
|
|
93
|
-
* ```vue
|
|
94
|
-
* <TresMeshStandardMaterial v-bind="pbrTexture" />
|
|
95
|
-
* ```
|
|
96
|
-
* @see https://tresjs.org/examples/load-textures.html
|
|
97
|
-
* @export
|
|
98
|
-
* @param paths
|
|
99
|
-
* @return A promise of the resulting pbr texture map
|
|
100
|
-
*/
|
|
101
|
-
export declare function useTexture<TextureMap extends PBRUseTextureMap>(paths: TextureMap): Promise<{
|
|
102
|
-
[K in keyof Required<PBRUseTextureMap>]: K extends keyof TextureMap ? Texture : null;
|
|
103
|
-
}>;
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import { EmitEventFn } from 'src/types';
|
|
2
|
-
import { Scene } from 'three';
|
|
3
|
-
import { TresContext } from '../useTresContextProvider';
|
|
4
|
-
export interface TresEventManager {
|
|
5
|
-
/**
|
|
6
|
-
* Forces the event system to refire events with the previous mouse event
|
|
7
|
-
*/
|
|
8
|
-
forceUpdate: () => void;
|
|
9
|
-
/**
|
|
10
|
-
* pointer-missed events by definition are fired when the pointer missed every object in the scene
|
|
11
|
-
* So we need to track them separately
|
|
12
|
-
* Note: These are used in nodeOps
|
|
13
|
-
*/
|
|
14
|
-
registerObject: (object: unknown) => void;
|
|
15
|
-
deregisterObject: (object: unknown) => void;
|
|
16
|
-
registerPointerMissedObject: (object: unknown) => void;
|
|
17
|
-
deregisterPointerMissedObject: (object: unknown) => void;
|
|
18
|
-
}
|
|
19
|
-
export declare function useTresEventManager(scene: Scene, context: TresContext, emit: EmitEventFn): {
|
|
20
|
-
forceUpdate: () => void;
|
|
21
|
-
registerObject: (maybeTresObject: unknown) => void;
|
|
22
|
-
deregisterObject: (maybeTresObject: unknown) => void;
|
|
23
|
-
registerPointerMissedObject: (maybeTresObject: unknown) => void;
|
|
24
|
-
deregisterPointerMissedObject: (maybeTresObject: unknown) => void;
|
|
25
|
-
};
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import { TresContext } from '../useTresContextProvider';
|
|
2
|
-
export declare function useTresReady(ctx?: TresContext): import('@vueuse/core').EventHook<TresContext> & {
|
|
3
|
-
cancel: () => void;
|
|
4
|
-
};
|
|
5
|
-
export declare function onTresReady(fn: (ctx: TresContext) => void): {
|
|
6
|
-
off: () => void;
|
|
7
|
-
} | undefined;
|
package/dist/src/core/loop.d.ts
DELETED
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import { Fn } from '@vueuse/core';
|
|
2
|
-
import { Camera, EventDispatcher, Raycaster, Scene, WebGLRenderer, Clock } from 'three';
|
|
3
|
-
import { Ref } from 'vue';
|
|
4
|
-
export type LoopStage = 'before' | 'render' | 'after';
|
|
5
|
-
export interface LoopCallback {
|
|
6
|
-
delta: number;
|
|
7
|
-
elapsed: number;
|
|
8
|
-
clock: Clock;
|
|
9
|
-
}
|
|
10
|
-
export interface LoopCallbackWithCtx extends LoopCallback {
|
|
11
|
-
camera: Camera;
|
|
12
|
-
scene: Scene;
|
|
13
|
-
renderer: WebGLRenderer;
|
|
14
|
-
raycaster: Raycaster;
|
|
15
|
-
controls: Ref<(EventDispatcher<object> & {
|
|
16
|
-
enabled: boolean;
|
|
17
|
-
}) | null>;
|
|
18
|
-
invalidate: Fn;
|
|
19
|
-
advance: Fn;
|
|
20
|
-
}
|
|
21
|
-
export type LoopCallbackFn = (params: LoopCallbackWithCtx) => void;
|
|
22
|
-
export interface RendererLoop {
|
|
23
|
-
loopId: string;
|
|
24
|
-
register: (callback: LoopCallbackFn, stage: LoopStage, index?: number) => {
|
|
25
|
-
off: Fn;
|
|
26
|
-
};
|
|
27
|
-
start: Fn;
|
|
28
|
-
stop: Fn;
|
|
29
|
-
pause: Fn;
|
|
30
|
-
resume: Fn;
|
|
31
|
-
pauseRender: Fn;
|
|
32
|
-
resumeRender: Fn;
|
|
33
|
-
isActive: Ref<boolean>;
|
|
34
|
-
isRenderPaused: Ref<boolean>;
|
|
35
|
-
setContext: (newContext: Record<string, any>) => void;
|
|
36
|
-
setReady: (isReady: boolean) => void;
|
|
37
|
-
}
|
|
38
|
-
export declare function createRenderLoop(): RendererLoop;
|
package/dist/src/utils/is.d.ts
DELETED
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
import { TresObject, TresPrimitive } from 'src/types';
|
|
2
|
-
import { BufferGeometry, Camera, Color, ColorRepresentation, Fog, Light, Material, Object3D, Scene, Layers } from 'three';
|
|
3
|
-
export declare function und(u: unknown): u is undefined;
|
|
4
|
-
export declare function arr(u: unknown): u is Array<unknown>;
|
|
5
|
-
export declare function num(u: unknown): u is number;
|
|
6
|
-
export declare function str(u: unknown): u is string;
|
|
7
|
-
export declare function bool(u: unknown): u is boolean;
|
|
8
|
-
export declare function fun(u: unknown): u is (...args: any[]) => any;
|
|
9
|
-
export declare function obj(u: unknown): u is Record<string | number | symbol, unknown>;
|
|
10
|
-
export declare function object3D(u: unknown): u is Object3D;
|
|
11
|
-
export declare function color(u: unknown): u is Color;
|
|
12
|
-
export declare function colorRepresentation(u: unknown): u is ColorRepresentation;
|
|
13
|
-
interface VectorLike {
|
|
14
|
-
set: (...args: any[]) => void;
|
|
15
|
-
constructor?: (...args: any[]) => any;
|
|
16
|
-
}
|
|
17
|
-
export declare function vectorLike(u: unknown): u is VectorLike;
|
|
18
|
-
interface Copyable {
|
|
19
|
-
copy: (...args: any[]) => void;
|
|
20
|
-
constructor?: (...args: any[]) => any;
|
|
21
|
-
}
|
|
22
|
-
export declare function copyable(u: unknown): u is Copyable;
|
|
23
|
-
interface ClassInstance {
|
|
24
|
-
constructor?: (...args: any[]) => any;
|
|
25
|
-
}
|
|
26
|
-
export declare function classInstance(object: unknown): object is ClassInstance;
|
|
27
|
-
export declare function layers(u: unknown): u is Layers;
|
|
28
|
-
export declare function camera(u: unknown): u is Camera;
|
|
29
|
-
export declare function bufferGeometry(u: unknown): u is BufferGeometry;
|
|
30
|
-
export declare function material(u: unknown): u is Material;
|
|
31
|
-
export declare function light(u: unknown): u is Light;
|
|
32
|
-
export declare function fog(u: unknown): u is Fog;
|
|
33
|
-
export declare function scene(u: unknown): u is Scene;
|
|
34
|
-
export declare function tresObject(u: unknown): u is TresObject;
|
|
35
|
-
export declare function tresPrimitive(u: unknown): u is TresPrimitive;
|
|
36
|
-
export {};
|
package/dist/tres.umd.cjs
DELETED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* name: @tresjs/core
|
|
3
|
-
* version: v4.3.6
|
|
4
|
-
* (c) 2025
|
|
5
|
-
* description: Declarative ThreeJS using Vue Components
|
|
6
|
-
* author: Alvaro Saburido <hola@alvarosaburido.dev> (https://github.com/alvarosabu/)
|
|
7
|
-
*/
|
|
8
|
-
(function(w,f){typeof exports=="object"&&typeof module<"u"?f(exports,require("vue"),require("three"),require("@vueuse/core")):typeof define=="function"&&define.amd?define(["exports","vue","three","@vueuse/core"],f):(w=typeof globalThis<"u"?globalThis:w||self,f(w.tres={},w.Vue,w.Three,w.VueUseCore))})(this,function(w,f,v,M){"use strict";var Dn=Object.defineProperty;var Tn=(w,f,v)=>f in w?Dn(w,f,{enumerable:!0,configurable:!0,writable:!0,value:v}):w[f]=v;var _e=(w,f,v)=>Tn(w,typeof f!="symbol"?f+"":f,v);function dt(e){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const n in e)if(n!=="default"){const r=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(t,n,r.get?r:{enumerable:!0,get:()=>e[n]})}}return t.default=e,Object.freeze(t)}const we=dt(v),pt={name:"@tresjs/core",type:"module",version:"4.3.6",packageManager:"pnpm@10.6.3",description:"Declarative ThreeJS using Vue Components",author:"Alvaro Saburido <hola@alvarosaburido.dev> (https://github.com/alvarosabu/)",license:"MIT",repository:{type:"git",url:"git+https://github.com/Tresjs/tres.git"},keywords:["vue","3d","threejs","three","threejs-vue"],sideEffects:!1,exports:{".":{types:"./dist/index.d.ts",import:"./dist/tres.js",require:"./dist/tres.umd.cjs"},"./components":{types:"./dist/src/components/index.d.ts"},"./composables":{types:"./dist/src/composables/index.d.ts"},"./types":{types:"./dist/src/types/index.d.ts"},"./utils":{types:"./dist/src/utils/index.d.ts"},"./*":"./*"},main:"./dist/tres.js",module:"./dist/tres.js",types:"./dist/index.d.ts",files:["*.d.ts","dist"],publishConfig:{access:"public"},scripts:{dev:"pnpm --filter='./playground/vue' dev","dev:nuxt":"pnpm --filter='./playground/nuxt' dev",build:"vite build",test:"vitest","test:ci":"vitest run","test:ui":"vitest --ui --coverage.enabled=true",release:"release-it",coverage:"vitest run --coverage",lint:"eslint .","lint:fix":"eslint . --fix","docs:dev":"vitepress dev docs","docs:build":"vitepress build docs","docs:serve":"vitepress serve docs","docs:preview":"vitepress preview docs","docs:contributors":"esno scripts/update-contributors.ts"},peerDependencies:{three:">=0.133",vue:">=3.4"},dependencies:{"@alvarosabu/utils":"^3.2.0","@vue/devtools-api":"^6.6.3","@vueuse/core":"^12.5.0"},devDependencies:{"@release-it/conventional-changelog":"^10.0.0","@stackblitz/sdk":"^1.11.0","@tresjs/cientos":"4.1.0","@tresjs/eslint-config":"^1.4.0","@types/three":"^0.173.0","@typescript-eslint/eslint-plugin":"^8.23.0","@typescript-eslint/parser":"^8.23.0","@vitejs/plugin-vue":"^5.2.1","@vitest/coverage-c8":"^0.33.0","@vitest/coverage-v8":"^3.0.5","@vitest/ui":"^3.0.5","@vue/test-utils":"^2.4.6",eslint:"^9.19.0","eslint-plugin-vue":"^9.32.0",esno:"^4.8.0",gsap:"^3.12.7",jsdom:"^26.0.0",kolorist:"^1.8.0",ohmyfetch:"^0.4.21",pathe:"^2.0.2","release-it":"^18.1.2","rollup-plugin-analyzer":"^4.0.0","rollup-plugin-copy":"^3.5.0","rollup-plugin-visualizer":"^5.14.0",sponsorkit:"^16.3.0",three:"^0.173.0",unocss:"^65.4.3",unplugin:"^2.1.2","unplugin-vue-components":"^28.0.0",vite:"^6.1.0","vite-plugin-banner":"^0.8.0","vite-plugin-dts":"4.5.0","vite-plugin-inspect":"^10.1.0","vite-plugin-require-transform":"^1.0.21","vite-svg-loader":"^5.1.0",vitepress:"1.6.3",vitest:"3.0.5",vue:"3.5.13","vue-demi":"^0.14.10"}};function be(e){const t={nodes:{},materials:{}};return e&&e.traverse(n=>{n.name&&(t.nodes[n.name]=n),n.material&&!t.materials[n.material.name]&&(t.materials[n.material.name]=n.material)}),t}async function Ce(e,t,n,r,o){const{logError:l}=z(),s=new e;return o&&o(s),n&&n(s),await new Promise((a,c)=>{s.load(t,i=>{const d=i;d.scene&&Object.assign(d,be(d.scene)),a(d)},r,i=>{l("[useLoader] - Failed to load resource",i),c(i)})})}const mt=f.defineComponent({__name:"component",props:{loader:{},url:{}},async setup(e){let t,n;const r=e,o=([t,n]=f.withAsyncContext(()=>f.reactive(Ce(r.loader,r.url))),t=await t,n(),t);return(l,s)=>f.renderSlot(l.$slots,"default",{data:f.unref(o)})}});class ht extends we.Mesh{constructor(...n){super(...n);_e(this,"type","HightlightMesh");_e(this,"createTime");this.createTime=Date.now()}onBeforeRender(){const r=(Date.now()-this.createTime)/1e3,s=1+.07*Math.sin(2.5*r);this.scale.set(s,s,s)}}function le(e){return typeof e>"u"}function ce(e){return Array.isArray(e)}function gt(e){return typeof e=="number"}function Me(e){return typeof e=="string"}function G(e){return typeof e=="function"}function R(e){return e===Object(e)&&!ce(e)&&!G(e)}function V(e){return R(e)&&!!e.isObject3D}function Pe(e){return R(e)&&!!e.isColor}function vt(e){return e!=null&&(typeof e=="string"||typeof e=="number"||Pe(e))}function ue(e){return e!==null&&typeof e=="object"&&"set"in e&&typeof e.set=="function"}function yt(e){return ue(e)&&"copy"in e&&typeof e.copy=="function"}function _t(e){return!!(e!=null&&e.constructor)}function Se(e){return e instanceof v.Layers}function ke(e){return R(e)&&!!e.isCamera}function wt(e){return R(e)&&!!e.isBufferGeometry}function bt(e){return R(e)&&!!e.isMaterial}function Ct(e){return R(e)&&!!e.isLight}function Mt(e){return R(e)&&!!e.isFog}function Pt(e){return R(e)&&!!e.isScene}function Z(e){return V(e)||wt(e)||bt(e)||Mt(e)}function St(e){return R(e)&&!!e.isPrimitive}const Ae=(e,t)=>{for(const n of Object.keys(t))t[n]instanceof Object&&Object.assign(t[n],Ae(e[n],t[n]));return Object.assign(e||{},t),e},kt=Ot("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 Le(e){return e&&e.nodeType===1}function fe(e){return e.replace(/-([a-z])/g,(t,n)=>n.toUpperCase())}const At=/\B([A-Z])/g;function Lt(e){return e.replace(At,"-$1").toLowerCase()}function Ot(e,t){const n=Object.create(null),r=e.split(",");for(let o=0;o<r.length;o++)n[r[o]]=!0;return t?o=>!!n[o.toLowerCase()]:o=>!!n[o]}const Oe=(e,t)=>{if(!t)return;const n=Array.isArray(t)?t:t.match(/([^[.\]])+/g);return n==null?void 0:n.reduce((r,o)=>r&&r[o],e)},Dt=(e,t,n)=>{const r=Array.isArray(t)?t:t.match(/([^[.\]])+/g);r&&r.reduce((o,l,s)=>(o[l]===void 0&&(o[l]={}),s===r.length-1&&(o[l]=n),o[l]),e)};function De(e,t){if(Le(e)&&Le(t)){const o=e.attributes,l=t.attributes;return o.length!==l.length?!1:Array.from(o).every(({name:s,value:a})=>t.getAttribute(s)===a)}if(e===t)return!0;if(e===null||typeof e!="object"||t===null||typeof t!="object")return!1;const n=Object.keys(e),r=Object.keys(t);if(n.length!==r.length)return!1;for(const o of n)if(!r.includes(o)||!De(e[o],t[o]))return!1;return!0}function Tt(e,t){if(!Array.isArray(e)||!Array.isArray(t)||e.length!==t.length)return!1;for(let n=0;n<e.length;n++)if(!De(e[n],t[n]))return!1;return!0}const xt=Array.isArray;function jt(e,t,n,r){const o=c=>{if(c.uuid===t)return c;for(const i of c.children){const d=o(i);if(d)return d}},l=o(e);if(!l){console.warn("Object with UUID not found in the scene.");return}let s=l;for(let c=0;c<n.length-1;c++)if(s[n[c]]!==void 0)s=s[n[c]];else{console.warn(`Property path is not valid: ${n.join(".")}`);return}const a=n[n.length-1];s[a]!==void 0?s[a]=r:console.warn(`Property path is not valid: ${n.join(".")}`)}function Bt(e){const t=new v.MeshBasicMaterial({color:11003607,transparent:!0,opacity:.2,depthTest:!1,side:v.DoubleSide});return new ht(e.geometry.clone(),t)}function It(e){var n;let t=e.value;return e.value&&((n=e.value)!=null&&n.isMesh)&&(t=e.value.position),Array.isArray(e.value)&&(t=new v.Vector3(...t)),t}function $t(e){return"map"in e}function Te(e){$t(e)&&e.map&&e.map.dispose(),e.dispose()}function de(e){var n,r;if(e.parent&&((n=e.removeFromParent)==null||n.call(e)),delete e.__tres,[...e.children].forEach(o=>de(o)),!(e instanceof v.Scene)){const o=e;e&&((r=e.dispose)==null||r.call(e)),o.geometry&&o.geometry.dispose(),Array.isArray(o.material)?o.material.forEach(l=>Te(l)):o.material&&Te(o.material)}}function Rt(e,t){let n=0;for(let r=0;r<e.length;r++)t(e[r],r)&&(e[n]=e[r],n++);return e.length=n,e}function pe(e,t){let n=e;if(t.includes("-")){const r=t.split("-");let o=r.shift();for(;n&&r.length;)o in n?(n=n[o],o=r.shift()):o=xe(o,r.shift());return{target:n,key:xe(o,...r)}}else return{target:n,key:t}}function xe(...e){return e.map((t,n)=>n===0?t:t.charAt(0).toUpperCase()+t.slice(1)).join("")}const je=/-\d+$/;function Et(e,t,n){if(Me(n)){if(je.test(n)){const l=n.replace(je,""),{target:s,key:a}=pe(e,l);if(!Array.isArray(s[a])){const c=s[a],i=[];i.__tresDetach=()=>{i.every(d=>le(d))&&(s[a]=c)},s[a]=i}}const{target:r,key:o}=pe(e,n);t.__tres.previousAttach=r[o],r[o]=q(t)}else t.__tres.previousAttach=n(e,t)}function Ut(e,t,n){var r,o,l;if(Me(n)){const{target:s,key:a}=pe(e,n),c=t.__tres.previousAttach;c===void 0?delete s[a]:s[a]=c,"__tresDetach"in s&&s.__tresDetach()}else(o=(r=t.__tres)==null?void 0:r.previousAttach)==null||o.call(r,e,t);(l=t.__tres)==null||delete l.previousAttach}function N(e,t,n){const r=e;return r.__tres={type:"unknown",eventCount:0,root:n,handlers:{},memoizedProps:{},objects:[],parent:null,previousAttach:null,...t},r.__tres.attach||(r.isMaterial?r.__tres.attach="material":r.isBufferGeometry?r.__tres.attach="geometry":r.isFog&&(r.__tres.attach="fog")),r}function Be(e){var n;const t=(n=e==null?void 0:e.__tres)==null?void 0:n.root;t&&t.render&&t.render.canBeInvalidated.value&&t.invalidate()}function Zn(e){}function Vt(e,t,n){var o;if(!G(e.setPixelRatio))return;let r=0;if(n&&ce(n)&&n.length>=2){const[l,s]=n;r=v.MathUtils.clamp(t,l,s)}else gt(n)?r=n:r=t;r!==((o=e.getPixelRatio)==null?void 0:o.call(e))&&e.setPixelRatio(r)}function Ft(e,t,n,r,o){const l=[...t.__tres.objects],s=q(t);if(e=q(e),s===e)return!0;const a=N(e,t.__tres??{},o),c=t.parent??t.__tres.parent??null,i={...t.__tres.memoizedProps};delete i.object;for(const d of l)Ie(d,o),$e(d,o);s.__tres.objects=[],r.remove(t);for(const[d,_]of Object.entries(i))r.patchProp(a,d,a[d],_);n(e),r.insert(t,c);for(const d of l)r.insert(d,t);return!0}function q(e){return St(e)?(e.object.__tres=e.__tres,e.object):e}function Ie(e,t){var r,o,l,s;const n=((r=e.__tres)==null?void 0:r.parent)||t.scene.value;e.__tres&&(e.__tres.parent=null),n&&n.__tres&&"objects"in n.__tres&&Rt(n.__tres.objects,a=>a!==e),(o=e.__tres)!=null&&o.attach?Ut(n,e,e.__tres.attach):((s=(l=e.parent)==null?void 0:l.remove)==null||s.call(l,q(e)),e.parent=null)}function $e(e,t){var n;(n=e.traverse)==null||n.call(e,r=>{var o;t.deregisterCamera(r),(o=t.eventManager)==null||o.deregisterPointerMissedObject(r)}),t.deregisterCamera(e),Be(e)}async function Re(e,t){const n=new v.TextureLoader(t),r=o=>new Promise((l,s)=>{n.load(o,a=>l(a),()=>null,()=>{s(new Error("[useTextures] - Failed to load texture"))})});if(xt(e)){const o=await Promise.all(e.map(l=>r(l)));return e.length>1?o:o[0]}else{const{map:o,displacementMap:l,normalMap:s,roughnessMap:a,metalnessMap:c,aoMap:i,alphaMap:d,matcap:_}=e;return{map:o?await r(o):null,displacementMap:l?await r(l):null,normalMap:s?await r(s):null,roughnessMap:a?await r(a):null,metalnessMap:c?await r(c):null,aoMap:i?await r(i):null,alphaMap:d?await r(d):null,matcap:_?await r(_):null}}}const Wt=f.defineComponent({__name:"component",props:{map:{},displacementMap:{},normalMap:{},roughnessMap:{},metalnessMap:{},aoMap:{},alphaMap:{},matcap:{}},async setup(e){let t,n;const r=e,o=([t,n]=f.withAsyncContext(()=>f.reactive(Re(r))),t=await t,n(),t);return(l,s)=>f.renderSlot(l.$slots,"default",{textures:f.unref(o)})}}),Ee=({sizes:e})=>{const t=f.ref([]),n=f.computed(()=>t.value[0]),r=s=>{const a=s instanceof v.Camera?s:t.value.find(i=>i.uuid===s);if(!a)return;const c=t.value.filter(({uuid:i})=>i!==a.uuid);t.value=[a,...c]},o=(s,a=!1)=>{if(ke(s)){const c=s;if(t.value.some(({uuid:i})=>i===c.uuid))return;a?r(c):t.value.push(c)}},l=s=>{if(ke(s)){const a=s;t.value=t.value.filter(({uuid:c})=>c!==a.uuid)}};return f.watchEffect(()=>{e.aspectRatio.value&&t.value.forEach(s=>{!s.manual&&(s instanceof v.PerspectiveCamera||Nt(s))&&(s instanceof v.PerspectiveCamera?s.aspect=e.aspectRatio.value:(s.left=e.width.value*-.5,s.right=e.width.value*.5,s.top=e.height.value*.5,s.bottom=e.height.value*-.5),s.updateProjectionMatrix())})}),f.onUnmounted(()=>{t.value=[]}),{camera:n,cameras:t,registerCamera:o,deregisterCamera:l,setCameraActive:r}};function Nt(e){return e.hasOwnProperty("isOrthographicCamera")&&e.isOrthographicCamera}const zt=!0,ee="[TresJS ▲ ■ ●] ";function Gt(...e){typeof e[0]=="string"?e[0]=ee+e[0]:e.unshift(ee),console.error(...e)}function qt(...e){typeof e[0]=="string"?e[0]=ee+e[0]:e.unshift(ee),console.warn(...e)}function Yt(e,t){}function z(){return{logError:Gt,logWarning:qt,logMessage:Yt}}const te=f.ref({}),ne=e=>Object.assign(te.value,e);function me(){const e=new Map,t=new Set;let n=0,r=!1;const o=()=>{const i=Array.from(e.entries()).sort((d,_)=>{const u=d[1].priority-_[1].priority;return u===0?d[1].addI-_[1].addI:u});t.clear(),i.forEach(d=>t.add(d[0]))},l=i=>{e.delete(i),t.delete(i)};return{on:(i,d=0)=>{e.set(i,{priority:d,addI:n++});const _=()=>l(i);return M.tryOnScopeDispose(_),r=!0,{off:_}},off:l,trigger:(...i)=>{r&&(o(),r=!1),t.forEach(d=>d(...i))},dispose:()=>{e.clear(),t.clear()},get count(){return e.size}}}function Ue(){let e=!0,t=!0,n=!1;const r=new v.Clock(!1),o=f.ref(r.running),l=f.ref(!1);let s;const a=v.MathUtils.generateUUID();let c=null;const i=me(),d=me(),_=me();T();let u={};function C(k){u=k}function m(k,x,h=0){switch(x){case"before":return i.on(k,h);case"render":return c||(c=k),d.dispose(),d.on(k);case"after":return _.on(k,h)}}function b(){t&&(t=!1,T(),O())}function p(){t=!0,T(),cancelAnimationFrame(s)}function y(){n=!1,T()}function A(){n=!0,T()}function L(){l.value=!0}function S(){l.value=!1}function O(){if(!e){s=requestAnimationFrame(O);return}const k=r.getDelta(),x=r.getElapsedTime(),h={camera:f.unref(u.camera),scene:f.unref(u.scene),renderer:f.unref(u.renderer),raycaster:f.unref(u.raycaster),controls:f.unref(u.controls),invalidate:u.invalidate,advance:u.advance},P={delta:k,elapsed:x,clock:r,...h};o.value&&i.trigger(P),l.value||(d.count?d.trigger(P):c&&c(P)),o.value&&_.trigger(P),s=requestAnimationFrame(O)}function T(){const k=!t&&!n;r.running!==k&&(r.running?r.stop():r.start()),o.value=r.running}return{loopId:a,register:(k,x,h)=>m(k,x,h),start:b,stop:p,pause:A,resume:y,pauseRender:L,resumeRender:S,isRenderPaused:l,isActive:o,setContext:C,setReady:k=>e=k}}function he(e){let t=0;return e.traverse(n=>{if(n.isMesh&&n.geometry&&n.type!=="HightlightMesh"){const r=n.geometry,o=r.attributes.position.count*3*Float32Array.BYTES_PER_ELEMENT,l=r.index?r.index.count*Uint32Array.BYTES_PER_ELEMENT:0,s=r.attributes.normal?r.attributes.normal.count*3*Float32Array.BYTES_PER_ELEMENT:0,a=r.attributes.uv?r.attributes.uv.count*2*Float32Array.BYTES_PER_ELEMENT:0,c=o+l+s+a;t+=c}}),t}function Kt(e){return(e/1024).toFixed(2)}const Jt=Number.parseInt(v.REVISION.replace("dev",""));function Qt(e){return typeof e=="number"?[e,e,e]:e instanceof v.Vector3?[e.x,e.y,e.z]:e}function Ve(e){return e instanceof v.Color?e:Array.isArray(e)?new v.Color(...e):new v.Color(e)}const re={realistic:{shadows:!0,physicallyCorrectLights:!0,outputColorSpace:v.SRGBColorSpace,toneMapping:v.ACESFilmicToneMapping,toneMappingExposure:3,shadowMap:{enabled:!0,type:v.PCFSoftShadowMap}},flat:{toneMapping:v.NoToneMapping,toneMappingExposure:1}};function Fe({canvas:e,options:t,contextParts:{sizes:n,render:r,invalidate:o,advance:l}}){const s=f.computed(()=>({alpha:M.toValue(t.alpha)??!0,depth:M.toValue(t.depth),canvas:M.unrefElement(e),context:M.toValue(t.context),stencil:M.toValue(t.stencil),antialias:M.toValue(t.antialias)??!0,precision:M.toValue(t.precision),powerPreference:M.toValue(t.powerPreference),premultipliedAlpha:M.toValue(t.premultipliedAlpha),preserveDrawingBuffer:M.toValue(t.preserveDrawingBuffer),logarithmicDepthBuffer:M.toValue(t.logarithmicDepthBuffer),failIfMajorPerformanceCaveat:M.toValue(t.failIfMajorPerformanceCaveat)})),a=f.shallowRef(new v.WebGLRenderer(s.value));function c(){t.renderMode==="on-demand"&&o()}f.watch(s,()=>{a.value.dispose(),a.value=new v.WebGLRenderer(s.value),c()}),f.watch([n.width,n.height],()=>{a.value.setSize(n.width.value,n.height.value),c()},{immediate:!0}),f.watch(()=>t.clearColor,c);const{pixelRatio:i}=M.useDevicePixelRatio(),{logError:d}=z(),u=(()=>{const m=new v.WebGLRenderer,b={shadowMap:{enabled:m.shadowMap.enabled,type:m.shadowMap.type},toneMapping:m.toneMapping,toneMappingExposure:m.toneMappingExposure,outputColorSpace:m.outputColorSpace};return m.dispose(),b})(),C=M.toValue(t.renderMode);return C==="on-demand"&&o(),C==="manual"&&setTimeout(()=>{l()},100),f.watchEffect(()=>{const m=M.toValue(t.preset);m&&(m in re||d(`Renderer Preset must be one of these: ${Object.keys(re).join(", ")}`),Ae(a.value,re[m])),Vt(a.value,i.value,M.toValue(t.dpr)),C==="always"&&(r.frames.value=Math.max(1,r.frames.value));const b=(A,L)=>{const S=M.toValue(A),O=()=>{if(m)return Oe(re[m],L)};if(S!==void 0)return S;const T=O();return T!==void 0?T:Oe(u,L)},p=(A,L)=>Dt(a.value,L,b(A,L));p(t.shadows,"shadowMap.enabled"),p(t.toneMapping??v.ACESFilmicToneMapping,"toneMapping"),p(t.shadowMapType,"shadowMap.type"),Jt<150&&p(!t.useLegacyLights,"physicallyCorrectLights"),p(t.outputColorSpace,"outputColorSpace"),p(t.toneMappingExposure,"toneMappingExposure");const y=b(t.clearColor,"clearColor");y&&a.value.setClearColor(y?Ve(y):new v.Color(0))}),f.onUnmounted(()=>{a.value.dispose(),a.value.forceContextLoss()}),{renderer:a}}function Xt(e,t,n=10){const r=M.toValue(e)?M.useWindowSize():M.useElementSize(f.computed(()=>M.toValue(t).parentElement)),o=f.readonly(M.refDebounced(r.width,n)),l=f.readonly(M.refDebounced(r.height,n)),s=f.computed(()=>o.value/l.value);return{height:l,width:o,aspectRatio:s}}const We=(e,t)=>{const n=f.computed(()=>t.renderer.value.domElement),r=f.shallowRef([]),{x:o,y:l}=M.usePointer({target:n});let s=0;const{width:a,height:c,top:i,left:d}=M.useElementBounding(n),_=({x:g,y:D})=>{if(n.value)return{x:(g-d.value)/a.value*2-1,y:-((D-i.value)/c.value)*2+1}},u=({x:g,y:D})=>{if(t.camera.value)return t.raycaster.value.setFromCamera(new v.Vector2(g,D),t.camera.value),r.value=t.raycaster.value.intersectObjects(e.value,!0),r.value},C=g=>{const D=_({x:(g==null?void 0:g.clientX)??o.value,y:(g==null?void 0:g.clientY)??l.value});return D?u(D)||[]:[]},m=M.createEventHook(),b=M.createEventHook(),p=M.createEventHook(),y=M.createEventHook(),A=M.createEventHook(),L=M.createEventHook(),S=M.createEventHook(),O=M.createEventHook();function T(g){const D={};for(const W in g)typeof W!="function"&&(D[W]=g[W]);return D}const k=(g,D)=>{var ct,ut,ft;const W=T(D),ae=new v.Vector3(D==null?void 0:D.clientX,D==null?void 0:D.clientY,0).unproject((ct=t.camera)==null?void 0:ct.value);g.trigger({...W,intersections:r.value,unprojectedPoint:ae,ray:(ut=t.raycaster)==null?void 0:ut.value.ray,camera:(ft=t.camera)==null?void 0:ft.value,sourceEvent:D,delta:s,stopPropagating:!1})};let x;const h=g=>{C(g),k(p,g),x=g},P=()=>{x&&h(x)};let j,B,I;const U=g=>{var D;j=(D=r.value[0])==null?void 0:D.object,s=0,B=new v.Vector2((g==null?void 0:g.clientX)??o.value,(g==null?void 0:g.clientY)??l.value),k(A,g)};let $,K=!1;const st=g=>{var D,W,ae;g instanceof PointerEvent&&(r.value.length===0&&k(L,g),j===((D=r.value[0])==null?void 0:D.object)&&(I=new v.Vector2((g==null?void 0:g.clientX)??o.value,(g==null?void 0:g.clientY)??l.value),s=B==null?void 0:B.distanceTo(I),g.button===0?(k(m,g),$===((W=r.value[0])==null?void 0:W.object)?K=!0:($=(ae=r.value[0])==null?void 0:ae.object,K=!1)):g.button===2&&k(S,g)),k(y,g))},it=g=>{K&&(k(b,g),$=void 0,K=!1)},at=g=>k(p,g),lt=g=>k(O,g);return n.value.addEventListener("pointerup",st),n.value.addEventListener("pointerdown",U),n.value.addEventListener("pointermove",h),n.value.addEventListener("pointerleave",at),n.value.addEventListener("dblclick",it),n.value.addEventListener("wheel",lt),f.onUnmounted(()=>{n!=null&&n.value&&(n.value.removeEventListener("pointerup",st),n.value.removeEventListener("pointerdown",U),n.value.removeEventListener("pointermove",h),n.value.removeEventListener("pointerleave",at),n.value.removeEventListener("dblclick",it),n.value.removeEventListener("wheel",lt))}),{intersects:r,onClick:g=>m.on(g).off,onDblClick:g=>b.on(g).off,onContextMenu:g=>S.on(g).off,onPointerMove:g=>p.on(g).off,onPointerUp:g=>y.on(g).off,onPointerDown:g=>A.on(g).off,onPointerMissed:g=>L.on(g).off,onWheel:g=>O.on(g).off,forceUpdate:P}};function ge(e,t){if(Array.isArray(e))for(const n of e)n(t);typeof e=="function"&&e(t)}function Ne(e,t,n){var x;const r=f.shallowRef(),o=f.shallowRef();e&&(r.value=e),t&&(o.value=t);const l=h=>{var P;return((P=h.__tres)==null?void 0:P.eventCount)>0},s=h=>{var P;return((P=h.children)==null?void 0:P.some(j=>s(j)))||l(h)},a=f.shallowRef(((x=r.value)==null?void 0:x.children).filter(s)||[]);function c(h,P){const j=[],B=()=>P.stopPropagating=!0;P.stopPropagation=B;for(const I of P==null?void 0:P.intersections){if(P.stopPropagating)return;P={...P,...I};const{object:U}=I;P.eventObject=U,ge(U[h],P),j.push(U);let $=U.parent;for(;$!==null&&!P.stopPropagating&&!j.includes($);)P.eventObject=$,ge($[h],P),j.push($),$=$.parent;const K=Lt(h.slice(2));n(K,{intersection:I,event:P})}}const{onClick:i,onDblClick:d,onContextMenu:_,onPointerMove:u,onPointerDown:C,onPointerUp:m,onPointerMissed:b,onWheel:p,forceUpdate:y}=We(a,t);m(h=>c("onPointerUp",h)),C(h=>c("onPointerDown",h)),i(h=>c("onClick",h)),d(h=>c("onDoubleClick",h)),_(h=>c("onContextMenu",h)),p(h=>c("onWheel",h));let A=[];u(h=>{const P=h.intersections.map(({object:B})=>B),j=h.intersections;A.forEach(({object:B})=>{P.includes(B)||(h.intersections=A,c("onPointerLeave",h),c("onPointerOut",h))}),h.intersections=j,h.intersections.forEach(({object:B})=>{A.includes(B)||(c("onPointerEnter",h),c("onPointerOver",h))}),c("onPointerMove",h),A=h.intersections});const L=[];b(h=>{const P=()=>h.stopPropagating=!0;h.stopPropagation=P,L.forEach(j=>{h.stopPropagating||(h.eventObject=j,ge(j.onPointerMissed,h))}),n("pointer-missed",{event:h})});function S(h){Z(h)&&V(h)&&a.value.push(h)}function O(h){if(Z(h)&&V(h)){const P=a.value.indexOf(h);P>-1&&a.value.splice(P,1)}}function T(h){Z(h)&&V(h)&&h.onPointerMissed&&L.push(h)}function k(h){if(Z(h)&&V(h)){const P=L.indexOf(h);P>-1&&L.splice(P,1)}}return t.eventManager={forceUpdate:y,registerObject:S,deregisterObject:O,registerPointerMissedObject:T,deregisterPointerMissedObject:k},{forceUpdate:y,registerObject:S,deregisterObject:O,registerPointerMissedObject:T,deregisterPointerMissedObject:k}}function Ht(e,t,n=100){n=n<=0?100:n;const r=M.createEventHook(),o=new Set;let l=!1,s=!1,a=null;function c(){a&&clearTimeout(a),!s&&!l&&e()?(r.trigger(t),o.forEach(u=>u()),o.clear(),l=!0):!s&&!l&&(a=setTimeout(c,n))}function i(){s=!0,a&&clearTimeout(a)}c();const d=(u,...C)=>{u(...C)};return{on:u=>{if(l)return d(u,t),{off:()=>{}};{const C=r.on(u);return o.add(C.off),r.on(u)}},off:r.off,trigger:r.trigger,clear:r.clear,cancel:i}}const J=new WeakMap;function ze(e){if(e=e||Q(),J.has(e))return J.get(e);const t=100,n=Date.now(),l=Ht(()=>{if(Date.now()-n>=t)return!0;{const s=e.renderer.value,a=(s==null?void 0:s.domElement)||{width:0,height:0};return!!(s&&a.width>0&&a.height>0)}},e);return J.set(e,l),l}function Zt(e){const t=Q();if(t)return J.has(t)?J.get(t).on(e):ze(t).on(e)}function Ge({scene:e,canvas:t,windowSize:n,rendererOptions:r,emit:o}){const l=f.shallowRef(e),s=Xt(n,t),{camera:a,cameras:c,registerCamera:i,deregisterCamera:d,setCameraActive:_}=Ee({sizes:s}),u={mode:f.ref(r.renderMode||"always"),priority:f.ref(0),frames:f.ref(0),maxFrames:60,canBeInvalidated:f.computed(()=>u.mode.value==="on-demand"&&u.frames.value===0)};function C(I=1){r.renderMode==="on-demand"&&(u.frames.value=Math.min(u.maxFrames,u.frames.value+I))}function m(){r.renderMode==="manual"&&(u.frames.value=1)}const{renderer:b}=Fe({canvas:t,options:r,contextParts:{sizes:s,render:u,invalidate:C,advance:m}}),p={sizes:s,scene:l,camera:a,cameras:f.readonly(c),renderer:b,raycaster:f.shallowRef(new v.Raycaster),controls:f.ref(null),perf:{maxFrames:160,fps:{value:0,accumulator:[]},memory:{currentMem:0,allocatedMem:0,accumulator:[]}},render:u,advance:m,extend:ne,invalidate:C,registerCamera:i,setCameraActive:_,deregisterCamera:d,loop:Ue()};f.provide("useTres",p),p.scene.value.__tres={root:p},p.loop.register(()=>{a.value&&u.frames.value>0&&(b.value.render(e,a.value),o("render",p.renderer.value)),u.priority.value=0,u.mode.value==="always"?u.frames.value=1:u.frames.value=Math.max(0,u.frames.value-1)},"render");const{on:y,cancel:A}=ze(p);p.loop.setReady(!1),p.loop.start(),y(()=>{o("ready",p),p.loop.setReady(!0),Ne(e,p,o)}),f.onUnmounted(()=>{A(),p.loop.stop()});const L=100,S=M.useFps({every:L}),{isSupported:O,memory:T}=M.useMemory({interval:L}),k=160;let x=performance.now();const h=({timestamp:I})=>{p.scene.value&&(p.perf.memory.allocatedMem=he(p.scene.value)),I-x>=L&&(x=I,p.perf.fps.accumulator.push(S.value),p.perf.fps.accumulator.length>k&&p.perf.fps.accumulator.shift(),p.perf.fps.value=S.value,O.value&&T.value&&(p.perf.memory.accumulator.push(T.value.usedJSHeapSize/1024/1024),p.perf.memory.accumulator.length>k&&p.perf.memory.accumulator.shift(),p.perf.memory.currentMem=p.perf.memory.accumulator.reduce((U,$)=>U+$,0)/p.perf.memory.accumulator.length))};let P=0;const j=1,{pause:B}=M.useRafFn(({delta:I})=>{window.__TRES__DEVTOOLS__&&(h({timestamp:performance.now()}),P+=I,P>=j&&(window.__TRES__DEVTOOLS__.cb(p),P=0))},{immediate:!0});return f.onUnmounted(()=>{B()}),p}function Q(){const e=f.inject("useTres");if(!e)throw new Error("useTresContext must be used together with useTresContextProvider");return e}const en=Q;function tn(){const{camera:e,scene:t,renderer:n,loop:r,raycaster:o,controls:l,invalidate:s,advance:a}=Q();r.setContext({camera:e,scene:t,renderer:n,raycaster:o,controls:l,invalidate:s,advance:a});function c(_,u=0){return r.register(_,"before",u)}function i(_){return r.register(_,"render")}function d(_,u=0){return r.register(_,"after",u)}return{pause:r.pause,resume:r.resume,pauseRender:r.pauseRender,resumeRender:r.resumeRender,isActive:r.isActive,onBeforeRender:c,render:i,onAfterRender:d}}const qe=M.createEventHook(),Ye=M.createEventHook(),ve=M.createEventHook(),X=new v.Clock;let oe=0,se=0;const{pause:nn,resume:Ke,isActive:rn}=M.useRafFn(()=>{qe.trigger({delta:oe,elapsed:se,clock:X}),Ye.trigger({delta:oe,elapsed:se,clock:X}),ve.trigger({delta:oe,elapsed:se,clock:X})},{immediate:!1});ve.on(()=>{oe=X.getDelta(),se=X.getElapsedTime()});let Je=!1;const on=()=>(Je||(Je=!0,Ke()),{onBeforeLoop:qe.on,onLoop:Ye.on,onAfterLoop:ve.on,pause:nn,resume:Ke,isActive:rn});function sn(){const{logWarning:e}=z();function t(l,s,a){let c=null;return l.traverse(i=>{i[s]===a&&(c=i)}),c||e(`Child with ${s} '${a}' not found.`),c}function n(l,s,a){const c=[];return l.traverse(i=>{i[s].includes(a)&&c.push(i)}),c.length||e(`Children with ${s} '${a}' not found.`),c}function r(l,s){return t(l,"name",s)}function o(l,s){return n(l,"name",s)}return{seek:t,seekByName:r,seekAll:n,seekAllByName:o}}function an(e,t={},n={}){let r=e;const o=a=>{r=a};let l=new Proxy({},{});const s={has(a,c){return c in t||c in r},get(a,c,i){return c in t?t[c](r):r[c]},set(a,c,i){return n[c]?n[c](i,r,l,o):r[c]=i,!0}};return l=new Proxy({},s),l}const{logError:Qe}=z(),Xe=["onClick","onContextMenu","onPointerMove","onPointerEnter","onPointerLeave","onPointerOver","onPointerOut","onDoubleClick","onPointerDown","onPointerUp","onPointerCancel","onPointerMissed","onLostPointerCapture","onWheel"],ln=e=>{const t=e.scene.value;function n(i,d,_,u){if(u||(u={}),u.args||(u.args=[]),i==="template"||kt(i))return null;let C=i.replace("Tres",""),m;if(i==="primitive"){(!R(u.object)||f.isRef(u.object))&&Qe("Tres primitives need an 'object' prop, whose value is an object or shallowRef<object>"),C=u.object.type;const b={};m=an(u.object,{object:y=>y,isPrimitive:()=>!0,__tres:()=>b},{object:(y,A,L,S)=>{Ft(y,L,S,{patchProp:l,remove:o,insert:r},e)},__tres:y=>{Object.assign(b,y)}})}else{const b=te.value[C];b||Qe(`${C} is not defined on the THREE namespace. Use extend to add it to the catalog.`),m=new b(...u.args)}return m?(m.isCamera&&(u!=null&&u.position||m.position.set(3,3,3),u!=null&&u.lookAt||m.lookAt(0,0,0)),m=N(m,{...m.__tres,type:C,memoizedProps:u,eventCount:0,primitive:i==="primitive",attach:u.attach},e),m):null}function r(i,d){var C,m,b;if(!i)return;d=d||t;const _=i.__tres?i:N(i,{},e),u=d.__tres?d:N(d,{},e);i=q(_),d=q(u),i.__tres&&((C=i.__tres)==null?void 0:C.eventCount)>0&&((m=e.eventManager)==null||m.registerObject(i)),e.registerCamera(i),(b=e.eventManager)==null||b.registerPointerMissedObject(i),_.__tres.attach?Et(u,_,_.__tres.attach):V(i)&&V(u)&&(u.add(i),i.dispatchEvent({type:"added"})),_.__tres.parent=u,u.__tres.objects&&!u.__tres.objects.includes(_)&&u.__tres.objects.push(_)}function o(i,d){var m,b,p,y;if(!i)return;i!=null&&i.__tres&&((m=i.__tres)==null?void 0:m.eventCount)>0&&((b=e.eventManager)==null||b.deregisterObject(i)),d=le(d)?"default":d;const _=(p=i.__tres)==null?void 0:p.dispose;le(_)||(_===null?d=!1:d=_);const u=(y=i.__tres)==null?void 0:y.primitive,C=d==="default"?!u:!!d;if(i.__tres&&"objects"in i.__tres&&[...i.__tres.objects].forEach(A=>o(A,d)),C&&i.children&&[...i.children].forEach(A=>o(A,d)),Ie(i,e),$e(i,e),C&&!Pt(i)){if(G(d))d(i);else if(G(i.dispose))try{i.dispose()}catch{}}"__tres"in i&&delete i.__tres}function l(i,d,_,u){var A,L;if(!i)return;let C=i,m=d;if(i.__tres&&(i.__tres.memoizedProps[d]=u),d==="attach"){const S=((A=i.__tres)==null?void 0:A.parent)||i.parent;o(i),N(i,{attach:u},e),S&&r(i,S);return}if(d==="dispose"){i.__tres||(i=N(i,{},e)),i.__tres.dispose=u;return}if(V(i)&&m==="blocks-pointer-events"){u||u===""?i[m]=u:delete i[m];return}Xe.includes(d)&&i.__tres&&(i.__tres.eventCount+=1);let b=fe(m),p=C==null?void 0:C[b];if(m==="args"){const S=i,O=_??[],T=u??[],k=((L=i.__tres)==null?void 0:L.type)||i.type;k&&O.length&&!Tt(O,T)&&(C=Object.assign(S,new te.value[k](...u)));return}if(C.type==="BufferGeometry"){if(m==="args")return;C.setAttribute(fe(m),new v.BufferAttribute(...u));return}if(m.includes("-")&&p===void 0){p=C;for(const S of m.split("-"))b=m=fe(S),C=p,p=p==null?void 0:p[m]}let y=u;if(y===""&&(y=!0),G(p)){Xe.includes(d)||(ce(y)?i[b](...y):i[b](y)),b.startsWith("on")&&G(y)&&(C[b]=y);return}Se(p)&&Se(y)?p.mask=y.mask:Pe(p)&&vt(y)?p.set(y):yt(p)&&_t(y)&&p.constructor===y.constructor?p.copy(y):ue(p)&&Array.isArray(y)?"fromArray"in p&&typeof p.fromArray=="function"?p.fromArray(y):p.set(...y):ue(p)&&typeof y=="number"?"setScalar"in p&&typeof p.setScalar=="function"?p.setScalar(y):p.set(y):C[b]=y,Be(i)}function s(i){var d;return((d=i==null?void 0:i.__tres)==null?void 0:d.parent)||null}function a(i){const d=N(new v.Object3D,{type:"Comment"},e);return d.name=i,d}function c(i){var C;const d=s(i),_=((C=d==null?void 0:d.__tres)==null?void 0:C.objects)||[],u=_.indexOf(i);return u<0||u>=_.length-1?null:_[u+1]}return{insert:r,remove:o,createElement:n,patchProp:l,parentNode:s,createText:()=>void 0,createComment:a,setText:()=>void 0,setElementText:()=>void 0,nextSibling:c,querySelector:()=>void 0,setScopeId:()=>void 0,cloneNode:()=>void 0,insertStaticContent:()=>void 0}};function cn(){return He().__VUE_DEVTOOLS_GLOBAL_HOOK__}function He(){return typeof navigator<"u"&&typeof window<"u"?window:typeof globalThis<"u"?globalThis:{}}const un=typeof Proxy=="function",fn="devtools-plugin:setup",dn="plugin:settings:set";let Y,ye;function pn(){var e;return Y!==void 0||(typeof window<"u"&&window.performance?(Y=!0,ye=window.performance):typeof globalThis<"u"&&(!((e=globalThis.perf_hooks)===null||e===void 0)&&e.performance)?(Y=!0,ye=globalThis.perf_hooks.performance):Y=!1),Y}function mn(){return pn()?ye.now():Date.now()}class hn{constructor(t,n){this.target=null,this.targetQueue=[],this.onQueue=[],this.plugin=t,this.hook=n;const r={};if(t.settings)for(const s in t.settings){const a=t.settings[s];r[s]=a.defaultValue}const o=`__vue-devtools-plugin-settings__${t.id}`;let l=Object.assign({},r);try{const s=localStorage.getItem(o),a=JSON.parse(s);Object.assign(l,a)}catch{}this.fallbacks={getSettings(){return l},setSettings(s){try{localStorage.setItem(o,JSON.stringify(s))}catch{}l=s},now(){return mn()}},n&&n.on(dn,(s,a)=>{s===this.plugin.id&&this.fallbacks.setSettings(a)}),this.proxiedOn=new Proxy({},{get:(s,a)=>this.target?this.target.on[a]:(...c)=>{this.onQueue.push({method:a,args:c})}}),this.proxiedTarget=new Proxy({},{get:(s,a)=>this.target?this.target[a]:a==="on"?this.proxiedOn:Object.keys(this.fallbacks).includes(a)?(...c)=>(this.targetQueue.push({method:a,args:c,resolve:()=>{}}),this.fallbacks[a](...c)):(...c)=>new Promise(i=>{this.targetQueue.push({method:a,args:c,resolve:i})})})}async setRealTarget(t){this.target=t;for(const n of this.onQueue)this.target.on[n.method](...n.args);for(const n of this.targetQueue)n.resolve(await this.target[n.method](...n.args))}}function gn(e,t){const n=e,r=He(),o=cn(),l=un&&n.enableEarlyProxy;if(o&&(r.__VUE_DEVTOOLS_PLUGIN_API_AVAILABLE__||!l))o.emit(fn,e,t);else{const s=l?new hn(n,o):null;(r.__VUE_DEVTOOLS_PLUGINS__=r.__VUE_DEVTOOLS_PLUGINS__||[]).push({pluginDescriptor:n,setupFn:t,proxy:s}),s&&t(s.proxiedTarget)}}function vn(e,t){const n=`▲ ■ ●${e}`;typeof Ze=="function"?Ze(n,t):console.log(n)}function Ze(e,t){throw new Error(e+t)}const et=e=>{const t={id:e.uuid,label:e.type,children:[],tags:[]};e.name!==""&&t.tags.push({label:e.name,textColor:5750629,backgroundColor:15793395});const n=he(e);return n>0&&t.tags.push({label:`${Kt(n)} KB`,textColor:15707189,backgroundColor:16775644,tooltip:"Memory usage"}),e.type.includes("Light")&&(Ct(e)&&t.tags.push({label:`${e.intensity}`,textColor:9738662,backgroundColor:16316922,tooltip:"Intensity"}),t.tags.push({label:`#${new v.Color(e.color).getHexString()}`,textColor:9738662,backgroundColor:16316922,tooltip:"Color"})),e.type.includes("Camera")&&(t.tags.push({label:`${e.fov}°`,textColor:9738662,backgroundColor:16316922,tooltip:"Field of view"}),t.tags.push({label:`x: ${Math.round(e.position.x)} y: ${Math.round(e.position.y)} z: ${Math.round(e.position.z)}`,textColor:9738662,backgroundColor:16316922,tooltip:"Position"})),t};function tt(e,t,n=""){e.children.forEach(r=>{if(r.type==="HightlightMesh"||n&&!r.type.includes(n)&&!r.name.includes(n))return;const o=et(r);t.children.push(o),tt(r,o,n)})}const yn=[],H="tres:inspector",_n=f.reactive({sceneGraph:null});function wn(e,t){gn({id:"dev.esm.tres",label:"TresJS 🪐",logo:"https://raw.githubusercontent.com/Tresjs/tres/main/public/favicon.svg",packageName:"tresjs",homepage:"https://tresjs.org",componentStateTypes:yn,app:e},n=>{typeof n.now!="function"&&vn("You seem to be using an outdated version of Vue Devtools. Are you still using the Beta release instead of the stable one? You can find the links at https://devtools.vuejs.org/guide/installation.html."),n.addInspector({id:H,label:"TresJS 🪐",icon:"account_tree",treeFilterPlaceholder:"Search instances"}),setInterval(()=>{n.sendInspectorTree(H)},1e3),setInterval(()=>{n.notifyComponentUpdate()},5e3),n.on.getInspectorTree(l=>{if(l.inspectorId===H){const s=et(t.scene.value);tt(t.scene.value,s,l.filter),_n.sceneGraph=s,l.rootNodes=[s]}});let r=null,o=null;n.on.getInspectorState(l=>{var s;if(l.inspectorId===H){const[a]=t.scene.value.getObjectsByProperty("uuid",l.nodeId);if(!a)return;if(o&&r&&r.parent&&o.remove(r),a.isMesh){const c=Bt(a);a.add(c),r=c,o=a}l.state={object:Object.entries(a).map(([c,i])=>c==="children"?{key:c,value:i.filter(d=>d.type!=="HightlightMesh")}:{key:c,value:i,editable:!0}).filter(({key:c})=>c!=="parent")},a.isScene&&(l.state={...l.state,state:[{key:"Scene Info",value:{objects:a.children.length,memory:he(a),calls:t.renderer.value.info.render.calls,triangles:t.renderer.value.info.render.triangles,points:t.renderer.value.info.render.points,lines:t.renderer.value.info.render.lines}},{key:"Programs",value:((s=t.renderer.value.info.programs)==null?void 0:s.map(c=>({...c,programName:c.name})))||[]}]})}}),n.on.editInspectorState(l=>{l.inspectorId===H&&jt(t.scene.value,l.nodeId,l.path,l.state.value)})})}const bn=["data-scene","data-tres"],nt=f.defineComponent({__name:"TresCanvas",props:{shadows:{type:Boolean,default:void 0},clearColor:{},toneMapping:{},shadowMapType:{},useLegacyLights:{type:Boolean,default:void 0},outputColorSpace:{},toneMappingExposure:{},renderMode:{default:"always"},dpr:{},camera:{},preset:{},windowSize:{type:Boolean,default:void 0},enableProvideBridge:{type:Boolean,default:!0},context:{},alpha:{type:Boolean,default:void 0},premultipliedAlpha:{type:Boolean},antialias:{type:Boolean,default:void 0},stencil:{type:Boolean,default:void 0},preserveDrawingBuffer:{type:Boolean,default:void 0},powerPreference:{},depth:{type:Boolean,default:void 0},failIfMajorPerformanceCaveat:{type:Boolean,default:void 0},precision:{},logarithmicDepthBuffer:{type:Boolean,default:void 0},reverseDepthBuffer:{type:Boolean}},emits:["render","click","double-click","context-menu","pointer-move","pointer-up","pointer-down","pointer-enter","pointer-leave","pointer-over","pointer-out","pointer-missed","wheel","ready"],setup(e,{expose:t,emit:n}){const r=e,o=n,l=f.useSlots(),s=f.ref(),a=f.shallowRef(new v.Scene),c=f.getCurrentInstance();ne(we);const i=(m,b=!1)=>f.defineComponent({setup(){var L;const p=(L=f.getCurrentInstance())==null?void 0:L.appContext;p&&(p.app=c==null?void 0:c.appContext.app);const y={};function A(S){S&&(S.parent&&A(S.parent),S.provides&&Object.assign(y,S.provides))}return c!=null&&c.parent&&r.enableProvideBridge&&(A(c.parent),Reflect.ownKeys(y).forEach(S=>{f.provide(S,y[S])})),f.provide("useTres",m),f.provide("extend",ne),typeof window<"u"&&wn(p==null?void 0:p.app,m),()=>f.h(f.Fragment,null,b?[]:l.default())}}),d=(m,b=!1)=>{const p=i(m,b),{render:y}=f.createRenderer(ln(m));y(f.h(p),a.value)},_=(m,b=!1)=>{de(m.scene.value),b&&(m.renderer.value.dispose(),m.renderer.value.renderLists.dispose(),m.renderer.value.forceContextLoss()),a.value.__tres={root:m}},u=f.shallowRef(null);t({context:u,dispose:()=>_(u.value,!0)});const C=()=>{_(u.value),d(u.value,!0)};return f.onMounted(()=>{const m=s;u.value=Ge({scene:a.value,canvas:m,windowSize:r.windowSize??!1,rendererOptions:r,emit:o});const{registerCamera:b,camera:p,cameras:y,deregisterCamera:A}=u.value;d(u.value);const L=()=>{const S=new v.PerspectiveCamera(45,window.innerWidth/window.innerHeight,.1,1e3);S.position.set(3,3,3),S.lookAt(0,0,0),b(S);const O=f.watchEffect(()=>{y.value.length>=2&&(S.removeFromParent(),A(S),O==null||O())})};f.watch(()=>r.camera,(S,O)=>{S&&b(S),O&&(O.removeFromParent(),A(O))},{immediate:!0}),p.value||L()}),f.onUnmounted(C),(m,b)=>(f.openBlock(),f.createElementBlock("canvas",{ref_key:"canvas",ref:s,"data-scene":a.value.uuid,class:f.normalizeClass(m.$attrs.class),"data-tres":`tresjs ${f.unref(pt).version}`,style:f.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,bn))}}),Cn=["TresCanvas","TresLeches","TresScene"],Mn={template:{compilerOptions:{isCustomElement:e=>e.startsWith("Tres")&&!Cn.includes(e)||e==="primitive"}}},{logWarning:Pn}=z();let E=null;const Sn={updated:(e,t)=>{var o;const n=It(t);if(!n){Pn(`v-distance-to: problem with binding value: ${t.value}`);return}E&&(E.dispose(),e.parent.remove(E));const r=n.clone().sub(e.position);r.normalize(),E=new v.ArrowHelper(r,e.position,e.position.distanceTo(n),16776960),e.parent.add(E),console.table([["Distance:",e.position.distanceTo(n)],[`origin: ${e.name||e.type}`,`x:${e.position.x}, y:${e.position.y}, z:${(o=e.position)==null?void 0:o.z}`],[`Destiny: ${e.name||e.type}`,`x:${n.x}, y:${n.y}, z:${n==null?void 0:n.z}`]])},unmounted:e=>{E==null||E.dispose(),e.parent&&e.parent.remove(E)}};class rt extends v.Line{constructor(t,n){const r=[1,1,0,-1,1,0,-1,-1,0,1,-1,0,1,1,0],o=new v.BufferGeometry;o.setAttribute("position",new v.Float32BufferAttribute(r,3)),o.computeBoundingSphere();const l=new v.LineBasicMaterial({fog:!1});super(o,l),this.light=t,this.color=n,this.type="RectAreaLightHelper";const s=[1,1,0,-1,1,0,-1,-1,0,1,1,0,-1,-1,0,1,-1,0],a=new v.BufferGeometry;a.setAttribute("position",new v.Float32BufferAttribute(s,3)),a.computeBoundingSphere(),this.add(new v.Mesh(a,new v.MeshBasicMaterial({side:v.BackSide,fog:!1})))}updateMatrixWorld(){if(this.scale.set(.5*this.light.width,.5*this.light.height,1),this.color!==void 0)this.material.color.set(this.color),this.children[0].material.color.set(this.color);else{this.material.color.copy(this.light.color).multiplyScalar(this.light.intensity);const t=this.material.color,n=Math.max(t.r,t.g,t.b);n>1&&t.multiplyScalar(1/n),this.children[0].material.color.copy(this.material.color)}this.matrixWorld.extractRotation(this.light.matrixWorld).scale(this.scale).copyPosition(this.light.matrixWorld),this.children[0].matrixWorld.copy(this.matrixWorld)}dispose(){this.geometry.dispose(),this.material.dispose(),this.children[0].geometry.dispose(),this.children[0].material.dispose()}}const{logWarning:ot}=z();let ie,F;const kn={DirectionalLight:v.DirectionalLightHelper,PointLight:v.PointLightHelper,SpotLight:v.SpotLightHelper,HemisphereLight:v.HemisphereLightHelper,RectAreaLight:rt},An={mounted:e=>{if(!e.isLight){ot(`${e.type} is not a light`);return}ie=kn[e.type],e.parent.add(new ie(e,1,e.color.getHex()))},updated:e=>{F=e.parent.children.find(t=>t instanceof ie),!(F instanceof rt)&&F.update()},unmounted:e=>{if(!e.isLight){ot(`${e.type} is not a light`);return}F=e.parent.children.find(t=>t instanceof ie),F&&F.dispose&&F.dispose(),e.parent&&e.parent.remove(F)}},Ln={mounted:(e,t)=>{if(t.arg){console.log(`v-log:${t.arg}`,e[t.arg]);return}console.log("v-log",e)}},On={install(e){e.component("TresCanvas",nt)}};w.TresCanvas=nt,w.UseLoader=mt,w.UseTexture=Wt,w.catalogue=te,w.createRenderLoop=Ue,w.default=On,w.dispose=de,w.extend=ne,w.isProd=zt,w.normalizeColor=Ve,w.normalizeVectorFlexibleParam=Qt,w.onTresReady=Zt,w.templateCompilerOptions=Mn,w.traverseObjects=be,w.useCamera=Ee,w.useLoader=Ce,w.useLogger=z,w.useLoop=tn,w.useRaycaster=We,w.useRenderLoop=on,w.useRenderer=Fe,w.useSeek=sn,w.useTexture=Re,w.useTres=en,w.useTresContext=Q,w.useTresContextProvider=Ge,w.useTresEventManager=Ne,w.vDistanceTo=Sn,w.vLightHelper=An,w.vLog=Ln,Object.defineProperties(w,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
|