@3driseai/3drise-viewer 0.1.39 → 0.1.41

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 (315) hide show
  1. package/dist/animationsV2/ClipsRuntime.d.ts +30 -0
  2. package/dist/animationsV2/ClipsRuntime.d.ts.map +1 -1
  3. package/dist/animationsV2/ClipsRuntime.js +185 -14
  4. package/dist/animationsV2/clipUtils.d.ts +15 -0
  5. package/dist/animationsV2/clipUtils.d.ts.map +1 -1
  6. package/dist/animationsV2/clipUtils.js +39 -2
  7. package/dist/animationsV2/normalize.d.ts.map +1 -1
  8. package/dist/animationsV2/normalize.js +4 -0
  9. package/dist/animationsV2/types.d.ts +12 -0
  10. package/dist/animationsV2/types.d.ts.map +1 -1
  11. package/dist/api/sceneHandle.d.ts +40 -3
  12. package/dist/api/sceneHandle.d.ts.map +1 -1
  13. package/dist/api/sceneHandle.js +40 -0
  14. package/dist/components/AnimatedObject.d.ts.map +1 -1
  15. package/dist/components/AnimatedObject.js +6 -2
  16. package/dist/components/EnabledContext.d.ts +12 -0
  17. package/dist/components/EnabledContext.d.ts.map +1 -0
  18. package/dist/components/EnabledContext.js +12 -0
  19. package/dist/components/GalleryObject.d.ts +13 -0
  20. package/dist/components/GalleryObject.d.ts.map +1 -0
  21. package/dist/components/GalleryObject.js +46 -0
  22. package/dist/components/ImageObject.d.ts +9 -0
  23. package/dist/components/ImageObject.d.ts.map +1 -0
  24. package/dist/components/ImageObject.js +26 -0
  25. package/dist/components/ObjectNode.d.ts.map +1 -1
  26. package/dist/components/ObjectNode.js +17 -6
  27. package/dist/components/ObjectsRenderer.d.ts.map +1 -1
  28. package/dist/components/ObjectsRenderer.js +9 -0
  29. package/dist/components/ProjectLoader.d.ts +2 -0
  30. package/dist/components/ProjectLoader.d.ts.map +1 -1
  31. package/dist/components/ProjectLoader.js +2 -2
  32. package/dist/components/SceneBuilder.d.ts +10 -0
  33. package/dist/components/SceneBuilder.d.ts.map +1 -1
  34. package/dist/components/SceneBuilder.js +3 -2
  35. package/dist/components/gallery/BasicCarouselGallery.d.ts +18 -0
  36. package/dist/components/gallery/BasicCarouselGallery.d.ts.map +1 -0
  37. package/dist/components/gallery/BasicCarouselGallery.js +9 -0
  38. package/dist/components/gallery/ContourLinesGallery.d.ts +18 -0
  39. package/dist/components/gallery/ContourLinesGallery.d.ts.map +1 -0
  40. package/dist/components/gallery/ContourLinesGallery.js +9 -0
  41. package/dist/components/gallery/DepthLayersGallery.d.ts +18 -0
  42. package/dist/components/gallery/DepthLayersGallery.d.ts.map +1 -0
  43. package/dist/components/gallery/DepthLayersGallery.js +9 -0
  44. package/dist/components/gallery/EngravingGallery.d.ts +18 -0
  45. package/dist/components/gallery/EngravingGallery.d.ts.map +1 -0
  46. package/dist/components/gallery/EngravingGallery.js +9 -0
  47. package/dist/components/gallery/FlowLinesGallery.d.ts +18 -0
  48. package/dist/components/gallery/FlowLinesGallery.d.ts.map +1 -0
  49. package/dist/components/gallery/FlowLinesGallery.js +9 -0
  50. package/dist/components/gallery/FoldGallery.d.ts +18 -0
  51. package/dist/components/gallery/FoldGallery.d.ts.map +1 -0
  52. package/dist/components/gallery/FoldGallery.js +9 -0
  53. package/dist/components/gallery/GlassPanesGallery.d.ts +18 -0
  54. package/dist/components/gallery/GlassPanesGallery.d.ts.map +1 -0
  55. package/dist/components/gallery/GlassPanesGallery.js +9 -0
  56. package/dist/components/gallery/HaloGallery.d.ts +18 -0
  57. package/dist/components/gallery/HaloGallery.d.ts.map +1 -0
  58. package/dist/components/gallery/HaloGallery.js +9 -0
  59. package/dist/components/gallery/LightThreadsGallery.d.ts +18 -0
  60. package/dist/components/gallery/LightThreadsGallery.d.ts.map +1 -0
  61. package/dist/components/gallery/LightThreadsGallery.js +9 -0
  62. package/dist/components/gallery/LoomGallery.d.ts +18 -0
  63. package/dist/components/gallery/LoomGallery.d.ts.map +1 -0
  64. package/dist/components/gallery/LoomGallery.js +9 -0
  65. package/dist/components/gallery/PaperLanternsGallery.d.ts +18 -0
  66. package/dist/components/gallery/PaperLanternsGallery.d.ts.map +1 -0
  67. package/dist/components/gallery/PaperLanternsGallery.js +9 -0
  68. package/dist/components/gallery/ParticleShiftGallery.d.ts +18 -0
  69. package/dist/components/gallery/ParticleShiftGallery.d.ts.map +1 -0
  70. package/dist/components/gallery/ParticleShiftGallery.js +9 -0
  71. package/dist/components/gallery/PinscreenGallery.d.ts +18 -0
  72. package/dist/components/gallery/PinscreenGallery.d.ts.map +1 -0
  73. package/dist/components/gallery/PinscreenGallery.js +9 -0
  74. package/dist/components/gallery/PopUpGallery.d.ts +18 -0
  75. package/dist/components/gallery/PopUpGallery.d.ts.map +1 -0
  76. package/dist/components/gallery/PopUpGallery.js +9 -0
  77. package/dist/components/gallery/PrismSplitGallery.d.ts +18 -0
  78. package/dist/components/gallery/PrismSplitGallery.d.ts.map +1 -0
  79. package/dist/components/gallery/PrismSplitGallery.js +9 -0
  80. package/dist/components/gallery/RidgelinesGallery.d.ts +18 -0
  81. package/dist/components/gallery/RidgelinesGallery.d.ts.map +1 -0
  82. package/dist/components/gallery/RidgelinesGallery.js +9 -0
  83. package/dist/components/gallery/ShadowBoxGallery.d.ts +18 -0
  84. package/dist/components/gallery/ShadowBoxGallery.d.ts.map +1 -0
  85. package/dist/components/gallery/ShadowBoxGallery.js +9 -0
  86. package/dist/components/gallery/SilkGallery.d.ts +18 -0
  87. package/dist/components/gallery/SilkGallery.d.ts.map +1 -0
  88. package/dist/components/gallery/SilkGallery.js +9 -0
  89. package/dist/components/gallery/SlatsGallery.d.ts +18 -0
  90. package/dist/components/gallery/SlatsGallery.d.ts.map +1 -0
  91. package/dist/components/gallery/SlatsGallery.js +9 -0
  92. package/dist/components/gallery/StrataGallery.d.ts +18 -0
  93. package/dist/components/gallery/StrataGallery.d.ts.map +1 -0
  94. package/dist/components/gallery/StrataGallery.js +9 -0
  95. package/dist/components/gallery/TerracesGallery.d.ts +18 -0
  96. package/dist/components/gallery/TerracesGallery.d.ts.map +1 -0
  97. package/dist/components/gallery/TerracesGallery.js +9 -0
  98. package/dist/components/gallery/WireReliefGallery.d.ts +18 -0
  99. package/dist/components/gallery/WireReliefGallery.d.ts.map +1 -0
  100. package/dist/components/gallery/WireReliefGallery.js +9 -0
  101. package/dist/components/gallery/index.d.ts +46 -0
  102. package/dist/components/gallery/index.d.ts.map +1 -0
  103. package/dist/components/gallery/index.js +22 -0
  104. package/dist/components/gallery/kit/GalleryVariant.d.ts +68 -0
  105. package/dist/components/gallery/kit/GalleryVariant.d.ts.map +1 -0
  106. package/dist/components/gallery/kit/GalleryVariant.js +231 -0
  107. package/dist/components/gallery/kit/feeds.d.ts +7 -0
  108. package/dist/components/gallery/kit/feeds.d.ts.map +1 -0
  109. package/dist/components/gallery/kit/feeds.js +83 -0
  110. package/dist/components/gallery/kit/galleryKit.d.ts +118 -0
  111. package/dist/components/gallery/kit/galleryKit.d.ts.map +1 -0
  112. package/dist/components/gallery/kit/galleryKit.js +298 -0
  113. package/dist/components/gallery/kit/lookBase.d.ts +157 -0
  114. package/dist/components/gallery/kit/lookBase.d.ts.map +1 -0
  115. package/dist/components/gallery/kit/lookBase.js +211 -0
  116. package/dist/components/gallery/kit/pictures.d.ts +14 -0
  117. package/dist/components/gallery/kit/pictures.d.ts.map +1 -0
  118. package/dist/components/gallery/kit/pictures.js +81 -0
  119. package/dist/components/gallery/looks/basicCarousel.d.ts +177 -0
  120. package/dist/components/gallery/looks/basicCarousel.d.ts.map +1 -0
  121. package/dist/components/gallery/looks/basicCarousel.js +315 -0
  122. package/dist/components/gallery/looks/contourLines.d.ts +153 -0
  123. package/dist/components/gallery/looks/contourLines.d.ts.map +1 -0
  124. package/dist/components/gallery/looks/contourLines.js +91 -0
  125. package/dist/components/gallery/looks/depthLayers.d.ts +155 -0
  126. package/dist/components/gallery/looks/depthLayers.d.ts.map +1 -0
  127. package/dist/components/gallery/looks/depthLayers.js +87 -0
  128. package/dist/components/gallery/looks/engraving.d.ts +162 -0
  129. package/dist/components/gallery/looks/engraving.d.ts.map +1 -0
  130. package/dist/components/gallery/looks/engraving.js +96 -0
  131. package/dist/components/gallery/looks/flowLines.d.ts +180 -0
  132. package/dist/components/gallery/looks/flowLines.d.ts.map +1 -0
  133. package/dist/components/gallery/looks/flowLines.js +113 -0
  134. package/dist/components/gallery/looks/fold.d.ts +209 -0
  135. package/dist/components/gallery/looks/fold.d.ts.map +1 -0
  136. package/dist/components/gallery/looks/fold.js +155 -0
  137. package/dist/components/gallery/looks/glassPanes.d.ts +133 -0
  138. package/dist/components/gallery/looks/glassPanes.d.ts.map +1 -0
  139. package/dist/components/gallery/looks/glassPanes.js +208 -0
  140. package/dist/components/gallery/looks/halo.d.ts +100 -0
  141. package/dist/components/gallery/looks/halo.d.ts.map +1 -0
  142. package/dist/components/gallery/looks/halo.js +119 -0
  143. package/dist/components/gallery/looks/lightThreads.d.ts +199 -0
  144. package/dist/components/gallery/looks/lightThreads.d.ts.map +1 -0
  145. package/dist/components/gallery/looks/lightThreads.js +246 -0
  146. package/dist/components/gallery/looks/loom.d.ts +238 -0
  147. package/dist/components/gallery/looks/loom.d.ts.map +1 -0
  148. package/dist/components/gallery/looks/loom.js +256 -0
  149. package/dist/components/gallery/looks/paperLanterns.d.ts +181 -0
  150. package/dist/components/gallery/looks/paperLanterns.d.ts.map +1 -0
  151. package/dist/components/gallery/looks/paperLanterns.js +399 -0
  152. package/dist/components/gallery/looks/particleShift.d.ts +193 -0
  153. package/dist/components/gallery/looks/particleShift.d.ts.map +1 -0
  154. package/dist/components/gallery/looks/particleShift.js +282 -0
  155. package/dist/components/gallery/looks/pinscreen.d.ts +175 -0
  156. package/dist/components/gallery/looks/pinscreen.d.ts.map +1 -0
  157. package/dist/components/gallery/looks/pinscreen.js +96 -0
  158. package/dist/components/gallery/looks/popUp.d.ts +206 -0
  159. package/dist/components/gallery/looks/popUp.d.ts.map +1 -0
  160. package/dist/components/gallery/looks/popUp.js +132 -0
  161. package/dist/components/gallery/looks/prismSplit.d.ts +151 -0
  162. package/dist/components/gallery/looks/prismSplit.d.ts.map +1 -0
  163. package/dist/components/gallery/looks/prismSplit.js +84 -0
  164. package/dist/components/gallery/looks/ridgelines.d.ts +179 -0
  165. package/dist/components/gallery/looks/ridgelines.d.ts.map +1 -0
  166. package/dist/components/gallery/looks/ridgelines.js +111 -0
  167. package/dist/components/gallery/looks/shadowBox.d.ts +152 -0
  168. package/dist/components/gallery/looks/shadowBox.d.ts.map +1 -0
  169. package/dist/components/gallery/looks/shadowBox.js +82 -0
  170. package/dist/components/gallery/looks/silk.d.ts +140 -0
  171. package/dist/components/gallery/looks/silk.d.ts.map +1 -0
  172. package/dist/components/gallery/looks/silk.js +346 -0
  173. package/dist/components/gallery/looks/slats.d.ts +176 -0
  174. package/dist/components/gallery/looks/slats.d.ts.map +1 -0
  175. package/dist/components/gallery/looks/slats.js +93 -0
  176. package/dist/components/gallery/looks/strata.d.ts +172 -0
  177. package/dist/components/gallery/looks/strata.d.ts.map +1 -0
  178. package/dist/components/gallery/looks/strata.js +88 -0
  179. package/dist/components/gallery/looks/terraces.d.ts +168 -0
  180. package/dist/components/gallery/looks/terraces.d.ts.map +1 -0
  181. package/dist/components/gallery/looks/terraces.js +91 -0
  182. package/dist/components/gallery/looks/wireRelief.d.ts +153 -0
  183. package/dist/components/gallery/looks/wireRelief.d.ts.map +1 -0
  184. package/dist/components/gallery/looks/wireRelief.js +128 -0
  185. package/dist/components/image/ContourImage.d.ts +7 -0
  186. package/dist/components/image/ContourImage.d.ts.map +1 -0
  187. package/dist/components/image/ContourImage.js +6 -0
  188. package/dist/components/image/EngravingImage.d.ts +7 -0
  189. package/dist/components/image/EngravingImage.d.ts.map +1 -0
  190. package/dist/components/image/EngravingImage.js +6 -0
  191. package/dist/components/image/FrostImage.d.ts +7 -0
  192. package/dist/components/image/FrostImage.d.ts.map +1 -0
  193. package/dist/components/image/FrostImage.js +6 -0
  194. package/dist/components/image/LenticularImage.d.ts +7 -0
  195. package/dist/components/image/LenticularImage.d.ts.map +1 -0
  196. package/dist/components/image/LenticularImage.js +6 -0
  197. package/dist/components/image/PinscreenImage.d.ts +7 -0
  198. package/dist/components/image/PinscreenImage.d.ts.map +1 -0
  199. package/dist/components/image/PinscreenImage.js +6 -0
  200. package/dist/components/image/PrismImage.d.ts +7 -0
  201. package/dist/components/image/PrismImage.d.ts.map +1 -0
  202. package/dist/components/image/PrismImage.js +6 -0
  203. package/dist/components/image/ProjectorImage.d.ts +7 -0
  204. package/dist/components/image/ProjectorImage.d.ts.map +1 -0
  205. package/dist/components/image/ProjectorImage.js +6 -0
  206. package/dist/components/image/ReliefImage.d.ts +7 -0
  207. package/dist/components/image/ReliefImage.d.ts.map +1 -0
  208. package/dist/components/image/ReliefImage.js +6 -0
  209. package/dist/components/image/RollImage.d.ts +7 -0
  210. package/dist/components/image/RollImage.d.ts.map +1 -0
  211. package/dist/components/image/RollImage.js +6 -0
  212. package/dist/components/image/ShardsImage.d.ts +126 -0
  213. package/dist/components/image/ShardsImage.d.ts.map +1 -0
  214. package/dist/components/image/ShardsImage.js +470 -0
  215. package/dist/components/image/core/contour.d.ts +126 -0
  216. package/dist/components/image/core/contour.d.ts.map +1 -0
  217. package/dist/components/image/core/contour.js +123 -0
  218. package/dist/components/image/core/engraving.d.ts +135 -0
  219. package/dist/components/image/core/engraving.d.ts.map +1 -0
  220. package/dist/components/image/core/engraving.js +163 -0
  221. package/dist/components/image/core/frost.d.ts +126 -0
  222. package/dist/components/image/core/frost.d.ts.map +1 -0
  223. package/dist/components/image/core/frost.js +156 -0
  224. package/dist/components/image/core/imageCore.d.ts +110 -0
  225. package/dist/components/image/core/imageCore.d.ts.map +1 -0
  226. package/dist/components/image/core/imageCore.js +269 -0
  227. package/dist/components/image/core/lenticular.d.ts +129 -0
  228. package/dist/components/image/core/lenticular.d.ts.map +1 -0
  229. package/dist/components/image/core/lenticular.js +132 -0
  230. package/dist/components/image/core/pinscreen.d.ts +126 -0
  231. package/dist/components/image/core/pinscreen.d.ts.map +1 -0
  232. package/dist/components/image/core/pinscreen.js +147 -0
  233. package/dist/components/image/core/prism.d.ts +120 -0
  234. package/dist/components/image/core/prism.d.ts.map +1 -0
  235. package/dist/components/image/core/prism.js +164 -0
  236. package/dist/components/image/core/projector.d.ts +135 -0
  237. package/dist/components/image/core/projector.d.ts.map +1 -0
  238. package/dist/components/image/core/projector.js +225 -0
  239. package/dist/components/image/core/relief.d.ts +111 -0
  240. package/dist/components/image/core/relief.d.ts.map +1 -0
  241. package/dist/components/image/core/relief.js +94 -0
  242. package/dist/components/image/core/roll.d.ts +114 -0
  243. package/dist/components/image/core/roll.d.ts.map +1 -0
  244. package/dist/components/image/core/roll.js +116 -0
  245. package/dist/components/image/imageVariant.d.ts +46 -0
  246. package/dist/components/image/imageVariant.d.ts.map +1 -0
  247. package/dist/components/image/imageVariant.js +128 -0
  248. package/dist/components/image/index.d.ts +22 -0
  249. package/dist/components/image/index.d.ts.map +1 -0
  250. package/dist/components/image/index.js +10 -0
  251. package/dist/components/image/pictureCycle.d.ts +15 -0
  252. package/dist/components/image/pictureCycle.d.ts.map +1 -0
  253. package/dist/components/image/pictureCycle.js +82 -0
  254. package/dist/components/index.d.ts +4 -0
  255. package/dist/components/index.d.ts.map +1 -1
  256. package/dist/components/index.js +4 -0
  257. package/dist/components/volumetricClouds/VolumetricCloudsPass.d.ts +9 -7
  258. package/dist/components/volumetricClouds/VolumetricCloudsPass.d.ts.map +1 -1
  259. package/dist/components/volumetricClouds/VolumetricCloudsPass.js +39 -27
  260. package/dist/constants.d.ts +1 -1
  261. package/dist/constants.d.ts.map +1 -1
  262. package/dist/constants.js +18 -5
  263. package/dist/galleryRuntime.d.ts +57 -0
  264. package/dist/galleryRuntime.d.ts.map +1 -0
  265. package/dist/galleryRuntime.js +105 -0
  266. package/dist/hooks/useConfigLive.d.ts +1 -1
  267. package/dist/hooks/useConfigLive.d.ts.map +1 -1
  268. package/dist/index.d.ts +4 -1
  269. package/dist/index.d.ts.map +1 -1
  270. package/dist/index.js +4 -0
  271. package/dist/keyPad/KeyPadControls.d.ts +16 -0
  272. package/dist/keyPad/KeyPadControls.d.ts.map +1 -0
  273. package/dist/keyPad/KeyPadControls.js +176 -0
  274. package/dist/keyPad/index.d.ts +16 -0
  275. package/dist/keyPad/index.d.ts.map +1 -0
  276. package/dist/keyPad/index.js +8 -0
  277. package/dist/keyPad/keyBindings.d.ts +43 -0
  278. package/dist/keyPad/keyBindings.d.ts.map +1 -0
  279. package/dist/keyPad/keyBindings.js +92 -0
  280. package/dist/keyPad/keyPadAnimation.d.ts +28 -0
  281. package/dist/keyPad/keyPadAnimation.d.ts.map +1 -0
  282. package/dist/keyPad/keyPadAnimation.js +131 -0
  283. package/dist/keyPad/keyPadMotion.d.ts +68 -0
  284. package/dist/keyPad/keyPadMotion.d.ts.map +1 -0
  285. package/dist/keyPad/keyPadMotion.js +283 -0
  286. package/dist/keyPad/keyPadStore.d.ts +25 -0
  287. package/dist/keyPad/keyPadStore.d.ts.map +1 -0
  288. package/dist/keyPad/keyPadStore.js +63 -0
  289. package/dist/keyPad/types.d.ts +23 -0
  290. package/dist/keyPad/types.d.ts.map +1 -0
  291. package/dist/keyPad/types.js +9 -0
  292. package/dist/operations/catalogue/motionTrail.d.ts.map +1 -1
  293. package/dist/operations/catalogue/motionTrail.js +8 -1
  294. package/dist/operations/catalogue/visibility.d.ts.map +1 -1
  295. package/dist/operations/catalogue/visibility.js +23 -1
  296. package/dist/shaders/clouds/CloudResolveMaterial.d.ts +2 -1
  297. package/dist/shaders/clouds/CloudResolveMaterial.d.ts.map +1 -1
  298. package/dist/shaders/clouds/CloudResolveMaterial.js +37 -12
  299. package/dist/shaders/clouds/CloudVolumeMaterial.d.ts +4 -0
  300. package/dist/shaders/clouds/CloudVolumeMaterial.d.ts.map +1 -1
  301. package/dist/shaders/clouds/CloudVolumeMaterial.js +15 -3
  302. package/dist/triggers/kinds/gallery.d.ts +2 -0
  303. package/dist/triggers/kinds/gallery.d.ts.map +1 -0
  304. package/dist/triggers/kinds/gallery.js +39 -0
  305. package/dist/triggers/kinds/index.d.ts +1 -0
  306. package/dist/triggers/kinds/index.d.ts.map +1 -1
  307. package/dist/triggers/kinds/index.js +1 -0
  308. package/dist/ui/UiAnchorUpdater.d.ts.map +1 -1
  309. package/dist/ui/UiAnchorUpdater.js +2 -1
  310. package/dist/utils/cursorPicking.d.ts.map +1 -1
  311. package/dist/utils/cursorPicking.js +2 -1
  312. package/dist/utils/shownInScene.d.ts +13 -0
  313. package/dist/utils/shownInScene.d.ts.map +1 -0
  314. package/dist/utils/shownInScene.js +16 -0
  315. package/package.json +2 -2
