react-native-webrtc-kaleidoscope 2.0.0 → 2.1.0

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 (1185) hide show
  1. package/NOTICE.md +8 -8
  2. package/README.md +185 -56
  3. package/android/build.gradle +13 -0
  4. package/android/src/main/java/com/simiancraft/kaleidoscope/CompositeLayers.kt +127 -0
  5. package/android/src/main/java/com/simiancraft/kaleidoscope/EffectTuning.kt +69 -69
  6. package/android/src/main/java/com/simiancraft/kaleidoscope/KaleidoscopeModule.kt +86 -33
  7. package/android/src/main/java/com/simiancraft/kaleidoscope/Registration.kt +23 -64
  8. package/android/src/main/java/com/simiancraft/kaleidoscope/effects/CompositeFactory.kt +691 -0
  9. package/android/src/main/java/com/simiancraft/kaleidoscope/effects/LayerShaders.kt +30 -0
  10. package/android/src/main/java/com/simiancraft/kaleidoscope/effects/TransformFactory.kt +248 -200
  11. package/android/src/main/java/com/simiancraft/kaleidoscope/gpu/Egl.kt +82 -70
  12. package/android/src/main/java/com/simiancraft/kaleidoscope/gpu/Fbo.kt +50 -47
  13. package/android/src/main/java/com/simiancraft/kaleidoscope/gpu/FramePipeline.kt +106 -105
  14. package/android/src/main/java/com/simiancraft/kaleidoscope/gpu/GlDebug.kt +23 -23
  15. package/android/src/main/java/com/simiancraft/kaleidoscope/gpu/GlProgram.kt +76 -57
  16. package/android/src/main/java/com/simiancraft/kaleidoscope/gpu/Ingest.kt +92 -71
  17. package/android/src/main/java/com/simiancraft/kaleidoscope/gpu/Orientation.kt +25 -25
  18. package/android/src/main/java/com/simiancraft/kaleidoscope/gpu/Shaders.kt +57 -76
  19. package/android/src/main/java/com/simiancraft/kaleidoscope/gpu/ShadersGenerated.kt +1162 -25
  20. package/android/src/main/java/com/simiancraft/kaleidoscope/segmentation/Mask.kt +254 -242
  21. package/android/src/main/java/com/simiancraft/kaleidoscope/segmentation/MaskTuning.kt +28 -25
  22. package/android/src/main/java/com/simiancraft/kaleidoscope/segmentation/SegmentationEngine.kt +104 -98
  23. package/android/src/test/java/com/simiancraft/kaleidoscope/CompositeLayersTest.kt +165 -0
  24. package/app.plugin.js +9 -255
  25. package/catalog/composites/clouds/clouds.controls.tsx +19 -0
  26. package/catalog/composites/clouds/clouds.ts +32 -0
  27. package/catalog/composites/corporate-blobs/corporate-blobs.controls.tsx +24 -0
  28. package/catalog/composites/corporate-blobs/corporate-blobs.thumb.webp +0 -0
  29. package/catalog/composites/corporate-blobs/corporate-blobs.ts +51 -0
  30. package/catalog/composites/corporate-blobs/corporate-blobs.web.ts +42 -0
  31. package/catalog/composites/fairy-cave/fairy-cave.controls.tsx +33 -0
  32. package/catalog/composites/fairy-cave/fairy-cave.thumb.webp +0 -0
  33. package/catalog/composites/fairy-cave/fairy-cave.ts +53 -0
  34. package/catalog/composites/fairy-cave/fairy-cave.web.ts +47 -0
  35. package/catalog/composites/fairy-grotto/fairy-grotto.controls.tsx +34 -0
  36. package/catalog/composites/fairy-grotto/fairy-grotto.thumb.webp +0 -0
  37. package/catalog/composites/fairy-grotto/fairy-grotto.ts +54 -0
  38. package/catalog/composites/fairy-grotto/fairy-grotto.web.ts +47 -0
  39. package/catalog/composites/fairy-hollow/fairy-hollow.controls.tsx +34 -0
  40. package/catalog/composites/fairy-hollow/fairy-hollow.thumb.webp +0 -0
  41. package/catalog/composites/fairy-hollow/fairy-hollow.ts +55 -0
  42. package/catalog/composites/fairy-hollow/fairy-hollow.web.ts +47 -0
  43. package/catalog/composites/nebula/nebula.controls.tsx +19 -0
  44. package/catalog/composites/nebula/nebula.thumb.webp +0 -0
  45. package/catalog/composites/nebula/nebula.ts +37 -0
  46. package/catalog/composites/nebula/nebula.web.ts +30 -0
  47. package/catalog/composites/observation-deck/observation-deck.controls.tsx +28 -0
  48. package/catalog/composites/observation-deck/observation-deck.thumb.webp +0 -0
  49. package/catalog/composites/observation-deck/observation-deck.ts +59 -0
  50. package/catalog/composites/observation-deck/observation-deck.web.ts +50 -0
  51. package/catalog/composites/simianlights/simianlights.controls.tsx +19 -0
  52. package/catalog/composites/simianlights/simianlights.thumb.webp +0 -0
  53. package/catalog/composites/simianlights/simianlights.ts +34 -0
  54. package/catalog/composites/simianlights/simianlights.web.ts +29 -0
  55. package/catalog/composites/underwater/underwater.controls.tsx +19 -0
  56. package/catalog/composites/underwater/underwater.thumb.webp +0 -0
  57. package/catalog/composites/underwater/underwater.ts +42 -0
  58. package/catalog/composites/underwater/underwater.web.ts +36 -0
  59. package/catalog/composites/wizard-tower/wizard-tower.controls.tsx +23 -0
  60. package/catalog/composites/wizard-tower/wizard-tower.thumb.webp +0 -0
  61. package/catalog/composites/wizard-tower/wizard-tower.ts +44 -0
  62. package/catalog/composites/wizard-tower/wizard-tower.web.ts +35 -0
  63. package/catalog/composites/wizard-tower-night/wizard-tower-night.controls.tsx +22 -0
  64. package/catalog/composites/wizard-tower-night/wizard-tower-night.thumb.webp +0 -0
  65. package/catalog/composites/wizard-tower-night/wizard-tower-night.ts +43 -0
  66. package/catalog/composites/wizard-tower-night/wizard-tower-night.web.ts +35 -0
  67. package/catalog/images/README.md +188 -0
  68. package/catalog/images/corporate/corporate-logo.thumb.webp +0 -0
  69. package/catalog/images/corporate/corporate-logo.ts +6 -0
  70. package/catalog/images/corporate/corporate-logo.web.ts +7 -0
  71. package/catalog/images/corporate/corporate-logo.webp +0 -0
  72. package/catalog/images/debug/debug-resolutions.thumb.webp +0 -0
  73. package/catalog/images/debug/debug-resolutions.ts +6 -0
  74. package/catalog/images/debug/debug-resolutions.web.ts +7 -0
  75. package/catalog/images/fairy-caves/grotto.thumb.webp +0 -0
  76. package/catalog/images/fairy-caves/grotto.ts +6 -0
  77. package/catalog/images/fairy-caves/grotto.web.ts +7 -0
  78. package/catalog/images/fairy-caves/grotto.webp +0 -0
  79. package/catalog/images/fairy-caves/hollow.thumb.webp +0 -0
  80. package/catalog/images/fairy-caves/hollow.ts +6 -0
  81. package/catalog/images/fairy-caves/hollow.web.ts +7 -0
  82. package/catalog/images/fairy-caves/hollow.webp +0 -0
  83. package/catalog/images/fairy-caves/treehouse-2.thumb.webp +0 -0
  84. package/catalog/images/fairy-caves/treehouse-2.ts +6 -0
  85. package/catalog/images/fairy-caves/treehouse-2.web.ts +7 -0
  86. package/catalog/images/fairy-caves/treehouse-2.webp +0 -0
  87. package/catalog/images/fairy-caves/treehouse-3.thumb.webp +0 -0
  88. package/catalog/images/fairy-caves/treehouse-3.ts +6 -0
  89. package/catalog/images/fairy-caves/treehouse-3.web.ts +7 -0
  90. package/catalog/images/fairy-caves/treehouse-3.webp +0 -0
  91. package/catalog/images/fairy-caves/treehouse.thumb.webp +0 -0
  92. package/catalog/images/fairy-caves/treehouse.ts +6 -0
  93. package/catalog/images/fairy-caves/treehouse.web.ts +7 -0
  94. package/catalog/images/fairy-caves/treehouse.webp +0 -0
  95. package/catalog/images/home/home-dark.thumb.webp +0 -0
  96. package/catalog/images/home/home-dark.ts +6 -0
  97. package/catalog/images/home/home-dark.web.ts +7 -0
  98. package/catalog/images/home/home-light.thumb.webp +0 -0
  99. package/catalog/images/home/home-light.ts +6 -0
  100. package/catalog/images/home/home-light.web.ts +7 -0
  101. package/catalog/images/image-ids.ts +42 -0
  102. package/catalog/images/image.types.ts +5 -0
  103. package/catalog/images/index.ts +7 -0
  104. package/catalog/images/nature/landscape-dark.thumb.webp +0 -0
  105. package/catalog/images/nature/landscape-dark.ts +6 -0
  106. package/catalog/images/nature/landscape-dark.web.ts +7 -0
  107. package/catalog/images/nature/landscape-light.thumb.webp +0 -0
  108. package/catalog/images/nature/landscape-light.ts +6 -0
  109. package/catalog/images/nature/landscape-light.web.ts +7 -0
  110. package/catalog/images/office/office-dark.thumb.webp +0 -0
  111. package/catalog/images/office/office-dark.ts +6 -0
  112. package/catalog/images/office/office-dark.web.ts +7 -0
  113. package/catalog/images/office/office-light.thumb.webp +0 -0
  114. package/catalog/images/office/office-light.ts +6 -0
  115. package/catalog/images/office/office-light.web.ts +7 -0
  116. package/catalog/images/sci-fi/sci-fi-light.thumb.webp +0 -0
  117. package/catalog/images/sci-fi/sci-fi-light.ts +6 -0
  118. package/catalog/images/sci-fi/sci-fi-light.web.ts +7 -0
  119. package/catalog/images/simiancraft/simiancraft-dark-transparency.thumb.webp +0 -0
  120. package/catalog/images/simiancraft/simiancraft-dark-transparency.ts +6 -0
  121. package/catalog/images/simiancraft/simiancraft-dark-transparency.web.ts +9 -0
  122. package/catalog/images/simiancraft/simiancraft-dark-transparency.webp +0 -0
  123. package/catalog/images/simiancraft/simiancraft-dark.thumb.webp +0 -0
  124. package/catalog/images/simiancraft/simiancraft-dark.ts +6 -0
  125. package/catalog/images/simiancraft/simiancraft-dark.web.ts +7 -0
  126. package/catalog/images/simiancraft/simiancraft-light-transparency.thumb.webp +0 -0
  127. package/catalog/images/simiancraft/simiancraft-light-transparency.ts +6 -0
  128. package/catalog/images/simiancraft/simiancraft-light-transparency.web.ts +9 -0
  129. package/catalog/images/simiancraft/simiancraft-light-transparency.webp +0 -0
  130. package/catalog/images/simiancraft/simiancraft-light.thumb.webp +0 -0
  131. package/catalog/images/simiancraft/simiancraft-light.ts +6 -0
  132. package/catalog/images/simiancraft/simiancraft-light.web.ts +7 -0
  133. package/catalog/images/spaceship/observation-deck.thumb.webp +0 -0
  134. package/catalog/images/spaceship/observation-deck.ts +6 -0
  135. package/catalog/images/spaceship/observation-deck.web.ts +7 -0
  136. package/catalog/images/spaceship/observation-deck.webp +0 -0
  137. package/catalog/images/underwater/oceanscape-dark.thumb.webp +0 -0
  138. package/catalog/images/underwater/oceanscape-dark.ts +6 -0
  139. package/catalog/images/underwater/oceanscape-dark.web.ts +7 -0
  140. package/catalog/images/underwater/oceanscape-dark.webp +0 -0
  141. package/catalog/images/wizard-tower/wizard-tower-1.thumb.webp +0 -0
  142. package/catalog/images/wizard-tower/wizard-tower-1.ts +6 -0
  143. package/catalog/images/wizard-tower/wizard-tower-1.web.ts +7 -0
  144. package/catalog/images/wizard-tower/wizard-tower-1.webp +0 -0
  145. package/catalog/images/wizard-tower/wizard-tower-2.thumb.webp +0 -0
  146. package/catalog/images/wizard-tower/wizard-tower-2.ts +6 -0
  147. package/catalog/images/wizard-tower/wizard-tower-2.web.ts +7 -0
  148. package/catalog/images/wizard-tower/wizard-tower-2.webp +0 -0
  149. package/catalog/images/wizard-tower/wizard-tower-night.thumb.webp +0 -0
  150. package/catalog/images/wizard-tower/wizard-tower-night.ts +6 -0
  151. package/catalog/images/wizard-tower/wizard-tower-night.web.ts +7 -0
  152. package/catalog/images/wizard-tower/wizard-tower-night.webp +0 -0
  153. package/catalog/shaders/README.md +114 -0
  154. package/catalog/shaders/_shared/composite-blit.frag +26 -0
  155. package/catalog/shaders/_shared/composite-camera.frag +17 -0
  156. package/catalog/shaders/_shared/composite-image.frag +23 -0
  157. package/catalog/shaders/_shared/composite-masked.frag +26 -0
  158. package/catalog/shaders/_shared/composite-subject.frag +27 -0
  159. package/catalog/shaders/_shared/passthrough.vert +27 -0
  160. package/catalog/shaders/_shared/transform.frag +27 -0
  161. package/catalog/shaders/_shared/types.ts +63 -0
  162. package/catalog/shaders/anamorphic-lensflare/anamorphic-lensflare.form.tsx +37 -0
  163. package/catalog/shaders/anamorphic-lensflare/anamorphic-lensflare.frag +123 -0
  164. package/catalog/shaders/anamorphic-lensflare/anamorphic-lensflare.ts +106 -0
  165. package/catalog/shaders/blur/blur.form.tsx +29 -0
  166. package/catalog/shaders/blur/blur.ts +32 -0
  167. package/catalog/shaders/blur/composite-blur.frag +42 -0
  168. package/catalog/shaders/clouds/clouds.form.tsx +39 -0
  169. package/catalog/shaders/clouds/clouds.frag +128 -0
  170. package/catalog/shaders/clouds/clouds.presets.md +37 -0
  171. package/catalog/shaders/clouds/clouds.ts +124 -0
  172. package/catalog/shaders/corporate-blobs/corporate-blobs.form.tsx +44 -0
  173. package/catalog/shaders/corporate-blobs/corporate-blobs.frag +224 -0
  174. package/catalog/shaders/corporate-blobs/corporate-blobs.ts +136 -0
  175. package/catalog/shaders/fireflies/fireflies.form.tsx +33 -0
  176. package/catalog/shaders/fireflies/fireflies.frag +68 -0
  177. package/catalog/shaders/fireflies/fireflies.ts +61 -0
  178. package/catalog/shaders/godrays/godrays.form.tsx +37 -0
  179. package/catalog/shaders/godrays/godrays.frag +85 -0
  180. package/catalog/shaders/godrays/godrays.ts +105 -0
  181. package/catalog/shaders/index.ts +78 -0
  182. package/catalog/shaders/light-beams-and-motes/light-beams-and-motes.form.tsx +55 -0
  183. package/catalog/shaders/light-beams-and-motes/light-beams-and-motes.frag +262 -0
  184. package/catalog/shaders/light-beams-and-motes/light-beams-and-motes.ts +137 -0
  185. package/catalog/shaders/nebula/nebula.form.tsx +34 -0
  186. package/catalog/shaders/nebula/nebula.frag +151 -0
  187. package/catalog/shaders/nebula/nebula.ts +74 -0
  188. package/catalog/shaders/plasma/plasma.form.tsx +32 -0
  189. package/catalog/shaders/plasma/plasma.frag +55 -0
  190. package/catalog/shaders/plasma/plasma.ts +44 -0
  191. package/catalog/shaders/simianlights/simianlights.form.tsx +34 -0
  192. package/catalog/shaders/simianlights/simianlights.frag +151 -0
  193. package/catalog/shaders/simianlights/simianlights.ts +73 -0
  194. package/dist/catalog/composites/clouds/clouds.controls.d.ts +3 -0
  195. package/dist/catalog/composites/clouds/clouds.controls.d.ts.map +1 -0
  196. package/dist/catalog/composites/clouds/clouds.controls.js +11 -0
  197. package/dist/catalog/composites/clouds/clouds.controls.js.map +1 -0
  198. package/dist/catalog/composites/clouds/clouds.d.ts +26 -0
  199. package/dist/catalog/composites/clouds/clouds.d.ts.map +1 -0
  200. package/dist/catalog/composites/clouds/clouds.js +33 -0
  201. package/dist/catalog/composites/clouds/clouds.js.map +1 -0
  202. package/dist/catalog/composites/corporate-blobs/corporate-blobs.controls.d.ts +3 -0
  203. package/dist/catalog/composites/corporate-blobs/corporate-blobs.controls.d.ts.map +1 -0
  204. package/dist/catalog/composites/corporate-blobs/corporate-blobs.controls.js +13 -0
  205. package/dist/catalog/composites/corporate-blobs/corporate-blobs.controls.js.map +1 -0
  206. package/dist/catalog/composites/corporate-blobs/corporate-blobs.d.ts +37 -0
  207. package/dist/catalog/composites/corporate-blobs/corporate-blobs.d.ts.map +1 -0
  208. package/dist/catalog/composites/corporate-blobs/corporate-blobs.js +52 -0
  209. package/dist/catalog/composites/corporate-blobs/corporate-blobs.js.map +1 -0
  210. package/dist/catalog/composites/corporate-blobs/corporate-blobs.thumb.webp +0 -0
  211. package/dist/catalog/composites/corporate-blobs/corporate-blobs.web.d.ts +37 -0
  212. package/dist/catalog/composites/corporate-blobs/corporate-blobs.web.d.ts.map +1 -0
  213. package/dist/catalog/composites/corporate-blobs/corporate-blobs.web.js +46 -0
  214. package/dist/catalog/composites/corporate-blobs/corporate-blobs.web.js.map +1 -0
  215. package/dist/catalog/composites/fairy-cave/fairy-cave.controls.d.ts +3 -0
  216. package/dist/catalog/composites/fairy-cave/fairy-cave.controls.d.ts.map +1 -0
  217. package/dist/catalog/composites/fairy-cave/fairy-cave.controls.js +13 -0
  218. package/dist/catalog/composites/fairy-cave/fairy-cave.controls.js.map +1 -0
  219. package/dist/catalog/composites/fairy-cave/fairy-cave.d.ts +42 -0
  220. package/dist/catalog/composites/fairy-cave/fairy-cave.d.ts.map +1 -0
  221. package/dist/catalog/composites/fairy-cave/fairy-cave.js +54 -0
  222. package/dist/catalog/composites/fairy-cave/fairy-cave.js.map +1 -0
  223. package/dist/catalog/composites/fairy-cave/fairy-cave.thumb.webp +0 -0
  224. package/dist/catalog/composites/fairy-cave/fairy-cave.web.d.ts +42 -0
  225. package/dist/catalog/composites/fairy-cave/fairy-cave.web.d.ts.map +1 -0
  226. package/dist/catalog/composites/fairy-cave/fairy-cave.web.js +51 -0
  227. package/dist/catalog/composites/fairy-cave/fairy-cave.web.js.map +1 -0
  228. package/dist/catalog/composites/fairy-grotto/fairy-grotto.controls.d.ts +3 -0
  229. package/dist/catalog/composites/fairy-grotto/fairy-grotto.controls.d.ts.map +1 -0
  230. package/dist/catalog/composites/fairy-grotto/fairy-grotto.controls.js +14 -0
  231. package/dist/catalog/composites/fairy-grotto/fairy-grotto.controls.js.map +1 -0
  232. package/dist/catalog/composites/fairy-grotto/fairy-grotto.d.ts +42 -0
  233. package/dist/catalog/composites/fairy-grotto/fairy-grotto.d.ts.map +1 -0
  234. package/dist/catalog/composites/fairy-grotto/fairy-grotto.js +55 -0
  235. package/dist/catalog/composites/fairy-grotto/fairy-grotto.js.map +1 -0
  236. package/dist/catalog/composites/fairy-grotto/fairy-grotto.thumb.webp +0 -0
  237. package/dist/catalog/composites/fairy-grotto/fairy-grotto.web.d.ts +42 -0
  238. package/dist/catalog/composites/fairy-grotto/fairy-grotto.web.d.ts.map +1 -0
  239. package/dist/catalog/composites/fairy-grotto/fairy-grotto.web.js +51 -0
  240. package/dist/catalog/composites/fairy-grotto/fairy-grotto.web.js.map +1 -0
  241. package/dist/catalog/composites/fairy-hollow/fairy-hollow.controls.d.ts +3 -0
  242. package/dist/catalog/composites/fairy-hollow/fairy-hollow.controls.d.ts.map +1 -0
  243. package/dist/catalog/composites/fairy-hollow/fairy-hollow.controls.js +14 -0
  244. package/dist/catalog/composites/fairy-hollow/fairy-hollow.controls.js.map +1 -0
  245. package/dist/catalog/composites/fairy-hollow/fairy-hollow.d.ts +42 -0
  246. package/dist/catalog/composites/fairy-hollow/fairy-hollow.d.ts.map +1 -0
  247. package/dist/catalog/composites/fairy-hollow/fairy-hollow.js +56 -0
  248. package/dist/catalog/composites/fairy-hollow/fairy-hollow.js.map +1 -0
  249. package/dist/catalog/composites/fairy-hollow/fairy-hollow.thumb.webp +0 -0
  250. package/dist/catalog/composites/fairy-hollow/fairy-hollow.web.d.ts +42 -0
  251. package/dist/catalog/composites/fairy-hollow/fairy-hollow.web.d.ts.map +1 -0
  252. package/dist/catalog/composites/fairy-hollow/fairy-hollow.web.js +51 -0
  253. package/dist/catalog/composites/fairy-hollow/fairy-hollow.web.js.map +1 -0
  254. package/dist/catalog/composites/nebula/nebula.controls.d.ts +3 -0
  255. package/dist/catalog/composites/nebula/nebula.controls.d.ts.map +1 -0
  256. package/dist/catalog/composites/nebula/nebula.controls.js +11 -0
  257. package/dist/catalog/composites/nebula/nebula.controls.js.map +1 -0
  258. package/dist/catalog/composites/nebula/nebula.d.ts +22 -0
  259. package/dist/catalog/composites/nebula/nebula.d.ts.map +1 -0
  260. package/dist/catalog/composites/nebula/nebula.js +38 -0
  261. package/dist/catalog/composites/nebula/nebula.js.map +1 -0
  262. package/dist/catalog/composites/nebula/nebula.thumb.webp +0 -0
  263. package/dist/catalog/composites/nebula/nebula.web.d.ts +22 -0
  264. package/dist/catalog/composites/nebula/nebula.web.d.ts.map +1 -0
  265. package/dist/catalog/composites/nebula/nebula.web.js +34 -0
  266. package/dist/catalog/composites/nebula/nebula.web.js.map +1 -0
  267. package/dist/catalog/composites/observation-deck/observation-deck.controls.d.ts +3 -0
  268. package/dist/catalog/composites/observation-deck/observation-deck.controls.d.ts.map +1 -0
  269. package/dist/catalog/composites/observation-deck/observation-deck.controls.js +13 -0
  270. package/dist/catalog/composites/observation-deck/observation-deck.controls.js.map +1 -0
  271. package/dist/catalog/composites/observation-deck/observation-deck.d.ts +41 -0
  272. package/dist/catalog/composites/observation-deck/observation-deck.d.ts.map +1 -0
  273. package/dist/catalog/composites/observation-deck/observation-deck.js +60 -0
  274. package/dist/catalog/composites/observation-deck/observation-deck.js.map +1 -0
  275. package/dist/catalog/composites/observation-deck/observation-deck.thumb.webp +0 -0
  276. package/dist/catalog/composites/observation-deck/observation-deck.web.d.ts +41 -0
  277. package/dist/catalog/composites/observation-deck/observation-deck.web.d.ts.map +1 -0
  278. package/dist/catalog/composites/observation-deck/observation-deck.web.js +54 -0
  279. package/dist/catalog/composites/observation-deck/observation-deck.web.js.map +1 -0
  280. package/dist/catalog/composites/simianlights/simianlights.controls.d.ts +3 -0
  281. package/dist/catalog/composites/simianlights/simianlights.controls.d.ts.map +1 -0
  282. package/dist/catalog/composites/simianlights/simianlights.controls.js +11 -0
  283. package/dist/catalog/composites/simianlights/simianlights.controls.js.map +1 -0
  284. package/dist/catalog/composites/simianlights/simianlights.d.ts +22 -0
  285. package/dist/catalog/composites/simianlights/simianlights.d.ts.map +1 -0
  286. package/dist/catalog/composites/simianlights/simianlights.js +30 -0
  287. package/dist/catalog/composites/simianlights/simianlights.js.map +1 -0
  288. package/dist/catalog/composites/simianlights/simianlights.thumb.webp +0 -0
  289. package/dist/catalog/composites/simianlights/simianlights.web.d.ts +22 -0
  290. package/dist/catalog/composites/simianlights/simianlights.web.d.ts.map +1 -0
  291. package/dist/catalog/composites/simianlights/simianlights.web.js +33 -0
  292. package/dist/catalog/composites/simianlights/simianlights.web.js.map +1 -0
  293. package/dist/catalog/composites/underwater/underwater.controls.d.ts +3 -0
  294. package/dist/catalog/composites/underwater/underwater.controls.d.ts.map +1 -0
  295. package/dist/catalog/composites/underwater/underwater.controls.js +11 -0
  296. package/dist/catalog/composites/underwater/underwater.controls.js.map +1 -0
  297. package/dist/catalog/composites/underwater/underwater.d.ts +30 -0
  298. package/dist/catalog/composites/underwater/underwater.d.ts.map +1 -0
  299. package/dist/catalog/composites/underwater/underwater.js +43 -0
  300. package/dist/catalog/composites/underwater/underwater.js.map +1 -0
  301. package/dist/catalog/composites/underwater/underwater.thumb.webp +0 -0
  302. package/dist/catalog/composites/underwater/underwater.web.d.ts +30 -0
  303. package/dist/catalog/composites/underwater/underwater.web.d.ts.map +1 -0
  304. package/dist/catalog/composites/underwater/underwater.web.js +40 -0
  305. package/dist/catalog/composites/underwater/underwater.web.js.map +1 -0
  306. package/dist/catalog/composites/wizard-tower/wizard-tower.controls.d.ts +3 -0
  307. package/dist/catalog/composites/wizard-tower/wizard-tower.controls.d.ts.map +1 -0
  308. package/dist/catalog/composites/wizard-tower/wizard-tower.controls.js +15 -0
  309. package/dist/catalog/composites/wizard-tower/wizard-tower.controls.js.map +1 -0
  310. package/dist/catalog/composites/wizard-tower/wizard-tower.d.ts +31 -0
  311. package/dist/catalog/composites/wizard-tower/wizard-tower.d.ts.map +1 -0
  312. package/dist/catalog/composites/wizard-tower/wizard-tower.js +45 -0
  313. package/dist/catalog/composites/wizard-tower/wizard-tower.js.map +1 -0
  314. package/dist/catalog/composites/wizard-tower/wizard-tower.thumb.webp +0 -0
  315. package/dist/catalog/composites/wizard-tower/wizard-tower.web.d.ts +31 -0
  316. package/dist/catalog/composites/wizard-tower/wizard-tower.web.d.ts.map +1 -0
  317. package/dist/catalog/composites/wizard-tower/wizard-tower.web.js +39 -0
  318. package/dist/catalog/composites/wizard-tower/wizard-tower.web.js.map +1 -0
  319. package/dist/catalog/composites/wizard-tower-night/wizard-tower-night.controls.d.ts +3 -0
  320. package/dist/catalog/composites/wizard-tower-night/wizard-tower-night.controls.d.ts.map +1 -0
  321. package/dist/catalog/composites/wizard-tower-night/wizard-tower-night.controls.js +14 -0
  322. package/dist/catalog/composites/wizard-tower-night/wizard-tower-night.controls.js.map +1 -0
  323. package/dist/catalog/composites/wizard-tower-night/wizard-tower-night.d.ts +31 -0
  324. package/dist/catalog/composites/wizard-tower-night/wizard-tower-night.d.ts.map +1 -0
  325. package/dist/catalog/composites/wizard-tower-night/wizard-tower-night.js +44 -0
  326. package/dist/catalog/composites/wizard-tower-night/wizard-tower-night.js.map +1 -0
  327. package/dist/catalog/composites/wizard-tower-night/wizard-tower-night.thumb.webp +0 -0
  328. package/dist/catalog/composites/wizard-tower-night/wizard-tower-night.web.d.ts +31 -0
  329. package/dist/catalog/composites/wizard-tower-night/wizard-tower-night.web.d.ts.map +1 -0
  330. package/dist/catalog/composites/wizard-tower-night/wizard-tower-night.web.js +39 -0
  331. package/dist/catalog/composites/wizard-tower-night/wizard-tower-night.web.js.map +1 -0
  332. package/dist/catalog/images/corporate/corporate-logo.d.ts +3 -0
  333. package/dist/catalog/images/corporate/corporate-logo.d.ts.map +1 -0
  334. package/dist/catalog/images/corporate/corporate-logo.js +8 -0
  335. package/dist/catalog/images/corporate/corporate-logo.js.map +1 -0
  336. package/dist/catalog/images/corporate/corporate-logo.thumb.webp +0 -0
  337. package/dist/catalog/images/corporate/corporate-logo.web.d.ts +3 -0
  338. package/dist/catalog/images/corporate/corporate-logo.web.d.ts.map +1 -0
  339. package/dist/catalog/images/corporate/corporate-logo.web.js +12 -0
  340. package/dist/catalog/images/corporate/corporate-logo.web.js.map +1 -0
  341. package/dist/catalog/images/corporate/corporate-logo.webp +0 -0
  342. package/dist/catalog/images/debug/debug-resolutions.d.ts +3 -0
  343. package/dist/catalog/images/debug/debug-resolutions.d.ts.map +1 -0
  344. package/dist/catalog/images/debug/debug-resolutions.js +8 -0
  345. package/dist/catalog/images/debug/debug-resolutions.js.map +1 -0
  346. package/dist/catalog/images/debug/debug-resolutions.thumb.webp +0 -0
  347. package/dist/catalog/images/debug/debug-resolutions.web.d.ts +3 -0
  348. package/dist/catalog/images/debug/debug-resolutions.web.d.ts.map +1 -0
  349. package/dist/catalog/images/debug/debug-resolutions.web.js +12 -0
  350. package/dist/catalog/images/debug/debug-resolutions.web.js.map +1 -0
  351. package/dist/catalog/images/fairy-caves/grotto.d.ts +3 -0
  352. package/dist/catalog/images/fairy-caves/grotto.d.ts.map +1 -0
  353. package/dist/catalog/images/fairy-caves/grotto.js +8 -0
  354. package/dist/catalog/images/fairy-caves/grotto.js.map +1 -0
  355. package/dist/catalog/images/fairy-caves/grotto.thumb.webp +0 -0
  356. package/dist/catalog/images/fairy-caves/grotto.web.d.ts +3 -0
  357. package/dist/catalog/images/fairy-caves/grotto.web.d.ts.map +1 -0
  358. package/dist/catalog/images/fairy-caves/grotto.web.js +12 -0
  359. package/dist/catalog/images/fairy-caves/grotto.web.js.map +1 -0
  360. package/dist/catalog/images/fairy-caves/grotto.webp +0 -0
  361. package/dist/catalog/images/fairy-caves/hollow.d.ts +3 -0
  362. package/dist/catalog/images/fairy-caves/hollow.d.ts.map +1 -0
  363. package/dist/catalog/images/fairy-caves/hollow.js +8 -0
  364. package/dist/catalog/images/fairy-caves/hollow.js.map +1 -0
  365. package/dist/catalog/images/fairy-caves/hollow.thumb.webp +0 -0
  366. package/dist/catalog/images/fairy-caves/hollow.web.d.ts +3 -0
  367. package/dist/catalog/images/fairy-caves/hollow.web.d.ts.map +1 -0
  368. package/dist/catalog/images/fairy-caves/hollow.web.js +12 -0
  369. package/dist/catalog/images/fairy-caves/hollow.web.js.map +1 -0
  370. package/dist/catalog/images/fairy-caves/hollow.webp +0 -0
  371. package/dist/catalog/images/fairy-caves/treehouse-2.d.ts +3 -0
  372. package/dist/catalog/images/fairy-caves/treehouse-2.d.ts.map +1 -0
  373. package/dist/catalog/images/fairy-caves/treehouse-2.js +8 -0
  374. package/dist/catalog/images/fairy-caves/treehouse-2.js.map +1 -0
  375. package/dist/catalog/images/fairy-caves/treehouse-2.thumb.webp +0 -0
  376. package/dist/catalog/images/fairy-caves/treehouse-2.web.d.ts +3 -0
  377. package/dist/catalog/images/fairy-caves/treehouse-2.web.d.ts.map +1 -0
  378. package/dist/catalog/images/fairy-caves/treehouse-2.web.js +12 -0
  379. package/dist/catalog/images/fairy-caves/treehouse-2.web.js.map +1 -0
  380. package/dist/catalog/images/fairy-caves/treehouse-2.webp +0 -0
  381. package/dist/catalog/images/fairy-caves/treehouse-3.d.ts +3 -0
  382. package/dist/catalog/images/fairy-caves/treehouse-3.d.ts.map +1 -0
  383. package/dist/catalog/images/fairy-caves/treehouse-3.js +8 -0
  384. package/dist/catalog/images/fairy-caves/treehouse-3.js.map +1 -0
  385. package/dist/catalog/images/fairy-caves/treehouse-3.thumb.webp +0 -0
  386. package/dist/catalog/images/fairy-caves/treehouse-3.web.d.ts +3 -0
  387. package/dist/catalog/images/fairy-caves/treehouse-3.web.d.ts.map +1 -0
  388. package/dist/catalog/images/fairy-caves/treehouse-3.web.js +12 -0
  389. package/dist/catalog/images/fairy-caves/treehouse-3.web.js.map +1 -0
  390. package/dist/catalog/images/fairy-caves/treehouse-3.webp +0 -0
  391. package/dist/catalog/images/fairy-caves/treehouse.d.ts +3 -0
  392. package/dist/catalog/images/fairy-caves/treehouse.d.ts.map +1 -0
  393. package/dist/catalog/images/fairy-caves/treehouse.js +8 -0
  394. package/dist/catalog/images/fairy-caves/treehouse.js.map +1 -0
  395. package/dist/catalog/images/fairy-caves/treehouse.thumb.webp +0 -0
  396. package/dist/catalog/images/fairy-caves/treehouse.web.d.ts +3 -0
  397. package/dist/catalog/images/fairy-caves/treehouse.web.d.ts.map +1 -0
  398. package/dist/catalog/images/fairy-caves/treehouse.web.js +12 -0
  399. package/dist/catalog/images/fairy-caves/treehouse.web.js.map +1 -0
  400. package/dist/catalog/images/fairy-caves/treehouse.webp +0 -0
  401. package/dist/catalog/images/home/home-dark.d.ts +3 -0
  402. package/dist/catalog/images/home/home-dark.d.ts.map +1 -0
  403. package/dist/catalog/images/home/home-dark.js +8 -0
  404. package/dist/catalog/images/home/home-dark.js.map +1 -0
  405. package/dist/catalog/images/home/home-dark.thumb.webp +0 -0
  406. package/dist/catalog/images/home/home-dark.web.d.ts +3 -0
  407. package/dist/catalog/images/home/home-dark.web.d.ts.map +1 -0
  408. package/dist/catalog/images/home/home-dark.web.js +12 -0
  409. package/dist/catalog/images/home/home-dark.web.js.map +1 -0
  410. package/dist/catalog/images/home/home-light.d.ts +3 -0
  411. package/dist/catalog/images/home/home-light.d.ts.map +1 -0
  412. package/dist/catalog/images/home/home-light.js +8 -0
  413. package/dist/catalog/images/home/home-light.js.map +1 -0
  414. package/dist/catalog/images/home/home-light.thumb.webp +0 -0
  415. package/dist/catalog/images/home/home-light.web.d.ts +3 -0
  416. package/dist/catalog/images/home/home-light.web.d.ts.map +1 -0
  417. package/dist/catalog/images/home/home-light.web.js +12 -0
  418. package/dist/catalog/images/home/home-light.web.js.map +1 -0
  419. package/dist/catalog/images/image-ids.d.ts +3 -0
  420. package/dist/catalog/images/image-ids.d.ts.map +1 -0
  421. package/dist/catalog/images/image-ids.js +43 -0
  422. package/dist/catalog/images/image-ids.js.map +1 -0
  423. package/dist/catalog/images/image.types.d.ts +2 -0
  424. package/dist/catalog/images/image.types.d.ts.map +1 -0
  425. package/dist/catalog/images/image.types.js +3 -0
  426. package/dist/catalog/images/image.types.js.map +1 -0
  427. package/dist/catalog/images/index.d.ts +3 -0
  428. package/dist/catalog/images/index.d.ts.map +1 -0
  429. package/dist/catalog/images/index.js +10 -0
  430. package/dist/catalog/images/index.js.map +1 -0
  431. package/dist/catalog/images/nature/landscape-dark.d.ts +3 -0
  432. package/dist/catalog/images/nature/landscape-dark.d.ts.map +1 -0
  433. package/dist/catalog/images/nature/landscape-dark.js +8 -0
  434. package/dist/catalog/images/nature/landscape-dark.js.map +1 -0
  435. package/dist/catalog/images/nature/landscape-dark.thumb.webp +0 -0
  436. package/dist/catalog/images/nature/landscape-dark.web.d.ts +3 -0
  437. package/dist/catalog/images/nature/landscape-dark.web.d.ts.map +1 -0
  438. package/dist/catalog/images/nature/landscape-dark.web.js +12 -0
  439. package/dist/catalog/images/nature/landscape-dark.web.js.map +1 -0
  440. package/dist/catalog/images/nature/landscape-light.d.ts +3 -0
  441. package/dist/catalog/images/nature/landscape-light.d.ts.map +1 -0
  442. package/dist/catalog/images/nature/landscape-light.js +8 -0
  443. package/dist/catalog/images/nature/landscape-light.js.map +1 -0
  444. package/dist/catalog/images/nature/landscape-light.thumb.webp +0 -0
  445. package/dist/catalog/images/nature/landscape-light.web.d.ts +3 -0
  446. package/dist/catalog/images/nature/landscape-light.web.d.ts.map +1 -0
  447. package/dist/catalog/images/nature/landscape-light.web.js +12 -0
  448. package/dist/catalog/images/nature/landscape-light.web.js.map +1 -0
  449. package/dist/catalog/images/office/office-dark.d.ts +3 -0
  450. package/dist/catalog/images/office/office-dark.d.ts.map +1 -0
  451. package/dist/catalog/images/office/office-dark.js +8 -0
  452. package/dist/catalog/images/office/office-dark.js.map +1 -0
  453. package/dist/catalog/images/office/office-dark.thumb.webp +0 -0
  454. package/dist/catalog/images/office/office-dark.web.d.ts +3 -0
  455. package/dist/catalog/images/office/office-dark.web.d.ts.map +1 -0
  456. package/dist/catalog/images/office/office-dark.web.js +12 -0
  457. package/dist/catalog/images/office/office-dark.web.js.map +1 -0
  458. package/dist/catalog/images/office/office-light.d.ts +3 -0
  459. package/dist/catalog/images/office/office-light.d.ts.map +1 -0
  460. package/dist/catalog/images/office/office-light.js +8 -0
  461. package/dist/catalog/images/office/office-light.js.map +1 -0
  462. package/dist/catalog/images/office/office-light.thumb.webp +0 -0
  463. package/dist/catalog/images/office/office-light.web.d.ts +3 -0
  464. package/dist/catalog/images/office/office-light.web.d.ts.map +1 -0
  465. package/dist/catalog/images/office/office-light.web.js +12 -0
  466. package/dist/catalog/images/office/office-light.web.js.map +1 -0
  467. package/dist/catalog/images/sci-fi/sci-fi-light.d.ts +3 -0
  468. package/dist/catalog/images/sci-fi/sci-fi-light.d.ts.map +1 -0
  469. package/dist/catalog/images/sci-fi/sci-fi-light.js +8 -0
  470. package/dist/catalog/images/sci-fi/sci-fi-light.js.map +1 -0
  471. package/dist/catalog/images/sci-fi/sci-fi-light.thumb.webp +0 -0
  472. package/dist/catalog/images/sci-fi/sci-fi-light.web.d.ts +3 -0
  473. package/dist/catalog/images/sci-fi/sci-fi-light.web.d.ts.map +1 -0
  474. package/dist/catalog/images/sci-fi/sci-fi-light.web.js +12 -0
  475. package/dist/catalog/images/sci-fi/sci-fi-light.web.js.map +1 -0
  476. package/dist/catalog/images/simiancraft/simiancraft-dark-transparency.d.ts +3 -0
  477. package/dist/catalog/images/simiancraft/simiancraft-dark-transparency.d.ts.map +1 -0
  478. package/dist/catalog/images/simiancraft/simiancraft-dark-transparency.js +8 -0
  479. package/dist/catalog/images/simiancraft/simiancraft-dark-transparency.js.map +1 -0
  480. package/dist/catalog/images/simiancraft/simiancraft-dark-transparency.thumb.webp +0 -0
  481. package/dist/catalog/images/simiancraft/simiancraft-dark-transparency.web.d.ts +3 -0
  482. package/dist/catalog/images/simiancraft/simiancraft-dark-transparency.web.d.ts.map +1 -0
  483. package/dist/catalog/images/simiancraft/simiancraft-dark-transparency.web.js +12 -0
  484. package/dist/catalog/images/simiancraft/simiancraft-dark-transparency.web.js.map +1 -0
  485. package/dist/catalog/images/simiancraft/simiancraft-dark-transparency.webp +0 -0
  486. package/dist/catalog/images/simiancraft/simiancraft-dark.d.ts +3 -0
  487. package/dist/catalog/images/simiancraft/simiancraft-dark.d.ts.map +1 -0
  488. package/dist/catalog/images/simiancraft/simiancraft-dark.js +8 -0
  489. package/dist/catalog/images/simiancraft/simiancraft-dark.js.map +1 -0
  490. package/dist/catalog/images/simiancraft/simiancraft-dark.thumb.webp +0 -0
  491. package/dist/catalog/images/simiancraft/simiancraft-dark.web.d.ts +3 -0
  492. package/dist/catalog/images/simiancraft/simiancraft-dark.web.d.ts.map +1 -0
  493. package/dist/catalog/images/simiancraft/simiancraft-dark.web.js +12 -0
  494. package/dist/catalog/images/simiancraft/simiancraft-dark.web.js.map +1 -0
  495. package/dist/catalog/images/simiancraft/simiancraft-light-transparency.d.ts +3 -0
  496. package/dist/catalog/images/simiancraft/simiancraft-light-transparency.d.ts.map +1 -0
  497. package/dist/catalog/images/simiancraft/simiancraft-light-transparency.js +8 -0
  498. package/dist/catalog/images/simiancraft/simiancraft-light-transparency.js.map +1 -0
  499. package/dist/catalog/images/simiancraft/simiancraft-light-transparency.thumb.webp +0 -0
  500. package/dist/catalog/images/simiancraft/simiancraft-light-transparency.web.d.ts +3 -0
  501. package/dist/catalog/images/simiancraft/simiancraft-light-transparency.web.d.ts.map +1 -0
  502. package/dist/catalog/images/simiancraft/simiancraft-light-transparency.web.js +12 -0
  503. package/dist/catalog/images/simiancraft/simiancraft-light-transparency.web.js.map +1 -0
  504. package/dist/catalog/images/simiancraft/simiancraft-light-transparency.webp +0 -0
  505. package/dist/catalog/images/simiancraft/simiancraft-light.d.ts +3 -0
  506. package/dist/catalog/images/simiancraft/simiancraft-light.d.ts.map +1 -0
  507. package/dist/catalog/images/simiancraft/simiancraft-light.js +8 -0
  508. package/dist/catalog/images/simiancraft/simiancraft-light.js.map +1 -0
  509. package/dist/catalog/images/simiancraft/simiancraft-light.thumb.webp +0 -0
  510. package/dist/catalog/images/simiancraft/simiancraft-light.web.d.ts +3 -0
  511. package/dist/catalog/images/simiancraft/simiancraft-light.web.d.ts.map +1 -0
  512. package/dist/catalog/images/simiancraft/simiancraft-light.web.js +12 -0
  513. package/dist/catalog/images/simiancraft/simiancraft-light.web.js.map +1 -0
  514. package/dist/catalog/images/spaceship/observation-deck.d.ts +3 -0
  515. package/dist/catalog/images/spaceship/observation-deck.d.ts.map +1 -0
  516. package/dist/catalog/images/spaceship/observation-deck.js +8 -0
  517. package/dist/catalog/images/spaceship/observation-deck.js.map +1 -0
  518. package/dist/catalog/images/spaceship/observation-deck.thumb.webp +0 -0
  519. package/dist/catalog/images/spaceship/observation-deck.web.d.ts +3 -0
  520. package/dist/catalog/images/spaceship/observation-deck.web.d.ts.map +1 -0
  521. package/dist/catalog/images/spaceship/observation-deck.web.js +12 -0
  522. package/dist/catalog/images/spaceship/observation-deck.web.js.map +1 -0
  523. package/dist/catalog/images/spaceship/observation-deck.webp +0 -0
  524. package/dist/catalog/images/underwater/oceanscape-dark.d.ts +3 -0
  525. package/dist/catalog/images/underwater/oceanscape-dark.d.ts.map +1 -0
  526. package/dist/catalog/images/underwater/oceanscape-dark.js +8 -0
  527. package/dist/catalog/images/underwater/oceanscape-dark.js.map +1 -0
  528. package/dist/catalog/images/underwater/oceanscape-dark.thumb.webp +0 -0
  529. package/dist/catalog/images/underwater/oceanscape-dark.web.d.ts +3 -0
  530. package/dist/catalog/images/underwater/oceanscape-dark.web.d.ts.map +1 -0
  531. package/dist/catalog/images/underwater/oceanscape-dark.web.js +12 -0
  532. package/dist/catalog/images/underwater/oceanscape-dark.web.js.map +1 -0
  533. package/dist/catalog/images/underwater/oceanscape-dark.webp +0 -0
  534. package/dist/catalog/images/wizard-tower/wizard-tower-1.d.ts +3 -0
  535. package/dist/catalog/images/wizard-tower/wizard-tower-1.d.ts.map +1 -0
  536. package/dist/catalog/images/wizard-tower/wizard-tower-1.js +8 -0
  537. package/dist/catalog/images/wizard-tower/wizard-tower-1.js.map +1 -0
  538. package/dist/catalog/images/wizard-tower/wizard-tower-1.thumb.webp +0 -0
  539. package/dist/catalog/images/wizard-tower/wizard-tower-1.web.d.ts +3 -0
  540. package/dist/catalog/images/wizard-tower/wizard-tower-1.web.d.ts.map +1 -0
  541. package/dist/catalog/images/wizard-tower/wizard-tower-1.web.js +12 -0
  542. package/dist/catalog/images/wizard-tower/wizard-tower-1.web.js.map +1 -0
  543. package/dist/catalog/images/wizard-tower/wizard-tower-1.webp +0 -0
  544. package/dist/catalog/images/wizard-tower/wizard-tower-2.d.ts +3 -0
  545. package/dist/catalog/images/wizard-tower/wizard-tower-2.d.ts.map +1 -0
  546. package/dist/catalog/images/wizard-tower/wizard-tower-2.js +8 -0
  547. package/dist/catalog/images/wizard-tower/wizard-tower-2.js.map +1 -0
  548. package/dist/catalog/images/wizard-tower/wizard-tower-2.thumb.webp +0 -0
  549. package/dist/catalog/images/wizard-tower/wizard-tower-2.web.d.ts +3 -0
  550. package/dist/catalog/images/wizard-tower/wizard-tower-2.web.d.ts.map +1 -0
  551. package/dist/catalog/images/wizard-tower/wizard-tower-2.web.js +12 -0
  552. package/dist/catalog/images/wizard-tower/wizard-tower-2.web.js.map +1 -0
  553. package/dist/catalog/images/wizard-tower/wizard-tower-2.webp +0 -0
  554. package/dist/catalog/images/wizard-tower/wizard-tower-night.d.ts +3 -0
  555. package/dist/catalog/images/wizard-tower/wizard-tower-night.d.ts.map +1 -0
  556. package/dist/catalog/images/wizard-tower/wizard-tower-night.js +8 -0
  557. package/dist/catalog/images/wizard-tower/wizard-tower-night.js.map +1 -0
  558. package/dist/catalog/images/wizard-tower/wizard-tower-night.thumb.webp +0 -0
  559. package/dist/catalog/images/wizard-tower/wizard-tower-night.web.d.ts +3 -0
  560. package/dist/catalog/images/wizard-tower/wizard-tower-night.web.d.ts.map +1 -0
  561. package/dist/catalog/images/wizard-tower/wizard-tower-night.web.js +12 -0
  562. package/dist/catalog/images/wizard-tower/wizard-tower-night.web.js.map +1 -0
  563. package/dist/catalog/images/wizard-tower/wizard-tower-night.webp +0 -0
  564. package/dist/catalog/shaders/_shared/types.d.ts +38 -0
  565. package/dist/catalog/shaders/_shared/types.d.ts.map +1 -0
  566. package/dist/catalog/shaders/_shared/types.js +15 -0
  567. package/dist/catalog/shaders/_shared/types.js.map +1 -0
  568. package/dist/catalog/shaders/anamorphic-lensflare/anamorphic-lensflare.d.ts +26 -0
  569. package/dist/catalog/shaders/anamorphic-lensflare/anamorphic-lensflare.d.ts.map +1 -0
  570. package/dist/catalog/shaders/anamorphic-lensflare/anamorphic-lensflare.form.d.ts +3 -0
  571. package/dist/catalog/shaders/anamorphic-lensflare/anamorphic-lensflare.form.d.ts.map +1 -0
  572. package/dist/catalog/shaders/anamorphic-lensflare/anamorphic-lensflare.form.js +15 -0
  573. package/dist/catalog/shaders/anamorphic-lensflare/anamorphic-lensflare.form.js.map +1 -0
  574. package/dist/catalog/shaders/anamorphic-lensflare/anamorphic-lensflare.js +84 -0
  575. package/dist/catalog/shaders/anamorphic-lensflare/anamorphic-lensflare.js.map +1 -0
  576. package/dist/catalog/shaders/blur/blur.d.ts +15 -0
  577. package/dist/catalog/shaders/blur/blur.d.ts.map +1 -0
  578. package/dist/catalog/shaders/blur/blur.form.d.ts +3 -0
  579. package/dist/catalog/shaders/blur/blur.form.d.ts.map +1 -0
  580. package/dist/catalog/shaders/blur/blur.form.js +15 -0
  581. package/dist/catalog/shaders/blur/blur.form.js.map +1 -0
  582. package/dist/catalog/shaders/blur/blur.js +27 -0
  583. package/dist/catalog/shaders/blur/blur.js.map +1 -0
  584. package/dist/catalog/shaders/clouds/clouds.d.ts +34 -0
  585. package/dist/catalog/shaders/clouds/clouds.d.ts.map +1 -0
  586. package/dist/catalog/shaders/clouds/clouds.form.d.ts +3 -0
  587. package/dist/catalog/shaders/clouds/clouds.form.d.ts.map +1 -0
  588. package/dist/catalog/shaders/clouds/clouds.form.js +15 -0
  589. package/dist/catalog/shaders/clouds/clouds.form.js.map +1 -0
  590. package/dist/catalog/shaders/clouds/clouds.js +98 -0
  591. package/dist/catalog/shaders/clouds/clouds.js.map +1 -0
  592. package/dist/catalog/shaders/corporate-blobs/corporate-blobs.d.ts +40 -0
  593. package/dist/catalog/shaders/corporate-blobs/corporate-blobs.d.ts.map +1 -0
  594. package/dist/catalog/shaders/corporate-blobs/corporate-blobs.form.d.ts +3 -0
  595. package/dist/catalog/shaders/corporate-blobs/corporate-blobs.form.d.ts.map +1 -0
  596. package/dist/catalog/shaders/corporate-blobs/corporate-blobs.form.js +15 -0
  597. package/dist/catalog/shaders/corporate-blobs/corporate-blobs.form.js.map +1 -0
  598. package/dist/catalog/shaders/corporate-blobs/corporate-blobs.js +100 -0
  599. package/dist/catalog/shaders/corporate-blobs/corporate-blobs.js.map +1 -0
  600. package/dist/catalog/shaders/fireflies/fireflies.d.ts +18 -0
  601. package/dist/catalog/shaders/fireflies/fireflies.d.ts.map +1 -0
  602. package/dist/catalog/shaders/fireflies/fireflies.form.d.ts +3 -0
  603. package/dist/catalog/shaders/fireflies/fireflies.form.d.ts.map +1 -0
  604. package/dist/catalog/shaders/fireflies/fireflies.form.js +15 -0
  605. package/dist/catalog/shaders/fireflies/fireflies.form.js.map +1 -0
  606. package/dist/catalog/shaders/fireflies/fireflies.js +47 -0
  607. package/dist/catalog/shaders/fireflies/fireflies.js.map +1 -0
  608. package/dist/catalog/shaders/godrays/godrays.d.ts +26 -0
  609. package/dist/catalog/shaders/godrays/godrays.d.ts.map +1 -0
  610. package/dist/catalog/shaders/godrays/godrays.form.d.ts +3 -0
  611. package/dist/catalog/shaders/godrays/godrays.form.d.ts.map +1 -0
  612. package/dist/catalog/shaders/godrays/godrays.form.js +15 -0
  613. package/dist/catalog/shaders/godrays/godrays.form.js.map +1 -0
  614. package/dist/catalog/shaders/godrays/godrays.js +83 -0
  615. package/dist/catalog/shaders/godrays/godrays.js.map +1 -0
  616. package/dist/catalog/shaders/index.d.ts +73 -0
  617. package/dist/catalog/shaders/index.d.ts.map +1 -0
  618. package/dist/catalog/shaders/index.js +30 -0
  619. package/dist/catalog/shaders/index.js.map +1 -0
  620. package/dist/catalog/shaders/light-beams-and-motes/light-beams-and-motes.d.ts +44 -0
  621. package/dist/catalog/shaders/light-beams-and-motes/light-beams-and-motes.d.ts.map +1 -0
  622. package/dist/catalog/shaders/light-beams-and-motes/light-beams-and-motes.form.d.ts +3 -0
  623. package/dist/catalog/shaders/light-beams-and-motes/light-beams-and-motes.form.d.ts.map +1 -0
  624. package/dist/catalog/shaders/light-beams-and-motes/light-beams-and-motes.form.js +16 -0
  625. package/dist/catalog/shaders/light-beams-and-motes/light-beams-and-motes.form.js.map +1 -0
  626. package/dist/catalog/shaders/light-beams-and-motes/light-beams-and-motes.js +91 -0
  627. package/dist/catalog/shaders/light-beams-and-motes/light-beams-and-motes.js.map +1 -0
  628. package/dist/catalog/shaders/nebula/nebula.d.ts +20 -0
  629. package/dist/catalog/shaders/nebula/nebula.d.ts.map +1 -0
  630. package/dist/catalog/shaders/nebula/nebula.form.d.ts +3 -0
  631. package/dist/catalog/shaders/nebula/nebula.form.d.ts.map +1 -0
  632. package/dist/catalog/shaders/nebula/nebula.form.js +15 -0
  633. package/dist/catalog/shaders/nebula/nebula.form.js.map +1 -0
  634. package/dist/catalog/shaders/nebula/nebula.js +58 -0
  635. package/dist/catalog/shaders/nebula/nebula.js.map +1 -0
  636. package/dist/catalog/shaders/plasma/plasma.d.ts +16 -0
  637. package/dist/catalog/shaders/plasma/plasma.d.ts.map +1 -0
  638. package/dist/catalog/shaders/plasma/plasma.form.d.ts +3 -0
  639. package/dist/catalog/shaders/plasma/plasma.form.d.ts.map +1 -0
  640. package/dist/catalog/shaders/plasma/plasma.form.js +15 -0
  641. package/dist/catalog/shaders/plasma/plasma.form.js.map +1 -0
  642. package/dist/catalog/shaders/plasma/plasma.js +32 -0
  643. package/dist/catalog/shaders/plasma/plasma.js.map +1 -0
  644. package/dist/catalog/shaders/simianlights/simianlights.d.ts +20 -0
  645. package/dist/catalog/shaders/simianlights/simianlights.d.ts.map +1 -0
  646. package/dist/catalog/shaders/simianlights/simianlights.form.d.ts +3 -0
  647. package/dist/catalog/shaders/simianlights/simianlights.form.d.ts.map +1 -0
  648. package/dist/catalog/shaders/simianlights/simianlights.form.js +15 -0
  649. package/dist/catalog/shaders/simianlights/simianlights.form.js.map +1 -0
  650. package/dist/catalog/shaders/simianlights/simianlights.js +57 -0
  651. package/dist/catalog/shaders/simianlights/simianlights.js.map +1 -0
  652. package/dist/src/components/form/control-form.d.ts +37 -0
  653. package/dist/src/components/form/control-form.d.ts.map +1 -0
  654. package/dist/src/components/form/control-form.js +55 -0
  655. package/dist/src/components/form/control-form.js.map +1 -0
  656. package/dist/src/components/form/make-controls.d.ts +22 -0
  657. package/dist/src/components/form/make-controls.d.ts.map +1 -0
  658. package/dist/src/components/form/make-controls.js +19 -0
  659. package/dist/src/components/form/make-controls.js.map +1 -0
  660. package/dist/src/components/form/scope.d.ts +2 -0
  661. package/dist/src/components/form/scope.d.ts.map +1 -0
  662. package/dist/src/components/form/scope.js +11 -0
  663. package/dist/src/components/form/scope.js.map +1 -0
  664. package/dist/src/components/form/use-field.d.ts +10 -0
  665. package/dist/src/components/form/use-field.d.ts.map +1 -0
  666. package/dist/src/components/form/use-field.js +27 -0
  667. package/dist/src/components/form/use-field.js.map +1 -0
  668. package/dist/src/components/preset-book-menu/index.d.ts +52 -0
  669. package/dist/src/components/preset-book-menu/index.d.ts.map +1 -0
  670. package/dist/src/components/preset-book-menu/index.js +152 -0
  671. package/dist/src/components/preset-book-menu/index.js.map +1 -0
  672. package/dist/src/components/preset-book-menu/layout.d.ts +25 -0
  673. package/dist/src/components/preset-book-menu/layout.d.ts.map +1 -0
  674. package/dist/src/components/preset-book-menu/layout.js +19 -0
  675. package/dist/src/components/preset-book-menu/layout.js.map +1 -0
  676. package/dist/src/components/preset-book-menu/preset-book-menu.types.d.ts +88 -0
  677. package/dist/src/components/preset-book-menu/preset-book-menu.types.d.ts.map +1 -0
  678. package/dist/src/components/preset-book-menu/preset-book-menu.types.js +14 -0
  679. package/dist/src/components/preset-book-menu/preset-book-menu.types.js.map +1 -0
  680. package/dist/src/components/preset-book-menu/preset-grid.d.ts +16 -0
  681. package/dist/src/components/preset-book-menu/preset-grid.d.ts.map +1 -0
  682. package/dist/src/components/preset-book-menu/preset-grid.js +49 -0
  683. package/dist/src/components/preset-book-menu/preset-grid.js.map +1 -0
  684. package/dist/src/components/preset-book-menu/resolve-image-uri.d.ts +3 -0
  685. package/dist/src/components/preset-book-menu/resolve-image-uri.d.ts.map +1 -0
  686. package/dist/src/components/preset-book-menu/resolve-image-uri.js +28 -0
  687. package/dist/src/components/preset-book-menu/resolve-image-uri.js.map +1 -0
  688. package/dist/src/components/preset-book-menu/resolve-image-uri.types.d.ts +13 -0
  689. package/dist/src/components/preset-book-menu/resolve-image-uri.types.d.ts.map +1 -0
  690. package/dist/src/components/preset-book-menu/resolve-image-uri.types.js +5 -0
  691. package/dist/src/components/preset-book-menu/resolve-image-uri.types.js.map +1 -0
  692. package/dist/src/components/preset-book-menu/resolve-image-uri.web.d.ts +3 -0
  693. package/dist/src/components/preset-book-menu/resolve-image-uri.web.d.ts.map +1 -0
  694. package/dist/src/components/preset-book-menu/resolve-image-uri.web.js +17 -0
  695. package/dist/src/components/preset-book-menu/resolve-image-uri.web.js.map +1 -0
  696. package/dist/src/components/preset-control-panel/composite-layer-control-panel.d.ts +14 -0
  697. package/dist/src/components/preset-control-panel/composite-layer-control-panel.d.ts.map +1 -0
  698. package/dist/src/components/preset-control-panel/composite-layer-control-panel.js +36 -0
  699. package/dist/src/components/preset-control-panel/composite-layer-control-panel.js.map +1 -0
  700. package/dist/src/components/preset-control-panel/control-section.d.ts +9 -0
  701. package/dist/src/components/preset-control-panel/control-section.d.ts.map +1 -0
  702. package/dist/src/components/preset-control-panel/control-section.js +47 -0
  703. package/dist/src/components/preset-control-panel/control-section.js.map +1 -0
  704. package/dist/src/components/preset-control-panel/control.d.ts +10 -0
  705. package/dist/src/components/preset-control-panel/control.d.ts.map +1 -0
  706. package/dist/src/components/preset-control-panel/control.js +35 -0
  707. package/dist/src/components/preset-control-panel/control.js.map +1 -0
  708. package/dist/src/components/preset-control-panel/index.d.ts +14 -0
  709. package/dist/src/components/preset-control-panel/index.d.ts.map +1 -0
  710. package/dist/src/components/preset-control-panel/index.js +49 -0
  711. package/dist/src/components/preset-control-panel/index.js.map +1 -0
  712. package/dist/src/components/preset-control-panel/mask-control-panel.d.ts +11 -0
  713. package/dist/src/components/preset-control-panel/mask-control-panel.d.ts.map +1 -0
  714. package/dist/src/components/preset-control-panel/mask-control-panel.js +34 -0
  715. package/dist/src/components/preset-control-panel/mask-control-panel.js.map +1 -0
  716. package/dist/src/components/preset-control-panel/preset-control-panel.d.ts +12 -0
  717. package/dist/src/components/preset-control-panel/preset-control-panel.d.ts.map +1 -0
  718. package/dist/src/components/preset-control-panel/preset-control-panel.js +23 -0
  719. package/dist/src/components/preset-control-panel/preset-control-panel.js.map +1 -0
  720. package/dist/src/components/preset-control-panel/transform-control-panel.d.ts +14 -0
  721. package/dist/src/components/preset-control-panel/transform-control-panel.d.ts.map +1 -0
  722. package/dist/src/components/preset-control-panel/transform-control-panel.js +58 -0
  723. package/dist/src/components/preset-control-panel/transform-control-panel.js.map +1 -0
  724. package/dist/src/components/preset-tile/index.d.ts +24 -0
  725. package/dist/src/components/preset-tile/index.d.ts.map +1 -0
  726. package/dist/src/components/preset-tile/index.js +98 -0
  727. package/dist/src/components/preset-tile/index.js.map +1 -0
  728. package/dist/src/components/theme/provider.d.ts +18 -0
  729. package/dist/src/components/theme/provider.d.ts.map +1 -0
  730. package/dist/src/components/theme/provider.js +29 -0
  731. package/dist/src/components/theme/provider.js.map +1 -0
  732. package/dist/src/components/theme/slots.d.ts +17 -0
  733. package/dist/src/components/theme/slots.d.ts.map +1 -0
  734. package/dist/src/components/theme/slots.js +9 -0
  735. package/dist/src/components/theme/slots.js.map +1 -0
  736. package/dist/src/components/ui/button.d.ts +14 -0
  737. package/dist/src/components/ui/button.d.ts.map +1 -0
  738. package/dist/src/components/ui/button.js +29 -0
  739. package/dist/src/components/ui/button.js.map +1 -0
  740. package/dist/src/components/ui/color-picker.d.ts +12 -0
  741. package/dist/src/components/ui/color-picker.d.ts.map +1 -0
  742. package/dist/src/components/ui/color-picker.js +43 -0
  743. package/dist/src/components/ui/color-picker.js.map +1 -0
  744. package/dist/src/components/ui/index.d.ts +6 -0
  745. package/dist/src/components/ui/index.d.ts.map +1 -0
  746. package/dist/src/components/ui/index.js +18 -0
  747. package/dist/src/components/ui/index.js.map +1 -0
  748. package/dist/src/components/ui/label.d.ts +10 -0
  749. package/dist/src/components/ui/label.d.ts.map +1 -0
  750. package/dist/src/components/ui/label.js +14 -0
  751. package/dist/src/components/ui/label.js.map +1 -0
  752. package/dist/src/components/ui/point.d.ts +19 -0
  753. package/dist/src/components/ui/point.d.ts.map +1 -0
  754. package/dist/src/components/ui/point.js +52 -0
  755. package/dist/src/components/ui/point.js.map +1 -0
  756. package/dist/src/components/ui/polygon-field.d.ts +10 -0
  757. package/dist/src/components/ui/polygon-field.d.ts.map +1 -0
  758. package/dist/src/components/ui/polygon-field.js +50 -0
  759. package/dist/src/components/ui/polygon-field.js.map +1 -0
  760. package/dist/src/components/ui/readout.d.ts +10 -0
  761. package/dist/src/components/ui/readout.d.ts.map +1 -0
  762. package/dist/src/components/ui/readout.js +14 -0
  763. package/dist/src/components/ui/readout.js.map +1 -0
  764. package/dist/src/components/ui/slider-value.d.ts +8 -0
  765. package/dist/src/components/ui/slider-value.d.ts.map +1 -0
  766. package/dist/src/components/ui/slider-value.js +17 -0
  767. package/dist/src/components/ui/slider-value.js.map +1 -0
  768. package/dist/src/components/ui/slider.d.ts +15 -0
  769. package/dist/src/components/ui/slider.d.ts.map +1 -0
  770. package/dist/src/components/ui/slider.js +58 -0
  771. package/dist/src/components/ui/slider.js.map +1 -0
  772. package/dist/src/components/ui/switch.d.ts +8 -0
  773. package/dist/src/components/ui/switch.d.ts.map +1 -0
  774. package/dist/src/components/ui/switch.js +24 -0
  775. package/dist/src/components/ui/switch.js.map +1 -0
  776. package/dist/src/index.d.ts +18 -0
  777. package/dist/src/index.d.ts.map +1 -0
  778. package/dist/src/index.js +187 -0
  779. package/dist/src/index.js.map +1 -0
  780. package/dist/src/index.web.d.ts +32 -0
  781. package/dist/src/index.web.d.ts.map +1 -0
  782. package/dist/src/index.web.js +119 -0
  783. package/dist/src/index.web.js.map +1 -0
  784. package/dist/src/kaleidoscope/controls.d.ts +24 -0
  785. package/dist/src/kaleidoscope/controls.d.ts.map +1 -0
  786. package/dist/src/kaleidoscope/controls.js +92 -0
  787. package/dist/src/kaleidoscope/controls.js.map +1 -0
  788. package/dist/src/kaleidoscope/effect.d.ts +4 -0
  789. package/dist/src/kaleidoscope/effect.d.ts.map +1 -0
  790. package/dist/src/kaleidoscope/effect.js +7 -0
  791. package/dist/src/kaleidoscope/effect.js.map +1 -0
  792. package/dist/src/kaleidoscope/effect.types.d.ts +47 -0
  793. package/dist/src/kaleidoscope/effect.types.d.ts.map +1 -0
  794. package/dist/src/kaleidoscope/effect.types.js +9 -0
  795. package/dist/src/kaleidoscope/effect.types.js.map +1 -0
  796. package/dist/src/kaleidoscope/shader-to-spec.d.ts +4 -0
  797. package/dist/src/kaleidoscope/shader-to-spec.d.ts.map +1 -0
  798. package/dist/src/kaleidoscope/shader-to-spec.js +17 -0
  799. package/dist/src/kaleidoscope/shader-to-spec.js.map +1 -0
  800. package/dist/src/kaleidoscope/types.d.ts +79 -0
  801. package/dist/src/kaleidoscope/types.d.ts.map +1 -0
  802. package/dist/src/kaleidoscope/types.js +18 -0
  803. package/dist/src/kaleidoscope/types.js.map +1 -0
  804. package/dist/src/kaleidoscope.preset-book.types.d.ts +86 -0
  805. package/dist/src/kaleidoscope.preset-book.types.d.ts.map +1 -0
  806. package/dist/src/kaleidoscope.preset-book.types.js +16 -0
  807. package/dist/src/kaleidoscope.preset-book.types.js.map +1 -0
  808. package/dist/src/lib/primitives.types.d.ts +3 -0
  809. package/dist/src/lib/primitives.types.d.ts.map +1 -0
  810. package/dist/src/lib/primitives.types.js +5 -0
  811. package/dist/src/lib/primitives.types.js.map +1 -0
  812. package/dist/src/lib/test-id.d.ts +30 -0
  813. package/dist/src/lib/test-id.d.ts.map +1 -0
  814. package/dist/src/lib/test-id.js +81 -0
  815. package/dist/src/lib/test-id.js.map +1 -0
  816. package/dist/src/livekit.d.ts +24 -0
  817. package/dist/src/livekit.d.ts.map +1 -0
  818. package/dist/src/livekit.js +63 -0
  819. package/dist/src/livekit.js.map +1 -0
  820. package/dist/src/nativewind.d.ts +7 -0
  821. package/dist/src/nativewind.d.ts.map +1 -0
  822. package/dist/src/nativewind.js +43 -0
  823. package/dist/src/nativewind.js.map +1 -0
  824. package/dist/web-driver/effects/composite.d.ts +14 -0
  825. package/dist/web-driver/effects/composite.d.ts.map +1 -0
  826. package/dist/web-driver/effects/composite.js +576 -0
  827. package/dist/web-driver/effects/composite.js.map +1 -0
  828. package/dist/web-driver/effects/layer-shaders.d.ts +2 -0
  829. package/dist/web-driver/effects/layer-shaders.d.ts.map +1 -0
  830. package/dist/web-driver/effects/layer-shaders.js +11 -0
  831. package/dist/web-driver/effects/layer-shaders.js.map +1 -0
  832. package/dist/web-driver/effects/transform.d.ts +4 -0
  833. package/dist/web-driver/effects/transform.d.ts.map +1 -0
  834. package/dist/web-driver/effects/transform.js +66 -0
  835. package/dist/web-driver/effects/transform.js.map +1 -0
  836. package/dist/web-driver/index.d.ts +6 -0
  837. package/dist/web-driver/index.d.ts.map +1 -0
  838. package/dist/web-driver/index.js +21 -0
  839. package/dist/web-driver/index.js.map +1 -0
  840. package/dist/web-driver/insertable-streams.d.ts.map +1 -0
  841. package/dist/web-driver/insertable-streams.js +68 -0
  842. package/dist/web-driver/insertable-streams.js.map +1 -0
  843. package/dist/web-driver/segmenter.d.ts.map +1 -0
  844. package/dist/web-driver/segmenter.js +89 -0
  845. package/dist/web-driver/segmenter.js.map +1 -0
  846. package/dist/web-driver/shaders.d.ts +2 -0
  847. package/dist/web-driver/shaders.d.ts.map +1 -0
  848. package/dist/web-driver/shaders.generated.d.ts +17 -0
  849. package/dist/web-driver/shaders.generated.d.ts.map +1 -0
  850. package/dist/web-driver/shaders.generated.js +1180 -0
  851. package/dist/web-driver/shaders.generated.js.map +1 -0
  852. package/dist/web-driver/shaders.js +28 -0
  853. package/dist/web-driver/shaders.js.map +1 -0
  854. package/dist/web-driver/tuning.d.ts.map +1 -0
  855. package/dist/web-driver/tuning.js +61 -0
  856. package/dist/web-driver/tuning.js.map +1 -0
  857. package/ios/Kaleidoscope.podspec +22 -15
  858. package/ios/KaleidoscopeModule/BundledImage.swift +39 -0
  859. package/ios/KaleidoscopeModule/CompositeLayers.swift +142 -0
  860. package/ios/KaleidoscopeModule/EffectTuning.swift +86 -86
  861. package/ios/KaleidoscopeModule/KaleidoscopeModule.swift +55 -27
  862. package/ios/KaleidoscopeModule/Registration.swift +36 -57
  863. package/ios/KaleidoscopeModule/effects/CompositeProcessor.swift +906 -0
  864. package/ios/KaleidoscopeModule/effects/FrameBridge.swift +25 -25
  865. package/ios/KaleidoscopeModule/effects/TransformProcessor.swift +127 -126
  866. package/ios/KaleidoscopeModule/gpu/CompositeRendering.swift +352 -0
  867. package/ios/KaleidoscopeModule/gpu/Ingest.swift +104 -102
  868. package/ios/KaleidoscopeModule/gpu/MetalRenderer.swift +473 -544
  869. package/ios/KaleidoscopeModule/gpu/Orientation.swift +41 -41
  870. package/ios/KaleidoscopeModule/gpu/ShaderLibrary.swift +100 -54
  871. package/ios/KaleidoscopeModule/gpu/TextureBridge.swift +245 -244
  872. package/ios/KaleidoscopeModule/segmentation/MaskTuning.swift +11 -11
  873. package/ios/KaleidoscopeModule/segmentation/Segmenter.swift +360 -359
  874. package/ios/KaleidoscopeModule/shaders/GENERATIVE.txt +9 -0
  875. package/ios/KaleidoscopeModule/shaders/SHADERS.txt +13 -2
  876. package/ios/KaleidoscopeModule/shaders/anamorphic-lensflare.metalsrc +47 -0
  877. package/ios/KaleidoscopeModule/shaders/clouds.metalsrc +185 -0
  878. package/ios/KaleidoscopeModule/shaders/composite-blit.metalsrc +22 -0
  879. package/ios/KaleidoscopeModule/shaders/composite-blur.metalsrc +93 -0
  880. package/ios/KaleidoscopeModule/shaders/composite-camera.metalsrc +22 -0
  881. package/ios/KaleidoscopeModule/shaders/composite-image.metalsrc +24 -0
  882. package/ios/KaleidoscopeModule/shaders/composite-masked.metalsrc +22 -0
  883. package/ios/KaleidoscopeModule/shaders/composite-subject.metalsrc +23 -0
  884. package/ios/KaleidoscopeModule/shaders/corporate-blobs.metalsrc +221 -0
  885. package/ios/KaleidoscopeModule/shaders/fireflies.metalsrc +44 -0
  886. package/ios/KaleidoscopeModule/shaders/godrays.metalsrc +46 -0
  887. package/ios/KaleidoscopeModule/shaders/light-beams-and-motes.metalsrc +316 -0
  888. package/ios/KaleidoscopeModule/shaders/nebula.metalsrc +45 -45
  889. package/ios/KaleidoscopeModule/shaders/plasma.metalsrc +26 -0
  890. package/ios/KaleidoscopeModule/shaders/simianlights.metalsrc +45 -45
  891. package/package.json +485 -115
  892. package/plugin/build/android/assets.js +45 -0
  893. package/plugin/build/android/index.js +34 -0
  894. package/plugin/build/index.js +39 -0
  895. package/plugin/build/ios/assets.js +110 -0
  896. package/plugin/build/ios/deployment-target.js +105 -0
  897. package/plugin/build/ios/index.js +63 -0
  898. package/plugin/build/ios/pods.js +73 -0
  899. package/plugin/build/lib/constants.js +15 -0
  900. package/plugin/build/lib/file-manipulation.js +57 -0
  901. package/plugin/build/lib/mods.js +36 -0
  902. package/plugin/build/lib/preset-book.js +215 -0
  903. package/plugin/build/lib/types.js +16 -0
  904. package/src/components/form/control-form.tsx +112 -0
  905. package/src/components/form/make-controls.ts +33 -0
  906. package/src/components/form/scope.ts +9 -0
  907. package/src/components/form/use-field.ts +35 -0
  908. package/src/components/preset-book-menu/index.tsx +286 -0
  909. package/src/components/preset-book-menu/layout.tsx +63 -0
  910. package/src/components/preset-book-menu/preset-book-menu.types.ts +112 -0
  911. package/src/components/preset-book-menu/preset-grid.tsx +80 -0
  912. package/src/components/preset-book-menu/resolve-image-uri.ts +31 -0
  913. package/src/components/preset-book-menu/resolve-image-uri.types.ts +18 -0
  914. package/src/components/preset-book-menu/resolve-image-uri.web.ts +15 -0
  915. package/src/components/preset-control-panel/composite-layer-control-panel.tsx +56 -0
  916. package/src/components/preset-control-panel/control-section.tsx +84 -0
  917. package/src/components/preset-control-panel/control.tsx +50 -0
  918. package/src/components/preset-control-panel/index.ts +31 -0
  919. package/src/components/preset-control-panel/mask-control-panel.tsx +93 -0
  920. package/src/components/preset-control-panel/preset-control-panel.tsx +48 -0
  921. package/src/components/preset-control-panel/transform-control-panel.tsx +146 -0
  922. package/src/components/preset-tile/index.tsx +160 -0
  923. package/src/components/theme/provider.tsx +50 -0
  924. package/src/components/theme/slots.ts +37 -0
  925. package/src/components/ui/button.tsx +54 -0
  926. package/src/components/ui/color-picker.tsx +74 -0
  927. package/src/components/ui/index.ts +10 -0
  928. package/src/components/ui/label.tsx +24 -0
  929. package/src/components/ui/point.tsx +116 -0
  930. package/src/components/ui/polygon-field.tsx +84 -0
  931. package/src/components/ui/readout.tsx +25 -0
  932. package/src/components/ui/slider-value.ts +15 -0
  933. package/src/components/ui/slider.tsx +98 -0
  934. package/src/components/ui/switch.tsx +40 -0
  935. package/src/index.ts +176 -95
  936. package/src/index.web.ts +126 -74
  937. package/src/kaleidoscope/controls.ts +127 -0
  938. package/src/kaleidoscope/effect.ts +5 -0
  939. package/src/kaleidoscope/effect.types.ts +63 -0
  940. package/src/kaleidoscope/shader-to-spec.ts +16 -0
  941. package/src/kaleidoscope/types.ts +101 -0
  942. package/src/kaleidoscope.preset-book.types.ts +105 -0
  943. package/src/lib/primitives.types.ts +5 -0
  944. package/src/lib/test-id.ts +81 -0
  945. package/src/livekit.ts +6 -4
  946. package/src/nativewind.ts +41 -0
  947. package/android/src/main/assets/backgrounds/stylized-dark.webp +0 -0
  948. package/android/src/main/java/com/simiancraft/kaleidoscope/effects/BackgroundImageFactory.kt +0 -365
  949. package/android/src/main/java/com/simiancraft/kaleidoscope/effects/BlurFactory.kt +0 -400
  950. package/dist/backgrounds/dark-office.d.ts +0 -3
  951. package/dist/backgrounds/dark-office.d.ts.map +0 -1
  952. package/dist/backgrounds/dark-office.js +0 -5
  953. package/dist/backgrounds/dark-office.js.map +0 -1
  954. package/dist/backgrounds/dark-office.web.d.ts +0 -3
  955. package/dist/backgrounds/dark-office.web.d.ts.map +0 -1
  956. package/dist/backgrounds/dark-office.web.js +0 -8
  957. package/dist/backgrounds/dark-office.web.js.map +0 -1
  958. package/dist/backgrounds/debug-resolutions.d.ts +0 -3
  959. package/dist/backgrounds/debug-resolutions.d.ts.map +0 -1
  960. package/dist/backgrounds/debug-resolutions.js +0 -6
  961. package/dist/backgrounds/debug-resolutions.js.map +0 -1
  962. package/dist/backgrounds/debug-resolutions.web.d.ts +0 -3
  963. package/dist/backgrounds/debug-resolutions.web.d.ts.map +0 -1
  964. package/dist/backgrounds/debug-resolutions.web.js +0 -8
  965. package/dist/backgrounds/debug-resolutions.web.js.map +0 -1
  966. package/dist/backgrounds/home-dark.d.ts +0 -3
  967. package/dist/backgrounds/home-dark.d.ts.map +0 -1
  968. package/dist/backgrounds/home-dark.js +0 -5
  969. package/dist/backgrounds/home-dark.js.map +0 -1
  970. package/dist/backgrounds/home-dark.web.d.ts +0 -3
  971. package/dist/backgrounds/home-dark.web.d.ts.map +0 -1
  972. package/dist/backgrounds/home-dark.web.js +0 -6
  973. package/dist/backgrounds/home-dark.web.js.map +0 -1
  974. package/dist/backgrounds/home-light.d.ts +0 -3
  975. package/dist/backgrounds/home-light.d.ts.map +0 -1
  976. package/dist/backgrounds/home-light.js +0 -5
  977. package/dist/backgrounds/home-light.js.map +0 -1
  978. package/dist/backgrounds/home-light.web.d.ts +0 -3
  979. package/dist/backgrounds/home-light.web.d.ts.map +0 -1
  980. package/dist/backgrounds/home-light.web.js +0 -6
  981. package/dist/backgrounds/home-light.web.js.map +0 -1
  982. package/dist/backgrounds/index.d.ts +0 -3
  983. package/dist/backgrounds/index.d.ts.map +0 -1
  984. package/dist/backgrounds/index.js +0 -6
  985. package/dist/backgrounds/index.js.map +0 -1
  986. package/dist/backgrounds/light-office.d.ts +0 -3
  987. package/dist/backgrounds/light-office.d.ts.map +0 -1
  988. package/dist/backgrounds/light-office.js +0 -5
  989. package/dist/backgrounds/light-office.js.map +0 -1
  990. package/dist/backgrounds/light-office.web.d.ts +0 -3
  991. package/dist/backgrounds/light-office.web.d.ts.map +0 -1
  992. package/dist/backgrounds/light-office.web.js +0 -8
  993. package/dist/backgrounds/light-office.web.js.map +0 -1
  994. package/dist/backgrounds/nature-dark.d.ts +0 -3
  995. package/dist/backgrounds/nature-dark.d.ts.map +0 -1
  996. package/dist/backgrounds/nature-dark.js +0 -5
  997. package/dist/backgrounds/nature-dark.js.map +0 -1
  998. package/dist/backgrounds/nature-dark.web.d.ts +0 -3
  999. package/dist/backgrounds/nature-dark.web.d.ts.map +0 -1
  1000. package/dist/backgrounds/nature-dark.web.js +0 -6
  1001. package/dist/backgrounds/nature-dark.web.js.map +0 -1
  1002. package/dist/backgrounds/nature-light.d.ts +0 -3
  1003. package/dist/backgrounds/nature-light.d.ts.map +0 -1
  1004. package/dist/backgrounds/nature-light.js +0 -5
  1005. package/dist/backgrounds/nature-light.js.map +0 -1
  1006. package/dist/backgrounds/nature-light.web.d.ts +0 -3
  1007. package/dist/backgrounds/nature-light.web.d.ts.map +0 -1
  1008. package/dist/backgrounds/nature-light.web.js +0 -6
  1009. package/dist/backgrounds/nature-light.web.js.map +0 -1
  1010. package/dist/backgrounds/preset-source.types.d.ts +0 -2
  1011. package/dist/backgrounds/preset-source.types.d.ts.map +0 -1
  1012. package/dist/backgrounds/preset-source.types.js +0 -2
  1013. package/dist/backgrounds/preset-source.types.js.map +0 -1
  1014. package/dist/backgrounds/presets.d.ts +0 -3
  1015. package/dist/backgrounds/presets.d.ts.map +0 -1
  1016. package/dist/backgrounds/presets.js +0 -34
  1017. package/dist/backgrounds/presets.js.map +0 -1
  1018. package/dist/backgrounds/simiancraft-dark.d.ts +0 -3
  1019. package/dist/backgrounds/simiancraft-dark.d.ts.map +0 -1
  1020. package/dist/backgrounds/simiancraft-dark.js +0 -5
  1021. package/dist/backgrounds/simiancraft-dark.js.map +0 -1
  1022. package/dist/backgrounds/simiancraft-dark.web.d.ts +0 -3
  1023. package/dist/backgrounds/simiancraft-dark.web.d.ts.map +0 -1
  1024. package/dist/backgrounds/simiancraft-dark.web.js +0 -6
  1025. package/dist/backgrounds/simiancraft-dark.web.js.map +0 -1
  1026. package/dist/backgrounds/simiancraft-light.d.ts +0 -3
  1027. package/dist/backgrounds/simiancraft-light.d.ts.map +0 -1
  1028. package/dist/backgrounds/simiancraft-light.js +0 -5
  1029. package/dist/backgrounds/simiancraft-light.js.map +0 -1
  1030. package/dist/backgrounds/simiancraft-light.web.d.ts +0 -3
  1031. package/dist/backgrounds/simiancraft-light.web.d.ts.map +0 -1
  1032. package/dist/backgrounds/simiancraft-light.web.js +0 -6
  1033. package/dist/backgrounds/simiancraft-light.web.js.map +0 -1
  1034. package/dist/backgrounds/stylized-dark.d.ts +0 -3
  1035. package/dist/backgrounds/stylized-dark.d.ts.map +0 -1
  1036. package/dist/backgrounds/stylized-dark.js +0 -5
  1037. package/dist/backgrounds/stylized-dark.js.map +0 -1
  1038. package/dist/backgrounds/stylized-dark.web.d.ts +0 -3
  1039. package/dist/backgrounds/stylized-dark.web.d.ts.map +0 -1
  1040. package/dist/backgrounds/stylized-dark.web.js +0 -6
  1041. package/dist/backgrounds/stylized-dark.web.js.map +0 -1
  1042. package/dist/backgrounds/stylized-dark.webp +0 -0
  1043. package/dist/backgrounds/stylized-light.d.ts +0 -3
  1044. package/dist/backgrounds/stylized-light.d.ts.map +0 -1
  1045. package/dist/backgrounds/stylized-light.js +0 -5
  1046. package/dist/backgrounds/stylized-light.js.map +0 -1
  1047. package/dist/backgrounds/stylized-light.web.d.ts +0 -3
  1048. package/dist/backgrounds/stylized-light.web.d.ts.map +0 -1
  1049. package/dist/backgrounds/stylized-light.web.js +0 -6
  1050. package/dist/backgrounds/stylized-light.web.js.map +0 -1
  1051. package/dist/index.d.ts +0 -42
  1052. package/dist/index.d.ts.map +0 -1
  1053. package/dist/index.js +0 -155
  1054. package/dist/index.js.map +0 -1
  1055. package/dist/index.web.d.ts +0 -49
  1056. package/dist/index.web.d.ts.map +0 -1
  1057. package/dist/index.web.js +0 -113
  1058. package/dist/index.web.js.map +0 -1
  1059. package/dist/livekit.d.ts +0 -24
  1060. package/dist/livekit.d.ts.map +0 -1
  1061. package/dist/livekit.js +0 -57
  1062. package/dist/livekit.js.map +0 -1
  1063. package/dist/types.d.ts +0 -74
  1064. package/dist/types.d.ts.map +0 -1
  1065. package/dist/types.js +0 -10
  1066. package/dist/types.js.map +0 -1
  1067. package/dist/web/blur-kernel.d.ts +0 -6
  1068. package/dist/web/blur-kernel.d.ts.map +0 -1
  1069. package/dist/web/blur-kernel.js +0 -41
  1070. package/dist/web/blur-kernel.js.map +0 -1
  1071. package/dist/web/effects/background-image.d.ts +0 -3
  1072. package/dist/web/effects/background-image.d.ts.map +0 -1
  1073. package/dist/web/effects/background-image.js +0 -284
  1074. package/dist/web/effects/background-image.js.map +0 -1
  1075. package/dist/web/effects/blur.d.ts +0 -3
  1076. package/dist/web/effects/blur.d.ts.map +0 -1
  1077. package/dist/web/effects/blur.js +0 -339
  1078. package/dist/web/effects/blur.js.map +0 -1
  1079. package/dist/web/effects/transform.d.ts +0 -4
  1080. package/dist/web/effects/transform.d.ts.map +0 -1
  1081. package/dist/web/effects/transform.js +0 -62
  1082. package/dist/web/effects/transform.js.map +0 -1
  1083. package/dist/web/insertable-streams.d.ts.map +0 -1
  1084. package/dist/web/insertable-streams.js +0 -64
  1085. package/dist/web/insertable-streams.js.map +0 -1
  1086. package/dist/web/segmenter.d.ts.map +0 -1
  1087. package/dist/web/segmenter.js +0 -83
  1088. package/dist/web/segmenter.js.map +0 -1
  1089. package/dist/web/shaders.d.ts +0 -2
  1090. package/dist/web/shaders.d.ts.map +0 -1
  1091. package/dist/web/shaders.generated.d.ts +0 -4
  1092. package/dist/web/shaders.generated.d.ts.map +0 -1
  1093. package/dist/web/shaders.generated.js +0 -54
  1094. package/dist/web/shaders.generated.js.map +0 -1
  1095. package/dist/web/shaders.js +0 -32
  1096. package/dist/web/shaders.js.map +0 -1
  1097. package/dist/web/tuning.d.ts.map +0 -1
  1098. package/dist/web/tuning.js +0 -55
  1099. package/dist/web/tuning.js.map +0 -1
  1100. package/ios/KaleidoscopeModule/effects/BackgroundImageProcessor.swift +0 -293
  1101. package/ios/KaleidoscopeModule/effects/BlurProcessor.swift +0 -238
  1102. package/ios/KaleidoscopeModule/resources/backgrounds/dark-office.webp +0 -0
  1103. package/ios/KaleidoscopeModule/resources/backgrounds/debug-resolutions.webp +0 -0
  1104. package/ios/KaleidoscopeModule/resources/backgrounds/home-dark.webp +0 -0
  1105. package/ios/KaleidoscopeModule/resources/backgrounds/home-light.webp +0 -0
  1106. package/ios/KaleidoscopeModule/resources/backgrounds/light-office.webp +0 -0
  1107. package/ios/KaleidoscopeModule/resources/backgrounds/nature-dark.webp +0 -0
  1108. package/ios/KaleidoscopeModule/resources/backgrounds/nature-light.webp +0 -0
  1109. package/ios/KaleidoscopeModule/resources/backgrounds/simiancraft-dark.webp +0 -0
  1110. package/ios/KaleidoscopeModule/resources/backgrounds/simiancraft-light.webp +0 -0
  1111. package/ios/KaleidoscopeModule/resources/backgrounds/stylized-dark.webp +0 -0
  1112. package/ios/KaleidoscopeModule/resources/backgrounds/stylized-light.webp +0 -0
  1113. package/ios/KaleidoscopeModule/shaders/blur.metalsrc +0 -72
  1114. package/ios/KaleidoscopeModule/shaders/composite.metalsrc +0 -22
  1115. package/src/backgrounds/README.md +0 -83
  1116. package/src/backgrounds/dark-office.ts +0 -6
  1117. package/src/backgrounds/dark-office.web.ts +0 -9
  1118. package/src/backgrounds/dark-office.webp +0 -0
  1119. package/src/backgrounds/debug-resolutions.ts +0 -7
  1120. package/src/backgrounds/debug-resolutions.web.ts +0 -9
  1121. package/src/backgrounds/debug-resolutions.webp +0 -0
  1122. package/src/backgrounds/home-dark.ts +0 -6
  1123. package/src/backgrounds/home-dark.web.ts +0 -7
  1124. package/src/backgrounds/home-dark.webp +0 -0
  1125. package/src/backgrounds/home-light.ts +0 -6
  1126. package/src/backgrounds/home-light.web.ts +0 -7
  1127. package/src/backgrounds/home-light.webp +0 -0
  1128. package/src/backgrounds/index.ts +0 -7
  1129. package/src/backgrounds/light-office.ts +0 -6
  1130. package/src/backgrounds/light-office.web.ts +0 -9
  1131. package/src/backgrounds/light-office.webp +0 -0
  1132. package/src/backgrounds/nature-dark.ts +0 -6
  1133. package/src/backgrounds/nature-dark.web.ts +0 -7
  1134. package/src/backgrounds/nature-dark.webp +0 -0
  1135. package/src/backgrounds/nature-light.ts +0 -6
  1136. package/src/backgrounds/nature-light.web.ts +0 -7
  1137. package/src/backgrounds/nature-light.webp +0 -0
  1138. package/src/backgrounds/preset-source.types.ts +0 -5
  1139. package/src/backgrounds/presets.ts +0 -36
  1140. package/src/backgrounds/simiancraft-dark.ts +0 -6
  1141. package/src/backgrounds/simiancraft-dark.web.ts +0 -7
  1142. package/src/backgrounds/simiancraft-dark.webp +0 -0
  1143. package/src/backgrounds/simiancraft-light.ts +0 -6
  1144. package/src/backgrounds/simiancraft-light.web.ts +0 -7
  1145. package/src/backgrounds/simiancraft-light.webp +0 -0
  1146. package/src/backgrounds/stylized-dark.ts +0 -6
  1147. package/src/backgrounds/stylized-dark.web.ts +0 -7
  1148. package/src/backgrounds/stylized-dark.webp +0 -0
  1149. package/src/backgrounds/stylized-light.ts +0 -6
  1150. package/src/backgrounds/stylized-light.web.ts +0 -7
  1151. package/src/backgrounds/stylized-light.webp +0 -0
  1152. package/src/types.ts +0 -89
  1153. package/src/web/blur-kernel.ts +0 -44
  1154. package/src/web/effects/background-image.ts +0 -364
  1155. package/src/web/effects/blur.ts +0 -430
  1156. package/src/web/effects/transform.ts +0 -69
  1157. package/src/web/insertable-streams.ts +0 -112
  1158. package/src/web/segmenter.ts +0 -107
  1159. package/src/web/shaders.generated.ts +0 -56
  1160. package/src/web/shaders.ts +0 -31
  1161. package/src/web/tuning.ts +0 -67
  1162. /package/{src/backgrounds → catalog/images}/assets.d.ts +0 -0
  1163. /package/{android/src/main/assets/backgrounds → catalog/images/debug}/debug-resolutions.webp +0 -0
  1164. /package/{android/src/main/assets/backgrounds → catalog/images/home}/home-dark.webp +0 -0
  1165. /package/{android/src/main/assets/backgrounds → catalog/images/home}/home-light.webp +0 -0
  1166. /package/{android/src/main/assets/backgrounds/nature-dark.webp → catalog/images/nature/landscape-dark.webp} +0 -0
  1167. /package/{android/src/main/assets/backgrounds/nature-light.webp → catalog/images/nature/landscape-light.webp} +0 -0
  1168. /package/{android/src/main/assets/backgrounds/dark-office.webp → catalog/images/office/office-dark.webp} +0 -0
  1169. /package/{android/src/main/assets/backgrounds/light-office.webp → catalog/images/office/office-light.webp} +0 -0
  1170. /package/{android/src/main/assets/backgrounds/stylized-light.webp → catalog/images/sci-fi/sci-fi-light.webp} +0 -0
  1171. /package/{android/src/main/assets/backgrounds → catalog/images/simiancraft}/simiancraft-dark.webp +0 -0
  1172. /package/{android/src/main/assets/backgrounds → catalog/images/simiancraft}/simiancraft-light.webp +0 -0
  1173. /package/dist/{backgrounds → catalog/images/debug}/debug-resolutions.webp +0 -0
  1174. /package/dist/{backgrounds → catalog/images/home}/home-dark.webp +0 -0
  1175. /package/dist/{backgrounds → catalog/images/home}/home-light.webp +0 -0
  1176. /package/dist/{backgrounds/nature-dark.webp → catalog/images/nature/landscape-dark.webp} +0 -0
  1177. /package/dist/{backgrounds/nature-light.webp → catalog/images/nature/landscape-light.webp} +0 -0
  1178. /package/dist/{backgrounds/dark-office.webp → catalog/images/office/office-dark.webp} +0 -0
  1179. /package/dist/{backgrounds/light-office.webp → catalog/images/office/office-light.webp} +0 -0
  1180. /package/dist/{backgrounds/stylized-light.webp → catalog/images/sci-fi/sci-fi-light.webp} +0 -0
  1181. /package/dist/{backgrounds → catalog/images/simiancraft}/simiancraft-dark.webp +0 -0
  1182. /package/dist/{backgrounds → catalog/images/simiancraft}/simiancraft-light.webp +0 -0
  1183. /package/dist/{web → web-driver}/insertable-streams.d.ts +0 -0
  1184. /package/dist/{web → web-driver}/segmenter.d.ts +0 -0
  1185. /package/dist/{web → web-driver}/tuning.d.ts +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plasma.d.ts","sourceRoot":"","sources":["../../../../catalog/shaders/plasma/plasma.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,mCAAmC,CAAC;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEvD,oDAAoD;AACpD,MAAM,MAAM,cAAc,GAAG;IAC3B,kDAAkD;IAClD,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC;IACtB,mDAAmD;IACnD,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC;IACtB,2CAA2C;IAC3C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,uDAAuD;IACvD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,kFAAkF;AAClF,eAAO,MAAM,eAAe,EAAE,SAAS,cAAc,EAqBpD,CAAC","sourcesContent":["// Plasma layer-shader interface: typed uniforms + control descriptor. A two-\n// color time-morphing field, an opaque BACKGROUND layer (the cheapest\n// procedural engine worth shipping). The same shader also backs the standalone\n// `plasma` book presets (ocean/sunset/mint/fast) via ShaderOptionsMap; this file\n// is the layer-side type + control surface. Shader source is shaders/plasma.frag.\n\nimport type { RGB } from '../../../src/lib/primitives.types';\nimport type { UniformControl } from '../_shared/types';\n\n/** Typed uniforms for the `plasma` layer shader. */\nexport type PlasmaUniforms = {\n /** First palette color, RGB each channel 0..1. */\n readonly uColorA: RGB;\n /** Second palette color, RGB each channel 0..1. */\n readonly uColorB: RGB;\n /** Animation rate; 0 freezes the field. */\n readonly uSpeed: number;\n /** Spatial frequency; higher = more, tighter cells. */\n readonly uScale: number;\n};\n\n/** The `plasma` shader's tunable uniforms; defaults are the cool \"ocean\" look. */\nexport const PLASMA_CONTROLS: readonly UniformControl[] = [\n { name: 'uColorA', kind: 'color', default: [0.0, 0.3, 0.6], doc: 'First palette color.' },\n { name: 'uColorB', kind: 'color', default: [0.0, 0.6, 0.6], doc: 'Second palette color.' },\n {\n name: 'uSpeed',\n kind: 'float',\n default: 0.3,\n min: 0,\n max: 2,\n step: 0.01,\n doc: 'Animation rate; 0 freezes.',\n },\n {\n name: 'uScale',\n kind: 'float',\n default: 8,\n min: 1,\n max: 20,\n step: 0.5,\n doc: 'Spatial frequency; higher = tighter cells.',\n },\n];\n"]}
