@tresjs/core 5.3.1 → 5.3.3

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.
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * name: @tresjs/core
3
- * version: v5.3.1
3
+ * version: v5.3.3
4
4
  * (c) 2026
5
5
  * description: Declarative ThreeJS using Vue Components
6
6
  * author: Alvaro Saburido <hola@alvarosaburido.dev> (https://github.com/alvarosabu/)
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * name: @tresjs/core
3
- * version: v5.3.1
3
+ * version: v5.3.3
4
4
  * (c) 2026
5
5
  * description: Declarative ThreeJS using Vue Components
6
6
  * author: Alvaro Saburido <hola@alvarosaburido.dev> (https://github.com/alvarosabu/)
package/dist/tres.d.ts CHANGED
@@ -1,11 +1,11 @@
1
1
  /**
2
2
  * name: @tresjs/core
3
- * version: v5.3.1
3
+ * version: v5.3.3
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 vue9 from "vue";
8
+ import * as vue4 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";
@@ -121,6 +121,14 @@ declare const useCameraManager: ({
121
121
  sizes
122
122
  }: UseCameraParams) => UseCameraReturn;
123
123
  //#endregion
124
+ //#region src/utils/error.d.ts
125
+ type TresRendererErrorCode = 'INITIALIZATION_FAILED';
126
+ declare class TresRendererError extends Error {
127
+ readonly code: TresRendererErrorCode;
128
+ readonly name = "TresRendererError";
129
+ constructor(message: string, code: TresRendererErrorCode, options?: ErrorOptions);
130
+ }
131
+ //#endregion
124
132
  //#region src/composables/useRenderer/useRendererManager.d.ts
125
133
  /**
126
134
  * If set to 'on-demand', the scene will only be rendered when the current frame is invalidated
@@ -311,10 +319,13 @@ declare function useRendererManager({
311
319
  advance: () => void;
312
320
  onReady: _vueuse_core0.EventHookOn<TresRenderer>;
313
321
  onRender: _vueuse_core0.EventHookOn<TresRenderer>;
322
+ onError: _vueuse_core0.EventHookOn<TresRendererError>;
314
323
  invalidate: (amountOfFramesToInvalidate?: number) => void;
315
- canBeInvalidated: vue9.ComputedRef<boolean>;
324
+ canBeInvalidated: vue4.ComputedRef<boolean>;
316
325
  mode: "always" | "on-demand" | "manual" | undefined;
317
326
  replaceRenderFunction: (fn: RenderFunction) => void;
327
+ isInitialized: vue4.Ref<boolean, boolean>;
328
+ error: vue4.Ref<TresRendererError | null, TresRendererError | null>;
318
329
  };
319
330
  type UseRendererManagerReturn = ReturnType<typeof useRendererManager>;
320
331
  //#endregion
@@ -499,7 +510,7 @@ declare function buildGraph(object: Object3D | TresObject): TresObjectMap;
499
510
  //#endregion
500
511
  //#region src/composables/useLoader/component.vue.d.ts
501
512
  declare const __VLS_export$1: <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<{
502
- props: vue9.PublicProps & __VLS_PrettifyLocal<{
513
+ props: vue4.PublicProps & __VLS_PrettifyLocal<{
503
514
  /**
504
515
  * The THREE.js loader to use
505
516
  */
@@ -522,20 +533,20 @@ declare const __VLS_export$1: <T extends TresObjectMap>(__VLS_props: NonNullable
522
533
  attrs: any;
523
534
  slots: {
524
535
  default?: (props: {
525
- state: vue9.UnwrapRef<T>;
536
+ state: vue4.UnwrapRef<T>;
526
537
  isLoading: boolean;
527
538
  error: unknown;
528
539
  }) => any;
529
540
  };
530
541
  emit: ((evt: "loaded", result: T) => void) & ((evt: "error", error: unknown) => void);
531
- }>) => vue9.VNode & {
542
+ }>) => vue4.VNode & {
532
543
  __ctx?: Awaited<typeof __VLS_setup>;
533
544
  };