@@ -78,13 +78,47 @@ export interface SceneValues {
78
78
  /** Why `set` would fail, or undefined when it can write this path. */
79
79
  check(target: string, path: string): string | undefined;
80
80
  }
81
- export type SceneHandleEventType = 'actionApplied' | 'actionReverted' | 'animationStart' | 'animationEnd' | 'animationLoop';
81
+ export type SceneHandleEventType = 'actionApplied' | 'actionReverted' | 'animationStart' | 'animationEnd' | 'animationLoop' | 'galleryChange';
82
82
  export interface SceneHandleEvent {
83
83
  type: SceneHandleEventType;
84
- kind: 'action' | 'clip' | 'sequence';
84
+ kind: 'action' | 'clip' | 'sequence' | 'gallery';
85
85
  id: string;
86
86
  key?: string;
87
87
  name: string;
88
+ /** galleryChange: the picture now shown. */
89
+ index?: number;
90
+ count?: number;
91
+ url?: string;
92
+ }
93
+ export interface SceneGalleryInfo {
94
+ id: string;
95
+ key?: string;
96
+ name: string;
97
+ /** The picture shown now (0-based) and how many there are. */
98
+ index: number;
99
+ count: number;
100
+ /** True while a picture change is playing. */
101
+ busy: boolean;
102
+ /** Autoplay paused by pause(). */
103
+ paused: boolean;
104
+ url?: string;
105
+ }
106
+ /**
107
+ * The scene's galleries that can be driven (variants with navigation: carousel, …; the layout gallery has none) —
108
+ * drive them from your own buttons: `scene.galleries.next('hero')`, `scene.on('galleryChange', …)`.
109
+ */
110
+ export interface SceneGalleries {
111
+ list(): SceneGalleryInfo[];
112
+ get(ref: string): SceneGalleryInfo | undefined;
113
+ next(ref: string): boolean;
114
+ prev(ref: string): boolean;
115
+ /** Change to picture i (wraps). */
116
+ goTo(ref: string, index: number): boolean;
117
+ /** Show picture i at once, without the change animation. */
118
+ jump(ref: string, index: number): boolean;
119
+ /** Pause / resume its autoplay. */
120
+ pause(ref: string): boolean;
121
+ resume(ref: string): boolean;
88
122
  }
