@tresjs/core 5.8.2 → 5.9.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/dist/template-compiler-options.d.mts +1 -1
- package/dist/template-compiler-options.mjs +3 -2
- package/dist/tres.d.ts +100 -41
- package/dist/tres.js +73 -16
- package/package.json +2 -3
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* name: @tresjs/core
|
|
3
|
-
* version: v5.
|
|
3
|
+
* version: v5.9.0
|
|
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.0
|
|
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>;
|
|
@@ -514,8 +524,8 @@ interface TresObjectMap {
|
|
|
514
524
|
declare function buildGraph(object: Object3D | TresObject): TresObjectMap;
|
|
515
525
|
//#endregion
|
|
516
526
|
//#region src/composables/useLoader/component.vue.d.ts
|
|
517
|
-
declare const __VLS_export$
|
|
518
|
-
props:
|
|
527
|
+
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<{
|
|
528
|
+
props: vue20.PublicProps & __VLS_PrettifyLocal<{
|
|
519
529
|
/**
|
|
520
530
|
* The THREE.js loader to use
|
|
521
531
|
*/
|
|
@@ -539,20 +549,20 @@ declare const __VLS_export$2: <T extends TresObjectMap>(__VLS_props: NonNullable
|
|
|
539
549
|
attrs: any;
|
|
540
550
|
slots: {
|
|
541
551
|
default?: (props: {
|
|
542
|
-
state:
|
|
552
|
+
state: vue20.UnwrapRef<T>;
|
|
543
553
|
isLoading: boolean;
|
|
544
554
|
error: unknown;
|
|
545
555
|
}) => any;
|
|
546
556
|
};
|
|
547
557
|
emit: ((evt: "error", error: unknown) => void) & ((evt: "loaded", result: T) => void);
|
|
548
|
-
}>) =>
|
|
558
|
+
}>) => vue20.VNode & {
|
|
549
559
|
__ctx?: Awaited<typeof __VLS_setup>;
|
|
550
560
|
};
|
|
551
|
-
declare const _default$
|
|
561
|
+
declare const _default$3: typeof __VLS_export$3;
|
|
552
562
|
type __VLS_PrettifyLocal<T> = (T extends any ? { [K in keyof T]: T[K] } : { [K in keyof T as K]: T[K] }) & {};
|
|
553
563
|
//#endregion
|
|
554
564
|
//#region src/composables/useGraph/index.d.ts
|
|
555
|
-
declare const useGraph: (object: MaybeRef<TresObject | undefined>) =>
|
|
565
|
+
declare const useGraph: (object: MaybeRef<TresObject | undefined>) => vue20.ComputedRef<TresObjectMap | undefined>;
|
|
556
566
|
//#endregion
|
|
557
567
|
//#region src/utils/createPriorityEventHook.d.ts
|
|
558
568
|
type Callback<T> = Parameters<EventHookOff<T>>[0];
|
|
@@ -603,7 +613,7 @@ type LoopContext = RafLoopContext & TresPartialContext;
|
|
|
603
613
|
declare const useLoop: () => {
|
|
604
614
|
stop: () => void;
|
|
605
615
|
start: () => void;
|
|
606
|
-
isActive: Readonly<
|
|
616
|
+
isActive: Readonly<vue20.ShallowRef<boolean>>;
|
|
607
617
|
onBeforeRender: PriorityEventHookOn<LoopContext>;
|
|
608
618
|
onRender: PriorityEventHookOn<LoopContext>;
|
|
609
619
|
render: (fn: RenderFunction) => void;
|
|
@@ -704,16 +714,17 @@ type ContextEmits = {
|
|
|
704
714
|
beforeLoop: [context: TresContextWithClock];
|
|
705
715
|
loop: [context: TresContextWithClock];
|
|
706
716
|
} & { [key in TresPointerEventName]: [event: TresPointerEvent] };
|
|
707
|
-
type __VLS_Props = ContextProps & {
|
|
717
|
+
type __VLS_Props$1 = ContextProps & {
|
|
708
718
|
canvas: HTMLCanvasElement;
|
|
709
719
|
};
|
|
710
|
-
type __VLS_Slots$
|
|
720
|
+
type __VLS_Slots$2 = {
|
|
711
721
|
default: () => any;
|
|
712
722
|
};
|
|
713
|
-
declare const __VLS_base$
|
|
714
|
-
context:
|
|
723
|
+
declare const __VLS_base$2: vue20.DefineComponent<__VLS_Props$1, {
|
|
724
|
+
context: vue20.ShallowRef<TresContext, TresContext>;
|
|
715
725
|
dispose: () => void;
|
|
716
|
-
}, {}, {}, {},
|
|
726
|
+
}, {}, {}, {}, vue20.ComponentOptionsMixin, vue20.ComponentOptionsMixin, {
|
|
727
|
+
render: (context: TresContext) => any;
|
|
717
728
|
click: (event: TresPointerEvent) => any;
|
|
718
729
|
contextmenu: (event: TresPointerEvent) => any;
|
|
719
730
|
pointermove: (event: TresPointerEvent) => any;
|
|
@@ -730,10 +741,10 @@ declare const __VLS_base$1: vue14.DefineComponent<__VLS_Props, {
|
|
|
730
741
|
ready: (context: TresContext) => any;
|
|
731
742
|
error: (error: Error) => any;
|
|
732
743
|
pointermissed: (event: TresPointerEvent) => any;
|
|
733
|
-
render: (context: TresContext) => any;
|
|
734
744
|
beforeLoop: (context: TresContextWithClock) => any;
|
|
735
745
|
loop: (context: TresContextWithClock) => any;
|
|
736
|
-
}, string,
|
|
746
|
+
}, string, vue20.PublicProps, Readonly<__VLS_Props$1> & Readonly<{
|
|
747
|
+
onRender?: ((context: TresContext) => any) | undefined;
|
|
737
748
|
onClick?: ((event: TresPointerEvent) => any) | undefined;
|
|
738
749
|
onContextmenu?: ((event: TresPointerEvent) => any) | undefined;
|
|
739
750
|
onPointermove?: ((event: TresPointerEvent) => any) | undefined;
|
|
@@ -750,13 +761,12 @@ declare const __VLS_base$1: vue14.DefineComponent<__VLS_Props, {
|
|
|
750
761
|
onReady?: ((context: TresContext) => any) | undefined;
|
|
751
762
|
onError?: ((error: Error) => any) | undefined;
|
|
752
763
|
onPointermissed?: ((event: TresPointerEvent) => any) | undefined;
|
|
753
|
-
onRender?: ((context: TresContext) => any) | undefined;
|
|
754
764
|
onBeforeLoop?: ((context: TresContextWithClock) => any) | undefined;
|
|
755
765
|
onLoop?: ((context: TresContextWithClock) => any) | undefined;
|
|
756
|
-
}>, {}, {}, {}, {}, string,
|
|
757
|
-
declare const __VLS_export$
|
|
758
|
-
declare const _default$1: typeof __VLS_export$
|
|
759
|
-
type __VLS_WithSlots$
|
|
766
|
+
}>, {}, {}, {}, {}, string, vue20.ComponentProvideOptions, false, {}, any>;
|
|
767
|
+
declare const __VLS_export$2: __VLS_WithSlots$2<typeof __VLS_base$2, __VLS_Slots$2>;
|
|
768
|
+
declare const _default$1: typeof __VLS_export$2;
|
|
769
|
+
type __VLS_WithSlots$2<T, S> = T & {
|
|
760
770
|
new (): {
|
|
761
771
|
$slots: S;
|
|
762
772
|
};
|
|
@@ -769,10 +779,11 @@ interface TresCanvasInstance {
|
|
|
769
779
|
get context(): TresContext | undefined;
|
|
770
780
|
dispose: () => void;
|
|
771
781
|
}
|
|
772
|
-
type __VLS_Slots = {
|
|
782
|
+
type __VLS_Slots$1 = {
|
|
773
783
|
default: () => any;
|
|
774
784
|
};
|
|
775
|
-
declare const __VLS_base:
|
|
785
|
+
declare const __VLS_base$1: vue20.DefineComponent<ContextProps, TresCanvasInstance, {}, {}, {}, vue20.ComponentOptionsMixin, vue20.ComponentOptionsMixin, {
|
|
786
|
+
render: (context: TresContext) => any;
|
|
776
787
|
click: (event: TresPointerEvent) => any;
|
|
777
788
|
contextmenu: (event: TresPointerEvent) => any;
|
|
778
789
|
pointermove: (event: TresPointerEvent) => any;
|
|
@@ -789,10 +800,10 @@ declare const __VLS_base: vue14.DefineComponent<ContextProps, TresCanvasInstance
|
|
|
789
800
|
ready: (context: TresContext) => any;
|
|
790
801
|
error: (error: Error) => any;
|
|
791
802
|
pointermissed: (event: TresPointerEvent) => any;
|
|
792
|
-
render: (context: TresContext) => any;
|
|
793
803
|
beforeLoop: (context: TresContextWithClock) => any;
|
|
794
804
|
loop: (context: TresContextWithClock) => any;
|
|
795
|
-
}, string,
|
|
805
|
+
}, string, vue20.PublicProps, Readonly<ContextProps> & Readonly<{
|
|
806
|
+
onRender?: ((context: TresContext) => any) | undefined;
|
|
796
807
|
onClick?: ((event: TresPointerEvent) => any) | undefined;
|
|
797
808
|
onContextmenu?: ((event: TresPointerEvent) => any) | undefined;
|
|
798
809
|
onPointermove?: ((event: TresPointerEvent) => any) | undefined;
|
|
@@ -809,29 +820,49 @@ declare const __VLS_base: vue14.DefineComponent<ContextProps, TresCanvasInstance
|
|
|
809
820
|
onReady?: ((context: TresContext) => any) | undefined;
|
|
810
821
|
onError?: ((error: Error) => any) | undefined;
|
|
811
822
|
onPointermissed?: ((event: TresPointerEvent) => any) | undefined;
|
|
812
|
-
onRender?: ((context: TresContext) => any) | undefined;
|
|
813
823
|
onBeforeLoop?: ((context: TresContextWithClock) => any) | undefined;
|
|
814
824
|
onLoop?: ((context: TresContextWithClock) => any) | undefined;
|
|
815
825
|
}>, {
|
|
816
|
-
|
|
826
|
+
alpha: boolean;
|
|
827
|
+
logarithmicDepthBuffer: boolean;
|
|
817
828
|
toneMapping: THREE.ToneMapping;
|
|
829
|
+
depth: boolean;
|
|
830
|
+
stencil: boolean;
|
|
831
|
+
clearColor: THREE.ColorRepresentation;
|
|
832
|
+
windowSize: boolean;
|
|
818
833
|
enableProvideBridge: boolean;
|
|
834
|
+
customRendererOptions: TresCustomRendererOptions;
|
|
819
835
|
antialias: boolean;
|
|
820
|
-
stencil: boolean;
|
|
821
|
-
depth: boolean;
|
|
822
|
-
logarithmicDepthBuffer: boolean;
|
|
823
836
|
preserveDrawingBuffer: boolean;
|
|
824
|
-
alpha: boolean;
|
|
825
837
|
failIfMajorPerformanceCaveat: boolean;
|
|
826
|
-
clearColor: THREE.ColorRepresentation;
|
|
827
838
|
clearAlpha: number;
|
|
828
839
|
shadows: boolean;
|
|
829
840
|
shadowMapType: THREE.ShadowMapType;
|
|
830
841
|
useLegacyLights: boolean;
|
|
831
842
|
renderMode: "always" | "on-demand" | "manual";
|
|
832
|
-
}, {}, {}, {}, string,
|
|
843
|
+
}, {}, {}, {}, string, vue20.ComponentProvideOptions, false, {}, any>;
|
|
844
|
+
declare const __VLS_export$1: __VLS_WithSlots$1<typeof __VLS_base$1, __VLS_Slots$1>;
|
|
845
|
+
declare const _default: typeof __VLS_export$1;
|
|
846
|
+
type __VLS_WithSlots$1<T, S> = T & {
|
|
847
|
+
new (): {
|
|
848
|
+
$slots: S;
|
|
849
|
+
};
|
|
850
|
+
};
|
|
851
|
+
//#endregion
|
|
852
|
+
//#region src/components/TresPortal.vue.d.ts
|
|
853
|
+
type __VLS_Props = {
|
|
854
|
+
/** Target Object3D/Scene to reparent children into. */
|
|
855
|
+
to: Object3D;
|
|
856
|
+
/** When true, children render in place (main scene) instead of the target. */
|
|
857
|
+
disabled?: boolean;
|
|
858
|
+
};
|
|
859
|
+
declare var __VLS_7: {};
|
|
860
|
+
type __VLS_Slots = {} & {
|
|
861
|
+
default?: (props: typeof __VLS_7) => any;
|
|
862
|
+
};
|
|
863
|
+
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
864
|
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
834
|
-
declare const _default: typeof __VLS_export;
|
|
865
|
+
declare const _default$2: typeof __VLS_export;
|
|
835
866
|
type __VLS_WithSlots<T, S> = T & {
|
|
836
867
|
new (): {
|
|
837
868
|
$slots: S;
|
|
@@ -1170,6 +1201,34 @@ declare const isTresPrimitive: (value: unknown) => value is TresPrimitive;
|
|
|
1170
1201
|
* ```
|
|
1171
1202
|
*/
|
|
1172
1203
|
declare const isTresInstance: (value: unknown) => value is TresInstance;
|
|
1204
|
+
/**
|
|
1205
|
+
* Type guard to check if a value is a Three.js WebGPU `Renderer`.
|
|
1206
|
+
*
|
|
1207
|
+
* Identifies the renderer *instance*, not the active backend: a `WebGPURenderer`
|
|
1208
|
+
* can run on a WebGPU **or** a WebGL2 fallback backend, and this returns `true`
|
|
1209
|
+
* for both. That is the right granularity for branching on capabilities —
|
|
1210
|
+
* `NodeMaterial` works on either backend, while a GLSL `ShaderMaterial` works on
|
|
1211
|
+
* neither under the WebGPU renderer.
|
|
1212
|
+
* @param value - The value to check
|
|
1213
|
+
* @returns True if the value is a WebGPU `Renderer` instance, false otherwise
|
|
1214
|
+
* @example
|
|
1215
|
+
* ```ts
|
|
1216
|
+
* const { renderer } = useTresContext()
|
|
1217
|
+
* if (isWebGPURenderer(renderer.instance)) {
|
|
1218
|
+
* // TypeScript knows renderer.instance is a WebGPU Renderer here
|
|
1219
|
+
* }
|
|
1220
|
+
* ```
|
|
1221
|
+
*/
|
|
1222
|
+
declare const isWebGPURenderer: (value: unknown) => value is Renderer;
|
|
1223
|
+
/**
|
|
1224
|
+
* Type guard to check if a value is a Three.js `WebGLRenderer`.
|
|
1225
|
+
* @param value - The value to check
|
|
1226
|
+
* @returns True if the value is a `WebGLRenderer` instance, false otherwise
|
|
1227
|
+
* @see {@link isWebGPURenderer}
|
|
1228
|
+
*/
|
|
1229
|
+
declare const isWebGLRenderer: (value: unknown) => value is WebGLRenderer & {
|
|
1230
|
+
isWebGLRenderer: true;
|
|
1231
|
+
};
|
|
1173
1232
|
//#endregion
|
|
1174
1233
|
//#region src/index.d.ts
|
|
1175
1234
|
interface TresOptions {
|
|
@@ -1181,4 +1240,4 @@ interface TresPlugin {
|
|
|
1181
1240
|
}
|
|
1182
1241
|
declare const plugin: TresPlugin;
|
|
1183
1242
|
//#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$
|
|
1243
|
+
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,21 +1,21 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* name: @tresjs/core
|
|
3
|
-
* version: v5.
|
|
3
|
+
* version: v5.9.0
|
|
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";
|
|
14
14
|
import { setupDevtoolsPlugin } from "@vue/devtools-api";
|
|
15
|
-
import { RectAreaLightHelper } from "three
|
|
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.0";
|
|
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.0",
|
|
5
5
|
"description": "Declarative ThreeJS using Vue Components",
|
|
6
6
|
"author": "Alvaro Saburido <hola@alvarosaburido.dev> (https://github.com/alvarosabu/)",
|
|
7
7
|
"license": "MIT",
|
|
@@ -48,8 +48,7 @@
|
|
|
48
48
|
"@pmndrs/pointer-events": "^6.6.30",
|
|
49
49
|
"@vue/devtools-api": "^8.1.2",
|
|
50
50
|
"@vueuse/core": "^14.3.0",
|
|
51
|
-
"radashi": "^12.9.1"
|
|
52
|
-
"three-stdlib": "^2.36.1"
|
|
51
|
+
"radashi": "^12.9.1"
|
|
53
52
|
},
|
|
54
53
|
"devDependencies": {
|
|
55
54
|
"@types/node": "^25.9.3",
|