@hology/core 0.0.273 → 0.0.274

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.
Files changed (84) hide show
  1. package/dist/effects/sequence/sequence-player.js +1 -1
  2. package/dist/effects/vfx/gpu-sprite-runtime.js +1 -1
  3. package/dist/gameplay/actors/builtin/components/character/character-movement.d.ts +19 -0
  4. package/dist/gameplay/actors/builtin/components/character/character-movement.js +1 -1
  5. package/dist/gameplay/actors/builtin/water-spline-volume-actor.d.ts +10 -0
  6. package/dist/gameplay/actors/builtin/water-spline-volume-actor.js +1 -1
  7. package/dist/gameplay/actors/builtin/water-volume-actor.d.ts +3 -1
  8. package/dist/gameplay/actors/builtin/water-volume-actor.js +1 -1
  9. package/dist/gameplay/actors/camera/first-person-camera-component.js +1 -1
  10. package/dist/gameplay/actors/camera/third-person-camera-component.d.ts +7 -0
  11. package/dist/gameplay/actors/camera/third-person-camera-component.js +1 -1
  12. package/dist/gameplay/ai/behavior-tree/move.d.ts +5 -0
  13. package/dist/gameplay/ai/behavior-tree/move.js +1 -1
  14. package/dist/gameplay/ai/behavior-tree/move.test.d.ts +2 -0
  15. package/dist/gameplay/ai/behavior-tree/move.test.js +4 -0
  16. package/dist/gameplay/animation/root-motion.js +1 -1
  17. package/dist/gameplay/input/input-service.d.ts +9 -1
  18. package/dist/gameplay/input/input-service.js +1 -1
  19. package/dist/gameplay/services/physics/physics-system.d.ts +2 -0
  20. package/dist/gameplay/services/physics/physics-system.js +1 -1
  21. package/dist/gameplay/services/render.d.ts +4 -1
  22. package/dist/gameplay/services/render.js +1 -1
  23. package/dist/gameplay/services/world.d.ts +5 -0
  24. package/dist/rendering/node-material-webgpu-resolver.js +1 -1
  25. package/dist/rendering/webgpu-experimental-backend.d.ts +4 -2
  26. package/dist/rendering/webgpu-experimental-backend.js +1 -1
  27. package/dist/rendering.d.ts +17 -2
  28. package/dist/rendering.js +1 -1
  29. package/dist/scene/asset-resource-loader.d.ts +4 -0
  30. package/dist/scene/asset-resource-loader.js +1 -1
  31. package/dist/scene/collision/collision-shape-import.js +1 -1
  32. package/dist/scene/collision/rapier-shape.js +1 -1
  33. package/dist/scene/landscape/landscape-geometry.d.ts +24 -0
  34. package/dist/scene/landscape/landscape-geometry.js +4 -0
  35. package/dist/scene/landscape/landscape-manager.d.ts +1 -0
  36. package/dist/scene/landscape/landscape-manager.js +1 -1
  37. package/dist/scene/materializer.d.ts +7 -1
  38. package/dist/scene/materializer.js +1 -1
  39. package/dist/scene/scene-data-service.d.ts +2 -1
  40. package/dist/scene/scene-data-service.js +1 -1
  41. package/dist/scene/sky.d.ts +2 -0
  42. package/dist/scene/sky.js +1 -1
  43. package/dist/shader/graph/compiler.js +1 -1
  44. package/dist/shader/graph/registry.js +1 -1
  45. package/dist/shader/parameter.js +1 -1
  46. package/dist/shader/sprite-shader.js +1 -1
  47. package/dist/shader-nodes/depth.d.ts +6 -4
  48. package/dist/shader-nodes/depth.js +1 -1
  49. package/dist/shader-nodes/index.d.ts +2 -1
  50. package/dist/shader-nodes/index.js +1 -1
  51. package/dist/shader-nodes/surface-reflection.d.ts +9 -0
  52. package/dist/shader-nodes/surface-reflection.js +4 -0
  53. package/dist/shader-nodes/water-volume.d.ts +6 -2
  54. package/dist/shader-nodes/water-volume.js +1 -1
  55. package/dist/test/asset-resource-loader-texture-array.test.js +1 -1
  56. package/dist/test/character-movement-solve.test.js +1 -1
  57. package/dist/test/collision-shape-import.test.js +1 -1
  58. package/dist/test/first-person-camera-component.test.js +1 -1
  59. package/dist/test/frame-stats.test.js +1 -1
  60. package/dist/test/gpu-sprite-compiler.test.js +1 -1
  61. package/dist/test/input.test.js +1 -1
  62. package/dist/test/landscape-geometry.test.d.ts +2 -0
  63. package/dist/test/landscape-geometry.test.js +4 -0
  64. package/dist/test/material-assignment.test.js +1 -1
  65. package/dist/test/materializer-dynamic-transform.test.js +1 -1
  66. package/dist/test/materializer-prefetch.test.js +1 -1
  67. package/dist/test/net-character-movement.test.js +1 -1
  68. package/dist/test/node-material-webgpu-resolver.test.js +1 -1
  69. package/dist/test/parameter-definition.test.js +1 -1
  70. package/dist/test/physics-hitstop.test.d.ts +2 -0
  71. package/dist/test/physics-hitstop.test.js +4 -0
  72. package/dist/test/physics-ray-object.test.js +1 -1
  73. package/dist/test/post-process-effect.test.js +1 -1
  74. package/dist/test/rapier-trimesh.test.d.ts +2 -0
  75. package/dist/test/rapier-trimesh.test.js +4 -0
  76. package/dist/test/sequence-animation-retiming.test.js +1 -1
  77. package/dist/test/sequence-vfx.test.js +1 -1
  78. package/dist/test/surface-reflection.test.d.ts +2 -0
  79. package/dist/test/surface-reflection.test.js +4 -0
  80. package/dist/test/water-spline-volume-actor.test.js +1 -1
  81. package/dist/utils/three/frame-stats.d.ts +8 -0
  82. package/dist/utils/three/frame-stats.js +1 -1
  83. package/package.json +2 -2
  84. package/tsconfig.tsbuildinfo +1 -1
