@tresjs/core 2.0.0-beta.8 → 2.0.0-rc.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +24 -7
- package/dist/components/TresCanvas.d.ts +2 -0
- package/dist/components/TresScene.d.ts +2 -0
- package/dist/composables/useRenderer/index.d.ts +11 -11
- package/dist/composables/useTres/index.d.ts +1 -0
- package/dist/tres.js +198 -186
- package/dist/tres.umd.cjs +3 -3
- package/dist/types/index.d.ts +4 -1
- package/package.json +22 -21
package/README.md
CHANGED
|
@@ -1,13 +1,30 @@
|
|
|
1
|
-
|
|
1
|
+

|
|
2
|
+
|
|
3
|
+
<p align="center">
|
|
4
|
+
<a href="https://www.npmjs.com/package/@tresjs/core"><img src="https://img.shields.io/npm/v/@tresjs/core/beta?color=%2382DBCA" alt="npm package"></a>
|
|
5
|
+
<a href="https://discord.gg/tfY9aSNT"><img src="https://img.shields.io/badge/chat-discord-purple?style=flat&logo=discord" alt="discord chat"></a>
|
|
6
|
+
</p>
|
|
7
|
+
|
|
8
|
+
# TresJS `@tresjs/core`
|
|
2
9
|
|
|
3
10
|
> Declarative ThreeJS using Vue Components
|
|
4
11
|
|
|
5
12
|
- 💡 Build 3D scene as they were Vue components
|
|
6
13
|
- ⚡️ Powered by Vite
|
|
7
|
-
- 🥰 It brings all the updated features of ThreeJS right
|
|
14
|
+
- 🥰 It brings all the updated features of ThreeJS right away regardless the version
|
|
8
15
|
- 🦾 Fully Typed
|
|
9
16
|
|
|
10
|
-
Tres (Spanish word for "three", pronounced `/tres/` ) is a way of creating ThreeJS scenes with Vue components in a declarative fashion.
|
|
17
|
+
Tres (Spanish word for "three", pronounced `/tres/` ) is a way of creating ThreeJS scenes with Vue components in a declarative fashion.
|
|
18
|
+
|
|
19
|
+
It's build on-top of a [Vue Custom Renderer](https://vuejs.org/api/custom-renderer.html#createrenderer) and it's powered by Vite.
|
|
20
|
+
|
|
21
|
+
The goal is to provide the Vue's community an easy way of building 3D scenes with Vue, always up to date with the latest ThreeJS features and with 0-to-none mantainance.
|
|
22
|
+
|
|
23
|
+
## Installation
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
pnpm install @tresjs/core@beta three
|
|
27
|
+
```
|
|
11
28
|
|
|
12
29
|
## Docs
|
|
13
30
|
|
|
@@ -19,10 +36,10 @@ Checkout the [docs](https://tresjs.org)
|
|
|
19
36
|
|
|
20
37
|
## Ecosystem
|
|
21
38
|
|
|
22
|
-
| Package | Version
|
|
23
|
-
| --------------------------- |
|
|
24
|
-
| [Tres](packages/tres) |  |  |  |
|
|
42
|
+
| [Cientos](packages/cientos) |  |
|
|
26
43
|
|
|
27
44
|
## Contribution
|
|
28
45
|
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { ShadowMapType, TextureEncoding, ToneMapping } from 'three';
|
|
2
|
+
import { CameraType } from '../composables';
|
|
2
3
|
import { RendererPresetsType } from '../composables/useRenderer/const';
|
|
3
4
|
export interface TresCanvasProps {
|
|
4
5
|
shadows?: boolean;
|
|
@@ -15,6 +16,7 @@ export interface TresCanvasProps {
|
|
|
15
16
|
windowSize?: boolean;
|
|
16
17
|
preset?: RendererPresetsType;
|
|
17
18
|
disableRender?: boolean;
|
|
19
|
+
camera?: CameraType;
|
|
18
20
|
}
|
|
19
21
|
/**
|
|
20
22
|
* Vue component for rendering a Tres component.
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { ShadowMapType, TextureEncoding, ToneMapping } from 'three';
|
|
2
|
+
import { CameraType } from '../composables';
|
|
2
3
|
import { RendererPresetsType } from '../composables/useRenderer/const';
|
|
3
4
|
export interface TresSceneProps {
|
|
4
5
|
shadows?: boolean;
|
|
@@ -15,6 +16,7 @@ export interface TresSceneProps {
|
|
|
15
16
|
windowSize?: boolean;
|
|
16
17
|
preset?: RendererPresetsType;
|
|
17
18
|
disableRender?: boolean;
|
|
19
|
+
camera?: CameraType;
|
|
18
20
|
}
|
|
19
21
|
export declare const TresScene: import("vue").DefineComponent<TresSceneProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<TresSceneProps>, {}>;
|
|
20
22
|
export default TresScene;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { MaybeRefOrGetter } from '@vueuse/core';
|
|
2
2
|
import { WebGLRendererParameters, WebGLRenderer, ShadowMapType } from 'three';
|
|
3
3
|
import type { TextureEncoding, ToneMapping } from 'three';
|
|
4
4
|
import { TresColor } from '../../types';
|
|
@@ -9,7 +9,7 @@ export interface UseRendererOptions extends WebGLRendererParameters {
|
|
|
9
9
|
*
|
|
10
10
|
* @default false
|
|
11
11
|
*/
|
|
12
|
-
shadows?:
|
|
12
|
+
shadows?: MaybeRefOrGetter<boolean>;
|
|
13
13
|
/**
|
|
14
14
|
* Set the shadow map type
|
|
15
15
|
* Can be PCFShadowMap, PCFSoftShadowMap, BasicShadowMap, VSMShadowMap
|
|
@@ -17,7 +17,7 @@ export interface UseRendererOptions extends WebGLRendererParameters {
|
|
|
17
17
|
*
|
|
18
18
|
* @default PCFSoftShadowMap
|
|
19
19
|
*/
|
|
20
|
-
shadowMapType?:
|
|
20
|
+
shadowMapType?: MaybeRefOrGetter<ShadowMapType>;
|
|
21
21
|
/**
|
|
22
22
|
* Whether to use physically correct lighting mode.
|
|
23
23
|
* See the [lights / physical example](https://threejs.org/examples/#webgl_lights_physical).
|
|
@@ -25,34 +25,34 @@ export interface UseRendererOptions extends WebGLRendererParameters {
|
|
|
25
25
|
* @default false
|
|
26
26
|
* @deprecated Use {@link WebGLRenderer.useLegacyLights useLegacyLights} instead.
|
|
27
27
|
*/
|
|
28
|
-
physicallyCorrectLights?:
|
|
28
|
+
physicallyCorrectLights?: MaybeRefOrGetter<boolean>;
|
|
29
29
|
/**
|
|
30
30
|
* Whether to use legacy lighting mode.
|
|
31
31
|
*
|
|
32
|
-
* @type {
|
|
32
|
+
* @type {MaybeRefOrGetter<boolean>}
|
|
33
33
|
* @memberof UseRendererOptions
|
|
34
34
|
*/
|
|
35
|
-
useLegacyLights?:
|
|
35
|
+
useLegacyLights?: MaybeRefOrGetter<boolean>;
|
|
36
36
|
/**
|
|
37
37
|
* Defines the output encoding of the renderer.
|
|
38
38
|
* Can be LinearEncoding, sRGBEncoding
|
|
39
39
|
*
|
|
40
40
|
* @default LinearEncoding
|
|
41
41
|
*/
|
|
42
|
-
outputEncoding?:
|
|
42
|
+
outputEncoding?: MaybeRefOrGetter<TextureEncoding>;
|
|
43
43
|
/**
|
|
44
44
|
* Defines the tone mapping used by the renderer.
|
|
45
45
|
* Can be NoToneMapping, LinearToneMapping, ReinhardToneMapping, Uncharted2ToneMapping, CineonToneMapping, ACESFilmicToneMapping, CustomToneMapping
|
|
46
46
|
*
|
|
47
47
|
* @default NoToneMapping
|
|
48
48
|
*/
|
|
49
|
-
toneMapping?:
|
|
49
|
+
toneMapping?: MaybeRefOrGetter<ToneMapping>;
|
|
50
50
|
/**
|
|
51
51
|
* Defines the tone mapping exposure used by the renderer.
|
|
52
52
|
*
|
|
53
53
|
* @default 1
|
|
54
54
|
*/
|
|
55
|
-
toneMappingExposure?:
|
|
55
|
+
toneMappingExposure?: MaybeRefOrGetter<number>;
|
|
56
56
|
/**
|
|
57
57
|
* The context used by the renderer.
|
|
58
58
|
*
|
|
@@ -77,8 +77,8 @@ export interface UseRendererOptions extends WebGLRendererParameters {
|
|
|
77
77
|
*
|
|
78
78
|
* @default 0x000000
|
|
79
79
|
*/
|
|
80
|
-
clearColor?:
|
|
81
|
-
windowSize?:
|
|
80
|
+
clearColor?: MaybeRefOrGetter<TresColor>;
|
|
81
|
+
windowSize?: MaybeRefOrGetter<boolean | string>;
|
|
82
82
|
preset?: RendererPresetsType;
|
|
83
83
|
}
|
|
84
84
|
/**
|
package/dist/tres.js
CHANGED
|
@@ -1,31 +1,31 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* name: @tresjs/core
|
|
3
|
-
* version: v2.0.0-
|
|
3
|
+
* version: v2.0.0-rc.0
|
|
4
4
|
* (c) 2023
|
|
5
5
|
* description: Declarative ThreeJS using Vue Components
|
|
6
6
|
* author: Alvaro Saburido <hola@alvarosaburido.dev> (https://github.com/alvarosabu/)
|
|
7
7
|
*/
|
|
8
|
-
import { ref as
|
|
9
|
-
import * as
|
|
10
|
-
import { MathUtils as De, PerspectiveCamera as
|
|
11
|
-
import { createEventHook as
|
|
12
|
-
const
|
|
8
|
+
import { ref as R, watchEffect as le, toRef as _e, shallowRef as de, toRefs as me, computed as pe, watch as F, shallowReactive as ve, provide as Se, inject as Oe, onUnmounted as ge, createRenderer as ke, defineComponent as he, onMounted as je, h as k } from "vue";
|
|
9
|
+
import * as we from "three";
|
|
10
|
+
import { MathUtils as De, PerspectiveCamera as $, OrthographicCamera as Ie, Clock as be, Color as N, sRGBEncoding as Be, ACESFilmicToneMapping as ze, PCFSoftShadowMap as Ge, PCFShadowMap as Ve, LinearEncoding as ne, NoToneMapping as re, WebGLRenderer as Fe, LoadingManager as We, TextureLoader as He, Raycaster as Ue, Vector2 as Ye, BufferAttribute as $e } from "three";
|
|
11
|
+
import { createEventHook as J, useRafFn as Ne, toValue as l, useWindowSize as qe, useElementSize as Ke, useDevicePixelRatio as Je, unrefElement as q, useEventListener as Xe } from "@vueuse/core";
|
|
12
|
+
const ye = R({ uuid: De.generateUUID() }), Me = (e) => void Object.assign(ye.value, e);
|
|
13
13
|
var Qe = /* @__PURE__ */ ((e) => (e.Perspective = "Perspective", e.Orthographic = "Orthographic", e))(Qe || {});
|
|
14
14
|
const Ze = 45;
|
|
15
15
|
let _;
|
|
16
|
-
function
|
|
17
|
-
const { state: e, setState: t, aspectRatio: o } =
|
|
18
|
-
function a(i = "Perspective",
|
|
16
|
+
function xe() {
|
|
17
|
+
const { state: e, setState: t, aspectRatio: o } = S();
|
|
18
|
+
function a(i = "Perspective", s) {
|
|
19
19
|
var u, f, m;
|
|
20
20
|
if (i === "Perspective") {
|
|
21
|
-
const { near:
|
|
21
|
+
const { near: v, far: h, fov: M } = s || {
|
|
22
22
|
near: 0.1,
|
|
23
23
|
far: 1e3,
|
|
24
24
|
fov: Ze
|
|
25
25
|
};
|
|
26
|
-
_ = new
|
|
26
|
+
_ = new $(M, ((u = e.aspectRatio) == null ? void 0 : u.value) || window.innerWidth / window.innerHeight, v, h), (f = e.cameras) == null || f.push(_);
|
|
27
27
|
} else {
|
|
28
|
-
const { left:
|
|
28
|
+
const { left: v, right: h, top: M, bottom: w, near: P, far: x } = s || {
|
|
29
29
|
left: -100,
|
|
30
30
|
right: 100,
|
|
31
31
|
top: 100,
|
|
@@ -33,71 +33,71 @@ function N() {
|
|
|
33
33
|
near: 0.1,
|
|
34
34
|
far: 1e3
|
|
35
35
|
};
|
|
36
|
-
_ = new Ie(
|
|
36
|
+
_ = new Ie(v, h, M, w, P, x), (m = e.cameras) == null || m.push(_);
|
|
37
37
|
}
|
|
38
38
|
return e.camera = _, t("camera", e.camera), _;
|
|
39
39
|
}
|
|
40
40
|
function n() {
|
|
41
41
|
var i;
|
|
42
|
-
e.camera instanceof
|
|
42
|
+
e.camera instanceof $ && e.aspectRatio && (e.camera.aspect = e.aspectRatio.value), (i = e.camera) == null || i.updateProjectionMatrix();
|
|
43
43
|
}
|
|
44
44
|
function r(i) {
|
|
45
|
-
var
|
|
46
|
-
(
|
|
45
|
+
var s;
|
|
46
|
+
(s = e.cameras) == null || s.push(i), i instanceof $ && e.aspectRatio && (i.aspect = e.aspectRatio.value), i.updateProjectionMatrix(), t("camera", i);
|
|
47
47
|
}
|
|
48
|
-
function
|
|
48
|
+
function c() {
|
|
49
49
|
e.cameras = [];
|
|
50
50
|
}
|
|
51
|
-
return
|
|
51
|
+
return le(() => {
|
|
52
52
|
o != null && o.value && n();
|
|
53
53
|
}), {
|
|
54
54
|
activeCamera: _e(e, "camera"),
|
|
55
55
|
createCamera: a,
|
|
56
56
|
updateCamera: n,
|
|
57
57
|
pushCamera: r,
|
|
58
|
-
clearCameras:
|
|
58
|
+
clearCameras: c
|
|
59
59
|
};
|
|
60
60
|
}
|
|
61
|
-
const
|
|
62
|
-
let
|
|
61
|
+
const Ee = J(), Ce = J(), X = J(), j = new be();
|
|
62
|
+
let W = 0, H = 0;
|
|
63
63
|
const { pause: et, resume: tt, isActive: at } = Ne(
|
|
64
64
|
() => {
|
|
65
|
-
|
|
65
|
+
Ee.trigger({ delta: W, elapsed: H, clock: j }), Ce.trigger({ delta: W, elapsed: H, clock: j }), X.trigger({ delta: W, elapsed: H, clock: j });
|
|
66
66
|
},
|
|
67
67
|
{ immediate: !1 }
|
|
68
68
|
);
|
|
69
|
-
|
|
70
|
-
|
|
69
|
+
X.on(() => {
|
|
70
|
+
W = j.getDelta(), H = j.getElapsedTime();
|
|
71
71
|
});
|
|
72
|
-
function
|
|
72
|
+
function Re() {
|
|
73
73
|
return {
|
|
74
|
-
onBeforeLoop:
|
|
75
|
-
onLoop:
|
|
76
|
-
onAfterLoop:
|
|
74
|
+
onBeforeLoop: Ee.on,
|
|
75
|
+
onLoop: Ce.on,
|
|
76
|
+
onAfterLoop: X.on,
|
|
77
77
|
pause: et,
|
|
78
78
|
resume: tt,
|
|
79
79
|
isActive: at
|
|
80
80
|
};
|
|
81
81
|
}
|
|
82
82
|
function nt(e) {
|
|
83
|
-
return e instanceof
|
|
83
|
+
return e instanceof N ? e : Array.isArray(e) ? new N(...e) : new N(e);
|
|
84
84
|
}
|
|
85
|
-
const
|
|
85
|
+
const K = {
|
|
86
86
|
realistic: {
|
|
87
87
|
outputEncoding: Be,
|
|
88
88
|
toneMapping: ze,
|
|
89
89
|
toneMappingExposure: 3,
|
|
90
90
|
shadowMap: {
|
|
91
91
|
enabled: !0,
|
|
92
|
-
type:
|
|
92
|
+
type: Ge
|
|
93
93
|
}
|
|
94
94
|
}
|
|
95
|
-
},
|
|
95
|
+
}, Pe = (e, t) => {
|
|
96
96
|
for (const o of Object.keys(t))
|
|
97
|
-
t[o] instanceof Object && Object.assign(t[o],
|
|
97
|
+
t[o] instanceof Object && Object.assign(t[o], Pe(e[o], t[o]));
|
|
98
98
|
return Object.assign(e || {}, t), e;
|
|
99
99
|
}, rt = "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", ot = /* @__PURE__ */ it(rt);
|
|
100
|
-
function
|
|
100
|
+
function V(e) {
|
|
101
101
|
return e.replace(/-([a-z])/g, (t, o) => o.toUpperCase());
|
|
102
102
|
}
|
|
103
103
|
function it(e, t) {
|
|
@@ -107,123 +107,122 @@ function it(e, t) {
|
|
|
107
107
|
return t ? (n) => !!o[n.toLowerCase()] : (n) => !!o[n];
|
|
108
108
|
}
|
|
109
109
|
function st(e) {
|
|
110
|
-
var
|
|
111
|
-
const t =
|
|
110
|
+
var te, ae;
|
|
111
|
+
const t = de(), o = R(!1), {
|
|
112
112
|
alpha: a = !0,
|
|
113
113
|
antialias: n = !0,
|
|
114
114
|
depth: r,
|
|
115
|
-
logarithmicDepthBuffer:
|
|
115
|
+
logarithmicDepthBuffer: c,
|
|
116
116
|
failIfMajorPerformanceCaveat: i,
|
|
117
|
-
precision:
|
|
117
|
+
precision: s,
|
|
118
118
|
premultipliedAlpha: u,
|
|
119
119
|
stencil: f,
|
|
120
120
|
shadows: m = !1,
|
|
121
|
-
shadowMapType:
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
toneMappingExposure: p = 1,
|
|
121
|
+
shadowMapType: v = Ve,
|
|
122
|
+
useLegacyLights: h = !1,
|
|
123
|
+
outputEncoding: M = ne,
|
|
124
|
+
toneMapping: w = re,
|
|
125
|
+
toneMappingExposure: P = 1,
|
|
127
126
|
context: x = void 0,
|
|
128
|
-
powerPreference:
|
|
129
|
-
preserveDrawingBuffer:
|
|
130
|
-
clearColor:
|
|
131
|
-
windowSize:
|
|
132
|
-
preset:
|
|
133
|
-
} =
|
|
134
|
-
!l(
|
|
127
|
+
powerPreference: U = "default",
|
|
128
|
+
preserveDrawingBuffer: T = !1,
|
|
129
|
+
clearColor: d,
|
|
130
|
+
windowSize: b = !1,
|
|
131
|
+
preset: y = void 0
|
|
132
|
+
} = me(e), { state: g, setState: L } = S(), { width: O, height: E } = l(b) == !0 || l(b) === "" || l(b) === "true" ? qe() : Ke(g.container), { logError: I, logWarning: B } = D(), { pixelRatio: C } = Je(), { pause: z, resume: G } = Re(), Y = pe(() => O.value / E.value);
|
|
133
|
+
!l(b) && ((ae = (te = g.container) == null ? void 0 : te.value) == null ? void 0 : ae.offsetHeight) === 0 && B(`Oops... Seems like your canvas height is currently 0px, by default it takes the height of it's parent, so make sure it has some height with CSS.
|
|
135
134
|
You could set windowSize=true to force the canvas to be the size of the window.`);
|
|
136
|
-
const
|
|
137
|
-
t.value && (t.value.setSize(
|
|
138
|
-
},
|
|
135
|
+
const Z = () => {
|
|
136
|
+
t.value && (t.value.setSize(O.value, E.value), t.value.setPixelRatio(Math.min(C.value, 2)));
|
|
137
|
+
}, ee = () => {
|
|
139
138
|
if (!t.value)
|
|
140
139
|
return;
|
|
141
|
-
const A = l(
|
|
140
|
+
const A = l(y);
|
|
142
141
|
if (A) {
|
|
143
|
-
A in
|
|
142
|
+
A in K || I("Renderer Preset must be one of these: " + Object.keys(K).join(", ")), Pe(t.value, K[A]);
|
|
144
143
|
return;
|
|
145
144
|
}
|
|
146
|
-
t.value.shadowMap.enabled = l(m), t.value.shadowMap.type = l(
|
|
147
|
-
},
|
|
148
|
-
const A =
|
|
149
|
-
A && (t.value = new
|
|
145
|
+
t.value.shadowMap.enabled = l(m), t.value.shadowMap.type = l(v), t.value.toneMapping = l(w) || re, t.value.toneMappingExposure = l(P), t.value.outputEncoding = l(M) || ne, d != null && d.value && t.value.setClearColor(nt(l(d))), t.value.useLegacyLights = l(h);
|
|
146
|
+
}, Le = () => {
|
|
147
|
+
const A = q(g.canvas);
|
|
148
|
+
A && (t.value = new Fe({
|
|
150
149
|
canvas: A,
|
|
151
150
|
alpha: l(a),
|
|
152
151
|
antialias: l(n),
|
|
153
152
|
context: l(x),
|
|
154
153
|
depth: l(r),
|
|
155
154
|
failIfMajorPerformanceCaveat: l(i),
|
|
156
|
-
logarithmicDepthBuffer: l(
|
|
157
|
-
powerPreference: l(
|
|
158
|
-
precision: l(
|
|
155
|
+
logarithmicDepthBuffer: l(c),
|
|
156
|
+
powerPreference: l(U),
|
|
157
|
+
precision: l(s),
|
|
159
158
|
stencil: l(f),
|
|
160
|
-
preserveDrawingBuffer: l(
|
|
159
|
+
preserveDrawingBuffer: l(T),
|
|
161
160
|
premultipliedAlpha: l(u)
|
|
162
|
-
}),
|
|
161
|
+
}), L("renderer", t.value), L("clock", new be()), L("aspectRatio", Y), ee(), Z(), G(), o.value = !0);
|
|
163
162
|
}, Ae = () => {
|
|
164
|
-
t.value && (t.value.dispose(), t.value = void 0, o.value = !1,
|
|
163
|
+
t.value && (t.value.dispose(), t.value = void 0, o.value = !1, z());
|
|
165
164
|
};
|
|
166
|
-
return
|
|
167
|
-
[m,
|
|
168
|
-
|
|
169
|
-
),
|
|
170
|
-
() => [
|
|
165
|
+
return F([Y, C], Z), F(
|
|
166
|
+
[m, v, M, h, w, P, d],
|
|
167
|
+
ee
|
|
168
|
+
), F(
|
|
169
|
+
() => [g.canvas, g.container],
|
|
171
170
|
() => {
|
|
172
|
-
|
|
171
|
+
q(g.canvas) && q(g.container) && Le();
|
|
173
172
|
},
|
|
174
173
|
{ immediate: !0, deep: !0 }
|
|
175
174
|
), {
|
|
176
175
|
renderer: t,
|
|
177
176
|
isReady: o,
|
|
178
177
|
dispose: Ae,
|
|
179
|
-
aspectRatio:
|
|
178
|
+
aspectRatio: Y
|
|
180
179
|
};
|
|
181
180
|
}
|
|
182
|
-
const
|
|
183
|
-
function
|
|
181
|
+
const oe = (e) => typeof e == "function", ct = (e) => typeof e == "string", Te = (e) => !!e && e.constructor === Array;
|
|
182
|
+
function ut(e) {
|
|
184
183
|
const t = { nodes: {}, materials: {} };
|
|
185
184
|
return e && e.traverse((o) => {
|
|
186
185
|
o.name && (t.nodes[o.name] = o), o.material && !t.materials[o.material.name] && (t.materials[o.material.name] = o.material);
|
|
187
186
|
}), t;
|
|
188
187
|
}
|
|
189
188
|
async function Et(e, t, o, a, n) {
|
|
190
|
-
const { logError: r } =
|
|
191
|
-
n && n(
|
|
192
|
-
const
|
|
189
|
+
const { logError: r } = D(), c = new e();
|
|
190
|
+
n && n(c), o && o(c);
|
|
191
|
+
const s = (Array.isArray(t) ? t : [t]).map(
|
|
193
192
|
(u) => new Promise((f, m) => {
|
|
194
|
-
|
|
193
|
+
c.load(
|
|
195
194
|
u,
|
|
196
|
-
(
|
|
197
|
-
|
|
195
|
+
(v) => {
|
|
196
|
+
v.scene && Object.assign(v, ut(v.scene)), f(v);
|
|
198
197
|
},
|
|
199
198
|
a,
|
|
200
|
-
(
|
|
199
|
+
(v) => m(r("[useLoader] - Failed to load resource", v))
|
|
201
200
|
);
|
|
202
201
|
})
|
|
203
202
|
);
|
|
204
|
-
return
|
|
203
|
+
return Te(t) ? await Promise.all(s) : await s[0];
|
|
205
204
|
}
|
|
206
|
-
async function
|
|
207
|
-
const t = new
|
|
205
|
+
async function Ct(e) {
|
|
206
|
+
const t = new We(), o = new He(t), a = (n) => new Promise((r, c) => {
|
|
208
207
|
o.load(
|
|
209
208
|
n,
|
|
210
209
|
(i) => r(i),
|
|
211
210
|
() => null,
|
|
212
211
|
() => {
|
|
213
|
-
|
|
212
|
+
c(new Error("[useTextures] - Failed to load texture"));
|
|
214
213
|
}
|
|
215
214
|
);
|
|
216
215
|
});
|
|
217
|
-
if (
|
|
216
|
+
if (Te(e)) {
|
|
218
217
|
const n = await Promise.all(e.map((r) => a(r)));
|
|
219
218
|
return e.length > 1 ? n : n[0];
|
|
220
219
|
} else {
|
|
221
220
|
const {
|
|
222
221
|
map: n,
|
|
223
222
|
displacementMap: r,
|
|
224
|
-
normalMap:
|
|
223
|
+
normalMap: c,
|
|
225
224
|
roughnessMap: i,
|
|
226
|
-
metalnessMap:
|
|
225
|
+
metalnessMap: s,
|
|
227
226
|
aoMap: u,
|
|
228
227
|
alphaMap: f,
|
|
229
228
|
matcap: m
|
|
@@ -231,29 +230,29 @@ async function Rt(e) {
|
|
|
231
230
|
return {
|
|
232
231
|
map: n ? await a(n) : null,
|
|
233
232
|
displacementMap: r ? await a(r) : null,
|
|
234
|
-
normalMap:
|
|
233
|
+
normalMap: c ? await a(c) : null,
|
|
235
234
|
roughnessMap: i ? await a(i) : null,
|
|
236
|
-
metalnessMap:
|
|
235
|
+
metalnessMap: s ? await a(s) : null,
|
|
237
236
|
aoMap: u ? await a(u) : null,
|
|
238
237
|
alphaMap: f ? await a(f) : null,
|
|
239
238
|
matcap: m ? await a(m) : null
|
|
240
239
|
};
|
|
241
240
|
}
|
|
242
241
|
}
|
|
243
|
-
const
|
|
244
|
-
function
|
|
242
|
+
const p = ["00", "01", "02", "03", "04", "05", "06", "07", "08", "09", "0a", "0b", "0c", "0d", "0e", "0f", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "1a", "1b", "1c", "1d", "1e", "1f", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "2a", "2b", "2c", "2d", "2e", "2f", "30", "31", "32", "33", "34", "35", "36", "37", "38", "39", "3a", "3b", "3c", "3d", "3e", "3f", "40", "41", "42", "43", "44", "45", "46", "47", "48", "49", "4a", "4b", "4c", "4d", "4e", "4f", "50", "51", "52", "53", "54", "55", "56", "57", "58", "59", "5a", "5b", "5c", "5d", "5e", "5f", "60", "61", "62", "63", "64", "65", "66", "67", "68", "69", "6a", "6b", "6c", "6d", "6e", "6f", "70", "71", "72", "73", "74", "75", "76", "77", "78", "79", "7a", "7b", "7c", "7d", "7e", "7f", "80", "81", "82", "83", "84", "85", "86", "87", "88", "89", "8a", "8b", "8c", "8d", "8e", "8f", "90", "91", "92", "93", "94", "95", "96", "97", "98", "99", "9a", "9b", "9c", "9d", "9e", "9f", "a0", "a1", "a2", "a3", "a4", "a5", "a6", "a7", "a8", "a9", "aa", "ab", "ac", "ad", "ae", "af", "b0", "b1", "b2", "b3", "b4", "b5", "b6", "b7", "b8", "b9", "ba", "bb", "bc", "bd", "be", "bf", "c0", "c1", "c2", "c3", "c4", "c5", "c6", "c7", "c8", "c9", "ca", "cb", "cc", "cd", "ce", "cf", "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7", "d8", "d9", "da", "db", "dc", "dd", "de", "df", "e0", "e1", "e2", "e3", "e4", "e5", "e6", "e7", "e8", "e9", "ea", "eb", "ec", "ed", "ee", "ef", "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7", "f8", "f9", "fa", "fb", "fc", "fd", "fe", "ff"];
|
|
243
|
+
function ft() {
|
|
245
244
|
const e = Math.random() * 4294967295 | 0, t = Math.random() * 4294967295 | 0, o = Math.random() * 4294967295 | 0, a = Math.random() * 4294967295 | 0;
|
|
246
|
-
return (
|
|
245
|
+
return (p[e & 255] + p[e >> 8 & 255] + p[e >> 16 & 255] + p[e >> 24 & 255] + "-" + p[t & 255] + p[t >> 8 & 255] + "-" + p[t >> 16 & 15 | 64] + p[t >> 24 & 255] + "-" + p[o & 63 | 128] + p[o >> 8 & 255] + "-" + p[o >> 16 & 255] + p[o >> 24 & 255] + p[a & 255] + p[a >> 8 & 255] + p[a >> 16 & 255] + p[a >> 24 & 255]).toLowerCase();
|
|
247
246
|
}
|
|
248
|
-
const
|
|
249
|
-
function
|
|
250
|
-
const e =
|
|
251
|
-
uuid:
|
|
247
|
+
const Q = Symbol();
|
|
248
|
+
function lt() {
|
|
249
|
+
const e = ve({
|
|
250
|
+
uuid: ft(),
|
|
252
251
|
camera: void 0,
|
|
253
252
|
cameras: [],
|
|
254
253
|
scene: void 0,
|
|
255
254
|
renderer: void 0,
|
|
256
|
-
aspectRatio:
|
|
255
|
+
aspectRatio: pe(() => window.innerWidth / window.innerHeight)
|
|
257
256
|
});
|
|
258
257
|
function t(n) {
|
|
259
258
|
return e[n];
|
|
@@ -263,28 +262,28 @@ function ft() {
|
|
|
263
262
|
}
|
|
264
263
|
const a = {
|
|
265
264
|
state: e,
|
|
266
|
-
...
|
|
265
|
+
...me(e),
|
|
267
266
|
getState: t,
|
|
268
267
|
setState: o
|
|
269
268
|
};
|
|
270
|
-
return Se(
|
|
269
|
+
return Se(Q, a), a;
|
|
271
270
|
}
|
|
272
|
-
const
|
|
273
|
-
state:
|
|
271
|
+
const S = () => Oe(Q, {
|
|
272
|
+
state: ve({
|
|
274
273
|
camera: void 0,
|
|
275
274
|
cameras: [],
|
|
276
275
|
scene: void 0,
|
|
277
276
|
renderer: void 0
|
|
278
277
|
})
|
|
279
278
|
});
|
|
280
|
-
function
|
|
281
|
-
var
|
|
282
|
-
const e =
|
|
279
|
+
function dt() {
|
|
280
|
+
var c;
|
|
281
|
+
const e = de(new Ue()), t = R(new Ye()), o = R(null), { setState: a, state: n } = S();
|
|
283
282
|
a("raycaster", e.value), a("pointer", t), a("currentInstance", o);
|
|
284
283
|
function r(i) {
|
|
285
284
|
t.value.x = i.clientX / window.innerWidth * 2 - 1, t.value.y = -(i.clientY / window.innerHeight) * 2 + 1;
|
|
286
285
|
}
|
|
287
|
-
return (
|
|
286
|
+
return (c = n == null ? void 0 : n.renderer) == null || c.domElement.addEventListener("pointermove", r), ge(() => {
|
|
288
287
|
var i;
|
|
289
288
|
(i = n == null ? void 0 : n.renderer) == null || i.domElement.removeEventListener("pointermove", r);
|
|
290
289
|
}), {
|
|
@@ -292,13 +291,13 @@ function lt() {
|
|
|
292
291
|
pointer: t
|
|
293
292
|
};
|
|
294
293
|
}
|
|
295
|
-
const
|
|
296
|
-
function
|
|
294
|
+
const Rt = !0, ie = "[TresJS ▲ ■ ●] ";
|
|
295
|
+
function D() {
|
|
297
296
|
function e(a, n) {
|
|
298
|
-
console.error(`${
|
|
297
|
+
console.error(`${ie} ${a}`, n || "");
|
|
299
298
|
}
|
|
300
299
|
function t(a) {
|
|
301
|
-
console.warn(`${
|
|
300
|
+
console.warn(`${ie} ${a}`);
|
|
302
301
|
}
|
|
303
302
|
function o(a, n) {
|
|
304
303
|
}
|
|
@@ -309,12 +308,12 @@ function I() {
|
|
|
309
308
|
};
|
|
310
309
|
}
|
|
311
310
|
function Pt() {
|
|
312
|
-
const { logWarning: e } =
|
|
311
|
+
const { logWarning: e } = D();
|
|
313
312
|
function t(a, n, r) {
|
|
314
|
-
let
|
|
313
|
+
let c = null;
|
|
315
314
|
return a.traverse((i) => {
|
|
316
|
-
i[n] === r && (
|
|
317
|
-
}),
|
|
315
|
+
i[n] === r && (c = i);
|
|
316
|
+
}), c || e(`Child with ${n} '${r}' not found.`), c;
|
|
318
317
|
}
|
|
319
318
|
function o(a, n) {
|
|
320
319
|
return t(a, "name", n);
|
|
@@ -324,50 +323,50 @@ function Pt() {
|
|
|
324
323
|
seekByName: o
|
|
325
324
|
};
|
|
326
325
|
}
|
|
327
|
-
const
|
|
328
|
-
let
|
|
329
|
-
const
|
|
326
|
+
const mt = /^on[^a-z]/, pt = (e) => mt.test(e);
|
|
327
|
+
let se = null;
|
|
328
|
+
const ce = {
|
|
330
329
|
GEOMETRY_VIA_PROP: "tres__geometryViaProp",
|
|
331
330
|
MATERIAL_VIA_PROP: "tres__materialViaProp"
|
|
332
|
-
}, { logError:
|
|
331
|
+
}, { logError: ue } = D(), vt = {
|
|
333
332
|
createElement(e, t, o, a) {
|
|
334
|
-
var
|
|
333
|
+
var s, u;
|
|
335
334
|
if (a || (a = {}), a.args || (a.args = []), e === "template" || ot(e))
|
|
336
335
|
return null;
|
|
337
336
|
let n = e.replace("Tres", ""), r;
|
|
338
337
|
if (e === "primitive") {
|
|
339
|
-
(a == null ? void 0 : a.object) === void 0 &&
|
|
338
|
+
(a == null ? void 0 : a.object) === void 0 && ue("Tres primitives need a prop 'object'");
|
|
340
339
|
const f = a.object;
|
|
341
340
|
n = f.type, r = Object.assign(f, { type: n, attach: a.attach, primitive: !0 });
|
|
342
341
|
} else {
|
|
343
|
-
const f =
|
|
344
|
-
f ||
|
|
342
|
+
const f = ye.value[n];
|
|
343
|
+
f || ue(`${n} is not defined on the THREE namespace. Use extend to add it to the catalog.`), r = new f(...a.args);
|
|
345
344
|
}
|
|
346
345
|
if (r.isCamera) {
|
|
347
346
|
a != null && a.position || r.position.set(3, 3, 3), a != null && a.lookAt || r.lookAt(0, 0, 0);
|
|
348
|
-
const { pushCamera: f } =
|
|
347
|
+
const { pushCamera: f } = xe();
|
|
349
348
|
f(r);
|
|
350
349
|
}
|
|
351
350
|
(a == null ? void 0 : a.attach) === void 0 && (r.isMaterial ? r.attach = "material" : r.isBufferGeometry && (r.attach = "geometry"));
|
|
352
|
-
const { GEOMETRY_VIA_PROP:
|
|
353
|
-
return r.isObject3D && ((
|
|
351
|
+
const { GEOMETRY_VIA_PROP: c, MATERIAL_VIA_PROP: i } = ce;
|
|
352
|
+
return r.isObject3D && ((s = a == null ? void 0 : a.material) != null && s.isMaterial && (r.userData[i] = !0), (u = a == null ? void 0 : a.geometry) != null && u.isBufferGeometry && (r.userData[c] = !0)), r.events = {}, r;
|
|
354
353
|
},
|
|
355
354
|
insert(e, t) {
|
|
356
|
-
var o, a;
|
|
357
|
-
if (((e == null ? void 0 : e.__vnode.type) === "TresGroup" || (e == null ? void 0 : e.__vnode.type) === "TresObject3D") && t === null && !((
|
|
358
|
-
|
|
355
|
+
var o, a, n, r;
|
|
356
|
+
if ((((o = e == null ? void 0 : e.__vnode) == null ? void 0 : o.type) === "TresGroup" || ((a = e == null ? void 0 : e.__vnode) == null ? void 0 : a.type) === "TresObject3D") && t === null && !((r = (n = e == null ? void 0 : e.__vnode) == null ? void 0 : n.ctx) != null && r.asyncResolved)) {
|
|
357
|
+
se = e;
|
|
359
358
|
return;
|
|
360
359
|
}
|
|
361
|
-
t || (t =
|
|
360
|
+
t || (t = se), e != null && e.isObject3D && (t != null && t.isObject3D) ? (t.add(e), e.dispatchEvent({ type: "added" })) : typeof (e == null ? void 0 : e.attach) == "string" && (e.__previousAttach = e[t == null ? void 0 : t.attach], t && (t[e.attach] = e));
|
|
362
361
|
},
|
|
363
362
|
remove(e) {
|
|
364
363
|
var t, o;
|
|
365
364
|
if (e) {
|
|
366
365
|
if (e.isObject3D) {
|
|
367
366
|
const a = e, n = (r) => {
|
|
368
|
-
var
|
|
369
|
-
const { GEOMETRY_VIA_PROP:
|
|
370
|
-
r.userData[i] || (
|
|
367
|
+
var s, u;
|
|
368
|
+
const { GEOMETRY_VIA_PROP: c, MATERIAL_VIA_PROP: i } = ce;
|
|
369
|
+
r.userData[i] || (s = r.material) == null || s.dispose(), r.userData[c] || (u = r.geometry) == null || u.dispose();
|
|
371
370
|
};
|
|
372
371
|
a.traverse((r) => n(r)), n(a);
|
|
373
372
|
}
|
|
@@ -376,25 +375,27 @@ const ie = {
|
|
|
376
375
|
},
|
|
377
376
|
patchProp(e, t, o, a) {
|
|
378
377
|
if (e) {
|
|
379
|
-
let n = e, r = t,
|
|
378
|
+
let n = e, r = t, c = V(r), i = n == null ? void 0 : n[c];
|
|
380
379
|
if (n.type === "BufferGeometry") {
|
|
380
|
+
if (r === "args")
|
|
381
|
+
return;
|
|
381
382
|
n.setAttribute(
|
|
382
|
-
|
|
383
|
+
V(r),
|
|
383
384
|
new $e(...a)
|
|
384
385
|
);
|
|
385
386
|
return;
|
|
386
387
|
}
|
|
387
388
|
if (r.includes("-") && i === void 0) {
|
|
388
389
|
const u = r.split("-");
|
|
389
|
-
i = u.reduce((f, m) => f[
|
|
390
|
+
i = u.reduce((f, m) => f[V(m)], n), r = u.pop(), c = r.toLowerCase(), i != null && i.set || (n = u.reduce((f, m) => f[V(m)], n));
|
|
390
391
|
}
|
|
391
392
|
pt(r) && (e.events[r] = a);
|
|
392
|
-
let
|
|
393
|
-
if (
|
|
394
|
-
Array.isArray(
|
|
393
|
+
let s = a;
|
|
394
|
+
if (s === "" && (s = !0), oe(i)) {
|
|
395
|
+
Array.isArray(s) ? e[c](...s) : e[c](s);
|
|
395
396
|
return;
|
|
396
397
|
}
|
|
397
|
-
!(i != null && i.set) && !
|
|
398
|
+
!(i != null && i.set) && !oe(i) ? n[c] = s : i.constructor === s.constructor && (i != null && i.copy) ? i == null || i.copy(s) : Array.isArray(s) ? i.set(...s) : !i.isColor && i.setScalar ? i.setScalar(s) : i.set(s);
|
|
398
399
|
}
|
|
399
400
|
},
|
|
400
401
|
parentNode(e) {
|
|
@@ -409,15 +410,15 @@ const ie = {
|
|
|
409
410
|
setScopeId: () => void 0,
|
|
410
411
|
cloneNode: () => void 0,
|
|
411
412
|
insertStaticContent: () => void 0
|
|
412
|
-
}, { createApp:
|
|
413
|
-
const t =
|
|
413
|
+
}, { createApp: gt } = ke(vt), ht = (e) => {
|
|
414
|
+
const t = gt(o);
|
|
414
415
|
function o() {
|
|
415
416
|
return e && e.default ? e.default() : [];
|
|
416
417
|
}
|
|
417
418
|
return t;
|
|
418
419
|
};
|
|
419
|
-
we
|
|
420
|
-
const { logWarning:
|
|
420
|
+
Me(we);
|
|
421
|
+
const { logWarning: fe } = D(), wt = he({
|
|
421
422
|
name: "TresScene",
|
|
422
423
|
props: [
|
|
423
424
|
"shadows",
|
|
@@ -433,41 +434,50 @@ const { logWarning: ht } = I(), wt = me({
|
|
|
433
434
|
"clearColor",
|
|
434
435
|
"windowSize",
|
|
435
436
|
"preset",
|
|
436
|
-
"disableRender"
|
|
437
|
+
"disableRender",
|
|
438
|
+
"camera"
|
|
437
439
|
],
|
|
438
440
|
setup(e, { slots: t, expose: o }) {
|
|
439
|
-
e.physicallyCorrectLights === !0 &&
|
|
440
|
-
const a =
|
|
441
|
-
|
|
442
|
-
const
|
|
443
|
-
i(
|
|
444
|
-
|
|
445
|
-
}),
|
|
446
|
-
|
|
441
|
+
e.physicallyCorrectLights === !0 && fe("physicallyCorrectLights is deprecated, useLegacyLights is now false by default");
|
|
442
|
+
const a = R(), n = R(), r = new we.Scene(), { setState: c } = S();
|
|
443
|
+
c("scene", r), c("canvas", n), c("container", a);
|
|
444
|
+
const i = R(), s = t && t.default && t.default();
|
|
445
|
+
s && (s == null ? void 0 : s.length) > 0 && (i.value = s.some((w) => ct(w.type) && w.type.includes("Camera")) || e.camera, i.value || fe("No camera found in the scene, please add one!")), je(() => {
|
|
446
|
+
v();
|
|
447
|
+
}), ge(() => {
|
|
448
|
+
c("renderer", null);
|
|
447
449
|
});
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
450
|
+
const { activeCamera: u, pushCamera: f, clearCameras: m } = xe();
|
|
451
|
+
function v() {
|
|
452
|
+
const { renderer: w } = st(e);
|
|
453
|
+
e.camera && f(e.camera);
|
|
454
|
+
const { onLoop: P } = Re(), { raycaster: x, pointer: U } = dt();
|
|
455
|
+
let T = null, d = null;
|
|
456
|
+
le(() => {
|
|
457
|
+
u.value && x.value.setFromCamera(U.value, u.value);
|
|
458
|
+
}), P(() => {
|
|
459
|
+
var b, y, g, L, O, E, I, B, C, z;
|
|
460
|
+
if (u.value && e.disableRender !== !0 && e.disableRender !== "" && ((b = w.value) == null || b.render(r, u.value)), x.value) {
|
|
461
|
+
const G = x.value.intersectObjects(r.children);
|
|
462
|
+
G.length > 0 ? (d = G[0], T === null && ((L = (g = (y = d.object) == null ? void 0 : y.events) == null ? void 0 : g.onPointerEnter) == null || L.call(g, d)), (I = (E = (O = d.object) == null ? void 0 : O.events) == null ? void 0 : E.onPointerMove) == null || I.call(E, d)) : T !== null && ((z = (C = (B = d == null ? void 0 : d.object) == null ? void 0 : B.events) == null ? void 0 : C.onPointerLeave) == null || z.call(C, T), d = null), T = d;
|
|
458
463
|
}
|
|
459
464
|
}), Xe(n.value, "click", () => {
|
|
460
|
-
var
|
|
461
|
-
|
|
465
|
+
var b, y, g;
|
|
466
|
+
d !== null && ((g = (y = (b = d.object) == null ? void 0 : b.events) == null ? void 0 : y.onClick) == null || g.call(y, d));
|
|
462
467
|
});
|
|
463
468
|
}
|
|
464
|
-
let
|
|
465
|
-
function
|
|
466
|
-
|
|
469
|
+
let h;
|
|
470
|
+
function M() {
|
|
471
|
+
h = ht(t), h.provide("useTres", S()), h.provide(Q, S()), h.provide("extend", Me), h.mount(r);
|
|
467
472
|
}
|
|
468
|
-
return
|
|
473
|
+
return M(), o({
|
|
469
474
|
scene: r
|
|
470
|
-
}), (
|
|
475
|
+
}), F(
|
|
476
|
+
() => e.camera,
|
|
477
|
+
(w) => {
|
|
478
|
+
w && (m(), f(w));
|
|
479
|
+
}
|
|
480
|
+
), () => k(
|
|
471
481
|
k(
|
|
472
482
|
"div",
|
|
473
483
|
{
|
|
@@ -510,7 +520,7 @@ const { logWarning: ht } = I(), wt = me({
|
|
|
510
520
|
)
|
|
511
521
|
);
|
|
512
522
|
}
|
|
513
|
-
}), bt =
|
|
523
|
+
}), bt = he({
|
|
514
524
|
name: "TresCanvas",
|
|
515
525
|
props: [
|
|
516
526
|
"shadows",
|
|
@@ -526,33 +536,35 @@ const { logWarning: ht } = I(), wt = me({
|
|
|
526
536
|
"clearColor",
|
|
527
537
|
"windowSize",
|
|
528
538
|
"preset",
|
|
529
|
-
"disableRender"
|
|
539
|
+
"disableRender",
|
|
540
|
+
"camera"
|
|
530
541
|
],
|
|
531
542
|
setup(e, { slots: t, expose: o }) {
|
|
532
|
-
const a =
|
|
543
|
+
const a = lt();
|
|
533
544
|
return o(a), () => k(wt, e, t);
|
|
534
545
|
}
|
|
535
|
-
}),
|
|
546
|
+
}), Tt = {
|
|
536
547
|
install(e) {
|
|
537
548
|
e.component("TresCanvas", bt);
|
|
538
549
|
}
|
|
539
550
|
};
|
|
540
551
|
export {
|
|
541
552
|
Qe as CameraType,
|
|
553
|
+
Q as TRES_CONTEXT_KEY,
|
|
542
554
|
bt as TresCanvas,
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
555
|
+
ye as catalogue,
|
|
556
|
+
Tt as default,
|
|
557
|
+
Me as extend,
|
|
558
|
+
Rt as isProd,
|
|
559
|
+
ut as trasverseObjects,
|
|
560
|
+
xe as useCamera,
|
|
549
561
|
Et as useLoader,
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
562
|
+
D as useLogger,
|
|
563
|
+
dt as useRaycaster,
|
|
564
|
+
Re as useRenderLoop,
|
|
553
565
|
st as useRenderer,
|
|
554
566
|
Pt as useSeek,
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
567
|
+
Ct as useTexture,
|
|
568
|
+
S as useTres,
|
|
569
|
+
lt as useTresProvider
|
|
558
570
|
};
|
package/dist/tres.umd.cjs
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* name: @tresjs/core
|
|
3
|
-
* version: v2.0.0-
|
|
3
|
+
* version: v2.0.0-rc.0
|
|
4
4
|
* (c) 2023
|
|
5
5
|
* description: Declarative ThreeJS using Vue Components
|
|
6
6
|
* author: Alvaro Saburido <hola@alvarosaburido.dev> (https://github.com/alvarosabu/)
|
|
7
7
|
*/
|
|
8
|
-
(function(
|
|
9
|
-
You could set windowSize=true to force the canvas to be the size of the window.`);const de=()=>{t.value&&(t.value.setSize(x.value,B.value),t.value.setPixelRatio(Math.min(ue.value,2)))},me=()=>{if(!t.value)return;const D=c.resolveUnref(R);if(D){D in q||E("Renderer Preset must be one of these: "+Object.keys(q).join(", ")),H(t.value,q[D]);return}t.value.shadowMap.enabled=c.resolveUnref(w),t.value.shadowMap.type=c.resolveUnref(v),t.value.toneMapping=c.resolveUnref(M)||u.NoToneMapping,t.value.toneMappingExposure=c.resolveUnref(g),t.value.outputEncoding=c.resolveUnref(T)||u.LinearEncoding,L!=null&&L.value&&t.value.setClearColor(Me(c.resolveUnref(L))),t.value.useLegacyLights=c.resolveUnref(b)},Ge=()=>{const D=c.unrefElement(y.canvas);D&&(t.value=new u.WebGLRenderer({canvas:D,alpha:c.resolveUnref(n),antialias:c.resolveUnref(a),context:c.resolveUnref(_),depth:c.resolveUnref(o),failIfMajorPerformanceCaveat:c.resolveUnref(i),logarithmicDepthBuffer:c.resolveUnref(f),powerPreference:c.resolveUnref(C),precision:c.resolveUnref(l),stencil:c.resolveUnref(p),preserveDrawingBuffer:c.resolveUnref(P),premultipliedAlpha:c.resolveUnref(m)}),j("renderer",t.value),j("clock",new u.Clock),j("aspectRatio",K),me(),de(),Fe(),r.value=!0)},Ve=()=>{t.value&&(t.value.dispose(),t.value=void 0,r.value=!1,ze())};return s.watch([K,ue],de),s.watch([w,v,T,b,M,g,L],me),s.watch(()=>[y.canvas,y.container],()=>{c.unrefElement(y.canvas)&&c.unrefElement(y.container)&&Ge()},{immediate:!0,deep:!0}),{renderer:t,isReady:r,dispose:Ve,aspectRatio:K}}const te=e=>!!e&&e.constructor===Array;function ne(e){const t={nodes:{},materials:{}};return e&&e.traverse(r=>{r.name&&(t.nodes[r.name]=r),r.material&&!t.materials[r.material.name]&&(t.materials[r.material.name]=r.material)}),t}async function Le(e,t,r,n,a){const{logError:o}=U(),f=new e;a&&a(f),r&&r(f);const l=(Array.isArray(t)?t:[t]).map(m=>new Promise((p,w)=>{f.load(m,v=>{v.scene&&Object.assign(v,ne(v.scene)),p(v)},n,v=>w(o("[useLoader] - Failed to load resource",v)))}));return te(t)?await Promise.all(l):await l[0]}async function _e(e){const t=new u.LoadingManager,r=new u.TextureLoader(t),n=a=>new Promise((o,f)=>{r.load(a,i=>o(i),()=>null,()=>{f(new Error("[useTextures] - Failed to load texture"))})});if(te(e)){const a=await Promise.all(e.map(o=>n(o)));return e.length>1?a:a[0]}else{const{map:a,displacementMap:o,normalMap:f,roughnessMap:i,metalnessMap:l,aoMap:m,alphaMap:p,matcap:w}=e;return{map:a?await n(a):null,displacementMap:o?await n(o):null,normalMap:f?await n(f):null,roughnessMap:i?await n(i):null,metalnessMap:l?await n(l):null,aoMap:m?await n(m):null,alphaMap:p?await n(p):null,matcap:w?await n(w):null}}}const h=["00","01","02","03","04","05","06","07","08","09","0a","0b","0c","0d","0e","0f","10","11","12","13","14","15","16","17","18","19","1a","1b","1c","1d","1e","1f","20","21","22","23","24","25","26","27","28","29","2a","2b","2c","2d","2e","2f","30","31","32","33","34","35","36","37","38","39","3a","3b","3c","3d","3e","3f","40","41","42","43","44","45","46","47","48","49","4a","4b","4c","4d","4e","4f","50","51","52","53","54","55","56","57","58","59","5a","5b","5c","5d","5e","5f","60","61","62","63","64","65","66","67","68","69","6a","6b","6c","6d","6e","6f","70","71","72","73","74","75","76","77","78","79","7a","7b","7c","7d","7e","7f","80","81","82","83","84","85","86","87","88","89","8a","8b","8c","8d","8e","8f","90","91","92","93","94","95","96","97","98","99","9a","9b","9c","9d","9e","9f","a0","a1","a2","a3","a4","a5","a6","a7","a8","a9","aa","ab","ac","ad","ae","af","b0","b1","b2","b3","b4","b5","b6","b7","b8","b9","ba","bb","bc","bd","be","bf","c0","c1","c2","c3","c4","c5","c6","c7","c8","c9","ca","cb","cc","cd","ce","cf","d0","d1","d2","d3","d4","d5","d6","d7","d8","d9","da","db","dc","dd","de","df","e0","e1","e2","e3","e4","e5","e6","e7","e8","e9","ea","eb","ec","ed","ee","ef","f0","f1","f2","f3","f4","f5","f6","f7","f8","f9","fa","fb","fc","fd","fe","ff"];function Se(){const e=Math.random()*4294967295|0,t=Math.random()*4294967295|0,r=Math.random()*4294967295|0,n=Math.random()*4294967295|0;return(h[e&255]+h[e>>8&255]+h[e>>16&255]+h[e>>24&255]+"-"+h[t&255]+h[t>>8&255]+"-"+h[t>>16&15|64]+h[t>>24&255]+"-"+h[r&63|128]+h[r>>8&255]+"-"+h[r>>16&255]+h[r>>24&255]+h[n&255]+h[n>>8&255]+h[n>>16&255]+h[n>>24&255]).toLowerCase()}const ae=Symbol();function re(){const e=s.shallowReactive({uuid:Se(),camera:void 0,cameras:[],scene:void 0,renderer:void 0,aspectRatio:s.computed(()=>window.innerWidth/window.innerHeight)});function t(a){return e[a]}function r(a,o){e[a]=o}const n={state:e,...s.toRefs(e),getState:t,setState:r};return s.provide(ae,n),n}const A=()=>s.inject(ae,{state:s.shallowReactive({camera:void 0,cameras:[],scene:void 0,renderer:void 0})});function oe(){var f;const e=s.shallowRef(new u.Raycaster),t=s.ref(new u.Vector2),r=s.ref(null),{setState:n,state:a}=A();n("raycaster",e.value),n("pointer",t),n("currentInstance",r);function o(i){t.value.x=i.clientX/window.innerWidth*2-1,t.value.y=-(i.clientY/window.innerHeight)*2+1}return(f=a==null?void 0:a.renderer)==null||f.domElement.addEventListener("pointermove",o),s.onUnmounted(()=>{var i;(i=a==null?void 0:a.renderer)==null||i.domElement.removeEventListener("pointermove",o)}),{raycaster:e,pointer:t}}const xe=!0,ie="[TresJS ▲ ■ ●] ";function U(){function e(n,a){console.error(`${ie} ${n}`,a||"")}function t(n){console.warn(`${ie} ${n}`)}function r(n,a){}return{logError:e,logWarning:t,logMessage:r}}function Oe(){const{logWarning:e}=U();function t(n,a,o){let f=null;return n.traverse(i=>{i[a]===o&&(f=i)}),f||e(`Child with ${a} '${o}' not found.`),f}function r(n,a){return t(n,"name",a)}return{seek:t,seekByName:r}}const Ae=/^on[^a-z]/,Ue=e=>Ae.test(e);function We(e){}let se=null;const ce={GEOMETRY_VIA_PROP:"tres__geometryViaProp",MATERIAL_VIA_PROP:"tres__materialViaProp"},{logError:fe}=U(),ke={createElement(e,t,r,n){var l,m;if(n||(n={}),n.args||(n.args=[]),e==="template"||Ce(e))return null;let a=e.replace("Tres",""),o;if(e==="primitive"){(n==null?void 0:n.object)===void 0&&fe("Tres primitives need a prop 'object'");const p=n.object;a=p.type,o=Object.assign(p,{type:a,attach:n.attach,primitive:!0})}else{const p=W.value[a];p||fe(`${a} is not defined on the THREE namespace. Use extend to add it to the catalog.`),o=new p(...n.args)}if(o.isCamera){n!=null&&n.position||o.position.set(3,3,3),n!=null&&n.lookAt||o.lookAt(0,0,0);const{pushCamera:p}=z();p(o)}(n==null?void 0:n.attach)===void 0&&(o.isMaterial?o.attach="material":o.isBufferGeometry&&(o.attach="geometry"));const{GEOMETRY_VIA_PROP:f,MATERIAL_VIA_PROP:i}=ce;return o.isObject3D&&((l=n==null?void 0:n.material)!=null&&l.isMaterial&&(o.userData[i]=!0),(m=n==null?void 0:n.geometry)!=null&&m.isBufferGeometry&&(o.userData[f]=!0)),o.events={},o},insert(e,t){var r,n;if(((e==null?void 0:e.__vnode.type)==="TresGroup"||(e==null?void 0:e.__vnode.type)==="TresObject3D")&&t===null&&!((n=(r=e==null?void 0:e.__vnode)==null?void 0:r.ctx)!=null&&n.asyncResolved)){se=e;return}t||(t=se),e!=null&&e.isObject3D&&(t!=null&&t.isObject3D)?(t.add(e),e.dispatchEvent({type:"added"})):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 t,r;if(e){if(e.isObject3D){const n=e,a=o=>{var l,m;const{GEOMETRY_VIA_PROP:f,MATERIAL_VIA_PROP:i}=ce;o.userData[i]||(l=o.material)==null||l.dispose(),o.userData[f]||(m=o.geometry)==null||m.dispose()};n.traverse(o=>a(o)),a(n)}(t=e.removeFromParent)==null||t.call(e),(r=e.dispose)==null||r.call(e)}},patchProp(e,t,r,n){if(e){let a=e,o=t,f=V(o),i=a==null?void 0:a[f];if(a.type==="BufferGeometry"){a.setAttribute(V(o),new u.BufferAttribute(...n));return}if(o.includes("-")&&i===void 0){const m=o.split("-");i=m.reduce((p,w)=>p[V(w)],a),o=m.pop(),f=o.toLowerCase(),i!=null&&i.set||(a=m.reduce((p,w)=>p[V(w)],a))}Ue(o)&&(e.events[o]=n);let l=n;if(l===""&&(l=!0),c.isFunction(i)){Array.isArray(l)?e[f](...l):e[f](l);return}!(i!=null&&i.set)&&!c.isFunction(i)?a[f]=l:i.constructor===l.constructor&&(i!=null&&i.copy)?i==null||i.copy(l):Array.isArray(l)?i.set(...l):!i.isColor&&i.setScalar?i.setScalar(l):i.set(l)}},parentNode(e){return(e==null?void 0:e.parent)||null},createText:()=>void 0,createComment:()=>void 0,setText:()=>void 0,setElementText:()=>void 0,nextSibling:()=>void 0,querySelector:()=>void 0,setScopeId:()=>void 0,cloneNode:()=>void 0,insertStaticContent:()=>void 0},{createApp:Te}=s.createRenderer(ke),Re=e=>{const t=Te(r);function r(){return e&&e.default?e.default():[]}return t};N(J);const{logWarning:je}=U(),De=s.defineComponent({name:"TresScene",props:["shadows","shadowMapType","physicallyCorrectLights","useLegacyLights","outputEncoding","toneMapping","toneMappingExposure","context","powerPreference","preserveDrawingBuffer","clearColor","windowSize","preset","disableRender"],setup(e,{slots:t,expose:r}){e.physicallyCorrectLights===!0&&je("physicallyCorrectLights is deprecated, useLegacyLights is now false by default");const n=s.ref(),a=s.ref(),o=new J.Scene,{setState:f}=A();f("scene",o),f("canvas",a),f("container",n);const{pushCamera:i}=z();i(new u.PerspectiveCamera),s.onMounted(()=>{l()}),s.onUnmounted(()=>{f("renderer",null)});function l(){const{renderer:w}=ee(e),{activeCamera:v}=z(),{onLoop:k}=$(),{raycaster:b,pointer:T}=oe();let M=null,g=null;s.watchEffect(()=>{v.value&&b.value.setFromCamera(T.value,v.value)}),k(()=>{var _,C,P,L,S,R,y,j,x,B;if(v.value&&e.disableRender===!0&&((_=w.value)==null||_.render(o,v.value)),b.value){const E=b.value.intersectObjects(o.children);E.length>0?(g=E[0],M===null&&((L=(P=(C=g.object)==null?void 0:C.events)==null?void 0:P.onPointerEnter)==null||L.call(P,g)),(y=(R=(S=g.object)==null?void 0:S.events)==null?void 0:R.onPointerMove)==null||y.call(R,g)):M!==null&&((B=(x=(j=g==null?void 0:g.object)==null?void 0:j.events)==null?void 0:x.onPointerLeave)==null||B.call(x,M),g=null),M=g}}),c.useEventListener(a.value,"click",()=>{var _,C,P;g!==null&&((P=(C=(_=g.object)==null?void 0:_.events)==null?void 0:C.onClick)==null||P.call(C,g))})}let m;function p(){m=Re(t),m.provide("useTres",A()),m.provide("extend",N),m.mount(o)}return p(),r({scene:o}),()=>s.h(s.h("div",{ref:n,"data-scene":o.uuid,key:o.uuid,style:{position:"relative",width:"100%",height:"100%",pointerEvents:"auto",touchAction:"none"}},[s.h("div",{style:{width:"100%",height:"100%"}},[s.h("canvas",{ref:a,"data-scene":o.uuid,style:{display:"block",width:"100%",height:"100%",position:e.windowSize?"fixed":"absolute",top:0,left:0}})])]))}}),le=s.defineComponent({name:"TresCanvas",props:["shadows","shadowMapType","physicallyCorrectLights","useLegacyLights","outputEncoding","toneMapping","toneMappingExposure","context","powerPreference","preserveDrawingBuffer","clearColor","windowSize","preset","disableRender"],setup(e,{slots:t,expose:r}){const n=re();return r(n),()=>s.h(De,e,t)}}),Ie={install(e){e.component("TresCanvas",le)}};d.CameraType=X,d.TresCanvas=le,d.catalogue=W,d.default=Ie,d.extend=N,d.isProd=xe,d.trasverseObjects=ne,d.useCamera=z,d.useLoader=Le,d.useLogger=U,d.useRaycaster=oe,d.useRenderLoop=$,d.useRenderer=ee,d.useSeek=Oe,d.useTexture=_e,d.useTres=A,d.useTresProvider=re,Object.defineProperties(d,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
|
|
8
|
+
(function(l,s){typeof exports=="object"&&typeof module<"u"?s(exports,require("vue"),require("three"),require("@vueuse/core")):typeof define=="function"&&define.amd?define(["exports","vue","three","@vueuse/core"],s):(l=typeof globalThis<"u"?globalThis:l||self,s(l.tres={},l.Vue,l.Three,l.VueUseCore))})(this,function(l,s,d,u){"use strict";function ye(e){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const i in e)if(i!=="default"){const a=Object.getOwnPropertyDescriptor(e,i);Object.defineProperty(t,i,a.get?a:{enumerable:!0,get:()=>e[i]})}}return t.default=e,Object.freeze(t)}const H=ye(d),Y=s.ref({uuid:d.MathUtils.generateUUID()}),$=e=>void Object.assign(Y.value,e);var ee=(e=>(e.Perspective="Perspective",e.Orthographic="Orthographic",e))(ee||{});const Me=45;let A;function q(){const{state:e,setState:t,aspectRatio:i}=_();function a(o="Perspective",c){var m,p,h;if(o==="Perspective"){const{near:w,far:y,fov:L}=c||{near:.1,far:1e3,fov:Me};A=new d.PerspectiveCamera(L,((m=e.aspectRatio)==null?void 0:m.value)||window.innerWidth/window.innerHeight,w,y),(p=e.cameras)==null||p.push(A)}else{const{left:w,right:y,top:L,bottom:M,near:V,far:S}=c||{left:-100,right:100,top:100,bottom:-100,near:.1,far:1e3};A=new d.OrthographicCamera(w,y,L,M,V,S),(h=e.cameras)==null||h.push(A)}return e.camera=A,t("camera",e.camera),A}function n(){var o;e.camera instanceof d.PerspectiveCamera&&e.aspectRatio&&(e.camera.aspect=e.aspectRatio.value),(o=e.camera)==null||o.updateProjectionMatrix()}function r(o){var c;(c=e.cameras)==null||c.push(o),o instanceof d.PerspectiveCamera&&e.aspectRatio&&(o.aspect=e.aspectRatio.value),o.updateProjectionMatrix(),t("camera",o)}function f(){e.cameras=[]}return s.watchEffect(()=>{i!=null&&i.value&&n()}),{activeCamera:s.toRef(e,"camera"),createCamera:a,updateCamera:n,pushCamera:r,clearCameras:f}}const te=u.createEventHook(),ae=u.createEventHook(),K=u.createEventHook(),D=new d.Clock;let E=0,B=0;const{pause:Ce,resume:Pe,isActive:Le}=u.useRafFn(()=>{te.trigger({delta:E,elapsed:B,clock:D}),ae.trigger({delta:E,elapsed:B,clock:D}),K.trigger({delta:E,elapsed:B,clock:D})},{immediate:!1});K.on(()=>{E=D.getDelta(),B=D.getElapsedTime()});function X(){return{onBeforeLoop:te.on,onLoop:ae.on,onAfterLoop:K.on,pause:Ce,resume:Pe,isActive:Le}}function _e(e){return e instanceof d.Color?e:Array.isArray(e)?new d.Color(...e):new d.Color(e)}const J={realistic:{outputEncoding:d.sRGBEncoding,toneMapping:d.ACESFilmicToneMapping,toneMappingExposure:3,shadowMap:{enabled:!0,type:d.PCFSoftShadowMap}}},ne=(e,t)=>{for(const i of Object.keys(t))t[i]instanceof Object&&Object.assign(t[i],ne(e[i],t[i]));return Object.assign(e||{},t),e},Se=Oe("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 z(e){return e.replace(/-([a-z])/g,(t,i)=>i.toUpperCase())}function Oe(e,t){const i=Object.create(null),a=e.split(",");for(let n=0;n<a.length;n++)i[a[n]]=!0;return t?n=>!!i[n.toLowerCase()]:n=>!!i[n]}function re(e){var we,be;const t=s.shallowRef(),i=s.ref(!1),{alpha:a=!0,antialias:n=!0,depth:r,logarithmicDepthBuffer:f,failIfMajorPerformanceCaveat:o,precision:c,premultipliedAlpha:m,stencil:p,shadows:h=!1,shadowMapType:w=d.PCFShadowMap,useLegacyLights:y=!1,outputEncoding:L=d.LinearEncoding,toneMapping:M=d.NoToneMapping,toneMappingExposure:V=1,context:S=void 0,powerPreference:Q="default",preserveDrawingBuffer:k=!1,clearColor:g,windowSize:C=!1,preset:P=void 0}=s.toRefs(e),{state:b,setState:R}=_(),{width:I,height:O}=u.toValue(C)==!0||u.toValue(C)===""||u.toValue(C)==="true"?u.useWindowSize():u.useElementSize(b.container),{logError:F,logWarning:U}=T(),{pixelRatio:x}=u.useDevicePixelRatio(),{pause:W,resume:N}=X(),Z=s.computed(()=>I.value/O.value);!u.toValue(C)&&((be=(we=b.container)==null?void 0:we.value)==null?void 0:be.offsetHeight)===0&&U(`Oops... Seems like your canvas height is currently 0px, by default it takes the height of it's parent, so make sure it has some height with CSS.
|
|
9
|
+
You could set windowSize=true to force the canvas to be the size of the window.`);const ve=()=>{t.value&&(t.value.setSize(I.value,O.value),t.value.setPixelRatio(Math.min(x.value,2)))},he=()=>{if(!t.value)return;const j=u.toValue(P);if(j){j in J||F("Renderer Preset must be one of these: "+Object.keys(J).join(", ")),ne(t.value,J[j]);return}t.value.shadowMap.enabled=u.toValue(h),t.value.shadowMap.type=u.toValue(w),t.value.toneMapping=u.toValue(M)||d.NoToneMapping,t.value.toneMappingExposure=u.toValue(V),t.value.outputEncoding=u.toValue(L)||d.LinearEncoding,g!=null&&g.value&&t.value.setClearColor(_e(u.toValue(g))),t.value.useLegacyLights=u.toValue(y)},Fe=()=>{const j=u.unrefElement(b.canvas);j&&(t.value=new d.WebGLRenderer({canvas:j,alpha:u.toValue(a),antialias:u.toValue(n),context:u.toValue(S),depth:u.toValue(r),failIfMajorPerformanceCaveat:u.toValue(o),logarithmicDepthBuffer:u.toValue(f),powerPreference:u.toValue(Q),precision:u.toValue(c),stencil:u.toValue(p),preserveDrawingBuffer:u.toValue(k),premultipliedAlpha:u.toValue(m)}),R("renderer",t.value),R("clock",new d.Clock),R("aspectRatio",Z),he(),ve(),N(),i.value=!0)},Ue=()=>{t.value&&(t.value.dispose(),t.value=void 0,i.value=!1,W())};return s.watch([Z,x],ve),s.watch([h,w,L,y,M,V,g],he),s.watch(()=>[b.canvas,b.container],()=>{u.unrefElement(b.canvas)&&u.unrefElement(b.container)&&Fe()},{immediate:!0,deep:!0}),{renderer:t,isReady:i,dispose:Ue,aspectRatio:Z}}const ie=e=>typeof e=="function",xe=e=>typeof e=="string",oe=e=>!!e&&e.constructor===Array;function se(e){const t={nodes:{},materials:{}};return e&&e.traverse(i=>{i.name&&(t.nodes[i.name]=i),i.material&&!t.materials[i.material.name]&&(t.materials[i.material.name]=i.material)}),t}async function Ae(e,t,i,a,n){const{logError:r}=T(),f=new e;n&&n(f),i&&i(f);const c=(Array.isArray(t)?t:[t]).map(m=>new Promise((p,h)=>{f.load(m,w=>{w.scene&&Object.assign(w,se(w.scene)),p(w)},a,w=>h(r("[useLoader] - Failed to load resource",w)))}));return oe(t)?await Promise.all(c):await c[0]}async function Te(e){const t=new d.LoadingManager,i=new d.TextureLoader(t),a=n=>new Promise((r,f)=>{i.load(n,o=>r(o),()=>null,()=>{f(new Error("[useTextures] - Failed to load texture"))})});if(oe(e)){const n=await Promise.all(e.map(r=>a(r)));return e.length>1?n:n[0]}else{const{map:n,displacementMap:r,normalMap:f,roughnessMap:o,metalnessMap:c,aoMap:m,alphaMap:p,matcap:h}=e;return{map:n?await a(n):null,displacementMap:r?await a(r):null,normalMap:f?await a(f):null,roughnessMap:o?await a(o):null,metalnessMap:c?await a(c):null,aoMap:m?await a(m):null,alphaMap:p?await a(p):null,matcap:h?await a(h):null}}}const v=["00","01","02","03","04","05","06","07","08","09","0a","0b","0c","0d","0e","0f","10","11","12","13","14","15","16","17","18","19","1a","1b","1c","1d","1e","1f","20","21","22","23","24","25","26","27","28","29","2a","2b","2c","2d","2e","2f","30","31","32","33","34","35","36","37","38","39","3a","3b","3c","3d","3e","3f","40","41","42","43","44","45","46","47","48","49","4a","4b","4c","4d","4e","4f","50","51","52","53","54","55","56","57","58","59","5a","5b","5c","5d","5e","5f","60","61","62","63","64","65","66","67","68","69","6a","6b","6c","6d","6e","6f","70","71","72","73","74","75","76","77","78","79","7a","7b","7c","7d","7e","7f","80","81","82","83","84","85","86","87","88","89","8a","8b","8c","8d","8e","8f","90","91","92","93","94","95","96","97","98","99","9a","9b","9c","9d","9e","9f","a0","a1","a2","a3","a4","a5","a6","a7","a8","a9","aa","ab","ac","ad","ae","af","b0","b1","b2","b3","b4","b5","b6","b7","b8","b9","ba","bb","bc","bd","be","bf","c0","c1","c2","c3","c4","c5","c6","c7","c8","c9","ca","cb","cc","cd","ce","cf","d0","d1","d2","d3","d4","d5","d6","d7","d8","d9","da","db","dc","dd","de","df","e0","e1","e2","e3","e4","e5","e6","e7","e8","e9","ea","eb","ec","ed","ee","ef","f0","f1","f2","f3","f4","f5","f6","f7","f8","f9","fa","fb","fc","fd","fe","ff"];function Ve(){const e=Math.random()*4294967295|0,t=Math.random()*4294967295|0,i=Math.random()*4294967295|0,a=Math.random()*4294967295|0;return(v[e&255]+v[e>>8&255]+v[e>>16&255]+v[e>>24&255]+"-"+v[t&255]+v[t>>8&255]+"-"+v[t>>16&15|64]+v[t>>24&255]+"-"+v[i&63|128]+v[i>>8&255]+"-"+v[i>>16&255]+v[i>>24&255]+v[a&255]+v[a>>8&255]+v[a>>16&255]+v[a>>24&255]).toLowerCase()}const G=Symbol();function ce(){const e=s.shallowReactive({uuid:Ve(),camera:void 0,cameras:[],scene:void 0,renderer:void 0,aspectRatio:s.computed(()=>window.innerWidth/window.innerHeight)});function t(n){return e[n]}function i(n,r){e[n]=r}const a={state:e,...s.toRefs(e),getState:t,setState:i};return s.provide(G,a),a}const _=()=>s.inject(G,{state:s.shallowReactive({camera:void 0,cameras:[],scene:void 0,renderer:void 0})});function ue(){var f;const e=s.shallowRef(new d.Raycaster),t=s.ref(new d.Vector2),i=s.ref(null),{setState:a,state:n}=_();a("raycaster",e.value),a("pointer",t),a("currentInstance",i);function r(o){t.value.x=o.clientX/window.innerWidth*2-1,t.value.y=-(o.clientY/window.innerHeight)*2+1}return(f=n==null?void 0:n.renderer)==null||f.domElement.addEventListener("pointermove",r),s.onUnmounted(()=>{var o;(o=n==null?void 0:n.renderer)==null||o.domElement.removeEventListener("pointermove",r)}),{raycaster:e,pointer:t}}const ke=!0,fe="[TresJS ▲ ■ ●] ";function T(){function e(a,n){console.error(`${fe} ${a}`,n||"")}function t(a){console.warn(`${fe} ${a}`)}function i(a,n){}return{logError:e,logWarning:t,logMessage:i}}function Re(){const{logWarning:e}=T();function t(a,n,r){let f=null;return a.traverse(o=>{o[n]===r&&(f=o)}),f||e(`Child with ${n} '${r}' not found.`),f}function i(a,n){return t(a,"name",n)}return{seek:t,seekByName:i}}const je=/^on[^a-z]/,De=e=>je.test(e);function Ne(e){}let le=null;const de={GEOMETRY_VIA_PROP:"tres__geometryViaProp",MATERIAL_VIA_PROP:"tres__materialViaProp"},{logError:me}=T(),Ie={createElement(e,t,i,a){var c,m;if(a||(a={}),a.args||(a.args=[]),e==="template"||Se(e))return null;let n=e.replace("Tres",""),r;if(e==="primitive"){(a==null?void 0:a.object)===void 0&&me("Tres primitives need a prop 'object'");const p=a.object;n=p.type,r=Object.assign(p,{type:n,attach:a.attach,primitive:!0})}else{const p=Y.value[n];p||me(`${n} is not defined on the THREE namespace. Use extend to add it to the catalog.`),r=new p(...a.args)}if(r.isCamera){a!=null&&a.position||r.position.set(3,3,3),a!=null&&a.lookAt||r.lookAt(0,0,0);const{pushCamera:p}=q();p(r)}(a==null?void 0:a.attach)===void 0&&(r.isMaterial?r.attach="material":r.isBufferGeometry&&(r.attach="geometry"));const{GEOMETRY_VIA_PROP:f,MATERIAL_VIA_PROP:o}=de;return r.isObject3D&&((c=a==null?void 0:a.material)!=null&&c.isMaterial&&(r.userData[o]=!0),(m=a==null?void 0:a.geometry)!=null&&m.isBufferGeometry&&(r.userData[f]=!0)),r.events={},r},insert(e,t){var i,a,n,r;if((((i=e==null?void 0:e.__vnode)==null?void 0:i.type)==="TresGroup"||((a=e==null?void 0:e.__vnode)==null?void 0:a.type)==="TresObject3D")&&t===null&&!((r=(n=e==null?void 0:e.__vnode)==null?void 0:n.ctx)!=null&&r.asyncResolved)){le=e;return}t||(t=le),e!=null&&e.isObject3D&&(t!=null&&t.isObject3D)?(t.add(e),e.dispatchEvent({type:"added"})):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 t,i;if(e){if(e.isObject3D){const a=e,n=r=>{var c,m;const{GEOMETRY_VIA_PROP:f,MATERIAL_VIA_PROP:o}=de;r.userData[o]||(c=r.material)==null||c.dispose(),r.userData[f]||(m=r.geometry)==null||m.dispose()};a.traverse(r=>n(r)),n(a)}(t=e.removeFromParent)==null||t.call(e),(i=e.dispose)==null||i.call(e)}},patchProp(e,t,i,a){if(e){let n=e,r=t,f=z(r),o=n==null?void 0:n[f];if(n.type==="BufferGeometry"){if(r==="args")return;n.setAttribute(z(r),new d.BufferAttribute(...a));return}if(r.includes("-")&&o===void 0){const m=r.split("-");o=m.reduce((p,h)=>p[z(h)],n),r=m.pop(),f=r.toLowerCase(),o!=null&&o.set||(n=m.reduce((p,h)=>p[z(h)],n))}De(r)&&(e.events[r]=a);let c=a;if(c===""&&(c=!0),ie(o)){Array.isArray(c)?e[f](...c):e[f](c);return}!(o!=null&&o.set)&&!ie(o)?n[f]=c:o.constructor===c.constructor&&(o!=null&&o.copy)?o==null||o.copy(c):Array.isArray(c)?o.set(...c):!o.isColor&&o.setScalar?o.setScalar(c):o.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},{createApp:Ee}=s.createRenderer(Ie),Be=e=>{const t=Ee(i);function i(){return e&&e.default?e.default():[]}return t};$(H);const{logWarning:pe}=T(),ze=s.defineComponent({name:"TresScene",props:["shadows","shadowMapType","physicallyCorrectLights","useLegacyLights","outputEncoding","toneMapping","toneMappingExposure","context","powerPreference","preserveDrawingBuffer","clearColor","windowSize","preset","disableRender","camera"],setup(e,{slots:t,expose:i}){e.physicallyCorrectLights===!0&&pe("physicallyCorrectLights is deprecated, useLegacyLights is now false by default");const a=s.ref(),n=s.ref(),r=new H.Scene,{setState:f}=_();f("scene",r),f("canvas",n),f("container",a);const o=s.ref(),c=t&&t.default&&t.default();c&&(c==null?void 0:c.length)>0&&(o.value=c.some(M=>xe(M.type)&&M.type.includes("Camera"))||e.camera,o.value||pe("No camera found in the scene, please add one!")),s.onMounted(()=>{w()}),s.onUnmounted(()=>{f("renderer",null)});const{activeCamera:m,pushCamera:p,clearCameras:h}=q();function w(){const{renderer:M}=re(e);e.camera&&p(e.camera);const{onLoop:V}=X(),{raycaster:S,pointer:Q}=ue();let k=null,g=null;s.watchEffect(()=>{m.value&&S.value.setFromCamera(Q.value,m.value)}),V(()=>{var C,P,b,R,I,O,F,U,x,W;if(m.value&&e.disableRender!==!0&&e.disableRender!==""&&((C=M.value)==null||C.render(r,m.value)),S.value){const N=S.value.intersectObjects(r.children);N.length>0?(g=N[0],k===null&&((R=(b=(P=g.object)==null?void 0:P.events)==null?void 0:b.onPointerEnter)==null||R.call(b,g)),(F=(O=(I=g.object)==null?void 0:I.events)==null?void 0:O.onPointerMove)==null||F.call(O,g)):k!==null&&((W=(x=(U=g==null?void 0:g.object)==null?void 0:U.events)==null?void 0:x.onPointerLeave)==null||W.call(x,k),g=null),k=g}}),u.useEventListener(n.value,"click",()=>{var C,P,b;g!==null&&((b=(P=(C=g.object)==null?void 0:C.events)==null?void 0:P.onClick)==null||b.call(P,g))})}let y;function L(){y=Be(t),y.provide("useTres",_()),y.provide(G,_()),y.provide("extend",$),y.mount(r)}return L(),i({scene:r}),s.watch(()=>e.camera,M=>{M&&(h(),p(M))}),()=>s.h(s.h("div",{ref:a,"data-scene":r.uuid,key:r.uuid,style:{position:"relative",width:"100%",height:"100%",pointerEvents:"auto",touchAction:"none"}},[s.h("div",{style:{width:"100%",height:"100%"}},[s.h("canvas",{ref:n,"data-scene":r.uuid,style:{display:"block",width:"100%",height:"100%",position:e.windowSize?"fixed":"absolute",top:0,left:0}})])]))}}),ge=s.defineComponent({name:"TresCanvas",props:["shadows","shadowMapType","physicallyCorrectLights","useLegacyLights","outputEncoding","toneMapping","toneMappingExposure","context","powerPreference","preserveDrawingBuffer","clearColor","windowSize","preset","disableRender","camera"],setup(e,{slots:t,expose:i}){const a=ce();return i(a),()=>s.h(ze,e,t)}}),Ge={install(e){e.component("TresCanvas",ge)}};l.CameraType=ee,l.TRES_CONTEXT_KEY=G,l.TresCanvas=ge,l.catalogue=Y,l.default=Ge,l.extend=$,l.isProd=ke,l.trasverseObjects=se,l.useCamera=q,l.useLoader=Ae,l.useLogger=T,l.useRaycaster=ue,l.useRenderLoop=X,l.useRenderer=re,l.useSeek=Re,l.useTexture=Te,l.useTres=_,l.useTresProvider=ce,Object.defineProperties(l,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
|
package/dist/types/index.d.ts
CHANGED
|
@@ -55,9 +55,12 @@ export type TresAttributes = Record<string, any> & {
|
|
|
55
55
|
export type TresVectorProp = Vector2 | Vector3 | number[] | number;
|
|
56
56
|
export type TresColor = string | number | Color | number[];
|
|
57
57
|
export interface TresEvent extends Intersection<Object3D<Event>> {
|
|
58
|
-
object: Object3D
|
|
58
|
+
object: Object3D & {
|
|
59
|
+
events?: Record<string, any>;
|
|
60
|
+
};
|
|
59
61
|
distance: number;
|
|
60
62
|
faceIndex?: number | undefined;
|
|
61
63
|
point: Vector3;
|
|
62
64
|
uv?: Vector2;
|
|
65
|
+
events?: Record<string, any>;
|
|
63
66
|
}
|
package/package.json
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tresjs/core",
|
|
3
3
|
"description": "Declarative ThreeJS using Vue Components",
|
|
4
|
-
"version": "2.0.0-
|
|
4
|
+
"version": "2.0.0-rc.0",
|
|
5
5
|
"type": "module",
|
|
6
|
+
"packageManager": "pnpm@8.3.1",
|
|
6
7
|
"author": "Alvaro Saburido <hola@alvarosaburido.dev> (https://github.com/alvarosabu/)",
|
|
7
8
|
"files": [
|
|
8
9
|
"dist"
|
|
@@ -57,46 +58,46 @@
|
|
|
57
58
|
},
|
|
58
59
|
"dependencies": {
|
|
59
60
|
"@alvarosabu/utils": "^2.3.0",
|
|
60
|
-
"@vueuse/core": "^
|
|
61
|
+
"@vueuse/core": "^10.1.2"
|
|
61
62
|
},
|
|
62
63
|
"devDependencies": {
|
|
63
|
-
"@tresjs/core": "2.0.0-beta.5",
|
|
64
64
|
"@alvarosabu/prettier-config": "^1.3.0",
|
|
65
65
|
"@huntersofbook/plausible-vue": "^1.0.0",
|
|
66
66
|
"@release-it/conventional-changelog": "^5.1.1",
|
|
67
67
|
"@stackblitz/sdk": "^1.9.0",
|
|
68
|
-
"@tresjs/cientos": "2.0.0-beta.
|
|
69
|
-
"@
|
|
70
|
-
"@
|
|
71
|
-
"@typescript-eslint/
|
|
72
|
-
"@
|
|
68
|
+
"@tresjs/cientos": "2.0.0-beta.6",
|
|
69
|
+
"@tresjs/core": "2.0.0-beta.11",
|
|
70
|
+
"@types/three": "^0.151.0",
|
|
71
|
+
"@typescript-eslint/eslint-plugin": "^5.59.2",
|
|
72
|
+
"@typescript-eslint/parser": "^5.59.2",
|
|
73
|
+
"@vitejs/plugin-vue": "^4.2.1",
|
|
73
74
|
"@vitest/coverage-c8": "^0.30.1",
|
|
74
|
-
"@vitest/ui": "^0.
|
|
75
|
+
"@vitest/ui": "^0.30.1",
|
|
75
76
|
"@vue/test-utils": "^2.3.2",
|
|
76
|
-
"eslint": "^8.
|
|
77
|
+
"eslint": "^8.39.0",
|
|
77
78
|
"eslint-config-prettier": "^8.8.0",
|
|
78
79
|
"eslint-plugin-vue": "^9.11.0",
|
|
79
80
|
"gsap": "^3.11.5",
|
|
80
|
-
"happy-dom": "^9.
|
|
81
|
-
"jsdom": "^
|
|
82
|
-
"kolorist": "^1.
|
|
81
|
+
"happy-dom": "^9.10.7",
|
|
82
|
+
"jsdom": "^22.0.0",
|
|
83
|
+
"kolorist": "^1.8.0",
|
|
83
84
|
"pathe": "^1.1.0",
|
|
84
|
-
"prettier": "^2.8.
|
|
85
|
-
"release-it": "^15.10.
|
|
85
|
+
"prettier": "^2.8.8",
|
|
86
|
+
"release-it": "^15.10.3",
|
|
86
87
|
"rollup-plugin-analyzer": "^4.0.0",
|
|
87
88
|
"rollup-plugin-copy": "^3.4.0",
|
|
88
89
|
"rollup-plugin-visualizer": "^5.9.0",
|
|
89
|
-
"three": "^0.
|
|
90
|
-
"unocss": "^0.51.
|
|
90
|
+
"three": "^0.152.2",
|
|
91
|
+
"unocss": "^0.51.8",
|
|
91
92
|
"unplugin": "^1.3.1",
|
|
92
93
|
"unplugin-vue-components": "^0.24.1",
|
|
93
|
-
"vite": "^4.
|
|
94
|
+
"vite": "^4.3.4",
|
|
94
95
|
"vite-plugin-banner": "^0.7.0",
|
|
95
|
-
"vite-plugin-dts": "2.
|
|
96
|
-
"vite-plugin-inspect": "^0.7.
|
|
96
|
+
"vite-plugin-dts": "2.3.0",
|
|
97
|
+
"vite-plugin-inspect": "^0.7.24",
|
|
97
98
|
"vite-plugin-require-transform": "^1.0.12",
|
|
98
99
|
"vite-svg-loader": "^4.0.0",
|
|
99
|
-
"vitepress": "1.0.0-alpha.
|
|
100
|
+
"vitepress": "1.0.0-alpha.75",
|
|
100
101
|
"vitest": "^0.30.1",
|
|
101
102
|
"vue-demi": "^0.14.0"
|
|
102
103
|
}
|