534
545
  declare const _default$1: typeof __VLS_export$1;
535
546
  type __VLS_PrettifyLocal<T> = (T extends any ? { [K in keyof T]: T[K] } : { [K in keyof T as K]: T[K] }) & {};
536
547
  //#endregion
537
548
  //#region src/composables/useGraph/index.d.ts
538
- declare const useGraph: (object: MaybeRef$1<TresObject | undefined>) => vue9.ComputedRef<TresObjectMap | undefined>;
549
+ declare const useGraph: (object: MaybeRef$1<TresObject | undefined>) => vue4.ComputedRef<TresObjectMap | undefined>;
539
550
  //#endregion
540
551
  //#region src/utils/createPriorityEventHook.d.ts
541
552
  type Callback<T> = Parameters<EventHookOff<T>>[0];
@@ -586,7 +597,7 @@ type LoopContext = RafLoopContext & TresPartialContext;
586
597
  declare const useLoop: () => {
587
598
  stop: () => void;
588
599
  start: () => void;
589
- isActive: Readonly<vue9.ShallowRef<boolean>>;
600
+ isActive: Readonly<vue4.ShallowRef<boolean>>;
590
601
  onBeforeRender: PriorityEventHookOn<LoopContext>;
591
602
  onRender: PriorityEventHookOn<LoopContext>;
592
603
  render: (fn: RenderFunction) => void;
@@ -676,6 +687,7 @@ interface ContextProps extends RendererOptions {
676
687
  }
677
688
  type ContextEmits = {
678
689
  ready: [context: TresContext];
690
+ error: [error: Error];
679
691
  pointermissed: [event: TresPointerEvent];
680
692
  render: [context: TresContext];
681
693
  beforeLoop: [context: TresContextWithClock];
@@ -692,7 +704,7 @@ interface TresCanvasInstance {
692
704
  type __VLS_Slots = {
693
705
  default: () => any;
694
706
  };
695
- declare const __VLS_base: vue9.DefineComponent<ContextProps, TresCanvasInstance, {}, {}, {}, vue9.ComponentOptionsMixin, vue9.ComponentOptionsMixin, {
707
+ declare const __VLS_base: vue4.DefineComponent<ContextProps, TresCanvasInstance, {}, {}, {}, vue4.ComponentOptionsMixin, vue4.ComponentOptionsMixin, {
696
708
  click: (event: TresPointerEvent) => any;
697
709
  contextmenu: (event: TresPointerEvent) => any;
698
710
  pointermove: (event: TresPointerEvent) => any;
@@ -706,12 +718,13 @@ declare const __VLS_base: vue9.DefineComponent<ContextProps, TresCanvasInstance,
706
718
  pointercancel: (event: TresPointerEvent) => any;
707
719
  lostpointercapture: (event: TresPointerEvent) => any;
708
720
  wheel: (event: TresPointerEvent) => any;
721
+ error: (error: Error) => any;
709
722
  ready: (context: TresContext) => any;
710
723
  pointermissed: (event: TresPointerEvent) => any;
711
724
  render: (context: TresContext) => any;
712
725
  beforeLoop: (context: TresContextWithClock) => any;
713
726
  loop: (context: TresContextWithClock) => any;
714
- }, string, vue9.PublicProps, Readonly<ContextProps> & Readonly<{
727
+ }, string, vue4.PublicProps, Readonly<ContextProps> & Readonly<{
715
728
  onClick?: ((event: TresPointerEvent) => any) | undefined;
716
729
  onContextmenu?: ((event: TresPointerEvent) => any) | undefined;
717
730
  onPointermove?: ((event: TresPointerEvent) => any) | undefined;
@@ -725,6 +738,7 @@ declare const __VLS_base: vue9.DefineComponent<ContextProps, TresCanvasInstance,
725
738
  onPointercancel?: ((event: TresPointerEvent) => any) | undefined;
726
739
  onLostpointercapture?: ((event: TresPointerEvent) => any) | undefined;
727
740
  onWheel?: ((event: TresPointerEvent) => any) | undefined;
741
+ onError?: ((error: Error) => any) | undefined;
728
742
  onReady?: ((context: TresContext) => any) | undefined;
729
743
  onPointermissed?: ((event: TresPointerEvent) => any) | undefined;
730
744
  onRender?: ((context: TresContext) => any) | undefined;
@@ -732,7 +746,6 @@ declare const __VLS_base: vue9.DefineComponent<ContextProps, TresCanvasInstance,
732
746
  onLoop?: ((context: TresContextWithClock) => any) | undefined;
733
747
  }>, {
734
748
  windowSize: boolean;
735
- enableProvideBridge: boolean;
736
749
  antialias: boolean;
737
750
  stencil: boolean;
738
751
  depth: boolean;
@@ -747,7 +760,8 @@ declare const __VLS_base: vue9.DefineComponent<ContextProps, TresCanvasInstance,
747
760
  shadowMapType: THREE.ShadowMapType;
748
761
  useLegacyLights: boolean;
749
762
  renderMode: "always" | "on-demand" | "manual";
750
- }, {}, {}, {}, string, vue9.ComponentProvideOptions, false, {}, any>;
763
+ enableProvideBridge: boolean;
764
+ }, {}, {}, {}, string, vue4.ComponentProvideOptions, false, {}, any>;
751
765
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
752
766
  declare const _default: typeof __VLS_export;
753
767
  type __VLS_WithSlots<T, S> = T & {
@@ -992,7 +1006,7 @@ declare const isFog: (value: unknown) => value is Fog;
992
1006
  * }
993
1007
  * ```
994
1008
  */
995
- declare const isScene: (value: unknown) => value is Scene;
1009
+ declare const isScene: (value: unknown) => value is Scene<THREE.Object3DEventMap>;
996
1010
  /**
997
1011
  * Type guard to check if a value is a Three.js Group
998
1012
  * @param value - The value to check
@@ -1081,4 +1095,4 @@ interface TresPlugin {
1081
1095
  }
1082
1096
  declare const plugin: TresPlugin;
1083
1097
  //#endregion
1084
- 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, 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, TresRendererSetupContext, TresScene, TresVector2, TresVector3, TresVector4, UseCameraReturn, _default$1 as UseLoader, UseLoaderReturn, UseRendererManagerReturn, UseRendererOptions, VectorCoordinates, type VectorFlexibleParams, VueProps, WithMathProps, buildGraph, catalogue, 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, logError, logMessage, logWarning, normalizeColor, normalizeVectorFlexibleParam, registerTresDevtools, templateCompilerOptions, useCameraManager, useGraph, useLoader, useLoop, useRendererManager, useTres, useTresContext, useTresContextProvider, vDistanceTo, vLightHelper, vLog };
1098
+ 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, 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, TresVector2, TresVector3, TresVector4, UseCameraReturn, _default$1 as UseLoader, UseLoaderReturn, UseRendererManagerReturn, UseRendererOptions, VectorCoordinates, type VectorFlexibleParams, VueProps, WithMathProps, buildGraph, catalogue, 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, logError, logMessage, logWarning, normalizeColor, normalizeVectorFlexibleParam, registerTresDevtools, templateCompilerOptions, useCameraManager, useGraph, useLoader, useLoop, useRendererManager, useTres, useTresContext, useTresContextProvider, vDistanceTo, vLightHelper, vLog };
package/dist/tres.js CHANGED
@@ -1,11 +1,11 @@
1
1
  /**
2
2
  * name: @tresjs/core
3
- * version: v5.3.1
3
+ * version: v5.3.3
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, normalizeClass, normalizeStyle, onMounted, onUnmounted, openBlock, provide, reactive, readonly, ref, renderSlot, shallowRef, toValue, unref, useSlots, watch, watchEffect, withCtx } from "vue";
8
+ import { Fragment, computed, createBlock, createCommentVNode, createElementBlock, createRenderer, defineComponent, getCurrentInstance, h, isRef, mergeProps, nextTick, normalizeClass, normalizeStyle, onMounted, onUnmounted, openBlock, provide, reactive, readonly, ref, renderSlot, shallowRef, toValue, unref, useSlots, watch, watchEffect, withCtx } from "vue";
9
9
  import * as THREE from "three";
10
10
  import { ACESFilmicToneMapping, ArrowHelper, BackSide, BufferAttribute, BufferGeometry, Clock, Color, DirectionalLightHelper, DoubleSide, Float32BufferAttribute, HemisphereLightHelper, Layers, Line, LineBasicMaterial, Material, MathUtils, Mesh, MeshBasicMaterial, Object3D, PCFSoftShadowMap, PerspectiveCamera, PointLightHelper, 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";
@@ -14,7 +14,7 @@ import { forwardHtmlEvents, getVoidObject } from "@pmndrs/pointer-events";
14
14
  import { setupDevtoolsPlugin } from "@vue/devtools-api";
15
15
 
16
16
  //#region package.json
17
- var version = "5.3.1";
17
+ var version = "5.3.3";
18
18
 
19
19
  //#endregion
20
20
  //#region src/utils/makeMap.ts
@@ -753,6 +753,16 @@ const useCreateRafLoop = (cycleFn) => {
753
753
  };
754
754
  };
755
755
 
756
+ //#endregion
757
+ //#region src/utils/error.ts
758
+ var TresRendererError = class extends Error {
759
+ name = "TresRendererError";
760
+ constructor(message, code, options) {
761
+ super(message, options);
762
+ this.code = code;
763
+ }
764
+ };
765
+
756
766
  //#endregion
757
767
  //#region src/composables/useRenderer/useRendererManager.ts
758
768
  function useRendererManager({ scene, canvas, options, contextParts: { sizes, camera } }) {
@@ -795,11 +805,26 @@ function useRendererManager({ scene, canvas, options, contextParts: { sizes, cam
795
805
  const isModeAlways = computed(() => toValue(options.renderMode) === "always");
796
806
  const isRenderer = (value) => isObject(value) && "isRenderer" in value && Boolean(value.isRenderer);
797
807
  const readyEventHook = createEventHook();
808
+ const errorEventHook = createEventHook();
798
809
  let hasTriggeredReady = false;
799
- if (isRenderer(renderer)) {
800
- renderer.init();
801
- readyEventHook.trigger(renderer);
802
- }
810
+ const isInitialized = ref(false);
811
+ const error = ref(null);
812
+ const initializeRenderer = async () => {
813
+ try {
814
+ if (isRenderer(renderer)) await renderer.init();
815
+ isInitialized.value = true;
816
+ } catch (e) {
817
+ const rendererError = new TresRendererError(e instanceof Error ? e.message : "Unknown error", "INITIALIZATION_FAILED", { cause: e instanceof Error ? e : void 0 });
818
+ error.value = rendererError;
819
+ console.error(`[TresJS] Renderer initialization failed. This may occur if:
820
+ - WebGPU is not supported by your browser
821
+ - GPU is not available or lacks required features
822
+ - GPU drivers are outdated
823
+ Error details: ${rendererError.message}`, rendererError);
824
+ errorEventHook.trigger(rendererError);
825
+ }
826
+ };
827
+ initializeRenderer();
803
828
  const renderEventHook = createEventHook();
804
829
  const notifyFrameRendered = () => {
805
830
  frames.value = isModeAlways.value ? 1 : Math.max(0, frames.value - 1);
@@ -817,16 +842,26 @@ function useRendererManager({ scene, canvas, options, contextParts: { sizes, cam
817
842
  const loop = useCreateRafLoop(() => {
818
843
  if (frames.value) renderFunction(notifyFrameRendered);
819
844
  });
820
- readyEventHook.on(loop.start);
821
- watch([sizes.width, sizes.height], () => {
845
+ readyEventHook.on(() => {
846
+ if (isInitialized.value) loop.start();
847
+ });
848
+ watch([
849
+ sizes.width,
850
+ sizes.height,
851
+ isInitialized
852
+ ], () => {
853
+ if (!isInitialized.value) return;
822
854
  renderer.setSize(sizes.width.value, sizes.height.value);
823
855
  if (!hasTriggeredReady && renderer.domElement.width && renderer.domElement.height) {
824
- readyEventHook.trigger(renderer);
825
856
  hasTriggeredReady = true;
857
+ nextTick(() => {
858
+ readyEventHook.trigger(renderer);
859
+ });
826
860
  }
827
861
  invalidateOnDemand();
828
862
  }, { immediate: true });
829
863
  watchEffect(() => {
864
+ if (!isInitialized.value) return;
830
865
  setPixelRatio(renderer, sizes.pixelRatio.value, toValue(options.dpr));
831
866
  });
832
867
  if (toValue(options.renderMode) === "on-demand") invalidate();
@@ -846,29 +881,35 @@ function useRendererManager({ scene, canvas, options, contextParts: { sizes, cam
846
881
  };
847
882
  });
848
883
  watchEffect(() => {
884
+ if (!isInitialized.value) return;
849
885
  const value = clearColorAndAlpha.value;
850
886
  if (value.color === void 0 || value.alpha === void 0) return;
851
887
  renderer.setClearColor(value.color, value.alpha);
852
888
  });
853
889
  watchEffect(() => {
890
+ if (!isInitialized.value) return;
854
891
  const value = options.toneMapping;
855
892
  if (value) renderer.toneMapping = value;
856
893
  });
857
894
  watchEffect(() => {
895
+ if (!isInitialized.value) return;
858
896
  const value = options.toneMappingExposure;
859
897
  if (value) renderer.toneMappingExposure = value;
860
898
  });
861
899
  watchEffect(() => {
900
+ if (!isInitialized.value) return;
862
901
  const value = options.outputColorSpace;
863
902
  if (value) renderer.outputColorSpace = value;
864
903
  });
865
904
  watchEffect(() => {
905
+ if (!isInitialized.value) return;
866
906
  const value = options.shadows;
867
907
  if (value === void 0) return;
868
908
  renderer.shadowMap.enabled = value;
869
909
  forceMaterialUpdate();
870
910
  });
871
911
  watchEffect(() => {
912
+ if (!isInitialized.value) return;
872
913
  const value = options.shadowMapType;
873
914
  if (value === void 0) return;
874
915
  renderer.shadowMap.type = value;
@@ -884,10 +925,13 @@ function useRendererManager({ scene, canvas, options, contextParts: { sizes, cam
884
925
  advance,
885
926
  onReady: readyEventHook.on,
886
927
  onRender: renderEventHook.on,
928
+ onError: errorEventHook.on,
887
929
  invalidate,
888
930
  canBeInvalidated,
889
931
  mode: toValue(options.renderMode),
890
- replaceRenderFunction
932
+ replaceRenderFunction,
933
+ isInitialized,
934
+ error
891
935
  };
892
936
  }
893
937
 
@@ -1924,6 +1968,7 @@ var Context_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ define
1924
1968
  },
1925
1969
  emits: [
1926
1970
  "ready",
1971
+ "error",
1927
1972
  "pointermissed",
1928
1973
  "render",
1929
1974
  "beforeLoop",
@@ -2008,7 +2053,6 @@ var Context_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ define
2008
2053
  };
2009
2054
  const { camera, renderer } = context.value;
2010
2055
  const { registerCamera, cameras, activeCamera, deregisterCamera } = camera;
2011
- mountCustomRenderer(context.value);
2012
2056
  const addDefaultCamera = () => {
2013
2057
  const camera$1 = new PerspectiveCamera(45, window.innerWidth / window.innerHeight, .1, 1e3);
2014
2058
  camera$1.position.set(3, 3, 3);
@@ -2032,7 +2076,6 @@ var Context_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ define
2032
2076
  deregisterCamera(toValue(oldCamera));
2033
2077
  }
2034
2078
  }, { immediate: true });
2035
- if (!activeCamera.value) addDefaultCamera();
2036
2079
  renderer.onRender(() => {
2037
2080
  if (context.value) emit("render", context.value);
2038
2081
  });
@@ -2049,7 +2092,12 @@ var Context_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ define
2049
2092
  });
2050
2093
  });
2051
2094
  renderer.onReady(() => {
2095
+ mountCustomRenderer(context.value, false);
2052
2096
  emit("ready", context.value);
2097
+ if (!activeCamera.value) addDefaultCamera();
2098
+ });
2099
+ renderer.onError((error) => {
2100
+ emit("error", error);
2053
2101
  });
2054
2102
  if (import.meta.hot) import.meta.hot.on("vite:afterUpdate", () => handleHMR(context.value));
2055
2103
  onMounted(async () => {
@@ -2194,6 +2242,7 @@ var TresCanvas_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ def
2194
2242
  },
2195
2243
  emits: [
2196
2244
  "ready",
2245
+ "error",
2197
2246
  "pointermissed",
2198
2247
  "render",
2199
2248
  "beforeLoop",
@@ -2248,23 +2297,24 @@ var TresCanvas_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ def
2248
2297
  canvas: canvasRef.value
2249
2298
  }, props, {
2250
2299
  onReady: _cache[0] || (_cache[0] = ($event) => emit("ready", $event)),
2251
- onPointermissed: _cache[1] || (_cache[1] = ($event) => emit("pointermissed", $event)),
2252
- onRender: _cache[2] || (_cache[2] = ($event) => emit("render", $event)),
2253
- onBeforeLoop: _cache[3] || (_cache[3] = ($event) => emit("beforeLoop", $event)),
2254
- onLoop: _cache[4] || (_cache[4] = ($event) => emit("loop", $event)),
2255
- onClick: _cache[5] || (_cache[5] = ($event) => emit("click", $event)),
2256
- onContextmenu: _cache[6] || (_cache[6] = ($event) => emit("contextmenu", $event)),
2257
- onPointermove: _cache[7] || (_cache[7] = ($event) => emit("pointermove", $event)),
2258
- onPointerenter: _cache[8] || (_cache[8] = ($event) => emit("pointerenter", $event)),
2259
- onPointerleave: _cache[9] || (_cache[9] = ($event) => emit("pointerleave", $event)),
2260
- onPointerover: _cache[10] || (_cache[10] = ($event) => emit("pointerover", $event)),
2261
- onPointerout: _cache[11] || (_cache[11] = ($event) => emit("pointerout", $event)),
2262
- onDblclick: _cache[12] || (_cache[12] = ($event) => emit("dblclick", $event)),
2263
- onPointerdown: _cache[13] || (_cache[13] = ($event) => emit("pointerdown", $event)),
2264
- onPointerup: _cache[14] || (_cache[14] = ($event) => emit("pointerup", $event)),
2265
- onPointercancel: _cache[15] || (_cache[15] = ($event) => emit("pointercancel", $event)),
2266
- onLostpointercapture: _cache[16] || (_cache[16] = ($event) => emit("lostpointercapture", $event)),
2267
- onWheel: _cache[17] || (_cache[17] = ($event) => emit("wheel", $event))
2300
+ onError: _cache[1] || (_cache[1] = ($event) => emit("error", $event)),
2301
+ onPointermissed: _cache[2] || (_cache[2] = ($event) => emit("pointermissed", $event)),
2302
+ onRender: _cache[3] || (_cache[3] = ($event) => emit("render", $event)),
2303
+ onBeforeLoop: _cache[4] || (_cache[4] = ($event) => emit("beforeLoop", $event)),
2304
+ onLoop: _cache[5] || (_cache[5] = ($event) => emit("loop", $event)),
2305
+ onClick: _cache[6] || (_cache[6] = ($event) => emit("click", $event)),
2306
+ onContextmenu: _cache[7] || (_cache[7] = ($event) => emit("contextmenu", $event)),
2307
+ onPointermove: _cache[8] || (_cache[8] = ($event) => emit("pointermove", $event)),
2308
+ onPointerenter: _cache[9] || (_cache[9] = ($event) => emit("pointerenter", $event)),
2309
+ onPointerleave: _cache[10] || (_cache[10] = ($event) => emit("pointerleave", $event)),
2310
+ onPointerover: _cache[11] || (_cache[11] = ($event) => emit("pointerover", $event)),
2311
+ onPointerout: _cache[12] || (_cache[12] = ($event) => emit("pointerout", $event)),
2312
+ onDblclick: _cache[13] || (_cache[13] = ($event) => emit("dblclick", $event)),
2313
+ onPointerdown: _cache[14] || (_cache[14] = ($event) => emit("pointerdown", $event)),
2314
+ onPointerup: _cache[15] || (_cache[15] = ($event) => emit("pointerup", $event)),
2315
+ onPointercancel: _cache[16] || (_cache[16] = ($event) => emit("pointercancel", $event)),
2316
+ onLostpointercapture: _cache[17] || (_cache[17] = ($event) => emit("lostpointercapture", $event)),
2317
+ onWheel: _cache[18] || (_cache[18] = ($event) => emit("wheel", $event))
2268
2318
  }), {
2269
2319
  default: withCtx(() => [renderSlot(_ctx.$slots, "default")]),
2270
2320
  _: 3
@@ -2345,7 +2395,7 @@ const vDistanceTo = {
2345
2395
  };
2346
2396
 
2347
2397
  //#endregion
2348
- //#region ../../node_modules/.pnpm/three-stdlib@2.36.1_three@0.180.0/node_modules/three-stdlib/helpers/RectAreaLightHelper.js
2398
+ //#region ../../node_modules/.pnpm/three-stdlib@2.36.1_three@0.182.0/node_modules/three-stdlib/helpers/RectAreaLightHelper.js
2349
2399
  var RectAreaLightHelper = class extends Line {
2350
2400
  constructor(light, color) {
2351
2401
  const positions = [
@@ -2478,4 +2528,4 @@ const plugin = { install(app) {
2478
2528
  var src_default = plugin;
2479
2529
 
2480
2530
  //#endregion
2481
- export { DevtoolsMessenger, TresCanvas_default as TresCanvas, component_default as UseLoader, buildGraph, catalogue, 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 };
2531
+ export { DevtoolsMessenger, TresCanvas_default as TresCanvas, TresRendererError, component_default as UseLoader, buildGraph, catalogue, 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 };
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@tresjs/core",
3
3
  "type": "module",
4
- "version": "5.3.1",
4
+ "version": "5.3.3",
5
5
  "description": "Declarative ThreeJS using Vue Components",
6
6
  "author": "Alvaro Saburido <hola@alvarosaburido.dev> (https://github.com/alvarosabu/)",
7
7
  "license": "MIT",
@@ -51,7 +51,7 @@
51
51
  "radashi": "^12.6.2"
52
52
  },
53
53
  "devDependencies": {
54
- "@types/three": "^0.180.0",
54
+ "@types/three": "^0.182.0",
55
55
  "@typescript-eslint/eslint-plugin": "^8.42.0",
56
56
  "@typescript-eslint/parser": "^8.42.0",
57
57
  "@vitejs/plugin-vue": "^6.0.1",
@@ -66,7 +66,7 @@
66
66
  "rollup-plugin-analyzer": "^4.0.0",
67
67
  "rollup-plugin-copy": "^3.5.0",
68
68
  "rollup-plugin-visualizer": "^6.0.3",
69
- "three": "^0.180.0",
69
+ "three": "^0.182.0",
70
70
  "tsdown": "0.18.3",
71
71
  "typescript": "^5.8.3",
72
72
  "vite": "^7.1.9",