@3driseai/3drise-viewer 0.1.5 → 0.1.7

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 (203) hide show
  1. package/README.md +225 -0
  2. package/dist/components/AdvancedGrid.d.ts +16 -0
  3. package/dist/components/AdvancedGrid.d.ts.map +1 -0
  4. package/dist/components/AdvancedGrid.js +63 -0
  5. package/dist/components/AnimatedObject.d.ts.map +1 -1
  6. package/dist/components/AnimatedObject.js +6 -4
  7. package/dist/components/CameraController.d.ts.map +1 -1
  8. package/dist/components/CameraController.js +0 -6
  9. package/dist/components/CircuitGrid.d.ts +22 -0
  10. package/dist/components/CircuitGrid.d.ts.map +1 -0
  11. package/dist/components/CircuitGrid.js +69 -0
  12. package/dist/components/Clouds.d.ts.map +1 -1
  13. package/dist/components/Clouds.js +0 -5
  14. package/dist/components/ContourGrid.d.ts +25 -0
  15. package/dist/components/ContourGrid.d.ts.map +1 -0
  16. package/dist/components/ContourGrid.js +74 -0
  17. package/dist/components/CreatedObject.d.ts.map +1 -1
  18. package/dist/components/CreatedObject.js +3 -6
  19. package/dist/components/CustomPrimitive.d.ts.map +1 -1
  20. package/dist/components/CustomPrimitive.js +1 -6
  21. package/dist/components/EffectsGenerator.d.ts.map +1 -1
  22. package/dist/components/EffectsGenerator.js +0 -2
  23. package/dist/components/EffectsGroup.d.ts +6 -0
  24. package/dist/components/EffectsGroup.d.ts.map +1 -1
  25. package/dist/components/EffectsGroup.js +14 -4
  26. package/dist/components/FractalGrid.d.ts +23 -0
  27. package/dist/components/FractalGrid.d.ts.map +1 -0
  28. package/dist/components/FractalGrid.js +72 -0
  29. package/dist/components/Frame.d.ts.map +1 -1
  30. package/dist/components/Frame.js +2 -3
  31. package/dist/components/GalleryLayout.d.ts.map +1 -1
  32. package/dist/components/GalleryLayout.js +0 -3
  33. package/dist/components/GeometryShape.d.ts.map +1 -1
  34. package/dist/components/GeometryShape.js +19 -7
  35. package/dist/components/Glyphs.d.ts.map +1 -1
  36. package/dist/components/Glyphs.js +0 -1
  37. package/dist/components/GridsGenerator.d.ts +4 -1
  38. package/dist/components/GridsGenerator.d.ts.map +1 -1
  39. package/dist/components/GridsGenerator.js +28 -4
  40. package/dist/components/HdrPlaylistRenderer.d.ts.map +1 -1
  41. package/dist/components/HdrPlaylistRenderer.js +0 -1
  42. package/dist/components/HexGrid.d.ts +25 -0
  43. package/dist/components/HexGrid.d.ts.map +1 -0
  44. package/dist/components/HexGrid.js +72 -0
  45. package/dist/components/ImageGeometry.js +1 -1
  46. package/dist/components/Letter.d.ts.map +1 -1
  47. package/dist/components/Letter.js +1 -6
  48. package/dist/components/MoireGrid.d.ts +23 -0
  49. package/dist/components/MoireGrid.d.ts.map +1 -0
  50. package/dist/components/MoireGrid.js +76 -0
  51. package/dist/components/Moon.d.ts.map +1 -1
  52. package/dist/components/Moon.js +0 -1
  53. package/dist/components/ObjectNode.d.ts +1 -2
  54. package/dist/components/ObjectNode.d.ts.map +1 -1
  55. package/dist/components/ObjectNode.js +18 -29
  56. package/dist/components/ObjectNodeApi.d.ts +1 -2
  57. package/dist/components/ObjectNodeApi.d.ts.map +1 -1
  58. package/dist/components/ObjectNodeApi.js +7 -3
  59. package/dist/components/ObjectsRenderer.d.ts.map +1 -1
  60. package/dist/components/ObjectsRenderer.js +1 -4
  61. package/dist/components/ObjectsRendererApi.d.ts.map +1 -1
  62. package/dist/components/ObjectsRendererApi.js +4 -2
  63. package/dist/components/Ocean.d.ts.map +1 -1
  64. package/dist/components/Ocean.js +1 -4
  65. package/dist/components/ParticlesR3f.d.ts +0 -1
  66. package/dist/components/ParticlesR3f.d.ts.map +1 -1
  67. package/dist/components/ParticlesR3f.js +63 -12
  68. package/dist/components/PathRenderer.d.ts.map +1 -1
  69. package/dist/components/PathRenderer.js +0 -1
  70. package/dist/components/PointCloud.d.ts.map +1 -1
  71. package/dist/components/PointCloud.js +50 -10
  72. package/dist/components/ProjectLoader.d.ts.map +1 -1
  73. package/dist/components/ProjectLoader.js +0 -28
  74. package/dist/components/QuasiGrid.d.ts +22 -0
  75. package/dist/components/QuasiGrid.d.ts.map +1 -0
  76. package/dist/components/QuasiGrid.js +68 -0
  77. package/dist/components/RadarGrid.d.ts +24 -0
  78. package/dist/components/RadarGrid.d.ts.map +1 -0
  79. package/dist/components/RadarGrid.js +71 -0
  80. package/dist/components/SceneBuilder.d.ts.map +1 -1
  81. package/dist/components/SceneBuilder.js +0 -1
  82. package/dist/components/ShootingStar.js +2 -2
  83. package/dist/components/ShootingStars.d.ts.map +1 -1
  84. package/dist/components/ShootingStars.js +0 -1
  85. package/dist/components/SkyController.d.ts.map +1 -1
  86. package/dist/components/SkyController.js +0 -3
  87. package/dist/components/Skybox.d.ts +5 -0
  88. package/dist/components/Skybox.d.ts.map +1 -1
  89. package/dist/components/Skybox.js +0 -1
  90. package/dist/components/SparklesBurst.d.ts.map +1 -1
  91. package/dist/components/SparklesBurst.js +0 -1
  92. package/dist/components/VoronoiGrid.d.ts +21 -0
  93. package/dist/components/VoronoiGrid.d.ts.map +1 -0
  94. package/dist/components/VoronoiGrid.js +67 -0
  95. package/dist/components/effects/ShockwaveEffect.d.ts.map +1 -1
  96. package/dist/components/effects/ShockwaveEffect.js +0 -1
  97. package/dist/components/effects/SmokeRibbon.d.ts.map +1 -1
  98. package/dist/components/effects/SmokeRibbon.js +0 -1
  99. package/dist/components/index.d.ts +19 -2
  100. package/dist/components/index.d.ts.map +1 -1
  101. package/dist/components/index.js +9 -1
  102. package/dist/constants.d.ts +1 -0
  103. package/dist/constants.d.ts.map +1 -1
  104. package/dist/constants.js +6 -0
  105. package/dist/hooks/index.d.ts +4 -1
  106. package/dist/hooks/index.d.ts.map +1 -1
  107. package/dist/hooks/index.js +3 -1
  108. package/dist/hooks/use3driseShader.d.ts.map +1 -1
  109. package/dist/hooks/use3driseShader.js +0 -9
  110. package/dist/hooks/useAnimationEvents.d.ts.map +1 -1
  111. package/dist/hooks/useAnimationEvents.js +0 -19
  112. package/dist/hooks/useCameraAnimation.d.ts.map +1 -1
  113. package/dist/hooks/useCameraAnimation.js +0 -5
  114. package/dist/hooks/useContinuousEffects.d.ts +2 -3
  115. package/dist/hooks/useContinuousEffects.d.ts.map +1 -1
  116. package/dist/hooks/useContinuousEffects.js +16 -61
  117. package/dist/hooks/useFrameAnimations.d.ts.map +1 -1
  118. package/dist/hooks/useFrameAnimations.js +0 -4
  119. package/dist/hooks/useGridSurface.d.ts +46 -0
  120. package/dist/hooks/useGridSurface.d.ts.map +1 -0
  121. package/dist/hooks/useGridSurface.js +66 -0
  122. package/dist/hooks/useGsapAnimation.d.ts.map +1 -1
  123. package/dist/hooks/useGsapAnimation.js +0 -3
  124. package/dist/hooks/useInteraction.d.ts.map +1 -1
  125. package/dist/hooks/useInteraction.js +0 -25
  126. package/dist/hooks/useInteractionEffects.d.ts +2 -2
  127. package/dist/hooks/useInteractionEffects.d.ts.map +1 -1
  128. package/dist/hooks/useInteractionEffects.js +3 -1
  129. package/dist/hooks/useMaterialApplication.d.ts +2 -2
  130. package/dist/hooks/useMaterialApplication.d.ts.map +1 -1
  131. package/dist/hooks/useMaterialApplication.js +9 -21
  132. package/dist/hooks/useMaterialOptions.d.ts +2 -2
  133. package/dist/hooks/useMaterialOptions.d.ts.map +1 -1
  134. package/dist/hooks/useMaterialOptions.js +13 -37
  135. package/dist/hooks/useMeshController.d.ts.map +1 -1
  136. package/dist/hooks/useMeshController.js +0 -16
  137. package/dist/hooks/useObjectAnimation.d.ts +13 -2
  138. package/dist/hooks/useObjectAnimation.d.ts.map +1 -1
  139. package/dist/hooks/useObjectAnimation.js +26 -28
  140. package/dist/hooks/useObjectEdges.d.ts +2 -1
  141. package/dist/hooks/useObjectEdges.d.ts.map +1 -1
  142. package/dist/hooks/useObjectEdges.js +18 -52
  143. package/dist/hooks/useObjectEffects.d.ts.map +1 -1
  144. package/dist/hooks/useObjectEffects.js +0 -4
  145. package/dist/hooks/useRegisterScene.d.ts +17 -0
  146. package/dist/hooks/useRegisterScene.d.ts.map +1 -0
  147. package/dist/hooks/useRegisterScene.js +33 -0
  148. package/dist/hooks/useSequenceAnimation.d.ts +2 -2
  149. package/dist/hooks/useSequenceAnimation.d.ts.map +1 -1
  150. package/dist/hooks/useSequenceAnimation.js +5 -70
  151. package/dist/hooks/useShadowApplication.d.ts +2 -2
  152. package/dist/hooks/useShadowApplication.d.ts.map +1 -1
  153. package/dist/hooks/useShadowApplication.js +6 -2
  154. package/dist/hooks/useSkyAnimation.d.ts.map +1 -1
  155. package/dist/hooks/useSkyAnimation.js +0 -1
  156. package/dist/hooks/useSkySystem.d.ts.map +1 -1
  157. package/dist/hooks/useSkySystem.js +0 -1
  158. package/dist/index.d.ts +3 -1
  159. package/dist/index.d.ts.map +1 -1
  160. package/dist/index.js +2 -1
  161. package/dist/services/AnimationsManager.d.ts.map +1 -1
  162. package/dist/services/AnimationsManager.js +0 -1
  163. package/dist/shaders/CircuitGridMaterial.d.ts +76 -0
  164. package/dist/shaders/CircuitGridMaterial.d.ts.map +1 -0
  165. package/dist/shaders/CircuitGridMaterial.js +298 -0
  166. package/dist/shaders/ContourGridMaterial.d.ts +80 -0
  167. package/dist/shaders/ContourGridMaterial.d.ts.map +1 -0
  168. package/dist/shaders/ContourGridMaterial.js +259 -0
  169. package/dist/shaders/FractalGridMaterial.d.ts +76 -0
  170. package/dist/shaders/FractalGridMaterial.d.ts.map +1 -0
  171. package/dist/shaders/FractalGridMaterial.js +247 -0
  172. package/dist/shaders/HexGridMaterial.d.ts +73 -0
  173. package/dist/shaders/HexGridMaterial.d.ts.map +1 -0
  174. package/dist/shaders/HexGridMaterial.js +265 -0
  175. package/dist/shaders/MoireGridMaterial.d.ts +79 -0
  176. package/dist/shaders/MoireGridMaterial.d.ts.map +1 -0
  177. package/dist/shaders/MoireGridMaterial.js +271 -0
  178. package/dist/shaders/QuasiGridMaterial.d.ts +76 -0
  179. package/dist/shaders/QuasiGridMaterial.d.ts.map +1 -0
  180. package/dist/shaders/QuasiGridMaterial.js +238 -0
  181. package/dist/shaders/RadarGridMaterial.d.ts +77 -0
  182. package/dist/shaders/RadarGridMaterial.d.ts.map +1 -0
  183. package/dist/shaders/RadarGridMaterial.js +291 -0
  184. package/dist/shaders/VoronoiGridMaterial.d.ts +73 -0
  185. package/dist/shaders/VoronoiGridMaterial.d.ts.map +1 -0
  186. package/dist/shaders/VoronoiGridMaterial.js +266 -0
  187. package/dist/types/gridConfigs.d.ts +202 -0
  188. package/dist/types/gridConfigs.d.ts.map +1 -0
  189. package/dist/types/gridConfigs.js +11 -0
  190. package/dist/types/index.d.ts +1 -0
  191. package/dist/types/index.d.ts.map +1 -1
  192. package/dist/utils/handleGenerativeEffectsAnimations.d.ts +0 -1
  193. package/dist/utils/handleGenerativeEffectsAnimations.d.ts.map +1 -1
  194. package/dist/utils/handleGenerativeEffectsAnimations.js +0 -29
  195. package/dist/utils/pointsMaterialOwnership.d.ts +9 -0
  196. package/dist/utils/pointsMaterialOwnership.d.ts.map +1 -0
  197. package/dist/utils/pointsMaterialOwnership.js +14 -0
  198. package/dist/utils/resolveObject3D.d.ts +20 -0
  199. package/dist/utils/resolveObject3D.d.ts.map +1 -0
  200. package/dist/utils/resolveObject3D.js +9 -0
  201. package/dist/utils/shapes.d.ts.map +1 -1
  202. package/dist/utils/shapes.js +0 -1
  203. package/package.json +4 -4
