@tresjs/core 5.9.0 → 5.9.2

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/tres.js CHANGED
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * name: @tresjs/core
3
- * version: v5.9.0
3
+ * version: v5.9.2
4
4
  * (c) 2026
5
5
  * description: Declarative ThreeJS using Vue Components
6
6
  * author: Alvaro Saburido <hola@alvarosaburido.dev> (https://github.com/alvarosabu/)
@@ -8,15 +8,13 @@
8
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
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
- import { createEventHook, createInjectionState, promiseTimeout, refDebounced, tryOnScopeDispose, unrefElement, useAsyncState, useDevicePixelRatio, useElementSize, useFps, useMemory, useRafFn, useTimeout, useWindowSize, whenever } from "@vueuse/core";
11
+ import { createEventHook, createInjectionState, promiseTimeout, refDebounced, tryOnScopeDispose, unrefElement, useAsyncState, useDevicePixelRatio, useElementSize, useFps, useIntervalFn, 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
15
  import { RectAreaLightHelper } from "three/examples/jsm/helpers/RectAreaLightHelper.js";
16
-
17
16
  //#region package.json
18
- var version = "5.9.0";
19
-
17
+ var version = "5.9.2";
20
18
  //#endregion
21
19
  //#region src/utils/makeMap.ts
22
20
  /**
@@ -32,16 +30,10 @@ function makeMap(str) {
32
30
  for (const key of str.split(",")) map[key] = 1;
33
31
  return (val) => val in map;
34
32
  }
35
-
36
- //#endregion
37
- //#region src/utils/is/dom.ts
38
- const HTML_TAGS = "html,body,base,head,link,meta,style,title,address,article,aside,footer,header,hgroup,h1,h2,h3,h4,h5,h6,nav,section,div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,ruby,s,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,output,progress,select,textarea,details,dialog,menu,summary,template,blockquote,iframe,tfoot";
39
- const isHTMLTag = /* @__PURE__ */ makeMap(HTML_TAGS);
40
-
33
+ const isHTMLTag = /* #__PURE__ */ makeMap("html,body,base,head,link,meta,style,title,address,article,aside,footer,header,hgroup,h1,h2,h3,h4,h5,h6,nav,section,div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,ruby,s,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,output,progress,select,textarea,details,dialog,menu,summary,template,blockquote,iframe,tfoot");
41
34
  //#endregion
42
35
  //#region src/utils/is/util.ts
43
36
  const createTypeGuard = (property) => (value) => isObject(value) && property in value && !!value[property];
44
-
45
37
  //#endregion
46
38
  //#region src/utils/is/three.ts
47
39
  /**
@@ -205,7 +197,6 @@ const isScene = createTypeGuard("isScene");
205
197
  * ```
206
198
  */
207
199
  const isGroup = createTypeGuard("isGroup");
208
-
209
200
  //#endregion
210
201
  //#region src/utils/is/tres.ts
211
202
  const isVectorLike = (value) => value !== null && typeof value === "object" && "set" in value && typeof value.set === "function";
@@ -291,7 +282,6 @@ const isWebGPURenderer = createTypeGuard("isRenderer");
291
282
  * @see {@link isWebGPURenderer}
292
283
  */
293
284
  const isWebGLRenderer = createTypeGuard("isWebGLRenderer");
294
-
295
285
  //#endregion
296
286
  //#region src/utils/array.ts
297
287
  /**
@@ -308,7 +298,6 @@ const filterInPlace = (array, callbackFn) => {
308
298
  array.length = i;
309
299
  return array;
310
300
  };
311
-
312
301
  //#endregion
313
302
  //#region src/utils/logger.ts
314
303
  /**
@@ -317,7 +306,7 @@ const filterInPlace = (array, callbackFn) => {
317
306
  */
318
307
  function resolveRuntimeMode() {
319
308
  try {
320
- const modeFromImportMeta = import.meta?.env?.MODE;
309
+ const modeFromImportMeta = import.meta.env?.MODE;
321
310
  if (modeFromImportMeta) return modeFromImportMeta;
322
311
  } catch {}
323
312
  return typeof process !== "undefined" && process.env && process.env.NODE_ENV ? process.env.NODE_ENV : "production";
@@ -350,11 +339,10 @@ function logWarning(...args) {
350
339
  function logMessage(name, value) {
351
340
  if (!isProd) console.log(`${logPrefix} - ${name}:`, value);
352
341
  }
353
-
354
342
  //#endregion
355
343
  //#region src/utils/index.ts
356
344
  function disposeMaterial(material) {
357
- const hasMap = (material$1) => "map" in material$1 && !!material$1.map;
345
+ const hasMap = (material) => "map" in material && !!material.map;
358
346
  if (hasMap(material)) material.map.dispose();
359
347
  material.dispose();
360
348
  }
@@ -396,14 +384,14 @@ function attach(parent, child, type) {
396
384
  const INDEX_REGEX = /-\d+$/;
397
385
  if (isString(type)) {
398
386
  if (INDEX_REGEX.test(type)) {
399
- const { target: target$1, key: key$1 } = resolve(parent, type.replace(INDEX_REGEX, ""));
400
- if (!Array.isArray(target$1[key$1])) {
401
- const previousAttach = target$1[key$1];
387
+ const { target, key } = resolve(parent, type.replace(INDEX_REGEX, ""));
388
+ if (!Array.isArray(target[key])) {
389
+ const previousAttach = target[key];
402
390
  const augmentedArray = [];
403
391
  augmentedArray.__tresDetach = () => {
404
- if (augmentedArray.every((v) => isUndefined(v))) target$1[key$1] = previousAttach;
392
+ if (augmentedArray.every((v) => isUndefined(v))) target[key] = previousAttach;
405
393
  };
406
- target$1[key$1] = augmentedArray;
394
+ target[key] = augmentedArray;
407
395
  }
408
396
  }
409
397
  const { target, key } = resolve(parent, type);
@@ -489,7 +477,6 @@ function doRemoveDeregister(node, context) {
489
477
  if (isTresCamera(node)) context.camera.deregisterCamera(node);
490
478
  invalidateInstance(node);
491
479
  }
492
-
493
480
  //#endregion
494
481
  //#region src/composables/useLoader/index.ts
495
482
  /**
@@ -499,8 +486,8 @@ function doRemoveDeregister(node, context) {
499
486
  * @param options - Optional configuration for the loader
500
487
  * @returns UseAsyncState composable with the loaded model
501
488
  */
502
- function useLoader(Loader$1, path, options) {
503
- const proto = new Loader$1(options?.manager);
489
+ function useLoader(Loader, path, options) {
490
+ const proto = new Loader(options?.manager);
504
491
  const progress = reactive({
505
492
  loaded: 0,
506
493
  total: 0,
@@ -508,10 +495,10 @@ function useLoader(Loader$1, path, options) {
508
495
  });
509
496
  if (options?.extensions) options.extensions(proto);
510
497
  const initialPath = toValue(path);
511
- const result = useAsyncState((path$1) => new Promise((resolve$1, reject) => {
512
- const assetPath = path$1 || initialPath || "";
513
- proto.load(assetPath, (result$1) => {
514
- resolve$1(result$1);
498
+ const result = useAsyncState((path) => new Promise((resolve, reject) => {
499
+ const assetPath = path || initialPath || "";
500
+ proto.load(assetPath, (result) => {
501
+ resolve(result);
515
502
  }, (event) => {
516
503
  progress.loaded = event.loaded;
517
504
  progress.total = event.total;
@@ -537,16 +524,15 @@ function useLoader(Loader$1, path, options) {
537
524
  });
538
525
  return {
539
526
  ...result,
540
- load: (path$1) => {
541
- result.execute(0, path$1);
527
+ load: (path) => {
528
+ result.execute(0, path);
542
529
  },
543
530
  progress
544
531
  };
545
532
  }
546
-
547
533
  //#endregion
548
- //#region src/composables/useLoader/component.vue?vue&type=script&setup=true&lang.ts
549
- var component_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
534
+ //#region src/composables/useLoader/component.vue
535
+ var component_default = /* @__PURE__ */ defineComponent({
550
536
  __name: "component",
551
537
  props: {
552
538
  loader: {
@@ -589,11 +575,6 @@ var component_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defi
589
575
  };
590
576
  }
591
577
  });
592
-
593
- //#endregion
594
- //#region src/composables/useLoader/component.vue
595
- var component_default = component_vue_vue_type_script_setup_true_lang_default;
596
-
597
578
  //#endregion
598
579
  //#region src/composables/useCamera/index.ts
599
580
  /**
@@ -610,9 +591,10 @@ const useCameraManager = ({ sizes }) => {
610
591
  * @param cameraOrUuid - The camera or its UUID to set as active
611
592
  */
612
593
  const setActiveCamera = (cameraOrUuid) => {
613
- const camera = isCamera(cameraOrUuid) ? cameraOrUuid : cameras.value.find((camera$1) => camera$1.uuid === cameraOrUuid);
594
+ const camera = isCamera(cameraOrUuid) ? cameraOrUuid : cameras.value.find((camera) => camera.uuid === cameraOrUuid);
614
595
  if (!camera) return;
615
- cameras.value = [camera, ...cameras.value.filter(({ uuid }) => uuid !== camera.uuid)];
596
+ const otherCameras = cameras.value.filter(({ uuid }) => uuid !== camera.uuid);
597
+ cameras.value = [camera, ...otherCameras];
616
598
  };
617
599
  /**
618
600
  * Register a camera
@@ -651,7 +633,6 @@ const useCameraManager = ({ sizes }) => {
651
633
  setActiveCamera
652
634
  };
653
635
  };
654
-
655
636
  //#endregion
656
637
  //#region src/utils/graph.ts
657
638
  function buildGraph(object) {
@@ -671,7 +652,6 @@ function buildGraph(object) {
671
652
  });
672
653
  return data;
673
654
  }
674
-
675
655
  //#endregion
676
656
  //#region src/composables/useGraph/index.ts
677
657
  const useGraph = (object) => {
@@ -681,7 +661,6 @@ const useGraph = (object) => {
681
661
  return buildGraph(obj);
682
662
  });
683
663
  };
684
-
685
664
  //#endregion
686
665
  //#region src/utils/createPriorityEventHook.ts
687
666
  function createPriorityEventHook() {
@@ -732,12 +711,10 @@ function createPriorityEventHook() {
732
711
  }
733
712
  };
734
713
  }
735
-
736
714
  //#endregion
737
715
  //#region src/core/catalogue.ts
738
716
  const catalogue = ref({});
739
717
  const extend = (objects) => Object.assign(catalogue.value, objects);
740
-
741
718
  //#endregion
742
719
  //#region src/composables/useRenderer/pixelRatio.ts
743
720
  const setPixelRatio = (renderer, systemDpr, userDpr) => {
@@ -750,11 +727,9 @@ const setPixelRatio = (renderer, systemDpr, userDpr) => {
750
727
  else newDpr = systemDpr;
751
728
  if (newDpr !== renderer.getPixelRatio?.()) renderer.setPixelRatio(newDpr);
752
729
  };
753
-
754
730
  //#endregion
755
731
  //#region src/core/revision.ts
756
732
  const revision = Number.parseInt(REVISION.replace("dev", ""));
757
-
758
733
  //#endregion
759
734
  //#region src/utils/createTimer.ts
760
735
  /**
@@ -792,7 +767,6 @@ function createTimer() {
792
767
  };
793
768
  }
794
769
  }
795
-
796
770
  //#endregion
797
771
  //#region src/composables/useCreateRafLoop/index.ts
798
772
  /**
@@ -833,17 +807,16 @@ const useCreateRafLoop = (cycleFn, { fpsLimit } = {}) => {
833
807
  onLoop: eventHooks.after.on
834
808
  };
835
809
  };
836
-
837
810
  //#endregion
838
811
  //#region src/utils/error.ts
839
812
  var TresRendererError = class extends Error {
813
+ code;
840
814
  name = "TresRendererError";
841
815
  constructor(message, code, options) {
842
816
  super(message, options);
843
817
  this.code = code;
844
818
  }
845
819
  };
846
-
847
820
  //#endregion
848
821
  //#region src/composables/useRenderer/useRendererManager.ts
849
822
  function useRendererManager({ scene, canvas, options, fpsLimit, contextParts: { sizes, camera } }) {
@@ -1013,7 +986,6 @@ Error details: ${rendererError.message}`, rendererError);
1013
986
  error
1014
987
  };
1015
988
  }
1016
-
1017
989
  //#endregion
1018
990
  //#region src/composables/useSizes/index.ts
1019
991
  function useSizes(windowSize, canvas, debounceMs = 10) {
@@ -1028,7 +1000,6 @@ function useSizes(windowSize, canvas, debounceMs = 10) {
1028
1000
  aspectRatio: computed(() => debouncedReactiveWidth.value / debouncedReactiveHeight.value)
1029
1001
  };
1030
1002
  }
1031
-
1032
1003
  //#endregion
1033
1004
  //#region src/composables/useEventManager/index.ts
1034
1005
  function useEventManager({ canvas, contextParts: { scene, camera, renderer } }) {
@@ -1041,7 +1012,6 @@ function useEventManager({ canvas, contextParts: { scene, camera, renderer } })
1041
1012
  voidObject.addEventListener("click", pointerMissedEventHook.trigger);
1042
1013
  return { onPointerMissed: pointerMissedEventHook.on };
1043
1014
  }
1044
-
1045
1015
  //#endregion
1046
1016
  //#region src/composables/useTresContextProvider/index.ts
1047
1017
  const INJECTION_KEY = "useTres";
@@ -1089,25 +1059,23 @@ const useTresContext = () => {
1089
1059
  if (!ctx) throw new Error("useTresContext must be used together with useTresContextProvider.\n You probably tried to use it above or on the same level as a TresCanvas component.\n It should be used in child components of a TresCanvas instance.");
1090
1060
  return ctx;
1091
1061
  };
1092
-
1093
1062
  //#endregion
1094
1063
  //#region src/composables/useTres/index.ts
1095
1064
  function useTres() {
1096
- const { scene, renderer, camera, sizes, controls, extend: extend$1, events, isWebGPU } = useTresContext();
1065
+ const { scene, renderer, camera, sizes, controls, extend, events, isWebGPU } = useTresContext();
1097
1066
  return {
1098
1067
  scene,
1099
1068
  renderer: renderer.instance,
1100
1069
  camera: camera.activeCamera,
1101
1070
  sizes,
1102
1071
  controls,
1103
- extend: extend$1,
1072
+ extend,
1104
1073
  events,
1105
1074
  isWebGPU,
1106
1075
  invalidate: renderer.invalidate,
1107
1076
  advance: renderer.advance
1108
1077
  };
1109
1078
  }
1110
-
1111
1079
  //#endregion
1112
1080
  //#region src/composables/useLoop/index.ts
1113
1081
  /**
@@ -1140,7 +1108,6 @@ const useLoop = () => {
1140
1108
  render
1141
1109
  };
1142
1110
  };
1143
-
1144
1111
  //#endregion
1145
1112
  //#region src/utils/primitive/createRetargetingProxy.ts
1146
1113
  function createRetargetingProxy(target, getters = {}, setters = {}) {
@@ -1165,7 +1132,6 @@ function createRetargetingProxy(target, getters = {}, setters = {}) {
1165
1132
  });
1166
1133
  return proxy;
1167
1134
  }
1168
-
1169
1135
  //#endregion
1170
1136
  //#region src/utils/pointerEvents.ts
1171
1137
  const supportedPointerEvents = [
@@ -1199,7 +1165,6 @@ const pointerEventsMapVueToThree = {
1199
1165
  onWheel: "wheel"
1200
1166
  };
1201
1167
  const isSupportedPointerEvent = (event) => supportedPointerEvents.includes(event);
1202
-
1203
1168
  //#endregion
1204
1169
  //#region src/core/nodeOps.ts
1205
1170
  const textNodeSymbol = Symbol("tresTextNode");
@@ -1269,12 +1234,12 @@ const nodeOps = ({ context, options = { primitivePrefix: "" } }) => {
1269
1234
  if (!child) return;
1270
1235
  parent = parent || scene;
1271
1236
  if (isTextNode(child) || isCommentNode(child)) {
1272
- const parentInstance$1 = parent.__tres ? parent : prepareTresInstance(parent, {}, context);
1273
- child.__tres.parent = parentInstance$1;
1274
- if (parentInstance$1.__tres.objects) {
1275
- const insertIndex = anchor ? parentInstance$1.__tres.objects.findIndex((obj) => obj === anchor) : -1;
1276
- if (insertIndex >= 0) parentInstance$1.__tres.objects.splice(insertIndex, 0, child);
1277
- else parentInstance$1.__tres.objects.push(child);
1237
+ const parentInstance = parent.__tres ? parent : prepareTresInstance(parent, {}, context);
1238
+ child.__tres.parent = parentInstance;
1239
+ if (parentInstance.__tres.objects) {
1240
+ const insertIndex = anchor ? parentInstance.__tres.objects.findIndex((obj) => obj === anchor) : -1;
1241
+ if (insertIndex >= 0) parentInstance.__tres.objects.splice(insertIndex, 0, child);
1242
+ else parentInstance.__tres.objects.push(child);
1278
1243
  }
1279
1244
  return;
1280
1245
  }
@@ -1309,8 +1274,10 @@ const nodeOps = ({ context, options = { primitivePrefix: "" } }) => {
1309
1274
  }
1310
1275
  dispose = isUndefined(dispose) ? "default" : dispose;
1311
1276
  const userDispose = node.__tres?.dispose;
1312
- if (!isUndefined(userDispose)) if (userDispose === null) dispose = false;
1313
- else dispose = userDispose;
1277
+ if (!isUndefined(userDispose)) {
1278
+ if (userDispose === null) dispose = false;
1279
+ else dispose = userDispose;
1280
+ }
1314
1281
  const isPrimitive = node.__tres?.primitive;
1315
1282
  const shouldDispose = dispose === "default" ? !isPrimitive : !!dispose;
1316
1283
  if (node.__tres && "objects" in node.__tres) [...node.__tres.objects].forEach((obj) => remove(obj, dispose));
@@ -1355,12 +1322,12 @@ const nodeOps = ({ context, options = { primitivePrefix: "" } }) => {
1355
1322
  if (instanceName && prevArgs.length && !isEqual(prevArgs, args)) {
1356
1323
  const newInstance = new catalogue.value[instanceName](...nextValue);
1357
1324
  const descriptors = Object.getOwnPropertyDescriptors(newInstance);
1358
- Object.entries(descriptors).forEach(([key$1, descriptor]) => {
1325
+ Object.entries(descriptors).forEach(([key, descriptor]) => {
1359
1326
  if (!descriptor.writable && !descriptor.set) return;
1360
- if (key$1 in prevNode) try {
1361
- prevNode[key$1] = newInstance[key$1];
1327
+ if (key in prevNode) try {
1328
+ prevNode[key] = newInstance[key];
1362
1329
  } catch (e) {
1363
- console.warn(`Could not set property ${key$1} on ${instanceName}:`, e);
1330
+ console.warn(`Could not set property ${key} on ${instanceName}:`, e);
1364
1331
  }
1365
1332
  });
1366
1333
  root = prevNode;
@@ -1387,19 +1354,23 @@ const nodeOps = ({ context, options = { primitivePrefix: "" } }) => {
1387
1354
  let value = nextValue;
1388
1355
  if (value === "") value = true;
1389
1356
  if (isFunction(target)) {
1390
- if (!isSupportedPointerEvent(prop)) if (Array.isArray(value)) node[finalKey](...value);
1391
- else node[finalKey](value);
1357
+ if (!isSupportedPointerEvent(prop)) {
1358
+ if (Array.isArray(value)) node[finalKey](...value);
1359
+ else node[finalKey](value);
1360
+ }
1392
1361
  if (finalKey.startsWith("on") && isFunction(value)) root[finalKey] = value;
1393
1362
  return;
1394
1363
  }
1395
1364
  if (isLayers(target) && isLayers(value)) target.mask = value.mask;
1396
1365
  else if (isColor(target) && isColorRepresentation(value)) target.set(value);
1397
1366
  else if (isCopyable(target) && isClassInstance(value) && target.constructor === value.constructor) target.copy(value);
1398
- else if (isVectorLike(target) && Array.isArray(value)) if ("fromArray" in target && typeof target.fromArray === "function") target.fromArray(value);
1399
- else target.set(...value);
1400
- else if (isVectorLike(target) && typeof value === "number") if ("setScalar" in target && typeof target.setScalar === "function") target.setScalar(value);
1401
- else target.set(value);
1402
- else root[finalKey] = value;
1367
+ else if (isVectorLike(target) && Array.isArray(value)) {
1368
+ if ("fromArray" in target && typeof target.fromArray === "function") target.fromArray(value);
1369
+ else target.set(...value);
1370
+ } else if (isVectorLike(target) && typeof value === "number") {
1371
+ if ("setScalar" in target && typeof target.setScalar === "function") target.setScalar(value);
1372
+ else target.set(value);
1373
+ } else root[finalKey] = value;
1403
1374
  if (isTresCamera(node)) node.updateProjectionMatrix();
1404
1375
  invalidateInstance(node);
1405
1376
  }
@@ -1431,7 +1402,6 @@ const nodeOps = ({ context, options = { primitivePrefix: "" } }) => {
1431
1402
  insertStaticContent: noop
1432
1403
  };
1433
1404
  };
1434
-
1435
1405
  //#endregion
1436
1406
  //#region src/core/roots.ts
1437
1407
  const _roots = /* @__PURE__ */ new Map();
@@ -1440,7 +1410,6 @@ const setRoot = (canvas, root) => {
1440
1410
  _roots.set(canvas, root);
1441
1411
  };
1442
1412
  const deleteRoot = (canvas) => _roots.delete(canvas);
1443
-
1444
1413
  //#endregion
1445
1414
  //#region src/devtools/DevtoolsMessenger.ts
1446
1415
  const QUEUEABLE_MESSAGE_TYPES = ["asset-load"];
@@ -1512,7 +1481,6 @@ var DevtoolsMessenger = class {
1512
1481
  this.messageQueue = [];
1513
1482
  }
1514
1483
  };
1515
-
1516
1484
  //#endregion
1517
1485
  //#region src/devtools/utils.ts
1518
1486
  /**
@@ -1531,7 +1499,6 @@ function toastMessage(message, type) {
1531
1499
  function __VUE_DEVTOOLS_TOAST__(tresMessage, type) {
1532
1500
  throw new Error(tresMessage + type);
1533
1501
  }
1534
-
1535
1502
  //#endregion
1536
1503
  //#region src/utils/perf.ts
1537
1504
  function calculateMemoryUsage(object) {
@@ -1556,7 +1523,6 @@ function boundedPush(arr, value, max) {
1556
1523
  function bytesToKB(bytes) {
1557
1524
  return (bytes / 1024).toFixed(2);
1558
1525
  }
1559
-
1560
1526
  //#endregion
1561
1527
  //#region src/devtools/setupDevtools.ts
1562
1528
  function setupTresDevtools(ctx) {
@@ -1576,7 +1542,7 @@ function setupTresDevtools(ctx) {
1576
1542
  };
1577
1543
  const updateInterval = 100;
1578
1544
  const fps = useFps({ every: updateInterval });
1579
- const { isSupported, memory } = useMemory({ interval: updateInterval });
1545
+ const { isSupported, memory } = useMemory({ scheduler: (cb) => useIntervalFn(cb, updateInterval) });
1580
1546
  const maxFrames = 160;
1581
1547
  let lastUpdateTime = performance.now();
1582
1548
  let accumulatedTime = 0;
@@ -1607,7 +1573,6 @@ function setupTresDevtools(ctx) {
1607
1573
  pause();
1608
1574
  });
1609
1575
  }
1610
-
1611
1576
  //#endregion
1612
1577
  //#region src/utils/three.ts
1613
1578
  /**
@@ -1624,7 +1589,6 @@ const getObjectByUuid = (node, uuid) => {
1624
1589
  if (found) return found;
1625
1590
  }
1626
1591
  };
1627
-
1628
1592
  //#endregion
1629
1593
  //#region src/devtools/highlight.ts
1630
1594
  var HightlightMesh = class extends THREE.Mesh {
@@ -1640,7 +1604,6 @@ var HightlightMesh = class extends THREE.Mesh {
1640
1604
  this.scale.set(scaleFactor, scaleFactor, scaleFactor);
1641
1605
  }
1642
1606
  };
1643
-
1644
1607
  //#endregion
1645
1608
  //#region src/devtools/inspectorHandlers.ts
1646
1609
  /**
@@ -1754,14 +1717,16 @@ function buildContextGraph(object, node, visited = /* @__PURE__ */ new WeakSet()
1754
1717
  });
1755
1718
  if (value.value && typeof value.value === "object") buildContextGraph(value.value, childNode, visited, depth + 1, maxDepth, uuid, chainedKey);
1756
1719
  else childNode.label = `${key}: ${JSON.stringify(value.value)}`;
1757
- } else if (value && typeof value === "object" && !Array.isArray(value)) if (Object.keys(value).length > 0) if (visited.has(value)) childNode.tags.push({
1758
- label: "Circular",
1759
- textColor: 16711680,
1760
- backgroundColor: 16773360
1761
- });
1762
- else buildContextGraph(value, childNode, visited, depth + 1, maxDepth, uuid, chainedKey);
1763
- else childNode.label = `${key}: {}`;
1764
- else if (Array.isArray(value)) {
1720
+ } else if (value && typeof value === "object" && !Array.isArray(value)) {
1721
+ if (Object.keys(value).length > 0) {
1722
+ if (visited.has(value)) childNode.tags.push({
1723
+ label: "Circular",
1724
+ textColor: 16711680,
1725
+ backgroundColor: 16773360
1726
+ });
1727
+ else buildContextGraph(value, childNode, visited, depth + 1, maxDepth, uuid, chainedKey);
1728
+ } else childNode.label = `${key}: {}`;
1729
+ } else if (Array.isArray(value)) {
1765
1730
  childNode.label = `${key}: Array(${value.length})`;
1766
1731
  childNode.tags.push({
1767
1732
  label: `length: ${value.length}`,
@@ -1778,7 +1743,7 @@ function buildContextGraph(object, node, visited = /* @__PURE__ */ new WeakSet()
1778
1743
  * @returns A function that handles inspector tree payload updates
1779
1744
  */
1780
1745
  const inspectorTreeHandler = (tres) => (payload) => {
1781
- if (payload.inspectorId === INSPECTOR_ID) {
1746
+ if (payload.inspectorId === "tres:inspector") {
1782
1747
  const root = createNode(tres.scene.value);
1783
1748
  buildGraph$1(tres.scene.value, root, payload.filter);
1784
1749
  const rootContext = {
@@ -1800,7 +1765,7 @@ const inspectorTreeHandler = (tres) => (payload) => {
1800
1765
  * @returns A function that handles inspector state payload updates
1801
1766
  */
1802
1767
  const inspectorStateHandler = (tres, { highlightMesh, prevInstance }) => (payload) => {
1803
- if (payload.inspectorId !== INSPECTOR_ID) return;
1768
+ if (payload.inspectorId !== "tres:inspector") return;
1804
1769
  const highlightMaterial = new MeshBasicMaterial({
1805
1770
  color: 11003607,
1806
1771
  transparent: true,
@@ -1862,9 +1827,9 @@ const inspectorStateHandler = (tres, { highlightMesh, prevInstance }) => (payloa
1862
1827
  const match = payload.nodeId.match(/^context-([^-]+(?:-[^-]+)*)-(.+)$/);
1863
1828
  const chainedKey = match ? match[2] : "context";
1864
1829
  if (!chainedKey || chainedKey === "context") {
1865
- payload.state = { object: Object.entries(tres).filter(([key]) => !key.startsWith("_") && key !== "parent").map(([key, value$1]) => ({
1830
+ payload.state = { object: Object.entries(tres).filter(([key]) => !key.startsWith("_") && key !== "parent").map(([key, value]) => ({
1866
1831
  key,
1867
- value: isRef(value$1) ? value$1.value : value$1,
1832
+ value: isRef(value) ? value.value : value,
1868
1833
  editable: false
1869
1834
  })) };
1870
1835
  return;
@@ -1921,7 +1886,7 @@ const editSceneObject = (scene, objectUuid, propertyPath, value) => {
1921
1886
  * @returns A function that handles inspector state edit payload updates
1922
1887
  */
1923
1888
  const inspectorEditStateHandler = (tres) => (payload) => {
1924
- if (payload.inspectorId === INSPECTOR_ID) {
1889
+ if (payload.inspectorId === "tres:inspector") {
1925
1890
  if (payload.nodeId.includes("scene")) {
1926
1891
  const match = payload.nodeId.match(/^scene-(.+)$/);
1927
1892
  const uuid = match ? match[1] : null;
@@ -1930,7 +1895,6 @@ const inspectorEditStateHandler = (tres) => (payload) => {
1930
1895
  }
1931
1896
  }
1932
1897
  };
1933
-
1934
1898
  //#endregion
1935
1899
  //#region src/devtools/plugin.ts
1936
1900
  const INSPECTOR_ID = "tres:inspector";
@@ -1968,10 +1932,9 @@ function registerTresDevtools(app, tres) {
1968
1932
  api.on.editInspectorState(inspectorEditStateHandler(tres));
1969
1933
  });
1970
1934
  }
1971
-
1972
1935
  //#endregion
1973
- //#region src/components/Context.vue?vue&type=script&setup=true&lang.ts
1974
- var Context_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
1936
+ //#region src/components/Context.vue
1937
+ var Context_default = /* @__PURE__ */ defineComponent({
1975
1938
  __name: "Context",
1976
1939
  props: {
1977
1940
  camera: {
@@ -2115,14 +2078,14 @@ var Context_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ define
2115
2078
  const scene = shallowRef(new Scene());
2116
2079
  const instance = getCurrentInstance();
2117
2080
  extend(THREE);
2118
- const createInternalComponent = (context$1, hmrTick) => defineComponent({ setup() {
2081
+ const createInternalComponent = (context, hmrTick) => defineComponent({ setup() {
2119
2082
  const ctx = getCurrentInstance()?.appContext;
2120
2083
  if (ctx) ctx.app = instance?.appContext.app;
2121
2084
  const provides = {};
2122
- function mergeProvides(currentInstance$1) {
2123
- if (!currentInstance$1) return;
2124
- if (currentInstance$1.parent) mergeProvides(currentInstance$1.parent);
2125
- if (currentInstance$1.provides) Object.assign(provides, currentInstance$1.provides);
2085
+ function mergeProvides(currentInstance) {
2086
+ if (!currentInstance) return;
2087
+ if (currentInstance.parent) mergeProvides(currentInstance.parent);
2088
+ if (currentInstance.provides) Object.assign(provides, currentInstance.provides);
2126
2089
  }
2127
2090
  if (instance?.parent && props.enableProvideBridge) {
2128
2091
  mergeProvides(instance.parent);
@@ -2130,42 +2093,42 @@ var Context_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ define
2130
2093
  provide(key, provides[key]);
2131
2094
  });
2132
2095
  }
2133
- provide(INJECTION_KEY, context$1);
2096
+ provide(INJECTION_KEY, context);
2134
2097
  provide("extend", extend);
2135
- if (typeof window !== "undefined" && ctx?.app) registerTresDevtools(ctx?.app, context$1);
2098
+ if (typeof window !== "undefined" && ctx?.app) registerTresDevtools(ctx?.app, context);
2136
2099
  return () => {
2137
2100
  hmrTick.value;
2138
2101
  return h(Fragment, null, slots.default?.() ?? []);
2139
2102
  };
2140
2103
  } });
2141
- const mountCustomRenderer = (context$1) => {
2104
+ const mountCustomRenderer = (context) => {
2142
2105
  const canvas = props.canvas;
2143
2106
  if (getRoot(canvas)) return;
2144
2107
  const hmrTick = ref(0);
2145
- const internalComponent = createInternalComponent(context$1, hmrTick);
2146
- const renderer$1 = createRenderer(nodeOps({
2147
- context: context$1,
2108
+ const internalComponent = createInternalComponent(context, hmrTick);
2109
+ const renderer = createRenderer(nodeOps({
2110
+ context,
2148
2111
  options: props.customRendererOptions
2149
2112
  }));
2150
- renderer$1.render(h(internalComponent), scene.value);
2113
+ renderer.render(h(internalComponent), scene.value);
2151
2114
  setRoot(canvas, {
2152
- renderer: renderer$1,
2115
+ renderer,
2153
2116
  internalComponent,
2154
2117
  hmrTick,
2155
- context: context$1
2118
+ context
2156
2119
  });
2157
2120
  };
2158
- const dispose = (context$1, force = false) => {
2159
- disposeObject3D(context$1.scene.value);
2121
+ const dispose = (context, force = false) => {
2122
+ disposeObject3D(context.scene.value);
2160
2123
  if (force) {
2161
- context$1.renderer.instance.dispose();
2162
- if (context$1.renderer.instance instanceof WebGLRenderer) {
2163
- context$1.renderer.instance.renderLists.dispose();
2164
- context$1.renderer.instance.forceContextLoss();
2124
+ context.renderer.instance.dispose();
2125
+ if (context.renderer.instance instanceof WebGLRenderer) {
2126
+ context.renderer.instance.renderLists.dispose();
2127
+ context.renderer.instance.forceContextLoss();
2165
2128
  }
2166
2129
  }
2167
2130
  scene.value.__tres = {
2168
- root: context$1,
2131
+ root: context,
2169
2132
  objects: [],
2170
2133
  isUnmounting: true
2171
2134
  };
@@ -2197,14 +2160,14 @@ var Context_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ define
2197
2160
  const { camera, renderer } = context.value;
2198
2161
  const { registerCamera, cameras, activeCamera, deregisterCamera } = camera;
2199
2162
  const addDefaultCamera = () => {
2200
- const camera$1 = new PerspectiveCamera(45, window.innerWidth / window.innerHeight, .1, 1e3);
2201
- camera$1.position.set(3, 3, 3);
2202
- camera$1.lookAt(0, 0, 0);
2203
- registerCamera(camera$1);
2163
+ const camera = new PerspectiveCamera(45, window.innerWidth / window.innerHeight, .1, 1e3);
2164
+ camera.position.set(3, 3, 3);
2165
+ camera.lookAt(0, 0, 0);
2166
+ registerCamera(camera);
2204
2167
  const unwatch = watchEffect(() => {
2205
2168
  if (cameras.value.length >= 2) {
2206
- camera$1.removeFromParent();
2207
- deregisterCamera(camera$1);
2169
+ camera.removeFromParent();
2170
+ deregisterCamera(camera);
2208
2171
  unwatch?.();
2209
2172
  }
2210
2173
  });
@@ -2257,15 +2220,12 @@ var Context_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ define
2257
2220
  return () => {};
2258
2221
  }
2259
2222
  });
2260
-
2261
- //#endregion
2262
- //#region src/components/Context.vue
2263
- var Context_default = Context_vue_vue_type_script_setup_true_lang_default;
2264
-
2265
2223
  //#endregion
2266
2224
  //#region src/components/TresCanvas.vue?vue&type=script&setup=true&lang.ts
2267
2225
  const _hoisted_1 = ["data-scene", "data-tres"];
2268
- var TresCanvas_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
2226
+ //#endregion
2227
+ //#region src/components/TresCanvas.vue
2228
+ var TresCanvas_default = /* @__PURE__ */ defineComponent({
2269
2229
  __name: "TresCanvas",
2270
2230
  props: {
2271
2231
  camera: {
@@ -2476,11 +2436,6 @@ var TresCanvas_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ def
2476
2436
  };
2477
2437
  }
2478
2438
  });
2479
-
2480
- //#endregion
2481
- //#region src/components/TresCanvas.vue
2482
- var TresCanvas_default = TresCanvas_vue_vue_type_script_setup_true_lang_default;
2483
-
2484
2439
  //#endregion
2485
2440
  //#region src/utils/normalize.ts
2486
2441
  function normalizeVectorFlexibleParam(value) {
@@ -2501,7 +2456,6 @@ function normalizeColor(value) {
2501
2456
  if (Array.isArray(value)) return new Color(...value);
2502
2457
  return new Color(value);
2503
2458
  }
2504
-
2505
2459
  //#endregion
2506
2460
  //#region src/utils/template-compiler-options.ts
2507
2461
  const whitelist = [
@@ -2512,11 +2466,9 @@ const whitelist = [
2512
2466
  "TresPortal"
2513
2467
  ];
2514
2468
  const templateCompilerOptions = { template: { compilerOptions: { isCustomElement: (tag) => (/^Tres[A-Z]/.test(tag) || tag.startsWith("tres-")) && !whitelist.includes(tag) || tag === "primitive" } } };
2515
- var template_compiler_options_default = templateCompilerOptions;
2516
-
2517
2469
  //#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({
2470
+ //#region src/components/TresPortal.vue
2471
+ var TresPortal_default = /* @__PURE__ */ defineComponent({
2520
2472
  __name: "TresPortal",
2521
2473
  props: {
2522
2474
  to: {
@@ -2537,21 +2489,16 @@ var TresPortal_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ def
2537
2489
  };
2538
2490
  }
2539
2491
  });
2540
-
2541
- //#endregion
2542
- //#region src/components/TresPortal.vue
2543
- var TresPortal_default = TresPortal_vue_vue_type_script_setup_true_lang_default;
2544
-
2545
2492
  //#endregion
2546
2493
  //#region src/directives/vDistanceTo.ts
2547
2494
  let arrowHelper = null;
2548
2495
  const vDistanceTo = {
2549
2496
  updated: (el, binding) => {
2550
- const extractBindingPosition = (binding$1) => {
2551
- let observer$1 = binding$1.value;
2552
- if (binding$1.value && isMesh(binding$1.value)) observer$1 = binding$1.value.position;
2553
- if (Array.isArray(binding$1.value)) observer$1 = new Vector3(...observer$1);
2554
- return observer$1;
2497
+ const extractBindingPosition = (binding) => {
2498
+ let observer = binding.value;
2499
+ if (binding.value && isMesh(binding.value)) observer = binding.value.position;
2500
+ if (Array.isArray(binding.value)) observer = new Vector3(...observer);
2501
+ return observer;
2555
2502
  };
2556
2503
  const observer = extractBindingPosition(binding);
2557
2504
  if (!observer) {
@@ -2577,7 +2524,6 @@ const vDistanceTo = {
2577
2524
  if (el.parent) el.parent.remove(arrowHelper);
2578
2525
  }
2579
2526
  };
2580
-
2581
2527
  //#endregion
2582
2528
  //#region src/directives/vLightHelper.ts
2583
2529
  let CurrentHelper;
@@ -2613,7 +2559,6 @@ const vLightHelper = {
2613
2559
  if (el.parent) el.parent.remove(currentInstance);
2614
2560
  }
2615
2561
  };
2616
-
2617
2562
  //#endregion
2618
2563
  //#region src/directives/vLog.ts
2619
2564
  const vLog = { mounted: (el, binding) => {
@@ -2623,13 +2568,10 @@ const vLog = { mounted: (el, binding) => {
2623
2568
  }
2624
2569
  console.log("v-log", el);
2625
2570
  } };
2626
-
2627
2571
  //#endregion
2628
2572
  //#region src/index.ts
2629
2573
  const plugin = { install(app) {
2630
2574
  app.component("TresCanvas", TresCanvas_default);
2631
2575
  } };
2632
- var src_default = plugin;
2633
-
2634
2576
  //#endregion
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 };
2577
+ export { DevtoolsMessenger, INJECTION_KEY, TresCanvas_default as TresCanvas, Context_default as TresCanvasContext, TresPortal_default as TresPortal, TresRendererError, component_default as UseLoader, 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 };