@3driseai/3drise-viewer 0.1.25 → 0.1.27

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 (509) hide show
  1. package/dist/animationsV2/ClipPlayer.d.ts +16 -0
  2. package/dist/animationsV2/ClipPlayer.d.ts.map +1 -0
  3. package/dist/animationsV2/ClipPlayer.js +199 -0
  4. package/dist/animationsV2/ClipsRuntime.d.ts +150 -0
  5. package/dist/animationsV2/ClipsRuntime.d.ts.map +1 -0
  6. package/dist/animationsV2/ClipsRuntime.js +707 -0
  7. package/dist/animationsV2/appliers.d.ts +21 -0
  8. package/dist/animationsV2/appliers.d.ts.map +1 -0
  9. package/dist/animationsV2/appliers.js +222 -0
  10. package/dist/animationsV2/clipUtils.d.ts +33 -0
  11. package/dist/animationsV2/clipUtils.d.ts.map +1 -0
  12. package/dist/animationsV2/clipUtils.js +164 -0
  13. package/dist/animationsV2/elementSettings.d.ts +15 -0
  14. package/dist/animationsV2/elementSettings.d.ts.map +1 -0
  15. package/dist/animationsV2/elementSettings.js +16 -0
  16. package/dist/animationsV2/index.d.ts +16 -0
  17. package/dist/animationsV2/index.d.ts.map +1 -0
  18. package/dist/animationsV2/index.js +12 -0
  19. package/dist/animationsV2/nodeTracks.d.ts +13 -0
  20. package/dist/animationsV2/nodeTracks.d.ts.map +1 -0
  21. package/dist/animationsV2/nodeTracks.js +165 -0
  22. package/dist/animationsV2/normalize.d.ts +4 -0
  23. package/dist/animationsV2/normalize.d.ts.map +1 -0
  24. package/dist/animationsV2/normalize.js +60 -0
  25. package/dist/animationsV2/sequenceUtils.d.ts +98 -0
  26. package/dist/animationsV2/sequenceUtils.d.ts.map +1 -0
  27. package/dist/animationsV2/sequenceUtils.js +220 -0
  28. package/dist/animationsV2/types.d.ts +115 -0
  29. package/dist/animationsV2/types.d.ts.map +1 -0
  30. package/dist/animationsV2/types.js +8 -0
  31. package/dist/api/sceneHandle.d.ts +56 -17
  32. package/dist/api/sceneHandle.d.ts.map +1 -1
  33. package/dist/api/sceneHandle.js +154 -77
  34. package/dist/components/AdvancedGrid.d.ts +8 -2
  35. package/dist/components/AdvancedGrid.d.ts.map +1 -1
  36. package/dist/components/AdvancedGrid.js +31 -14
  37. package/dist/components/AnimatedObject.d.ts.map +1 -1
  38. package/dist/components/AnimatedObject.js +7 -5
  39. package/dist/components/Bubbles.d.ts +7 -1
  40. package/dist/components/Bubbles.d.ts.map +1 -1
  41. package/dist/components/Bubbles.js +42 -22
  42. package/dist/components/CameraController.d.ts.map +1 -1
  43. package/dist/components/CameraController.js +0 -44
  44. package/dist/components/ChladniGrid.d.ts +8 -4
  45. package/dist/components/ChladniGrid.d.ts.map +1 -1
  46. package/dist/components/ChladniGrid.js +31 -13
  47. package/dist/components/CircuitGrid.d.ts +8 -11
  48. package/dist/components/CircuitGrid.d.ts.map +1 -1
  49. package/dist/components/CircuitGrid.js +31 -13
  50. package/dist/components/Clouds.d.ts.map +1 -1
  51. package/dist/components/Clouds.js +0 -34
  52. package/dist/components/CloudsGenerator.d.ts +1 -1
  53. package/dist/components/CloudsGenerator.js +1 -1
  54. package/dist/components/ContourGrid.d.ts +8 -14
  55. package/dist/components/ContourGrid.d.ts.map +1 -1
  56. package/dist/components/ContourGrid.js +31 -13
  57. package/dist/components/CreatedObject.d.ts.map +1 -1
  58. package/dist/components/CreatedObject.js +19 -1
  59. package/dist/components/EffectsGenerator.d.ts +7 -1
  60. package/dist/components/EffectsGenerator.d.ts.map +1 -1
  61. package/dist/components/EffectsGenerator.js +39 -38
  62. package/dist/components/EnvironmentManager.d.ts +4 -4
  63. package/dist/components/EnvironmentManager.d.ts.map +1 -1
  64. package/dist/components/EnvironmentManager.js +1 -1
  65. package/dist/components/FlowNetGrid.d.ts +8 -4
  66. package/dist/components/FlowNetGrid.d.ts.map +1 -1
  67. package/dist/components/FlowNetGrid.js +31 -13
  68. package/dist/components/FractalGrid.d.ts +8 -12
  69. package/dist/components/FractalGrid.d.ts.map +1 -1
  70. package/dist/components/FractalGrid.js +31 -13
  71. package/dist/components/GirihGrid.d.ts +8 -1
  72. package/dist/components/GirihGrid.d.ts.map +1 -1
  73. package/dist/components/GirihGrid.js +31 -13
  74. package/dist/components/Glyphs.d.ts +7 -1
  75. package/dist/components/Glyphs.d.ts.map +1 -1
  76. package/dist/components/Glyphs.js +40 -34
  77. package/dist/components/GravWaveGrid.d.ts +8 -1
  78. package/dist/components/GravWaveGrid.d.ts.map +1 -1
  79. package/dist/components/GravWaveGrid.js +31 -13
  80. package/dist/components/GridsGenerator.d.ts +7 -1
  81. package/dist/components/GridsGenerator.d.ts.map +1 -1
  82. package/dist/components/GridsGenerator.js +20 -18
  83. package/dist/components/HexGrid.d.ts +8 -10
  84. package/dist/components/HexGrid.d.ts.map +1 -1
  85. package/dist/components/HexGrid.js +31 -13
  86. package/dist/components/HyperbolicGrid.d.ts +8 -4
  87. package/dist/components/HyperbolicGrid.d.ts.map +1 -1
  88. package/dist/components/HyperbolicGrid.js +31 -13
  89. package/dist/components/LandscapeBuilder.d.ts +1 -1
  90. package/dist/components/LandscapeBuilder.d.ts.map +1 -1
  91. package/dist/components/LandscapeBuilder.js +1 -1
  92. package/dist/components/LandscapeObject.d.ts +1 -1
  93. package/dist/components/LandscapeObject.d.ts.map +1 -1
  94. package/dist/components/LandscapeObject.js +1 -1
  95. package/dist/components/MoireGrid.d.ts +8 -12
  96. package/dist/components/MoireGrid.d.ts.map +1 -1
  97. package/dist/components/MoireGrid.js +31 -13
  98. package/dist/components/ObjectNode.d.ts.map +1 -1
  99. package/dist/components/ObjectNode.js +2 -2
  100. package/dist/components/ObjectsRenderer.d.ts +4 -1
  101. package/dist/components/ObjectsRenderer.d.ts.map +1 -1
  102. package/dist/components/ObjectsRenderer.js +57 -3
  103. package/dist/components/Ocean.d.ts.map +1 -1
  104. package/dist/components/Ocean.js +0 -63
  105. package/dist/components/OceanBuilder.d.ts +1 -1
  106. package/dist/components/OceanBuilder.js +1 -1
  107. package/dist/components/ParticlesGenerator.d.ts.map +1 -1
  108. package/dist/components/ParticlesGenerator.js +6 -0
  109. package/dist/components/QuasiGrid.d.ts +8 -11
  110. package/dist/components/QuasiGrid.d.ts.map +1 -1
  111. package/dist/components/QuasiGrid.js +31 -13
  112. package/dist/components/RadarGrid.d.ts +8 -13
  113. package/dist/components/RadarGrid.d.ts.map +1 -1
  114. package/dist/components/RadarGrid.js +31 -13
  115. package/dist/components/ReactionDiffusionGrid.d.ts +8 -1
  116. package/dist/components/ReactionDiffusionGrid.d.ts.map +1 -1
  117. package/dist/components/ReactionDiffusionGrid.js +33 -139
  118. package/dist/components/SceneBuilder.d.ts.map +1 -1
  119. package/dist/components/SceneBuilder.js +19 -4
  120. package/dist/components/SkyController.d.ts.map +1 -1
  121. package/dist/components/SkyController.js +0 -39
  122. package/dist/components/SkySystem.d.ts +1 -1
  123. package/dist/components/SparklesBurst.d.ts +7 -1
  124. package/dist/components/SparklesBurst.d.ts.map +1 -1
  125. package/dist/components/SparklesBurst.js +31 -28
  126. package/dist/components/Stars.d.ts.map +1 -1
  127. package/dist/components/Stars.js +3 -47
  128. package/dist/components/TerrainBuilder.d.ts +1 -1
  129. package/dist/components/TerrainBuilder.d.ts.map +1 -1
  130. package/dist/components/TerrainBuilder.js +1 -1
  131. package/dist/components/VoronoiGrid.d.ts +8 -10
  132. package/dist/components/VoronoiGrid.d.ts.map +1 -1
  133. package/dist/components/VoronoiGrid.js +31 -13
  134. package/dist/components/WallpaperGrid.d.ts +8 -1
  135. package/dist/components/WallpaperGrid.d.ts.map +1 -1
  136. package/dist/components/WallpaperGrid.js +33 -210
  137. package/dist/components/effects/AuraEffect.d.ts +8 -3
  138. package/dist/components/effects/AuraEffect.d.ts.map +1 -1
  139. package/dist/components/effects/AuraEffect.js +49 -24
  140. package/dist/components/effects/AuroraEffect.d.ts +8 -3
  141. package/dist/components/effects/AuroraEffect.d.ts.map +1 -1
  142. package/dist/components/effects/AuroraEffect.js +45 -25
  143. package/dist/components/effects/BlackHoleEffect.d.ts +8 -3
  144. package/dist/components/effects/BlackHoleEffect.d.ts.map +1 -1
  145. package/dist/components/effects/BlackHoleEffect.js +42 -21
  146. package/dist/components/effects/ConstellationEffect.d.ts +8 -3
  147. package/dist/components/effects/ConstellationEffect.d.ts.map +1 -1
  148. package/dist/components/effects/ConstellationEffect.js +49 -23
  149. package/dist/components/effects/DandelionSeedsEffect.d.ts +7 -2
  150. package/dist/components/effects/DandelionSeedsEffect.d.ts.map +1 -1
  151. package/dist/components/effects/DandelionSeedsEffect.js +19 -9
  152. package/dist/components/effects/DataStreamEffect.d.ts +8 -3
  153. package/dist/components/effects/DataStreamEffect.d.ts.map +1 -1
  154. package/dist/components/effects/DataStreamEffect.js +54 -26
  155. package/dist/components/effects/DnaHelixEffect.d.ts +8 -3
  156. package/dist/components/effects/DnaHelixEffect.d.ts.map +1 -1
  157. package/dist/components/effects/DnaHelixEffect.js +62 -30
  158. package/dist/components/effects/FallingLeavesEffect.d.ts +7 -2
  159. package/dist/components/effects/FallingLeavesEffect.d.ts.map +1 -1
  160. package/dist/components/effects/FallingLeavesEffect.js +19 -9
  161. package/dist/components/effects/FieldLinesEffect.d.ts +8 -3
  162. package/dist/components/effects/FieldLinesEffect.d.ts.map +1 -1
  163. package/dist/components/effects/FieldLinesEffect.js +30 -20
  164. package/dist/components/effects/Fire.d.ts +8 -3
  165. package/dist/components/effects/Fire.d.ts.map +1 -1
  166. package/dist/components/effects/Fire.js +47 -10
  167. package/dist/components/effects/FireflySwarmEffect.d.ts +7 -2
  168. package/dist/components/effects/FireflySwarmEffect.d.ts.map +1 -1
  169. package/dist/components/effects/FireflySwarmEffect.js +19 -9
  170. package/dist/components/effects/Flares.d.ts +10 -3
  171. package/dist/components/effects/Flares.d.ts.map +1 -1
  172. package/dist/components/effects/Flares.js +53 -56
  173. package/dist/components/effects/ForcefieldEffect.d.ts +8 -3
  174. package/dist/components/effects/ForcefieldEffect.d.ts.map +1 -1
  175. package/dist/components/effects/ForcefieldEffect.js +52 -33
  176. package/dist/components/effects/GalaxyEffect.d.ts +7 -2
  177. package/dist/components/effects/GalaxyEffect.d.ts.map +1 -1
  178. package/dist/components/effects/GalaxyEffect.js +19 -9
  179. package/dist/components/effects/HarmonicShellEffect.d.ts +8 -3
  180. package/dist/components/effects/HarmonicShellEffect.d.ts.map +1 -1
  181. package/dist/components/effects/HarmonicShellEffect.js +30 -22
  182. package/dist/components/effects/HologramEffect.d.ts +8 -3
  183. package/dist/components/effects/HologramEffect.d.ts.map +1 -1
  184. package/dist/components/effects/HologramEffect.js +52 -23
  185. package/dist/components/effects/IceCrystalsEffect.d.ts +8 -3
  186. package/dist/components/effects/IceCrystalsEffect.d.ts.map +1 -1
  187. package/dist/components/effects/IceCrystalsEffect.js +36 -21
  188. package/dist/components/effects/IceHaloEffect.d.ts +7 -2
  189. package/dist/components/effects/IceHaloEffect.d.ts.map +1 -1
  190. package/dist/components/effects/IceHaloEffect.js +19 -9
  191. package/dist/components/effects/LichtenbergEffect.d.ts +7 -2
  192. package/dist/components/effects/LichtenbergEffect.d.ts.map +1 -1
  193. package/dist/components/effects/LichtenbergEffect.js +19 -9
  194. package/dist/components/effects/LightningEffect.d.ts +8 -3
  195. package/dist/components/effects/LightningEffect.d.ts.map +1 -1
  196. package/dist/components/effects/LightningEffect.js +54 -32
  197. package/dist/components/effects/MoleculesEffect.d.ts +8 -3
  198. package/dist/components/effects/MoleculesEffect.d.ts.map +1 -1
  199. package/dist/components/effects/MoleculesEffect.js +31 -21
  200. package/dist/components/effects/MurmurationEffect.d.ts +7 -2
  201. package/dist/components/effects/MurmurationEffect.d.ts.map +1 -1
  202. package/dist/components/effects/MurmurationEffect.js +19 -9
  203. package/dist/components/effects/NeuralNetworkEffect.d.ts +8 -3
  204. package/dist/components/effects/NeuralNetworkEffect.d.ts.map +1 -1
  205. package/dist/components/effects/NeuralNetworkEffect.js +66 -33
  206. package/dist/components/effects/OrbEffect.d.ts +8 -3
  207. package/dist/components/effects/OrbEffect.d.ts.map +1 -1
  208. package/dist/components/effects/OrbEffect.js +89 -42
  209. package/dist/components/effects/PlanetaryRingsEffect.d.ts +7 -2
  210. package/dist/components/effects/PlanetaryRingsEffect.d.ts.map +1 -1
  211. package/dist/components/effects/PlanetaryRingsEffect.js +19 -9
  212. package/dist/components/effects/PortalEffect.d.ts +8 -3
  213. package/dist/components/effects/PortalEffect.d.ts.map +1 -1
  214. package/dist/components/effects/PortalEffect.js +41 -25
  215. package/dist/components/effects/ShockwaveEffect.d.ts +7 -2
  216. package/dist/components/effects/ShockwaveEffect.d.ts.map +1 -1
  217. package/dist/components/effects/ShockwaveEffect.js +19 -9
  218. package/dist/components/effects/SmokePlumeEffect.d.ts +8 -3
  219. package/dist/components/effects/SmokePlumeEffect.d.ts.map +1 -1
  220. package/dist/components/effects/SmokePlumeEffect.js +30 -20
  221. package/dist/components/effects/SmokeRibbon.d.ts +8 -2
  222. package/dist/components/effects/SmokeRibbon.d.ts.map +1 -1
  223. package/dist/components/effects/SmokeRibbon.js +34 -24
  224. package/dist/components/effects/SmokeRingEffect.d.ts +8 -3
  225. package/dist/components/effects/SmokeRingEffect.d.ts.map +1 -1
  226. package/dist/components/effects/SmokeRingEffect.js +33 -21
  227. package/dist/components/effects/StrangeAttractorEffect.d.ts +8 -3
  228. package/dist/components/effects/StrangeAttractorEffect.d.ts.map +1 -1
  229. package/dist/components/effects/StrangeAttractorEffect.js +30 -20
  230. package/dist/components/effects/VolumetricFogEffect.d.ts +8 -3
  231. package/dist/components/effects/VolumetricFogEffect.d.ts.map +1 -1
  232. package/dist/components/effects/VolumetricFogEffect.js +38 -20
  233. package/dist/components/effects/WaterCausticsEffect.d.ts +7 -2
  234. package/dist/components/effects/WaterCausticsEffect.d.ts.map +1 -1
  235. package/dist/components/effects/WaterCausticsEffect.js +19 -9
  236. package/dist/components/effects/index.d.ts +0 -1
  237. package/dist/components/effects/index.d.ts.map +1 -1
  238. package/dist/components/effects/index.js +0 -1
  239. package/dist/components/index.d.ts +0 -1
  240. package/dist/components/index.d.ts.map +1 -1
  241. package/dist/components/index.js +0 -1
  242. package/dist/components/landscape/LandscapeMesh.js +1 -1
  243. package/dist/components/landscape/types.d.ts +1 -1
  244. package/dist/components/landscape/types.d.ts.map +1 -1
  245. package/dist/components/particles/MagneticBottleParticles.d.ts +17 -0
  246. package/dist/components/particles/MagneticBottleParticles.d.ts.map +1 -0
  247. package/dist/components/particles/MagneticBottleParticles.js +618 -0
  248. package/dist/components/particles/ShapeBurstParticles.d.ts +17 -0
  249. package/dist/components/particles/ShapeBurstParticles.d.ts.map +1 -0
  250. package/dist/components/particles/ShapeBurstParticles.js +588 -0
  251. package/dist/components/particles/ShapeFlowParticles.d.ts +17 -0
  252. package/dist/components/particles/ShapeFlowParticles.d.ts.map +1 -0
  253. package/dist/components/particles/ShapeFlowParticles.js +755 -0
  254. package/dist/components/particles/index.d.ts +6 -0
  255. package/dist/components/particles/index.d.ts.map +1 -1
  256. package/dist/components/particles/index.js +3 -0
  257. package/dist/components/terrain/TerrainSurface.d.ts.map +1 -1
  258. package/dist/components/terrain/TerrainSurface.js +0 -5
  259. package/dist/components/terrain/types.d.ts +1 -1
  260. package/dist/components/terrain/types.d.ts.map +1 -1
  261. package/dist/components/volumetricClouds/VolumetricCloudsPass.d.ts +1 -1
  262. package/dist/components/volumetricClouds/VolumetricCloudsPass.d.ts.map +1 -1
  263. package/dist/components/volumetricClouds/VolumetricCloudsPass.js +0 -6
  264. package/dist/components/volumetricClouds/types.d.ts +1 -1
  265. package/dist/components/volumetricClouds/types.d.ts.map +1 -1
  266. package/dist/components/water/types.d.ts +1 -1
  267. package/dist/components/water/types.d.ts.map +1 -1
  268. package/dist/constants.d.ts +1 -1
  269. package/dist/constants.d.ts.map +1 -1
  270. package/dist/constants.js +1 -1
  271. package/dist/hooks/index.d.ts +2 -2
  272. package/dist/hooks/index.d.ts.map +1 -1
  273. package/dist/hooks/index.js +1 -2
  274. package/dist/hooks/useConfigDriver.d.ts +22 -0
  275. package/dist/hooks/useConfigDriver.d.ts.map +1 -0
  276. package/dist/hooks/useConfigDriver.js +43 -0
  277. package/dist/hooks/useConfigLive.d.ts +1 -1
  278. package/dist/hooks/useConfigLive.d.ts.map +1 -1
  279. package/dist/hooks/useInteraction.d.ts +6 -7
  280. package/dist/hooks/useInteraction.d.ts.map +1 -1
  281. package/dist/hooks/useInteraction.js +87 -268
  282. package/dist/hooks/useLandscapeMaps.d.ts +1 -1
  283. package/dist/hooks/useLandscapeMaps.d.ts.map +1 -1
  284. package/dist/hooks/useObjectAnimation.d.ts.map +1 -1
  285. package/dist/hooks/useObjectAnimation.js +0 -2
  286. package/dist/hooks/useOceanMaterial.d.ts +1 -1
  287. package/dist/hooks/useOceanMaterial.d.ts.map +1 -1
  288. package/dist/hooks/useOceanMaterial.js +0 -5
  289. package/dist/hooks/useRuntimeSettings.d.ts +1 -1
  290. package/dist/hooks/useRuntimeSettings.js +1 -1
  291. package/dist/hooks/useThunder.d.ts +1 -1
  292. package/dist/index.d.ts +6 -4
  293. package/dist/index.d.ts.map +1 -1
  294. package/dist/index.js +4 -2
  295. package/dist/interactions/index.d.ts +4 -0
  296. package/dist/interactions/index.d.ts.map +1 -0
  297. package/dist/interactions/index.js +1 -0
  298. package/dist/interactions/runner.d.ts +24 -0
  299. package/dist/interactions/runner.d.ts.map +1 -0
  300. package/dist/interactions/runner.js +46 -0
  301. package/dist/operations/catalogue/curlSmoke.d.ts +3 -0
  302. package/dist/operations/catalogue/curlSmoke.d.ts.map +1 -0
  303. package/dist/operations/catalogue/curlSmoke.js +178 -0
  304. package/dist/operations/catalogue/displayImage.d.ts +3 -0
  305. package/dist/operations/catalogue/displayImage.d.ts.map +1 -0
  306. package/dist/operations/catalogue/displayImage.js +40 -0
  307. package/dist/operations/catalogue/dissolve.d.ts +3 -0
  308. package/dist/operations/catalogue/dissolve.d.ts.map +1 -0
  309. package/dist/operations/catalogue/dissolve.js +57 -0
  310. package/dist/operations/catalogue/emberAsh.d.ts +3 -0
  311. package/dist/operations/catalogue/emberAsh.d.ts.map +1 -0
  312. package/dist/operations/catalogue/emberAsh.js +171 -0
  313. package/dist/operations/catalogue/fade.d.ts +3 -0
  314. package/dist/operations/catalogue/fade.d.ts.map +1 -0
  315. package/dist/operations/catalogue/fade.js +45 -0
  316. package/dist/operations/catalogue/flip.d.ts +3 -0
  317. package/dist/operations/catalogue/flip.d.ts.map +1 -0
  318. package/dist/operations/catalogue/flip.js +69 -0
  319. package/dist/operations/catalogue/flock.d.ts +3 -0
  320. package/dist/operations/catalogue/flock.d.ts.map +1 -0
  321. package/dist/operations/catalogue/flock.js +163 -0
  322. package/dist/operations/catalogue/focus.d.ts +3 -0
  323. package/dist/operations/catalogue/focus.d.ts.map +1 -0
  324. package/dist/operations/catalogue/focus.js +23 -0
  325. package/dist/operations/catalogue/frame.d.ts +3 -0
  326. package/dist/operations/catalogue/frame.d.ts.map +1 -0
  327. package/dist/operations/catalogue/frame.js +44 -0
  328. package/dist/operations/catalogue/frost.d.ts +3 -0
  329. package/dist/operations/catalogue/frost.d.ts.map +1 -0
  330. package/dist/operations/catalogue/frost.js +111 -0
  331. package/dist/operations/catalogue/fxInstances.d.ts +21 -0
  332. package/dist/operations/catalogue/fxInstances.d.ts.map +1 -0
  333. package/dist/operations/catalogue/fxInstances.js +47 -0
  334. package/dist/operations/catalogue/fxPoints.d.ts +22 -0
  335. package/dist/operations/catalogue/fxPoints.d.ts.map +1 -0
  336. package/dist/operations/catalogue/fxPoints.js +70 -0
  337. package/dist/operations/catalogue/glow.d.ts +3 -0
  338. package/dist/operations/catalogue/glow.d.ts.map +1 -0
  339. package/dist/operations/catalogue/glow.js +50 -0
  340. package/dist/operations/catalogue/heatCracks.d.ts +3 -0
  341. package/dist/operations/catalogue/heatCracks.d.ts.map +1 -0
  342. package/dist/operations/catalogue/heatCracks.js +134 -0
  343. package/dist/operations/catalogue/hologram.d.ts +3 -0
  344. package/dist/operations/catalogue/hologram.d.ts.map +1 -0
  345. package/dist/operations/catalogue/hologram.js +118 -0
  346. package/dist/operations/catalogue/inkBloom.d.ts +3 -0
  347. package/dist/operations/catalogue/inkBloom.d.ts.map +1 -0
  348. package/dist/operations/catalogue/inkBloom.js +156 -0
  349. package/dist/operations/catalogue/ivy.d.ts +13 -0
  350. package/dist/operations/catalogue/ivy.d.ts.map +1 -0
  351. package/dist/operations/catalogue/ivy.js +469 -0
  352. package/dist/operations/catalogue/jelly.d.ts +3 -0
  353. package/dist/operations/catalogue/jelly.d.ts.map +1 -0
  354. package/dist/operations/catalogue/jelly.js +50 -0
  355. package/dist/operations/catalogue/kintsugi.d.ts +3 -0
  356. package/dist/operations/catalogue/kintsugi.d.ts.map +1 -0
  357. package/dist/operations/catalogue/kintsugi.js +173 -0
  358. package/dist/operations/catalogue/lidarScan.d.ts +3 -0
  359. package/dist/operations/catalogue/lidarScan.d.ts.map +1 -0
  360. package/dist/operations/catalogue/lidarScan.js +240 -0
  361. package/dist/operations/catalogue/liquidMetal.d.ts +3 -0
  362. package/dist/operations/catalogue/liquidMetal.d.ts.map +1 -0
  363. package/dist/operations/catalogue/liquidMetal.js +122 -0
  364. package/dist/operations/catalogue/materialFx.d.ts +6 -0
  365. package/dist/operations/catalogue/materialFx.d.ts.map +1 -0
  366. package/dist/operations/catalogue/materialFx.js +13 -0
  367. package/dist/operations/catalogue/metalize.d.ts +3 -0
  368. package/dist/operations/catalogue/metalize.d.ts.map +1 -0
  369. package/dist/operations/catalogue/metalize.js +135 -0
  370. package/dist/operations/catalogue/moveToFront.d.ts +3 -0
  371. package/dist/operations/catalogue/moveToFront.d.ts.map +1 -0
  372. package/dist/operations/catalogue/moveToFront.js +26 -0
  373. package/dist/operations/catalogue/orbit.d.ts +3 -0
  374. package/dist/operations/catalogue/orbit.d.ts.map +1 -0
  375. package/dist/operations/catalogue/orbit.js +29 -0
  376. package/dist/operations/catalogue/particleSwarm.d.ts +3 -0
  377. package/dist/operations/catalogue/particleSwarm.d.ts.map +1 -0
  378. package/dist/operations/catalogue/particleSwarm.js +138 -0
  379. package/dist/operations/catalogue/petalPeel.d.ts +3 -0
  380. package/dist/operations/catalogue/petalPeel.d.ts.map +1 -0
  381. package/dist/operations/catalogue/petalPeel.js +137 -0
  382. package/dist/operations/catalogue/petrify.d.ts +3 -0
  383. package/dist/operations/catalogue/petrify.d.ts.map +1 -0
  384. package/dist/operations/catalogue/petrify.js +94 -0
  385. package/dist/operations/catalogue/portal.d.ts +3 -0
  386. package/dist/operations/catalogue/portal.d.ts.map +1 -0
  387. package/dist/operations/catalogue/portal.js +224 -0
  388. package/dist/operations/catalogue/print3d.d.ts +3 -0
  389. package/dist/operations/catalogue/print3d.d.ts.map +1 -0
  390. package/dist/operations/catalogue/print3d.js +275 -0
  391. package/dist/operations/catalogue/rainBeads.d.ts +3 -0
  392. package/dist/operations/catalogue/rainBeads.d.ts.map +1 -0
  393. package/dist/operations/catalogue/rainBeads.js +223 -0
  394. package/dist/operations/catalogue/restPose.d.ts +21 -0
  395. package/dist/operations/catalogue/restPose.d.ts.map +1 -0
  396. package/dist/operations/catalogue/restPose.js +55 -0
  397. package/dist/operations/catalogue/rimLight.d.ts +3 -0
  398. package/dist/operations/catalogue/rimLight.d.ts.map +1 -0
  399. package/dist/operations/catalogue/rimLight.js +72 -0
  400. package/dist/operations/catalogue/sandErosion.d.ts +3 -0
  401. package/dist/operations/catalogue/sandErosion.d.ts.map +1 -0
  402. package/dist/operations/catalogue/sandErosion.js +167 -0
  403. package/dist/operations/catalogue/shaderLayers.d.ts +74 -0
  404. package/dist/operations/catalogue/shaderLayers.d.ts.map +1 -0
  405. package/dist/operations/catalogue/shaderLayers.js +322 -0
  406. package/dist/operations/catalogue/shatter.d.ts +3 -0
  407. package/dist/operations/catalogue/shatter.d.ts.map +1 -0
  408. package/dist/operations/catalogue/shatter.js +267 -0
  409. package/dist/operations/catalogue/silkDrape.d.ts +3 -0
  410. package/dist/operations/catalogue/silkDrape.d.ts.map +1 -0
  411. package/dist/operations/catalogue/silkDrape.js +340 -0
  412. package/dist/operations/catalogue/spin.d.ts +3 -0
  413. package/dist/operations/catalogue/spin.d.ts.map +1 -0
  414. package/dist/operations/catalogue/spin.js +42 -0
  415. package/dist/operations/catalogue/surfaceSample.d.ts +17 -0
  416. package/dist/operations/catalogue/surfaceSample.d.ts.map +1 -0
  417. package/dist/operations/catalogue/surfaceSample.js +187 -0
  418. package/dist/operations/catalogue/swirl.d.ts +3 -0
  419. package/dist/operations/catalogue/swirl.d.ts.map +1 -0
  420. package/dist/operations/catalogue/swirl.js +69 -0
  421. package/dist/operations/catalogue/teleport.d.ts +3 -0
  422. package/dist/operations/catalogue/teleport.d.ts.map +1 -0
  423. package/dist/operations/catalogue/teleport.js +213 -0
  424. package/dist/operations/catalogue/transitionField.d.ts +124 -0
  425. package/dist/operations/catalogue/transitionField.d.ts.map +1 -0
  426. package/dist/operations/catalogue/transitionField.js +278 -0
  427. package/dist/operations/catalogue/unweave.d.ts +3 -0
  428. package/dist/operations/catalogue/unweave.d.ts.map +1 -0
  429. package/dist/operations/catalogue/unweave.js +233 -0
  430. package/dist/operations/catalogue/visibility.d.ts +3 -0
  431. package/dist/operations/catalogue/visibility.d.ts.map +1 -0
  432. package/dist/operations/catalogue/visibility.js +25 -0
  433. package/dist/operations/catalogue/voxelize.d.ts +3 -0
  434. package/dist/operations/catalogue/voxelize.d.ts.map +1 -0
  435. package/dist/operations/catalogue/voxelize.js +148 -0
  436. package/dist/operations/catalogue/warmup.d.ts +22 -0
  437. package/dist/operations/catalogue/warmup.d.ts.map +1 -0
  438. package/dist/operations/catalogue/warmup.js +106 -0
  439. package/dist/operations/catalogue/zoom.d.ts +3 -0
  440. package/dist/operations/catalogue/zoom.d.ts.map +1 -0
  441. package/dist/operations/catalogue/zoom.js +33 -0
  442. package/dist/operations/index.d.ts +7 -0
  443. package/dist/operations/index.d.ts.map +1 -0
  444. package/dist/operations/index.js +6 -0
  445. package/dist/operations/objectEffects.d.ts +46 -0
  446. package/dist/operations/objectEffects.d.ts.map +1 -0
  447. package/dist/operations/objectEffects.js +136 -0
  448. package/dist/operations/registry.d.ts +16 -0
  449. package/dist/operations/registry.d.ts.map +1 -0
  450. package/dist/operations/registry.js +63 -0
  451. package/dist/operations/runtime.d.ts +60 -0
  452. package/dist/operations/runtime.d.ts.map +1 -0
  453. package/dist/operations/runtime.js +317 -0
  454. package/dist/operations/types.d.ts +122 -0
  455. package/dist/operations/types.d.ts.map +1 -0
  456. package/dist/operations/types.js +9 -0
  457. package/dist/operations/useObjectEffectLayers.d.ts +4 -0
  458. package/dist/operations/useObjectEffectLayers.d.ts.map +1 -0
  459. package/dist/operations/useObjectEffectLayers.js +42 -0
  460. package/dist/operations/useOperationsRuntime.d.ts +3 -0
  461. package/dist/operations/useOperationsRuntime.d.ts.map +1 -0
  462. package/dist/operations/useOperationsRuntime.js +69 -0
  463. package/dist/presets/landscapePresets.d.ts +1 -1
  464. package/dist/presets/landscapePresets.d.ts.map +1 -1
  465. package/dist/presets/landscapePresets.js +1 -1
  466. package/dist/presets/landscapeTypes.d.ts +1 -1
  467. package/dist/presets/landscapeTypes.d.ts.map +1 -1
  468. package/dist/presets/landscapeTypes.js +1 -1
  469. package/dist/presets/oceanSurfacePresets.d.ts +1 -1
  470. package/dist/presets/terrainPresets.d.ts +1 -1
  471. package/dist/presets/terrainPresets.d.ts.map +1 -1
  472. package/dist/presets/volumetricCloudPresets.d.ts +1 -1
  473. package/dist/types/cloudConfigs.d.ts +2 -309
  474. package/dist/types/cloudConfigs.d.ts.map +1 -1
  475. package/dist/types/cloudConfigs.js +2 -339
  476. package/dist/types/index.d.ts +8 -8
  477. package/dist/types/index.d.ts.map +1 -1
  478. package/dist/types/index.js +4 -4
  479. package/dist/types/landscapeConfigs.d.ts +2 -217
  480. package/dist/types/landscapeConfigs.d.ts.map +1 -1
  481. package/dist/types/landscapeConfigs.js +2 -256
  482. package/dist/types/oceanConfigs.d.ts +2 -289
  483. package/dist/types/oceanConfigs.d.ts.map +1 -1
  484. package/dist/types/oceanConfigs.js +2 -380
  485. package/dist/types/terrainConfigs.d.ts +2 -250
  486. package/dist/types/terrainConfigs.d.ts.map +1 -1
  487. package/dist/types/terrainConfigs.js +2 -292
  488. package/dist/utils/cloudUniforms.d.ts +1 -1
  489. package/dist/utils/configAnimations.d.ts +6 -0
  490. package/dist/utils/configAnimations.d.ts.map +1 -1
  491. package/dist/utils/configAnimations.js +14 -0
  492. package/dist/utils/gridConfig.d.ts +19 -0
  493. package/dist/utils/gridConfig.d.ts.map +1 -0
  494. package/dist/utils/gridConfig.js +52 -0
  495. package/dist/utils/handleCloudsAnimations.d.ts +1 -1
  496. package/dist/utils/handleCloudsAnimations.js +1 -1
  497. package/dist/utils/hasHoverAnimation.d.ts.map +1 -1
  498. package/dist/utils/hasHoverAnimation.js +0 -2
  499. package/dist/utils/landscapeUniforms.d.ts +1 -1
  500. package/dist/utils/landscapeUniforms.d.ts.map +1 -1
  501. package/dist/utils/oceanUniforms.d.ts +1 -1
  502. package/dist/utils/particleShape.d.ts +33 -0
  503. package/dist/utils/particleShape.d.ts.map +1 -0
  504. package/dist/utils/particleShape.js +207 -0
  505. package/dist/utils/particleTrails.d.ts.map +1 -1
  506. package/dist/utils/particleTrails.js +29 -14
  507. package/dist/utils/terrainUniforms.d.ts +1 -1
  508. package/dist/utils/terrainUniforms.d.ts.map +1 -1
  509. package/package.json +2 -2
