@tresjs/core 5.7.0 → 5.8.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.
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * name: @tresjs/core
3
- * version: v5.7.0
3
+ * version: v5.8.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/)
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * name: @tresjs/core
3
- * version: v5.7.0
3
+ * version: v5.8.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/)
package/dist/tres.d.ts CHANGED
@@ -1,11 +1,11 @@
1
1
  /**
2
2
  * name: @tresjs/core
3
- * version: v5.7.0
3
+ * version: v5.8.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 vue4 from "vue";
8
+ import * as vue15 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";
@@ -297,12 +297,14 @@ interface UseRendererOptions {
297
297
  scene: ShallowRef<TresScene>;
298
298
  canvas: MaybeRef<HTMLCanvasElement>;
299
299
  options: Reactive<RendererOptions>;
300
+ fpsLimit?: MaybeRefOrGetter<number>;
300
301
  contextParts: Pick<TresContext, 'sizes' | 'camera'>;
301
302
  }
302
303
  declare function useRendererManager({
303
304
  scene,
304
305
  canvas,
305
306
  options,
307
+ fpsLimit,
306
308
  contextParts: {
307
309
  sizes,
308
310
  camera
@@ -321,11 +323,11 @@ declare function useRendererManager({
321
323
  onRender: _vueuse_core0.EventHookOn<TresRenderer>;
322
324
  onError: _vueuse_core0.EventHookOn<TresRendererError>;
323
325
  invalidate: (amountOfFramesToInvalidate?: number) => void;
324
- canBeInvalidated: vue4.ComputedRef<boolean>;
326
+ canBeInvalidated: vue15.ComputedRef<boolean>;
325
327
  mode: "always" | "on-demand" | "manual" | undefined;
326
328
  replaceRenderFunction: (fn: RenderFunction) => void;
327
- isInitialized: vue4.Ref<boolean, boolean>;
328
- error: vue4.Ref<TresRendererError | null, TresRendererError | null>;
329
+ isInitialized: vue15.Ref<boolean, boolean>;
330
+ error: vue15.Ref<TresRendererError | null, TresRendererError | null>;
329
331
  };
330
332
  type UseRendererManagerReturn = ReturnType<typeof useRendererManager>;
331
333
  //#endregion
@@ -357,6 +359,7 @@ interface TresContext {
357
359
  declare const useTresContextProvider: (args_0: {
358
360
  scene: TresScene;
359
361
  canvas: MaybeRef<HTMLCanvasElement>;
362
+ fpsLimit?: MaybeRefOrGetter<number>;
360
363
  windowSize: MaybeRefOrGetter<boolean>;
361
364
  rendererOptions: RendererOptions;
362
365
  }) => TresContext;
@@ -512,7 +515,7 @@ declare function buildGraph(object: Object3D | TresObject): TresObjectMap;
512
515
  //#endregion
513
516
  //#region src/composables/useLoader/component.vue.d.ts
514
517
  declare const __VLS_export$2: <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<{
515
- props: vue4.PublicProps & __VLS_PrettifyLocal<{
518
+ props: vue15.PublicProps & __VLS_PrettifyLocal<{
516
519
  /**
517
520
  * The THREE.js loader to use
518
521
  */
@@ -526,8 +529,8 @@ declare const __VLS_export$2: <T extends TresObjectMap>(__VLS_props: NonNullable
526
529
  */
527
530
  manager?: LoadingManager;
528
531
  } & {
529
- onLoaded?: ((result: T) => any) | undefined;
530
532
  onError?: ((error: unknown) => any) | undefined;
533
+ onLoaded?: ((result: T) => any) | undefined;
531
534
  }> & (typeof globalThis extends {
532
535
  __VLS_PROPS_FALLBACK: infer P;
533
536
  } ? P : {});
@@ -535,20 +538,20 @@ declare const __VLS_export$2: <T extends TresObjectMap>(__VLS_props: NonNullable
535
538
  attrs: any;
536
539
  slots: {
537
540
  default?: (props: {
538
- state: vue4.UnwrapRef<T>;
541
+ state: vue15.UnwrapRef<T>;
539
542
  isLoading: boolean;
540
543
  error: unknown;
541
544
  }) => any;
542
545
  };
543
- emit: ((evt: "loaded", result: T) => void) & ((evt: "error", error: unknown) => void);
544
- }>) => vue4.VNode & {
546
+ emit: ((evt: "error", error: unknown) => void) & ((evt: "loaded", result: T) => void);
547
+ }>) => vue15.VNode & {
545
548
  __ctx?: Awaited<typeof __VLS_setup>;
546
549
  };