@@ -0,0 +1,3 @@
1
+ import { type KaleidoscopeControls } from '../../../src/components/preset-control-panel';
2
+ export declare function PlasmaForm({ uniforms, onPatch, disabled }: KaleidoscopeControls): import("react/jsx-runtime").JSX.Element;
3
+ //# sourceMappingURL=plasma.form.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plasma.form.d.ts","sourceRoot":"","sources":["../../../../catalog/shaders/plasma/plasma.form.tsx"],"names":[],"mappings":"AAMA,OAAO,EAIL,KAAK,oBAAoB,EAC1B,MAAM,8CAA8C,CAAC;AAGtD,wBAAgB,UAAU,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,oBAAoB,2CAiB/E","sourcesContent":["// Plasma's editor form: the shader OWNS its control layout. This pass just stacks\n// one <Control uniform=\"…\"/> per uniform in declared order (the auto-form's shape);\n// the point is that this file exists per shader, so layout/grouping is a local edit\n// here, and a new primitive flows in through <Control> without touching it.\n// Conventional layer id: \"plasma\".\n\nimport {\n Control,\n ControlForm,\n ControlSection,\n type KaleidoscopeControls,\n} from '../../../src/components/preset-control-panel';\nimport { PLASMA_CONTROLS } from './plasma';\n\nexport function PlasmaForm({ uniforms, onPatch, disabled }: KaleidoscopeControls) {\n return (\n <ControlForm\n id=\"plasma\"\n uniforms={uniforms.plasma ?? {}}\n onPatch={onPatch}\n disabled={disabled}\n controls={PLASMA_CONTROLS}\n >\n <ControlSection title=\"plasma\">\n <Control uniform=\"uColorA\" />\n <Control uniform=\"uColorB\" />\n <Control uniform=\"uSpeed\" />\n <Control uniform=\"uScale\" />\n </ControlSection>\n </ControlForm>\n );\n}\n"]}
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PlasmaForm = PlasmaForm;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ // Plasma's editor form: the shader OWNS its control layout. This pass just stacks
6
+ // one <Control uniform="…"/> per uniform in declared order (the auto-form's shape);
7
+ // the point is that this file exists per shader, so layout/grouping is a local edit
8
+ // here, and a new primitive flows in through <Control> without touching it.
9
+ // Conventional layer id: "plasma".
10
+ const preset_control_panel_1 = require("../../../src/components/preset-control-panel");
11
+ const plasma_1 = require("./plasma");
12
+ function PlasmaForm({ uniforms, onPatch, disabled }) {
13
+ return ((0, jsx_runtime_1.jsx)(preset_control_panel_1.ControlForm, { id: "plasma", uniforms: uniforms.plasma ?? {}, onPatch: onPatch, disabled: disabled, controls: plasma_1.PLASMA_CONTROLS, children: (0, jsx_runtime_1.jsxs)(preset_control_panel_1.ControlSection, { title: "plasma", children: [(0, jsx_runtime_1.jsx)(preset_control_panel_1.Control, { uniform: "uColorA" }), (0, jsx_runtime_1.jsx)(preset_control_panel_1.Control, { uniform: "uColorB" }), (0, jsx_runtime_1.jsx)(preset_control_panel_1.Control, { uniform: "uSpeed" }), (0, jsx_runtime_1.jsx)(preset_control_panel_1.Control, { uniform: "uScale" })] }) }));
14
+ }
15
+ //# sourceMappingURL=plasma.form.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plasma.form.js","sourceRoot":"","sources":["../../../../catalog/shaders/plasma/plasma.form.tsx"],"names":[],"mappings":";;;;AAAA,kFAAkF;AAClF,oFAAoF;AACpF,oFAAoF;AACpF,4EAA4E;AAC5E,mCAAmC;AAEnC,uFAKsD;AACtD,qCAA2C;AAE3C,oBAA2B,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAwB;IAC9E,OAAO,CACL,uBAAC,kCAAW,IACV,EAAE,EAAC,QAAQ,EACX,QAAQ,EAAE,QAAQ,CAAC,MAAM,IAAI,EAAE,EAC/B,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,wBAAe,YAEzB,wBAAC,qCAAc,IAAC,KAAK,EAAC,QAAQ,aAC5B,uBAAC,8BAAO,IAAC,OAAO,EAAC,SAAS,GAAG,EAC7B,uBAAC,8BAAO,IAAC,OAAO,EAAC,SAAS,GAAG,EAC7B,uBAAC,8BAAO,IAAC,OAAO,EAAC,QAAQ,GAAG,EAC5B,uBAAC,8BAAO,IAAC,OAAO,EAAC,QAAQ,GAAG,IACb,GACL,CACf,CAAC;AACJ,CAAC","sourcesContent":["// Plasma's editor form: the shader OWNS its control layout. This pass just stacks\n// one <Control uniform=\"…\"/> per uniform in declared order (the auto-form's shape);\n// the point is that this file exists per shader, so layout/grouping is a local edit\n// here, and a new primitive flows in through <Control> without touching it.\n// Conventional layer id: \"plasma\".\n\nimport {\n Control,\n ControlForm,\n ControlSection,\n type KaleidoscopeControls,\n} from '../../../src/components/preset-control-panel';\nimport { PLASMA_CONTROLS } from './plasma';\n\nexport function PlasmaForm({ uniforms, onPatch, disabled }: KaleidoscopeControls) {\n return (\n <ControlForm\n id=\"plasma\"\n uniforms={uniforms.plasma ?? {}}\n onPatch={onPatch}\n disabled={disabled}\n controls={PLASMA_CONTROLS}\n >\n <ControlSection title=\"plasma\">\n <Control uniform=\"uColorA\" />\n <Control uniform=\"uColorB\" />\n <Control uniform=\"uSpeed\" />\n <Control uniform=\"uScale\" />\n </ControlSection>\n </ControlForm>\n );\n}\n"]}
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ // Plasma layer-shader interface: typed uniforms + control descriptor. A two-
3
+ // color time-morphing field, an opaque BACKGROUND layer (the cheapest
4
+ // procedural engine worth shipping). The same shader also backs the standalone
5
+ // `plasma` book presets (ocean/sunset/mint/fast) via ShaderOptionsMap; this file
6
+ // is the layer-side type + control surface. Shader source is shaders/plasma.frag.
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.PLASMA_CONTROLS = void 0;
9
+ /** The `plasma` shader's tunable uniforms; defaults are the cool "ocean" look. */
10
+ exports.PLASMA_CONTROLS = [
11
+ { name: 'uColorA', kind: 'color', default: [0.0, 0.3, 0.6], doc: 'First palette color.' },
12
+ { name: 'uColorB', kind: 'color', default: [0.0, 0.6, 0.6], doc: 'Second palette color.' },
13
+ {
14
+ name: 'uSpeed',
15
+ kind: 'float',
16
+ default: 0.3,
17
+ min: 0,
18
+ max: 2,
19
+ step: 0.01,
20
+ doc: 'Animation rate; 0 freezes.',
21
+ },
22
+ {
23
+ name: 'uScale',
24
+ kind: 'float',
25
+ default: 8,
26
+ min: 1,
27
+ max: 20,
28
+ step: 0.5,
29
+ doc: 'Spatial frequency; higher = tighter cells.',
30
+ },
31
+ ];
32
+ //# sourceMappingURL=plasma.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plasma.js","sourceRoot":"","sources":["../../../../catalog/shaders/plasma/plasma.ts"],"names":[],"mappings":";AAAA,6EAA6E;AAC7E,sEAAsE;AACtE,+EAA+E;AAC/E,iFAAiF;AACjF,kFAAkF;;;AAiBlF,kFAAkF;AACrE,QAAA,eAAe,GAA8B;IACxD,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,sBAAsB,EAAE;IACzF,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,uBAAuB,EAAE;IAC1F;QACE,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,GAAG;QACZ,GAAG,EAAE,CAAC;QACN,GAAG,EAAE,CAAC;QACN,IAAI,EAAE,IAAI;QACV,GAAG,EAAE,4BAA4B;KAClC;IACD;QACE,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,CAAC;QACV,GAAG,EAAE,CAAC;QACN,GAAG,EAAE,EAAE;QACP,IAAI,EAAE,GAAG;QACT,GAAG,EAAE,4CAA4C;KAClD;CACF,CAAC","sourcesContent":["// Plasma layer-shader interface: typed uniforms + control descriptor. A two-\n// color time-morphing field, an opaque BACKGROUND layer (the cheapest\n// procedural engine worth shipping). The same shader also backs the standalone\n// `plasma` book presets (ocean/sunset/mint/fast) via ShaderOptionsMap; this file\n// is the layer-side type + control surface. Shader source is shaders/plasma.frag.\n\nimport type { RGB } from '../../../src/lib/primitives.types';\nimport type { UniformControl } from '../_shared/types';\n\n/** Typed uniforms for the `plasma` layer shader. */\nexport type PlasmaUniforms = {\n /** First palette color, RGB each channel 0..1. */\n readonly uColorA: RGB;\n /** Second palette color, RGB each channel 0..1. */\n readonly uColorB: RGB;\n /** Animation rate; 0 freezes the field. */\n readonly uSpeed: number;\n /** Spatial frequency; higher = more, tighter cells. */\n readonly uScale: number;\n};\n\n/** The `plasma` shader's tunable uniforms; defaults are the cool \"ocean\" look. */\nexport const PLASMA_CONTROLS: readonly UniformControl[] = [\n { name: 'uColorA', kind: 'color', default: [0.0, 0.3, 0.6], doc: 'First palette color.' },\n { name: 'uColorB', kind: 'color', default: [0.0, 0.6, 0.6], doc: 'Second palette color.' },\n {\n name: 'uSpeed',\n kind: 'float',\n default: 0.3,\n min: 0,\n max: 2,\n step: 0.01,\n doc: 'Animation rate; 0 freezes.',\n },\n {\n name: 'uScale',\n kind: 'float',\n default: 8,\n min: 1,\n max: 20,\n step: 0.5,\n doc: 'Spatial frequency; higher = tighter cells.',\n },\n];\n"]}
@@ -0,0 +1,20 @@
1
+ import type { RGB } from '../../../src/lib/primitives.types';
2
+ import type { UniformControl } from '../_shared/types';
3
+ /** Typed uniforms for the `simianlights` layer shader. */
4
+ export type SimianlightsUniforms = {
5
+ /** Overall tint / color grade; [1,1,1] keeps the stock star colors. */
6
+ readonly uColor: RGB;
7
+ /** Final glow multiplier; 1 = stock, higher = brighter field. */
8
+ readonly uBrightness: number;
9
+ /** Drift + rotation rate; 1 = stock, 0 freezes the field. */
10
+ readonly uSpeed: number;
11
+ /** Star color-cycle (twinkle) rate; 1 = stock. */
12
+ readonly uTwinkleSpeed: number;
13
+ /** Starfield zoom / density; >1 = more, smaller stars. */
14
+ readonly uScale: number;
15
+ /** Star-core size; 1 = stock, higher = fatter cores. */
16
+ readonly uStarGlow: number;
17
+ };
18
+ /** The `simianlights` shader's tunable uniforms; defaults reproduce the stock look. */
19
+ export declare const SIMIANLIGHTS_CONTROLS: readonly UniformControl[];
20
+ //# sourceMappingURL=simianlights.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"simianlights.d.ts","sourceRoot":"","sources":["../../../../catalog/shaders/simianlights/simianlights.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,mCAAmC,CAAC;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEvD,0DAA0D;AAC1D,MAAM,MAAM,oBAAoB,GAAG;IACjC,uEAAuE;IACvE,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC;IACrB,iEAAiE;IACjE,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,6DAA6D;IAC7D,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,kDAAkD;IAClD,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,0DAA0D;IAC1D,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,wDAAwD;IACxD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF,uFAAuF;AACvF,eAAO,MAAM,qBAAqB,EAAE,SAAS,cAAc,EA+C1D,CAAC","sourcesContent":["// Simianlights layer-shader interface: typed uniforms + control descriptor. The\n// calmer sibling of the nebula (fewer starfield layers, larger near-field\n// scale), same opaque BACKGROUND-layer role and same uniform surface. Shader\n// source is ./simianlights.frag.\n\nimport type { RGB } from '../../../src/lib/primitives.types';\nimport type { UniformControl } from '../_shared/types';\n\n/** Typed uniforms for the `simianlights` layer shader. */\nexport type SimianlightsUniforms = {\n /** Overall tint / color grade; [1,1,1] keeps the stock star colors. */\n readonly uColor: RGB;\n /** Final glow multiplier; 1 = stock, higher = brighter field. */\n readonly uBrightness: number;\n /** Drift + rotation rate; 1 = stock, 0 freezes the field. */\n readonly uSpeed: number;\n /** Star color-cycle (twinkle) rate; 1 = stock. */\n readonly uTwinkleSpeed: number;\n /** Starfield zoom / density; >1 = more, smaller stars. */\n readonly uScale: number;\n /** Star-core size; 1 = stock, higher = fatter cores. */\n readonly uStarGlow: number;\n};\n\n/** The `simianlights` shader's tunable uniforms; defaults reproduce the stock look. */\nexport const SIMIANLIGHTS_CONTROLS: readonly UniformControl[] = [\n { name: 'uColor', kind: 'color', default: [1, 1, 1], doc: 'Overall tint / color grade.' },\n {\n name: 'uBrightness',\n kind: 'float',\n default: 1,\n min: 0,\n max: 3,\n step: 0.01,\n doc: 'Final glow multiplier.',\n },\n {\n name: 'uSpeed',\n kind: 'float',\n default: 1,\n min: 0,\n max: 3,\n step: 0.01,\n doc: 'Drift + rotation rate; 0 freezes.',\n },\n {\n name: 'uTwinkleSpeed',\n kind: 'float',\n default: 1,\n min: 0,\n max: 3,\n step: 0.01,\n doc: 'Star twinkle rate.',\n },\n {\n name: 'uScale',\n kind: 'float',\n default: 1,\n min: 0.3,\n max: 3,\n step: 0.01,\n doc: 'Zoom / density; >1 = more, smaller stars.',\n },\n {\n name: 'uStarGlow',\n kind: 'float',\n default: 1,\n min: 0.2,\n max: 3,\n step: 0.01,\n doc: 'Star-core size.',\n },\n];\n"]}
@@ -0,0 +1,3 @@
1
+ import { type KaleidoscopeControls } from '../../../src/components/preset-control-panel';
2
+ export declare function SimianlightsForm({ uniforms, onPatch, disabled }: KaleidoscopeControls): import("react/jsx-runtime").JSX.Element;
3
+ //# sourceMappingURL=simianlights.form.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"simianlights.form.d.ts","sourceRoot":"","sources":["../../../../catalog/shaders/simianlights/simianlights.form.tsx"],"names":[],"mappings":"AAMA,OAAO,EAIL,KAAK,oBAAoB,EAC1B,MAAM,8CAA8C,CAAC;AAGtD,wBAAgB,gBAAgB,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,oBAAoB,2CAmBrF","sourcesContent":["// Simianlights' editor form: the shader OWNS its control layout. This pass just\n// stacks one <Control uniform=\"…\"/> per uniform in declared order (the auto-form's\n// shape); the point is that this file exists per shader, so layout/grouping is a\n// local edit here, and a new primitive flows in through <Control> without touching\n// it. Conventional layer id: \"field\".\n\nimport {\n Control,\n ControlForm,\n ControlSection,\n type KaleidoscopeControls,\n} from '../../../src/components/preset-control-panel';\nimport { SIMIANLIGHTS_CONTROLS } from './simianlights';\n\nexport function SimianlightsForm({ uniforms, onPatch, disabled }: KaleidoscopeControls) {\n return (\n <ControlForm\n id=\"field\"\n uniforms={uniforms.field ?? {}}\n onPatch={onPatch}\n disabled={disabled}\n controls={SIMIANLIGHTS_CONTROLS}\n >\n <ControlSection title=\"simianlights\">\n <Control uniform=\"uColor\" />\n <Control uniform=\"uBrightness\" />\n <Control uniform=\"uSpeed\" />\n <Control uniform=\"uTwinkleSpeed\" />\n <Control uniform=\"uScale\" />\n <Control uniform=\"uStarGlow\" />\n </ControlSection>\n </ControlForm>\n );\n}\n"]}
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SimianlightsForm = SimianlightsForm;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ // Simianlights' editor form: the shader OWNS its control layout. This pass just
6
+ // stacks one <Control uniform="…"/> per uniform in declared order (the auto-form's
7
+ // shape); the point is that this file exists per shader, so layout/grouping is a
8
+ // local edit here, and a new primitive flows in through <Control> without touching
9
+ // it. Conventional layer id: "field".
10
+ const preset_control_panel_1 = require("../../../src/components/preset-control-panel");
11
+ const simianlights_1 = require("./simianlights");
12
+ function SimianlightsForm({ uniforms, onPatch, disabled }) {
13
+ return ((0, jsx_runtime_1.jsx)(preset_control_panel_1.ControlForm, { id: "field", uniforms: uniforms.field ?? {}, onPatch: onPatch, disabled: disabled, controls: simianlights_1.SIMIANLIGHTS_CONTROLS, children: (0, jsx_runtime_1.jsxs)(preset_control_panel_1.ControlSection, { title: "simianlights", children: [(0, jsx_runtime_1.jsx)(preset_control_panel_1.Control, { uniform: "uColor" }), (0, jsx_runtime_1.jsx)(preset_control_panel_1.Control, { uniform: "uBrightness" }), (0, jsx_runtime_1.jsx)(preset_control_panel_1.Control, { uniform: "uSpeed" }), (0, jsx_runtime_1.jsx)(preset_control_panel_1.Control, { uniform: "uTwinkleSpeed" }), (0, jsx_runtime_1.jsx)(preset_control_panel_1.Control, { uniform: "uScale" }), (0, jsx_runtime_1.jsx)(preset_control_panel_1.Control, { uniform: "uStarGlow" })] }) }));
14
+ }
15
+ //# sourceMappingURL=simianlights.form.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"simianlights.form.js","sourceRoot":"","sources":["../../../../catalog/shaders/simianlights/simianlights.form.tsx"],"names":[],"mappings":";;;;AAAA,gFAAgF;AAChF,mFAAmF;AACnF,iFAAiF;AACjF,mFAAmF;AACnF,sCAAsC;AAEtC,uFAKsD;AACtD,iDAAuD;AAEvD,0BAAiC,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAwB;IACpF,OAAO,CACL,uBAAC,kCAAW,IACV,EAAE,EAAC,OAAO,EACV,QAAQ,EAAE,QAAQ,CAAC,KAAK,IAAI,EAAE,EAC9B,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,oCAAqB,YAE/B,wBAAC,qCAAc,IAAC,KAAK,EAAC,cAAc,aAClC,uBAAC,8BAAO,IAAC,OAAO,EAAC,QAAQ,GAAG,EAC5B,uBAAC,8BAAO,IAAC,OAAO,EAAC,aAAa,GAAG,EACjC,uBAAC,8BAAO,IAAC,OAAO,EAAC,QAAQ,GAAG,EAC5B,uBAAC,8BAAO,IAAC,OAAO,EAAC,eAAe,GAAG,EACnC,uBAAC,8BAAO,IAAC,OAAO,EAAC,QAAQ,GAAG,EAC5B,uBAAC,8BAAO,IAAC,OAAO,EAAC,WAAW,GAAG,IAChB,GACL,CACf,CAAC;AACJ,CAAC","sourcesContent":["// Simianlights' editor form: the shader OWNS its control layout. This pass just\n// stacks one <Control uniform=\"…\"/> per uniform in declared order (the auto-form's\n// shape); the point is that this file exists per shader, so layout/grouping is a\n// local edit here, and a new primitive flows in through <Control> without touching\n// it. Conventional layer id: \"field\".\n\nimport {\n Control,\n ControlForm,\n ControlSection,\n type KaleidoscopeControls,\n} from '../../../src/components/preset-control-panel';\nimport { SIMIANLIGHTS_CONTROLS } from './simianlights';\n\nexport function SimianlightsForm({ uniforms, onPatch, disabled }: KaleidoscopeControls) {\n return (\n <ControlForm\n id=\"field\"\n uniforms={uniforms.field ?? {}}\n onPatch={onPatch}\n disabled={disabled}\n controls={SIMIANLIGHTS_CONTROLS}\n >\n <ControlSection title=\"simianlights\">\n <Control uniform=\"uColor\" />\n <Control uniform=\"uBrightness\" />\n <Control uniform=\"uSpeed\" />\n <Control uniform=\"uTwinkleSpeed\" />\n <Control uniform=\"uScale\" />\n <Control uniform=\"uStarGlow\" />\n </ControlSection>\n </ControlForm>\n );\n}\n"]}
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ // Simianlights layer-shader interface: typed uniforms + control descriptor. The
3
+ // calmer sibling of the nebula (fewer starfield layers, larger near-field
4
+ // scale), same opaque BACKGROUND-layer role and same uniform surface. Shader
5
+ // source is ./simianlights.frag.
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.SIMIANLIGHTS_CONTROLS = void 0;
8
+ /** The `simianlights` shader's tunable uniforms; defaults reproduce the stock look. */
9
+ exports.SIMIANLIGHTS_CONTROLS = [
10
+ { name: 'uColor', kind: 'color', default: [1, 1, 1], doc: 'Overall tint / color grade.' },
11
+ {
12
+ name: 'uBrightness',
13
+ kind: 'float',
14
+ default: 1,
15
+ min: 0,
16
+ max: 3,
17
+ step: 0.01,
18
+ doc: 'Final glow multiplier.',
19
+ },
20
+ {
21
+ name: 'uSpeed',
22
+ kind: 'float',
23
+ default: 1,
24
+ min: 0,
25
+ max: 3,
26
+ step: 0.01,
27
+ doc: 'Drift + rotation rate; 0 freezes.',
28
+ },
29
+ {
30
+ name: 'uTwinkleSpeed',
31
+ kind: 'float',
32
+ default: 1,
33
+ min: 0,
34
+ max: 3,
35
+ step: 0.01,
36
+ doc: 'Star twinkle rate.',
37
+ },
38
+ {
39
+ name: 'uScale',
40
+ kind: 'float',
41
+ default: 1,
42
+ min: 0.3,
43
+ max: 3,
44
+ step: 0.01,
45
+ doc: 'Zoom / density; >1 = more, smaller stars.',
46
+ },
47
+ {
48
+ name: 'uStarGlow',
49
+ kind: 'float',
50
+ default: 1,
51
+ min: 0.2,
52
+ max: 3,
53
+ step: 0.01,
54
+ doc: 'Star-core size.',
55
+ },
56
+ ];
57
+ //# sourceMappingURL=simianlights.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"simianlights.js","sourceRoot":"","sources":["../../../../catalog/shaders/simianlights/simianlights.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,0EAA0E;AAC1E,6EAA6E;AAC7E,iCAAiC;;;AAqBjC,uFAAuF;AAC1E,QAAA,qBAAqB,GAA8B;IAC9D,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,6BAA6B,EAAE;IACzF;QACE,IAAI,EAAE,aAAa;QACnB,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,CAAC;QACV,GAAG,EAAE,CAAC;QACN,GAAG,EAAE,CAAC;QACN,IAAI,EAAE,IAAI;QACV,GAAG,EAAE,wBAAwB;KAC9B;IACD;QACE,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,CAAC;QACV,GAAG,EAAE,CAAC;QACN,GAAG,EAAE,CAAC;QACN,IAAI,EAAE,IAAI;QACV,GAAG,EAAE,mCAAmC;KACzC;IACD;QACE,IAAI,EAAE,eAAe;QACrB,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,CAAC;QACV,GAAG,EAAE,CAAC;QACN,GAAG,EAAE,CAAC;QACN,IAAI,EAAE,IAAI;QACV,GAAG,EAAE,oBAAoB;KAC1B;IACD;QACE,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,CAAC;QACV,GAAG,EAAE,GAAG;QACR,GAAG,EAAE,CAAC;QACN,IAAI,EAAE,IAAI;QACV,GAAG,EAAE,2CAA2C;KACjD;IACD;QACE,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,CAAC;QACV,GAAG,EAAE,GAAG;QACR,GAAG,EAAE,CAAC;QACN,IAAI,EAAE,IAAI;QACV,GAAG,EAAE,iBAAiB;KACvB;CACF,CAAC","sourcesContent":["// Simianlights layer-shader interface: typed uniforms + control descriptor. The\n// calmer sibling of the nebula (fewer starfield layers, larger near-field\n// scale), same opaque BACKGROUND-layer role and same uniform surface. Shader\n// source is ./simianlights.frag.\n\nimport type { RGB } from '../../../src/lib/primitives.types';\nimport type { UniformControl } from '../_shared/types';\n\n/** Typed uniforms for the `simianlights` layer shader. */\nexport type SimianlightsUniforms = {\n /** Overall tint / color grade; [1,1,1] keeps the stock star colors. */\n readonly uColor: RGB;\n /** Final glow multiplier; 1 = stock, higher = brighter field. */\n readonly uBrightness: number;\n /** Drift + rotation rate; 1 = stock, 0 freezes the field. */\n readonly uSpeed: number;\n /** Star color-cycle (twinkle) rate; 1 = stock. */\n readonly uTwinkleSpeed: number;\n /** Starfield zoom / density; >1 = more, smaller stars. */\n readonly uScale: number;\n /** Star-core size; 1 = stock, higher = fatter cores. */\n readonly uStarGlow: number;\n};\n\n/** The `simianlights` shader's tunable uniforms; defaults reproduce the stock look. */\nexport const SIMIANLIGHTS_CONTROLS: readonly UniformControl[] = [\n { name: 'uColor', kind: 'color', default: [1, 1, 1], doc: 'Overall tint / color grade.' },\n {\n name: 'uBrightness',\n kind: 'float',\n default: 1,\n min: 0,\n max: 3,\n step: 0.01,\n doc: 'Final glow multiplier.',\n },\n {\n name: 'uSpeed',\n kind: 'float',\n default: 1,\n min: 0,\n max: 3,\n step: 0.01,\n doc: 'Drift + rotation rate; 0 freezes.',\n },\n {\n name: 'uTwinkleSpeed',\n kind: 'float',\n default: 1,\n min: 0,\n max: 3,\n step: 0.01,\n doc: 'Star twinkle rate.',\n },\n {\n name: 'uScale',\n kind: 'float',\n default: 1,\n min: 0.3,\n max: 3,\n step: 0.01,\n doc: 'Zoom / density; >1 = more, smaller stars.',\n },\n {\n name: 'uStarGlow',\n kind: 'float',\n default: 1,\n min: 0.2,\n max: 3,\n step: 0.01,\n doc: 'Star-core size.',\n },\n];\n"]}
@@ -0,0 +1,37 @@
1
+ import type { ReactNode } from 'react';
2
+ import type { UniformControl } from '../../../catalog/shaders';
3
+ /** One field's value: a scalar uniform or a vecN (e.g. an RGB triple). */
4
+ export type FieldValue = number | readonly number[];
5
+ type FormValues = Readonly<Record<string, FieldValue>>;
6
+ /** The live form state a field reads/writes via `useField`. */
7
+ export type ControlFormContextValue = {
8
+ readonly values: FormValues;
9
+ readonly setField: (key: string, value: FieldValue) => void;
10
+ readonly disabled: boolean;
11
+ /** The form's test-id scope (`kld.<preset>.<layer>`); fields append their uniform. */
12
+ readonly path: string;
13
+ /** The control descriptors, so `<Control uniform>` can resolve one by name. */
14
+ readonly controls?: readonly UniformControl[];
15
+ };
16
+ export declare const ControlFormContext: import("react").Context<ControlFormContextValue | null>;
17
+ export type ControlFormProps = {
18
+ /** The layer id this form patches; the discriminator in the emitted patch. */
19
+ readonly id: string;
20
+ /** The layer's baked uniforms; the form seeds from these at mount. */
21
+ readonly uniforms: FormValues;
22
+ /** Emitted (debounced) with the layer id and the current edited uniforms. */
23
+ readonly onPatch: (patch: {
24
+ id: string;
25
+ uniforms: Record<string, FieldValue>;
26
+ }) => void;
27
+ /** Disables every field in the form (read by `useField`). */
28
+ readonly disabled?: boolean;
29
+ /** Trailing-edge debounce for the emit, in ms. 0 (default) emits per change. */
30
+ readonly debounceMs?: number;
31
+ /** The shader's control descriptors; lets children use `<Control uniform>`. */
32
+ readonly controls?: readonly UniformControl[];
33
+ readonly children: ReactNode;
34
+ };
35
+ export declare function ControlForm({ id, uniforms, onPatch, disabled, debounceMs, controls, children, }: ControlFormProps): import("react/jsx-runtime").JSX.Element;
36
+ export {};
37
+ //# sourceMappingURL=control-form.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"control-form.d.ts","sourceRoot":"","sources":["../../../../src/components/form/control-form.tsx"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAI/D,0EAA0E;AAC1E,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,SAAS,MAAM,EAAE,CAAC;AAEpD,KAAK,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC;AAEvD,+DAA+D;AAC/D,MAAM,MAAM,uBAAuB,GAAG;IACpC,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;IAC5D,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,sFAAsF;IACtF,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,+EAA+E;IAC/E,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,cAAc,EAAE,CAAC;CAC/C,CAAC;AAEF,eAAO,MAAM,kBAAkB,yDAAsD,CAAC;AAQtF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,8EAA8E;IAC9E,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,sEAAsE;IACtE,QAAQ,CAAC,QAAQ,EAAE,UAAU,CAAC;IAC9B,6EAA6E;IAC7E,QAAQ,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;KAAE,KAAK,IAAI,CAAC;IACxF,6DAA6D;IAC7D,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,gFAAgF;IAChF,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,+EAA+E;IAC/E,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,cAAc,EAAE,CAAC;IAC9C,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC;CAC9B,CAAC;AAEF,wBAAgB,WAAW,CAAC,EAC1B,EAAE,EACF,QAAQ,EACR,OAAO,EACP,QAAgB,EAChB,UAAc,EACd,QAAQ,EACR,QAAQ,GACT,EAAE,gBAAgB,2CA+ClB","sourcesContent":["// ControlForm: the per-layer micro-provider that owns one form's view model.\n//\n// It holds the synchronous local values fields read (so a slider tracks the drag\n// without a host round-trip) and emits the debounced, trailing-flushed\n// `onPatch({ id, uniforms })` the host routes into `kaleidoscope(activeId, [...])`.\n//\n// Reset is by REMOUNT, never by effect: the Tuner renders the active controls\n// component keyed by preset id, so a preset switch unmounts this and a fresh\n// ControlForm re-seeds from `uniforms`. There is no effect syncing state to props.\n\nimport type { ReactNode } from 'react';\nimport { createContext, useContext, useEffect, useReducer, useRef } from 'react';\nimport type { UniformControl } from '../../../catalog/shaders';\nimport { controlScope } from '../../lib/test-id';\nimport { ControlScopeContext } from './scope';\n\n/** One field's value: a scalar uniform or a vecN (e.g. an RGB triple). */\nexport type FieldValue = number | readonly number[];\n\ntype FormValues = Readonly<Record<string, FieldValue>>;\n\n/** The live form state a field reads/writes via `useField`. */\nexport type ControlFormContextValue = {\n readonly values: FormValues;\n readonly setField: (key: string, value: FieldValue) => void;\n readonly disabled: boolean;\n /** The form's test-id scope (`kld.<preset>.<layer>`); fields append their uniform. */\n readonly path: string;\n /** The control descriptors, so `<Control uniform>` can resolve one by name. */\n readonly controls?: readonly UniformControl[];\n};\n\nexport const ControlFormContext = createContext<ControlFormContextValue | null>(null);\n\ntype Action = { readonly key: string; readonly value: FieldValue };\n\nfunction reducer(state: FormValues, action: Action): FormValues {\n return { ...state, [action.key]: action.value };\n}\n\nexport type ControlFormProps = {\n /** The layer id this form patches; the discriminator in the emitted patch. */\n readonly id: string;\n /** The layer's baked uniforms; the form seeds from these at mount. */\n readonly uniforms: FormValues;\n /** Emitted (debounced) with the layer id and the current edited uniforms. */\n readonly onPatch: (patch: { id: string; uniforms: Record<string, FieldValue> }) => void;\n /** Disables every field in the form (read by `useField`). */\n readonly disabled?: boolean;\n /** Trailing-edge debounce for the emit, in ms. 0 (default) emits per change. */\n readonly debounceMs?: number;\n /** The shader's control descriptors; lets children use `<Control uniform>`. */\n readonly controls?: readonly UniformControl[];\n readonly children: ReactNode;\n};\n\nexport function ControlForm({\n id,\n uniforms,\n onPatch,\n disabled = false,\n debounceMs = 0,\n controls,\n children,\n}: ControlFormProps) {\n const [values, dispatch] = useReducer(reducer, uniforms);\n\n // Latest onPatch in a ref so the emit effect doesn't re-arm when the parent\n // passes a fresh callback each render.\n const onPatchRef = useRef(onPatch);\n onPatchRef.current = onPatch;\n\n // The latest not-yet-emitted edit, held so it can be flushed on unmount (a\n // preset switch remounts this form mid-debounce; the trailing value must not be\n // lost). Cleared when it fires.\n const pending = useRef<(() => void) | null>(null);\n\n // Skip the emit for the initial seed; only edits should patch.\n const seeded = useRef(false);\n useEffect(() => {\n if (!seeded.current) {\n seeded.current = true;\n return;\n }\n const fire = () => {\n pending.current = null;\n onPatchRef.current({ id, uniforms: { ...values } });\n };\n if (debounceMs <= 0) {\n fire();\n return;\n }\n pending.current = fire;\n const t = setTimeout(fire, debounceMs);\n return () => clearTimeout(t);\n }, [values, id, debounceMs]);\n\n // Flush a pending debounced edit on unmount so the trailing value survives a\n // remount/preset switch.\n useEffect(() => () => pending.current?.(), []);\n\n const presetId = useContext(ControlScopeContext);\n const ctx: ControlFormContextValue = {\n values,\n setField: (key, value) => dispatch({ key, value }),\n disabled,\n path: controlScope(presetId, id),\n controls,\n };\n\n return <ControlFormContext.Provider value={ctx}>{children}</ControlFormContext.Provider>;\n}\n"]}
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ControlFormContext = void 0;
4
+ exports.ControlForm = ControlForm;
5
+ const jsx_runtime_1 = require("react/jsx-runtime");
6
+ const react_1 = require("react");
7
+ const test_id_1 = require("../../lib/test-id");
8
+ const scope_1 = require("./scope");
9
+ exports.ControlFormContext = (0, react_1.createContext)(null);
10
+ function reducer(state, action) {
11
+ return { ...state, [action.key]: action.value };
12
+ }
13
+ function ControlForm({ id, uniforms, onPatch, disabled = false, debounceMs = 0, controls, children, }) {
14
+ const [values, dispatch] = (0, react_1.useReducer)(reducer, uniforms);
15
+ // Latest onPatch in a ref so the emit effect doesn't re-arm when the parent
16
+ // passes a fresh callback each render.
17
+ const onPatchRef = (0, react_1.useRef)(onPatch);
18
+ onPatchRef.current = onPatch;
19
+ // The latest not-yet-emitted edit, held so it can be flushed on unmount (a
20
+ // preset switch remounts this form mid-debounce; the trailing value must not be
21
+ // lost). Cleared when it fires.
22
+ const pending = (0, react_1.useRef)(null);
23
+ // Skip the emit for the initial seed; only edits should patch.
24
+ const seeded = (0, react_1.useRef)(false);
25
+ (0, react_1.useEffect)(() => {
26
+ if (!seeded.current) {
27
+ seeded.current = true;
28
+ return;
29
+ }
30
+ const fire = () => {
31
+ pending.current = null;
32
+ onPatchRef.current({ id, uniforms: { ...values } });
33
+ };
34
+ if (debounceMs <= 0) {
35
+ fire();
36
+ return;
37
+ }
38
+ pending.current = fire;
39
+ const t = setTimeout(fire, debounceMs);
40
+ return () => clearTimeout(t);
41
+ }, [values, id, debounceMs]);
42
+ // Flush a pending debounced edit on unmount so the trailing value survives a
43
+ // remount/preset switch.
44
+ (0, react_1.useEffect)(() => () => pending.current?.(), []);
45
+ const presetId = (0, react_1.useContext)(scope_1.ControlScopeContext);
46
+ const ctx = {
47
+ values,
48
+ setField: (key, value) => dispatch({ key, value }),
49
+ disabled,
50
+ path: (0, test_id_1.controlScope)(presetId, id),
51
+ controls,
52
+ };
53
+ return (0, jsx_runtime_1.jsx)(exports.ControlFormContext.Provider, { value: ctx, children: children });
54
+ }
55
+ //# sourceMappingURL=control-form.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"control-form.js","sourceRoot":"","sources":["../../../../src/components/form/control-form.tsx"],"names":[],"mappings":";;;;;AAWA,iCAAiF;AAEjF,+CAAiD;AACjD,mCAA8C;AAkBjC,QAAA,kBAAkB,GAAG,IAAA,qBAAa,EAAiC,IAAI,CAAC,CAAC;AAItF,SAAS,OAAO,CAAC,KAAiB,EAAE,MAAc;IAChD,OAAO,EAAE,GAAG,KAAK,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC;AAClD,CAAC;AAkBD,qBAA4B,EAC1B,EAAE,EACF,QAAQ,EACR,OAAO,EACP,QAAQ,GAAG,KAAK,EAChB,UAAU,GAAG,CAAC,EACd,QAAQ,EACR,QAAQ,GACS;IACjB,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,IAAA,kBAAU,EAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAEzD,4EAA4E;IAC5E,uCAAuC;IACvC,MAAM,UAAU,GAAG,IAAA,cAAM,EAAC,OAAO,CAAC,CAAC;IACnC,UAAU,CAAC,OAAO,GAAG,OAAO,CAAC;IAE7B,2EAA2E;IAC3E,gFAAgF;IAChF,gCAAgC;IAChC,MAAM,OAAO,GAAG,IAAA,cAAM,EAAsB,IAAI,CAAC,CAAC;IAElD,+DAA+D;IAC/D,MAAM,MAAM,GAAG,IAAA,cAAM,EAAC,KAAK,CAAC,CAAC;IAC7B,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;YACtB,OAAO;QACT,CAAC;QACD,MAAM,IAAI,GAAG,GAAG,EAAE;YAChB,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;YACvB,UAAU,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,GAAG,MAAM,EAAE,EAAE,CAAC,CAAC;QACtD,CAAC,CAAC;QACF,IAAI,UAAU,IAAI,CAAC,EAAE,CAAC;YACpB,IAAI,EAAE,CAAC;YACP,OAAO;QACT,CAAC;QACD,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;QACvB,MAAM,CAAC,GAAG,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QACvC,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAC/B,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,EAAE,UAAU,CAAC,CAAC,CAAC;IAE7B,6EAA6E;IAC7E,yBAAyB;IACzB,IAAA,iBAAS,EAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAE/C,MAAM,QAAQ,GAAG,IAAA,kBAAU,EAAC,2BAAmB,CAAC,CAAC;IACjD,MAAM,GAAG,GAA4B;QACnC,MAAM;QACN,QAAQ,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;QAClD,QAAQ;QACR,IAAI,EAAE,IAAA,sBAAY,EAAC,QAAQ,EAAE,EAAE,CAAC;QAChC,QAAQ;KACT,CAAC;IAEF,OAAO,uBAAC,QAAA,kBAAkB,CAAC,QAAQ,IAAC,KAAK,EAAE,GAAG,YAAG,QAAQ,GAA+B,CAAC;AAC3F,CAAC","sourcesContent":["// ControlForm: the per-layer micro-provider that owns one form's view model.\n//\n// It holds the synchronous local values fields read (so a slider tracks the drag\n// without a host round-trip) and emits the debounced, trailing-flushed\n// `onPatch({ id, uniforms })` the host routes into `kaleidoscope(activeId, [...])`.\n//\n// Reset is by REMOUNT, never by effect: the Tuner renders the active controls\n// component keyed by preset id, so a preset switch unmounts this and a fresh\n// ControlForm re-seeds from `uniforms`. There is no effect syncing state to props.\n\nimport type { ReactNode } from 'react';\nimport { createContext, useContext, useEffect, useReducer, useRef } from 'react';\nimport type { UniformControl } from '../../../catalog/shaders';\nimport { controlScope } from '../../lib/test-id';\nimport { ControlScopeContext } from './scope';\n\n/** One field's value: a scalar uniform or a vecN (e.g. an RGB triple). */\nexport type FieldValue = number | readonly number[];\n\ntype FormValues = Readonly<Record<string, FieldValue>>;\n\n/** The live form state a field reads/writes via `useField`. */\nexport type ControlFormContextValue = {\n readonly values: FormValues;\n readonly setField: (key: string, value: FieldValue) => void;\n readonly disabled: boolean;\n /** The form's test-id scope (`kld.<preset>.<layer>`); fields append their uniform. */\n readonly path: string;\n /** The control descriptors, so `<Control uniform>` can resolve one by name. */\n readonly controls?: readonly UniformControl[];\n};\n\nexport const ControlFormContext = createContext<ControlFormContextValue | null>(null);\n\ntype Action = { readonly key: string; readonly value: FieldValue };\n\nfunction reducer(state: FormValues, action: Action): FormValues {\n return { ...state, [action.key]: action.value };\n}\n\nexport type ControlFormProps = {\n /** The layer id this form patches; the discriminator in the emitted patch. */\n readonly id: string;\n /** The layer's baked uniforms; the form seeds from these at mount. */\n readonly uniforms: FormValues;\n /** Emitted (debounced) with the layer id and the current edited uniforms. */\n readonly onPatch: (patch: { id: string; uniforms: Record<string, FieldValue> }) => void;\n /** Disables every field in the form (read by `useField`). */\n readonly disabled?: boolean;\n /** Trailing-edge debounce for the emit, in ms. 0 (default) emits per change. */\n readonly debounceMs?: number;\n /** The shader's control descriptors; lets children use `<Control uniform>`. */\n readonly controls?: readonly UniformControl[];\n readonly children: ReactNode;\n};\n\nexport function ControlForm({\n id,\n uniforms,\n onPatch,\n disabled = false,\n debounceMs = 0,\n controls,\n children,\n}: ControlFormProps) {\n const [values, dispatch] = useReducer(reducer, uniforms);\n\n // Latest onPatch in a ref so the emit effect doesn't re-arm when the parent\n // passes a fresh callback each render.\n const onPatchRef = useRef(onPatch);\n onPatchRef.current = onPatch;\n\n // The latest not-yet-emitted edit, held so it can be flushed on unmount (a\n // preset switch remounts this form mid-debounce; the trailing value must not be\n // lost). Cleared when it fires.\n const pending = useRef<(() => void) | null>(null);\n\n // Skip the emit for the initial seed; only edits should patch.\n const seeded = useRef(false);\n useEffect(() => {\n if (!seeded.current) {\n seeded.current = true;\n return;\n }\n const fire = () => {\n pending.current = null;\n onPatchRef.current({ id, uniforms: { ...values } });\n };\n if (debounceMs <= 0) {\n fire();\n return;\n }\n pending.current = fire;\n const t = setTimeout(fire, debounceMs);\n return () => clearTimeout(t);\n }, [values, id, debounceMs]);\n\n // Flush a pending debounced edit on unmount so the trailing value survives a\n // remount/preset switch.\n useEffect(() => () => pending.current?.(), []);\n\n const presetId = useContext(ControlScopeContext);\n const ctx: ControlFormContextValue = {\n values,\n setField: (key, value) => dispatch({ key, value }),\n disabled,\n path: controlScope(presetId, id),\n controls,\n };\n\n return <ControlFormContext.Provider value={ctx}>{children}</ControlFormContext.Provider>;\n}\n"]}
@@ -0,0 +1,22 @@
1
+ import type { ReactElement } from 'react';
2
+ import type { RGB } from '../../lib/primitives.types';
3
+ import { type ColorPickerProps } from '../ui/color-picker';
4
+ import { type SliderProps } from '../ui/slider';
5
+ type NumericKeys<U> = {
6
+ [K in keyof U]: U[K] extends number ? K : never;
7
+ }[keyof U];
8
+ type RgbKeys<U> = {
9
+ [K in keyof U]: U[K] extends RGB ? K : never;
10
+ }[keyof U];
11
+ type TypedSlider<U> = (props: Omit<SliderProps, 'uniform'> & {
12
+ readonly uniform: NumericKeys<U> & string;
13
+ }) => ReactElement;
14
+ type TypedColorPicker<U> = (props: Omit<ColorPickerProps, 'uniform'> & {
15
+ readonly uniform: RgbKeys<U> & string;
16
+ }) => ReactElement;
17
+ export declare function makeControls<U>(): {
18
+ readonly Slider: TypedSlider<U>;
19
+ readonly ColorPicker: TypedColorPicker<U>;
20
+ };
21
+ export {};
22
+ //# sourceMappingURL=make-controls.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"make-controls.d.ts","sourceRoot":"","sources":["../../../../src/components/form/make-controls.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAC1C,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,4BAA4B,CAAC;AACtD,OAAO,EAAe,KAAK,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACxE,OAAO,EAAU,KAAK,WAAW,EAAE,MAAM,cAAc,CAAC;AAExD,KAAK,WAAW,CAAC,CAAC,IAAI;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,MAAM,GAAG,CAAC,GAAG,KAAK;CAAE,CAAC,MAAM,CAAC,CAAC,CAAC;AACnF,KAAK,OAAO,CAAC,CAAC,IAAI;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,GAAG,CAAC,GAAG,KAAK;CAAE,CAAC,MAAM,CAAC,CAAC,CAAC;AAE5E,KAAK,WAAW,CAAC,CAAC,IAAI,CACpB,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,GAAG;IAAE,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,MAAM,CAAA;CAAE,KAChF,YAAY,CAAC;AAElB,KAAK,gBAAgB,CAAC,CAAC,IAAI,CACzB,KAAK,EAAE,IAAI,CAAC,gBAAgB,EAAE,SAAS,CAAC,GAAG;IAAE,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,MAAM,CAAA;CAAE,KACjF,YAAY,CAAC;AAElB,wBAAgB,YAAY,CAAC,CAAC,KAAK;IACjC,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;IAChC,QAAQ,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC;CAC3C,CAKA","sourcesContent":["// makeControls<U>(): the typed-factory escape from React context invariance.\n// Returns the field primitives with their `uniform` prop narrowed to the keys of\n// the shader's uniform type whose value matches the widget (numeric keys for the\n// Slider, RGB-tuple keys for the ColorPicker). A shader fragment authors\n// `const { Slider, ColorPicker } = makeControls<CloudsUniforms>()`, after which a\n// typo'd or wrong-typed `uniform` is a compile error. The components still\n// self-wire through the nearest ControlForm at runtime.\n\nimport type { ReactElement } from 'react';\nimport type { RGB } from '../../lib/primitives.types';\nimport { ColorPicker, type ColorPickerProps } from '../ui/color-picker';\nimport { Slider, type SliderProps } from '../ui/slider';\n\ntype NumericKeys<U> = { [K in keyof U]: U[K] extends number ? K : never }[keyof U];\ntype RgbKeys<U> = { [K in keyof U]: U[K] extends RGB ? K : never }[keyof U];\n\ntype TypedSlider<U> = (\n props: Omit<SliderProps, 'uniform'> & { readonly uniform: NumericKeys<U> & string },\n) => ReactElement;\n\ntype TypedColorPicker<U> = (\n props: Omit<ColorPickerProps, 'uniform'> & { readonly uniform: RgbKeys<U> & string },\n) => ReactElement;\n\nexport function makeControls<U>(): {\n readonly Slider: TypedSlider<U>;\n readonly ColorPicker: TypedColorPicker<U>;\n} {\n return {\n Slider: Slider as TypedSlider<U>,\n ColorPicker: ColorPicker as TypedColorPicker<U>,\n };\n}\n"]}
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ // makeControls<U>(): the typed-factory escape from React context invariance.
3
+ // Returns the field primitives with their `uniform` prop narrowed to the keys of
4
+ // the shader's uniform type whose value matches the widget (numeric keys for the
5
+ // Slider, RGB-tuple keys for the ColorPicker). A shader fragment authors
6
+ // `const { Slider, ColorPicker } = makeControls<CloudsUniforms>()`, after which a
7
+ // typo'd or wrong-typed `uniform` is a compile error. The components still
8
+ // self-wire through the nearest ControlForm at runtime.
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.makeControls = makeControls;
11
+ const color_picker_1 = require("../ui/color-picker");
12
+ const slider_1 = require("../ui/slider");
13
+ function makeControls() {
14
+ return {
15
+ Slider: slider_1.Slider,
16
+ ColorPicker: color_picker_1.ColorPicker,
17
+ };
18
+ }
19
+ //# sourceMappingURL=make-controls.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"make-controls.js","sourceRoot":"","sources":["../../../../src/components/form/make-controls.ts"],"names":[],"mappings":";AAAA,6EAA6E;AAC7E,iFAAiF;AACjF,iFAAiF;AACjF,yEAAyE;AACzE,kFAAkF;AAClF,2EAA2E;AAC3E,wDAAwD;;;AAIxD,qDAAwE;AACxE,yCAAwD;AAaxD;IAIE,OAAO;QACL,MAAM,EAAE,eAAwB;QAChC,WAAW,EAAE,0BAAkC;KAChD,CAAC;AACJ,CAAC","sourcesContent":["// makeControls<U>(): the typed-factory escape from React context invariance.\n// Returns the field primitives with their `uniform` prop narrowed to the keys of\n// the shader's uniform type whose value matches the widget (numeric keys for the\n// Slider, RGB-tuple keys for the ColorPicker). A shader fragment authors\n// `const { Slider, ColorPicker } = makeControls<CloudsUniforms>()`, after which a\n// typo'd or wrong-typed `uniform` is a compile error. The components still\n// self-wire through the nearest ControlForm at runtime.\n\nimport type { ReactElement } from 'react';\nimport type { RGB } from '../../lib/primitives.types';\nimport { ColorPicker, type ColorPickerProps } from '../ui/color-picker';\nimport { Slider, type SliderProps } from '../ui/slider';\n\ntype NumericKeys<U> = { [K in keyof U]: U[K] extends number ? K : never }[keyof U];\ntype RgbKeys<U> = { [K in keyof U]: U[K] extends RGB ? K : never }[keyof U];\n\ntype TypedSlider<U> = (\n props: Omit<SliderProps, 'uniform'> & { readonly uniform: NumericKeys<U> & string },\n) => ReactElement;\n\ntype TypedColorPicker<U> = (\n props: Omit<ColorPickerProps, 'uniform'> & { readonly uniform: RgbKeys<U> & string },\n) => ReactElement;\n\nexport function makeControls<U>(): {\n readonly Slider: TypedSlider<U>;\n readonly ColorPicker: TypedColorPicker<U>;\n} {\n return {\n Slider: Slider as TypedSlider<U>,\n ColorPicker: ColorPicker as TypedColorPicker<U>,\n };\n}\n"]}
@@ -0,0 +1,2 @@
1
+ export declare const ControlScopeContext: import("react").Context<string | null>;
2
+ //# sourceMappingURL=scope.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scope.d.ts","sourceRoot":"","sources":["../../../../src/components/form/scope.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,mBAAmB,wCAAqC,CAAC","sourcesContent":["// ControlScopeContext: the active preset id, provided by PresetControlPanel above\n// the controls component so each ControlForm can compose its test-id scope\n// (`kld.<preset>.<layer>`) without the per-composite forms having to thread it.\n// Null when a ControlForm is rendered standalone (no Tuner); the scope then\n// drops the preset segment.\n\nimport { createContext } from 'react';\n\nexport const ControlScopeContext = createContext<string | null>(null);\n"]}
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ // ControlScopeContext: the active preset id, provided by PresetControlPanel above
3
+ // the controls component so each ControlForm can compose its test-id scope
4
+ // (`kld.<preset>.<layer>`) without the per-composite forms having to thread it.
5
+ // Null when a ControlForm is rendered standalone (no Tuner); the scope then
6
+ // drops the preset segment.
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.ControlScopeContext = void 0;
9
+ const react_1 = require("react");
10
+ exports.ControlScopeContext = (0, react_1.createContext)(null);
11
+ //# sourceMappingURL=scope.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scope.js","sourceRoot":"","sources":["../../../../src/components/form/scope.ts"],"names":[],"mappings":";AAAA,kFAAkF;AAClF,2EAA2E;AAC3E,gFAAgF;AAChF,4EAA4E;AAC5E,4BAA4B;;;AAE5B,iCAAsC;AAEzB,QAAA,mBAAmB,GAAG,IAAA,qBAAa,EAAgB,IAAI,CAAC,CAAC","sourcesContent":["// ControlScopeContext: the active preset id, provided by PresetControlPanel above\n// the controls component so each ControlForm can compose its test-id scope\n// (`kld.<preset>.<layer>`) without the per-composite forms having to thread it.\n// Null when a ControlForm is rendered standalone (no Tuner); the scope then\n// drops the preset segment.\n\nimport { createContext } from 'react';\n\nexport const ControlScopeContext = createContext<string | null>(null);\n"]}
@@ -0,0 +1,10 @@
1
+ import { type FieldValue } from './control-form';
2
+ export type Field = {
3
+ readonly value: FieldValue | undefined;
4
+ readonly onChange: (value: FieldValue) => void;
5
+ readonly disabled: boolean;
6
+ /** Deterministic `accessibilityIdentifier` for this field: `<form path>.<key>`. */
7
+ readonly testID: string;
8
+ };
9
+ export declare function useField(key: string): Field;
10
+ //# sourceMappingURL=use-field.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-field.d.ts","sourceRoot":"","sources":["../../../../src/components/form/use-field.ts"],"names":[],"mappings":"AAUA,OAAO,EAAsB,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAErE,MAAM,MAAM,KAAK,GAAG;IAClB,QAAQ,CAAC,KAAK,EAAE,UAAU,GAAG,SAAS,CAAC;IACvC,QAAQ,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;IAC/C,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,mFAAmF;IACnF,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,KAAK,CAc3C","sourcesContent":["// useField: a control primitive's hook into its ControlForm. Reads the field's\n// current value (synchronously, so display tracks input) and returns an onChange\n// that writes back. Throws without a ControlForm ancestor, which is the contract\n// that keeps shader fragments from being rendered standalone.\n//\n// This is the raw, loosely-typed hook; `makeControls<U>()` wraps it to constrain\n// the key and value types to a shader's uniform type.\n\nimport { useContext } from 'react';\nimport { fieldTestId } from '../../lib/test-id';\nimport { ControlFormContext, type FieldValue } from './control-form';\n\nexport type Field = {\n readonly value: FieldValue | undefined;\n readonly onChange: (value: FieldValue) => void;\n readonly disabled: boolean;\n /** Deterministic `accessibilityIdentifier` for this field: `<form path>.<key>`. */\n readonly testID: string;\n};\n\nexport function useField(key: string): Field {\n const ctx = useContext(ControlFormContext);\n if (ctx === null) {\n throw new Error(\n `useField(\"${key}\") must be rendered inside a <ControlForm>. A shader control ` +\n 'fragment is mounted by its composite form, not standalone.',\n );\n }\n return {\n value: ctx.values[key],\n onChange: (value) => ctx.setField(key, value),\n disabled: ctx.disabled,\n testID: fieldTestId(ctx.path, key),\n };\n}\n"]}
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ // useField: a control primitive's hook into its ControlForm. Reads the field's
3
+ // current value (synchronously, so display tracks input) and returns an onChange
4
+ // that writes back. Throws without a ControlForm ancestor, which is the contract
5
+ // that keeps shader fragments from being rendered standalone.
6
+ //
7
+ // This is the raw, loosely-typed hook; `makeControls<U>()` wraps it to constrain
8
+ // the key and value types to a shader's uniform type.
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.useField = useField;
11
+ const react_1 = require("react");
12
+ const test_id_1 = require("../../lib/test-id");
13
+ const control_form_1 = require("./control-form");
14
+ function useField(key) {
15
+ const ctx = (0, react_1.useContext)(control_form_1.ControlFormContext);
16
+ if (ctx === null) {
17
+ throw new Error(`useField("${key}") must be rendered inside a <ControlForm>. A shader control ` +
18
+ 'fragment is mounted by its composite form, not standalone.');
19
+ }
20
+ return {
21
+ value: ctx.values[key],
22
+ onChange: (value) => ctx.setField(key, value),
23
+ disabled: ctx.disabled,
24
+ testID: (0, test_id_1.fieldTestId)(ctx.path, key),
25
+ };
26
+ }
27
+ //# sourceMappingURL=use-field.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-field.js","sourceRoot":"","sources":["../../../../src/components/form/use-field.ts"],"names":[],"mappings":";AAAA,+EAA+E;AAC/E,iFAAiF;AACjF,iFAAiF;AACjF,8DAA8D;AAC9D,EAAE;AACF,iFAAiF;AACjF,sDAAsD;;;AAEtD,iCAAmC;AACnC,+CAAgD;AAChD,iDAAqE;AAUrE,kBAAyB,GAAW;IAClC,MAAM,GAAG,GAAG,IAAA,kBAAU,EAAC,iCAAkB,CAAC,CAAC;IAC3C,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CACb,aAAa,GAAG,+DAA+D;YAC7E,4DAA4D,CAC/D,CAAC;IACJ,CAAC;IACD,OAAO;QACL,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC;QACtB,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE,KAAK,CAAC;QAC7C,QAAQ,EAAE,GAAG,CAAC,QAAQ;QACtB,MAAM,EAAE,IAAA,qBAAW,EAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC;KACnC,CAAC;AACJ,CAAC","sourcesContent":["// useField: a control primitive's hook into its ControlForm. Reads the field's\n// current value (synchronously, so display tracks input) and returns an onChange\n// that writes back. Throws without a ControlForm ancestor, which is the contract\n// that keeps shader fragments from being rendered standalone.\n//\n// This is the raw, loosely-typed hook; `makeControls<U>()` wraps it to constrain\n// the key and value types to a shader's uniform type.\n\nimport { useContext } from 'react';\nimport { fieldTestId } from '../../lib/test-id';\nimport { ControlFormContext, type FieldValue } from './control-form';\n\nexport type Field = {\n readonly value: FieldValue | undefined;\n readonly onChange: (value: FieldValue) => void;\n readonly disabled: boolean;\n /** Deterministic `accessibilityIdentifier` for this field: `<form path>.<key>`. */\n readonly testID: string;\n};\n\nexport function useField(key: string): Field {\n const ctx = useContext(ControlFormContext);\n if (ctx === null) {\n throw new Error(\n `useField(\"${key}\") must be rendered inside a <ControlForm>. A shader control ` +\n 'fragment is mounted by its composite form, not standalone.',\n );\n }\n return {\n value: ctx.values[key],\n onChange: (value) => ctx.setField(key, value),\n disabled: ctx.disabled,\n testID: fieldTestId(ctx.path, key),\n };\n}\n"]}
@@ -0,0 +1,52 @@
1
+ import type { KaleidoscopePresetBook } from '../../kaleidoscope.preset-book.types';
2
+ import type { Category, Family, PresetBookMenuProps, PresetView } from './preset-book-menu.types';
3
+ /** The grouping usePresetBookMenu returns; named so BYO-layout consumers can type it. */
4
+ export interface PresetBookMenuModel {
5
+ /** Distinct families present in the book, in first-appearance order. */
6
+ readonly families: ReadonlyArray<Family>;
7
+ /** The reconciled active family (survives a changed book; falls back to the first). */
8
+ readonly activeTab: Family | undefined;
9
+ /** Set the active family tab. */
10
+ readonly setActiveTab: (family: Family) => void;
11
+ /**
12
+ * Categories (taxonomy[1]) within the active family, first-appearance order.
13
+ * Empty when the family is flat (every preset is depth-1).
14
+ */
15
+ readonly categories: ReadonlyArray<Category>;
16
+ /** The reconciled active category, or undefined when the family is flat. */
17
+ readonly activeCategory: Category | undefined;
18
+ /** Set the active category. */
19
+ readonly setActiveCategory: (category: Category) => void;
20
+ /**
21
+ * Presets to display: the active family narrowed to the active category, or
22
+ * every preset in the family when it is flat.
23
+ */
24
+ readonly views: ReadonlyArray<PresetView>;
25
+ }
26
+ /**
27
+ * Tabbed, preset-book-driven picker. Controlled selection; emits the chosen id
28
+ * and the host applies it.
29
+ *
30
+ * @example
31
+ * <PresetBookMenu
32
+ * presets={presets}
33
+ * value={art}
34
+ * onSelect={setArt}
35
+ * />
36
+ */
37
+ export declare function PresetBookMenu<P extends KaleidoscopePresetBook>(props: PresetBookMenuProps<P>): import("react/jsx-runtime").JSX.Element | null;
38
+ /**
39
+ * Group a preset book by family and category, and own the active tab and
40
+ * category. The grouping is plain; no hand-rolled memo: React Compiler memoizes
41
+ * it when the library is compiled, and it is cheap to recompute otherwise. The
42
+ * active tab and category are reconciled every render: each survives as long as
43
+ * it is still in the book, else it falls back to the first; so swapping
44
+ * `presets`, or switching to a family that lacks the prior category, can't strand
45
+ * a dead selection.
46
+ */
47
+ export declare function usePresetBookMenu<P extends KaleidoscopePresetBook>(presets: P, labelFor?: (id: keyof P & string) => string): PresetBookMenuModel;
48
+ export { PresetTile } from '../preset-tile';
49
+ export { PresetBookMenuLayout } from './layout';
50
+ export type { Category, Family, PresetBookMenuProps, PresetBookMenuSelection, PresetBookMenuStyleProps, PresetItemState, PresetView, RenderTile, } from './preset-book-menu.types';
51
+ export { PresetGrid } from './preset-grid';
52
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/preset-book-menu/index.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAGnF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAGlG,yFAAyF;AACzF,MAAM,WAAW,mBAAmB;IAClC,wEAAwE;IACxE,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IACzC,uFAAuF;IACvF,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IACvC,iCAAiC;IACjC,QAAQ,CAAC,YAAY,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAChD;;;OAGG;IACH,QAAQ,CAAC,UAAU,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC;IAC7C,4EAA4E;IAC5E,QAAQ,CAAC,cAAc,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC9C,+BAA+B;IAC/B,QAAQ,CAAC,iBAAiB,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,IAAI,CAAC;IACzD;;;OAGG;IACH,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC;CAC3C;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,cAAc,CAAC,CAAC,SAAS,sBAAsB,EAAE,KAAK,EAAE,mBAAmB,CAAC,CAAC,CAAC,kDAqE7F;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,sBAAsB,EAChE,OAAO,EAAE,CAAC,EACV,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,CAAC,GAAG,MAAM,KAAK,MAAM,GAC1C,mBAAmB,CA6DrB;AA6ED,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAG5C,OAAO,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAChD,YAAY,EACV,QAAQ,EACR,MAAM,EACN,mBAAmB,EACnB,uBAAuB,EACvB,wBAAwB,EACxB,eAAe,EACf,UAAU,EACV,UAAU,GACX,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC","sourcesContent":["// The drop-in composite picker (#28): tabs over the consumer's preset families,\n// a left-hand category menu under the tabs, and a uniform tile grid filtered by\n// the active family and category. Controlled selection; emit the chosen id, the\n// host applies it. `usePresetBookMenu` is the orchestration (group the book by\n// family/category, own the active tab and category) and is exported for BYO\n// layouts.\n\nimport { useState } from 'react';\nimport { Pressable, StyleSheet, Text } from 'react-native';\nimport type { KaleidoscopePresetBook } from '../../kaleidoscope.preset-book.types';\nimport { categoryTestId, familyTestId } from '../../lib/test-id';\nimport { PresetBookMenuLayout } from './layout';\nimport type { Category, Family, PresetBookMenuProps, PresetView } from './preset-book-menu.types';\nimport { PresetGrid } from './preset-grid';\n\n/** The grouping usePresetBookMenu returns; named so BYO-layout consumers can type it. */\nexport interface PresetBookMenuModel {\n /** Distinct families present in the book, in first-appearance order. */\n readonly families: ReadonlyArray<Family>;\n /** The reconciled active family (survives a changed book; falls back to the first). */\n readonly activeTab: Family | undefined;\n /** Set the active family tab. */\n readonly setActiveTab: (family: Family) => void;\n /**\n * Categories (taxonomy[1]) within the active family, first-appearance order.\n * Empty when the family is flat (every preset is depth-1).\n */\n readonly categories: ReadonlyArray<Category>;\n /** The reconciled active category, or undefined when the family is flat. */\n readonly activeCategory: Category | undefined;\n /** Set the active category. */\n readonly setActiveCategory: (category: Category) => void;\n /**\n * Presets to display: the active family narrowed to the active category, or\n * every preset in the family when it is flat.\n */\n readonly views: ReadonlyArray<PresetView>;\n}\n\n/**\n * Tabbed, preset-book-driven picker. Controlled selection; emits the chosen id\n * and the host applies it.\n *\n * @example\n * <PresetBookMenu\n * presets={presets}\n * value={art}\n * onSelect={setArt}\n * />\n */\nexport function PresetBookMenu<P extends KaleidoscopePresetBook>(props: PresetBookMenuProps<P>) {\n // `className` (declared on PresetBookMenuProps) is intentionally not destructured: the\n // ./nativewind cssInterop registration consumes it at the JSX boundary and\n // merges the resolved classes into `style` before this body runs.\n const {\n presets,\n value,\n onSelect,\n disabled = false,\n renderTile,\n labelFor,\n tabLabelFor,\n categoryLabelFor,\n style,\n } = props;\n const {\n families,\n activeTab,\n setActiveTab,\n categories,\n activeCategory,\n setActiveCategory,\n views,\n } = usePresetBookMenu(presets, labelFor);\n\n if (!activeTab) return null;\n // The renderers speak string ids (PresetView.id); the public onSelect is\n // narrowed to keyof P. Adapt once here so consumers need no cast (every id\n // came from Object.keys(presets), so it is a real key).\n const handleSelect = (id: string | null) => onSelect(id as (keyof P & string) | null);\n\n return (\n <PresetBookMenuLayout\n style={style}\n tabsZone={families.map((family) => (\n <Tab\n key={family}\n label={tabLabelFor?.(family) ?? titleCase(family)}\n active={family === activeTab}\n disabled={disabled}\n onPress={() => setActiveTab(family)}\n testID={familyTestId(family)}\n />\n ))}\n sidebarZone={\n categories.length > 0\n ? categories.map((category) => (\n <CategoryItem\n key={category}\n label={categoryLabelFor?.(category) ?? category}\n active={category === activeCategory}\n disabled={disabled}\n onPress={() => setActiveCategory(category)}\n testID={categoryTestId(activeTab, category)}\n />\n ))\n : undefined\n }\n bodyZone={\n <PresetGrid\n presets={views}\n value={value}\n onSelect={handleSelect}\n disabled={disabled}\n renderTile={renderTile}\n />\n }\n />\n );\n}\n\n/**\n * Group a preset book by family and category, and own the active tab and\n * category. The grouping is plain; no hand-rolled memo: React Compiler memoizes\n * it when the library is compiled, and it is cheap to recompute otherwise. The\n * active tab and category are reconciled every render: each survives as long as\n * it is still in the book, else it falls back to the first; so swapping\n * `presets`, or switching to a family that lacks the prior category, can't strand\n * a dead selection.\n */\nexport function usePresetBookMenu<P extends KaleidoscopePresetBook>(\n presets: P,\n labelFor?: (id: keyof P & string) => string,\n): PresetBookMenuModel {\n const families: Family[] = [];\n const viewsByFamily = new Map<Family, PresetView[]>();\n const categoriesByFamily = new Map<Family, Category[]>();\n const viewsByFamilyCategory = new Map<Family, Map<Category, PresetView[]>>();\n for (const id of Object.keys(presets)) {\n const preset = presets[id];\n if (!preset) continue;\n // taxonomy[0] is the family (tab); taxonomy[1], when present, is the\n // category (left-hand menu). A depth-1 preset has no category.\n const family = preset.taxonomy[0];\n const category = preset.taxonomy[1];\n const view: PresetView = {\n id,\n label: labelFor?.(id as keyof P & string) ?? preset.name,\n family,\n category,\n source:\n typeof preset.thumbnail === 'string' || typeof preset.thumbnail === 'number'\n ? preset.thumbnail\n : undefined,\n };\n if (!viewsByFamily.has(family)) {\n families.push(family);\n viewsByFamily.set(family, []);\n categoriesByFamily.set(family, []);\n viewsByFamilyCategory.set(family, new Map());\n }\n viewsByFamily.get(family)?.push(view);\n if (category !== undefined) {\n const cats = categoriesByFamily.get(family);\n const catViews = viewsByFamilyCategory.get(family);\n if (cats && catViews && !catViews.has(category)) {\n cats.push(category);\n catViews.set(category, []);\n }\n catViews?.get(category)?.push(view);\n }\n }\n\n const [activeTab, setActiveTab] = useState<Family | undefined>(undefined);\n const family = activeTab && families.includes(activeTab) ? activeTab : families[0];\n const categories = (family && categoriesByFamily.get(family)) || [];\n\n const [activeCategory, setActiveCategory] = useState<Category | undefined>(undefined);\n const category =\n activeCategory && categories.includes(activeCategory) ? activeCategory : categories[0];\n\n const views = category\n ? (family && viewsByFamilyCategory.get(family)?.get(category)) || []\n : (family && viewsByFamily.get(family)) || [];\n\n return {\n families,\n activeTab: family,\n setActiveTab,\n categories,\n activeCategory: category,\n setActiveCategory,\n views,\n };\n}\n\ninterface TabProps {\n readonly label: string;\n readonly active: boolean;\n readonly disabled: boolean;\n readonly onPress: () => void;\n readonly testID: string;\n}\n\nfunction Tab({ label, active, disabled, onPress, testID }: TabProps) {\n return (\n <Pressable\n accessibilityRole=\"tab\"\n accessibilityState={{ selected: active, disabled }}\n testID={testID}\n disabled={disabled}\n onPress={onPress}\n style={[styles.tab, active && styles.tabActive, disabled && styles.tabDisabled]}\n >\n <Text style={[styles.tabLabel, active && styles.tabLabelActive]}>{label}</Text>\n </Pressable>\n );\n}\n\ninterface CategoryItemProps {\n readonly label: string;\n readonly active: boolean;\n readonly disabled: boolean;\n readonly onPress: () => void;\n readonly testID: string;\n}\n\nfunction CategoryItem({ label, active, disabled, onPress, testID }: CategoryItemProps) {\n return (\n <Pressable\n accessibilityRole=\"menuitem\"\n accessibilityState={{ selected: active, disabled }}\n testID={testID}\n disabled={disabled}\n onPress={onPress}\n style={[\n styles.category,\n active && styles.categoryActive,\n disabled && styles.categoryDisabled,\n ]}\n >\n <Text style={[styles.categoryLabel, active && styles.categoryLabelActive]}>{label}</Text>\n </Pressable>\n );\n}\n\nfunction titleCase(s: string): string {\n return s\n .split('-')\n .map((w) => (w ? w.charAt(0).toUpperCase() + w.slice(1) : w))\n .join(' ');\n}\n\nconst styles = StyleSheet.create({\n tab: { paddingVertical: 6, paddingHorizontal: 12, borderRadius: 999, backgroundColor: '#1f1f1f' },\n tabActive: { backgroundColor: '#333' },\n tabDisabled: { opacity: 0.5 },\n tabLabel: { color: '#999', fontSize: 12, fontWeight: '600' },\n tabLabelActive: { color: '#fff' },\n category: {\n paddingVertical: 6,\n paddingHorizontal: 10,\n borderRadius: 8,\n backgroundColor: '#1a1a1a',\n },\n categoryActive: { backgroundColor: '#2c2c2c' },\n categoryDisabled: { opacity: 0.5 },\n categoryLabel: { color: '#9a9a9a', fontSize: 12, fontWeight: '500' },\n categoryLabelActive: { color: '#fff' },\n});\n\nexport { PresetTile } from '../preset-tile';\n// The `./picker` subpath barrel: the chassis above plus the composable parts and\n// types a consumer can use to build a BYO layout.\nexport { PresetBookMenuLayout } from './layout';\nexport type {\n Category,\n Family,\n PresetBookMenuProps,\n PresetBookMenuSelection,\n PresetBookMenuStyleProps,\n PresetItemState,\n PresetView,\n RenderTile,\n} from './preset-book-menu.types';\nexport { PresetGrid } from './preset-grid';\n"]}