@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 CHANGED
@@ -1,13 +1,30 @@
1
- # @tresjs/core ▲ ■ ●
1
+ ![repo-banner](/public/repo-banner.png)
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 awayregardless the version
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. Think of it as a [React-three-fiber](https://docs.pmnd.rs/react-three-fiber) or [Lunchbox](https://github.com/breakfast-studio/lunchboxjs) but without the need of a [custom Vue3 Renderer](https://vuejs.org/api/custom-renderer.html).
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) | ![tres version](https://img.shields.io/npm/v/@tresjs/core/alpha.svg?label=%20&color=%2382DBCA) |
25
- | [Cientos](packages/cientos) | ![tres version](https://img.shields.io/npm/v/@tresjs/cientos/alpha.svg?label=%20&color=%23f19b00) |
39
+ | Package | Version |
40
+ | --------------------------- | :----------------------------------------------------------------------------------------------- |
41
+ | [Tres](packages/tres) | ![tres version](https://img.shields.io/npm/v/@tresjs/core/beta.svg?label=%20&color=%2382DBCA) |
42
+ | [Cientos](packages/cientos) | ![tres version](https://img.shields.io/npm/v/@tresjs/cientos/beta.svg?label=%20&color=%23f19b00) |
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 { MaybeComputedRef } from '@vueuse/core';
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?: MaybeComputedRef<boolean>;
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?: MaybeComputedRef<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?: MaybeComputedRef<boolean>;
28
+ physicallyCorrectLights?: MaybeRefOrGetter<boolean>;
29
29
  /**
30
30
  * Whether to use legacy lighting mode.
31
31
  *
32
- * @type {MaybeComputedRef<boolean>}
32
+ * @type {MaybeRefOrGetter<boolean>}
33
33
  * @memberof UseRendererOptions
34
34
  */
35
- useLegacyLights?: MaybeComputedRef<boolean>;
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?: MaybeComputedRef<TextureEncoding>;
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?: MaybeComputedRef<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?: MaybeComputedRef<number>;
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?: MaybeComputedRef<TresColor>;
81
- windowSize?: MaybeComputedRef<boolean | string>;
80
+ clearColor?: MaybeRefOrGetter<TresColor>;
81
+ windowSize?: MaybeRefOrGetter<boolean | string>;
82
82
  preset?: RendererPresetsType;
83
83
  }
84
84
  /**
@@ -95,6 +95,7 @@ export type UseTresReturn = {
95
95
  setState: (key: string, value: any) => void;
96
96
  aspectRatio: ComputedRef<number>;
97
97
  };
98
+ export declare const TRES_CONTEXT_KEY: unique symbol;
98
99
  /**
99
100
  * The Tres state.
100
101
  *
package/dist/tres.js CHANGED
@@ -1,31 +1,31 @@
1
1
  /**
2
2
  * name: @tresjs/core
3
- * version: v2.0.0-beta.8
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 S, watchEffect as ce, toRef as _e, shallowRef as ue, toRefs as fe, computed as le, watch as W, shallowReactive as de, provide as Se, inject as Oe, onUnmounted as pe, createRenderer as ke, defineComponent as me, onMounted as je, h as k } from "vue";
9
- import * as ve from "three";
10
- import { MathUtils as De, PerspectiveCamera as F, OrthographicCamera as Ie, Clock as ge, Color as H, sRGBEncoding as Be, ACESFilmicToneMapping as ze, PCFSoftShadowMap as Fe, PCFShadowMap as Ge, LinearEncoding as te, NoToneMapping as ae, WebGLRenderer as Ve, LoadingManager as Ue, TextureLoader as We, Raycaster as He, Vector2 as Ye, BufferAttribute as $e } from "three";
11
- import { createEventHook as q, useRafFn as Ne, resolveUnref as l, useWindowSize as qe, useElementSize as Ke, useDevicePixelRatio as Je, unrefElement as Y, isFunction as ne, useEventListener as Xe } from "@vueuse/core";
12
- const he = S({ uuid: De.generateUUID() }), we = (e) => void Object.assign(he.value, e);
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 N() {
17
- const { state: e, setState: t, aspectRatio: o } = D();
18
- function a(i = "Perspective", c) {
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: d, far: C, fov: g } = c || {
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 F(g, ((u = e.aspectRatio) == null ? void 0 : u.value) || window.innerWidth / window.innerHeight, d, C), (f = e.cameras) == null || f.push(_);
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: d, right: C, top: g, bottom: P, near: w, far: p } = c || {
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(d, C, g, P, w, p), (m = e.cameras) == null || m.push(_);
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 F && e.aspectRatio && (e.camera.aspect = e.aspectRatio.value), (i = e.camera) == null || i.updateProjectionMatrix();
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 c;
46
- (c = e.cameras) == null || c.push(i), i instanceof F && e.aspectRatio && (i.aspect = e.aspectRatio.value), i.updateProjectionMatrix(), t("camera", i);
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 s() {
48
+ function c() {
49
49
  e.cameras = [];
50
50
  }
51
- return ce(() => {
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: s
58
+ clearCameras: c
59
59
  };
60
60
  }
61
- const be = q(), ye = q(), K = q(), j = new ge();
62
- let G = 0, V = 0;
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
- be.trigger({ delta: G, elapsed: V, clock: j }), ye.trigger({ delta: G, elapsed: V, clock: j }), K.trigger({ delta: G, elapsed: V, clock: j });
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
- K.on(() => {
70
- G = j.getDelta(), V = j.getElapsedTime();
69
+ X.on(() => {
70
+ W = j.getDelta(), H = j.getElapsedTime();
71
71
  });
72
- function Me() {
72
+ function Re() {
73
73
  return {
74
- onBeforeLoop: be.on,
75
- onLoop: ye.on,
76
- onAfterLoop: K.on,
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 H ? e : Array.isArray(e) ? new H(...e) : new H(e);
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: Fe
92
+ type: Ge
93
93
  }
94
94
  }
95
- }, xe = (e, t) => {
95
+ }, Pe = (e, t) => {
96
96
  for (const o of Object.keys(t))
97
- t[o] instanceof Object && Object.assign(t[o], xe(e[o], 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 z(e) {
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 Z, ee;
111
- const t = ue(), o = S(!1), {
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: s,
115
+ logarithmicDepthBuffer: c,
116
116
  failIfMajorPerformanceCaveat: i,
117
- precision: c,
117
+ precision: s,
118
118
  premultipliedAlpha: u,
119
119
  stencil: f,
120
120
  shadows: m = !1,
121
- shadowMapType: d = Ge,
122
- physicallyCorrectLights: C = !1,
123
- useLegacyLights: g = !1,
124
- outputEncoding: P = te,
125
- toneMapping: w = ae,
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: b = "default",
129
- preserveDrawingBuffer: y = !1,
130
- clearColor: M,
131
- windowSize: E = !1,
132
- preset: L = void 0
133
- } = fe(e), { state: h, setState: T } = D(), { width: R, height: O } = l(E) == !0 || l(E) === "" || l(E) === "true" ? qe() : Ke(h.container), { logError: B, logWarning: Ce } = I(), { pixelRatio: J } = Je(), { pause: Pe, resume: Le } = Me(), U = le(() => R.value / O.value);
134
- !l(E) && ((ee = (Z = h.container) == null ? void 0 : Z.value) == null ? void 0 : ee.offsetHeight) === 0 && Ce(`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.
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 X = () => {
137
- t.value && (t.value.setSize(R.value, O.value), t.value.setPixelRatio(Math.min(J.value, 2)));
138
- }, Q = () => {
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(L);
140
+ const A = l(y);
142
141
  if (A) {
143
- A in $ || B("Renderer Preset must be one of these: " + Object.keys($).join(", ")), xe(t.value, $[A]);
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(d), t.value.toneMapping = l(w) || ae, t.value.toneMappingExposure = l(p), t.value.outputEncoding = l(P) || te, M != null && M.value && t.value.setClearColor(nt(l(M))), t.value.useLegacyLights = l(g);
147
- }, Te = () => {
148
- const A = Y(h.canvas);
149
- A && (t.value = new Ve({
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(s),
157
- powerPreference: l(b),
158
- precision: l(c),
155
+ logarithmicDepthBuffer: l(c),
156
+ powerPreference: l(U),
157
+ precision: l(s),
159
158
  stencil: l(f),
160
- preserveDrawingBuffer: l(y),
159
+ preserveDrawingBuffer: l(T),
161
160
  premultipliedAlpha: l(u)
162
- }), T("renderer", t.value), T("clock", new ge()), T("aspectRatio", U), Q(), X(), Le(), o.value = !0);
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, Pe());
163
+ t.value && (t.value.dispose(), t.value = void 0, o.value = !1, z());
165
164
  };
166
- return W([U, J], X), W(
167
- [m, d, P, g, w, p, M],
168
- Q
169
- ), W(
170
- () => [h.canvas, h.container],
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
- Y(h.canvas) && Y(h.container) && Te();
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: U
178
+ aspectRatio: Y
180
179
  };
181
180
  }
182
- const Ee = (e) => !!e && e.constructor === Array;
183
- function ct(e) {
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 } = I(), s = new e();
191
- n && n(s), o && o(s);
192
- const c = (Array.isArray(t) ? t : [t]).map(
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
- s.load(
193
+ c.load(
195
194
  u,
196
- (d) => {
197
- d.scene && Object.assign(d, ct(d.scene)), f(d);
195
+ (v) => {
196
+ v.scene && Object.assign(v, ut(v.scene)), f(v);
198
197
  },
199
198
  a,
200
- (d) => m(r("[useLoader] - Failed to load resource", d))
199
+ (v) => m(r("[useLoader] - Failed to load resource", v))
201
200
  );
202
201
  })
203
202
  );
204
- return Ee(t) ? await Promise.all(c) : await c[0];
203
+ return Te(t) ? await Promise.all(s) : await s[0];
205
204
  }
206
- async function Rt(e) {
207
- const t = new Ue(), o = new We(t), a = (n) => new Promise((r, s) => {
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
- s(new Error("[useTextures] - Failed to load texture"));
212
+ c(new Error("[useTextures] - Failed to load texture"));
214
213
  }
215
214
  );
216
215
  });
217
- if (Ee(e)) {
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: s,
223
+ normalMap: c,
225
224
  roughnessMap: i,
226
- metalnessMap: c,
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: s ? await a(s) : null,
233
+ normalMap: c ? await a(c) : null,
235
234
  roughnessMap: i ? await a(i) : null,
236
- metalnessMap: c ? await a(c) : null,
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 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"];
244
- function ut() {
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 (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[o & 63 | 128] + v[o >> 8 & 255] + "-" + v[o >> 16 & 255] + v[o >> 24 & 255] + v[a & 255] + v[a >> 8 & 255] + v[a >> 16 & 255] + v[a >> 24 & 255]).toLowerCase();
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 Re = Symbol();
249
- function ft() {
250
- const e = de({
251
- uuid: ut(),
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: le(() => window.innerWidth / window.innerHeight)
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
- ...fe(e),
265
+ ...me(e),
267
266
  getState: t,
268
267
  setState: o
269
268
  };
270
- return Se(Re, a), a;
269
+ return Se(Q, a), a;
271
270
  }
272
- const D = () => Oe(Re, {
273
- state: de({
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 lt() {
281
- var s;
282
- const e = ue(new He()), t = S(new Ye()), o = S(null), { setState: a, state: n } = D();
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 (s = n == null ? void 0 : n.renderer) == null || s.domElement.addEventListener("pointermove", r), pe(() => {
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 Ct = !0, re = "[TresJS ▲ ■ ●] ";
296
- function I() {
294
+ const Rt = !0, ie = "[TresJS ▲ ■ ●] ";
295
+ function D() {
297
296
  function e(a, n) {
298
- console.error(`${re} ${a}`, n || "");
297
+ console.error(`${ie} ${a}`, n || "");
299
298
  }
300
299
  function t(a) {
301
- console.warn(`${re} ${a}`);
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 } = I();
311
+ const { logWarning: e } = D();
313
312
  function t(a, n, r) {
314
- let s = null;
313
+ let c = null;
315
314
  return a.traverse((i) => {
316
- i[n] === r && (s = i);
317
- }), s || e(`Child with ${n} '${r}' not found.`), s;
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 dt = /^on[^a-z]/, pt = (e) => dt.test(e);
328
- let oe = null;
329
- const ie = {
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: se } = I(), mt = {
331
+ }, { logError: ue } = D(), vt = {
333
332
  createElement(e, t, o, a) {
334
- var c, u;
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 && se("Tres primitives need a prop 'object'");
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 = he.value[n];
344
- f || se(`${n} is not defined on the THREE namespace. Use extend to add it to the catalog.`), r = new f(...a.args);
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 } = N();
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: s, MATERIAL_VIA_PROP: i } = ie;
353
- return r.isObject3D && ((c = a == null ? void 0 : a.material) != null && c.isMaterial && (r.userData[i] = !0), (u = a == null ? void 0 : a.geometry) != null && u.isBufferGeometry && (r.userData[s] = !0)), r.events = {}, r;
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 && !((a = (o = e == null ? void 0 : e.__vnode) == null ? void 0 : o.ctx) != null && a.asyncResolved)) {
358
- oe = e;
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 = oe), 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));
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 c, u;
369
- const { GEOMETRY_VIA_PROP: s, MATERIAL_VIA_PROP: i } = ie;
370
- r.userData[i] || (c = r.material) == null || c.dispose(), r.userData[s] || (u = r.geometry) == null || u.dispose();
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, s = z(r), i = n == null ? void 0 : n[s];
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
- z(r),
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[z(m)], n), r = u.pop(), s = r.toLowerCase(), i != null && i.set || (n = u.reduce((f, m) => f[z(m)], n));
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 c = a;
393
- if (c === "" && (c = !0), ne(i)) {
394
- Array.isArray(c) ? e[s](...c) : e[s](c);
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) && !ne(i) ? n[s] = c : i.constructor === c.constructor && (i != null && i.copy) ? i == null || i.copy(c) : Array.isArray(c) ? i.set(...c) : !i.isColor && i.setScalar ? i.setScalar(c) : i.set(c);
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: vt } = ke(mt), gt = (e) => {
413
- const t = vt(o);
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(ve);
420
- const { logWarning: ht } = I(), wt = me({
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 && ht("physicallyCorrectLights is deprecated, useLegacyLights is now false by default");
440
- const a = S(), n = S(), r = new ve.Scene(), { setState: s } = D();
441
- s("scene", r), s("canvas", n), s("container", a);
442
- const { pushCamera: i } = N();
443
- i(new F()), je(() => {
444
- c();
445
- }), pe(() => {
446
- s("renderer", null);
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
- function c() {
449
- const { renderer: m } = st(e), { activeCamera: d } = N(), { onLoop: C } = Me(), { raycaster: g, pointer: P } = lt();
450
- let w = null, p = null;
451
- ce(() => {
452
- d.value && g.value.setFromCamera(P.value, d.value);
453
- }), C(() => {
454
- var x, b, y, M, E, L, h, T, R, O;
455
- if (d.value && e.disableRender === !0 && ((x = m.value) == null || x.render(r, d.value)), g.value) {
456
- const B = g.value.intersectObjects(r.children);
457
- B.length > 0 ? (p = B[0], w === null && ((M = (y = (b = p.object) == null ? void 0 : b.events) == null ? void 0 : y.onPointerEnter) == null || M.call(y, p)), (h = (L = (E = p.object) == null ? void 0 : E.events) == null ? void 0 : L.onPointerMove) == null || h.call(L, p)) : w !== null && ((O = (R = (T = p == null ? void 0 : p.object) == null ? void 0 : T.events) == null ? void 0 : R.onPointerLeave) == null || O.call(R, w), p = null), w = p;
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 x, b, y;
461
- p !== null && ((y = (b = (x = p.object) == null ? void 0 : x.events) == null ? void 0 : b.onClick) == null || y.call(b, p));
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 u;
465
- function f() {
466
- u = gt(t), u.provide("useTres", D()), u.provide("extend", we), u.mount(r);
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 f(), o({
473
+ return M(), o({
469
474
  scene: r
470
- }), () => k(
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 = me({
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 = ft();
543
+ const a = lt();
533
544
  return o(a), () => k(wt, e, t);
534
545
  }
535
- }), Lt = {
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
- he as catalogue,
544
- Lt as default,
545
- we as extend,
546
- Ct as isProd,
547
- ct as trasverseObjects,
548
- N as useCamera,
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
- I as useLogger,
551
- lt as useRaycaster,
552
- Me as useRenderLoop,
562
+ D as useLogger,
563
+ dt as useRaycaster,
564
+ Re as useRenderLoop,
553
565
  st as useRenderer,
554
566
  Pt as useSeek,
555
- Rt as useTexture,
556
- D as useTres,
557
- ft as useTresProvider
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-beta.8
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(d,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):(d=typeof globalThis<"u"?globalThis:d||self,s(d.tres={},d.Vue,d.Three,d.VueUseCore))})(this,function(d,s,u,c){"use strict";function ge(e){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const r in e)if(r!=="default"){const n=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,n.get?n:{enumerable:!0,get:()=>e[r]})}}return t.default=e,Object.freeze(t)}const J=ge(u),W=s.ref({uuid:u.MathUtils.generateUUID()}),N=e=>void Object.assign(W.value,e);var X=(e=>(e.Perspective="Perspective",e.Orthographic="Orthographic",e))(X||{});const he=45;let O;function z(){const{state:e,setState:t,aspectRatio:r}=A();function n(i="Perspective",l){var m,p,w;if(i==="Perspective"){const{near:v,far:k,fov:b}=l||{near:.1,far:1e3,fov:he};O=new u.PerspectiveCamera(b,((m=e.aspectRatio)==null?void 0:m.value)||window.innerWidth/window.innerHeight,v,k),(p=e.cameras)==null||p.push(O)}else{const{left:v,right:k,top:b,bottom:T,near:M,far:g}=l||{left:-100,right:100,top:100,bottom:-100,near:.1,far:1e3};O=new u.OrthographicCamera(v,k,b,T,M,g),(w=e.cameras)==null||w.push(O)}return e.camera=O,t("camera",e.camera),O}function a(){var i;e.camera instanceof u.PerspectiveCamera&&e.aspectRatio&&(e.camera.aspect=e.aspectRatio.value),(i=e.camera)==null||i.updateProjectionMatrix()}function o(i){var l;(l=e.cameras)==null||l.push(i),i instanceof u.PerspectiveCamera&&e.aspectRatio&&(i.aspect=e.aspectRatio.value),i.updateProjectionMatrix(),t("camera",i)}function f(){e.cameras=[]}return s.watchEffect(()=>{r!=null&&r.value&&a()}),{activeCamera:s.toRef(e,"camera"),createCamera:n,updateCamera:a,pushCamera:o,clearCameras:f}}const Q=c.createEventHook(),Z=c.createEventHook(),Y=c.createEventHook(),I=new u.Clock;let F=0,G=0;const{pause:we,resume:be,isActive:ye}=c.useRafFn(()=>{Q.trigger({delta:F,elapsed:G,clock:I}),Z.trigger({delta:F,elapsed:G,clock:I}),Y.trigger({delta:F,elapsed:G,clock:I})},{immediate:!1});Y.on(()=>{F=I.getDelta(),G=I.getElapsedTime()});function $(){return{onBeforeLoop:Q.on,onLoop:Z.on,onAfterLoop:Y.on,pause:we,resume:be,isActive:ye}}function Me(e){return e instanceof u.Color?e:Array.isArray(e)?new u.Color(...e):new u.Color(e)}const q={realistic:{outputEncoding:u.sRGBEncoding,toneMapping:u.ACESFilmicToneMapping,toneMappingExposure:3,shadowMap:{enabled:!0,type:u.PCFSoftShadowMap}}},H=(e,t)=>{for(const r of Object.keys(t))t[r]instanceof Object&&Object.assign(t[r],H(e[r],t[r]));return Object.assign(e||{},t),e},Ce=Pe("html,body,base,head,link,meta,style,title,address,article,aside,footer,header,hgroup,h1,h2,h3,h4,h5,h6,nav,section,div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,ruby,s,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,output,progress,select,textarea,details,dialog,menu,summary,template,blockquote,iframe,tfoot");function V(e){return e.replace(/-([a-z])/g,(t,r)=>r.toUpperCase())}function Pe(e,t){const r=Object.create(null),n=e.split(",");for(let a=0;a<n.length;a++)r[n[a]]=!0;return t?a=>!!r[a.toLowerCase()]:a=>!!r[a]}function ee(e){var pe,ve;const t=s.shallowRef(),r=s.ref(!1),{alpha:n=!0,antialias:a=!0,depth:o,logarithmicDepthBuffer:f,failIfMajorPerformanceCaveat:i,precision:l,premultipliedAlpha:m,stencil:p,shadows:w=!1,shadowMapType:v=u.PCFShadowMap,physicallyCorrectLights:k=!1,useLegacyLights:b=!1,outputEncoding:T=u.LinearEncoding,toneMapping:M=u.NoToneMapping,toneMappingExposure:g=1,context:_=void 0,powerPreference:C="default",preserveDrawingBuffer:P=!1,clearColor:L,windowSize:S=!1,preset:R=void 0}=s.toRefs(e),{state:y,setState:j}=A(),{width:x,height:B}=c.resolveUnref(S)==!0||c.resolveUnref(S)===""||c.resolveUnref(S)==="true"?c.useWindowSize():c.useElementSize(y.container),{logError:E,logWarning:Be}=U(),{pixelRatio:ue}=c.useDevicePixelRatio(),{pause:ze,resume:Fe}=$(),K=s.computed(()=>x.value/B.value);!c.resolveUnref(S)&&((ve=(pe=y.container)==null?void 0:pe.value)==null?void 0:ve.offsetHeight)===0&&Be(`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 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"}})});
@@ -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-beta.8",
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": "^9.13.0"
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.1",
69
- "@types/three": "latest",
70
- "@typescript-eslint/eslint-plugin": "^5.58.0",
71
- "@typescript-eslint/parser": "^5.58.0",
72
- "@vitejs/plugin-vue": "^4.1.0",
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.29.2",
75
+ "@vitest/ui": "^0.30.1",
75
76
  "@vue/test-utils": "^2.3.2",
76
- "eslint": "^8.38.0",
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.6.1",
81
- "jsdom": "^21.1.1",
82
- "kolorist": "^1.7.0",
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.7",
85
- "release-it": "^15.10.1",
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.150.1",
90
- "unocss": "^0.51.4",
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.2.1",
94
+ "vite": "^4.3.4",
94
95
  "vite-plugin-banner": "^0.7.0",
95
- "vite-plugin-dts": "2.2.0",
96
- "vite-plugin-inspect": "^0.7.22",
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.65",
100
+ "vitepress": "1.0.0-alpha.75",
100
101
  "vitest": "^0.30.1",
101
102
  "vue-demi": "^0.14.0"
102
103
  }