89
123
  export interface SceneHandle {
90
124
  actions: {
@@ -98,6 +132,8 @@ export interface SceneHandle {
98
132
  reset(): void;
99
133
  };
100
134
  clips: ScenePlayback<SceneClipInfo>;
135
+ /** Galleries: next / prev / goTo and `on('galleryChange', …)`. */
136
+ galleries: SceneGalleries;
101
137
  sequences: ScenePlayback<SceneSequenceInfo> & {
102
138
  /**
103
139
  * Drive a sequence from your own input (page scroll, a slider…): its position,
@@ -123,11 +159,12 @@ export interface SceneHandleSource {
123
159
  actions: ActionSequence[];
124
160
  clips: AnimationClip[];
125
161
  sequences: AnimationSequence[];
126
- /** The project's objects, to resolve a `values` target by key, id or name. */
162
+ /** The project's objects, to resolve a `values` or gallery target by key, id or name. */
127
163
  objects?: Array<{
128
164
  id: string;
129
165
  name?: string;
130
166
  key?: string;
167
+ type?: string;
131
168
  }>;
132
169
  }
133
170
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"sceneHandle.d.ts","sourceRoot":"","sources":["../../src/api/sceneHandle.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sceneHandle.d.ts","sourceRoot":"","sources":["../../src/api/sceneHandle.ts"],"names":[],"mappings":"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"}
@@ -20,6 +20,7 @@
20
20
  //
21
21
  import { SceneActions } from '@3driseai/3drise-core';
22
22
  import ClipsRuntime from '../animationsV2/ClipsRuntime.js';
23
+ import GalleryRuntime from '../galleryRuntime.js';
23
24
  import { runCommand } from '../triggers/index.js';
24
25
  import { clipMap, resolveSequence } from '../animationsV2/sequenceUtils.js';
25
26
  function resolve(items, ref, kind) {
@@ -203,6 +204,36 @@ export function createSceneHandle(getSource) {
203
204
  const current = ClipsRuntime.getLiveValue(state, m[1], node);
204
205
  return Array.isArray(current) ? { base: m[1], index: COMPONENT[m[2]] } : undefined;
205
206
  }
207
+ // ----- galleries -------------------------------------------------------------------
208
+ const galleryObjects = () => (getSource().objects ?? []).filter(o => GalleryRuntime.has(o.id));
209
+ const findGallery = (ref) => {
210
+ const list = galleryObjects();
211
+ return list.find(o => o.key === ref) ?? list.find(o => o.id === ref) ?? list.find(o => o.name === ref);
212
+ };
213
+ const galleryInfo = (o) => {
214
+ const g = GalleryRuntime.info(o.id);
215
+ return g ? { id: o.id, key: o.key, name: o.name ?? o.id, index: g.index, count: g.count, busy: g.busy, paused: g.paused, url: g.currentUrl } : undefined;
216
+ };
217
+ const galleryRun = (ref, command, index) => {
218
+ const o = findGallery(ref);
219
+ if (!o) {
220
+ console.warn(`[3drise] No gallery "${ref}" in this project. Known: ${galleryObjects().map(i => i.key || i.name || i.id).join(', ') || 'none'}`);
221
+ return false;
222
+ }
223
+ runCommand({ id: `code:gallery:${o.id}`, kind: 'gallery', ref: o.id, command, ...(index !== undefined ? { index } : {}) }, code({ id: o.id, key: o.key }));
224
+ return true;
225
+ };
226
+ const galleries = {
227
+ list: () => galleryObjects().map(galleryInfo).filter((g) => !!g),
228
+ get: (ref) => { const o = findGallery(ref); return o ? galleryInfo(o) : undefined; },
229
+ next: (ref) => galleryRun(ref, 'next'),
230
+ prev: (ref) => galleryRun(ref, 'prev'),
231
+ goTo: (ref, index) => galleryRun(ref, 'goTo', index),
232
+ jump: (ref, index) => { const o = findGallery(ref); const g = o && GalleryRuntime.get(o.id); if (!g)
233
+ return false; g.jump(index); return true; },
234
+ pause: (ref) => galleryRun(ref, 'pause'),
235
+ resume: (ref) => galleryRun(ref, 'resume'),
236
+ };
206
237
  const values = {
207
238
  check(ref, path) {
208
239
  const t = target(ref);
@@ -280,9 +311,18 @@ export function createSceneHandle(getSource) {
280
311
  },
281
312
  },
282
313
  clips: clipControls,
314
+ galleries,
283
315
  sequences: sequenceControls,
284
316
  run: (command) => runCommand(command, { source: { host: 'code', id: 'run' }, chain: [], catalog }),
285
317
  on(type, listener) {
318
+ if (type === 'galleryChange') {
319
+ return GalleryRuntime.on((e) => {
320
+ // Only this project's galleries — another scene on the page shares the runtime.
321
+ const o = (getSource().objects ?? []).find(x => x.id === e.id);
322
+ if (o)
323
+ listener({ type, kind: 'gallery', id: o.id, key: o.key, name: o.name ?? o.id, index: e.index, count: e.count, url: e.currentUrl });
324
+ });
325
+ }
286
326
  if (type === 'actionApplied' || type === 'actionReverted') {
287
327
  return SceneActions.onEvent((e) => {
288
328
  if (e.type === 'reset')
@@ -1 +1 @@
1
- {"version":3,"file":"AnimatedObject.d.ts","sourceRoot":"","sources":["../../src/components/AnimatedObject.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAO7D,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAE,iBAAiB,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AACtG,MAAM,WAAW,mBAAoB,SAAQ,gBAAgB;IACzD,QAAQ,EAAE,MAAM,CAAC;IACjB,kBAAkB,EAAE,iBAAiB,CAAC;IACtC,aAAa,EAAE,qBAAqB,CAAC;IACrC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,SAAS,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IACtC,iBAAiB,CAAC,EAAE,CAAC,aAAa,EAAE,qBAAqB,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC;IACjH,cAAc,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,CAAC,YAAY,CAAC,KAAK,IAAI,CAAC;IACvD,cAAc,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,CAAC,YAAY,CAAC,KAAK,IAAI,CAAC;IACvD,MAAM,CAAC,EAAE,cAAc,GAAG,IAAI,CAAC;IAC/B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC7B;AAGD,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC,mBAAmB,CAyFvD,CAAC;AAEH,eAAe,cAAc,CAAC"}
1
+ {"version":3,"file":"AnimatedObject.d.ts","sourceRoot":"","sources":["../../src/components/AnimatedObject.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAQ7D,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAE,iBAAiB,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AACtG,MAAM,WAAW,mBAAoB,SAAQ,gBAAgB;IACzD,QAAQ,EAAE,MAAM,CAAC;IACjB,kBAAkB,EAAE,iBAAiB,CAAC;IACtC,aAAa,EAAE,qBAAqB,CAAC;IACrC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,SAAS,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IACtC,iBAAiB,CAAC,EAAE,CAAC,aAAa,EAAE,qBAAqB,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC;IACjH,cAAc,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,CAAC,YAAY,CAAC,KAAK,IAAI,CAAC;IACvD,cAAc,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,CAAC,YAAY,CAAC,KAAK,IAAI,CAAC;IACvD,MAAM,CAAC,EAAE,cAAc,GAAG,IAAI,CAAC;IAC/B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC7B;AAGD,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC,mBAAmB,CA4FvD,CAAC;AAEH,eAAe,cAAc,CAAC"}
@@ -1,6 +1,7 @@
1
1
  import { jsx as _jsx, Fragment as _Fragment } from "react/jsx-runtime";
2
2
  import { useObjectReady } from '../hooks/useObjectReady.js';
3
- import { useRef, useEffect, useCallback, useMemo, memo } from 'react';
3
+ import { useRef, useEffect, useCallback, useMemo, memo, useContext } from 'react';
4
+ import { EnabledContext } from './EnabledContext.js';
4
5
  import { objectEffectClipOf, objectEffectStepsOf, objectTakesVisualEffects, DEFAULT_EFFECT_SPREAD } from '@3driseai/3drise-core';
5
6
  import { usePathAnimation } from '../hooks/usePathAnimation.js';
6
7
  import { useObjectEffectLayers } from '../operations/useObjectEffectLayers.js';
@@ -36,8 +37,11 @@ visible = true, children, parentRef, handleObjectClick, onPointerEnter, onPointe
36
37
  // Pass the ref itself, not `groupRef.current`: the animation hooks read
37
38
  // `.current` inside useFrame, so the group resolves the moment React
38
39
  // attaches it — no scene lookup and no extra render needed.
40
+ // Disabled (hidden itself, or under a hidden group): its constant animations and mouse-move pause.
41
+ // They are time-based, so on enable they pick up where the clock is — no catch-up jump.
42
+ const enabled = useContext(EnabledContext) && visible;
39
43
  useObjectAnimation(createdObject, animateMaterial, {
40
- enabled: createdObject.type !== 'gallery', //
44
+ enabled: createdObject.type !== 'gallery' && enabled, //
41
45
  hovered,
42
46
  }, groupRef);
43
47
  // Effects layered on the object (frost, metalize…) — switched on / off, held while on.
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Whether the scene object rendering here is enabled: its own `visible` AND every ancestor's.
3
+ *
4
+ * A group's enabled state overrides its children's, recursively, at runtime only — nothing is
5
+ * written to the children, so switching the group back on brings each child back to its own
6
+ * state (a child hidden on its own stays hidden). ObjectNode provides it per object (from the
7
+ * PRESENTED visibility, so a group whose effects follow its visibility plays them out before its
8
+ * children switch off); AnimatedObject reads it to pause the object's own constant animations
9
+ * and mouse-move while disabled. Pointer events skip hidden subtrees separately (shownInScene).
10
+ */
11
+ export declare const EnabledContext: import("react").Context<boolean>;
12
+ //# sourceMappingURL=EnabledContext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EnabledContext.d.ts","sourceRoot":"","sources":["../../src/components/EnabledContext.ts"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AACH,eAAO,MAAM,cAAc,kCAAsB,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { createContext } from 'react';
2
+ /**
3
+ * Whether the scene object rendering here is enabled: its own `visible` AND every ancestor's.
4
+ *
5
+ * A group's enabled state overrides its children's, recursively, at runtime only — nothing is
6
+ * written to the children, so switching the group back on brings each child back to its own
7
+ * state (a child hidden on its own stays hidden). ObjectNode provides it per object (from the
8
+ * PRESENTED visibility, so a group whose effects follow its visibility plays them out before its
9
+ * children switch off); AnimatedObject reads it to pause the object's own constant animations
10
+ * and mouse-move while disabled. Pointer events skip hidden subtrees separately (shownInScene).
11
+ */
12
+ export const EnabledContext = createContext(true);
@@ -0,0 +1,13 @@
1
+ import React from 'react';
2
+ import type { CreatedObjectSettings } from '@3driseai/3drise-core';
3
+ import type { Object3D } from 'three';
4
+ import type { ThreeEvent } from '@react-three/fiber';
5
+ import type { ObjectReadyProps } from '../types/objectReady';
6
+ type GalleryObjectProps = ObjectReadyProps & {
7
+ createdObject: CreatedObjectSettings;
8
+ /** A click on a frame (the layout gallery): the studio selects it and runs the interaction. */
9
+ handleObjectClick?: (createdObject: CreatedObjectSettings, ref: Object3D, event: ThreeEvent<MouseEvent>) => void;
10
+ };
11
+ declare const GalleryObject: React.FC<GalleryObjectProps>;
12
+ export default GalleryObject;
13
+ //# sourceMappingURL=GalleryObject.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GalleryObject.d.ts","sourceRoot":"","sources":["../../src/components/GalleryObject.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,EAAE,qBAAqB,EAA2C,MAAM,uBAAuB,CAAC;AAC5G,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAI7D,KAAK,kBAAkB,GAAG,gBAAgB,GAAG;IACzC,aAAa,EAAE,qBAAqB,CAAC;IACrC,+FAA+F;IAC/F,iBAAiB,CAAC,EAAE,CAAC,aAAa,EAAE,qBAAqB,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC;CACpH,CAAC;AAiCF,QAAA,MAAM,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC,kBAAkB,CAe/C,CAAC;AACF,eAAe,aAAa,CAAC"}
@@ -0,0 +1,46 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import GalleryLayout from './GalleryLayout.js';
3
+ import { LightThreadsGallery, SilkGallery, ParticleShiftGallery, GlassPanesGallery, HaloGallery, LoomGallery, BasicCarouselGallery, PaperLanternsGallery, PinscreenGallery, DepthLayersGallery, ContourLinesGallery, PrismSplitGallery, EngravingGallery, SlatsGallery, FoldGallery, WireReliefGallery, TerracesGallery, ShadowBoxGallery, PopUpGallery, RidgelinesGallery, FlowLinesGallery, StrataGallery } from './gallery/index.js';
4
+ /**
5
+ * The gallery variants' components by config.type. `layout` is the layout gallery (GalleryLayout: frames on a layout,
6
+ * driven by the shared transform effects, taking the material); every other variant is its own construction with
7
+ * the uniform contract (config, id, keyframes, mouseMove, ready callbacks) and registers with GalleryRuntime.
8
+ */
9
+ const FAMILY = {
10
+ layout: GalleryLayout,
11
+ lightThreads: LightThreadsGallery,
12
+ silk: SilkGallery,
13
+ particleShift: ParticleShiftGallery,
14
+ glassPanes: GlassPanesGallery,
15
+ halo: HaloGallery,
16
+ loom: LoomGallery,
17
+ basicCarousel: BasicCarouselGallery,
18
+ paperLanterns: PaperLanternsGallery,
19
+ pinscreen: PinscreenGallery,
20
+ depthLayers: DepthLayersGallery,
21
+ contourLines: ContourLinesGallery,
22
+ prismSplit: PrismSplitGallery,
23
+ engraving: EngravingGallery,
24
+ slats: SlatsGallery,
25
+ fold: FoldGallery,
26
+ wireRelief: WireReliefGallery,
27
+ terraces: TerracesGallery,
28
+ shadowBox: ShadowBoxGallery,
29
+ popUp: PopUpGallery,
30
+ ridgelines: RidgelinesGallery,
31
+ flowLines: FlowLinesGallery,
32
+ strata: StrataGallery,
33
+ };
34
+ const GalleryObject = ({ createdObject, handleObjectClick, onObjectReady, onObjectDispose }) => {
35
+ const config = createdObject.config;
36
+ if (!config)
37
+ return null;
38
+ // A gallery saved before the family existed has no config.type: it is the layout gallery (migrateGalleryObject adds it on load).
39
+ const Component = FAMILY[config.type ?? 'layout'];
40
+ if (!Component)
41
+ return null;
42
+ // Every variant renders the same way: FAMILY is the only per-key entry. The layout gallery reads createdObject
43
+ // (its frames carry the material and the transform effects) and ignores the rest.
44
+ return _jsx(Component, { config: config, id: createdObject.id, createdObject: createdObject, handleObjectClick: handleObjectClick, keyframes: createdObject.animations?.gallery?.animations, mouseMove: createdObject.mouseMove?.gallery, onObjectReady: (_source, ref) => onObjectReady?.(createdObject, ref), onObjectDispose: (_source, ref) => onObjectDispose?.(createdObject, ref) });
45
+ };
46
+ export default GalleryObject;
@@ -0,0 +1,9 @@
1
+ import React from 'react';
2
+ import type { CreatedObjectSettings } from '@3driseai/3drise-core';
3
+ import type { ObjectReadyProps } from '../types/objectReady';
4
+ type ImageObjectProps = ObjectReadyProps & {
5
+ createdObject: CreatedObjectSettings;
6
+ };
7
+ declare const ImageObject: React.FC<ImageObjectProps>;
8
+ export default ImageObject;
9
+ //# sourceMappingURL=ImageObject.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ImageObject.d.ts","sourceRoot":"","sources":["../../src/components/ImageObject.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,EAAE,qBAAqB,EAA2C,MAAM,uBAAuB,CAAC;AAC5G,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAG7D,KAAK,gBAAgB,GAAG,gBAAgB,GAAG;IACvC,aAAa,EAAE,qBAAqB,CAAC;CACxC,CAAC;AAiBF,QAAA,MAAM,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,gBAAgB,CAa3C,CAAC;AACF,eAAe,WAAW,CAAC"}
@@ -0,0 +1,26 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { ShardsImage, ProjectorImage, ReliefImage, PinscreenImage, PrismImage, LenticularImage, FrostImage, RollImage, ContourImage, EngravingImage } from './image/index.js';
3
+ /** The image variants' components by config.type (shards, …). */
4
+ const FAMILY = {
5
+ shards: ShardsImage,
6
+ projector: ProjectorImage,
7
+ relief: ReliefImage,
8
+ pinscreen: PinscreenImage,
9
+ prism: PrismImage,
10
+ lenticular: LenticularImage,
11
+ frost: FrostImage,
12
+ roll: RollImage,
13
+ contour: ContourImage,
14
+ engraving: EngravingImage,
15
+ };
16
+ const ImageObject = ({ createdObject, onObjectReady, onObjectDispose }) => {
17
+ const config = createdObject.config;
18
+ if (!config)
19
+ return null;
20
+ const Component = FAMILY[config.type];
21
+ if (!Component)
22
+ return null;
23
+ // Every variant renders the same way: FAMILY is the only per-key entry.
24
+ return _jsx(Component, { config: config, id: createdObject.id, keyframes: createdObject.animations?.image?.animations, mouseMove: createdObject.mouseMove?.image, onObjectReady: (_source, ref) => onObjectReady?.(createdObject, ref), onObjectDispose: (_source, ref) => onObjectDispose?.(createdObject, ref) });
25
+ };
26
+ export default ImageObject;
@@ -1 +1 @@
1
- {"version":3,"file":"ObjectNode.d.ts","sourceRoot":"","sources":["../../src/components/ObjectNode.tsx"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,KAAK,EAAe,qBAAqB,EAA2C,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACzI,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAiBrD,KAAK,eAAe,GAAG,gBAAgB,GAAG;IACtC,IAAI,EAAE,cAAc,CAAC;IACrB,iBAAiB,CAAC,EAAE,CAAC,MAAM,EAAE,qBAAqB,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC;CAC7G,CAAC;AA4BF,QAAA,MAAM,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,eAAe,CA8IzC,CAAC;AACF,eAAe,UAAU,CAAC"}
1
+ {"version":3,"file":"ObjectNode.d.ts","sourceRoot":"","sources":["../../src/components/ObjectNode.tsx"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,KAAK,EAAe,qBAAqB,EAA2C,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACzI,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAiBrD,KAAK,eAAe,GAAG,gBAAgB,GAAG;IACtC,IAAI,EAAE,cAAc,CAAC;IACrB,iBAAiB,CAAC,EAAE,CAAC,MAAM,EAAE,qBAAqB,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC;CAC7G,CAAC;AA8BF,QAAA,MAAM,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,eAAe,CAmJzC,CAAC;AACF,eAAe,UAAU,CAAC"}
@@ -1,16 +1,18 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { useCallback, useContext, useMemo } from "react";
3
3
  import { GroupMaterialContext, groupMaterialFor } from "./GroupMaterialContext.js";
4
+ import { EnabledContext } from "./EnabledContext.js";
4
5
  import CustomPrimitive from "./CustomPrimitive.js";
5
6
  import CreatedObject from "./CreatedObject.js";
6
7
  import PathRenderer from './PathRenderer.js';
7
- import GalleryLayout from './GalleryLayout.js';
8
8
  import EffectsGenerator from './EffectsGenerator.js';
9
9
  import ParticlesGenerator from './ParticlesGenerator.js';
10
10
  import LightObject from "./LightObject.js";
11
11
  import EnvironmentObject from "./EnvironmentObject.js";
12
12
  import LandObject from "./LandObject.js";
13
13
  import TextGenerator from "./TextGenerator.js";
14
+ import ImageObject from "./ImageObject.js";
15
+ import GalleryObject from "./GalleryObject.js";
14
16
  import Galaxy from "./Galaxy.js";
15
17
  import GridGenerator from "./GridsGenerator.js";
16
18
  import OceanBuilder from "./OceanBuilder.js";
@@ -19,7 +21,7 @@ import LayoutInstances from "./LayoutInstances.js";
19
21
  import { useRuntimeSettings } from "../hooks/useRuntimeSettings.js";
20
22
  import { usePresentedVisibility } from "../operations/usePresentedVisibility.js";
21
23
  import { SELF_MANAGED_MATERIAL } from "../constants.js";
22
- import { LAYOUT_CAPABLE_TYPES, getObjectLayoutSupport, normalizeObjectLayout, isGenerativeParticlesConfig } from "@3driseai/3drise-core";
24
+ import { LAYOUT_CAPABLE_TYPES, getObjectLayoutSupport, normalizeObjectLayout, isGenerativeParticlesConfig, isGalleryObjectConfig, galleryTakesMaterial } from "@3driseai/3drise-core";
23
25
  // Slots after the first render with no ready callbacks: one object reports once.
24
26
  const NO_READY = {};
25
27
  // A point light's shadow is six extra renders; only slot 0 keeps it. Cached per settings
@@ -46,7 +48,9 @@ const GroupWithChildren = ({ createdObject, children, onObjectReady, onObjectDis
46
48
  const isGroup = createdObject.type === 'group';
47
49
  // Generative particle objects own their shaders, like effects do.
48
50
  const selfManagedMaterial = SELF_MANAGED_MATERIAL.has(createdObject.type)
49
- || (createdObject.type === 'particles' && isGenerativeParticlesConfig(createdObject.config));
51
+ || (createdObject.type === 'particles' && isGenerativeParticlesConfig(createdObject.config))
52
+ // Gallery variants with their own shaders (carousel, …); the layout gallery's frames take the material.
53
+ || (createdObject.type === 'gallery' && isGalleryObjectConfig(createdObject.config) && !galleryTakesMaterial(createdObject.config));
50
54
  // A group's material (Apply on) goes to the objects inside it — see GroupMaterialContext.
51
55
  const parentMaterial = useContext(GroupMaterialContext);
52
56
  const ms = createdObject.materialSettings;
@@ -66,6 +70,9 @@ const ObjectNode = ({ node, onObjectReady, onObjectDispose, handleObjectClick })
66
70
  const runtimeObject = useRuntimeSettings(node.createdObject?.id, node.createdObject);
67
71
  // An object whose effects follow its visibility stays drawn until they have played out.
68
72
  const createdObject = usePresentedVisibility(runtimeObject);
73
+ // Enabled = its own (presented) visibility and every ancestor's — see EnabledContext.
74
+ const parentEnabled = useContext(EnabledContext);
75
+ const enabled = parentEnabled && createdObject?.meshSettings?.visible !== false;
69
76
  // Children describe themselves with their own settings; the scene above
70
77
  // knows them by the node's createdObject, so relabel on the way up.
71
78
  const relabel = useCallback((obj) => ({
@@ -133,11 +140,14 @@ const ObjectNode = ({ node, onObjectReady, onObjectDispose, handleObjectClick })
133
140
  effect: (obj, _onObjectReady, slot = 0) => (_jsx(EffectsGenerator, { settings: {
134
141
  config: obj.config,
135
142
  }, id: obj.id /* every layout slot: each copy registers its live handle, so clips and drags reach the whole layout */, keyframes: obj.animations?.effect?.animations, mouseMove: obj.mouseMove?.effect, ...(slot === 0 ? relabel(obj) : NO_READY) }, obj.id)),
136
- gallery: (obj, onObjectReady) => (_jsx(GalleryLayout, { createdObject: obj, handleObjectClick: handleObjectClick, ...relabel(obj) })),
143
+ // Gallery variants by config.type (layout = GalleryLayout, carousel, …) through GalleryObject's FAMILY table.
144
+ gallery: (obj, onObjectReady) => (_jsx(GalleryObject, { createdObject: obj, handleObjectClick: handleObjectClick, onObjectReady: onObjectReady, onObjectDispose: onObjectDispose })),
137
145
  light: (obj, _onObjectReady, slot = 0) => (_jsx(LightObject, { createdObject: slot === 0 ? obj : withoutShadow(obj), ...(slot === 0 ? relabel(obj) : NO_READY) })),
138
146
  environment: (obj, onObjectReady) => (_jsx(EnvironmentObject, { createdObject: obj, onObjectReady: onObjectReady, onObjectDispose: onObjectDispose })),
139
147
  space: (obj, onObjectReady) => (_jsx(Galaxy, { createdObject: obj, onObjectReady: onObjectReady, onObjectDispose: onObjectDispose })),
140
148
  land: (obj, onObjectReady) => (_jsx(LandObject, { createdObject: obj, onObjectReady: onObjectReady, onObjectDispose: onObjectDispose })),
149
+ // Image variants (config.type: shards, …): one picture at a time from config.imageUrls, every change animated.
150
+ image: (obj, onObjectReady) => (_jsx(ImageObject, { createdObject: obj, onObjectReady: onObjectReady, onObjectDispose: onObjectDispose })),
141
151
  // rain: (obj: CreatedObjectSettings, cameraSettings: CameraState, onObjectReady?: (object: CreatedObjectSettings, ref: Object3D) => void) => (
142
152
  // <Rain
143
153
  // settings={obj}
@@ -180,13 +190,14 @@ const ObjectNode = ({ node, onObjectReady, onObjectDispose, handleObjectClick })
180
190
  const shouldRenderAsGroup = hasChildren || createdObject.type === 'group' || createdObject.type === 'effect';
181
191
  const renderedObject = shouldRenderAsGroup
182
192
  ? _jsx(GroupWithChildren, { createdObject: createdObject, children: children, onObjectReady: onObjectReady, onObjectDispose: onObjectDispose, handleObjectClick: handleObjectClick, renderObject: renderObject })
183
- : _jsx(CreatedObject, { createdObject: createdObject, onObjectReady: onObjectReady, onObjectDispose: onObjectDispose, handleObjectClick: handleObjectClick, shouldApply3driseMaterial: !SELF_MANAGED_MATERIAL.has(createdObject.type), children: renderObject(createdObject) }, createdObject.id);
193
+ : _jsx(CreatedObject, { createdObject: createdObject, onObjectReady: onObjectReady, onObjectDispose: onObjectDispose, handleObjectClick: handleObjectClick, shouldApply3driseMaterial: !(SELF_MANAGED_MATERIAL.has(createdObject.type) || (createdObject.type === 'gallery' && isGalleryObjectConfig(createdObject.config) && !galleryTakesMaterial(createdObject.config))), children: renderObject(createdObject) }, createdObject.id);
184
194
  // createdObject.effects
185
195
  // ? <>
186
196
  // {renderObject(createdObject)}
187
197
  // {/* <EffectsLayer effects={createdObject.effects} /> */}
188
198
  // </>
189
199
  // : renderObject(createdObject);
190
- return renderedObject;
200
+ // Always the Provider (same element type whatever the value), so toggling never remounts the subtree.
201
+ return _jsx(EnabledContext.Provider, { value: enabled, children: renderedObject });
191
202
  };
192
203
  export default ObjectNode;
@@ -1 +1 @@
1
- {"version":3,"file":"ObjectsRenderer.d.ts","sourceRoot":"","sources":["../../src/components/ObjectsRenderer.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,qBAAqB,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AACvH,OAAO,KAAK,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAU9E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,UAAU,oBAAqB,SAAQ,gBAAgB;IACnD,cAAc,EAAE,WAAW,CAAC;IAC5B,qBAAqB,EAAE,qBAAqB,CAAC;IAC7C,cAAc,EAAE,qBAAqB,EAAE,CAAC;IACxC,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;IAC5B,iBAAiB,CAAC,EAAE,CAAC,MAAM,EAAE,qBAAqB,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC;IAC1G,mEAAmE;IACnE,SAAS,CAAC,EAAE,iBAAiB,EAAE,CAAC;IAChC,KAAK,CAAC,EAAE,aAAa,EAAE,CAAC;IACxB,eAAe,CAAC,EAAE,cAAc,EAAE,CAAC;CACtC;AAGD,QAAA,MAAM,eAAe,EAAE,KAAK,CAAC,EAAE,CAAC,oBAAoB,CAgGlD,CAAC;AAEH,eAAe,eAAe,CAAC"}
1
+ {"version":3,"file":"ObjectsRenderer.d.ts","sourceRoot":"","sources":["../../src/components/ObjectsRenderer.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,qBAAqB,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AACvH,OAAO,KAAK,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAU9E,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,EAAY,MAAM,oBAAoB,CAAC;AAE/D,UAAU,oBAAqB,SAAQ,gBAAgB;IACnD,cAAc,EAAE,WAAW,CAAC;IAC5B,qBAAqB,EAAE,qBAAqB,CAAC;IAC7C,cAAc,EAAE,qBAAqB,EAAE,CAAC;IACxC,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;IAC5B,iBAAiB,CAAC,EAAE,CAAC,MAAM,EAAE,qBAAqB,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC;IAC1G,mEAAmE;IACnE,SAAS,CAAC,EAAE,iBAAiB,EAAE,CAAC;IAChC,KAAK,CAAC,EAAE,aAAa,EAAE,CAAC;IACxB,eAAe,CAAC,EAAE,cAAc,EAAE,CAAC;CACtC;AAGD,QAAA,MAAM,eAAe,EAAE,KAAK,CAAC,EAAE,CAAC,oBAAoB,CAuGlD,CAAC;AAEH,eAAe,eAAe,CAAC"}
@@ -10,6 +10,8 @@ import { installStallLog } from '../utils/stallLog.js';
10
10
  import { findById } from '../utils/sceneQuery.js';
11
11
  import { commandsOf, sceneReadiness } from '../triggers/index.js';
12
12
  import { useObjectReady } from '../hooks/useObjectReady.js';
13
+ import { useThree } from "@react-three/fiber";
14
+ import { shownHits } from '../utils/shownInScene.js';
13
15
  const ObjectsRenderer = memo(({ cameraSettings, createdObjects, generalObjectSettings, onObjectsReady, onObjectReady, onObjectDispose, handleObjectClick, sequences = [], clips = [], actionSequences = [], }) => {
14
16
  const groupRef = useRef(null);
15
17
  const objectsTree = useMemo(() => buildObjectTree(createdObjects), [createdObjects]);
@@ -30,6 +32,13 @@ const ObjectsRenderer = memo(({ cameraSettings, createdObjects, generalObjectSet
30
32
  readyObjectsCount.current = Math.max(0, readyObjectsCount.current - 1);
31
33
  onObjectDispose && onObjectDispose(object, ref);
32
34
  }, [onObjectDispose]);
35
+ // Pointer events reach only what is shown: R3F (like three's Raycaster) ignores `visible`, so
36
+ // objects inside a disabled group would still take hover / click and block what is behind them.
37
+ const setEvents = useThree(s => s.setEvents);
38
+ useEffect(() => {
39
+ setEvents({ filter: (hits) => shownHits(hits) });
40
+ return () => setEvents({ filter: undefined });
41
+ }, [setEvents]);
33
42
  // The wrapper group itself is an Object3D the parent may want to transform.
34
43
  useObjectReady(groupRef, generalObjectSettings, onObjectReady, onObjectDispose);
35
44
  function filterInteractionsByEvent(interactions, mouseEvent) {
@@ -13,6 +13,8 @@ declare const ProjectLoader: React.ForwardRefExoticComponent<ObjectReadyProps &
13
13
  ui?: boolean;
14
14
  /** CSS appended to every UI layer after its own — restyle the generic rise-* classes or set --rise-* variables. */
15
15
  uiStyles?: string;
16
+ /** Keyboard control as the project's keyPadSettings sets it (default true). `false` leaves the page's keys alone. */
17
+ keyboard?: boolean;
16
18
  onSceneInitialized?: () => void;
17
19
  /**
18
20
  * Called once the project is loaded and its canvas exists, with the handle for
@@ -1 +1 @@
1
- {"version":3,"file":"ProjectLoader.d.ts","sourceRoot":"","sources":["../../src/components/ProjectLoader.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAItD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAInE,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAErD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAqB7D,QAAA,MAAM,aAAa;eAlBJ,MAAM;uBACE,KAAK,CAAC,SAAS;oBAClB,CAAC,MAAM,EAAE,qBAAqB,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,CAAC,UAAU,CAAC,KAAK,IAAI;oBACrF,CAAC,MAAM,EAAE,qBAAqB,EAAE,GAAG,EAAE,QAAQ,KAAK,IAAI;IACtE,oHAAoH;SAC/G,OAAO;IACZ,mHAAmH;eACxG,MAAM;yBACI,MAAM,IAAI;IAC/B;;;;OAIG;mBACY,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI;qCA6D7C,CAAC;AAEH,eAAe,aAAa,CAAC"}
1
+ {"version":3,"file":"ProjectLoader.d.ts","sourceRoot":"","sources":["../../src/components/ProjectLoader.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAItD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAInE,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAErD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAuB7D,QAAA,MAAM,aAAa;eApBJ,MAAM;uBACE,KAAK,CAAC,SAAS;oBAClB,CAAC,MAAM,EAAE,qBAAqB,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,CAAC,UAAU,CAAC,KAAK,IAAI;oBACrF,CAAC,MAAM,EAAE,qBAAqB,EAAE,GAAG,EAAE,QAAQ,KAAK,IAAI;IACtE,oHAAoH;SAC/G,OAAO;IACZ,mHAAmH;eACxG,MAAM;IACjB,qHAAqH;eAC1G,OAAO;yBACG,MAAM,IAAI;IAC/B;;;;OAIG;mBACY,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI;qCA6D7C,CAAC;AAEH,eAAe,aAAa,CAAC"}
@@ -7,7 +7,7 @@ import { migrateObject } from '@3driseai/3drise-core';
7
7
  import LoadingIndicator from "./LoadingIndicator.js";
8
8
  import { useMeshController } from "../hooks/useMeshController.js";
9
9
  import { installCdnUrls } from "../utils/cdnUrls.js";
10
- const ProjectLoader = forwardRef(({ projectId, onObjectClick, onObjectHover, ui = true, uiStyles, onSceneInitialized, onSceneReady, onObjectReady, onObjectDispose, loadingIndicator = _jsx(LoadingIndicator, { text: "Loading project...", fullScreen: true, animate: true }) }, ref) => {
10
+ const ProjectLoader = forwardRef(({ projectId, onObjectClick, onObjectHover, ui = true, uiStyles, keyboard = true, onSceneInitialized, onSceneReady, onObjectReady, onObjectDispose, loadingIndicator = _jsx(LoadingIndicator, { text: "Loading project...", fullScreen: true, animate: true }) }, ref) => {
11
11
  const [project, setProject] = useState(null);
12
12
  const meshController = useMeshController();
13
13
  useEffect(() => {
@@ -61,7 +61,7 @@ const ProjectLoader = forwardRef(({ projectId, onObjectClick, onObjectHover, ui
61
61
  flexDirection: 'column', gap: '1rem'
62
62
  }, children: loadingIndicator });
63
63
  }
64
- return _jsx(_Fragment, { children: _jsx(SceneBuilder, { ref: ref, project: project, onSceneReady: onSceneReady, loadingIndicator: loadingIndicator, onSceneInitialized: onSceneInitialized, ui: ui, uiStyles: uiStyles, onObjectClick: onObjectClick, onObjectReady: onObjectReady, onObjectDispose: onObjectDispose }) });
64
+ return _jsx(_Fragment, { children: _jsx(SceneBuilder, { ref: ref, project: project, onSceneReady: onSceneReady, loadingIndicator: loadingIndicator, onSceneInitialized: onSceneInitialized, ui: ui, uiStyles: uiStyles, keyboard: keyboard, onObjectClick: onObjectClick, onObjectReady: onObjectReady, onObjectDispose: onObjectDispose }) });
65
65
  });
66
66
  ProjectLoader.displayName = 'ProjectLoader';
67
67
  export default ProjectLoader;
@@ -16,6 +16,11 @@ export type SceneBuilderViewerProps = SceneBuilderProps & ObjectReadyProps & {
16
16
  uiLayers?: UiLayer[];
17
17
  /** Extra CSS appended to every UI layer after its own, to restyle them. */
18
18
  uiStyles?: string;
19
+ /**
20
+ * Keyboard control (arrows / Ctrl / Alt / + − / Home) as the project's
21
+ * sceneSettings.keyPadSettings sets it (default true). `false` leaves the page's keys alone.
22
+ */
23
+ keyboard?: boolean;
19
24
  };
20
25
  declare const SceneBuilder: React.ForwardRefExoticComponent<SceneBuilderProps & ObjectReadyProps & {
21
26
  /**
@@ -31,6 +36,11 @@ declare const SceneBuilder: React.ForwardRefExoticComponent<SceneBuilderProps &
31
36
  uiLayers?: UiLayer[];
32
37
  /** Extra CSS appended to every UI layer after its own, to restyle them. */
33
38
  uiStyles?: string;
39
+ /**
40
+ * Keyboard control (arrows / Ctrl / Alt / + − / Home) as the project's
41
+ * sceneSettings.keyPadSettings sets it (default true). `false` leaves the page's keys alone.
42
+ */
43
+ keyboard?: boolean;
34
44
  } & React.RefAttributes<SceneHandle>>;
35
45
  export default SceneBuilder;
36
46
  //# sourceMappingURL=SceneBuilder.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"SceneBuilder.d.ts","sourceRoot":"","sources":["../../src/components/SceneBuilder.tsx"],"names":[],"mappings":"AAKA,OAAO,EAAqB,KAAK,WAAW,EAA0B,MAAM,oBAAoB,CAAC;AAGjG,OAAO,KAAK,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAWxE,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAM7D,MAAM,MAAM,uBAAuB,GAAG,iBAAiB,GAAG,gBAAgB,GAAG;IACzE;;;OAGG;IACH,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC;IAC5C,mFAAmF;IACnF,gBAAgB,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACnC,oEAAoE;IACpE,EAAE,CAAC,EAAE,OAAO,CAAC;IACb,qFAAqF;IACrF,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC;IACrB,2EAA2E;IAC3E,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,QAAA,MAAM,YAAY;IAfd;;;OAGG;mBACY,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI;IAC3C,mFAAmF;uBAChE,KAAK,CAAC,SAAS;IAClC,oEAAoE;SAC/D,OAAO;IACZ,qFAAqF;eAC1E,OAAO,EAAE;IACpB,2EAA2E;eAChE,MAAM;qCA6LnB,CAAC;AAIH,eAAe,YAAY,CAAC"}
1
+ {"version":3,"file":"SceneBuilder.d.ts","sourceRoot":"","sources":["../../src/components/SceneBuilder.tsx"],"names":[],"mappings":"AAKA,OAAO,EAAqB,KAAK,WAAW,EAA0B,MAAM,oBAAoB,CAAC;AAGjG,OAAO,KAAK,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAWxE,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAO7D,MAAM,MAAM,uBAAuB,GAAG,iBAAiB,GAAG,gBAAgB,GAAG;IACzE;;;OAGG;IACH,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC;IAC5C,mFAAmF;IACnF,gBAAgB,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACnC,oEAAoE;IACpE,EAAE,CAAC,EAAE,OAAO,CAAC;IACb,qFAAqF;IACrF,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC;IACrB,2EAA2E;IAC3E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACtB,CAAC;AAEF,QAAA,MAAM,YAAY;IApBd;;;OAGG;mBACY,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI;IAC3C,mFAAmF;uBAChE,KAAK,CAAC,SAAS;IAClC,oEAAoE;SAC/D,OAAO;IACZ,qFAAqF;eAC1E,OAAO,EAAE;IACpB,2EAA2E;eAChE,MAAM;IACjB;;;OAGG;eACQ,OAAO;qCA8LpB,CAAC;AAIH,eAAe,YAAY,CAAC"}
@@ -21,7 +21,8 @@ import UiLayers from "../ui/UiLayers.js";
21
21
  import { sceneReadiness, useSceneReady } from "../triggers/readiness.js";
22
22
  import { resetSunSystemLive } from "../animationsV2/sunSystemLive.js";
23
23
  import UiAnchorUpdater from "../ui/UiAnchorUpdater.js";
24
- const SceneBuilder = forwardRef(({ project, width = "100%", height = "100vh", style = {}, className = "", onSceneInitialized, onSceneReady, loadingIndicator, ui = true, uiLayers, uiStyles, onObjectClick, onObjectReady, onObjectDispose, }, ref) => {
24
+ import KeyPadControls from "../keyPad/KeyPadControls.js";
25
+ const SceneBuilder = forwardRef(({ project, width = "100%", height = "100vh", style = {}, className = "", onSceneInitialized, onSceneReady, loadingIndicator, ui = true, uiLayers, uiStyles, keyboard = true, onObjectClick, onObjectReady, onObjectDispose, }, ref) => {
25
26
  const sceneSettings = (project.sceneSettingsData || {});
26
27
  // const meshController = useMeshController();
27
28
  const [isThreeJsMounted, setIsThreeJsMounted] = useState(false);
@@ -189,7 +190,7 @@ const SceneBuilder = forwardRef(({ project, width = "100%", height = "100vh", st
189
190
  clouds: environment?.clouds,
190
191
  ocean: environment?.ocean,
191
192
  terrain: environment?.terrain,
192
- }) }), _jsx(CursorController, { effects: project.cursor?.effects, clickActions: project.cursor?.clickActions, onObjectReady: onObjectReady, onObjectDispose: onObjectDispose }), _jsx(UiAnchorUpdater, {})] }) }), ui && _jsx(UiLayers, { layers: uiLayers ?? project.uiLayers, scene: sceneHandle, extraCss: uiStyles }), (!started || !ready) && (_jsx("div", { style: { position: 'absolute', inset: 0, zIndex: 1000, backgroundColor, display: 'flex', alignItems: 'center', justifyContent: 'center' }, children: loadingIndicator }))] }));
193
+ }) }), _jsx(CursorController, { effects: project.cursor?.effects, clickActions: project.cursor?.clickActions, onObjectReady: onObjectReady, onObjectDispose: onObjectDispose }), _jsx(UiAnchorUpdater, {})] }) }), ui && _jsx(UiLayers, { layers: uiLayers ?? project.uiLayers, scene: sceneHandle, extraCss: uiStyles }), keyboard && ready && _jsx(KeyPadControls, { settings: sceneSettings.keyPadSettings, clips: animationClips, sequences: animationSequences, homePosition: position }), (!started || !ready) && (_jsx("div", { style: { position: 'absolute', inset: 0, zIndex: 1000, backgroundColor, display: 'flex', alignItems: 'center', justifyContent: 'center' }, children: loadingIndicator }))] }));
193
194
  });
194
195
  SceneBuilder.displayName = 'SceneBuilder';
195
196
  /** Readiness entry for "the canvas exists" (its renderer is what compiles the shaders). */
@@ -0,0 +1,18 @@
1
+ import React from 'react';
2
+ import type { AnimationOptions, MouseMoveDomain, BasicCarouselGalleryConfig } from '@3driseai/3drise-core';
3
+ import type { ObjectReadyProps } from '../../types/objectReady';
4
+ export interface BasicCarouselGalleryProps extends ObjectReadyProps {
5
+ config: BasicCarouselGalleryConfig;
6
+ /** Scene object id: the live-edit handle and the gallery's runtime entry are found by it. */
7
+ id?: string;
8
+ /** Keyframes on the config knobs (animations.gallery.animations). */
9
+ keyframes?: AnimationOptions[];
10
+ /** Pointer bindings on the config knobs (mouseMove.gallery). */
11
+ mouseMove?: MouseMoveDomain;
12
+ }
13
+ /**
14
+ * A coverflow carousel of framed pictures on a damped scroll with drag, throw and snap, a lifted centre frame and a soft floor reflection; the cursor tilts or lifts the frames. Use for portfolios, product lines and photo sets.
15
+ */
16
+ declare const BasicCarouselGallery: React.FC<BasicCarouselGalleryProps>;
17
+ export default BasicCarouselGallery;
18
+ //# sourceMappingURL=BasicCarouselGallery.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BasicCarouselGallery.d.ts","sourceRoot":"","sources":["../../../src/components/gallery/BasicCarouselGallery.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,0BAA0B,EAAE,MAAM,uBAAuB,CAAC;AAC3G,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAShE,MAAM,WAAW,yBAA0B,SAAQ,gBAAgB;IAC/D,MAAM,EAAE,0BAA0B,CAAC;IACnC,6FAA6F;IAC7F,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,qEAAqE;IACrE,SAAS,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAC/B,gEAAgE;IAChE,SAAS,CAAC,EAAE,eAAe,CAAC;CAC/B;AAED;;GAEG;AACH,QAAA,MAAM,oBAAoB,EAAE,KAAK,CAAC,EAAE,CAAC,yBAAyB,CAG7D,CAAC;AAEF,eAAe,oBAAoB,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { DEFAULT_GALLERY_OBJECTS, GALLERY_OBJECTS_ANIMATABLE } from '@3driseai/3drise-core';
3
+ import GalleryVariant from './kit/GalleryVariant.js';
4
+ import * as LOOK from './looks/basicCarousel.js';
5
+ /**
6
+ * A coverflow carousel of framed pictures on a damped scroll with drag, throw and snap, a lifted centre frame and a soft floor reflection; the cursor tilts or lifts the frames. Use for portfolios, product lines and photo sets.
7
+ */
8
+ const BasicCarouselGallery = ({ config, ...rest }) => (_jsx(GalleryVariant, { look: LOOK, defaults: DEFAULT_GALLERY_OBJECTS.basicCarousel, animatable: GALLERY_OBJECTS_ANIMATABLE.basicCarousel, config: config, ...rest }));
9
+ export default BasicCarouselGallery;
@@ -0,0 +1,18 @@
1
+ import React from 'react';
2
+ import type { AnimationOptions, MouseMoveDomain, ContourLinesGalleryConfig } from '@3driseai/3drise-core';
3
+ import type { ObjectReadyProps } from '../../types/objectReady';
4
+ export interface ContourLinesGalleryProps extends ObjectReadyProps {
5
+ config: ContourLinesGalleryConfig;
6
+ /** Scene object id: the live-edit handle and the gallery's runtime entry are found by it. */
7
+ id?: string;
8
+ /** Keyframes on the config knobs (animations.gallery.animations). */
9
+ keyframes?: AnimationOptions[];
10
+ /** Pointer bindings on the config knobs (mouseMove.gallery). */
11
+ mouseMove?: MouseMoveDomain;
12
+ }
13
+ /**
14
+ * Pictures drawn as the contour lines of their own brightness, like a topographic map: inactive ones are a few thin grey lines, the active one fills in as a soft wave thickens the lines into the solid picture; the cursor lifts the contours into relief. Use for architecture, data and graphic showcases.
15
+ */
16
+ declare const ContourLinesGallery: React.FC<ContourLinesGalleryProps>;
17
+ export default ContourLinesGallery;
18
+ //# sourceMappingURL=ContourLinesGallery.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ContourLinesGallery.d.ts","sourceRoot":"","sources":["../../../src/components/gallery/ContourLinesGallery.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAC1G,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAShE,MAAM,WAAW,wBAAyB,SAAQ,gBAAgB;IAC9D,MAAM,EAAE,yBAAyB,CAAC;IAClC,6FAA6F;IAC7F,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,qEAAqE;IACrE,SAAS,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAC/B,gEAAgE;IAChE,SAAS,CAAC,EAAE,eAAe,CAAC;CAC/B;AAED;;GAEG;AACH,QAAA,MAAM,mBAAmB,EAAE,KAAK,CAAC,EAAE,CAAC,wBAAwB,CAG3D,CAAC;AAEF,eAAe,mBAAmB,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { DEFAULT_GALLERY_OBJECTS, GALLERY_OBJECTS_ANIMATABLE } from '@3driseai/3drise-core';
3
+ import GalleryVariant from './kit/GalleryVariant.js';
4
+ import * as LOOK from './looks/contourLines.js';
5
+ /**
6
+ * Pictures drawn as the contour lines of their own brightness, like a topographic map: inactive ones are a few thin grey lines, the active one fills in as a soft wave thickens the lines into the solid picture; the cursor lifts the contours into relief. Use for architecture, data and graphic showcases.
7
+ */
8
+ const ContourLinesGallery = ({ config, ...rest }) => (_jsx(GalleryVariant, { look: LOOK, defaults: DEFAULT_GALLERY_OBJECTS.contourLines, animatable: GALLERY_OBJECTS_ANIMATABLE.contourLines, config: config, ...rest }));
9
+ export default ContourLinesGallery;