@@ -1,11 +1,34 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { useObjectReady } from '../hooks/useObjectReady.js';
3
- import { useEffect, useMemo, useRef } from 'react';
3
+ import { useConfigDriver } from '../hooks/useConfigDriver.js';
4
+ import { withConfigDefaults } from '../utils/configAnimations.js';
5
+ import { useCallback, useEffect, useLayoutEffect, useMemo, useRef } from 'react';
4
6
  import { useFrame } from '@react-three/fiber';
5
7
  import * as THREE from 'three';
6
- import { BubblesPointsMaterial } from '@3driseai/3drise-core';
8
+ import { BubblesPointsMaterial, DEFAULT_GENERATIVE_EFFECTS, EFFECTS_ANIMATABLE } from '@3driseai/3drise-core';
7
9
  const MAX_BUBBLES = 256;
8
- const Bubbles = ({ config, onObjectReady, onObjectDispose }) => {
10
+ /** Nothing rebuilds the pool: it is a fixed ring buffer of MAX_BUBBLES. */
11
+ const STRUCTURAL = [];
12
+ /** Knobs a keyframe or pointer binding may drive per frame — exactly what the push point applies. */
13
+ const ANIMATABLE = new Set(EFFECTS_ANIMATABLE.bubbles.map((p) => p.value));
14
+ /** The single push point: every config knob that lives on the material reaches it here. */
15
+ function applyConfig(material, c) {
16
+ const u = material.uniforms;
17
+ const [cA, cB, cC] = c.colors;
18
+ u.uColorA.value.set(cA);
19
+ u.uColorB.value.set(cB);
20
+ u.uColorC.value.set(cC);
21
+ u.uScale.value = (c.scale) / 10;
22
+ u.uOpacity.value = c.opacity;
23
+ u.uIridescence.value = c.iridescence;
24
+ // speed is integrated into uTime on the CPU (see useFrame), so the shader's
25
+ // uTime * uSpeed never jumps when the speed changes
26
+ u.uSpeed.value = 1;
27
+ }
28
+ const Bubbles = ({ config, id, keyframes, mouseMove, onObjectReady, onObjectDispose }) => {
29
+ const cfg = useMemo(() => withConfigDefaults(DEFAULT_GENERATIVE_EFFECTS.bubbles, config), [config]);
30
+ // the knobs read per frame by the simulation, from the last merged config
31
+ const cur = useRef(cfg);
9
32
  const positions = useMemo(() => new Float32Array(MAX_BUBBLES * 3), []);
10
33
  const velocities = useMemo(() => new Float32Array(MAX_BUBBLES * 3), []);
11
34
  const ages = useMemo(() => new Float32Array(MAX_BUBBLES), []);
@@ -31,28 +54,25 @@ const Bubbles = ({ config, onObjectReady, onObjectDispose }) => {
31
54
  m.blending = THREE.NormalBlending;
32
55
  return m;
33
56
  }, []);
34
- useEffect(() => {
35
- const u = material.uniforms;
36
- const [cA, cB, cC] = config.colors ?? ['#aaccff', '#ffaadd', '#aaffcc'];
37
- u.uColorA.value.set(cA);
38
- u.uColorB.value.set(cB);
39
- u.uColorC.value.set(cC);
40
- u.uScale.value = (config.scale ?? 1) / 10;
41
- u.uOpacity.value = config.opacity ?? 0.6;
42
- u.uIridescence.value = config.iridescence ?? 0.7;
43
- u.uSpeed.value = config.speed ?? 1;
44
- }, [config.colors, config.scale, config.opacity, config.iridescence, config.speed, material]);
45
57
  useEffect(() => () => { geometry.dispose(); material.dispose(); }, [geometry, material]);
46
58
  const spawnAccum = useRef(0);
47
59
  const rootRef = useRef(null);
48
60
  useObjectReady(rootRef, config, onObjectReady, onObjectDispose);
61
+ const push = useCallback((merged) => {
62
+ cur.current = merged;
63
+ applyConfig(material, merged);
64
+ }, [material]);
65
+ useLayoutEffect(() => { push(cfg); }, [push, cfg]);
66
+ useConfigDriver({ rootRef, id, family: 'effects', base: cfg, structural: STRUCTURAL, allowed: ANIMATABLE, keyframes, mouseMove, push });
49
67
  useFrame((state, delta) => {
50
- material.uniforms.uTime.value = state.clock.getElapsedTime();
51
- const scale = config.scale ?? 1;
52
- const spawnRate = config.spawnRate ?? 8;
53
- const floatSpeed = (config.floatSpeed ?? 0.5) * (config.speed ?? 1);
54
- const lifetimeMs = config.lifetimeMs ?? 4000;
55
- const speed = config.speed ?? 1;
68
+ const c = cur.current;
69
+ const speed = c.speed;
70
+ // one integrated clock drives the shader and the CPU wobble, so speed changes never jump
71
+ const t = (material.uniforms.uTime.value += Math.min(delta, 0.1) * speed);
72
+ const scale = c.scale;
73
+ const spawnRate = c.spawnRate;
74
+ const floatSpeed = (c.floatSpeed) * speed;
75
+ const lifetimeMs = c.lifetimeMs;
56
76
  spawnAccum.current += spawnRate * delta;
57
77
  let toSpawn = Math.floor(spawnAccum.current);
58
78
  spawnAccum.current -= toSpawn;
@@ -61,7 +81,7 @@ const Bubbles = ({ config, onObjectReady, onObjectDispose }) => {
61
81
  while (toSpawn > 0 && scan < MAX_BUBBLES) {
62
82
  if (alive[scan] === 0) {
63
83
  const base = scan * 3;
64
- // Spawn at local origin with small lateral jitter — parent group's
84
+ // Spawn at local origin with small lateral jitter - parent group's
65
85
  // transform places the system in world space.
66
86
  positions[base + 0] = (Math.random() - 0.5) * 0.2 * scale;
67
87
  positions[base + 1] = (Math.random() - 0.5) * 0.1 * scale;
@@ -90,7 +110,7 @@ const Bubbles = ({ config, onObjectReady, onObjectDispose }) => {
90
110
  }
91
111
  velocities[base + 0] *= 0.99;
92
112
  velocities[base + 2] *= 0.99;
93
- const wobble = Math.sin(state.clock.getElapsedTime() * 1.3 * speed + phases[j]) * 0.05;
113
+ const wobble = Math.sin(t * 1.3 + phases[j]) * 0.05;
94
114
  positions[base + 0] += velocities[base + 0] * delta + wobble * delta;
95
115
  positions[base + 1] += velocities[base + 1] * delta;
96
116
  positions[base + 2] += velocities[base + 2] * delta;
@@ -1 +1 @@
1
- {"version":3,"file":"CameraController.d.ts","sourceRoot":"","sources":["../../src/components/CameraController.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAS7D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzD,UAAU,qBAAsB,SAAQ,gBAAgB;IACpD,QAAQ,EAAE,WAAW,CAAC;IACtB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;OAIG;IACH,eAAe,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,KAAK,IAAI,CAAC;IAC1C,iBAAiB,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,KAAK,IAAI,CAAC;CAC/C;AAGD,eAAO,MAAM,gBAAgB,EAAE,KAAK,CAAC,EAAE,CAAC,qBAAqB,CA0J5D,CAAC;AACF,eAAe,gBAAgB,CAAC"}
1
+ {"version":3,"file":"CameraController.d.ts","sourceRoot":"","sources":["../../src/components/CameraController.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAQ7D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzD,UAAU,qBAAsB,SAAQ,gBAAgB;IACpD,QAAQ,EAAE,WAAW,CAAC;IACtB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;OAIG;IACH,eAAe,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,KAAK,IAAI,CAAC;IAC1C,iBAAiB,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,KAAK,IAAI,CAAC;CAC/C;AAGD,eAAO,MAAM,gBAAgB,EAAE,KAAK,CAAC,EAAE,CAAC,qBAAqB,CA+G5D,CAAC;AACF,eAAe,gBAAgB,CAAC"}
@@ -4,7 +4,6 @@ import { useEffect, useRef } from 'react';
4
4
  import { useFrame, useThree } from '@react-three/fiber';
5
5
  import { useCameraAnimation } from '../hooks/useCameraAnimation.js';
6
6
  import { cameraManager } from '../utils/CameraSingleton.js';
7
- import { useAnimationEvents } from '../hooks/useAnimationEvents.js';
8
7
  import { usePathAnimation } from '../hooks/usePathAnimation.js';
9
8
  import { OrbitControls } from "@react-three/drei";
10
9
  import { useRuntimeSettings } from '../hooks/useRuntimeSettings.js';
@@ -103,49 +102,6 @@ export const CameraController = ({ enableAutoAnimation = true, animationDuration
103
102
  cam.updateProjectionMatrix();
104
103
  }
105
104
  }, [fov, near, far]);
106
- // Handle animation events (step-based animations)
107
- useAnimationEvents({
108
- onStepStart: (event) => {
109
- if (event.step?.transitions) {
110
- const stepDuration = event.step.duration ?? 1; // 0 = instant (actions)
111
- event.step.transitions.forEach((transition) => {
112
- const { state, properties, pathId } = transition;
113
- if (state === 'camera') {
114
- isInAnimatedTransition.current = true;
115
- if (pathId) {
116
- const offset = camera
117
- ? [camera.position.x, camera.position.y, camera.position.z]
118
- : [0, 0, 0];
119
- startPathAnimation(pathId, stepDuration, {
120
- offset,
121
- applyRotation: false
122
- });
123
- transformAnimationProgress.current = 0;
124
- }
125
- const startSettings = properties.from ?
126
- {
127
- position: properties.from.position,
128
- // orientation: properties.from.orientation,
129
- } : {
130
- position: camera.position,
131
- // orientation: camera.rotation,
132
- };
133
- const targetSettings = properties.to;
134
- // startSettings.position && camera.position.set(startSettings.position[0], startSettings.position[1], startSettings.position[2]);
135
- // camera.rotation.set(startSettings.orientation[0], startSettings.orientation[1], startSettings.orientation[2]);
136
- animateCamera(targetSettings, stepDuration, event.step?.ease, properties.to.target)
137
- .then(() => {
138
- isInAnimatedTransition.current = false;
139
- if (properties.to.target) {
140
- controlsRef.current?.target.set(properties.to.target[0], properties.to.target[1], properties.to.target[2]);
141
- }
142
- ;
143
- });
144
- }
145
- });
146
- }
147
- }
148
- });
149
105
  // Frame loop for path animations and mouse handlers
150
106
  useFrame((state, delta) => {
151
107
  if (isPathAnimating()) {
@@ -1,15 +1,19 @@
1
1
  import type { ThreeElements } from '@react-three/fiber';
2
2
  import type { ObjectReadyProps } from '../types/objectReady';
3
3
  import type { ChladniGridConfig } from '../types/gridConfigs';
4
+ import type { AnimationOptions, MouseMoveDomain } from '@3driseai/3drise-core';
4
5
  export interface ChladniGridProps extends ObjectReadyProps {
5
6
  config?: ChladniGridConfig;
6
7
  groupProps?: ThreeElements['group'];
8
+ /** Scene object id: the live-edit handle is found by it. */
9
+ id?: string;
10
+ /** Keyframes on this grid's config knobs (animations.grid.animations). */
11
+ keyframes?: AnimationOptions[];
12
+ /** Pointer bindings on this grid's config knobs (mouseMove.grid). */
13
+ mouseMove?: MouseMoveDomain;
7
14
  }
8
15
  /** ChladniGridConfig defaults. Must match the catalog entry in grid-defaults.json exactly. */
9
16
  export declare const defaultChladniGridConfig: ChladniGridConfig;
10
- /**
11
- * Chladni plates: the nodal lines of a standing wave on a square plate, with sand settling on them, drifting slowly between two neighbouring resonances.
12
- */
13
- export declare function ChladniGrid({ config, groupProps, onObjectReady, onObjectDispose }: ChladniGridProps): import("react").JSX.Element;
17
+ export declare function ChladniGrid({ config, groupProps, id, keyframes, mouseMove, onObjectReady, onObjectDispose }: ChladniGridProps): import("react").JSX.Element;
14
18
  export default ChladniGrid;
15
19
  //# sourceMappingURL=ChladniGrid.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ChladniGrid.d.ts","sourceRoot":"","sources":["../../src/components/ChladniGrid.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,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAG9D,MAAM,WAAW,gBAAiB,SAAQ,gBAAgB;IACtD,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAC3B,UAAU,CAAC,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;CACvC;AAKD,8FAA8F;AAC9F,eAAO,MAAM,wBAAwB,EAAE,iBA6BtC,CAAC;AAEF;;GAEG;AACH,wBAAgB,WAAW,CAAC,EAAE,MAAiC,EAAE,UAAU,EAAE,aAAa,EAAE,eAAe,EAAE,EAAE,gBAAgB,+BAiE9H;AAED,eAAe,WAAW,CAAC"}
1
+ {"version":3,"file":"ChladniGrid.d.ts","sourceRoot":"","sources":["../../src/components/ChladniGrid.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAOxD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAE9D,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAE/E,MAAM,WAAW,gBAAiB,SAAQ,gBAAgB;IACtD,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAC3B,UAAU,CAAC,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;IACpC,4DAA4D;IAC5D,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,0EAA0E;IAC1E,SAAS,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAC/B,qEAAqE;IACrE,SAAS,CAAC,EAAE,eAAe,CAAC;CAC/B;AAKD,8FAA8F;AAC9F,eAAO,MAAM,wBAAwB,EAAE,iBA6BtC,CAAC;AAcF,wBAAgB,WAAW,CAAC,EAAE,MAAiC,EAAE,UAAU,EAAE,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,aAAa,EAAE,eAAe,EAAE,EAAE,gBAAgB,+BA4CxJ;AAED,eAAe,WAAW,CAAC"}
@@ -1,9 +1,12 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { useMemo, useRef } from 'react';
2
+ import { useCallback, useLayoutEffect, useMemo, useRef } from 'react';
3
3
  import * as THREE from 'three';
4
4
  import { useObjectReady } from '../hooks/useObjectReady.js';
5
5
  import { useGridSurface } from '../hooks/useGridSurface.js';
6
- import { ChladniGridMaterial } from '@3driseai/3drise-core';
6
+ import { useConfigDriver } from '../hooks/useConfigDriver.js';
7
+ import { withConfigDefaults } from '../utils/configAnimations.js';
8
+ import { applyGridConfig, GRID_STRUCTURAL } from '../utils/gridConfig.js';
9
+ import { ChladniGridMaterial, GRIDS_ANIMATABLE } from '@3driseai/3drise-core';
7
10
  // Side-effect import registers <chladniGridMaterial> via extend().
8
11
  void ChladniGridMaterial;
9
12
  /** ChladniGridConfig defaults. Must match the catalog entry in grid-defaults.json exactly. */
@@ -40,23 +43,38 @@ export const defaultChladniGridConfig = {
40
43
  /**
41
44
  * Chladni plates: the nodal lines of a standing wave on a square plate, with sand settling on them, drifting slowly between two neighbouring resonances.
42
45
  */
43
- export function ChladniGrid({ config = defaultChladniGridConfig, groupProps, onObjectReady, onObjectDispose }) {
46
+ /** This grid's own uniforms (u_<key>), pushed by applyGridConfig beside the shared surface knobs. */
47
+ const VARIANT = ['modeN', 'modeM', 'morph', 'grain'];
48
+ /** No computed uniforms: every knob maps straight to its u_<key>. */
49
+ const DERIVE = {};
50
+ /** Knobs that rebuild the plane or pick a mode: they change on commit, never through the live path. */
51
+ const STRUCTURAL = [...GRID_STRUCTURAL, 'modeN', 'modeM'];
52
+ /** Knobs a keyframe or pointer binding may drive per frame — exactly what applyGridConfig pushes. */
53
+ const ANIMATABLE = new Set((GRIDS_ANIMATABLE.chladniGrid ?? []).map((p) => p.value));
54
+ export function ChladniGrid({ config = defaultChladniGridConfig, groupProps, id, keyframes, mouseMove, onObjectReady, onObjectDispose }) {
44
55
  const matRef = useRef(null);
45
56
  const rootRef = useRef(null);
46
57
  const meshRef = useRef(null);
47
58
  useObjectReady(rootRef, config, onObjectReady, onObjectDispose);
48
- const { cellSize, size, segments, flat, lineMode, cellMode, lineWidth, sectionSize, sectionWidth, animSpeed, animScale, animIntensity, fadeDistance, fadeStrength, displace, modeN, modeM, morph, grain, lineColor, sectionColor, cellColor, glowColor, bgColor, bgOpacity, followMouse, reveal, revealDuration, } = config;
59
+ // The committed config over this grid's defaults: every knob has a value to render
60
+ // and for a keyframe or pointer binding to start from.
61
+ const base = useMemo(() => withConfigDefaults(defaultChladniGridConfig, config), [config]);
62
+ const { cellSize, size, segments, flat, displace, followMouse, reveal, revealDuration } = base;
49
63
  // the displacement is the standing wave itself, so the mesh has to resolve every mode
50
64
  const segs = segments ?? (displace > 0 ? Math.min(512, Math.max(96, Math.ceil(size / Math.max(cellSize, 1e-4)) * 48)) : 1);
51
- const fade = fadeDistance ?? size * 0.5;
52
- const colors = useMemo(() => ({
53
- line: new THREE.Color(lineColor),
54
- section: new THREE.Color(sectionColor),
55
- cell: new THREE.Color(cellColor),
56
- glow: new THREE.Color(glowColor),
57
- bg: new THREE.Color(bgColor),
58
- }), [lineColor, sectionColor, cellColor, glowColor, bgColor]);
59
65
  useGridSurface(matRef, meshRef, { followMouse, reveal, revealDuration });
60
- 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("chladniGridMaterial", { 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_modeN: modeN, u_modeM: modeM, u_morph: morph, u_grain: grain, u_lineColor: colors.line, u_sectionColor: colors.section, u_cellColor: colors.cell, u_glowColor: colors.glow, u_bgColor: colors.bg, u_bgOpacity: bgOpacity }, ChladniGridMaterial.key)] }) }));
66
+ // One push point for every uniform the config owns: the committed config when the
67
+ // material mounts or the config commits, the merged one while anything overrides it.
68
+ const baseRef = useRef(base);
69
+ baseRef.current = base;
70
+ const setMaterial = useCallback((m) => {
71
+ matRef.current = m;
72
+ if (m)
73
+ applyGridConfig(m, baseRef.current, VARIANT, DERIVE);
74
+ }, []);
75
+ useLayoutEffect(() => { applyGridConfig(matRef.current, base, VARIANT, DERIVE); }, [base]);
76
+ const push = useCallback((merged) => applyGridConfig(matRef.current, merged, VARIANT, DERIVE), []);
77
+ useConfigDriver({ rootRef, id, family: 'grids', base, structural: STRUCTURAL, allowed: ANIMATABLE, keyframes, mouseMove, push });
78
+ 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("chladniGridMaterial", { ref: setMaterial, transparent: true, depthWrite: false, blending: THREE.AdditiveBlending, side: THREE.DoubleSide }, ChladniGridMaterial.key)] }) }));
61
79
  }
62
80
  export default ChladniGrid;
@@ -1,22 +1,19 @@
1
1
  import type { ThreeElements } from '@react-three/fiber';
2
2
  import type { ObjectReadyProps } from '../types/objectReady';
3
3
  import type { CircuitGridConfig } from '../types/gridConfigs';
4
+ import type { AnimationOptions, MouseMoveDomain } from '@3driseai/3drise-core';
4
5
  export interface CircuitGridProps extends ObjectReadyProps {
5
6
  config?: CircuitGridConfig;
6
7
  groupProps?: ThreeElements['group'];
8
+ /** Scene object id: the live-edit handle is found by it. */
9
+ id?: string;
10
+ /** Keyframes on this grid's config knobs (animations.grid.animations). */
11
+ keyframes?: AnimationOptions[];
12
+ /** Pointer bindings on this grid's config knobs (mouseMove.grid). */
13
+ mouseMove?: MouseMoveDomain;
7
14
  }
8
15
  /** CircuitGridConfig — the single source of truth for a circuit grid instance. */
9
16
  export declare const defaultCircuitGridConfig: CircuitGridConfig;
10
- /**
11
- * A Truchet circuit board on a shader plane.
12
- *
13
- * Each tile carries two quarter-arcs and half the tiles are mirrored, which is
14
- * what chains them into long meandering traces instead of disconnected curves.
15
- * `lineMode` 2 sends light pulses travelling along those traces; the other
16
- * modes match the rest of the grid family (static, ripple, scan, pulse).
17
- * `chipChance` sprinkles IC packages across the board and `sectionSize` lays
18
- * straight buses over the weave.
19
- */
20
- export declare function CircuitGrid({ config, groupProps, onObjectReady, onObjectDispose }: CircuitGridProps): import("react").JSX.Element;
17
+ export declare function CircuitGrid({ config, groupProps, id, keyframes, mouseMove, onObjectReady, onObjectDispose }: CircuitGridProps): import("react").JSX.Element;
21
18
  export default CircuitGrid;
22
19
  //# sourceMappingURL=CircuitGrid.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"CircuitGrid.d.ts","sourceRoot":"","sources":["../../src/components/CircuitGrid.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,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAG9D,MAAM,WAAW,gBAAiB,SAAQ,gBAAgB;IACtD,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAC3B,UAAU,CAAC,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;CACvC;AAKD,kFAAkF;AAClF,eAAO,MAAM,wBAAwB,EAAE,iBA4BtC,CAAC;AAEF;;;;;;;;;GASG;AACH,wBAAgB,WAAW,CAAC,EAAE,MAAiC,EAAE,UAAU,EAAE,aAAa,EAAE,eAAe,EAAE,EAAE,gBAAgB,+BAiE9H;AAED,eAAe,WAAW,CAAC"}
1
+ {"version":3,"file":"CircuitGrid.d.ts","sourceRoot":"","sources":["../../src/components/CircuitGrid.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAOxD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAE9D,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAE/E,MAAM,WAAW,gBAAiB,SAAQ,gBAAgB;IACtD,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAC3B,UAAU,CAAC,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;IACpC,4DAA4D;IAC5D,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,0EAA0E;IAC1E,SAAS,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAC/B,qEAAqE;IACrE,SAAS,CAAC,EAAE,eAAe,CAAC;CAC/B;AAKD,kFAAkF;AAClF,eAAO,MAAM,wBAAwB,EAAE,iBA4BtC,CAAC;AAqBF,wBAAgB,WAAW,CAAC,EAAE,MAAiC,EAAE,UAAU,EAAE,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,aAAa,EAAE,eAAe,EAAE,EAAE,gBAAgB,+BA6CxJ;AAED,eAAe,WAAW,CAAC"}
@@ -1,9 +1,12 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { useMemo, useRef } from 'react';
2
+ import { useCallback, useLayoutEffect, useMemo, useRef } from 'react';
3
3
  import * as THREE from 'three';
4
4
  import { useObjectReady } from '../hooks/useObjectReady.js';
5
5
  import { useGridSurface } from '../hooks/useGridSurface.js';
6
- import { CircuitGridMaterial } from '@3driseai/3drise-core';
6
+ import { useConfigDriver } from '../hooks/useConfigDriver.js';
7
+ import { withConfigDefaults } from '../utils/configAnimations.js';
8
+ import { applyGridConfig, GRID_STRUCTURAL } from '../utils/gridConfig.js';
9
+ import { CircuitGridMaterial, GRIDS_ANIMATABLE } from '@3driseai/3drise-core';
7
10
  // Side-effect import registers <circuitGridMaterial> via extend().
8
11
  void CircuitGridMaterial;
9
12
  /** CircuitGridConfig — the single source of truth for a circuit grid instance. */
@@ -46,24 +49,39 @@ export const defaultCircuitGridConfig = {
46
49
  * `chipChance` sprinkles IC packages across the board and `sectionSize` lays
47
50
  * straight buses over the weave.
48
51
  */
49
- export function CircuitGrid({ config = defaultCircuitGridConfig, groupProps, onObjectReady, onObjectDispose }) {
52
+ /** This grid's own uniforms (u_<key>), pushed by applyGridConfig beside the shared surface knobs. */
53
+ const VARIANT = ['powered', 'chipChance', 'padSize'];
54
+ /** No computed uniforms: every knob maps straight to its u_<key>. */
55
+ const DERIVE = {};
56
+ /** Knobs that rebuild the plane or pick a mode: they change on commit, never through the live path. */
57
+ const STRUCTURAL = [...GRID_STRUCTURAL];
58
+ /** Knobs a keyframe or pointer binding may drive per frame — exactly what applyGridConfig pushes. */
59
+ const ANIMATABLE = new Set((GRIDS_ANIMATABLE.circuitGrid ?? []).map((p) => p.value));
60
+ export function CircuitGrid({ config = defaultCircuitGridConfig, groupProps, id, keyframes, mouseMove, onObjectReady, onObjectDispose }) {
50
61
  const matRef = useRef(null);
51
62
  const rootRef = useRef(null);
52
63
  const meshRef = useRef(null);
53
64
  useObjectReady(rootRef, config, onObjectReady, onObjectDispose);
54
- const { cellSize, size, segments, flat, lineMode, cellMode, lineWidth, sectionSize, sectionWidth, animSpeed, animScale, animIntensity, fadeDistance, fadeStrength, displace, powered, chipChance, padSize, lineColor, sectionColor, cellColor, glowColor, bgColor, bgOpacity, followMouse, reveal, revealDuration, } = config;
65
+ // The committed config over this grid's defaults: every knob has a value to render
66
+ // and for a keyframe or pointer binding to start from.
67
+ const base = useMemo(() => withConfigDefaults(defaultCircuitGridConfig, config), [config]);
68
+ const { cellSize, size, segments, flat, displace, followMouse, reveal, revealDuration } = base;
55
69
  const segs = segments ?? (displace > 0
56
70
  ? Math.min(256, Math.max(64, Math.ceil(size / Math.max(cellSize, 1e-4)) * 2))
57
71
  : 1);
58
- const fade = fadeDistance ?? size * 0.5;
59
- const colors = useMemo(() => ({
60
- line: new THREE.Color(lineColor),
61
- section: new THREE.Color(sectionColor),
62
- cell: new THREE.Color(cellColor),
63
- glow: new THREE.Color(glowColor),
64
- bg: new THREE.Color(bgColor),
65
- }), [lineColor, sectionColor, cellColor, glowColor, bgColor]);
66
72
  useGridSurface(matRef, meshRef, { followMouse, reveal, revealDuration });
67
- 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("circuitGridMaterial", { 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_powered: powered, u_chipChance: chipChance, u_padSize: padSize, u_lineColor: colors.line, u_sectionColor: colors.section, u_cellColor: colors.cell, u_glowColor: colors.glow, u_bgColor: colors.bg, u_bgOpacity: bgOpacity }, CircuitGridMaterial.key)] }) }));
73
+ // One push point for every uniform the config owns: the committed config when the
74
+ // material mounts or the config commits, the merged one while anything overrides it.
75
+ const baseRef = useRef(base);
76
+ baseRef.current = base;
77
+ const setMaterial = useCallback((m) => {
78
+ matRef.current = m;
79
+ if (m)
80
+ applyGridConfig(m, baseRef.current, VARIANT, DERIVE);
81
+ }, []);
82
+ useLayoutEffect(() => { applyGridConfig(matRef.current, base, VARIANT, DERIVE); }, [base]);
83
+ const push = useCallback((merged) => applyGridConfig(matRef.current, merged, VARIANT, DERIVE), []);
84
+ useConfigDriver({ rootRef, id, family: 'grids', base, structural: STRUCTURAL, allowed: ANIMATABLE, keyframes, mouseMove, push });
85
+ 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("circuitGridMaterial", { ref: setMaterial, transparent: true, depthWrite: false, blending: THREE.AdditiveBlending, side: THREE.DoubleSide }, CircuitGridMaterial.key)] }) }));
68
86
  }