547
550
  declare const _default$2: typeof __VLS_export$2;
548
551
  type __VLS_PrettifyLocal<T> = (T extends any ? { [K in keyof T]: T[K] } : { [K in keyof T as K]: T[K] }) & {};
549
552
  //#endregion
550
553
  //#region src/composables/useGraph/index.d.ts
551
- declare const useGraph: (object: MaybeRef$1<TresObject | undefined>) => vue4.ComputedRef<TresObjectMap | undefined>;
554
+ declare const useGraph: (object: MaybeRef$1<TresObject | undefined>) => vue15.ComputedRef<TresObjectMap | undefined>;
552
555
  //#endregion
553
556
  //#region src/utils/createPriorityEventHook.d.ts
554
557
  type Callback<T> = Parameters<EventHookOff<T>>[0];
@@ -599,7 +602,7 @@ type LoopContext = RafLoopContext & TresPartialContext;
599
602
  declare const useLoop: () => {
600
603
  stop: () => void;
601
604
  start: () => void;
602
- isActive: Readonly<vue4.ShallowRef<boolean>>;
605
+ isActive: Readonly<vue15.ShallowRef<boolean>>;
603
606
  onBeforeRender: PriorityEventHookOn<LoopContext>;
604
607
  onRender: PriorityEventHookOn<LoopContext>;
605
608
  render: (fn: RenderFunction) => void;
@@ -675,6 +678,11 @@ interface ContextProps extends RendererOptions {
675
678
  * @default false
676
679
  */
677
680
  windowSize?: boolean;
681
+ /**
682
+ * The maximum number of frames per second to render
683
+ * @default undefined
684
+ */
685
+ fpsLimit?: number;
678
686
  /**
679
687
  * Whether to enable the provide/inject bridge between Vue and TresJS
680
688
  * When true, Vue's provide/inject will work across the TresJS boundary
@@ -701,10 +709,10 @@ type __VLS_Props = ContextProps & {
701
709
  type __VLS_Slots$1 = {
702
710
  default: () => any;
703
711
  };
704
- declare const __VLS_base$1: vue4.DefineComponent<__VLS_Props, {
705
- context: vue4.ShallowRef<TresContext, TresContext>;
712
+ declare const __VLS_base$1: vue15.DefineComponent<__VLS_Props, {
713
+ context: vue15.ShallowRef<TresContext, TresContext>;
706
714
  dispose: () => void;
707
- }, {}, {}, {}, vue4.ComponentOptionsMixin, vue4.ComponentOptionsMixin, {
715
+ }, {}, {}, {}, vue15.ComponentOptionsMixin, vue15.ComponentOptionsMixin, {
708
716
  click: (event: TresPointerEvent) => any;
709
717
  contextmenu: (event: TresPointerEvent) => any;
710
718
  pointermove: (event: TresPointerEvent) => any;
@@ -718,13 +726,13 @@ declare const __VLS_base$1: vue4.DefineComponent<__VLS_Props, {
718
726
  pointercancel: (event: TresPointerEvent) => any;
719
727
  lostpointercapture: (event: TresPointerEvent) => any;
720
728
  wheel: (event: TresPointerEvent) => any;
721
- error: (error: Error) => any;
722
729
  ready: (context: TresContext) => any;
730
+ error: (error: Error) => any;
723
731
  pointermissed: (event: TresPointerEvent) => any;
724
732
  render: (context: TresContext) => any;
725
733
  beforeLoop: (context: TresContextWithClock) => any;
726
734
  loop: (context: TresContextWithClock) => any;
727
- }, string, vue4.PublicProps, Readonly<__VLS_Props> & Readonly<{
735
+ }, string, vue15.PublicProps, Readonly<__VLS_Props> & Readonly<{
728
736
  onClick?: ((event: TresPointerEvent) => any) | undefined;
729
737
  onContextmenu?: ((event: TresPointerEvent) => any) | undefined;
730
738
  onPointermove?: ((event: TresPointerEvent) => any) | undefined;
@@ -738,13 +746,13 @@ declare const __VLS_base$1: vue4.DefineComponent<__VLS_Props, {
738
746
  onPointercancel?: ((event: TresPointerEvent) => any) | undefined;
739
747
  onLostpointercapture?: ((event: TresPointerEvent) => any) | undefined;
740
748
  onWheel?: ((event: TresPointerEvent) => any) | undefined;
741
- onError?: ((error: Error) => any) | undefined;
742
749
  onReady?: ((context: TresContext) => any) | undefined;
750
+ onError?: ((error: Error) => any) | undefined;
743
751
  onPointermissed?: ((event: TresPointerEvent) => any) | undefined;
744
752
  onRender?: ((context: TresContext) => any) | undefined;
745
753
  onBeforeLoop?: ((context: TresContextWithClock) => any) | undefined;
746
754
  onLoop?: ((context: TresContextWithClock) => any) | undefined;
747
- }>, {}, {}, {}, {}, string, vue4.ComponentProvideOptions, false, {}, any>;
755
+ }>, {}, {}, {}, {}, string, vue15.ComponentProvideOptions, false, {}, any>;
748
756
  declare const __VLS_export$1: __VLS_WithSlots$1<typeof __VLS_base$1, __VLS_Slots$1>;
749
757
  declare const _default$1: typeof __VLS_export$1;
750
758
  type __VLS_WithSlots$1<T, S> = T & {
@@ -763,7 +771,7 @@ interface TresCanvasInstance {
763
771
  type __VLS_Slots = {
764
772
  default: () => any;
765
773
  };
766
- declare const __VLS_base: vue4.DefineComponent<ContextProps, TresCanvasInstance, {}, {}, {}, vue4.ComponentOptionsMixin, vue4.ComponentOptionsMixin, {
774
+ declare const __VLS_base: vue15.DefineComponent<ContextProps, TresCanvasInstance, {}, {}, {}, vue15.ComponentOptionsMixin, vue15.ComponentOptionsMixin, {
767
775
  click: (event: TresPointerEvent) => any;
768
776
  contextmenu: (event: TresPointerEvent) => any;
769
777
  pointermove: (event: TresPointerEvent) => any;
@@ -777,13 +785,13 @@ declare const __VLS_base: vue4.DefineComponent<ContextProps, TresCanvasInstance,
777
785
  pointercancel: (event: TresPointerEvent) => any;
778
786
  lostpointercapture: (event: TresPointerEvent) => any;
779
787
  wheel: (event: TresPointerEvent) => any;
780
- error: (error: Error) => any;
781
788
  ready: (context: TresContext) => any;
789
+ error: (error: Error) => any;
782
790
  pointermissed: (event: TresPointerEvent) => any;
783
791
  render: (context: TresContext) => any;
784
792
  beforeLoop: (context: TresContextWithClock) => any;
785
793
  loop: (context: TresContextWithClock) => any;
786
- }, string, vue4.PublicProps, Readonly<ContextProps> & Readonly<{
794
+ }, string, vue15.PublicProps, Readonly<ContextProps> & Readonly<{
787
795
  onClick?: ((event: TresPointerEvent) => any) | undefined;
788
796
  onContextmenu?: ((event: TresPointerEvent) => any) | undefined;
789
797
  onPointermove?: ((event: TresPointerEvent) => any) | undefined;
@@ -797,14 +805,15 @@ declare const __VLS_base: vue4.DefineComponent<ContextProps, TresCanvasInstance,
797
805
  onPointercancel?: ((event: TresPointerEvent) => any) | undefined;
798
806
  onLostpointercapture?: ((event: TresPointerEvent) => any) | undefined;
799
807
  onWheel?: ((event: TresPointerEvent) => any) | undefined;
800
- onError?: ((error: Error) => any) | undefined;
801
808
  onReady?: ((context: TresContext) => any) | undefined;
809
+ onError?: ((error: Error) => any) | undefined;
802
810
  onPointermissed?: ((event: TresPointerEvent) => any) | undefined;
803
811
  onRender?: ((context: TresContext) => any) | undefined;
804
812
  onBeforeLoop?: ((context: TresContextWithClock) => any) | undefined;
805
813
  onLoop?: ((context: TresContextWithClock) => any) | undefined;
806
814
  }>, {
807
815
  windowSize: boolean;
816
+ enableProvideBridge: boolean;
808
817
  antialias: boolean;
809
818
  stencil: boolean;
810
819
  depth: boolean;
@@ -819,8 +828,7 @@ declare const __VLS_base: vue4.DefineComponent<ContextProps, TresCanvasInstance,
819
828
  shadowMapType: THREE.ShadowMapType;
820
829
  useLegacyLights: boolean;
821
830
  renderMode: "always" | "on-demand" | "manual";
822
- enableProvideBridge: boolean;
823
- }, {}, {}, {}, string, vue4.ComponentProvideOptions, false, {}, any>;
831
+ }, {}, {}, {}, string, vue15.ComponentProvideOptions, false, {}, any>;
824
832
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
825
833
  declare const _default: typeof __VLS_export;
826
834
  type __VLS_WithSlots<T, S> = T & {
package/dist/tres.js CHANGED
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * name: @tresjs/core
3
- * version: v5.7.0
3
+ * version: v5.8.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/)
@@ -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.7.0";
17
+ var version = "5.8.0";
18
18
 
19
19
  //#endregion
20
20
  //#region src/utils/makeMap.ts
@@ -763,7 +763,7 @@ function createTimer() {
763
763
  /**
764
764
  * @param cycleFn the function that is called before the after event hook is triggered and after the before event hook is triggered.
765
765
  */
766
- const useCreateRafLoop = (cycleFn) => {
766
+ const useCreateRafLoop = (cycleFn, { fpsLimit } = {}) => {
767
767
  const timer = createTimer();
768
768
  const eventHooks = {
769
769
  before: createEventHook(),
@@ -778,7 +778,10 @@ const useCreateRafLoop = (cycleFn) => {
778
778
  eventHooks.before.trigger(context);
779
779
  cycleFn();
780
780
  eventHooks.after.trigger(context);
781
- }, { immediate: false });
781
+ }, {
782
+ immediate: false,
783
+ fpsLimit
784
+ });
782
785
  const start = () => {
783
786
  timer.start();
784
787
  resume();
@@ -808,7 +811,7 @@ var TresRendererError = class extends Error {
808
811
 
809
812
  //#endregion
810
813
  //#region src/composables/useRenderer/useRendererManager.ts
811
- function useRendererManager({ scene, canvas, options, contextParts: { sizes, camera } }) {
814
+ function useRendererManager({ scene, canvas, options, fpsLimit, contextParts: { sizes, camera } }) {
812
815
  const getRenderer = () => {
813
816
  if (isFunction(options.renderer)) return options.renderer({
814
817
  sizes,
@@ -883,7 +886,7 @@ Error details: ${rendererError.message}`, rendererError);
883
886
  };
884
887
  const loop = useCreateRafLoop(() => {
885
888
  if (frames.value) renderFunction(notifyFrameRendered);
886
- });
889
+ }, { fpsLimit });
887
890
  readyEventHook.on(() => {
888
891
  if (isInitialized.value) loop.start();
889
892
  });
@@ -1009,7 +1012,7 @@ function useEventManager({ canvas, contextParts: { scene, camera, renderer } })
1009
1012
  //#endregion
1010
1013
  //#region src/composables/useTresContextProvider/index.ts
1011
1014
  const INJECTION_KEY = "useTres";
1012
- const [useTresContextProvider, _useTresContext] = createInjectionState(({ scene, canvas, windowSize, rendererOptions }) => {
1015
+ const [useTresContextProvider, _useTresContext] = createInjectionState(({ scene, canvas, fpsLimit, windowSize, rendererOptions }) => {
1013
1016
  const localScene = shallowRef(scene);
1014
1017
  const sizes = useSizes(windowSize, canvas);
1015
1018
  const camera = useCameraManager({ sizes });
@@ -1017,6 +1020,7 @@ const [useTresContextProvider, _useTresContext] = createInjectionState(({ scene,
1017
1020
  scene: localScene,
1018
1021
  canvas,
1019
1022
  options: rendererOptions,
1023
+ fpsLimit,
1020
1024
  contextParts: {
1021
1025
  sizes,
1022
1026
  camera
@@ -1934,6 +1938,10 @@ var Context_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ define
1934
1938
  type: Boolean,
1935
1939
  required: false
1936
1940
  },
1941
+ fpsLimit: {
1942
+ type: Number,
1943
+ required: false
1944
+ },
1937
1945
  enableProvideBridge: {
1938
1946
  type: Boolean,
1939
1947
  required: false
@@ -2109,6 +2117,7 @@ var Context_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ define
2109
2117
  const context = shallowRef(useTresContextProvider({
2110
2118
  scene: scene.value,
2111
2119
  canvas: props.canvas,
2120
+ fpsLimit: () => props.fpsLimit ?? Infinity,
2112
2121
  windowSize: props.windowSize ?? false,
2113
2122
  rendererOptions: props
2114
2123
  }));
@@ -2202,6 +2211,10 @@ var TresCanvas_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ def
2202
2211
  required: false,
2203
2212
  default: void 0
2204
2213
  },
2214
+ fpsLimit: {
2215
+ type: Number,
2216
+ required: false
2217
+ },
2205
2218
  enableProvideBridge: {
2206
2219
  type: Boolean,
2207
2220
  required: false,
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@tresjs/core",
3
3
  "type": "module",
4
- "version": "5.7.0",
4
+ "version": "5.8.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",