@tresjs/core 5.8.3 → 5.9.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/template-compiler-options.d.mts +1 -1
- package/dist/template-compiler-options.mjs +3 -2
- package/dist/tres.d.ts +104 -44
- package/dist/tres.js +72 -15
- package/package.json +2 -2
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* name: @tresjs/core
|
|
3
|
-
* version: v5.
|
|
3
|
+
* version: v5.9.1
|
|
4
4
|
* (c) 2026
|
|
5
5
|
* description: Declarative ThreeJS using Vue Components
|
|
6
6
|
* author: Alvaro Saburido <hola@alvarosaburido.dev> (https://github.com/alvarosabu/)
|
|
@@ -10,7 +10,8 @@ const whitelist = [
|
|
|
10
10
|
"TresCanvas",
|
|
11
11
|
"TresCanvasContext",
|
|
12
12
|
"TresLeches",
|
|
13
|
-
"TresScene"
|
|
13
|
+
"TresScene",
|
|
14
|
+
"TresPortal"
|
|
14
15
|
];
|
|
15
16
|
const templateCompilerOptions = { template: { compilerOptions: { isCustomElement: (tag) => (/^Tres[A-Z]/.test(tag) || tag.startsWith("tres-")) && !whitelist.includes(tag) || tag === "primitive" } } };
|
|
16
17
|
var template_compiler_options_default = templateCompilerOptions;
|
package/dist/tres.d.ts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* name: @tresjs/core
|
|
3
|
-
* version: v5.
|
|
3
|
+
* version: v5.9.1
|
|
4
4
|
* (c) 2026
|
|
5
5
|
* description: Declarative ThreeJS using Vue Components
|
|
6
6
|
* author: Alvaro Saburido <hola@alvarosaburido.dev> (https://github.com/alvarosabu/)
|
|
7
7
|
*/
|
|
8
|
-
import * as
|
|
8
|
+
import * as vue20 from "vue";
|
|
9
9
|
import { App, ComputedRef, DefineComponent, MaybeRef, MaybeRefOrGetter, Reactive, Ref, ShallowRef, VNode, VNodeRef } from "vue";
|
|
10
10
|
import * as THREE from "three";
|
|
11
11
|
import { BufferGeometry, Camera, Color, ColorRepresentation, ColorSpace, Event, Fog, Group, Layers, Light, Loader, LoadingManager, Material, Mesh, Object3D, Object3DEventMap, OrthographicCamera, PerspectiveCamera, Scene, ShadowMapType, ToneMapping, Vector3, WebGLRenderer } from "three";
|
|
@@ -87,7 +87,7 @@ interface UseCameraReturn {
|
|
|
87
87
|
/**
|
|
88
88
|
* The list of cameras
|
|
89
89
|
*/
|
|
90
|
-
cameras:
|
|
90
|
+
cameras: ShallowRef<TresCamera[]>;
|
|
91
91
|
/**
|
|
92
92
|
* Register a camera
|
|
93
93
|
* @param camera - The camera to register
|
|
@@ -247,10 +247,10 @@ interface RendererOptions {
|
|
|
247
247
|
* Type of shadow map to use for shadow calculations
|
|
248
248
|
* - `BasicShadowMap`: Basic shadow map.
|
|
249
249
|
* - `PCFShadowMap`: Percentage-Closer Filtering shadow map.
|
|
250
|
-
* - `PCFSoftShadowMap`:
|
|
250
|
+
* - `PCFSoftShadowMap`: Deprecated on WebGL, three falls back to `PCFShadowMap`. Still supported on WebGPU.
|
|
251
251
|
* - `VSMShadowMap`: Variance shadow map.
|
|
252
252
|
* @see {@link https://threejs.org/docs/#api/en/constants/Renderer}
|
|
253
|
-
* @default PCFSoftShadowMap (Opinionated default by TresJS)
|
|
253
|
+
* @default PCFShadowMap on WebGL, PCFSoftShadowMap on WebGPU (Opinionated default by TresJS)
|
|
254
254
|
*/
|
|
255
255
|
shadowMapType?: ShadowMapType;
|
|
256
256
|
/**
|
|
@@ -323,11 +323,11 @@ declare function useRendererManager({
|
|
|
323
323
|
onRender: _vueuse_core0.EventHookOn<TresRenderer>;
|
|
324
324
|
onError: _vueuse_core0.EventHookOn<TresRendererError>;
|
|
325
325
|
invalidate: (amountOfFramesToInvalidate?: number) => void;
|
|
326
|
-
canBeInvalidated:
|
|
326
|
+
canBeInvalidated: vue20.ComputedRef<boolean>;
|
|
327
327
|
mode: "always" | "on-demand" | "manual" | undefined;
|
|
328
328
|
replaceRenderFunction: (fn: RenderFunction) => void;
|
|
329
|
-
isInitialized:
|
|
330
|
-
error:
|
|
329
|
+
isInitialized: vue20.Ref<boolean, boolean>;
|
|
330
|
+
error: vue20.Ref<TresRendererError | null, TresRendererError | null>;
|
|
331
331
|
};
|
|
332
332
|
type UseRendererManagerReturn = ReturnType<typeof useRendererManager>;
|
|
333
333
|
//#endregion
|
|
@@ -354,8 +354,18 @@ interface TresContext {
|
|
|
354
354
|
camera: UseCameraReturn;
|
|
355
355
|
controls: Ref<TresControl | null>;
|
|
356
356
|
renderer: UseRendererManagerReturn;
|
|
357
|
+
/**
|
|
358
|
+
* Whether the active renderer is a Three.js WebGPU `Renderer` (as opposed to a
|
|
359
|
+
* `WebGLRenderer`). Reactive so downstream components can branch on it without
|
|
360
|
+
* re-deriving it from `renderer.instance`.
|
|
361
|
+
*
|
|
362
|
+
* Note: this reflects the renderer instance, not the active backend — a
|
|
363
|
+
* `WebGPURenderer` running on its WebGL2 fallback still reports `true`.
|
|
364
|
+
*/
|
|
365
|
+
isWebGPU: ComputedRef<boolean>;
|
|
357
366
|
events: ReturnType<typeof useEventManager>;
|
|
358
367
|
}
|
|
368
|
+
declare const INJECTION_KEY = "useTres";
|
|
359
369
|
declare const useTresContextProvider: (args_0: {
|
|
360
370
|
scene: TresScene;
|
|
361
371
|
canvas: MaybeRef<HTMLCanvasElement>;
|
|
@@ -445,17 +455,18 @@ interface TresScene extends THREE.Scene {
|
|
|
445
455
|
};
|
|
446
456
|
}
|
|
447
457
|
interface MathRepresentation {
|
|
448
|
-
set(...args: number[]
|
|
458
|
+
set(...args: number[]): any;
|
|
449
459
|
}
|
|
450
460
|
interface VectorRepresentation extends MathRepresentation {
|
|
451
461
|
setScalar(s: number): any;
|
|
452
462
|
}
|
|
463
|
+
type MathTypes = MathRepresentation | THREE.Euler | THREE.Color;
|
|
453
464
|
interface VectorCoordinates {
|
|
454
465
|
x: number;
|
|
455
466
|
y: number;
|
|
456
467
|
z: number;
|
|
457
468
|
}
|
|
458
|
-
type MathType<T extends
|
|
469
|
+
type MathType<T extends MathTypes> = T extends THREE.Color ? ConstructorParameters<typeof THREE.Color> | THREE.ColorRepresentation : T extends VectorRepresentation | THREE.Layers | THREE.Euler ? T | Parameters<T['set']> | number | VectorCoordinates : T | Parameters<T['set']>;
|
|
459
470
|
type VectorLike$1<VectorClass extends THREE.Vector2 | THREE.Vector3 | THREE.Vector4> = VectorClass | Parameters<VectorClass['set']> | Readonly<Parameters<VectorClass['set']>> | Parameters<VectorClass['setScalar']>[0];
|
|
460
471
|
type TresVector2 = VectorLike$1<THREE.Vector2>;
|
|
461
472
|
type TresVector3 = VectorLike$1<THREE.Vector3>;
|
|
@@ -472,7 +483,7 @@ type TresContextWithClock = TresContext & {
|
|
|
472
483
|
delta: number;
|
|
473
484
|
elapsed: number;
|
|
474
485
|
};
|
|
475
|
-
type WithMathProps<P> = { [K in keyof P]: P[K] extends
|
|
486
|
+
type WithMathProps<P> = { [K in keyof P]: P[K] extends MathTypes ? MathType<P[K]> : P[K] };
|
|
476
487
|
interface RaycastableRepresentation {
|
|
477
488
|
raycast: (raycaster: THREE.Raycaster, intersects: THREE.Intersection[]) => void;
|
|
478
489
|
}
|
|
@@ -514,8 +525,8 @@ interface TresObjectMap {
|
|
|
514
525
|
declare function buildGraph(object: Object3D | TresObject): TresObjectMap;
|
|
515
526
|
//#endregion
|
|
516
527
|
//#region src/composables/useLoader/component.vue.d.ts
|
|
517
|
-
declare const __VLS_export$
|
|
518
|
-
props:
|
|
528
|
+
declare const __VLS_export$3: <T extends TresObjectMap>(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: __VLS_PrettifyLocal<Pick<NonNullable<Awaited<typeof __VLS_setup>>, "attrs" | "emit" | "slots">>, __VLS_exposed?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
|
|
529
|
+
props: vue20.PublicProps & __VLS_PrettifyLocal<{
|
|
519
530
|
/**
|
|
520
531
|
* The THREE.js loader to use
|
|
521
532
|
*/
|
|
@@ -539,20 +550,20 @@ declare const __VLS_export$2: <T extends TresObjectMap>(__VLS_props: NonNullable
|
|
|
539
550
|
attrs: any;
|
|
540
551
|
slots: {
|
|
541
552
|
default?: (props: {
|
|
542
|
-
state:
|
|
553
|
+
state: vue20.UnwrapRef<T>;
|
|
543
554
|
isLoading: boolean;
|
|
544
555
|
error: unknown;
|
|
545
556
|
}) => any;
|
|
546
557
|
};
|
|
547
558
|
emit: ((evt: "error", error: unknown) => void) & ((evt: "loaded", result: T) => void);
|
|
548
|
-
}>) =>
|
|
559
|
+
}>) => vue20.VNode & {
|
|
549
560
|
__ctx?: Awaited<typeof __VLS_setup>;
|
|
550
561
|
};
|
|
551
|
-
declare const _default$
|
|
562
|
+
declare const _default$3: typeof __VLS_export$3;
|
|
552
563
|
type __VLS_PrettifyLocal<T> = (T extends any ? { [K in keyof T]: T[K] } : { [K in keyof T as K]: T[K] }) & {};
|
|
553
564
|
//#endregion
|
|
554
565
|
//#region src/composables/useGraph/index.d.ts
|
|
555
|
-
declare const useGraph: (object: MaybeRef<TresObject | undefined>) =>
|
|
566
|
+
declare const useGraph: (object: MaybeRef<TresObject | undefined>) => vue20.ComputedRef<TresObjectMap | undefined>;
|
|
556
567
|
//#endregion
|
|
557
568
|
//#region src/utils/createPriorityEventHook.d.ts
|
|
558
569
|
type Callback<T> = Parameters<EventHookOff<T>>[0];
|
|
@@ -603,7 +614,7 @@ type LoopContext = RafLoopContext & TresPartialContext;
|
|
|
603
614
|
declare const useLoop: () => {
|
|
604
615
|
stop: () => void;
|
|
605
616
|
start: () => void;
|
|
606
|
-
isActive: Readonly<
|
|
617
|
+
isActive: Readonly<vue20.ShallowRef<boolean>>;
|
|
607
618
|
onBeforeRender: PriorityEventHookOn<LoopContext>;
|
|
608
619
|
onRender: PriorityEventHookOn<LoopContext>;
|
|
609
620
|
render: (fn: RenderFunction) => void;
|
|
@@ -704,16 +715,17 @@ type ContextEmits = {
|
|
|
704
715
|
beforeLoop: [context: TresContextWithClock];
|
|
705
716
|
loop: [context: TresContextWithClock];
|
|
706
717
|
} & { [key in TresPointerEventName]: [event: TresPointerEvent] };
|
|
707
|
-
type __VLS_Props = ContextProps & {
|
|
718
|
+
type __VLS_Props$1 = ContextProps & {
|
|
708
719
|
canvas: HTMLCanvasElement;
|
|
709
720
|
};
|
|
710
|
-
type __VLS_Slots$
|
|
721
|
+
type __VLS_Slots$2 = {
|
|
711
722
|
default: () => any;
|
|
712
723
|
};
|
|
713
|
-
declare const __VLS_base$
|
|
714
|
-
context:
|
|
724
|
+
declare const __VLS_base$2: vue20.DefineComponent<__VLS_Props$1, {
|
|
725
|
+
context: vue20.ShallowRef<TresContext, TresContext>;
|
|
715
726
|
dispose: () => void;
|
|
716
|
-
}, {}, {}, {},
|
|
727
|
+
}, {}, {}, {}, vue20.ComponentOptionsMixin, vue20.ComponentOptionsMixin, {
|
|
728
|
+
render: (context: TresContext) => any;
|
|
717
729
|
click: (event: TresPointerEvent) => any;
|
|
718
730
|
contextmenu: (event: TresPointerEvent) => any;
|
|
719
731
|
pointermove: (event: TresPointerEvent) => any;
|
|
@@ -730,10 +742,10 @@ declare const __VLS_base$1: vue14.DefineComponent<__VLS_Props, {
|
|
|
730
742
|
ready: (context: TresContext) => any;
|
|
731
743
|
error: (error: Error) => any;
|
|
732
744
|
pointermissed: (event: TresPointerEvent) => any;
|
|
733
|
-
render: (context: TresContext) => any;
|
|
734
745
|
beforeLoop: (context: TresContextWithClock) => any;
|
|
735
746
|
loop: (context: TresContextWithClock) => any;
|
|
736
|
-
}, string,
|
|
747
|
+
}, string, vue20.PublicProps, Readonly<__VLS_Props$1> & Readonly<{
|
|
748
|
+
onRender?: ((context: TresContext) => any) | undefined;
|
|
737
749
|
onClick?: ((event: TresPointerEvent) => any) | undefined;
|
|
738
750
|
onContextmenu?: ((event: TresPointerEvent) => any) | undefined;
|
|
739
751
|
onPointermove?: ((event: TresPointerEvent) => any) | undefined;
|
|
@@ -750,13 +762,12 @@ declare const __VLS_base$1: vue14.DefineComponent<__VLS_Props, {
|
|
|
750
762
|
onReady?: ((context: TresContext) => any) | undefined;
|
|
751
763
|
onError?: ((error: Error) => any) | undefined;
|
|
752
764
|
onPointermissed?: ((event: TresPointerEvent) => any) | undefined;
|
|
753
|
-
onRender?: ((context: TresContext) => any) | undefined;
|
|
754
765
|
onBeforeLoop?: ((context: TresContextWithClock) => any) | undefined;
|
|
755
766
|
onLoop?: ((context: TresContextWithClock) => any) | undefined;
|
|
756
|
-
}>, {}, {}, {}, {}, string,
|
|
757
|
-
declare const __VLS_export$
|
|
758
|
-
declare const _default$1: typeof __VLS_export$
|
|
759
|
-
type __VLS_WithSlots$
|
|
767
|
+
}>, {}, {}, {}, {}, string, vue20.ComponentProvideOptions, false, {}, any>;
|
|
768
|
+
declare const __VLS_export$2: __VLS_WithSlots$2<typeof __VLS_base$2, __VLS_Slots$2>;
|
|
769
|
+
declare const _default$1: typeof __VLS_export$2;
|
|
770
|
+
type __VLS_WithSlots$2<T, S> = T & {
|
|
760
771
|
new (): {
|
|
761
772
|
$slots: S;
|
|
762
773
|
};
|
|
@@ -769,10 +780,11 @@ interface TresCanvasInstance {
|
|
|
769
780
|
get context(): TresContext | undefined;
|
|
770
781
|
dispose: () => void;
|
|
771
782
|
}
|
|
772
|
-
type __VLS_Slots = {
|
|
783
|
+
type __VLS_Slots$1 = {
|
|
773
784
|
default: () => any;
|
|
774
785
|
};
|
|
775
|
-
declare const __VLS_base:
|
|
786
|
+
declare const __VLS_base$1: vue20.DefineComponent<ContextProps, TresCanvasInstance, {}, {}, {}, vue20.ComponentOptionsMixin, vue20.ComponentOptionsMixin, {
|
|
787
|
+
render: (context: TresContext) => any;
|
|
776
788
|
click: (event: TresPointerEvent) => any;
|
|
777
789
|
contextmenu: (event: TresPointerEvent) => any;
|
|
778
790
|
pointermove: (event: TresPointerEvent) => any;
|
|
@@ -789,10 +801,10 @@ declare const __VLS_base: vue14.DefineComponent<ContextProps, TresCanvasInstance
|
|
|
789
801
|
ready: (context: TresContext) => any;
|
|
790
802
|
error: (error: Error) => any;
|
|
791
803
|
pointermissed: (event: TresPointerEvent) => any;
|
|
792
|
-
render: (context: TresContext) => any;
|
|
793
804
|
beforeLoop: (context: TresContextWithClock) => any;
|
|
794
805
|
loop: (context: TresContextWithClock) => any;
|
|
795
|
-
}, string,
|
|
806
|
+
}, string, vue20.PublicProps, Readonly<ContextProps> & Readonly<{
|
|
807
|
+
onRender?: ((context: TresContext) => any) | undefined;
|
|
796
808
|
onClick?: ((event: TresPointerEvent) => any) | undefined;
|
|
797
809
|
onContextmenu?: ((event: TresPointerEvent) => any) | undefined;
|
|
798
810
|
onPointermove?: ((event: TresPointerEvent) => any) | undefined;
|
|
@@ -809,29 +821,49 @@ declare const __VLS_base: vue14.DefineComponent<ContextProps, TresCanvasInstance
|
|
|
809
821
|
onReady?: ((context: TresContext) => any) | undefined;
|
|
810
822
|
onError?: ((error: Error) => any) | undefined;
|
|
811
823
|
onPointermissed?: ((event: TresPointerEvent) => any) | undefined;
|
|
812
|
-
onRender?: ((context: TresContext) => any) | undefined;
|
|
813
824
|
onBeforeLoop?: ((context: TresContextWithClock) => any) | undefined;
|
|
814
825
|
onLoop?: ((context: TresContextWithClock) => any) | undefined;
|
|
815
826
|
}>, {
|
|
827
|
+
alpha: boolean;
|
|
828
|
+
logarithmicDepthBuffer: boolean;
|
|
829
|
+
toneMapping: THREE.ToneMapping;
|
|
830
|
+
depth: boolean;
|
|
831
|
+
stencil: boolean;
|
|
832
|
+
clearColor: THREE.ColorRepresentation;
|
|
816
833
|
windowSize: boolean;
|
|
817
834
|
enableProvideBridge: boolean;
|
|
835
|
+
customRendererOptions: TresCustomRendererOptions;
|
|
818
836
|
antialias: boolean;
|
|
819
|
-
stencil: boolean;
|
|
820
|
-
depth: boolean;
|
|
821
|
-
logarithmicDepthBuffer: boolean;
|
|
822
837
|
preserveDrawingBuffer: boolean;
|
|
823
|
-
alpha: boolean;
|
|
824
838
|
failIfMajorPerformanceCaveat: boolean;
|
|
825
|
-
clearColor: THREE.ColorRepresentation;
|
|
826
839
|
clearAlpha: number;
|
|
827
840
|
shadows: boolean;
|
|
828
|
-
toneMapping: THREE.ToneMapping;
|
|
829
841
|
shadowMapType: THREE.ShadowMapType;
|
|
830
842
|
useLegacyLights: boolean;
|
|
831
843
|
renderMode: "always" | "on-demand" | "manual";
|
|
832
|
-
}, {}, {}, {}, string,
|
|
844
|
+
}, {}, {}, {}, string, vue20.ComponentProvideOptions, false, {}, any>;
|
|
845
|
+
declare const __VLS_export$1: __VLS_WithSlots$1<typeof __VLS_base$1, __VLS_Slots$1>;
|
|
846
|
+
declare const _default: typeof __VLS_export$1;
|
|
847
|
+
type __VLS_WithSlots$1<T, S> = T & {
|
|
848
|
+
new (): {
|
|
849
|
+
$slots: S;
|
|
850
|
+
};
|
|
851
|
+
};
|
|
852
|
+
//#endregion
|
|
853
|
+
//#region src/components/TresPortal.vue.d.ts
|
|
854
|
+
type __VLS_Props = {
|
|
855
|
+
/** Target Object3D/Scene to reparent children into. */
|
|
856
|
+
to: Object3D;
|
|
857
|
+
/** When true, children render in place (main scene) instead of the target. */
|
|
858
|
+
disabled?: boolean;
|
|
859
|
+
};
|
|
860
|
+
declare var __VLS_7: {};
|
|
861
|
+
type __VLS_Slots = {} & {
|
|
862
|
+
default?: (props: typeof __VLS_7) => any;
|
|
863
|
+
};
|
|
864
|
+
declare const __VLS_base: vue20.DefineComponent<__VLS_Props, {}, {}, {}, {}, vue20.ComponentOptionsMixin, vue20.ComponentOptionsMixin, {}, string, vue20.PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, vue20.ComponentProvideOptions, false, {}, any>;
|
|
833
865
|
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
834
|
-
declare const _default: typeof __VLS_export;
|
|
866
|
+
declare const _default$2: typeof __VLS_export;
|
|
835
867
|
type __VLS_WithSlots<T, S> = T & {
|
|
836
868
|
new (): {
|
|
837
869
|
$slots: S;
|
|
@@ -1170,6 +1202,34 @@ declare const isTresPrimitive: (value: unknown) => value is TresPrimitive;
|
|
|
1170
1202
|
* ```
|
|
1171
1203
|
*/
|
|
1172
1204
|
declare const isTresInstance: (value: unknown) => value is TresInstance;
|
|
1205
|
+
/**
|
|
1206
|
+
* Type guard to check if a value is a Three.js WebGPU `Renderer`.
|
|
1207
|
+
*
|
|
1208
|
+
* Identifies the renderer *instance*, not the active backend: a `WebGPURenderer`
|
|
1209
|
+
* can run on a WebGPU **or** a WebGL2 fallback backend, and this returns `true`
|
|
1210
|
+
* for both. That is the right granularity for branching on capabilities —
|
|
1211
|
+
* `NodeMaterial` works on either backend, while a GLSL `ShaderMaterial` works on
|
|
1212
|
+
* neither under the WebGPU renderer.
|
|
1213
|
+
* @param value - The value to check
|
|
1214
|
+
* @returns True if the value is a WebGPU `Renderer` instance, false otherwise
|
|
1215
|
+
* @example
|
|
1216
|
+
* ```ts
|
|
1217
|
+
* const { renderer } = useTresContext()
|
|
1218
|
+
* if (isWebGPURenderer(renderer.instance)) {
|
|
1219
|
+
* // TypeScript knows renderer.instance is a WebGPU Renderer here
|
|
1220
|
+
* }
|
|
1221
|
+
* ```
|
|
1222
|
+
*/
|
|
1223
|
+
declare const isWebGPURenderer: (value: unknown) => value is Renderer;
|
|
1224
|
+
/**
|
|
1225
|
+
* Type guard to check if a value is a Three.js `WebGLRenderer`.
|
|
1226
|
+
* @param value - The value to check
|
|
1227
|
+
* @returns True if the value is a `WebGLRenderer` instance, false otherwise
|
|
1228
|
+
* @see {@link isWebGPURenderer}
|
|
1229
|
+
*/
|
|
1230
|
+
declare const isWebGLRenderer: (value: unknown) => value is WebGLRenderer & {
|
|
1231
|
+
isWebGLRenderer: true;
|
|
1232
|
+
};
|
|
1173
1233
|
//#endregion
|
|
1174
1234
|
//#region src/index.d.ts
|
|
1175
1235
|
interface TresOptions {
|
|
@@ -1181,4 +1241,4 @@ interface TresPlugin {
|
|
|
1181
1241
|
}
|
|
1182
1242
|
declare const plugin: TresPlugin;
|
|
1183
1243
|
//#endregion
|
|
1184
|
-
export { Args, AssetLoadData, AttachFnType, AttachType, ConstructorRepresentation, DevtoolsMessage, DevtoolsMessageType, DevtoolsMessenger, DevtoolsSubscriber, DisposeType, ElementProps, InstanceProps, LoaderMethods, LoaderProto, LocalState, LoopContext, MathType, Mutable, NonFunctionKeys, Overwrite, Properties, RenderFunction, RenderMode, RendererOptions, ThreeElement, ThreeInstances, TresCamera, _default as TresCanvas, _default$1 as TresCanvasContext, type TresCanvasEmits, type TresCanvasInstance, type TresCanvasProps, TresCatalogue, TresColor, TresColorArray, TresComponents, type TresContext, TresContextWithClock, TresControl, type TresCustomRendererOptions, TresEuler, TresInstance, TresLayers, TresLoader, TresLoaderOptions, TresMaterial, TresObject, TresObject3D, TresObjectMap, TresOptions, TresPartialContext, TresPlugin, type TresPointerEvent, TresPrimitive, TresQuaternion, TresRenderer, TresRendererError, TresRendererErrorCode, TresRendererSetupContext, TresScene, TresTimer, TresVector2, TresVector3, TresVector4, UseCameraReturn, _default$
|
|
1244
|
+
export { Args, AssetLoadData, AttachFnType, AttachType, ConstructorRepresentation, DevtoolsMessage, DevtoolsMessageType, DevtoolsMessenger, DevtoolsSubscriber, DisposeType, ElementProps, INJECTION_KEY, InstanceProps, LoaderMethods, LoaderProto, LocalState, LoopContext, MathType, Mutable, NonFunctionKeys, Overwrite, Properties, RenderFunction, RenderMode, RendererOptions, ThreeElement, ThreeInstances, TresCamera, _default as TresCanvas, _default$1 as TresCanvasContext, type TresCanvasEmits, type TresCanvasInstance, type TresCanvasProps, TresCatalogue, TresColor, TresColorArray, TresComponents, type TresContext, TresContextWithClock, TresControl, type TresCustomRendererOptions, TresEuler, TresInstance, TresLayers, TresLoader, TresLoaderOptions, TresMaterial, TresObject, TresObject3D, TresObjectMap, TresOptions, TresPartialContext, TresPlugin, type TresPointerEvent, _default$2 as TresPortal, TresPrimitive, TresQuaternion, TresRenderer, TresRendererError, TresRendererErrorCode, TresRendererSetupContext, TresScene, TresTimer, TresVector2, TresVector3, TresVector4, UseCameraReturn, _default$3 as UseLoader, UseLoaderReturn, UseRendererManagerReturn, UseRendererOptions, VectorCoordinates, type VectorFlexibleParams, VueProps, WithMathProps, buildGraph, catalogue, createTimer, plugin as default, disposeObject3D as dispose, extend, isBufferGeometry, isCamera, isClassInstance, isColor, isColorRepresentation, isCopyable, isFog, isGroup, isLayers, isLight, isMaterial, isMesh, isObject3D, isOrthographicCamera, isPerspectiveCamera, isProd, isScene, isTresCamera, isTresInstance, isTresObject, isTresPrimitive, isVectorLike, isWebGLRenderer, isWebGPURenderer, logError, logMessage, logWarning, normalizeColor, normalizeVectorFlexibleParam, registerTresDevtools, templateCompilerOptions, useCameraManager, useGraph, useLoader, useLoop, useRendererManager, useTres, useTresContext, useTresContextProvider, vDistanceTo, vLightHelper, vLog };
|
package/dist/tres.js
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* name: @tresjs/core
|
|
3
|
-
* version: v5.
|
|
3
|
+
* version: v5.9.1
|
|
4
4
|
* (c) 2026
|
|
5
5
|
* description: Declarative ThreeJS using Vue Components
|
|
6
6
|
* author: Alvaro Saburido <hola@alvarosaburido.dev> (https://github.com/alvarosabu/)
|
|
7
7
|
*/
|
|
8
|
-
import { Fragment, computed, createBlock, createCommentVNode, createElementBlock, createRenderer, defineComponent, getCurrentInstance, h, isRef, mergeProps, nextTick, normalizeClass, normalizeStyle, onBeforeUnmount, onMounted, onUnmounted, openBlock, provide, reactive, readonly, ref, renderSlot, shallowRef, toValue, unref, useSlots, watch, watchEffect, withCtx } from "vue";
|
|
8
|
+
import { Fragment, Teleport, computed, createBlock, createCommentVNode, createElementBlock, createRenderer, defineComponent, getCurrentInstance, h, isRef, mergeProps, nextTick, normalizeClass, normalizeStyle, onBeforeUnmount, onMounted, onUnmounted, openBlock, provide, reactive, readonly, ref, renderSlot, shallowRef, toValue, triggerRef, unref, useSlots, watch, watchEffect, withCtx } from "vue";
|
|
9
9
|
import * as THREE from "three";
|
|
10
|
-
import { ACESFilmicToneMapping, ArrowHelper, BufferAttribute, Color, DirectionalLightHelper, DoubleSide, HemisphereLightHelper, Layers, Material, MathUtils, Mesh, MeshBasicMaterial, PCFSoftShadowMap, PerspectiveCamera, PointLightHelper, REVISION, Scene, SpotLightHelper, Vector3, WebGLRenderer } from "three";
|
|
10
|
+
import { ACESFilmicToneMapping, ArrowHelper, BufferAttribute, Color, DirectionalLightHelper, DoubleSide, HemisphereLightHelper, Layers, Material, MathUtils, Mesh, MeshBasicMaterial, PCFShadowMap, PCFSoftShadowMap, PerspectiveCamera, PointLightHelper, REVISION, Scene, SpotLightHelper, Vector3, WebGLRenderer } from "three";
|
|
11
11
|
import { createEventHook, createInjectionState, promiseTimeout, refDebounced, tryOnScopeDispose, unrefElement, useAsyncState, useDevicePixelRatio, useElementSize, useFps, useMemory, useRafFn, useTimeout, useWindowSize, whenever } from "@vueuse/core";
|
|
12
12
|
import { camel, isEqual, isFunction, isNumber, isObject, isString, isUndefined } from "radashi";
|
|
13
13
|
import { forwardHtmlEvents, getVoidObject } from "@pmndrs/pointer-events";
|
|
@@ -15,7 +15,7 @@ import { setupDevtoolsPlugin } from "@vue/devtools-api";
|
|
|
15
15
|
import { RectAreaLightHelper } from "three/examples/jsm/helpers/RectAreaLightHelper.js";
|
|
16
16
|
|
|
17
17
|
//#region package.json
|
|
18
|
-
var version = "5.
|
|
18
|
+
var version = "5.9.1";
|
|
19
19
|
|
|
20
20
|
//#endregion
|
|
21
21
|
//#region src/utils/makeMap.ts
|
|
@@ -265,6 +265,32 @@ const isTresPrimitive = createTypeGuard("isPrimitive");
|
|
|
265
265
|
* ```
|
|
266
266
|
*/
|
|
267
267
|
const isTresInstance = (value) => isTresObject(value) && "__tres" in value;
|
|
268
|
+
/**
|
|
269
|
+
* Type guard to check if a value is a Three.js WebGPU `Renderer`.
|
|
270
|
+
*
|
|
271
|
+
* Identifies the renderer *instance*, not the active backend: a `WebGPURenderer`
|
|
272
|
+
* can run on a WebGPU **or** a WebGL2 fallback backend, and this returns `true`
|
|
273
|
+
* for both. That is the right granularity for branching on capabilities —
|
|
274
|
+
* `NodeMaterial` works on either backend, while a GLSL `ShaderMaterial` works on
|
|
275
|
+
* neither under the WebGPU renderer.
|
|
276
|
+
* @param value - The value to check
|
|
277
|
+
* @returns True if the value is a WebGPU `Renderer` instance, false otherwise
|
|
278
|
+
* @example
|
|
279
|
+
* ```ts
|
|
280
|
+
* const { renderer } = useTresContext()
|
|
281
|
+
* if (isWebGPURenderer(renderer.instance)) {
|
|
282
|
+
* // TypeScript knows renderer.instance is a WebGPU Renderer here
|
|
283
|
+
* }
|
|
284
|
+
* ```
|
|
285
|
+
*/
|
|
286
|
+
const isWebGPURenderer = createTypeGuard("isRenderer");
|
|
287
|
+
/**
|
|
288
|
+
* Type guard to check if a value is a Three.js `WebGLRenderer`.
|
|
289
|
+
* @param value - The value to check
|
|
290
|
+
* @returns True if the value is a `WebGLRenderer` instance, false otherwise
|
|
291
|
+
* @see {@link isWebGPURenderer}
|
|
292
|
+
*/
|
|
293
|
+
const isWebGLRenderer = createTypeGuard("isWebGLRenderer");
|
|
268
294
|
|
|
269
295
|
//#endregion
|
|
270
296
|
//#region src/utils/array.ts
|
|
@@ -577,7 +603,7 @@ var component_default = component_vue_vue_type_script_setup_true_lang_default;
|
|
|
577
603
|
* @returns The camera management functions and state
|
|
578
604
|
*/
|
|
579
605
|
const useCameraManager = ({ sizes }) => {
|
|
580
|
-
const cameras =
|
|
606
|
+
const cameras = shallowRef([]);
|
|
581
607
|
const activeCamera = computed(() => cameras.value[0]);
|
|
582
608
|
/**
|
|
583
609
|
* Set the active camera
|
|
@@ -596,6 +622,7 @@ const useCameraManager = ({ sizes }) => {
|
|
|
596
622
|
const registerCamera = (camera, active = false) => {
|
|
597
623
|
if (cameras.value.some(({ uuid }) => uuid === camera.uuid)) return;
|
|
598
624
|
cameras.value.push(camera);
|
|
625
|
+
triggerRef(cameras);
|
|
599
626
|
if (active) setActiveCamera(camera.uuid);
|
|
600
627
|
};
|
|
601
628
|
/**
|
|
@@ -857,7 +884,6 @@ function useRendererManager({ scene, canvas, options, fpsLimit, contextParts: {
|
|
|
857
884
|
if (toValue(options.renderMode) === "on-demand") invalidate();
|
|
858
885
|
};
|
|
859
886
|
const isModeAlways = computed(() => toValue(options.renderMode) === "always");
|
|
860
|
-
const isRenderer = (value) => isObject(value) && "isRenderer" in value && Boolean(value.isRenderer);
|
|
861
887
|
const readyEventHook = createEventHook();
|
|
862
888
|
const errorEventHook = createEventHook();
|
|
863
889
|
let hasTriggeredReady = false;
|
|
@@ -865,7 +891,7 @@ function useRendererManager({ scene, canvas, options, fpsLimit, contextParts: {
|
|
|
865
891
|
const error = ref(null);
|
|
866
892
|
const initializeRenderer = async () => {
|
|
867
893
|
try {
|
|
868
|
-
if (
|
|
894
|
+
if (isWebGPURenderer(renderer)) await renderer.init();
|
|
869
895
|
isInitialized.value = true;
|
|
870
896
|
} catch (e) {
|
|
871
897
|
const rendererError = new TresRendererError(e instanceof Error ? e.message : "Unknown error", "INITIALIZATION_FAILED", { cause: e instanceof Error ? e : void 0 });
|
|
@@ -964,9 +990,8 @@ Error details: ${rendererError.message}`, rendererError);
|
|
|
964
990
|
});
|
|
965
991
|
watchEffect(() => {
|
|
966
992
|
if (!isInitialized.value) return;
|
|
967
|
-
const
|
|
968
|
-
|
|
969
|
-
renderer.shadowMap.type = value;
|
|
993
|
+
const fallback = isWebGPURenderer(renderer) ? PCFSoftShadowMap : PCFShadowMap;
|
|
994
|
+
renderer.shadowMap.type = options.shadowMapType ?? fallback;
|
|
970
995
|
forceMaterialUpdate();
|
|
971
996
|
});
|
|
972
997
|
onUnmounted(() => {
|
|
@@ -1047,6 +1072,7 @@ const [useTresContextProvider, _useTresContext] = createInjectionState(({ scene,
|
|
|
1047
1072
|
scene: localScene,
|
|
1048
1073
|
camera,
|
|
1049
1074
|
renderer,
|
|
1075
|
+
isWebGPU: computed(() => isWebGPURenderer(renderer.instance)),
|
|
1050
1076
|
controls: ref(null),
|
|
1051
1077
|
extend,
|
|
1052
1078
|
events
|
|
@@ -1067,7 +1093,7 @@ const useTresContext = () => {
|
|
|
1067
1093
|
//#endregion
|
|
1068
1094
|
//#region src/composables/useTres/index.ts
|
|
1069
1095
|
function useTres() {
|
|
1070
|
-
const { scene, renderer, camera, sizes, controls, extend: extend$1, events } = useTresContext();
|
|
1096
|
+
const { scene, renderer, camera, sizes, controls, extend: extend$1, events, isWebGPU } = useTresContext();
|
|
1071
1097
|
return {
|
|
1072
1098
|
scene,
|
|
1073
1099
|
renderer: renderer.instance,
|
|
@@ -1076,6 +1102,7 @@ function useTres() {
|
|
|
1076
1102
|
controls,
|
|
1077
1103
|
extend: extend$1,
|
|
1078
1104
|
events,
|
|
1105
|
+
isWebGPU,
|
|
1079
1106
|
invalidate: renderer.invalidate,
|
|
1080
1107
|
advance: renderer.advance
|
|
1081
1108
|
};
|
|
@@ -2261,7 +2288,8 @@ var TresCanvas_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ def
|
|
|
2261
2288
|
},
|
|
2262
2289
|
customRendererOptions: {
|
|
2263
2290
|
type: Object,
|
|
2264
|
-
required: false
|
|
2291
|
+
required: false,
|
|
2292
|
+
default: () => ({ primitivePrefix: "" })
|
|
2265
2293
|
},
|
|
2266
2294
|
antialias: {
|
|
2267
2295
|
type: Boolean,
|
|
@@ -2337,7 +2365,7 @@ var TresCanvas_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ def
|
|
|
2337
2365
|
shadowMapType: {
|
|
2338
2366
|
type: null,
|
|
2339
2367
|
required: false,
|
|
2340
|
-
default:
|
|
2368
|
+
default: void 0
|
|
2341
2369
|
},
|
|
2342
2370
|
useLegacyLights: {
|
|
2343
2371
|
type: Boolean,
|
|
@@ -2480,11 +2508,40 @@ const whitelist = [
|
|
|
2480
2508
|
"TresCanvas",
|
|
2481
2509
|
"TresCanvasContext",
|
|
2482
2510
|
"TresLeches",
|
|
2483
|
-
"TresScene"
|
|
2511
|
+
"TresScene",
|
|
2512
|
+
"TresPortal"
|
|
2484
2513
|
];
|
|
2485
2514
|
const templateCompilerOptions = { template: { compilerOptions: { isCustomElement: (tag) => (/^Tres[A-Z]/.test(tag) || tag.startsWith("tres-")) && !whitelist.includes(tag) || tag === "primitive" } } };
|
|
2486
2515
|
var template_compiler_options_default = templateCompilerOptions;
|
|
2487
2516
|
|
|
2517
|
+
//#endregion
|
|
2518
|
+
//#region src/components/TresPortal.vue?vue&type=script&setup=true&lang.ts
|
|
2519
|
+
var TresPortal_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
|
|
2520
|
+
__name: "TresPortal",
|
|
2521
|
+
props: {
|
|
2522
|
+
to: {
|
|
2523
|
+
type: Object,
|
|
2524
|
+
required: true
|
|
2525
|
+
},
|
|
2526
|
+
disabled: {
|
|
2527
|
+
type: Boolean,
|
|
2528
|
+
required: false
|
|
2529
|
+
}
|
|
2530
|
+
},
|
|
2531
|
+
setup(__props) {
|
|
2532
|
+
return (_ctx, _cache) => {
|
|
2533
|
+
return openBlock(), createBlock(Teleport, {
|
|
2534
|
+
to: __props.to,
|
|
2535
|
+
disabled: __props.disabled
|
|
2536
|
+
}, [renderSlot(_ctx.$slots, "default")], 8, ["to", "disabled"]);
|
|
2537
|
+
};
|
|
2538
|
+
}
|
|
2539
|
+
});
|
|
2540
|
+
|
|
2541
|
+
//#endregion
|
|
2542
|
+
//#region src/components/TresPortal.vue
|
|
2543
|
+
var TresPortal_default = TresPortal_vue_vue_type_script_setup_true_lang_default;
|
|
2544
|
+
|
|
2488
2545
|
//#endregion
|
|
2489
2546
|
//#region src/directives/vDistanceTo.ts
|
|
2490
2547
|
let arrowHelper = null;
|
|
@@ -2575,4 +2632,4 @@ const plugin = { install(app) {
|
|
|
2575
2632
|
var src_default = plugin;
|
|
2576
2633
|
|
|
2577
2634
|
//#endregion
|
|
2578
|
-
export { DevtoolsMessenger, TresCanvas_default as TresCanvas, Context_default as TresCanvasContext, TresRendererError, component_default as UseLoader, buildGraph, catalogue, createTimer, src_default as default, disposeObject3D as dispose, extend, isBufferGeometry, isCamera, isClassInstance, isColor, isColorRepresentation, isCopyable, isFog, isGroup, isLayers, isLight, isMaterial, isMesh, isObject3D, isOrthographicCamera, isPerspectiveCamera, isProd, isScene, isTresCamera, isTresInstance, isTresObject, isTresPrimitive, isVectorLike, logError, logMessage, logWarning, normalizeColor, normalizeVectorFlexibleParam, registerTresDevtools, template_compiler_options_default as templateCompilerOptions, useCameraManager, useGraph, useLoader, useLoop, useRendererManager, useTres, useTresContext, useTresContextProvider, vDistanceTo, vLightHelper, vLog };
|
|
2635
|
+
export { DevtoolsMessenger, INJECTION_KEY, TresCanvas_default as TresCanvas, Context_default as TresCanvasContext, TresPortal_default as TresPortal, TresRendererError, component_default as UseLoader, buildGraph, catalogue, createTimer, src_default as default, disposeObject3D as dispose, extend, isBufferGeometry, isCamera, isClassInstance, isColor, isColorRepresentation, isCopyable, isFog, isGroup, isLayers, isLight, isMaterial, isMesh, isObject3D, isOrthographicCamera, isPerspectiveCamera, isProd, isScene, isTresCamera, isTresInstance, isTresObject, isTresPrimitive, isVectorLike, isWebGLRenderer, isWebGPURenderer, logError, logMessage, logWarning, normalizeColor, normalizeVectorFlexibleParam, registerTresDevtools, template_compiler_options_default as templateCompilerOptions, useCameraManager, useGraph, useLoader, useLoop, useRendererManager, useTres, useTresContext, useTresContextProvider, vDistanceTo, vLightHelper, vLog };
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tresjs/core",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "5.
|
|
4
|
+
"version": "5.9.1",
|
|
5
5
|
"description": "Declarative ThreeJS using Vue Components",
|
|
6
6
|
"author": "Alvaro Saburido <hola@alvarosaburido.dev> (https://github.com/alvarosabu/)",
|
|
7
7
|
"license": "MIT",
|
|
@@ -89,7 +89,7 @@
|
|
|
89
89
|
"build": "tsdown",
|
|
90
90
|
"build:analyze": "ANALYZE=true tsdown",
|
|
91
91
|
"test": "vitest",
|
|
92
|
-
"test:ci": "vitest run",
|
|
92
|
+
"test:ci": "vitest run --typecheck",
|
|
93
93
|
"test:ui": "vitest --ui --coverage.enabled=true",
|
|
94
94
|
"coverage": "vitest run --coverage",
|
|
95
95
|
"lint": "eslint .",
|