@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
@@ -0,0 +1,165 @@
1
+ // =============================================================================
2
+ // Model-node tracks — animate one node inside a `model` (GLB) object.
3
+ // =============================================================================
4
+ //
5
+ // A node is addressed by its ModelTree key (its name; ModelTree's selection mode is
6
+ // name-only). A name matches the same node in every layout copy, so all matches
7
+ // are written.
8
+ //
9
+ // Paths are node-relative and mirror a node override (config.nodeOverrides):
10
+ // local transform, visibility, and the material tweak fields.
11
+ //
12
+ // Restore is exact rather than "authored": before the first write, the node's
13
+ // current state is snapshotted (which already includes any saved node override,
14
+ // applied by the viewer's useNodeOverrides), and a node's material is cloned so a
15
+ // material shared across GLB meshes isn't changed for every mesh. Restore puts the
16
+ // snapshot and the original materials back.
17
+ //
18
+ import { Color } from 'three';
19
+ import { findById, findNodesByName, applySingleProperty } from '@3driseai/3drise-core';
20
+ export const NODE_TRANSFORM_PATHS = ['position', 'rotation', 'scale', 'visible'];
21
+ export const NODE_MATERIAL_KEYS = ['color', 'opacity', 'roughness', 'metalness', 'emissive', 'emissiveIntensity'];
22
+ const CLIP_MATERIAL_KEY = '__clipOwnedMaterial';
23
+ const nodeKey = (state, node) => `${state}|${node}`;
24
+ const trackKey = (state, node, path) => `${state}|${node}|${path}`;
25
+ /** original value per (state, node, path), captured before the first write */
26
+ const snapshots = new Map();
27
+ /** mesh -> its material(s) before we cloned them, per (state, node) */
28
+ const originalMaterials = new Map();
29
+ const nodeCache = new Map();
30
+ export function clearNodeCaches() {
31
+ nodeCache.clear();
32
+ }
33
+ export function nodesFor(state, node) {
34
+ const key = nodeKey(state, node);
35
+ const cached = nodeCache.get(key);
36
+ if (cached && cached.length && cached.every(n => n.parent))
37
+ return cached;
38
+ const root = findById(state);
39
+ const found = root ? findNodesByName(root, node).filter((n) => n !== root) : [];
40
+ nodeCache.set(key, found);
41
+ return found;
42
+ }
43
+ const meshesUnder = (node) => {
44
+ const out = [];
45
+ node.traverse((c) => { if (c.isMesh && c.material)
46
+ out.push(c); });
47
+ return out;
48
+ };
49
+ const toHex = (c) => (c && typeof c.getHexString === 'function' ? `#${c.getHexString()}` : undefined);
50
+ /** The node's current value for a node-relative path (first match), as a key value. */
51
+ export function readNodeValue(state, node, path) {
52
+ const n = nodesFor(state, node)[0];
53
+ if (!n)
54
+ return undefined;
55
+ if (path === 'position')
56
+ return [n.position.x, n.position.y, n.position.z];
57
+ if (path === 'rotation')
58
+ return [n.rotation.x, n.rotation.y, n.rotation.z];
59
+ if (path === 'scale')
60
+ return [n.scale.x, n.scale.y, n.scale.z];
61
+ if (path === 'visible')
62
+ return !!n.visible;
63
+ if (path.startsWith('material.')) {
64
+ const key = path.slice('material.'.length);
65
+ const mesh = meshesUnder(n)[0];
66
+ const mat = mesh && (Array.isArray(mesh.material) ? mesh.material[0] : mesh.material);
67
+ if (!mat || !(key in mat))
68
+ return undefined;
69
+ const v = mat[key];
70
+ if (v instanceof Color || (v && v.isColor))
71
+ return toHex(v);
72
+ return typeof v === 'number' ? v : undefined;
73
+ }
74
+ return undefined;
75
+ }
76
+ /** Give each mesh under the node its own material (once), remembering the original. */
77
+ function ownMaterials(state, node, n) {
78
+ const key = nodeKey(state, node);
79
+ const saved = originalMaterials.get(key) ?? [];
80
+ for (const mesh of meshesUnder(n)) {
81
+ const mats = Array.isArray(mesh.material) ? mesh.material : [mesh.material];
82
+ if (mats.every((m) => m.userData?.[CLIP_MATERIAL_KEY]))
83
+ continue;
84
+ saved.push({ mesh, material: mesh.material });
85
+ const clones = mats.map((m) => {
86
+ const c = m.clone();
87
+ c.userData = { ...c.userData, [CLIP_MATERIAL_KEY]: true };
88
+ return c;
89
+ });
90
+ mesh.material = Array.isArray(mesh.material) ? clones : clones[0];
91
+ }
92
+ originalMaterials.set(key, saved);
93
+ }
94
+ export function applyNodeValue(state, node, path, value) {
95
+ const nodes = nodesFor(state, node);
96
+ if (!nodes.length)
97
+ return false;
98
+ const tk = trackKey(state, node, path);
99
+ if (!snapshots.has(tk)) {
100
+ const original = readNodeValue(state, node, path);
101
+ if (original !== undefined)
102
+ snapshots.set(tk, original);
103
+ }
104
+ for (const n of nodes) {
105
+ if (path === 'visible') {
106
+ n.visible = !!value;
107
+ continue;
108
+ }
109
+ if (path === 'position' || path === 'rotation' || path === 'scale') {
110
+ if (Array.isArray(value) && value.length >= 3)
111
+ n[path].set(Number(value[0]), Number(value[1]), Number(value[2]));
112
+ continue;
113
+ }
114
+ if (path.startsWith('material.')) {
115
+ ownMaterials(state, node, n);
116
+ const key = path.slice('material.'.length);
117
+ for (const mesh of meshesUnder(n)) {
118
+ const mats = Array.isArray(mesh.material) ? mesh.material : [mesh.material];
119
+ for (const mat of mats) {
120
+ if (key === 'opacity' && typeof value === 'number')
121
+ mat.transparent = value < 1;
122
+ applySingleProperty(mat, key, value);
123
+ }
124
+ }
125
+ }
126
+ }
127
+ return true;
128
+ }
129
+ /** Put a node track back: its snapshot, and the node's original materials once no material track remains. */
130
+ export function restoreNodeTrack(state, node, path, stillAnimated) {
131
+ const tk = trackKey(state, node, path);
132
+ const snap = snapshots.get(tk);
133
+ snapshots.delete(tk);
134
+ if (path.startsWith('material.')) {
135
+ const anyMaterialLeft = NODE_MATERIAL_KEYS.some(k => stillAnimated(`material.${k}`));
136
+ if (!anyMaterialLeft) {
137
+ const key = nodeKey(state, node);
138
+ for (const { mesh, material } of originalMaterials.get(key) ?? []) {
139
+ const current = Array.isArray(mesh.material) ? mesh.material : [mesh.material];
140
+ current.forEach((m) => m.userData?.[CLIP_MATERIAL_KEY] && m.dispose?.());
141
+ mesh.material = material;
142
+ }
143
+ originalMaterials.delete(key);
144
+ // snapshots of the other material keys of this node are now meaningless
145
+ NODE_MATERIAL_KEYS.forEach(k => snapshots.delete(trackKey(state, node, `material.${k}`)));
146
+ return;
147
+ }
148
+ }
149
+ if (snap !== undefined) {
150
+ for (const n of nodesFor(state, node)) {
151
+ if (path === 'visible')
152
+ n.visible = !!snap;
153
+ else if ((path === 'position' || path === 'rotation' || path === 'scale') && Array.isArray(snap)) {
154
+ n[path].set(Number(snap[0]), Number(snap[1]), Number(snap[2]));
155
+ }
156
+ else if (path.startsWith('material.')) {
157
+ const key = path.slice('material.'.length);
158
+ for (const mesh of meshesUnder(n)) {
159
+ const mats = Array.isArray(mesh.material) ? mesh.material : [mesh.material];
160
+ mats.forEach((m) => applySingleProperty(m, key, snap));
161
+ }
162
+ }
163
+ }
164
+ }
165
+ }
@@ -0,0 +1,4 @@
1
+ import type { AnimationClip, AnimationSequence } from './types';
2
+ export declare function normalizeClip(row: any): AnimationClip;
3
+ export declare function normalizeSequence(row: any): AnimationSequence;
4
+ //# sourceMappingURL=normalize.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalize.d.ts","sourceRoot":"","sources":["../../src/animationsV2/normalize.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,iBAAiB,EAAkB,MAAM,SAAS,CAAC;AAQhF,wBAAgB,aAAa,CAAC,GAAG,EAAE,GAAG,GAAG,aAAa,CAarD;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,GAAG,GAAG,iBAAiB,CAyC7D"}
@@ -0,0 +1,60 @@
1
+ import { DEFAULT_DRIVER_SETTINGS } from './types.js';
2
+ const DRIVERS = ['time', 'mouseWheel', 'mouseX', 'mouseY'];
3
+ /** A stored flag: true / 1 / '1' / 'true' only — `!!'0'` would be true. */
4
+ const flag = (v) => v === true || v === 1 || v === '1' || v === 'true';
5
+ export function normalizeClip(row) {
6
+ return {
7
+ id: row.id,
8
+ name: row.name ?? 'Clip',
9
+ key: row.key ?? '',
10
+ description: row.description ?? undefined,
11
+ duration: Number(row.duration) || 4,
12
+ fps: Number(row.fps) || 30,
13
+ loop: flag(row.loop),
14
+ yoyo: flag(row.yoyo),
15
+ endMode: row.endMode === 'restore' ? 'restore' : 'hold',
16
+ tracks: Array.isArray(row.tracks) ? row.tracks : [],
17
+ };
18
+ }
19
+ export function normalizeSequence(row) {
20
+ const steps = Array.isArray(row.steps) ? row.steps : [];
21
+ return {
22
+ id: row.id,
23
+ name: row.name ?? 'Sequence',
24
+ key: row.key ?? '',
25
+ description: row.description ?? undefined,
26
+ steps: steps.map((s, i) => ({
27
+ id: s?.id ?? `step-${i}`,
28
+ clips: Array.isArray(s?.clips)
29
+ ? s.clips
30
+ .filter((c) => c && typeof c.clipId === 'string')
31
+ .map((c, j) => ({
32
+ id: c.id ?? `sc-${i}-${j}`,
33
+ clipId: c.clipId,
34
+ delay: Math.max(0, Number(c.delay) || 0),
35
+ speed: Number(c.speed) > 0 ? Number(c.speed) : 1,
36
+ }))
37
+ : [],
38
+ })),
39
+ cues: (Array.isArray(row.cues) ? row.cues : [])
40
+ .filter((c) => c && typeof c.actionId === 'string' && typeof c.stepId === 'string')
41
+ .map((c, i) => ({
42
+ id: c.id ?? `cue-${i}`,
43
+ actionId: c.actionId,
44
+ stepId: c.stepId,
45
+ at: Math.max(0, Number(c.at) || 0),
46
+ mode: c.mode === 'revert' ? 'revert' : 'apply',
47
+ })),
48
+ loop: flag(row.loop),
49
+ yoyo: flag(row.yoyo),
50
+ reverse: flag(row.reverse),
51
+ endMode: row.endMode === 'restore' ? 'restore' : 'hold',
52
+ driver: DRIVERS.includes(row.driver) ? row.driver : 'time',
53
+ driverSettings: {
54
+ sensitivity: Number(row.driverSettings?.sensitivity) > 0 ? Number(row.driverSettings.sensitivity) : DEFAULT_DRIVER_SETTINGS.sensitivity,
55
+ smoothing: Number(row.driverSettings?.smoothing) >= 0 ? Number(row.driverSettings.smoothing) : DEFAULT_DRIVER_SETTINGS.smoothing,
56
+ invert: flag(row.driverSettings?.invert),
57
+ },
58
+ autoplay: flag(row.autoplay),
59
+ };
60
+ }
@@ -0,0 +1,98 @@
1
+ import type { AnimationClip, AnimationSequence, SequenceCue, StepClip } from './types';
2
+ export interface ScheduledClip {
3
+ /** `${stepClip.id}` — stable across re-resolves of the same sequence. */
4
+ id: string;
5
+ stepIndex: number;
6
+ /** Row within the step. */
7
+ row: number;
8
+ stepClip: StepClip;
9
+ clip: AnimationClip;
10
+ /** Sequence seconds. */
11
+ start: number;
12
+ end: number;
13
+ }
14
+ export interface ScheduledCue {
15
+ cue: SequenceCue;
16
+ stepIndex: number;
17
+ /** Sequence seconds. */
18
+ time: number;
19
+ }
20
+ export interface SequenceSchedule {
21
+ /** In priority order (schedule index = activation order). */
22
+ entries: ScheduledClip[];
23
+ steps: {
24
+ start: number;
25
+ end: number;
26
+ }[];
27
+ /** Sorted by time (authored order breaks ties). Cues on a missing step are dropped. */
28
+ cues: ScheduledCue[];
29
+ duration: number;
30
+ }
31
+ export type ClipLookup = ReadonlyMap<string, AnimationClip> | ((id: string) => AnimationClip | undefined);
32
+ export declare const clipMap: (clips: readonly AnimationClip[]) => Map<string, AnimationClip>;
33
+ /** Step clips whose clip is missing (deleted, not loaded) are skipped. */
34
+ export declare function resolveSequence(seq: AnimationSequence, clips: ClipLookup): SequenceSchedule;
35
+ /** Every cued action's state at sequence time T: on when its last cue at or before T is 'apply'. */
36
+ export declare function cueStatesAt(schedule: SequenceSchedule, T: number): Map<string, boolean>;
37
+ /**
38
+ * Where sequence time T sits, as a cue anchor: the step it falls in (a boundary
39
+ * belongs to the step that starts there) and the offset into it.
40
+ */
41
+ export declare function anchorAt(seq: AnimationSequence, schedule: SequenceSchedule, T: number): {
42
+ stepId: string;
43
+ at: number;
44
+ } | null;
45
+ /** On / off spans of one action along the sequence (for drawing). */
46
+ export declare function cueSpans(schedule: SequenceSchedule, actionId: string): Array<{
47
+ from: number;
48
+ to: number;
49
+ }>;
50
+ export interface CueConflict {
51
+ cue: SequenceCue;
52
+ /** The clip whose track animates a property the action patches. */
53
+ clip: AnimationClip;
54
+ state: string;
55
+ path: string;
56
+ }
57
+ /**
58
+ * 'apply' cues whose action patches a property that a clip of the same step
59
+ * animates — the clip writes over the patch while it runs.
60
+ */
61
+ export declare function findCueConflicts(seq: AnimationSequence, clips: ClipLookup, getAction: (id: string) => {
62
+ targets?: Array<{
63
+ state: string;
64
+ patch: any;
65
+ }>;
66
+ } | undefined): CueConflict[];
67
+ export declare function newCue(actionId: string, stepId: string, at: number, mode?: SequenceCue['mode']): SequenceCue;
68
+ /** Clip-local time (seconds, 0..clip.duration) of an entry at sequence time T. */
69
+ export declare function entryLocalTime(entry: ScheduledClip, T: number): number;
70
+ /**
71
+ * Whether an entry writes at sequence time T: from its start on, and after its end
72
+ * only if its clip holds ('hold'); a 'restore' clip lets go at its end.
73
+ */
74
+ export declare function isEntryActive(entry: ScheduledClip, T: number): boolean;
75
+ export interface StepConflict {
76
+ stepIndex: number;
77
+ /** The upper row — its animation is hidden while the other drives the property. */
78
+ masked: StepClip;
79
+ /** The lower row — it wins. */
80
+ winner: StepClip;
81
+ state: string;
82
+ node?: string;
83
+ path: string;
84
+ }
85
+ /**
86
+ * Same-step clips that drive the same property at the same time. A pair conflicts
87
+ * when the upper row is still ANIMATING while the lower row is active (animating,
88
+ * or holding its end value) — then the lower row hides it. An upper row that only
89
+ * holds under a lower one animating is the expected override, not a conflict.
90
+ */
91
+ export declare function findSequenceConflicts(seq: AnimationSequence, clips: ClipLookup): StepConflict[];
92
+ /** Step-clip ids involved in any conflict (row markers). */
93
+ export declare function conflictedStepClipIds(conflicts: readonly StepConflict[]): Set<string>;
94
+ export declare function newSequence(name: string, key: string): AnimationSequence;
95
+ export declare function newStepClip(clipId: string): StepClip;
96
+ /** Deep copy with fresh ids (duplicate). */
97
+ export declare function cloneSequence(seq: AnimationSequence, name: string, key: string): AnimationSequence;
98
+ //# sourceMappingURL=sequenceUtils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sequenceUtils.d.ts","sourceRoot":"","sources":["../../src/animationsV2/sequenceUtils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,220 @@
1
+ import { DEFAULT_DRIVER_SETTINGS } from './types.js';
2
+ import { uid } from './clipUtils.js';
3
+ const lookup = (clips, id) => (typeof clips === 'function' ? clips(id) : clips.get(id));
4
+ export const clipMap = (clips) => new Map(clips.map(c => [c.id, c]));
5
+ const safeSpeed = (s) => (Number.isFinite(s) && s > 0 ? s : 1);
6
+ const safeDelay = (d) => (Number.isFinite(d) && d > 0 ? d : 0);
7
+ /** Step clips whose clip is missing (deleted, not loaded) are skipped. */
8
+ export function resolveSequence(seq, clips) {
9
+ const entries = [];
10
+ const steps = [];
11
+ let cursor = 0;
12
+ seq.steps.forEach((step, stepIndex) => {
13
+ const stepStart = cursor;
14
+ let stepEnd = stepStart;
15
+ step.clips.forEach((stepClip, row) => {
16
+ const clip = lookup(clips, stepClip.clipId);
17
+ if (!clip)
18
+ return;
19
+ const start = stepStart + safeDelay(stepClip.delay);
20
+ const end = start + Math.max(0, clip.duration) / safeSpeed(stepClip.speed);
21
+ entries.push({ id: stepClip.id, stepIndex, row, stepClip, clip, start, end });
22
+ stepEnd = Math.max(stepEnd, end);
23
+ });
24
+ steps.push({ start: stepStart, end: stepEnd });
25
+ cursor = stepEnd;
26
+ });
27
+ const stepIndexById = new Map(seq.steps.map((s, i) => [s.id, i]));
28
+ const cues = [];
29
+ (seq.cues ?? []).forEach((cue) => {
30
+ const stepIndex = stepIndexById.get(cue.stepId);
31
+ if (stepIndex === undefined)
32
+ return;
33
+ const time = Math.min(cursor, steps[stepIndex].start + safeDelay(cue.at));
34
+ cues.push({ cue, stepIndex, time });
35
+ });
36
+ cues.sort((a, b) => a.time - b.time); // stable: authored order breaks ties
37
+ return { entries, steps, cues, duration: cursor };
38
+ }
39
+ // --- cues (actions) ----------------------------------------------------------------
40
+ /** Every cued action's state at sequence time T: on when its last cue at or before T is 'apply'. */
41
+ export function cueStatesAt(schedule, T) {
42
+ const out = new Map();
43
+ for (const c of schedule.cues) {
44
+ if (!out.has(c.cue.actionId))
45
+ out.set(c.cue.actionId, false);
46
+ if (c.time <= T + 1e-9)
47
+ out.set(c.cue.actionId, c.cue.mode === 'apply');
48
+ }
49
+ return out;
50
+ }
51
+ /**
52
+ * Where sequence time T sits, as a cue anchor: the step it falls in (a boundary
53
+ * belongs to the step that starts there) and the offset into it.
54
+ */
55
+ export function anchorAt(seq, schedule, T) {
56
+ if (!seq.steps.length)
57
+ return null;
58
+ let index = 0;
59
+ schedule.steps.forEach((s, i) => { if (T >= s.start - 1e-9)
60
+ index = i; });
61
+ const start = schedule.steps[index]?.start ?? 0;
62
+ return { stepId: seq.steps[index].id, at: Math.max(0, T - start) };
63
+ }
64
+ /** On / off spans of one action along the sequence (for drawing). */
65
+ export function cueSpans(schedule, actionId) {
66
+ const spans = [];
67
+ let onAt = null;
68
+ for (const c of schedule.cues) {
69
+ if (c.cue.actionId !== actionId)
70
+ continue;
71
+ if (c.cue.mode === 'apply' && onAt === null)
72
+ onAt = c.time;
73
+ else if (c.cue.mode === 'revert' && onAt !== null) {
74
+ spans.push({ from: onAt, to: c.time });
75
+ onAt = null;
76
+ }
77
+ }
78
+ if (onAt !== null)
79
+ spans.push({ from: onAt, to: schedule.duration });
80
+ return spans;
81
+ }
82
+ /** Leaf paths of a patch ('meshSettings.position', 'config.intensity'…); arrays are leaves. */
83
+ function patchPaths(patch, prefix = '') {
84
+ if (!patch || typeof patch !== 'object' || Array.isArray(patch))
85
+ return prefix ? [prefix] : [];
86
+ return Object.entries(patch).flatMap(([k, v]) => patchPaths(v, prefix ? `${prefix}.${k}` : k));
87
+ }
88
+ const overlapsPath = (a, b) => a === b || a.startsWith(`${b}.`) || b.startsWith(`${a}.`);
89
+ /**
90
+ * 'apply' cues whose action patches a property that a clip of the same step
91
+ * animates — the clip writes over the patch while it runs.
92
+ */
93
+ export function findCueConflicts(seq, clips, getAction) {
94
+ const schedule = resolveSequence(seq, clips);
95
+ const out = [];
96
+ for (const sc of schedule.cues) {
97
+ if (sc.cue.mode !== 'apply')
98
+ continue;
99
+ const action = getAction(sc.cue.actionId);
100
+ if (!action?.targets?.length)
101
+ continue;
102
+ const entries = schedule.entries.filter(e => e.stepIndex === sc.stepIndex);
103
+ for (const target of action.targets) {
104
+ const paths = patchPaths(target.patch);
105
+ for (const e of entries) {
106
+ for (const track of e.clip.tracks) {
107
+ if (track.muted || track.node || track.state !== target.state || !track.keys.length)
108
+ continue;
109
+ if (paths.some(p => overlapsPath(p, track.path)))
110
+ out.push({ cue: sc.cue, clip: e.clip, state: track.state, path: track.path });
111
+ }
112
+ }
113
+ }
114
+ }
115
+ return out;
116
+ }
117
+ export function newCue(actionId, stepId, at, mode = 'apply') {
118
+ return { id: uid('cue'), actionId, stepId, at: Math.max(0, at), mode };
119
+ }
120
+ /** Clip-local time (seconds, 0..clip.duration) of an entry at sequence time T. */
121
+ export function entryLocalTime(entry, T) {
122
+ const local = (T - entry.start) * safeSpeed(entry.stepClip.speed);
123
+ return Math.min(entry.clip.duration, Math.max(0, local));
124
+ }
125
+ /**
126
+ * Whether an entry writes at sequence time T: from its start on, and after its end
127
+ * only if its clip holds ('hold'); a 'restore' clip lets go at its end.
128
+ */
129
+ export function isEntryActive(entry, T) {
130
+ if (T < entry.start)
131
+ return false;
132
+ return T <= entry.end || entry.clip.endMode !== 'restore';
133
+ }
134
+ const targetKey = (state, node, path) => `${state}|${node ?? ''}|${path}`;
135
+ /**
136
+ * Same-step clips that drive the same property at the same time. A pair conflicts
137
+ * when the upper row is still ANIMATING while the lower row is active (animating,
138
+ * or holding its end value) — then the lower row hides it. An upper row that only
139
+ * holds under a lower one animating is the expected override, not a conflict.
140
+ */
141
+ export function findSequenceConflicts(seq, clips) {
142
+ const { entries } = resolveSequence(seq, clips);
143
+ const out = [];
144
+ const byStep = new Map();
145
+ entries.forEach(e => {
146
+ const list = byStep.get(e.stepIndex) ?? [];
147
+ list.push(e);
148
+ byStep.set(e.stepIndex, list);
149
+ });
150
+ for (const [stepIndex, list] of byStep) {
151
+ for (let i = 0; i < list.length; i++) {
152
+ const upper = list[i];
153
+ if (upper.end <= upper.start)
154
+ continue; // nothing animates
155
+ const upperTargets = new Map();
156
+ upper.clip.tracks.forEach(t => {
157
+ if (!t.muted && t.keys.length)
158
+ upperTargets.set(targetKey(t.state, t.node, t.path), t);
159
+ });
160
+ if (!upperTargets.size)
161
+ continue;
162
+ for (let j = i + 1; j < list.length; j++) {
163
+ const lower = list[j];
164
+ const lowerEnd = lower.clip.endMode === 'restore' ? lower.end : Infinity;
165
+ const overlaps = upper.start < lowerEnd && lower.start < upper.end;
166
+ if (!overlaps)
167
+ continue;
168
+ const seen = new Set();
169
+ lower.clip.tracks.forEach(t => {
170
+ if (t.muted || !t.keys.length)
171
+ return;
172
+ const k = targetKey(t.state, t.node, t.path);
173
+ const hit = upperTargets.get(k);
174
+ if (!hit || seen.has(k))
175
+ return;
176
+ seen.add(k);
177
+ out.push({ stepIndex, masked: upper.stepClip, winner: lower.stepClip, state: hit.state, node: hit.node, path: hit.path });
178
+ });
179
+ }
180
+ }
181
+ }
182
+ return out;
183
+ }
184
+ /** Step-clip ids involved in any conflict (row markers). */
185
+ export function conflictedStepClipIds(conflicts) {
186
+ const ids = new Set();
187
+ conflicts.forEach(c => { ids.add(c.masked.id); ids.add(c.winner.id); });
188
+ return ids;
189
+ }
190
+ // --- builders ----------------------------------------------------------------------
191
+ export function newSequence(name, key) {
192
+ return {
193
+ id: uid('seq'), name, key, steps: [{ id: uid('step'), clips: [] }], cues: [],
194
+ loop: false, yoyo: false, reverse: false, endMode: 'hold',
195
+ driver: 'time', driverSettings: { ...DEFAULT_DRIVER_SETTINGS }, autoplay: false,
196
+ };
197
+ }
198
+ export function newStepClip(clipId) {
199
+ return { id: uid('sc'), clipId, delay: 0, speed: 1 };
200
+ }
201
+ /** Deep copy with fresh ids (duplicate). */
202
+ export function cloneSequence(seq, name, key) {
203
+ return {
204
+ ...seq,
205
+ id: uid('seq'),
206
+ name,
207
+ key,
208
+ isDirty: undefined,
209
+ ...(() => {
210
+ // Fresh step ids — cues follow their step to the copy.
211
+ const stepIds = new Map(seq.steps.map(s => [s.id, uid('step')]));
212
+ return {
213
+ steps: seq.steps.map(s => ({ id: stepIds.get(s.id), clips: s.clips.map(c => ({ ...c, id: uid('sc') })) })),
214
+ cues: (seq.cues ?? [])
215
+ .filter(c => stepIds.has(c.stepId))
216
+ .map(c => ({ ...c, id: uid('cue'), stepId: stepIds.get(c.stepId) })),
217
+ };
218
+ })(),
219
+ };
220
+ }
@@ -0,0 +1,115 @@
1
+ /** Easing of the segment leaving a key. Names match core's easingUtils, plus 'step'. */
2
+ export type EaseName = 'linear' | 'step' | 'easeInQuad' | 'easeOutQuad' | 'easeInOutQuad' | 'easeInCubic' | 'easeOutCubic' | 'easeInOutCubic' | 'easeInQuart' | 'easeOutQuart' | 'easeInOutQuart' | 'easeInSine' | 'easeOutSine' | 'easeInOutSine' | 'easeInExpo' | 'easeOutExpo' | 'easeInOutExpo' | 'easeInBack' | 'easeOutBack' | 'easeInOutBack' | 'easeOutElastic' | 'easeOutBounce';
3
+ export type KeyValue = number | number[] | string | boolean;
4
+ export interface Keyframe {
5
+ /** Stable within the track — selection and drag follow it, not the index. */
6
+ id: string;
7
+ /** Seconds from clip start. */
8
+ t: number;
9
+ value: KeyValue;
10
+ /** Easing of the segment LEAVING this key. */
11
+ ease?: EaseName;
12
+ }
13
+ export interface Track {
14
+ id: string;
15
+ /** Object id, or 'camera'. (sky / clouds / ocean come later.) */
16
+ state: string;
17
+ /**
18
+ * A node inside a `model` object (its ModelTree key: the node name). When set,
19
+ * `path` is relative to that node: 'position' | 'rotation' | 'scale' | 'visible' |
20
+ * 'material.<color|opacity|roughness|metalness|emissive|emissiveIntensity>' —
21
+ * the same fields a node override (config.nodeOverrides) carries.
22
+ */
23
+ node?: string;
24
+ /** Settings path on that element ('meshSettings.position', 'materialSettings.opacity', 'config.intensity'…), or node-relative when `node` is set. */
25
+ path: string;
26
+ /** Sorted by t. */
27
+ keys: Keyframe[];
28
+ muted?: boolean;
29
+ }
30
+ export interface AnimationClip {
31
+ id: string;
32
+ name: string;
33
+ key: string;
34
+ description?: string;
35
+ /** Seconds. */
36
+ duration: number;
37
+ /** Timeline frame rate — display and snapping only; playback samples real time. */
38
+ fps: number;
39
+ loop: boolean;
40
+ yoyo: boolean;
41
+ /** When a non-looping clip finishes: keep the last values, or return to authored. */
42
+ endMode: 'hold' | 'restore';
43
+ tracks: Track[];
44
+ /** Unsaved changes (save bookkeeping, never sent). */
45
+ isDirty?: boolean;
46
+ }
47
+ /** One clip inside a step. Plays once, forward — loop / yoyo / reverse are the sequence's. */
48
+ export interface StepClip {
49
+ id: string;
50
+ /** AnimationClip id. */
51
+ clipId: string;
52
+ /** Seconds after the step starts (>= 0). */
53
+ delay: number;
54
+ /** 1 = authored speed. */
55
+ speed: number;
56
+ }
57
+ /** Clips that start together. The step ends when its longest clip ends; then the next step starts. */
58
+ export interface SequenceStep {
59
+ id: string;
60
+ clips: StepClip[];
61
+ }
62
+ /**
63
+ * An action switched at a moment of the sequence. Anchored to a step (not absolute
64
+ * time), so retiming clips or reordering steps keeps it on the moment it was put on.
65
+ *
66
+ * Cues are STATE, not events: at sequence time T an action is on when its last cue
67
+ * at or before T is 'apply' (off when 'revert', or when it has no cue yet). So
68
+ * scrubbing, reverse, yoyo, loop and input drivers all land on the same scene.
69
+ */
70
+ export interface SequenceCue {
71
+ id: string;
72
+ /** ActionSequence id. */
73
+ actionId: string;
74
+ /** Step it is anchored to. */
75
+ stepId: string;
76
+ /** Seconds after that step starts (>= 0). */
77
+ at: number;
78
+ mode: 'apply' | 'revert';
79
+ }
80
+ /** What moves a sequence's clock: time (it plays), or an input that scrubs it. */
81
+ export type SequenceDriver = 'time' | 'mouseWheel' | 'mouseX' | 'mouseY';
82
+ export interface SequenceDriverSettings {
83
+ /** mouseWheel: progress per wheel pixel is sensitivity / 1000 (1 ≈ one long scroll for the whole sequence). */
84
+ sensitivity: number;
85
+ /** 0 = follows the input exactly; higher = eases toward it (≈ seconds to settle). */
86
+ smoothing: number;
87
+ /** Flip the direction: right-to-left, bottom-to-top, wheel up = forward. */
88
+ invert: boolean;
89
+ }
90
+ export declare const DEFAULT_DRIVER_SETTINGS: SequenceDriverSettings;
91
+ export interface AnimationSequence {
92
+ id: string;
93
+ name: string;
94
+ key: string;
95
+ description?: string;
96
+ /** Run in order. */
97
+ steps: SequenceStep[];
98
+ /** Actions switched on / off along the sequence. */
99
+ cues: SequenceCue[];
100
+ /** Whole-sequence playback. */
101
+ loop: boolean;
102
+ yoyo: boolean;
103
+ reverse: boolean;
104
+ endMode: 'hold' | 'restore';
105
+ /** What moves the clock. Input drivers scrub the sequence instead of playing it. */
106
+ driver: SequenceDriver;
107
+ driverSettings: SequenceDriverSettings;
108
+ /** Start when the project loads (published viewer; the studio never autoplays). */
109
+ autoplay: boolean;
110
+ /** Unsaved changes (save bookkeeping, never sent). */
111
+ isDirty?: boolean;
112
+ }
113
+ export declare const DEFAULT_EASE: EaseName;
114
+ export declare const FPS_PRESETS: readonly [24, 25, 30, 60];
115
+ //# sourceMappingURL=types.d.ts.map