69
87
  export default CircuitGrid;
@@ -1 +1 @@
1
- {"version":3,"file":"Clouds.d.ts","sourceRoot":"","sources":["../../src/components/Clouds.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAQ7D,OAAO,KAAK,EAAE,YAAY,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AACjF,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,MAAM,WAAW,WAAY,SAAQ,gBAAgB;IACjD,QAAQ,EAAE,qBAAqB,CAAC;IAChC,YAAY,CAAC,EAAE,YAAY,CAAC;CAC/B;AAmFD,QAAA,MAAM,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,WAAW,CAqLjC,CAAC;AACF,eAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"Clouds.d.ts","sourceRoot":"","sources":["../../src/components/Clouds.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAO7D,OAAO,KAAK,EAAE,YAAY,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AACjF,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,MAAM,WAAW,WAAY,SAAQ,gBAAgB;IACjD,QAAQ,EAAE,qBAAqB,CAAC;IAChC,YAAY,CAAC,EAAE,YAAY,CAAC;CAC/B;AAmFD,QAAA,MAAM,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,WAAW,CAoJjC,CAAC;AACF,eAAe,MAAM,CAAC"}
@@ -4,7 +4,6 @@ import { useRef, useCallback } from 'react';
4
4
  import * as THREE from 'three';
5
5
  import { useThree, useFrame } from '@react-three/fiber';
6
6
  import { useSkySystem } from '../hooks/useSkySystem.js';
7
- import { useAnimationEvents } from '../hooks/useAnimationEvents.js';
8
7
  import { useNumericAnimation } from '../hooks/useNumericAnimation.js';
9
8
  import { calculateTimeProgress, applyEasing, gsapEasingMap, interpolateValue, interpolateMouseMoveProperty, } from '@3driseai/3drise-core';
10
9
  const CLOUD_COLORS = {
@@ -142,39 +141,6 @@ const Clouds = ({ settings, timeSettings = defaultTimeSettings, onObjectReady, o
142
141
  onTimeUpdate: handleTimeUpdate,
143
142
  enabled: visible,
144
143
  });
145
- // Legacy sequence-driven `speed`/`scale` anims via `useAnimationEvents`
146
- useAnimationEvents({
147
- onStepStart: (event) => {
148
- if (!event.step?.transitions)
149
- return;
150
- for (const transition of event.step.transitions) {
151
- if (transition.state !== 'clouds' || !meshRef.current)
152
- continue;
153
- const toProps = transition.properties.to || {};
154
- const fromProps = transition.properties.from || {};
155
- if (toProps.visible !== undefined)
156
- meshRef.current.visible = toProps.visible;
157
- const KEYS = ['speed', 'scale'];
158
- const from = {};
159
- const to = {};
160
- for (const k of KEYS) {
161
- const toVal = toProps[k];
162
- if (toVal === undefined)
163
- continue;
164
- to[k] = toVal;
165
- const sourceFallback = k === 'speed' ? baseSpeed : scale;
166
- from[k] = fromProps[k] ?? sourceFallback;
167
- }
168
- if (Object.keys(to).length > 0) {
169
- animateNumeric(from, to, (updated) => {
170
- numericOverrideRef.current = { ...numericOverrideRef.current, ...updated };
171
- }, () => {
172
- numericOverrideRef.current = null;
173
- }, event.step?.duration);
174
- }
175
- }
176
- },
177
- });
178
144
  useFrame((state) => {
179
145
  const mesh = meshRef.current;
180
146
  if (!mesh || !mesh.visible || !mesh.material)
@@ -1,7 +1,7 @@
1
1
  import React from 'react';
2
2
  import type { SkySettings, TimeSettings } from '@3driseai/3drise-core';
3
3
  import type { ObjectReadyProps } from '../types/objectReady';
4
- import type { VolumetricCloudsSettings } from '../types/cloudConfigs';
4
+ import type { VolumetricCloudsSettings } from '@3driseai/3drise-core';
5
5
  export interface CloudsGeneratorProps extends ObjectReadyProps {
6
6
  /** Accepts a partial or older-shaped blob: a published scene loads whatever was
7
7
  * saved the day it was authored, and every block is merged over its defaults. */
@@ -1,6 +1,6 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { useMemo } from 'react';
3
- import { CLOUD_DECK_DEFAULTS, normalizeCirrus, normalizeCloudDeck, normalizeCloudQuality, normalizeThunder } from '../types/cloudConfigs.js';
3
+ import { CLOUD_DECK_DEFAULTS, normalizeCirrus, normalizeCloudDeck, normalizeCloudQuality, normalizeThunder } from '@3driseai/3drise-core';
4
4
  import Cumulus from './volumetricClouds/Cumulus.js';
5
5
  import Stratocumulus from './volumetricClouds/Stratocumulus.js';
6
6
  import Cumulonimbus from './volumetricClouds/Cumulonimbus.js';
@@ -1,25 +1,19 @@
1
1
  import type { ThreeElements } from '@react-three/fiber';
2
2
  import type { ObjectReadyProps } from '../types/objectReady';
3
3
  import type { ContourGridConfig } from '../types/gridConfigs';
4
+ import type { AnimationOptions, MouseMoveDomain } from '@3driseai/3drise-core';
4
5
  export interface ContourGridProps extends ObjectReadyProps {
5
6
  config?: ContourGridConfig;
6
7
  groupProps?: ThreeElements['group'];
8
+ /** Scene object id: the live-edit handle is found by it. */
9
+ id?: string;
10
+ /** Keyframes on this grid's config knobs (animations.grid.animations). */
11
+ keyframes?: AnimationOptions[];
12
+ /** Pointer bindings on this grid's config knobs (mouseMove.grid). */
13
+ mouseMove?: MouseMoveDomain;
7
14
  }
8
15
  /** ContourGridConfig — the single source of truth for a contour grid instance. */
9
16
  export declare const defaultContourGridConfig: ContourGridConfig;
10
- /**
11
- * Topographic iso-lines over a drifting terrain field — minor contours every
12
- * step, index contours every `sectionSize`.
13
- *
14
- * `displace` is literal here rather than decorative: the vertex stage raises the
15
- * surface to exactly the elevation the contours describe, because both stages
16
- * evaluate the same terrain function. That is also why the two must stay in
17
- * sync — any divergence slides the lines off the landform they describe.
18
- *
19
- * `cellSize` is the horizontal scale of the terrain, so it is much larger than
20
- * on the lattice grids; `roughness` runs from rolling to craggy and `warp`
21
- * bends the contours into ridges and valleys.
22
- */
23
- export declare function ContourGrid({ config, groupProps, onObjectReady, onObjectDispose }: ContourGridProps): import("react").JSX.Element;
17
+ export declare function ContourGrid({ config, groupProps, id, keyframes, mouseMove, onObjectReady, onObjectDispose }: ContourGridProps): import("react").JSX.Element;
24
18
  export default ContourGrid;
25
19
  //# sourceMappingURL=ContourGrid.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ContourGrid.d.ts","sourceRoot":"","sources":["../../src/components/ContourGrid.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,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAG9D,MAAM,WAAW,gBAAiB,SAAQ,gBAAgB;IACtD,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAC3B,UAAU,CAAC,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;CACvC;AAKD,kFAAkF;AAClF,eAAO,MAAM,wBAAwB,EAAE,iBA4BtC,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,wBAAgB,WAAW,CAAC,EAAE,MAAiC,EAAE,UAAU,EAAE,aAAa,EAAE,eAAe,EAAE,EAAE,gBAAgB,+BAmE9H;AAED,eAAe,WAAW,CAAC"}
1
+ {"version":3,"file":"ContourGrid.d.ts","sourceRoot":"","sources":["../../src/components/ContourGrid.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAOxD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAE9D,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAE/E,MAAM,WAAW,gBAAiB,SAAQ,gBAAgB;IACtD,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAC3B,UAAU,CAAC,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;IACpC,4DAA4D;IAC5D,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,0EAA0E;IAC1E,SAAS,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAC/B,qEAAqE;IACrE,SAAS,CAAC,EAAE,eAAe,CAAC;CAC/B;AAKD,kFAAkF;AAClF,eAAO,MAAM,wBAAwB,EAAE,iBA4BtC,CAAC;AAwBF,wBAAgB,WAAW,CAAC,EAAE,MAAiC,EAAE,UAAU,EAAE,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,aAAa,EAAE,eAAe,EAAE,EAAE,gBAAgB,+BA+CxJ;AAED,eAAe,WAAW,CAAC"}
@@ -1,9 +1,12 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { useMemo, useRef } from 'react';
2
+ import { useCallback, useLayoutEffect, useMemo, useRef } from 'react';
3
3
  import * as THREE from 'three';
4
4
  import { useObjectReady } from '../hooks/useObjectReady.js';
5
5
  import { useGridSurface } from '../hooks/useGridSurface.js';
6
- import { ContourGridMaterial } from '@3driseai/3drise-core';
6
+ import { useConfigDriver } from '../hooks/useConfigDriver.js';
7
+ import { withConfigDefaults } from '../utils/configAnimations.js';
8
+ import { applyGridConfig, GRID_STRUCTURAL } from '../utils/gridConfig.js';
9
+ import { ContourGridMaterial, GRIDS_ANIMATABLE } from '@3driseai/3drise-core';
7
10
  // Side-effect import registers <contourGridMaterial> via extend().
8
11
  void ContourGridMaterial;
9
12
  /** ContourGridConfig — the single source of truth for a contour grid instance. */
@@ -49,26 +52,41 @@ export const defaultContourGridConfig = {
49
52
  * on the lattice grids; `roughness` runs from rolling to craggy and `warp`
50
53
  * bends the contours into ridges and valleys.
51
54
  */
52
- export function ContourGrid({ config = defaultContourGridConfig, groupProps, onObjectReady, onObjectDispose }) {
55
+ /** This grid's own uniforms (u_<key>), pushed by applyGridConfig beside the shared surface knobs. */
56
+ const VARIANT = ['levels', 'roughness', 'warp'];
57
+ /** No computed uniforms: every knob maps straight to its u_<key>. */
58
+ const DERIVE = {};
59
+ /** Knobs that rebuild the plane or pick a mode: they change on commit, never through the live path. */
60
+ const STRUCTURAL = [...GRID_STRUCTURAL, 'levels'];
61
+ /** Knobs a keyframe or pointer binding may drive per frame — exactly what applyGridConfig pushes. */
62
+ const ANIMATABLE = new Set((GRIDS_ANIMATABLE.contourGrid ?? []).map((p) => p.value));
63
+ export function ContourGrid({ config = defaultContourGridConfig, groupProps, id, keyframes, mouseMove, onObjectReady, onObjectDispose }) {
53
64
  const matRef = useRef(null);
54
65
  const rootRef = useRef(null);
55
66
  const meshRef = useRef(null);
56
67
  useObjectReady(rootRef, config, onObjectReady, onObjectDispose);
57
- const { cellSize, size, segments, flat, lineMode, cellMode, lineWidth, sectionSize, sectionWidth, animSpeed, animScale, animIntensity, fadeDistance, fadeStrength, displace, levels, roughness, warp, lineColor, sectionColor, cellColor, glowColor, bgColor, bgOpacity, followMouse, reveal, revealDuration, } = config;
68
+ // The committed config over this grid's defaults: every knob has a value to render
69
+ // and for a keyframe or pointer binding to start from.
70
+ const base = useMemo(() => withConfigDefaults(defaultContourGridConfig, config), [config]);
71
+ const { cellSize, size, segments, flat, displace, followMouse, reveal, revealDuration } = base;
58
72
  // Terrain needs a far denser mesh than the lattice grids: the silhouette is
59
73
  // the whole point, and it is only as good as the tessellation carrying it.
60
74
  const segs = segments ?? (displace > 0
61
75
  ? Math.min(384, Math.max(128, Math.ceil(size / Math.max(cellSize, 1e-4)) * 48))
62
76
  : 1);
63
- const fade = fadeDistance ?? size * 0.5;
64
- const colors = useMemo(() => ({
65
- line: new THREE.Color(lineColor),
66
- section: new THREE.Color(sectionColor),
67
- cell: new THREE.Color(cellColor),
68
- glow: new THREE.Color(glowColor),
69
- bg: new THREE.Color(bgColor),
70
- }), [lineColor, sectionColor, cellColor, glowColor, bgColor]);
71
77
  useGridSurface(matRef, meshRef, { followMouse, reveal, revealDuration });
72
- 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("contourGridMaterial", { 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_levels: levels, u_roughness: roughness, u_warp: warp, u_lineColor: colors.line, u_sectionColor: colors.section, u_cellColor: colors.cell, u_glowColor: colors.glow, u_bgColor: colors.bg, u_bgOpacity: bgOpacity }, ContourGridMaterial.key)] }) }));
78
+ // One push point for every uniform the config owns: the committed config when the
79
+ // material mounts or the config commits, the merged one while anything overrides it.
80
+ const baseRef = useRef(base);
81
+ baseRef.current = base;
82
+ const setMaterial = useCallback((m) => {
83
+ matRef.current = m;
84
+ if (m)
85
+ applyGridConfig(m, baseRef.current, VARIANT, DERIVE);
86
+ }, []);
87
+ useLayoutEffect(() => { applyGridConfig(matRef.current, base, VARIANT, DERIVE); }, [base]);
88
+ const push = useCallback((merged) => applyGridConfig(matRef.current, merged, VARIANT, DERIVE), []);
89
+ useConfigDriver({ rootRef, id, family: 'grids', base, structural: STRUCTURAL, allowed: ANIMATABLE, keyframes, mouseMove, push });
90
+ 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("contourGridMaterial", { ref: setMaterial, transparent: true, depthWrite: false, blending: THREE.AdditiveBlending, side: THREE.DoubleSide }, ContourGridMaterial.key)] }) }));
73
91
  }