@@ -1,6 +1,6 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { useObjectReady } from '../hooks/useObjectReady.js';
3
- import { useRef, useState, useEffect } from 'react';
3
+ import { useRef, useState } from 'react';
4
4
  import { useFrame } from '@react-three/fiber';
5
5
  import { useCursor, Text, Text3D, Center } from '@react-three/drei';
6
6
  import MaterialLibrary from './MaterialLibrary.js';
@@ -49,11 +49,6 @@ export default function Letter({ letterData, config, materialSettings, hoverSett
49
49
  const color = 'color' in materialSettings ? materialSettings.color : '#ffffff';
50
50
  const opacity = 'opacity' in materialSettings ? materialSettings.opacity : 1;
51
51
  const useDreiMaterials = materialSettings.materialType === 'advanced';
52
- useEffect(() => {
53
- if (useDreiMaterials && renderMode === 'bitmap') {
54
- console.warn('[Letter] Advanced materials not supported with bitmap text. Switch to text3d render mode.');
55
- }
56
- }, [useDreiMaterials, renderMode]);
57
52
  useCursor(hovered);
58
53
  const fontInfo = font ? fontManager.getFont(font) : null;
59
54
  const bitmapFontUrl = fontInfo?.googleFont;
@@ -0,0 +1,23 @@
1
+ import type { ThreeElements } from '@react-three/fiber';
2
+ import type { ObjectReadyProps } from '../types/objectReady';
3
+ import type { MoireGridConfig } from '../types/gridConfigs';
4
+ export interface MoireGridProps extends ObjectReadyProps {
5
+ config?: MoireGridConfig;
6
+ groupProps?: ThreeElements['group'];
7
+ }
8
+ /** MoireGridConfig — the single source of truth for a moire grid instance. */
9
+ export declare const defaultMoireGridConfig: MoireGridConfig;
10
+ /**
11
+ * Two overlaid lattices, counter-rotating.
12
+ *
13
+ * Nothing draws the moire pattern — it emerges from where the two line sets
14
+ * nearly coincide, which is why it moves the way real interference does. Small
15
+ * `layerAngle` and `layerScale` values near 1 give the long, slow beats; larger
16
+ * ones break up into fine cross-hatch. `spin` 0 freezes it at `layerAngle`.
17
+ *
18
+ * `shape` picks what the two layers are made of. Rings have no orientation, so
19
+ * for that shape the layers are offset from each other rather than rotated.
20
+ */
21
+ export declare function MoireGrid({ config, groupProps, onObjectReady, onObjectDispose }: MoireGridProps): import("react").JSX.Element;
22
+ export default MoireGrid;
23
+ //# sourceMappingURL=MoireGrid.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MoireGrid.d.ts","sourceRoot":"","sources":["../../src/components/MoireGrid.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAIxD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAG5D,MAAM,WAAW,cAAe,SAAQ,gBAAgB;IACpD,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,UAAU,CAAC,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;CACvC;AAWD,8EAA8E;AAC9E,eAAO,MAAM,sBAAsB,EAAE,eA6BpC,CAAC;AAEF;;;;;;;;;;GAUG;AACH,wBAAgB,SAAS,CAAC,EAAE,MAA+B,EAAE,UAAU,EAAE,aAAa,EAAE,eAAe,EAAE,EAAE,cAAc,+BAkExH;AAED,eAAe,SAAS,CAAC"}
@@ -0,0 +1,76 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useMemo, useRef } from 'react';
3
+ import * as THREE from 'three';
4
+ import { useObjectReady } from '../hooks/useObjectReady.js';
5
+ import { useGridSurface } from '../hooks/useGridSurface.js';
6
+ import { MoireGridMaterial } from '@3driseai/3drise-core';
7
+ // Side-effect import registers <moireGridMaterial> via extend().
8
+ void MoireGridMaterial;
9
+ const SHAPE_INDEX = {
10
+ square: 0,
11
+ hex: 1,
12
+ rings: 2,
13
+ };
14
+ /** MoireGridConfig — the single source of truth for a moire grid instance. */
15
+ export const defaultMoireGridConfig = {
16
+ cellSize: 2.8,
17
+ size: 50,
18
+ segments: undefined,
19
+ flat: true,
20
+ lineMode: 0,
21
+ cellMode: 2, // steady nodes; the interference carries the motion
22
+ lineWidth: 1.4,
23
+ sectionSize: 12,
24
+ sectionWidth: 0,
25
+ animSpeed: 1,
26
+ animScale: 1,
27
+ animIntensity: 1,
28
+ fadeDistance: undefined,
29
+ fadeStrength: 0.7,
30
+ displace: 0,
31
+ shape: 'square',
32
+ layerAngle: 0.05,
33
+ layerScale: 1.06,
34
+ spin: 1,
35
+ lineColor: '#226bd9',
36
+ sectionColor: '#f2599e',
37
+ cellColor: '#0d1a40',
38
+ glowColor: '#99d9ff',
39
+ bgColor: '#02040d',
40
+ bgOpacity: 0,
41
+ followMouse: false,
42
+ reveal: 1,
43
+ revealDuration: 0,
44
+ };
45
+ /**
46
+ * Two overlaid lattices, counter-rotating.
47
+ *
48
+ * Nothing draws the moire pattern — it emerges from where the two line sets
49
+ * nearly coincide, which is why it moves the way real interference does. Small
50
+ * `layerAngle` and `layerScale` values near 1 give the long, slow beats; larger
51
+ * ones break up into fine cross-hatch. `spin` 0 freezes it at `layerAngle`.
52
+ *
53
+ * `shape` picks what the two layers are made of. Rings have no orientation, so
54
+ * for that shape the layers are offset from each other rather than rotated.
55
+ */
56
+ export function MoireGrid({ config = defaultMoireGridConfig, groupProps, onObjectReady, onObjectDispose }) {
57
+ const matRef = useRef(null);
58
+ const rootRef = useRef(null);
59
+ const meshRef = useRef(null);
60
+ useObjectReady(rootRef, config, onObjectReady, onObjectDispose);
61
+ const { cellSize, size, segments, flat, lineMode, cellMode, lineWidth, sectionSize, sectionWidth, animSpeed, animScale, animIntensity, fadeDistance, fadeStrength, displace, shape, layerAngle, layerScale, spin, lineColor, sectionColor, cellColor, glowColor, bgColor, bgOpacity, followMouse, reveal, revealDuration, } = config;
62
+ const segs = segments ?? (displace > 0
63
+ ? Math.min(256, Math.max(64, Math.ceil(size / Math.max(cellSize, 1e-4)) * 2))
64
+ : 1);
65
+ const fade = fadeDistance ?? size * 0.5;
66
+ const colors = useMemo(() => ({
67
+ line: new THREE.Color(lineColor),
68
+ section: new THREE.Color(sectionColor),
69
+ cell: new THREE.Color(cellColor),
70
+ glow: new THREE.Color(glowColor),
71
+ bg: new THREE.Color(bgColor),
72
+ }), [lineColor, sectionColor, cellColor, glowColor, bgColor]);
73
+ useGridSurface(matRef, meshRef, { followMouse, reveal, revealDuration });
74
+ return (_jsx("group", { ref: rootRef, ...groupProps, children: _jsxs("mesh", { ref: meshRef, rotation: flat ? [-Math.PI / 2, 0, 0] : [0, 0, 0], children: [_jsx("planeGeometry", { args: [size, size, segs, segs] }), _jsx("moireGridMaterial", { ref: matRef, transparent: true, depthWrite: false, blending: THREE.AdditiveBlending, side: THREE.DoubleSide, u_cellSize: cellSize, u_lineWidth: lineWidth, u_sectionSize: sectionSize, u_sectionWidth: sectionWidth, u_lineMode: lineMode, u_cellMode: cellMode, u_animSpeed: animSpeed, u_animScale: animScale, u_animIntensity: animIntensity, u_fadeDistance: fade, u_fadeStrength: fadeStrength, u_displace: displace, u_shape: SHAPE_INDEX[shape] ?? 0, u_layerAngle: layerAngle, u_layerScale: layerScale, u_spin: spin, u_lineColor: colors.line, u_sectionColor: colors.section, u_cellColor: colors.cell, u_glowColor: colors.glow, u_bgColor: colors.bg, u_bgOpacity: bgOpacity }, MoireGridMaterial.key)] }) }));
75
+ }
76
+ export default MoireGrid;
@@ -1 +1 @@
1
- {"version":3,"file":"Moon.d.ts","sourceRoot":"","sources":["../../src/components/Moon.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAK7D,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC1D,MAAM,WAAW,SAAU,SAAQ,gBAAgB;IAC/C,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;CAC1C;AAED,YAAY,EAAE,YAAY,EAAE,CAAC;AAG7B,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D,QAAA,MAAM,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,SAAS,CA0D7B,CAAC;AAEF,eAAe,IAAI,CAAC"}
1
+ {"version":3,"file":"Moon.d.ts","sourceRoot":"","sources":["../../src/components/Moon.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAK7D,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC1D,MAAM,WAAW,SAAU,SAAQ,gBAAgB;IAC/C,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;CAC1C;AAED,YAAY,EAAE,YAAY,EAAE,CAAC;AAG7B,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D,QAAA,MAAM,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,SAAS,CAyD7B,CAAC;AAEF,eAAe,IAAI,CAAC"}
@@ -17,7 +17,6 @@ const Moon = ({ settings, sunPosition, onObjectReady, onObjectDispose }) => {
17
17
  loader.setCrossOrigin('anonymous');
18
18
  let cancelled = false;
19
19
  loader.load(MOON_TEXTURE_URL, (loaded) => {
20
- console.log("Moon texture loaded:", loaded);
21
20
  if (!cancelled)
22
21
  setTexture(loaded);
23
22
  }, undefined, () => {
@@ -1,11 +1,10 @@
1
1
  import type { ObjectReadyProps } from "../types/objectReady";
2
2
  import React from "react";
3
3
  import { Object3D } from "three";
4
- import type { CameraState, CreatedObjectSettings, ObjectTreeNode } from "@3driseai/3drise-core";
4
+ import type { CreatedObjectSettings, ObjectTreeNode } from "@3driseai/3drise-core";
5
5
  import { type ThreeEvent } from "@react-three/fiber";
6
6
  type ObjectNodeProps = ObjectReadyProps & {
7
7
  node: ObjectTreeNode;
8
- cameraSettings: CameraState;
9
8
  handleObjectClick?: (object: CreatedObjectSettings, ref: Object3D, event: ThreeEvent<MouseEvent>) => void;
10
9
  };
11
10
  declare const ObjectNode: React.FC<ObjectNodeProps>;
@@ -1 +1 @@
1
- {"version":3,"file":"ObjectNode.d.ts","sourceRoot":"","sources":["../../src/components/ObjectNode.tsx"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,KAAK,EAAE,WAAW,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAChG,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,KAAK,eAAe,GAAG,gBAAgB,GAAG;IACtC,IAAI,EAAE,cAAc,CAAC;IACrB,cAAc,EAAE,WAAW,CAAC;IAC5B,iBAAiB,CAAC,EAAE,CAAC,MAAM,EAAE,qBAAqB,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC;CAC7G,CAAC;AA0BF,QAAA,MAAM,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,eAAe,CA4GzC,CAAC;AACF,eAAe,UAAU,CAAC"}
1
+ {"version":3,"file":"ObjectNode.d.ts","sourceRoot":"","sources":["../../src/components/ObjectNode.tsx"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,KAAK,EAAe,qBAAqB,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAChG,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAErD,KAAK,eAAe,GAAG,gBAAgB,GAAG;IACtC,IAAI,EAAE,cAAc,CAAC;IACrB,iBAAiB,CAAC,EAAE,CAAC,MAAM,EAAE,qBAAqB,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC;CAC7G,CAAC;AAgBF,QAAA,MAAM,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,eAAe,CAyGzC,CAAC;AACF,eAAe,UAAU,CAAC"}
@@ -13,15 +13,7 @@ import LightObject from "./LightObject.js";
13
13
  import EnvironmentObject from "./EnvironmentObject.js";
14
14
  import Galaxy from "./Galaxy.js";
15
15
  import GridGenerator from "./GridsGenerator.js";
16
- const SELF_MANAGED_MATERIAL = new Set([
17
- 'effect',
18
- // 'gallery',
19
- 'earth',
20
- 'space',
21
- 'shootingStars',
22
- 'grid',
23
- // 'moon'
24
- ]);
16
+ import { SELF_MANAGED_MATERIAL } from "../constants.js";
25
17
  // const EffectsLayer: React.FC<{ effects: CreatedObjectSettings['effects'] }> = ({ effects }) =>
26
18
  // effects?.length ? (
27
19
  // <>
@@ -30,14 +22,13 @@ const SELF_MANAGED_MATERIAL = new Set([
30
22
  // ))}
31
23
  // </>
32
24
  // ) : null;
33
- const GroupWithChildren = ({ createdObject, children, cameraSettings, onObjectReady, onObjectDispose, handleObjectClick, renderObject }) => {
25
+ const GroupWithChildren = ({ createdObject, children, onObjectReady, onObjectDispose, handleObjectClick, renderObject }) => {
34
26
  const isGroup = createdObject.type === 'group';
35
27
  const selfManagedMaterial = SELF_MANAGED_MATERIAL.has(createdObject.type);
36
- return (_jsxs(CreatedObject, { createdObject: createdObject, onObjectReady: onObjectReady, onObjectDispose: onObjectDispose, handleObjectClick: handleObjectClick, shouldApply3driseMaterial: !isGroup && !selfManagedMaterial, children: [!isGroup && renderObject(createdObject, handleObjectClick), children.map(childNode => (_jsx(ObjectNode, { node: childNode, cameraSettings: cameraSettings, handleObjectClick: handleObjectClick, onObjectReady: onObjectReady, onObjectDispose: onObjectDispose }, childNode.objectId)))] }, createdObject.id));
28
+ return (_jsxs(CreatedObject, { createdObject: createdObject, onObjectReady: onObjectReady, onObjectDispose: onObjectDispose, handleObjectClick: handleObjectClick, shouldApply3driseMaterial: !isGroup && !selfManagedMaterial, children: [!isGroup && renderObject(createdObject, handleObjectClick), children.map(childNode => (_jsx(ObjectNode, { node: childNode, handleObjectClick: handleObjectClick, onObjectReady: onObjectReady, onObjectDispose: onObjectDispose }, childNode.objectId)))] }, createdObject.id));
37
29
  };
38
- const ObjectNode = ({ node, cameraSettings, onObjectReady, onObjectDispose, handleObjectClick }) => {
30
+ const ObjectNode = ({ node, onObjectReady, onObjectDispose, handleObjectClick }) => {
39
31
  const { children, createdObject } = node;
40
- // console.log(createdObject.meshSettings.name, createdObject.actions, createdObject.mouseMove)
41
32
  // Children describe themselves with their own settings; the scene above
42
33
  // knows them by the node's createdObject, so relabel on the way up.
43
34
  const relabel = useCallback((obj) => ({
@@ -47,7 +38,7 @@ const ObjectNode = ({ node, cameraSettings, onObjectReady, onObjectDispose, hand
47
38
  // Specialized renderers for each object type
48
39
  const renderers = useMemo(() => ({
49
40
  group: () => null,
50
- mesh: (obj, cameraSettings, onObjectReady) => (_jsx(CustomPrimitive, { createdObject: obj, onObjectReady: onObjectReady, onObjectDispose: onObjectDispose, handleObjectClick: handleObjectClick }, obj.id)),
41
+ mesh: (obj, onObjectReady) => (_jsx(CustomPrimitive, { createdObject: obj, onObjectReady: onObjectReady, onObjectDispose: onObjectDispose, handleObjectClick: handleObjectClick }, obj.id)),
51
42
  // water: (obj: CreatedObjectSettings, cameraSettings: CameraState, onObjectReady?: (object: CreatedObjectSettings, ref: Object3D) => void) => (
52
43
  // <Ocean
53
44
  // settings={obj}
@@ -63,7 +54,7 @@ const ObjectNode = ({ node, cameraSettings, onObjectReady, onObjectDispose, hand
63
54
  // settings={obj}
64
55
  // />
65
56
  // ),
66
- model: (obj, cameraSettings, onObjectReady) => (_jsx(CustomPrimitive, { createdObject: obj, onObjectReady: onObjectReady, onObjectDispose: onObjectDispose, handleObjectClick: handleObjectClick }, obj.id)),
57
+ model: (obj, onObjectReady) => (_jsx(CustomPrimitive, { createdObject: obj, onObjectReady: onObjectReady, onObjectDispose: onObjectDispose, handleObjectClick: handleObjectClick }, obj.id)),
67
58
  // custom_primitive: (obj: CreatedObjectSettings, cameraSettings: CameraState, onObjectReady?: (object: CreatedObjectSettings, ref: Object3D) => void) => (
68
59
  // <CustomPrimitive
69
60
  // key={obj.id}
@@ -72,27 +63,27 @@ const ObjectNode = ({ node, cameraSettings, onObjectReady, onObjectDispose, hand
72
63
  // handleObjectClick={handleObjectClick}
73
64
  // />
74
65
  // ),
75
- text: (obj, cameraSettings, onObjectReady) => {
66
+ text: (obj, onObjectReady) => {
76
67
  const renderMode = obj.config?.renderMode ?? 'bitmap';
77
68
  return (_jsx(_Fragment, { children: renderMode === 'text3d'
78
69
  ? _jsx(Text3D, { textSettings: obj, ...relabel(obj) })
79
70
  : _jsx(Text2D, { textSettings: obj, ...relabel(obj) }) }));
80
71
  },
81
- particles: (obj, cameraSettings, onObjectReady) => {
72
+ particles: (obj, onObjectReady) => {
82
73
  const particlesSettings = obj;
83
- return (_jsxs(_Fragment, { children: [particlesSettings.config?.particles && (_jsx(ParticlesR3f, { particlesSettings: particlesSettings, cameraFov: cameraSettings.fov, duration: 1, transitionSettings: particlesSettings.meshSettings, ...relabel(obj) })), particlesSettings.config?.paths && (_jsx(Lines, { createdObject: particlesSettings, ...relabel(obj) }))] }));
74
+ return (_jsxs(_Fragment, { children: [particlesSettings.config?.particles && (_jsx(ParticlesR3f, { particlesSettings: particlesSettings, duration: 1, transitionSettings: particlesSettings.meshSettings, ...relabel(obj) })), particlesSettings.config?.paths && (_jsx(Lines, { createdObject: particlesSettings, ...relabel(obj) }))] }));
84
75
  },
85
- path: (obj, cameraSettings, onObjectReady) => (_jsx(PathRenderer, { pathSettings: obj.config, ...relabel(obj) }, obj.id)),
86
- grid: (obj, cameraSettings, onObjectReady) => (
76
+ path: (obj, onObjectReady) => (_jsx(PathRenderer, { pathSettings: obj.config, ...relabel(obj) }, obj.id)),
77
+ grid: (obj, onObjectReady) => (
87
78
  // <GridHelper {...(obj.config as GridConfig)} side={2} />
88
79
  _jsx(GridGenerator, { config: obj.config, ...relabel(obj) })),
89
80
  effect: (obj) => (_jsx(EffectsGenerator, { settings: {
90
81
  config: obj.config,
91
82
  }, ...relabel(obj) }, obj.id)),
92
- gallery: (obj, cameraSettings, onObjectReady) => (_jsx(GalleryLayout, { createdObject: obj, handleObjectClick: handleObjectClick, ...relabel(obj) })),
93
- light: (obj, cameraSettings, onObjectReady) => (_jsx(LightObject, { createdObject: obj, ...relabel(obj) })),
94
- environment: (obj, cameraSettings, onObjectReady) => (_jsx(EnvironmentObject, { createdObject: obj, onObjectReady: onObjectReady, onObjectDispose: onObjectDispose })),
95
- space: (obj, cameraSettings, onObjectReady) => (_jsx(Galaxy, { createdObject: obj, onObjectReady: onObjectReady, onObjectDispose: onObjectDispose })),
83
+ gallery: (obj, onObjectReady) => (_jsx(GalleryLayout, { createdObject: obj, handleObjectClick: handleObjectClick, ...relabel(obj) })),
84
+ light: (obj, onObjectReady) => (_jsx(LightObject, { createdObject: obj, ...relabel(obj) })),
85
+ environment: (obj, onObjectReady) => (_jsx(EnvironmentObject, { createdObject: obj, onObjectReady: onObjectReady, onObjectDispose: onObjectDispose })),
86
+ space: (obj, onObjectReady) => (_jsx(Galaxy, { createdObject: obj, onObjectReady: onObjectReady, onObjectDispose: onObjectDispose })),
96
87
  // rain: (obj: CreatedObjectSettings, cameraSettings: CameraState, onObjectReady?: (object: CreatedObjectSettings, ref: Object3D) => void) => (
97
88
  // <Rain
98
89
  // settings={obj}
@@ -115,18 +106,16 @@ const ObjectNode = ({ node, cameraSettings, onObjectReady, onObjectDispose, hand
115
106
  // ),
116
107
  }), [handleObjectClick, onObjectReady, onObjectDispose, relabel]);
117
108
  const renderObject = useCallback((obj, handleObjectClick) => {
118
- // console.log('Rendering object:', obj);
119
109
  const renderer = renderers[obj.type];
120
- return renderer?.(obj, cameraSettings, onObjectReady) ?? null;
121
- }, [cameraSettings, onObjectReady, renderers]);
110
+ return renderer?.(obj, onObjectReady) ?? null;
111
+ }, [onObjectReady, renderers]);
122
112
  if (!createdObject) {
123
- console.warn(`createdObject not found.`);
124
113
  return null;
125
114
  }
126
115
  const hasChildren = children.length > 0;
127
116
  const shouldRenderAsGroup = hasChildren || createdObject.type === 'group' || createdObject.type === 'effect';
128
117
  const renderedObject = shouldRenderAsGroup
129
- ? _jsx(GroupWithChildren, { createdObject: createdObject, children: children, cameraSettings: cameraSettings, onObjectReady: onObjectReady, onObjectDispose: onObjectDispose, handleObjectClick: handleObjectClick, renderObject: renderObject })
118
+ ? _jsx(GroupWithChildren, { createdObject: createdObject, children: children, onObjectReady: onObjectReady, onObjectDispose: onObjectDispose, handleObjectClick: handleObjectClick, renderObject: renderObject })
130
119
  : _jsx(CreatedObject, { createdObject: createdObject, onObjectReady: onObjectReady, onObjectDispose: onObjectDispose, handleObjectClick: handleObjectClick, shouldApply3driseMaterial: !SELF_MANAGED_MATERIAL.has(createdObject.type), children: renderObject(createdObject) }, createdObject.id);
131
120
  // createdObject.effects
132
121
  // ? <>
@@ -1,11 +1,10 @@
1
1
  import type { ObjectReadyProps } from '../types/objectReady';
2
2
  import React from "react";
3
3
  import { Object3D } from "three";
4
- import type { CameraState, CreatedObjectSettings } from "@3driseai/3drise-core";
4
+ import type { CreatedObjectSettings } from "@3driseai/3drise-core";
5
5
  import { type ThreeEvent } from "@react-three/fiber";
6
6
  type ObjectNodeApiProps = ObjectReadyProps & {
7
7
  objectId: string;
8
- cameraSettings: CameraState;
9
8
  handleObjectClick?: (object: CreatedObjectSettings, ref: Object3D, event: ThreeEvent<MouseEvent>) => void;
10
9
  };
11
10
  declare const ObjectNodeApi: React.FC<ObjectNodeApiProps>;
@@ -1 +1 @@
1
- {"version":3,"file":"ObjectNodeApi.d.ts","sourceRoot":"","sources":["../../src/components/ObjectNodeApi.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,KAAK,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAChF,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,KAAK,kBAAkB,GAAG,gBAAgB,GAAG;IACzC,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,WAAW,CAAC;IAC5B,iBAAiB,CAAC,EAAE,CAAC,MAAM,EAAE,qBAAqB,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC;CAC7G,CAAC;AAGF,QAAA,MAAM,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC,kBAAkB,CAW/C,CAAC;AACF,eAAe,aAAa,CAAC"}
1
+ {"version":3,"file":"ObjectNodeApi.d.ts","sourceRoot":"","sources":["../../src/components/ObjectNodeApi.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,KAAK,EAAe,qBAAqB,EAAkB,MAAM,uBAAuB,CAAC;AAChG,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,KAAK,kBAAkB,GAAG,gBAAgB,GAAG;IACzC,QAAQ,EAAE,MAAM,CAAC;IACjB,iBAAiB,CAAC,EAAE,CAAC,MAAM,EAAE,qBAAqB,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC;CAC7G,CAAC;AAGF,QAAA,MAAM,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC,kBAAkB,CAc/C,CAAC;AACF,eAAe,aAAa,CAAC"}
@@ -2,17 +2,21 @@ import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { useEffect, useState } from 'react';
3
3
  // import { apiFetch } from '../utils/apiFetch';
4
4
  import ObjectNode from './ObjectNode.js';
5
+ import { useRegisterScene } from '../hooks/useRegisterScene.js';
5
6
  import { dataCenterServer } from '../constants.js';
6
- const ObjectNodeApi = ({ objectId, cameraSettings, onObjectReady, onObjectDispose, handleObjectClick }) => {
7
+ const ObjectNodeApi = ({ objectId, onObjectReady, onObjectDispose, handleObjectClick }) => {
8
+ // Publish the host application's canvas so id-based lookups resolve here
9
+ // too — SceneBuilder is not in this tree to do it.
10
+ useRegisterScene();
7
11
  const [node, setNode] = useState(null);
8
12
  useEffect(() => {
9
13
  fetch(`${dataCenterServer}scene-objects/${objectId}/tree`)
10
14
  .then(res => res.ok ? res.json() : Promise.reject(res.status))
11
15
  .then(({ tree }) => setNode(tree))
12
- .catch(err => console.error('Failed to fetch scene object tree:', err));
16
+ .catch(() => { });
13
17
  }, [objectId]);
14
18
  if (!node)
15
19
  return null;
16
- return (_jsx(ObjectNode, { node: node, cameraSettings: cameraSettings, onObjectReady: onObjectReady, onObjectDispose: onObjectDispose, handleObjectClick: handleObjectClick }));
20
+ return (_jsx(ObjectNode, { node: node, onObjectReady: onObjectReady, onObjectDispose: onObjectDispose, handleObjectClick: handleObjectClick }));
17
21
  };
18
22
  export default ObjectNodeApi;
@@ -1 +1 @@
1
- {"version":3,"file":"ObjectsRenderer.d.ts","sourceRoot":"","sources":["../../src/components/ObjectsRenderer.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAI1H,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,UAAU,oBAAqB,SAAQ,gBAAgB;IACnD,cAAc,EAAE,WAAW,CAAC;IAC5B,qBAAqB,EAAE,qBAAqB,CAAC;IAC7C,cAAc,EAAE,qBAAqB,EAAE,CAAC;IACxC,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;IAC5B,iBAAiB,CAAC,EAAE,CAAC,MAAM,EAAE,qBAAqB,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC;IAC1G,SAAS,CAAC,EAAE,iBAAiB,EAAE,CAAC;CACnC;AAGD,QAAA,MAAM,eAAe,EAAE,KAAK,CAAC,EAAE,CAAC,oBAAoB,CA6ClD,CAAC;AAEH,eAAe,eAAe,CAAC"}
1
+ {"version":3,"file":"ObjectsRenderer.d.ts","sourceRoot":"","sources":["../../src/components/ObjectsRenderer.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAI1H,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,UAAU,oBAAqB,SAAQ,gBAAgB;IACnD,cAAc,EAAE,WAAW,CAAC;IAC5B,qBAAqB,EAAE,qBAAqB,CAAC;IAC7C,cAAc,EAAE,qBAAqB,EAAE,CAAC;IACxC,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;IAC5B,iBAAiB,CAAC,EAAE,CAAC,MAAM,EAAE,qBAAqB,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC;IAC1G,SAAS,CAAC,EAAE,iBAAiB,EAAE,CAAC;CACnC;AAGD,QAAA,MAAM,eAAe,EAAE,KAAK,CAAC,EAAE,CAAC,oBAAoB,CA0ClD,CAAC;AAEH,eAAe,eAAe,CAAC"}
@@ -14,7 +14,6 @@ const ObjectsRenderer = memo(({ cameraSettings, createdObjects, generalObjectSet
14
14
  const handleObjectReady = useCallback((object, ref) => {
15
15
  readyObjectsCount.current += 1;
16
16
  if (readyObjectsCount.current === objectsTree.length) {
17
- console.log("All objects are ready!");
18
17
  onObjectsReady && onObjectsReady();
19
18
  }
20
19
  onObjectReady && onObjectReady(object, ref);
@@ -35,8 +34,6 @@ const ObjectsRenderer = memo(({ cameraSettings, createdObjects, generalObjectSet
35
34
  sequences,
36
35
  });
37
36
  const handleObjectClickHandler = (createdObject, ref, event) => {
38
- console.log('Object clicked:', createdObject.meshSettings.name);
39
- console.log('Object ref:', ref);
40
37
  const clickInteractions = filterInteractionsByEvent(createdObject.actions, "click");
41
38
  clickInteractions.forEach((interaction) => {
42
39
  executeInteraction({ interaction, ref, createdObject });
@@ -45,7 +42,7 @@ const ObjectsRenderer = memo(({ cameraSettings, createdObjects, generalObjectSet
45
42
  handleObjectClick(createdObject, ref, event);
46
43
  }
47
44
  };
48
- return (_jsx("group", { ref: groupRef, name: "main-objects", position: generalObjectSettings.meshSettings.position, rotation: generalObjectSettings.meshSettings.rotation, scale: generalObjectSettings.meshSettings.scale, children: objectsTree.map(node => (_jsx(ObjectNode, { node: node, cameraSettings: cameraSettings, onObjectReady: handleObjectReady, onObjectDispose: handleObjectDispose, handleObjectClick: handleObjectClickHandler }, node.objectId))) }));
45
+ return (_jsx("group", { ref: groupRef, name: "main-objects", position: generalObjectSettings.meshSettings.position, rotation: generalObjectSettings.meshSettings.rotation, scale: generalObjectSettings.meshSettings.scale, children: objectsTree.map(node => (_jsx(ObjectNode, { node: node, onObjectReady: handleObjectReady, onObjectDispose: handleObjectDispose, handleObjectClick: handleObjectClickHandler }, node.objectId))) }));
49
46
  });
50
47
  ObjectsRenderer.displayName = 'ObjectsRenderer';
51
48
  export default ObjectsRenderer;
@@ -1 +1 @@
1
- {"version":3,"file":"ObjectsRendererApi.d.ts","sourceRoot":"","sources":["../../src/components/ObjectsRendererApi.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAG7D,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,qBAAqB,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAClG,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjC,MAAM,WAAW,uBAAwB,SAAQ,gBAAgB;IAC7D,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,cAAc,EAAE,WAAW,CAAC;IAC5B,qBAAqB,EAAE,qBAAqB,CAAC;IAC7C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;IAC5B,iBAAiB,CAAC,EAAE,CAAC,MAAM,EAAE,qBAAqB,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC;IAC1G,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACjC,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,KAAK,IAAI,CAAC;CAC5C;AAGD;;;;;;;;;;;;;GAaG;AACH,QAAA,MAAM,kBAAkB,EAAE,KAAK,CAAC,EAAE,CAAC,uBAAuB,CAyDzD,CAAC;AACF,eAAe,kBAAkB,CAAC"}
1
+ {"version":3,"file":"ObjectsRendererApi.d.ts","sourceRoot":"","sources":["../../src/components/ObjectsRendererApi.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAI7D,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,qBAAqB,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAClG,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjC,MAAM,WAAW,uBAAwB,SAAQ,gBAAgB;IAC7D,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,cAAc,EAAE,WAAW,CAAC;IAC5B,qBAAqB,EAAE,qBAAqB,CAAC;IAC7C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;IAC5B,iBAAiB,CAAC,EAAE,CAAC,MAAM,EAAE,qBAAqB,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC;IAC1G,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACjC,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,KAAK,IAAI,CAAC;CAC5C;AAGD;;;;;;;;;;;;;GAaG;AACH,QAAA,MAAM,kBAAkB,EAAE,KAAK,CAAC,EAAE,CAAC,uBAAuB,CA0DzD,CAAC;AACF,eAAe,kBAAkB,CAAC"}
@@ -1,6 +1,7 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { useEffect, useState } from 'react';
3
3
  import ObjectsRenderer from './ObjectsRenderer.js';
4
+ import { useRegisterScene } from '../hooks/useRegisterScene.js';
4
5
  /**
5
6
  * ObjectsRendererApi
6
7
  *
@@ -16,6 +17,9 @@ import ObjectsRenderer from './ObjectsRenderer.js';
16
17
  * />
17
18
  */
18
19
  const ObjectsRendererApi = ({ objectIds, cameraSettings, generalObjectSettings, apiBaseUrl = 'http://localhost:3001', onObjectsReady, handleObjectClick, onError, onLoading, onObjectReady, onObjectDispose, }) => {
20
+ // Publish the host application's canvas so id-based lookups resolve here
21
+ // too — SceneBuilder is not in this tree to do it.
22
+ useRegisterScene();
19
23
  const [createdObjects, setCreatedObjects] = useState([]);
20
24
  const [isLoading, setIsLoading] = useState(true);
21
25
  const [error, setError] = useState(null);
@@ -59,7 +63,6 @@ const ObjectsRendererApi = ({ objectIds, cameraSettings, generalObjectSettings,
59
63
  onError?.(error);
60
64
  setIsLoading(false);
61
65
  onLoading?.(false);
62
- console.error('Failed to fetch scene objects:', error);
63
66
  }
64
67
  };
65
68
  fetchObjects();
@@ -68,7 +71,6 @@ const ObjectsRendererApi = ({ objectIds, cameraSettings, generalObjectSettings,
68
71
  return (_jsx("group", { children: _jsxs("mesh", { position: [0, 0, 0], children: [_jsx("sphereGeometry", { args: [0.5, 32, 32] }), _jsx("meshStandardMaterial", { color: 0x00ff00, wireframe: true })] }) }));
69
72
  }
70
73
  if (error) {
71
- console.error('ObjectsRendererApi Error:', error);
72
74
  return (_jsx("group", { children: _jsxs("mesh", { position: [0, 0, 0], children: [_jsx("sphereGeometry", { args: [0.5, 32, 32] }), _jsx("meshStandardMaterial", { color: 0xff0000, wireframe: true })] }) }));
73
75
  }
74
76
  return (_jsx(ObjectsRenderer, { cameraSettings: cameraSettings, createdObjects: createdObjects, generalObjectSettings: generalObjectSettings, onObjectsReady: onObjectsReady, handleObjectClick: handleObjectClick, onObjectReady: onObjectReady, onObjectDispose: onObjectDispose }));
@@ -1 +1 @@
1
- {"version":3,"file":"Ocean.d.ts","sourceRoot":"","sources":["../../src/components/Ocean.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAU7D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AACnE,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,MAAM,WAAW,UAAW,SAAQ,gBAAgB;IAChD,QAAQ,EAAE,qBAAqB,CAAC;CACnC;AAGD,QAAA,MAAM,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC,UAAU,CA8J/B,CAAC;AACF,eAAe,KAAK,CAAC"}
1
+ {"version":3,"file":"Ocean.d.ts","sourceRoot":"","sources":["../../src/components/Ocean.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAU7D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AACnE,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,MAAM,WAAW,UAAW,SAAQ,gBAAgB;IAChD,QAAQ,EAAE,qBAAqB,CAAC;CACnC;AAGD,QAAA,MAAM,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC,UAAU,CA6J/B,CAAC;AACF,eAAe,KAAK,CAAC"}
@@ -26,7 +26,7 @@ const Ocean = ({ settings, onObjectReady, onObjectDispose }) => {
26
26
  const position = meshSettings.position || [0, -1, 0];
27
27
  const rotation = meshSettings.rotation || [-Math.PI / 2, 0, 0];
28
28
  const scale = meshSettings.scale || 1;
29
- useMaterialApplication(meshSettings.visible ? meshRef.current : null, materialSettings);
29
+ useMaterialApplication(meshSettings.visible ? meshRef : null, materialSettings);
30
30
  useWaterEnvironment(meshSettings.visible ? meshRef : { current: null });
31
31
  useWaterReflections(meshSettings.visible ? meshRef : { current: null }, {
32
32
  waterPosition: new THREE.Vector3(...position),
@@ -136,7 +136,6 @@ const Ocean = ({ settings, onObjectReady, onObjectDispose }) => {
136
136
  }
137
137
  }
138
138
  }
139
- // ── PER-DOMAIN ANIMATIONS ───────────────────────────────────────────────
140
139
  const now = Date.now();
141
140
  const transformAnims = animations?.transform?.animations;
142
141
  if (transformAnims?.length) {
@@ -146,7 +145,6 @@ const Ocean = ({ settings, onObjectReady, onObjectDispose }) => {
146
145
  if (materialAnims?.length) {
147
146
  handleMaterialAnimations({ object: mesh, materialSettings: materialSettings, startValuesCache: matAnimCacheRef.current }, materialAnims, now, false);
148
147
  }
149
- // ── PER-DOMAIN MOUSE-MOVE ───────────────────────────────────────────────
150
148
  const mm = mouseMove;
151
149
  const isPerDomain = mm && ('transform' in mm || 'material' in mm);
152
150
  if (isPerDomain) {
@@ -159,7 +157,6 @@ const Ocean = ({ settings, onObjectReady, onObjectDispose }) => {
159
157
  }
160
158
  }
161
159
  });
162
- // console.log(rotation)
163
160
  return (_jsx("mesh", { ref: meshRef,
164
161
  // name={settings.meshSettings.name || 'Water'}
165
162
  // position={position}
@@ -3,7 +3,6 @@ import type { ParticlesSettings } from '@3driseai/3drise-core';
3
3
  import React from "react";
4
4
  interface ParticlesR3fProps extends ObjectReadyProps {
5
5
  particlesSettings: ParticlesSettings;
6
- cameraFov?: number;
7
6
  duration?: number;
8
7
  transitionSettings?: Record<string, unknown>;
9
8
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ParticlesR3f.d.ts","sourceRoot":"","sources":["../../src/components/ParticlesR3f.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAO7D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE/D,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,UAAU,iBAAkB,SAAQ,gBAAgB;IAChD,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kBAAkB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChD;AAMD,QAAA,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CAkG7C,CAAC;AACF,eAAe,YAAY,CAAC"}
1
+ {"version":3,"file":"ParticlesR3f.d.ts","sourceRoot":"","sources":["../../src/components/ParticlesR3f.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAO7D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAG/D,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,UAAU,iBAAkB,SAAQ,gBAAgB;IAChD,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kBAAkB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChD;AAMD,QAAA,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CAoJ7C,CAAC;AACF,eAAe,YAAY,CAAC"}
@@ -5,8 +5,9 @@ import { useFrame } from '@react-three/fiber';
5
5
  import { useParticlePositions } from '../hooks/useParticlePositions.js';
6
6
  import { useParticlesColors } from '../hooks/useParticlesColors.js';
7
7
  import { useParticlesTextures } from '../hooks/useParticlesTextures.js';
8
- import { handleShapeAnimation, buildShaderEffectsMaterial, structureKey } from '@3driseai/3drise-core';
8
+ import { handleShapeAnimation, buildShaderEffectsMaterial, structureKey, SELF_OWNED_MATERIAL_KEY, applyVertexEffects, partitionShaderEffects, LOCAL_POINTER_SCALE } from '@3driseai/3drise-core';
9
9
  import { update3driseShaderUniforms } from '../hooks/use3driseShader.js';
10
+ import { ownsShaderEffectsMaterial } from '../utils/pointsMaterialOwnership.js';
10
11
  function normalizeEffects(raw) {
11
12
  return Array.isArray(raw) ? raw : [];
12
13
  }
@@ -71,42 +72,92 @@ const ParticlesR3f = ({ particlesSettings, duration = 1, transitionSettings, onO
71
72
  const activeEffects = useMemo(() => normalizeEffects(particlesSettings.animations?.material?.shaderEffects), [particlesSettings.animations?.material?.shaderEffects]);
72
73
  const pointerRadius = particlesSettings.animations?.material
73
74
  ?.shaderEffectsPointerRadius ?? 0.4;
74
- const effectsKey = useMemo(() => structureKey(activeEffects), [activeEffects]);
75
- const material = useMemo(() => buildShaderEffectsMaterial({
76
- effects: activeEffects,
75
+ // Position effects displace the geometry from the CPU and leave `.material`
76
+ // alone, so they compose with any material. Only the rest still need the
77
+ // shader shell — and only the shell takes ownership of `.material`.
78
+ const { position: positionEffects, shell: shellEffects } = useMemo(() => partitionShaderEffects(activeEffects), [activeEffects]);
79
+ const hasPositionEffects = positionEffects.some(effect => effect.enabled);
80
+ const effectsKey = useMemo(() => structureKey(shellEffects), [shellEffects]);
81
+ const ownsMaterial = ownsShaderEffectsMaterial(particlesSettings.materialSettings, shellEffects);
82
+ const material = useMemo(() => ownsMaterial ? buildShaderEffectsMaterial({
83
+ effects: shellEffects,
77
84
  initialColor: color,
78
85
  initialOpacity: opacity,
79
86
  initialPointSize: pointSize,
80
87
  initialParticleUVScale: particleUVScale,
81
88
  initialPointerEffectRadius: pointerRadius,
82
- }),
89
+ }) : null,
83
90
  // Rebuild when the structural set of effects changes; not on parameter tweaks.
84
91
  // eslint-disable-next-line react-hooks/exhaustive-deps
85
- [effectsKey]);
92
+ [effectsKey, ownsMaterial]);
93
+ // With position effects on, the attribute gets its own buffer: the shape
94
+ // animation writes this frame's morph into it, and the effects displace from
95
+ // a snapshot of that into the same buffer. Without a separate buffer the
96
+ // shape animation would read back its own displaced output next frame.
97
+ const displayPositions = useMemo(() => (hasPositionEffects && basePositions.current
98
+ ? new Float32Array(basePositions.current)
99
+ : basePositions.current), [hasPositionEffects, basePositions.current]);
100
+ const frameBaseRef = useRef(null);
86
101
  useEffect(() => {
87
102
  materialRef.current = material;
88
103
  return () => {
89
- material.dispose();
104
+ material?.dispose();
90
105
  };
91
106
  }, [material]);
107
+ // Tell useMaterialApplication's traversal to leave this object alone while we
108
+ // own its material. Set imperatively rather than through a `userData` prop:
109
+ // R3F replaces the whole object on every render, which would wipe the
110
+ // applyTexture handle stashed above.
111
+ useEffect(() => {
112
+ const points = pointsRef.current;
113
+ if (!points)
114
+ return;
115
+ points.userData[SELF_OWNED_MATERIAL_KEY] = ownsMaterial;
116
+ return () => {
117
+ if (points.userData)
118
+ delete points.userData[SELF_OWNED_MATERIAL_KEY];
119
+ };
120
+ }, [ownsMaterial]);
92
121
  useFrame((state, delta) => {
93
- const mat = materialRef.current;
94
- if (!mat || !pointsRef.current || !basePositions.current)
122
+ if (!pointsRef.current || !basePositions.current)
95
123
  return;
124
+ const mat = materialRef.current;
96
125
  if (meshSettings.visible) {
126
+ // Geometry animation is independent of who owns the material.
97
127
  handleShapeAnimation(delta, speed, animationProgress, pointsRef, basePositions, targetPositions);
98
- handleColorsAnimation(materialRef, delta, speed);
128
+ if (mat)
129
+ handleColorsAnimation(materialRef, delta, speed);
99
130
  }
131
+ if (hasPositionEffects && displayPositions && displayPositions !== basePositions.current) {
132
+ if (!frameBaseRef.current || frameBaseRef.current.length !== displayPositions.length)
133
+ frameBaseRef.current = new Float32Array(displayPositions.length);
134
+ // Snapshot the shape-animated positions as this frame's baseline so
135
+ // the effects do not compound over time.
136
+ frameBaseRef.current.set(displayPositions);
137
+ const moved = applyVertexEffects(frameBaseRef.current, displayPositions, positionEffects, {
138
+ time: state.clock.getElapsedTime(),
139
+ pointerX: state.pointer.x * LOCAL_POINTER_SCALE,
140
+ pointerY: state.pointer.y * LOCAL_POINTER_SCALE,
141
+ pointerRadius: pointerRadius * LOCAL_POINTER_SCALE,
142
+ });
143
+ if (moved) {
144
+ const attribute = pointsRef.current.geometry?.attributes?.position;
145
+ if (attribute)
146
+ attribute.needsUpdate = true;
147
+ }
148
+ }
149
+ if (!mat)
150
+ return;
100
151
  if (prevTexture.current)
101
152
  mat.uniforms.uTexture.value = prevTexture.current;
102
153
  if (currentTexture.current)
103
154
  mat.uniforms.uTargetTexture.value = currentTexture.current;
104
155
  mat.uniforms.uHasTexture.value = !!currentTexture.current;
105
156
  handleTextureAnimation(materialRef, delta, speed);
106
- update3driseShaderUniforms(mat.uniforms, activeEffects, state.clock.getElapsedTime(), { x: state.pointer.x, y: state.pointer.y }, { pointerRadius });
157
+ update3driseShaderUniforms(mat.uniforms, shellEffects, state.clock.getElapsedTime(), { x: state.pointer.x, y: state.pointer.y }, { pointerRadius });
107
158
  });
108
159
  if (!basePositions.current)
109
160
  return null;
110
- return (_jsxs("points", { name: name, ref: pointsRef, raycast: () => null, position: [0, 0, 0], rotation: [0, 0, 0], scale: [1, 1, 1], children: [_jsxs("bufferGeometry", { children: [_jsx("bufferAttribute", { attach: "attributes-position", count: basePositions.current.length / 3, array: basePositions.current, itemSize: 3, args: [basePositions.current, 3] }), uvs && (_jsx("bufferAttribute", { attach: "attributes-aUV", count: uvs.length / 2, array: uvs, itemSize: 2, args: [uvs, 2] }))] }), _jsx("primitive", { object: material, attach: "material" })] }));
161
+ return (_jsxs("points", { name: name, ref: pointsRef, raycast: () => null, position: [0, 0, 0], rotation: [0, 0, 0], scale: [1, 1, 1], children: [_jsxs("bufferGeometry", { children: [_jsx("bufferAttribute", { attach: "attributes-position", count: (displayPositions ?? basePositions.current).length / 3, array: displayPositions ?? basePositions.current, itemSize: 3, args: [displayPositions ?? basePositions.current, 3] }), uvs && (_jsx("bufferAttribute", { attach: "attributes-aUV", count: uvs.length / 2, array: uvs, itemSize: 2, args: [uvs, 2] }))] }), material && _jsx("primitive", { object: material, attach: "material" })] }));
111
162
  };
112
163
  export default ParticlesR3f;
@@ -1 +1 @@
1
- {"version":3,"file":"PathRenderer.d.ts","sourceRoot":"","sources":["../../src/components/PathRenderer.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAI7D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAExD,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,MAAM,WAAW,iBAAkB,SAAQ,gBAAgB;IACvD,YAAY,EAAE,UAAU,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;CACvB;AAGD,QAAA,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CA+B7C,CAAC;AACF,eAAe,YAAY,CAAC"}
1
+ {"version":3,"file":"PathRenderer.d.ts","sourceRoot":"","sources":["../../src/components/PathRenderer.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAI7D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAExD,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,MAAM,WAAW,iBAAkB,SAAQ,gBAAgB;IACvD,YAAY,EAAE,UAAU,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;CACvB;AAGD,QAAA,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CA8B7C,CAAC;AACF,eAAe,YAAY,CAAC"}
@@ -8,7 +8,6 @@ import PathGeometry from './PathGeometry.js';
8
8
  const PathRenderer = ({ pathSettings, color = '#ffa500', showPoints = true, showLine = true, showCurve = true, onObjectReady, onObjectDispose, }) => {
9
9
  const rootRef = useRef(null);
10
10
  useObjectReady(rootRef, pathSettings, onObjectReady, onObjectDispose);
11
- console.log("Rendering Path with settings:", pathSettings);
12
11
  const pointSize = pathSettings.pointSize ?? 0.1;
13
12
  const lineWidth = pathSettings.lineWidth ?? 2;
14
13
  const points = pathSettings?.points || [];
@@ -1 +1 @@
1
- {"version":3,"file":"PointCloud.d.ts","sourceRoot":"","sources":["../../src/components/PointCloud.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAM7D,OAAO,KAAK,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEhF,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,UAAU,eAAgB,SAAQ,gBAAgB;IAC9C,SAAS,EAAE,YAAY,CAAC;IACxB,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,UAAU,CAAC,EAAE,gBAAgB,CAAC;CACjC;AAyBD,QAAA,MAAM,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,eAAe,CAmFzC,CAAC;AACF,eAAe,UAAU,CAAC"}
1
+ {"version":3,"file":"PointCloud.d.ts","sourceRoot":"","sources":["../../src/components/PointCloud.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAO7D,OAAO,KAAK,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEhF,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,UAAU,eAAgB,SAAQ,gBAAgB;IAC9C,SAAS,EAAE,YAAY,CAAC;IACxB,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,UAAU,CAAC,EAAE,gBAAgB,CAAC;CACjC;AAyBD,QAAA,MAAM,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,eAAe,CA0HzC,CAAC;AACF,eAAe,UAAU,CAAC"}