@@ -1,4 +1,4 @@
1
- import{describe as e,expect as t,it as n,vi as o}from"vitest";import{Box3 as a,ShaderMaterial as i,Vector3 as s}from"three";import{NavigationArea as r}from"../gameplay/ai/navigation-areas.js";import{createWaterSplineSurfaceGeometry as l,WaterSplineVolume as c}from"../gameplay/actors/builtin/water-spline-volume-actor.js";import{packSplineData as u}from"../gameplay/actors/builtin/components/spline-component.js";function p(e,t){e.spline.setData(u([{position:new s,inTangent:new s,outTangent:new s(t/3,0,0)},{position:new s(t,0,0),inTangent:new s(-t/3,0,0),outTangent:new s}],!1),!1)}o.hoisted(()=>{if("undefined"!=typeof HTMLCanvasElement){const e=new Proxy({},{get:(e,t)=>(t in e||(e[t]=o.fn()),e[t]),set:(e,t,n)=>(e[t]=n,!0)});Object.defineProperty(HTMLCanvasElement.prototype,"getContext",{configurable:!0,value:()=>e})}"undefined"==typeof AudioBuffer&&Object.defineProperty(globalThis,"AudioBuffer",{configurable:!0,value:class{}})}),e("WaterSplineVolume",()=>{n("creates water navigation prisms centered below the spline surface",()=>{const e=new c;e.width=4,e.depth=3,p(e,10);const n=e.getNavigationAreaModifiers();t(n).toHaveLength(20),t(n.every(e=>e.area===r.Water)).toBe(!0),t(n[0].vertices[0]).toEqual([0,0,2]),t(n[0].vertices[1]).toEqual([0,0,-2]),t(n[0].minHeight).toBe(-3),t(n[0].maxHeight).toBe(0)}),n("rebuilds the editor visualization when the spline changes",()=>{const e=new c;e.width=2,e.depth=1,p(e,2);const n=Object.values(e).find(e=>"WaterSplineVolumeEditorComponent"===e?.constructor?.name);n.onInit();const o=[...n.visual.children],i=(new a).setFromObject(n.visual);t(i.max.x).toBeCloseTo(2),p(e,6),e.spline.changed.next(e.spline),i.setFromObject(n.visual),t(i.max.x).toBeCloseTo(6),t(i.min.y).toBeCloseTo(-1),t(n.visual.children).toEqual(o),t(o.every(e=>!1===e.frustumCulled)).toBe(!0)}),n("clamps offset joins at sharp turns",()=>{const e=new c;e.width=10,e.depth=1,e.spline.setData(u([{position:new s(-1,0,0),inTangent:new s,outTangent:new s(1/3,0,0)},{position:new s(0,0,0),inTangent:new s(-1/3,0,0),outTangent:new s(0,0,1/3)},{position:new s(0,0,1),inTangent:new s(0,0,-1/3),outTangent:new s}],!1),!1);const n=Object.values(e).find(e=>"WaterSplineVolumeEditorComponent"===e?.constructor?.name);n.onInit();const o=(new a).setFromObject(n.visual);t(o.min.x).toBeGreaterThanOrEqual(-1-e.width*g/2),t(o.max.x).toBeLessThanOrEqual(e.width*g/2),t(o.min.z).toBeGreaterThanOrEqual(-e.width*g/2),t(o.max.z).toBeLessThanOrEqual(1+e.width*g/2);const i=l(e.spline,e.width,.1,1),r=i.getAttribute("position"),p=i.getIndex();for(let e=0;e<p.count;e+=3){const n=p.getX(e),o=p.getX(e+1),a=p.getX(e+2),i=(r.getX(o)-r.getX(n))*(r.getZ(a)-r.getZ(n))-(r.getZ(o)-r.getZ(n))*(r.getX(a)-r.getX(n));t(i).toBeLessThanOrEqual(1e-6)}}),n("creates tessellated surface data for water shaders",()=>{const e=new c;p(e,10);const n=l(e.spline,4,2,2),o=n.getAttribute("position").count;t(o).toBeGreaterThan(0),t(n.getAttribute("uv").count).toBe(o),t(n.getAttribute("waterFlowDirection").count).toBe(o),t(Math.max(...Array.from({length:o},(e,t)=>n.getAttribute("waterDistanceFromBank").getX(t)))).toBeGreaterThan(0),t(Math.max(...Array.from({length:o},(e,t)=>n.getAttribute("waterDistanceAlongSpline").getX(t)))).toBeCloseTo(10)}),n("classifies points inside the authored spline prism",()=>{const e=new c;e.width=4,e.depth=3,p(e,10),t(e.containsWaterPoint(new s(5,-1,0))).toBe(!0),t(e.containsWaterPoint(new s(5,1,0))).toBe(!1),t(e.containsWaterPoint(new s(5,-4,0))).toBe(!1),t(e.containsWaterPoint(new s(5,-1,3))).toBe(!1)}),n("applies underwater graph changes without recreating the actor",()=>{const e=new c,n=new i;t(e.underwater.applySceneParameters({postProcessMaterial:n},new Set(["postProcessMaterial"]))).toBe(!0),t(e.underwater.postProcessMaterial).toBe(n)})});const g=1.5;/*
1
+ import{describe as e,expect as t,it as n,vi as o}from"vitest";import{Box3 as a,ShaderMaterial as i,Vector3 as s}from"three";import{NavigationArea as r}from"../gameplay/ai/navigation-areas.js";import{createWaterSplineSurfaceGeometry as l,WaterSplineVolume as c}from"../gameplay/actors/builtin/water-spline-volume-actor.js";import{WaterVolume as u}from"../gameplay/actors/builtin/water-volume-actor.js";import{packSplineData as g}from"../gameplay/actors/builtin/components/spline-component.js";function w(e,t){e.spline.setData(g([{position:new s,inTangent:new s,outTangent:new s(t/3,0,0)},{position:new s(t,0,0),inTangent:new s(-t/3,0,0),outTangent:new s}],!1),!1)}o.hoisted(()=>{if("undefined"!=typeof HTMLCanvasElement){const e=new Proxy({},{get:(e,t)=>(t in e||(e[t]=o.fn()),e[t]),set:(e,t,n)=>(e[t]=n,!0)});Object.defineProperty(HTMLCanvasElement.prototype,"getContext",{configurable:!0,value:()=>e})}"undefined"==typeof AudioBuffer&&Object.defineProperty(globalThis,"AudioBuffer",{configurable:!0,value:class{}})}),e("WaterSplineVolume",()=>{n("creates water navigation prisms centered below the spline surface",()=>{const e=new c;e.width=4,e.depth=3,w(e,10);const n=e.getNavigationAreaModifiers();t(n).toHaveLength(20),t(n.every(e=>e.area===r.Water)).toBe(!0),t(n[0].vertices[0]).toEqual([0,0,2]),t(n[0].vertices[1]).toEqual([0,0,-2]),t(n[0].minHeight).toBe(-3),t(n[0].maxHeight).toBe(0)}),n("rebuilds the editor visualization when the spline changes",()=>{const e=new c;e.width=2,e.depth=1,w(e,2);const n=Object.values(e).find(e=>"WaterSplineVolumeEditorComponent"===e?.constructor?.name);n.onInit();const o=[...n.visual.children],i=(new a).setFromObject(n.visual);t(i.max.x).toBeCloseTo(2),w(e,6),e.spline.changed.next(e.spline),i.setFromObject(n.visual),t(i.max.x).toBeCloseTo(6),t(i.min.y).toBeCloseTo(-1),t(n.visual.children).toEqual(o),t(o.every(e=>!1===e.frustumCulled)).toBe(!0)}),n("clamps offset joins at sharp turns",()=>{const e=new c;e.width=10,e.depth=1,e.spline.setData(g([{position:new s(-1,0,0),inTangent:new s,outTangent:new s(1/3,0,0)},{position:new s(0,0,0),inTangent:new s(-1/3,0,0),outTangent:new s(0,0,1/3)},{position:new s(0,0,1),inTangent:new s(0,0,-1/3),outTangent:new s}],!1),!1);const n=Object.values(e).find(e=>"WaterSplineVolumeEditorComponent"===e?.constructor?.name);n.onInit();const o=(new a).setFromObject(n.visual);t(o.min.x).toBeGreaterThanOrEqual(-1-e.width*p/2),t(o.max.x).toBeLessThanOrEqual(e.width*p/2),t(o.min.z).toBeGreaterThanOrEqual(-e.width*p/2),t(o.max.z).toBeLessThanOrEqual(1+e.width*p/2);const i=l(e.spline,e.width,.1,1),r=i.getAttribute("position"),u=i.getIndex();for(let e=0;e<u.count;e+=3){const n=u.getX(e),o=u.getX(e+1),a=u.getX(e+2),i=(r.getX(o)-r.getX(n))*(r.getZ(a)-r.getZ(n))-(r.getZ(o)-r.getZ(n))*(r.getX(a)-r.getX(n));t(i).toBeLessThanOrEqual(1e-6)}}),n("creates tessellated surface data for water shaders",()=>{const e=new c;w(e,10);const n=l(e.spline,4,2,2),o=n.getAttribute("position").count;t(o).toBeGreaterThan(0),t(n.getAttribute("uv").count).toBe(o),t(n.getAttribute("waterFlowDirection").count).toBe(o),t(Math.max(...Array.from({length:o},(e,t)=>n.getAttribute("waterDistanceFromBank").getX(t)))).toBeGreaterThan(0),t(Math.max(...Array.from({length:o},(e,t)=>n.getAttribute("waterDistanceAlongSpline").getX(t)))).toBeCloseTo(10)}),n("classifies points inside the authored spline prism",()=>{const e=new c;e.width=4,e.depth=3,w(e,10),t(e.containsWaterPoint(new s(5,-1,0))).toBe(!0),t(e.containsWaterPoint(new s(5,1,0))).toBe(!1),t(e.containsWaterPoint(new s(5,-4,0))).toBe(!1),t(e.containsWaterPoint(new s(5,-1,3))).toBe(!1)}),n("applies underwater graph changes without recreating the actor",()=>{const e=new c,n=new i;t(e.underwater.applySceneParameters({postProcessMaterial:n},new Set(["postProcessMaterial"]))).toBe(!0),t(e.underwater.postProcessMaterial).toBe(n)}),n("samples transformed surfaces and invalidates cached spline geometry without change events",()=>{const e=new c;e.depth=3,w(e,10),e.object.position.y=5,e.object.scale.y=2,t(e.getWaterSurfaceHeight(new s(5,4,0))).toBeCloseTo(5);const n=e.waterSections;t(e.getWaterSurfaceHeight(new s(5,3,0))).toBeCloseTo(5),t(e.waterSections).toBe(n),e.object.position.y=6,t(e.getWaterSurfaceHeight(new s(5,4,0))).toBeCloseTo(6),w(e,2),t(e.getWaterSurfaceHeight(new s(5,4,0))).toBeNull(),e.width=1,t(e.getWaterSurfaceHeight(new s(1,4,1))).toBeNull(),e.depth=.1,t(e.getWaterSurfaceHeight(new s(1,4,0))).toBeNull()}),n("samples a sloping spline surface at the query position",()=>{const e=new c;e.spline.setData(g([{position:new s,inTangent:new s,outTangent:new s(10/3,2/3,0)},{position:new s(10,2,0),inTangent:new s(-10/3,-2/3,0),outTangent:new s}],!1),!1),t(e.getWaterSurfaceHeight(new s(5,0,0))).toBeCloseTo(1),t(e.getWaterSurfaceHeight(new s(5,2,0))).toBeNull()}),n("samples the scaled and tilted box top face",()=>{const e=new u;e.object.scale.set(10,4,10),e.object.position.y=3,t(e.getWaterSurfaceHeight(new s(0,2,0))).toBeCloseTo(5),t(e.getWaterSurfaceHeight(new s(0,0,0))).toBeNull(),t(e.getWaterSurfaceHeight(new s(6,2,0))).toBeNull(),e.object.rotation.z=Math.PI/6,t(e.getWaterSurfaceHeight(new s(0,3,0))).toBeCloseTo(3+2/Math.cos(Math.PI/6))})});const p=1.5;/*
2
2
  * Copyright (©) 2026 Hology Interactive AB. All rights reserved.
3
3
  * See the LICENSE.md file for details.
4
4
  */