74
92
  export default ContourGrid;
@@ -1 +1 @@
1
- {"version":3,"file":"CreatedObject.d.ts","sourceRoot":"","sources":["../../src/components/CreatedObject.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAWnE,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,kBAAmB,SAAQ,gBAAgB;IACjD,aAAa,EAAE,qBAAqB,CAAC;IACrC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,yBAAyB,CAAC,EAAE,OAAO,CAAC;IACpC,iBAAiB,CAAC,EAAE,CAAC,aAAa,EAAE,qBAAqB,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC;CACpH;AAGD,QAAA,MAAM,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC,kBAAkB,CAuF9C,CAAC;AAEH,eAAe,aAAa,CAAC"}
1
+ {"version":3,"file":"CreatedObject.d.ts","sourceRoot":"","sources":["../../src/components/CreatedObject.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAWnE,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,kBAAmB,SAAQ,gBAAgB;IACjD,aAAa,EAAE,qBAAqB,CAAC;IACrC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,yBAAyB,CAAC,EAAE,OAAO,CAAC;IACpC,iBAAiB,CAAC,EAAE,CAAC,aAAa,EAAE,qBAAqB,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC;CACpH;AAKD,QAAA,MAAM,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC,kBAAkB,CAsG9C,CAAC;AAEH,eAAe,aAAa,CAAC"}
@@ -1,5 +1,6 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
- import { useRef, useEffect, useState, useReducer, memo } from "react";
2
+ import { useRef, useEffect, useState, useReducer, memo, useContext } from "react";
3
+ import { ObjectHoverContext } from "../interactions/runner.js";
3
4
  import { ModelMaterialPassContext } from "./ModelMaterialPassContext.js";
4
5
  import { DEFAULT_EDGES_SETTINGS } from "@3driseai/3drise-core";
5
6
  import { useMaterialApplication } from "../hooks/useMaterialApplication.js";
@@ -12,11 +13,16 @@ import AnimatedObject from "./AnimatedObject.js";
12
13
  import { useFrameEffects } from "../hooks/useFrameEffects.js";
13
14
  import { useObjectEdges } from "../hooks/useObjectEdges.js";
14
15
  import { useObjectReady } from "../hooks/useObjectReady.js";
16
+ /** One hovered part of an object: the intersected mesh (+ instance). */
17
+ const hoverKey = (e) => `${e.object?.uuid}/${e.instanceId ?? ''}`;
15
18
  const CreatedObject = memo(({ createdObject, children, shouldApply3driseMaterial = true, onObjectReady, onObjectDispose, handleObjectClick, }) => {
16
19
  const isSelected = false;
17
20
  // const isSelected = useObjectSelection(createdObject.id);
18
21
  // const { handleObjectClick: contextHandleObjectClick } = useSceneClick();
19
22
  const meshRef = useRef(null);
23
+ // 'mouseEnter' / 'mouseLeave' interactions (ObjectsRenderer).
24
+ const onHover = useContext(ObjectHoverContext);
25
+ const hoveredPartsRef = useRef(new Set());
20
26
  const transformRef = useRef(null);
21
27
  // const baseColorRef = useRef<string>(("color" in createdObject.materialSettings && createdObject.materialSettings.color) || '#ffffff');
22
28
  // const [hovered, setHovered] = useState(false);
@@ -67,6 +73,14 @@ const CreatedObject = memo(({ createdObject, children, shouldApply3driseMaterial
67
73
  // Only handle if this is the actual mesh group, not a child
68
74
  if (e.eventObject !== meshRef.current)
69
75
  return;
76
+ // R3F fires enter / leave on this group once per hovered DESCENDANT (and per
77
+ // intersection), so a model with overlapping meshes fires several at once.
78
+ // Track the hovered parts and report only the first enter / last leave —
79
+ // otherwise two-state effects (glow, fade…) toggle on and straight back off.
80
+ const wasHovered = hoveredPartsRef.current.size > 0;
81
+ hoveredPartsRef.current.add(hoverKey(e));
82
+ if (!wasHovered)
83
+ onHover?.(createdObject, meshRef.current, 'mouseEnter');
70
84
  if (createdObject.type === 'particles' || createdObject.type === 'gallery')
71
85
  return;
72
86
  // e.stopPropagation();
@@ -79,6 +93,10 @@ const CreatedObject = memo(({ createdObject, children, shouldApply3driseMaterial
79
93
  // Only handle if this is the actual mesh group, not a child
80
94
  if (e.eventObject !== meshRef.current)
81
95
  return;
96
+ hoveredPartsRef.current.delete(hoverKey(e));
97
+ if (hoveredPartsRef.current.size > 0)
98
+ return; // still over another part of this object
99
+ onHover?.(createdObject, meshRef.current, 'mouseLeave');
82
100
  if (createdObject.type === 'particles' || createdObject.type === 'gallery')
83
101
  return;
84
102
  handlePointerLeave();