@@ -1,7 +1,9 @@
1
1
  import Stats from 'three/examples/jsm/libs/stats.module.js';
2
+ export type RenderingStatsStyle = 'simple' | 'detailed';
2
3
  /** Stats.js panels with frame measurement independent of canvas refreshes. */
3
4
  export declare class FrameStats {
4
5
  readonly dom: HTMLDivElement;
6
+ private readonly panels;
5
7
  private readonly fpsPanel;
6
8
  private readonly msPanel;
7
9
  private readonly memoryPanel;
@@ -12,8 +14,14 @@ export declare class FrameStats {
12
14
  private frames;
13
15
  private measuredFrames;
14
16
  private measuredMs;
17
+ private readonly simpleDom;
18
+ private _style;
19
+ private simpleTime;
20
+ private simpleFrames;
15
21
  constructor();
16
22
  addPanel<T extends Stats.Panel>(panel: T): T;
23
+ get style(): RenderingStatsStyle;
24
+ set style(value: RenderingStatsStyle);
17
25
  showPanel(index: number): void;
18
26
  reset(): void;
19
27
  begin(): void;
@@ -1,4 +1,4 @@
1
- import e from"three/examples/jsm/libs/stats.module.js";export class FrameStats{constructor(){this.dom=document.createElement("div"),this.fpsPanel=this.addPanel(new e.Panel("FPS","#0ff","#002")),this.msPanel=this.addPanel(new e.Panel("MS avg","#0f0","#020")),this.memoryPanel="memory"in performance?this.addPanel(new e.Panel("MB","#f08","#201")):null,this.mode=0,this.beginTime=0,this.fpsTime=0,this.panelTime=0,this.frames=0,this.measuredFrames=0,this.measuredMs=0,this.dom.style.cssText="position:fixed;top:0;left:0;cursor:pointer;opacity:0.9;z-index:10000",this.dom.addEventListener("click",e=>{e.preventDefault(),this.showPanel((this.mode+1)%this.dom.children.length)}),this.showPanel(0),this.reset()}addPanel(e){return this.dom.appendChild(e.dom),e}showPanel(e){for(let s=0;s<this.dom.children.length;s++)this.dom.children[s].style.display=s===e?"block":"none";this.mode=e}reset(){this.beginTime=this.fpsTime=this.panelTime=performance.now(),this.frames=this.measuredFrames=this.measuredMs=0}begin(){this.beginTime=performance.now()}end(){const e=performance.now();if(this.frames++,this.measuredFrames++,this.measuredMs+=e-this.beginTime,e-this.panelTime>=250&&(this.msPanel.update(this.measuredMs/this.measuredFrames,200),this.measuredFrames=this.measuredMs=0,this.panelTime=e),e-this.fpsTime>=1e3&&(this.fpsPanel.update(1e3*this.frames/(e-this.fpsTime),100),this.frames=0,this.fpsTime=e,this.memoryPanel)){const e=performance.memory;this.memoryPanel.update(e.usedJSHeapSize/1048576,e.jsHeapSizeLimit/1048576)}}}/*
1
+ import e from"three/examples/jsm/libs/stats.module.js";export class FrameStats{constructor(){this.dom=document.createElement("div"),this.panels=[],this.fpsPanel=this.addPanel(new e.Panel("FPS","#0ff","#002")),this.msPanel=this.addPanel(new e.Panel("MS avg","#0f0","#020")),this.memoryPanel="memory"in performance?this.addPanel(new e.Panel("MB","#f08","#201")):null,this.mode=0,this.beginTime=0,this.fpsTime=0,this.panelTime=0,this.frames=0,this.measuredFrames=0,this.measuredMs=0,this.simpleDom=document.createElement("div"),this._style="detailed",this.simpleTime=null,this.simpleFrames=0,this.dom.style.cssText="position:fixed;top:0;left:0;cursor:pointer;opacity:0.9;z-index:10000",this.dom.addEventListener("click",e=>{"simple"!==this._style&&(e.preventDefault(),this.showPanel((this.mode+1)%this.panels.length))}),this.simpleDom.style.cssText="display:none;white-space:nowrap",this.dom.appendChild(this.simpleDom),this.showPanel(0),this.reset()}addPanel(e){return this.panels.push(e),this.dom.appendChild(e.dom),"simple"===this._style&&(e.dom.style.display="none"),e}get style(){return this._style}set style(e){this._style=e,this.dom.style.cssText="simple"===e?"position:absolute;top:12px;left:12px;z-index:10000;pointer-events:none;user-select:none;padding:8px 12px;border-radius:6px;background:rgba(12,16,22,.75);color:#f5f7fa;font:500 13px/1.4 system-ui,sans-serif;font-variant-numeric:tabular-nums":"position:absolute;top:0;left:0;cursor:pointer;opacity:0.9;z-index:10000";for(const s of Array.from(this.dom.children))s.style.display="simple"===e?"none":"inline-block";this.simpleDom.style.display="simple"===e?"block":"none",this.reset()}showPanel(e){const s=this.panels;for(let i=0;i<s.length;i++)s[i].dom.style.display="detailed"===this._style&&i===e?"block":"none";this.mode=e}reset(){this.beginTime=this.fpsTime=this.panelTime=performance.now(),this.frames=this.measuredFrames=this.measuredMs=0,this.simpleTime=null,this.simpleFrames=0,this.simpleDom.textContent="— FPS · — ms"}begin(){"simple"!==this._style&&(this.beginTime=performance.now())}end(){const e=performance.now();if("simple"===this._style){if(null==this.simpleTime)return void(this.simpleTime=e);this.simpleFrames++;const s=e-this.simpleTime;if(s>=250){const i=s/this.simpleFrames;this.simpleDom.textContent=`${Math.round(1e3/i)} FPS · ${i.toFixed(1)} ms`,this.simpleFrames=0,this.simpleTime=e}return}if(this.frames++,this.measuredFrames++,this.measuredMs+=e-this.beginTime,e-this.panelTime>=250&&(this.msPanel.update(this.measuredMs/this.measuredFrames,200),this.measuredFrames=this.measuredMs=0,this.panelTime=e),e-this.fpsTime>=1e3&&(this.fpsPanel.update(1e3*this.frames/(e-this.fpsTime),100),this.frames=0,this.fpsTime=e,this.memoryPanel)){const e=performance.memory;this.memoryPanel.update(e.usedJSHeapSize/1048576,e.jsHeapSizeLimit/1048576)}}}/*
2
2
  * Copyright (©) 2026 Hology Interactive AB. All rights reserved.
3
3
  * See the LICENSE.md file for details.
4
4
  */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hology/core",
3
- "version": "0.0.273",
3
+ "version": "0.0.274",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "type": "module",
@@ -231,7 +231,7 @@
231
231
  "recast-navigation": "0.39.0",
232
232
  "rxjs": "7.8.1",
233
233
  "three-mesh-bvh": "^0.7.5",
234
- "three-shader-graph": "0.2.72",
234
+ "three-shader-graph": "0.2.74",
235
235
  "three-stdlib": "2.34.0",
236
236
  "ts-key-enum": "^2.0.12",
237
237
  "typedi": "^0.10.0"