react-native-webrtc-kaleidoscope 2.1.1 → 2.2.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 (165) hide show
  1. package/README.md +8 -0
  2. package/dist/catalog/composites/clouds/clouds.controls.d.ts.map +1 -1
  3. package/dist/catalog/composites/clouds/clouds.d.ts.map +1 -1
  4. package/dist/catalog/composites/corporate-blobs/corporate-blobs.controls.d.ts.map +1 -1
  5. package/dist/catalog/composites/corporate-blobs/corporate-blobs.d.ts.map +1 -1
  6. package/dist/catalog/composites/corporate-blobs/corporate-blobs.web.d.ts.map +1 -1
  7. package/dist/catalog/composites/fairy-cave/fairy-cave.controls.d.ts.map +1 -1
  8. package/dist/catalog/composites/fairy-cave/fairy-cave.d.ts.map +1 -1
  9. package/dist/catalog/composites/fairy-cave/fairy-cave.web.d.ts.map +1 -1
  10. package/dist/catalog/composites/fairy-grotto/fairy-grotto.controls.d.ts.map +1 -1
  11. package/dist/catalog/composites/fairy-grotto/fairy-grotto.d.ts.map +1 -1
  12. package/dist/catalog/composites/fairy-grotto/fairy-grotto.web.d.ts.map +1 -1
  13. package/dist/catalog/composites/fairy-hollow/fairy-hollow.controls.d.ts.map +1 -1
  14. package/dist/catalog/composites/fairy-hollow/fairy-hollow.d.ts.map +1 -1
  15. package/dist/catalog/composites/fairy-hollow/fairy-hollow.web.d.ts.map +1 -1
  16. package/dist/catalog/composites/nebula/nebula.controls.d.ts.map +1 -1
  17. package/dist/catalog/composites/nebula/nebula.d.ts.map +1 -1
  18. package/dist/catalog/composites/nebula/nebula.web.d.ts.map +1 -1
  19. package/dist/catalog/composites/observation-deck/observation-deck.controls.d.ts.map +1 -1
  20. package/dist/catalog/composites/observation-deck/observation-deck.d.ts.map +1 -1
  21. package/dist/catalog/composites/observation-deck/observation-deck.web.d.ts.map +1 -1
  22. package/dist/catalog/composites/simianlights/simianlights.controls.d.ts.map +1 -1
  23. package/dist/catalog/composites/simianlights/simianlights.d.ts.map +1 -1
  24. package/dist/catalog/composites/simianlights/simianlights.web.d.ts.map +1 -1
  25. package/dist/catalog/composites/underwater/underwater.controls.d.ts.map +1 -1
  26. package/dist/catalog/composites/underwater/underwater.d.ts.map +1 -1
  27. package/dist/catalog/composites/underwater/underwater.web.d.ts.map +1 -1
  28. package/dist/catalog/composites/wizard-tower/wizard-tower.controls.d.ts.map +1 -1
  29. package/dist/catalog/composites/wizard-tower/wizard-tower.d.ts.map +1 -1
  30. package/dist/catalog/composites/wizard-tower/wizard-tower.web.d.ts.map +1 -1
  31. package/dist/catalog/composites/wizard-tower-night/wizard-tower-night.controls.d.ts.map +1 -1
  32. package/dist/catalog/composites/wizard-tower-night/wizard-tower-night.d.ts.map +1 -1
  33. package/dist/catalog/composites/wizard-tower-night/wizard-tower-night.web.d.ts.map +1 -1
  34. package/dist/catalog/images/corporate/corporate-logo.d.ts.map +1 -1
  35. package/dist/catalog/images/corporate/corporate-logo.web.d.ts.map +1 -1
  36. package/dist/catalog/images/debug/debug-resolutions.d.ts.map +1 -1
  37. package/dist/catalog/images/debug/debug-resolutions.web.d.ts.map +1 -1
  38. package/dist/catalog/images/fairy-caves/grotto.d.ts.map +1 -1
  39. package/dist/catalog/images/fairy-caves/grotto.web.d.ts.map +1 -1
  40. package/dist/catalog/images/fairy-caves/hollow.d.ts.map +1 -1
  41. package/dist/catalog/images/fairy-caves/hollow.web.d.ts.map +1 -1
  42. package/dist/catalog/images/fairy-caves/treehouse-2.d.ts.map +1 -1
  43. package/dist/catalog/images/fairy-caves/treehouse-2.web.d.ts.map +1 -1
  44. package/dist/catalog/images/fairy-caves/treehouse-3.d.ts.map +1 -1
  45. package/dist/catalog/images/fairy-caves/treehouse-3.web.d.ts.map +1 -1
  46. package/dist/catalog/images/fairy-caves/treehouse.d.ts.map +1 -1
  47. package/dist/catalog/images/fairy-caves/treehouse.web.d.ts.map +1 -1
  48. package/dist/catalog/images/home/home-dark.d.ts.map +1 -1
  49. package/dist/catalog/images/home/home-dark.web.d.ts.map +1 -1
  50. package/dist/catalog/images/home/home-light.d.ts.map +1 -1
  51. package/dist/catalog/images/home/home-light.web.d.ts.map +1 -1
  52. package/dist/catalog/images/image-ids.d.ts.map +1 -1
  53. package/dist/catalog/images/image.types.d.ts.map +1 -1
  54. package/dist/catalog/images/index.d.ts.map +1 -1
  55. package/dist/catalog/images/nature/landscape-dark.d.ts.map +1 -1
  56. package/dist/catalog/images/nature/landscape-dark.web.d.ts.map +1 -1
  57. package/dist/catalog/images/nature/landscape-light.d.ts.map +1 -1
  58. package/dist/catalog/images/nature/landscape-light.web.d.ts.map +1 -1
  59. package/dist/catalog/images/office/office-dark.d.ts.map +1 -1
  60. package/dist/catalog/images/office/office-dark.web.d.ts.map +1 -1
  61. package/dist/catalog/images/office/office-light.d.ts.map +1 -1
  62. package/dist/catalog/images/office/office-light.web.d.ts.map +1 -1
  63. package/dist/catalog/images/sci-fi/sci-fi-light.d.ts.map +1 -1
  64. package/dist/catalog/images/sci-fi/sci-fi-light.web.d.ts.map +1 -1
  65. package/dist/catalog/images/simiancraft/simiancraft-dark-transparency.d.ts.map +1 -1
  66. package/dist/catalog/images/simiancraft/simiancraft-dark-transparency.web.d.ts.map +1 -1
  67. package/dist/catalog/images/simiancraft/simiancraft-dark.d.ts.map +1 -1
  68. package/dist/catalog/images/simiancraft/simiancraft-dark.web.d.ts.map +1 -1
  69. package/dist/catalog/images/simiancraft/simiancraft-light-transparency.d.ts.map +1 -1
  70. package/dist/catalog/images/simiancraft/simiancraft-light-transparency.web.d.ts.map +1 -1
  71. package/dist/catalog/images/simiancraft/simiancraft-light.d.ts.map +1 -1
  72. package/dist/catalog/images/simiancraft/simiancraft-light.web.d.ts.map +1 -1
  73. package/dist/catalog/images/spaceship/observation-deck.d.ts.map +1 -1
  74. package/dist/catalog/images/spaceship/observation-deck.web.d.ts.map +1 -1
  75. package/dist/catalog/images/underwater/oceanscape-dark.d.ts.map +1 -1
  76. package/dist/catalog/images/underwater/oceanscape-dark.web.d.ts.map +1 -1
  77. package/dist/catalog/images/wizard-tower/wizard-tower-1.d.ts.map +1 -1
  78. package/dist/catalog/images/wizard-tower/wizard-tower-1.web.d.ts.map +1 -1
  79. package/dist/catalog/images/wizard-tower/wizard-tower-2.d.ts.map +1 -1
  80. package/dist/catalog/images/wizard-tower/wizard-tower-2.web.d.ts.map +1 -1
  81. package/dist/catalog/images/wizard-tower/wizard-tower-night.d.ts.map +1 -1
  82. package/dist/catalog/images/wizard-tower/wizard-tower-night.web.d.ts.map +1 -1
  83. package/dist/catalog/shaders/_shared/types.d.ts.map +1 -1
  84. package/dist/catalog/shaders/anamorphic-lensflare/anamorphic-lensflare.d.ts.map +1 -1
  85. package/dist/catalog/shaders/anamorphic-lensflare/anamorphic-lensflare.form.d.ts.map +1 -1
  86. package/dist/catalog/shaders/blur/blur.d.ts.map +1 -1
  87. package/dist/catalog/shaders/blur/blur.form.d.ts.map +1 -1
  88. package/dist/catalog/shaders/clouds/clouds.d.ts.map +1 -1
  89. package/dist/catalog/shaders/clouds/clouds.form.d.ts.map +1 -1
  90. package/dist/catalog/shaders/corporate-blobs/corporate-blobs.d.ts.map +1 -1
  91. package/dist/catalog/shaders/corporate-blobs/corporate-blobs.form.d.ts.map +1 -1
  92. package/dist/catalog/shaders/fireflies/fireflies.d.ts.map +1 -1
  93. package/dist/catalog/shaders/fireflies/fireflies.form.d.ts.map +1 -1
  94. package/dist/catalog/shaders/godrays/godrays.d.ts.map +1 -1
  95. package/dist/catalog/shaders/godrays/godrays.form.d.ts.map +1 -1
  96. package/dist/catalog/shaders/index.d.ts.map +1 -1
  97. package/dist/catalog/shaders/light-beams-and-motes/light-beams-and-motes.d.ts.map +1 -1
  98. package/dist/catalog/shaders/light-beams-and-motes/light-beams-and-motes.form.d.ts.map +1 -1
  99. package/dist/catalog/shaders/nebula/nebula.d.ts.map +1 -1
  100. package/dist/catalog/shaders/nebula/nebula.form.d.ts.map +1 -1
  101. package/dist/catalog/shaders/plasma/plasma.d.ts.map +1 -1
  102. package/dist/catalog/shaders/plasma/plasma.form.d.ts.map +1 -1
  103. package/dist/catalog/shaders/simianlights/simianlights.d.ts.map +1 -1
  104. package/dist/catalog/shaders/simianlights/simianlights.form.d.ts.map +1 -1
  105. package/dist/src/components/form/control-form.d.ts.map +1 -1
  106. package/dist/src/components/form/make-controls.d.ts.map +1 -1
  107. package/dist/src/components/form/scope.d.ts.map +1 -1
  108. package/dist/src/components/form/use-field.d.ts.map +1 -1
  109. package/dist/src/components/preset-book-menu/index.d.ts.map +1 -1
  110. package/dist/src/components/preset-book-menu/layout.d.ts.map +1 -1
  111. package/dist/src/components/preset-book-menu/preset-book-menu.types.d.ts.map +1 -1
  112. package/dist/src/components/preset-book-menu/preset-grid.d.ts.map +1 -1
  113. package/dist/src/components/preset-book-menu/resolve-image-uri.d.ts.map +1 -1
  114. package/dist/src/components/preset-book-menu/resolve-image-uri.types.d.ts.map +1 -1
  115. package/dist/src/components/preset-book-menu/resolve-image-uri.web.d.ts.map +1 -1
  116. package/dist/src/components/preset-control-panel/composite-layer-control-panel.d.ts.map +1 -1
  117. package/dist/src/components/preset-control-panel/control-section.d.ts.map +1 -1
  118. package/dist/src/components/preset-control-panel/control.d.ts.map +1 -1
  119. package/dist/src/components/preset-control-panel/index.d.ts.map +1 -1
  120. package/dist/src/components/preset-control-panel/mask-control-panel.d.ts.map +1 -1
  121. package/dist/src/components/preset-control-panel/preset-control-panel.d.ts.map +1 -1
  122. package/dist/src/components/preset-control-panel/transform-control-panel.d.ts.map +1 -1
  123. package/dist/src/components/preset-tile/index.d.ts.map +1 -1
  124. package/dist/src/components/theme/provider.d.ts.map +1 -1
  125. package/dist/src/components/theme/slots.d.ts.map +1 -1
  126. package/dist/src/components/ui/button.d.ts.map +1 -1
  127. package/dist/src/components/ui/color-picker.d.ts.map +1 -1
  128. package/dist/src/components/ui/index.d.ts.map +1 -1
  129. package/dist/src/components/ui/label.d.ts.map +1 -1
  130. package/dist/src/components/ui/point.d.ts.map +1 -1
  131. package/dist/src/components/ui/polygon-field.d.ts.map +1 -1
  132. package/dist/src/components/ui/readout.d.ts.map +1 -1
  133. package/dist/src/components/ui/slider-value.d.ts.map +1 -1
  134. package/dist/src/components/ui/slider.d.ts.map +1 -1
  135. package/dist/src/components/ui/switch.d.ts.map +1 -1
  136. package/dist/src/index.d.ts.map +1 -1
  137. package/dist/src/index.web.d.ts.map +1 -1
  138. package/dist/src/kaleidoscope/controls.d.ts.map +1 -1
  139. package/dist/src/kaleidoscope/effect.d.ts.map +1 -1
  140. package/dist/src/kaleidoscope/effect.types.d.ts.map +1 -1
  141. package/dist/src/kaleidoscope/shader-to-spec.d.ts.map +1 -1
  142. package/dist/src/kaleidoscope/types.d.ts.map +1 -1
  143. package/dist/src/kaleidoscope.preset-book.types.d.ts.map +1 -1
  144. package/dist/src/lib/primitives.types.d.ts.map +1 -1
  145. package/dist/src/lib/test-id.d.ts.map +1 -1
  146. package/dist/src/livekit.d.ts +2 -0
  147. package/dist/src/livekit.d.ts.map +1 -1
  148. package/dist/src/livekit.js +7 -1
  149. package/dist/src/livekit.js.map +1 -1
  150. package/dist/src/nativewind.d.ts.map +1 -1
  151. package/dist/web-driver/effects/composite.d.ts.map +1 -1
  152. package/dist/web-driver/effects/layer-shaders.d.ts.map +1 -1
  153. package/dist/web-driver/effects/transform.d.ts.map +1 -1
  154. package/dist/web-driver/index.d.ts.map +1 -1
  155. package/dist/web-driver/insertable-streams.d.ts.map +1 -1
  156. package/dist/web-driver/segmenter.d.ts.map +1 -1
  157. package/dist/web-driver/shaders.d.ts.map +1 -1
  158. package/dist/web-driver/shaders.generated.d.ts.map +1 -1
  159. package/dist/web-driver/tuning.d.ts +14 -0
  160. package/dist/web-driver/tuning.d.ts.map +1 -1
  161. package/dist/web-driver/tuning.js +24 -6
  162. package/dist/web-driver/tuning.js.map +1 -1
  163. package/llms.txt +576 -0
  164. package/package.json +8 -7
  165. package/src/livekit.ts +7 -0
@@ -1 +1 @@
1
- {"version":3,"file":"simiancraft-dark.d.ts","sourceRoot":"","sources":["../../../../catalog/images/simiancraft/simiancraft-dark.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAKlD,eAAO,MAAM,eAAe,EAAE,WAAgC,CAAC","sourcesContent":["import type { ImageSource } from '../image.types';\n\n// Native variant. The native module loads its own bundled resource by name, so\n// the source is just the image id; no WebP import, no expo-asset on native.\n// Web is handled by simiancraft-dark.web.ts.\nexport const simiancraftDark: ImageSource = 'simiancraft-dark';\n"]}
1
+ {"version":3,"file":"simiancraft-dark.d.ts","sourceRoot":"","sources":["../../../../catalog/images/simiancraft/simiancraft-dark.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAKlD,eAAO,MAAM,eAAe,EAAE,WAAgC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"simiancraft-dark.web.d.ts","sourceRoot":"","sources":["../../../../catalog/images/simiancraft/simiancraft-dark.web.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAIlD,eAAO,MAAM,eAAe,EAAE,WAAwD,CAAC","sourcesContent":["/// <reference path=\"../assets.d.ts\" />\nimport { Asset } from 'expo-asset';\nimport type { ImageSource } from '../image.types';\nimport simiancraftDarkAsset from './simiancraft-dark.webp';\n\n// Web variant. The bundled WebP's URL, which the image layer fetches.\nexport const simiancraftDark: ImageSource = Asset.fromModule(simiancraftDarkAsset).uri;\n"]}
1
+ {"version":3,"file":"simiancraft-dark.web.d.ts","sourceRoot":"","sources":["../../../../catalog/images/simiancraft/simiancraft-dark.web.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAIlD,eAAO,MAAM,eAAe,EAAE,WAAwD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"simiancraft-light-transparency.d.ts","sourceRoot":"","sources":["../../../../catalog/images/simiancraft/simiancraft-light-transparency.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAKlD,eAAO,MAAM,4BAA4B,EAAE,WAA8C,CAAC","sourcesContent":["import type { ImageSource } from '../image.types';\n\n// Native variant. The native module loads its own bundled resource by name, so\n// the source is just the image id; no WebP import, no expo-asset on native.\n// Web is handled by simiancraft-light-transparency.web.ts.\nexport const simiancraftLightTransparency: ImageSource = 'simiancraft-light-transparency';\n"]}
1
+ {"version":3,"file":"simiancraft-light-transparency.d.ts","sourceRoot":"","sources":["../../../../catalog/images/simiancraft/simiancraft-light-transparency.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAKlD,eAAO,MAAM,4BAA4B,EAAE,WAA8C,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"simiancraft-light-transparency.web.d.ts","sourceRoot":"","sources":["../../../../catalog/images/simiancraft/simiancraft-light-transparency.web.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAIlD,eAAO,MAAM,4BAA4B,EAAE,WAEtC,CAAC","sourcesContent":["/// <reference path=\"../assets.d.ts\" />\nimport { Asset } from 'expo-asset';\nimport type { ImageSource } from '../image.types';\nimport simiancraftLightTransparencyAsset from './simiancraft-light-transparency.webp';\n\n// Web variant. The bundled WebP's URL, which the image layer fetches.\nexport const simiancraftLightTransparency: ImageSource = Asset.fromModule(\n simiancraftLightTransparencyAsset,\n).uri;\n"]}
1
+ {"version":3,"file":"simiancraft-light-transparency.web.d.ts","sourceRoot":"","sources":["../../../../catalog/images/simiancraft/simiancraft-light-transparency.web.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAIlD,eAAO,MAAM,4BAA4B,EAAE,WAEtC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"simiancraft-light.d.ts","sourceRoot":"","sources":["../../../../catalog/images/simiancraft/simiancraft-light.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAKlD,eAAO,MAAM,gBAAgB,EAAE,WAAiC,CAAC","sourcesContent":["import type { ImageSource } from '../image.types';\n\n// Native variant. The native module loads its own bundled resource by name, so\n// the source is just the image id; no WebP import, no expo-asset on native.\n// Web is handled by simiancraft-light.web.ts.\nexport const simiancraftLight: ImageSource = 'simiancraft-light';\n"]}
1
+ {"version":3,"file":"simiancraft-light.d.ts","sourceRoot":"","sources":["../../../../catalog/images/simiancraft/simiancraft-light.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAKlD,eAAO,MAAM,gBAAgB,EAAE,WAAiC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"simiancraft-light.web.d.ts","sourceRoot":"","sources":["../../../../catalog/images/simiancraft/simiancraft-light.web.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAIlD,eAAO,MAAM,gBAAgB,EAAE,WAAyD,CAAC","sourcesContent":["/// <reference path=\"../assets.d.ts\" />\nimport { Asset } from 'expo-asset';\nimport type { ImageSource } from '../image.types';\nimport simiancraftLightAsset from './simiancraft-light.webp';\n\n// Web variant. The bundled WebP's URL, which the image layer fetches.\nexport const simiancraftLight: ImageSource = Asset.fromModule(simiancraftLightAsset).uri;\n"]}
1
+ {"version":3,"file":"simiancraft-light.web.d.ts","sourceRoot":"","sources":["../../../../catalog/images/simiancraft/simiancraft-light.web.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAIlD,eAAO,MAAM,gBAAgB,EAAE,WAAyD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"observation-deck.d.ts","sourceRoot":"","sources":["../../../../catalog/images/spaceship/observation-deck.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAKlD,eAAO,MAAM,eAAe,EAAE,WAAgC,CAAC","sourcesContent":["import type { ImageSource } from '../image.types';\n\n// Native variant. The native module loads its own bundled resource by name, so\n// the source is just the image id; no WebP import, no expo-asset on native.\n// Web is handled by observation-deck.web.ts.\nexport const observationDeck: ImageSource = 'observation-deck';\n"]}
1
+ {"version":3,"file":"observation-deck.d.ts","sourceRoot":"","sources":["../../../../catalog/images/spaceship/observation-deck.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAKlD,eAAO,MAAM,eAAe,EAAE,WAAgC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"observation-deck.web.d.ts","sourceRoot":"","sources":["../../../../catalog/images/spaceship/observation-deck.web.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAIlD,eAAO,MAAM,eAAe,EAAE,WAAwD,CAAC","sourcesContent":["/// <reference path=\"../assets.d.ts\" />\nimport { Asset } from 'expo-asset';\nimport type { ImageSource } from '../image.types';\nimport observationDeckAsset from './observation-deck.webp';\n\n// Web variant. The bundled WebP's URL, which the image layer fetches.\nexport const observationDeck: ImageSource = Asset.fromModule(observationDeckAsset).uri;\n"]}
1
+ {"version":3,"file":"observation-deck.web.d.ts","sourceRoot":"","sources":["../../../../catalog/images/spaceship/observation-deck.web.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAIlD,eAAO,MAAM,eAAe,EAAE,WAAwD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"oceanscape-dark.d.ts","sourceRoot":"","sources":["../../../../catalog/images/underwater/oceanscape-dark.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAKlD,eAAO,MAAM,cAAc,EAAE,WAA+B,CAAC","sourcesContent":["import type { ImageSource } from '../image.types';\n\n// Native variant. The native module loads its own bundled resource by name, so\n// the source is just the image id; no WebP import, no expo-asset on native.\n// Web is handled by oceanscape-dark.web.ts.\nexport const oceanscapeDark: ImageSource = 'oceanscape-dark';\n"]}
1
+ {"version":3,"file":"oceanscape-dark.d.ts","sourceRoot":"","sources":["../../../../catalog/images/underwater/oceanscape-dark.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAKlD,eAAO,MAAM,cAAc,EAAE,WAA+B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"oceanscape-dark.web.d.ts","sourceRoot":"","sources":["../../../../catalog/images/underwater/oceanscape-dark.web.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAIlD,eAAO,MAAM,cAAc,EAAE,WAAuD,CAAC","sourcesContent":["/// <reference path=\"../assets.d.ts\" />\nimport { Asset } from 'expo-asset';\nimport type { ImageSource } from '../image.types';\nimport oceanscapeDarkAsset from './oceanscape-dark.webp';\n\n// Web variant. The bundled WebP's URL, which the image layer fetches.\nexport const oceanscapeDark: ImageSource = Asset.fromModule(oceanscapeDarkAsset).uri;\n"]}
1
+ {"version":3,"file":"oceanscape-dark.web.d.ts","sourceRoot":"","sources":["../../../../catalog/images/underwater/oceanscape-dark.web.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAIlD,eAAO,MAAM,cAAc,EAAE,WAAuD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"wizard-tower-1.d.ts","sourceRoot":"","sources":["../../../../catalog/images/wizard-tower/wizard-tower-1.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAKlD,eAAO,MAAM,YAAY,EAAE,WAA8B,CAAC","sourcesContent":["import type { ImageSource } from '../image.types';\n\n// Native variant. The native module loads its own bundled resource by name, so\n// the source is just the image id; no WebP import, no expo-asset on native.\n// Web is handled by wizard-tower-1.web.ts.\nexport const wizardTower1: ImageSource = 'wizard-tower-1';\n"]}
1
+ {"version":3,"file":"wizard-tower-1.d.ts","sourceRoot":"","sources":["../../../../catalog/images/wizard-tower/wizard-tower-1.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAKlD,eAAO,MAAM,YAAY,EAAE,WAA8B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"wizard-tower-1.web.d.ts","sourceRoot":"","sources":["../../../../catalog/images/wizard-tower/wizard-tower-1.web.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAIlD,eAAO,MAAM,YAAY,EAAE,WAAqD,CAAC","sourcesContent":["/// <reference path=\"../assets.d.ts\" />\nimport { Asset } from 'expo-asset';\nimport type { ImageSource } from '../image.types';\nimport wizardTower1Asset from './wizard-tower-1.webp';\n\n// Web variant. The bundled WebP's URL, which the image layer fetches.\nexport const wizardTower1: ImageSource = Asset.fromModule(wizardTower1Asset).uri;\n"]}
1
+ {"version":3,"file":"wizard-tower-1.web.d.ts","sourceRoot":"","sources":["../../../../catalog/images/wizard-tower/wizard-tower-1.web.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAIlD,eAAO,MAAM,YAAY,EAAE,WAAqD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"wizard-tower-2.d.ts","sourceRoot":"","sources":["../../../../catalog/images/wizard-tower/wizard-tower-2.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAKlD,eAAO,MAAM,YAAY,EAAE,WAA8B,CAAC","sourcesContent":["import type { ImageSource } from '../image.types';\n\n// Native variant. The native module loads its own bundled resource by name, so\n// the source is just the image id; no WebP import, no expo-asset on native.\n// Web is handled by wizard-tower-2.web.ts.\nexport const wizardTower2: ImageSource = 'wizard-tower-2';\n"]}
1
+ {"version":3,"file":"wizard-tower-2.d.ts","sourceRoot":"","sources":["../../../../catalog/images/wizard-tower/wizard-tower-2.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAKlD,eAAO,MAAM,YAAY,EAAE,WAA8B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"wizard-tower-2.web.d.ts","sourceRoot":"","sources":["../../../../catalog/images/wizard-tower/wizard-tower-2.web.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAIlD,eAAO,MAAM,YAAY,EAAE,WAAqD,CAAC","sourcesContent":["/// <reference path=\"../assets.d.ts\" />\nimport { Asset } from 'expo-asset';\nimport type { ImageSource } from '../image.types';\nimport wizardTower2Asset from './wizard-tower-2.webp';\n\n// Web variant. The bundled WebP's URL, which the image layer fetches.\nexport const wizardTower2: ImageSource = Asset.fromModule(wizardTower2Asset).uri;\n"]}
1
+ {"version":3,"file":"wizard-tower-2.web.d.ts","sourceRoot":"","sources":["../../../../catalog/images/wizard-tower/wizard-tower-2.web.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAIlD,eAAO,MAAM,YAAY,EAAE,WAAqD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"wizard-tower-night.d.ts","sourceRoot":"","sources":["../../../../catalog/images/wizard-tower/wizard-tower-night.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAKlD,eAAO,MAAM,gBAAgB,EAAE,WAAkC,CAAC","sourcesContent":["import type { ImageSource } from '../image.types';\n\n// Native variant. The native module loads its own bundled resource by name, so\n// the source is just the image id; no WebP import, no expo-asset on native.\n// Web is handled by wizard-tower-night.web.ts.\nexport const wizardTowerNight: ImageSource = 'wizard-tower-night';\n"]}
1
+ {"version":3,"file":"wizard-tower-night.d.ts","sourceRoot":"","sources":["../../../../catalog/images/wizard-tower/wizard-tower-night.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAKlD,eAAO,MAAM,gBAAgB,EAAE,WAAkC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"wizard-tower-night.web.d.ts","sourceRoot":"","sources":["../../../../catalog/images/wizard-tower/wizard-tower-night.web.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAIlD,eAAO,MAAM,gBAAgB,EAAE,WAAyD,CAAC","sourcesContent":["/// <reference path=\"../assets.d.ts\" />\nimport { Asset } from 'expo-asset';\nimport type { ImageSource } from '../image.types';\nimport wizardTowerNightAsset from './wizard-tower-night.webp';\n\n// Web variant. The bundled WebP's URL, which the image layer fetches.\nexport const wizardTowerNight: ImageSource = Asset.fromModule(wizardTowerNightAsset).uri;\n"]}
1
+ {"version":3,"file":"wizard-tower-night.web.d.ts","sourceRoot":"","sources":["../../../../catalog/images/wizard-tower/wizard-tower-night.web.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAIlD,eAAO,MAAM,gBAAgB,EAAE,WAAyD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../catalog/shaders/_shared/types.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,mCAAmC,CAAC;AAE7D;;;;GAIG;AAQH,MAAM,MAAM,cAAc,GACtB;IACE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC;IACtB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB,GACD;IAIE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB,CAAC;AAEN,6EAA6E;AAC7E,eAAO,MAAM,eAAe,aAChB,SAAS,cAAc,EAAE,KAClC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAI3C,CAAC","sourcesContent":["// Shared shape for a layer shader's tunable uniforms. Each shader exports a\n// `*_CONTROLS` list of these; the demo generates a control per entry, and the\n// list doubles as documentation (name, default, range, and a doc string).\n\nimport type { RGB } from '../../../src/lib/primitives.types';\n\n/**\n * A single tunable uniform with enough metadata to render a control and seed a\n * default. `color` is an RGB triple (0..1 per channel); `float` is a scalar with\n * a range. Reusable across shaders.\n */\n// `name` is the uniform key (it maps to the shader uniform and the layer's\n// `uniforms` record). `label` is the optional display string for the generated\n// control; when present the UI shows it instead of `name`, so a control can read\n// \"blur\" while still writing the `sigma` uniform. Defaults to `name`.\n// Every variant carries the shared META (name, label?, kind, default, doc); the\n// remaining fields are the PROPS that spread into the kind's control component\n// (min/max/step for float, points for polygon). `kind` narrows which props apply.\nexport type UniformControl =\n | {\n readonly name: string;\n readonly label?: string;\n readonly kind: 'color';\n readonly default: RGB;\n readonly doc: string;\n }\n | {\n readonly name: string;\n readonly label?: string;\n readonly kind: 'float';\n readonly default: number;\n readonly min: number;\n readonly max: number;\n readonly step: number;\n readonly doc: string;\n }\n | {\n readonly name: string;\n readonly label?: string;\n readonly kind: 'switch';\n readonly default: number; // 0 (off) | 1 (on)\n readonly doc: string;\n }\n | {\n // The uniform is a vec2 array `vec2 uX[points]`; `default` is the flat\n // [x0,y0, x1,y1, ...] of length 2*points. The prototype editor renders\n // x/y sliders per point on one row; a drag editor replaces it later.\n readonly name: string;\n readonly label?: string;\n readonly kind: 'polygon';\n readonly default: readonly number[];\n readonly points: number;\n readonly doc: string;\n };\n\n/** The default uniform values from a control list, as a flat uniform map. */\nexport const defaultUniforms = (\n controls: readonly UniformControl[],\n): Record<string, number | readonly number[]> => {\n const out: Record<string, number | readonly number[]> = {};\n for (const c of controls) out[c.name] = c.default;\n return out;\n};\n"]}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../catalog/shaders/_shared/types.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,mCAAmC,CAAC;AAE7D;;;;GAIG;AAQH,MAAM,MAAM,cAAc,GACtB;IACE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC;IACtB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB,GACD;IAIE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB,CAAC;AAEN,6EAA6E;AAC7E,eAAO,MAAM,eAAe,aAChB,SAAS,cAAc,EAAE,KAClC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAI3C,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"anamorphic-lensflare.d.ts","sourceRoot":"","sources":["../../../../catalog/shaders/anamorphic-lensflare/anamorphic-lensflare.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,mCAAmC,CAAC;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEvD,kEAAkE;AAClE,MAAM,MAAM,2BAA2B,GAAG;IACxC,6DAA6D;IAC7D,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,2CAA2C;IAC3C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,qCAAqC;IACrC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,gDAAgD;IAChD,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,wDAAwD;IACxD,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,mDAAmD;IACnD,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,+BAA+B;IAC/B,QAAQ,CAAC,UAAU,EAAE,GAAG,CAAC;IACzB,+BAA+B;IAC/B,QAAQ,CAAC,UAAU,EAAE,GAAG,CAAC;IACzB,qCAAqC;IACrC,QAAQ,CAAC,UAAU,EAAE,GAAG,CAAC;CAC1B,CAAC;AAEF,mGAAmG;AACnG,eAAO,MAAM,6BAA6B,EAAE,SAAS,cAAc,EAyElE,CAAC","sourcesContent":["// Anamorphic lens-flare layer-shader interface: typed uniforms + control\n// descriptor. A cinematic camera-lens artifact, a transparent OVERLAY layer\n// (use blend 'additive'). All three palette colors are exposed so the flare can\n// be color-matched to whatever sits behind it (e.g. the simianlights field in the\n// observation-deck composite). Shader source is ./anamorphic-lensflare.frag.\n\nimport type { RGB } from '../../../src/lib/primitives.types';\nimport type { UniformControl } from '../_shared/types';\n\n/** Typed uniforms for the `anamorphic-lensflare` layer shader. */\nexport type AnamorphicLensFlareUniforms = {\n /** Flare X position, 0..1 (it drifts slowly around this). */\n readonly uFlareX: number;\n /** Flare Y position, 0..1 (0 = bottom). */\n readonly uFlareY: number;\n /** Overall brightness multiplier. */\n readonly uIntensity: number;\n /** Horizontal streak reach; higher = longer. */\n readonly uStreakLength: number;\n /** Main streak vertical tightness; higher = thinner. */\n readonly uStreakWidth: number;\n /** Optical-ghost strength along the flare axis. */\n readonly uGhostStrength: number;\n /** Core / warm streak tint. */\n readonly uWarmColor: RGB;\n /** Halo / wide-streak tint. */\n readonly uBlueColor: RGB;\n /** Secondary streak / ghost tint. */\n readonly uPinkColor: RGB;\n};\n\n/** The `anamorphic-lensflare` shader's tunable uniforms; defaults are the stock cinematic look. */\nexport const ANAMORPHIC_LENSFLARE_CONTROLS: readonly UniformControl[] = [\n {\n name: 'uFlareX',\n kind: 'float',\n default: 0.68,\n min: 0,\n max: 1,\n step: 0.01,\n doc: 'Flare X position (drifts around this).',\n },\n {\n name: 'uFlareY',\n kind: 'float',\n default: 0.34,\n min: 0,\n max: 1,\n step: 0.01,\n doc: 'Flare Y position (0 = bottom).',\n },\n {\n name: 'uIntensity',\n kind: 'float',\n default: 0.85,\n min: 0,\n max: 2,\n step: 0.01,\n doc: 'Overall brightness.',\n },\n {\n name: 'uStreakLength',\n kind: 'float',\n default: 0.55,\n min: 0,\n max: 1.5,\n step: 0.01,\n doc: 'Horizontal streak reach.',\n },\n {\n name: 'uStreakWidth',\n kind: 'float',\n default: 210,\n min: 20,\n max: 400,\n step: 5,\n doc: 'Main streak tightness; higher = thinner.',\n },\n {\n name: 'uGhostStrength',\n kind: 'float',\n default: 0.55,\n min: 0,\n max: 1.5,\n step: 0.01,\n doc: 'Optical-ghost strength.',\n },\n {\n name: 'uWarmColor',\n kind: 'color',\n default: [1.0, 0.82, 0.58],\n doc: 'Core / warm streak tint.',\n },\n {\n name: 'uBlueColor',\n kind: 'color',\n default: [0.35, 0.55, 1.0],\n doc: 'Halo / wide-streak tint.',\n },\n {\n name: 'uPinkColor',\n kind: 'color',\n default: [1.0, 0.45, 0.95],\n doc: 'Secondary streak / ghost tint.',\n },\n];\n"]}
1
+ {"version":3,"file":"anamorphic-lensflare.d.ts","sourceRoot":"","sources":["../../../../catalog/shaders/anamorphic-lensflare/anamorphic-lensflare.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,mCAAmC,CAAC;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEvD,kEAAkE;AAClE,MAAM,MAAM,2BAA2B,GAAG;IACxC,6DAA6D;IAC7D,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,2CAA2C;IAC3C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,qCAAqC;IACrC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,gDAAgD;IAChD,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,wDAAwD;IACxD,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,mDAAmD;IACnD,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,+BAA+B;IAC/B,QAAQ,CAAC,UAAU,EAAE,GAAG,CAAC;IACzB,+BAA+B;IAC/B,QAAQ,CAAC,UAAU,EAAE,GAAG,CAAC;IACzB,qCAAqC;IACrC,QAAQ,CAAC,UAAU,EAAE,GAAG,CAAC;CAC1B,CAAC;AAEF,mGAAmG;AACnG,eAAO,MAAM,6BAA6B,EAAE,SAAS,cAAc,EAyElE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"anamorphic-lensflare.form.d.ts","sourceRoot":"","sources":["../../../../catalog/shaders/anamorphic-lensflare/anamorphic-lensflare.form.tsx"],"names":[],"mappings":"AAMA,OAAO,EAIL,KAAK,oBAAoB,EAC1B,MAAM,8CAA8C,CAAC;AAGtD,wBAAgB,uBAAuB,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,oBAAoB,2CAsB5F","sourcesContent":["// Anamorphic-lensflare's editor form: the shader OWNS its control layout. This pass\n// just stacks one <Control uniform=\"…\"/> per uniform in declared order (the\n// auto-form's shape); the point is that this file exists per shader, so\n// layout/grouping is a local edit here, and a new primitive flows in through\n// <Control> without touching it. Conventional layer id: \"flare\".\n\nimport {\n Control,\n ControlForm,\n ControlSection,\n type KaleidoscopeControls,\n} from '../../../src/components/preset-control-panel';\nimport { ANAMORPHIC_LENSFLARE_CONTROLS } from './anamorphic-lensflare';\n\nexport function AnamorphicLensflareForm({ uniforms, onPatch, disabled }: KaleidoscopeControls) {\n return (\n <ControlForm\n id=\"flare\"\n uniforms={uniforms.flare ?? {}}\n onPatch={onPatch}\n disabled={disabled}\n controls={ANAMORPHIC_LENSFLARE_CONTROLS}\n >\n <ControlSection title=\"anamorphic flare\">\n <Control uniform=\"uFlareX\" />\n <Control uniform=\"uFlareY\" />\n <Control uniform=\"uIntensity\" />\n <Control uniform=\"uStreakLength\" />\n <Control uniform=\"uStreakWidth\" />\n <Control uniform=\"uGhostStrength\" />\n <Control uniform=\"uWarmColor\" />\n <Control uniform=\"uBlueColor\" />\n <Control uniform=\"uPinkColor\" />\n </ControlSection>\n </ControlForm>\n );\n}\n"]}
1
+ {"version":3,"file":"anamorphic-lensflare.form.d.ts","sourceRoot":"","sources":["../../../../catalog/shaders/anamorphic-lensflare/anamorphic-lensflare.form.tsx"],"names":[],"mappings":"AAMA,OAAO,EAIL,KAAK,oBAAoB,EAC1B,MAAM,8CAA8C,CAAC;AAGtD,wBAAgB,uBAAuB,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,oBAAoB,2CAsB5F"}
@@ -1 +1 @@
1
- {"version":3,"file":"blur.d.ts","sourceRoot":"","sources":["../../../../catalog/shaders/blur/blur.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEvD,kDAAkD;AAClD,MAAM,MAAM,YAAY,GAAG;IACzB,+EAA+E;IAC/E,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,aAAa,EAAE,SAAS,cAAc,EAWlD,CAAC","sourcesContent":["// Blur layer-shader interface: a camera-sampling separable gaussian. Unlike the\n// generative layer shaders, blur reads its input channel (the camera) and softens\n// it rather than generating pixels; its one tunable is `sigma`. The descriptor\n// drives the demo's generated slider, exactly like the generative controls.\n\nimport type { UniformControl } from '../_shared/types';\n\n/** Typed uniforms for the `blur` layer shader. */\nexport type BlurUniforms = {\n /** Gaussian blur sigma (softness). Higher = softer. Slider range [0.5, 10]. */\n readonly sigma: number;\n};\n\n/**\n * The `blur` layer's tunable. A single `sigma`, surfaced as \"blur\" (the `label`).\n * The live kernel is a 13-tap separable gaussian whose tap spacing also scales\n * with sigma, so the top of the slider keeps softening (with a faint ghost) past\n * where a fixed-radius kernel saturates. The max of 10 keeps that spread subtle;\n * see the kernel in web-driver/effects/composite.ts (mirrored on Android + iOS).\n */\nexport const BLUR_CONTROLS: readonly UniformControl[] = [\n {\n name: 'sigma',\n label: 'blur',\n kind: 'float',\n default: 4,\n min: 0.5,\n max: 10,\n step: 0.1,\n doc: 'Gaussian blur softness; higher = softer.',\n },\n];\n"]}
1
+ {"version":3,"file":"blur.d.ts","sourceRoot":"","sources":["../../../../catalog/shaders/blur/blur.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEvD,kDAAkD;AAClD,MAAM,MAAM,YAAY,GAAG;IACzB,+EAA+E;IAC/E,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,aAAa,EAAE,SAAS,cAAc,EAWlD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"blur.form.d.ts","sourceRoot":"","sources":["../../../../catalog/shaders/blur/blur.form.tsx"],"names":[],"mappings":"AAMA,OAAO,EAIL,KAAK,oBAAoB,EAC1B,MAAM,8CAA8C,CAAC;AAGtD,wBAAgB,QAAQ,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,oBAAoB,2CAc7E","sourcesContent":["// Blur'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: \"blur\".\n\nimport {\n Control,\n ControlForm,\n ControlSection,\n type KaleidoscopeControls,\n} from '../../../src/components/preset-control-panel';\nimport { BLUR_CONTROLS } from './blur';\n\nexport function BlurForm({ uniforms, onPatch, disabled }: KaleidoscopeControls) {\n return (\n <ControlForm\n id=\"blur\"\n uniforms={uniforms.blur ?? {}}\n onPatch={onPatch}\n disabled={disabled}\n controls={BLUR_CONTROLS}\n >\n <ControlSection title=\"blur\">\n <Control uniform=\"sigma\" />\n </ControlSection>\n </ControlForm>\n );\n}\n"]}
1
+ {"version":3,"file":"blur.form.d.ts","sourceRoot":"","sources":["../../../../catalog/shaders/blur/blur.form.tsx"],"names":[],"mappings":"AAMA,OAAO,EAIL,KAAK,oBAAoB,EAC1B,MAAM,8CAA8C,CAAC;AAGtD,wBAAgB,QAAQ,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,oBAAoB,2CAc7E"}
@@ -1 +1 @@
1
- {"version":3,"file":"clouds.d.ts","sourceRoot":"","sources":["../../../../catalog/shaders/clouds/clouds.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,kCAAkC;IAClC,QAAQ,CAAC,YAAY,EAAE,GAAG,CAAC;IAC3B,0BAA0B;IAC1B,QAAQ,CAAC,aAAa,EAAE,GAAG,CAAC;IAC5B,+BAA+B;IAC/B,QAAQ,CAAC,gBAAgB,EAAE,GAAG,CAAC;IAC/B,oCAAoC;IACpC,QAAQ,CAAC,eAAe,EAAE,GAAG,CAAC;IAC9B,uDAAuD;IACvD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,+EAA+E;IAC/E,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,iDAAiD;IACjD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,+EAA+E;IAC/E,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,kEAAkE;IAClE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,uEAAuE;IACvE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,mDAAmD;IACnD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,eAAe,EAAE,SAAS,cAAc,EAmFpD,CAAC","sourcesContent":["// Clouds layer-shader interface: the typed uniforms + a runtime control\n// descriptor. The descriptor is the single source the demo generates tuning\n// controls from, and it documents every uniform (GLSL can't carry this; TS\n// shows up in editors and for LLMs). This is the first of the per-shader type\n// files; the shader source is shaders/clouds.frag.\n\nimport type { RGB } from '../../../src/lib/primitives.types';\nimport type { UniformControl } from '../_shared/types';\n\n/** Typed uniforms for the `clouds` layer shader. */\nexport type CloudsUniforms = {\n /** Sky color near the horizon. */\n readonly uSkyLowColor: RGB;\n /** Sky color overhead. */\n readonly uSkyHighColor: RGB;\n /** Lit (upper) cloud color. */\n readonly uCloudLightColor: RGB;\n /** Shadowed (lower) cloud color. */\n readonly uCloudDarkColor: RGB;\n /** Overall brightness; lower for night, ~1 for day. */\n readonly uExposure: number;\n /** Raymarch step distance; smaller = finer/slower, larger = coarser/faster. */\n readonly uStepSize: number;\n /** How fast the clouds drift. 0 freezes them. */\n readonly uCloudSpeed: number;\n /** Cloud noise frequency; smaller = larger/broader shapes, larger = busier. */\n readonly uCloudScale: number;\n /** Opacity contributed per sample; higher = more solid clouds. */\n readonly uDensity: number;\n /** Noise threshold; lower = more cloud cover, higher = clearer sky. */\n readonly uCoverage: number;\n /** Cloud edge softness; higher = mistier edges. */\n readonly uSoftness: number;\n};\n\n/**\n * The `clouds` shader's tunable uniforms. Drives the demo's generated control\n * panel. Defaults here are the \"bright day\" look; composites override them (the\n * wizard tower runs a sunset palette, the fairy cave a moonlit-night one).\n */\nexport const CLOUDS_CONTROLS: readonly UniformControl[] = [\n {\n name: 'uSkyLowColor',\n kind: 'color',\n default: [0.48, 0.68, 0.95],\n doc: 'Sky color near the horizon.',\n },\n { name: 'uSkyHighColor', kind: 'color', default: [0.85, 0.93, 1.0], doc: 'Sky color overhead.' },\n {\n name: 'uCloudLightColor',\n kind: 'color',\n default: [1.0, 0.97, 0.9],\n doc: 'Lit (upper) cloud color.',\n },\n {\n name: 'uCloudDarkColor',\n kind: 'color',\n default: [0.62, 0.67, 0.76],\n doc: 'Shadowed (lower) cloud color.',\n },\n {\n name: 'uExposure',\n kind: 'float',\n default: 1.0,\n min: 0.2,\n max: 1.5,\n step: 0.01,\n doc: 'Overall brightness.',\n },\n {\n name: 'uStepSize',\n kind: 'float',\n default: 0.2,\n min: 0.05,\n max: 0.4,\n step: 0.01,\n doc: 'Raymarch step distance; smaller = finer.',\n },\n {\n name: 'uCloudSpeed',\n kind: 'float',\n default: 0.2,\n min: 0.0,\n max: 1.0,\n step: 0.01,\n doc: 'Drift speed; 0 freezes.',\n },\n {\n name: 'uCloudScale',\n kind: 'float',\n default: 0.45,\n min: 0.2,\n max: 2.0,\n step: 0.01,\n doc: 'Cloud frequency; smaller = broader shapes.',\n },\n {\n name: 'uDensity',\n kind: 'float',\n default: 0.07,\n min: 0.01,\n max: 0.3,\n step: 0.005,\n doc: 'Opacity per sample; higher = more solid.',\n },\n {\n name: 'uCoverage',\n kind: 'float',\n default: 0.44,\n min: 0.0,\n max: 0.9,\n step: 0.01,\n doc: 'Threshold; lower = more cloud cover.',\n },\n {\n name: 'uSoftness',\n kind: 'float',\n default: 0.15,\n min: 0.0,\n max: 0.5,\n step: 0.01,\n doc: 'Cloud edge softness.',\n },\n];\n"]}
1
+ {"version":3,"file":"clouds.d.ts","sourceRoot":"","sources":["../../../../catalog/shaders/clouds/clouds.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,kCAAkC;IAClC,QAAQ,CAAC,YAAY,EAAE,GAAG,CAAC;IAC3B,0BAA0B;IAC1B,QAAQ,CAAC,aAAa,EAAE,GAAG,CAAC;IAC5B,+BAA+B;IAC/B,QAAQ,CAAC,gBAAgB,EAAE,GAAG,CAAC;IAC/B,oCAAoC;IACpC,QAAQ,CAAC,eAAe,EAAE,GAAG,CAAC;IAC9B,uDAAuD;IACvD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,+EAA+E;IAC/E,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,iDAAiD;IACjD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,+EAA+E;IAC/E,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,kEAAkE;IAClE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,uEAAuE;IACvE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,mDAAmD;IACnD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,eAAe,EAAE,SAAS,cAAc,EAmFpD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"clouds.form.d.ts","sourceRoot":"","sources":["../../../../catalog/shaders/clouds/clouds.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,2CAwB/E","sourcesContent":["// Clouds' 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: \"sky\".\n\nimport {\n Control,\n ControlForm,\n ControlSection,\n type KaleidoscopeControls,\n} from '../../../src/components/preset-control-panel';\nimport { CLOUDS_CONTROLS } from './clouds';\n\nexport function CloudsForm({ uniforms, onPatch, disabled }: KaleidoscopeControls) {\n return (\n <ControlForm\n id=\"sky\"\n uniforms={uniforms.sky ?? {}}\n onPatch={onPatch}\n disabled={disabled}\n controls={CLOUDS_CONTROLS}\n >\n <ControlSection title=\"sky\">\n <Control uniform=\"uSkyLowColor\" />\n <Control uniform=\"uSkyHighColor\" />\n <Control uniform=\"uCloudLightColor\" />\n <Control uniform=\"uCloudDarkColor\" />\n <Control uniform=\"uExposure\" />\n <Control uniform=\"uStepSize\" />\n <Control uniform=\"uCloudSpeed\" />\n <Control uniform=\"uCloudScale\" />\n <Control uniform=\"uDensity\" />\n <Control uniform=\"uCoverage\" />\n <Control uniform=\"uSoftness\" />\n </ControlSection>\n </ControlForm>\n );\n}\n"]}
1
+ {"version":3,"file":"clouds.form.d.ts","sourceRoot":"","sources":["../../../../catalog/shaders/clouds/clouds.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,2CAwB/E"}
@@ -1 +1 @@
1
- {"version":3,"file":"corporate-blobs.d.ts","sourceRoot":"","sources":["../../../../catalog/shaders/corporate-blobs/corporate-blobs.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,mCAAmC,CAAC;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEvD,6DAA6D;AAC7D,MAAM,MAAM,sBAAsB,GAAG;IACnC,kFAAkF;IAClF,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC;IACrB,6CAA6C;IAC7C,QAAQ,CAAC,WAAW,EAAE,GAAG,CAAC;IAC1B,6CAA6C;IAC7C,QAAQ,CAAC,WAAW,EAAE,GAAG,CAAC;IAC1B,yCAAyC;IACzC,QAAQ,CAAC,WAAW,EAAE,GAAG,CAAC;IAC1B,yCAAyC;IACzC,QAAQ,CAAC,WAAW,EAAE,GAAG,CAAC;IAC1B,8CAA8C;IAC9C,QAAQ,CAAC,WAAW,EAAE,GAAG,CAAC;IAC1B,0CAA0C;IAC1C,QAAQ,CAAC,WAAW,EAAE,GAAG,CAAC;IAC1B,wCAAwC;IACxC,QAAQ,CAAC,WAAW,EAAE,GAAG,CAAC;IAC1B,4CAA4C;IAC5C,QAAQ,CAAC,WAAW,EAAE,GAAG,CAAC;IAC1B,wCAAwC;IACxC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,+CAA+C;IAC/C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,oDAAoD;IACpD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,0DAA0D;IAC1D,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,kEAAkE;IAClE,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,uDAAuD;IACvD,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,sCAAsC;IACtC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAChC,CAAC;AAEF,0FAA0F;AAC1F,eAAO,MAAM,wBAAwB,EAAE,SAAS,cAAc,EAwF7D,CAAC","sourcesContent":["// Corporate-blobs layer-shader interface: typed uniforms + control descriptor. A\n// transparent overlay of large decorative edge/vignette blobs in flat brand\n// colors, drifting and morphing (premultiplied output; the blobs sit over\n// whatever is beneath). Shader source is ./corporate-blobs.frag. The eight\n// blobs' positions and colors are fixed in the shader; the tunables below grade,\n// scale, and pace the field. Defaults reproduce the stock prototype look.\n\nimport type { RGB } from '../../../src/lib/primitives.types';\nimport type { UniformControl } from '../_shared/types';\n\n/** Typed uniforms for the `corporate-blobs` layer shader. */\nexport type CorporateBlobsUniforms = {\n /** Overall tint / color grade, multiplied over every blob; [1,1,1] = no grade. */\n readonly uColor: RGB;\n /** Blob 1 base color (stock: light blue). */\n readonly uBlobColor1: RGB;\n /** Blob 2 base color (stock: dark green). */\n readonly uBlobColor2: RGB;\n /** Blob 3 base color (stock: yellow). */\n readonly uBlobColor3: RGB;\n /** Blob 4 base color (stock: orange). */\n readonly uBlobColor4: RGB;\n /** Blob 5 base color (stock: light green). */\n readonly uBlobColor5: RGB;\n /** Blob 6 base color (stock: magenta). */\n readonly uBlobColor6: RGB;\n /** Blob 7 base color (stock: brown). */\n readonly uBlobColor7: RGB;\n /** Blob 8 base color (stock: dark blue). */\n readonly uBlobColor8: RGB;\n /** Overall blob opacity; stock 0.58. */\n readonly uGlobalAlpha: number;\n /** Global blob size multiplier; stock 2.55. */\n readonly uScale: number;\n /** Pushes blobs outward from center; stock 0.32. */\n readonly uEdgePull: number;\n /** Radius around center that repels blobs; stock 0.42. */\n readonly uCenterClear: number;\n /** Positional drift magnitude; 1 = stock, 0 holds blobs still. */\n readonly uMotionAmount: number;\n /** Drift + morph rate; 1 = stock, 0 freezes motion. */\n readonly uMotionSpeed: number;\n /** Blob edge falloff; stock 0.024. */\n readonly uEdgeSoftness: number;\n};\n\n/** The `corporate-blobs` shader's tunable uniforms; defaults reproduce the stock look. */\nexport const CORPORATE_BLOBS_CONTROLS: readonly UniformControl[] = [\n { name: 'uColor', kind: 'color', default: [1, 1, 1], doc: 'Overall tint / color grade.' },\n {\n name: 'uBlobColor1',\n kind: 'color',\n default: [0.376, 0.647, 0.98],\n doc: 'Blob 1 (light blue).',\n },\n {\n name: 'uBlobColor2',\n kind: 'color',\n default: [0.063, 0.725, 0.506],\n doc: 'Blob 2 (dark green).',\n },\n { name: 'uBlobColor3', kind: 'color', default: [0.984, 0.749, 0.141], doc: 'Blob 3 (yellow).' },\n { name: 'uBlobColor4', kind: 'color', default: [0.976, 0.451, 0.086], doc: 'Blob 4 (orange).' },\n {\n name: 'uBlobColor5',\n kind: 'color',\n default: [0.133, 0.773, 0.369],\n doc: 'Blob 5 (light green).',\n },\n { name: 'uBlobColor6', kind: 'color', default: [0.851, 0.275, 0.937], doc: 'Blob 6 (magenta).' },\n { name: 'uBlobColor7', kind: 'color', default: [0.341, 0.325, 0.306], doc: 'Blob 7 (brown).' },\n { name: 'uBlobColor8', kind: 'color', default: [0.008, 0.518, 0.78], doc: 'Blob 8 (dark blue).' },\n {\n name: 'uGlobalAlpha',\n kind: 'float',\n default: 0.58,\n min: 0,\n max: 1,\n step: 0.01,\n doc: 'Overall blob opacity.',\n },\n {\n name: 'uScale',\n kind: 'float',\n default: 2.55,\n min: 1,\n max: 4,\n step: 0.01,\n doc: 'Global blob size.',\n },\n {\n name: 'uEdgePull',\n kind: 'float',\n default: 0.32,\n min: 0,\n max: 1,\n step: 0.01,\n doc: 'Outward push from center.',\n },\n {\n name: 'uCenterClear',\n kind: 'float',\n default: 0.42,\n min: 0,\n max: 1,\n step: 0.01,\n doc: 'Center clear radius.',\n },\n {\n name: 'uMotionAmount',\n kind: 'float',\n default: 1,\n min: 0,\n max: 3,\n step: 0.01,\n doc: 'Drift magnitude; 0 holds still.',\n },\n {\n name: 'uMotionSpeed',\n kind: 'float',\n default: 1,\n min: 0,\n max: 3,\n step: 0.01,\n doc: 'Drift + morph rate; 0 freezes.',\n },\n {\n name: 'uEdgeSoftness',\n kind: 'float',\n default: 0.024,\n min: 0.005,\n max: 0.1,\n step: 0.001,\n doc: 'Blob edge falloff.',\n },\n];\n"]}
1
+ {"version":3,"file":"corporate-blobs.d.ts","sourceRoot":"","sources":["../../../../catalog/shaders/corporate-blobs/corporate-blobs.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,mCAAmC,CAAC;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEvD,6DAA6D;AAC7D,MAAM,MAAM,sBAAsB,GAAG;IACnC,kFAAkF;IAClF,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC;IACrB,6CAA6C;IAC7C,QAAQ,CAAC,WAAW,EAAE,GAAG,CAAC;IAC1B,6CAA6C;IAC7C,QAAQ,CAAC,WAAW,EAAE,GAAG,CAAC;IAC1B,yCAAyC;IACzC,QAAQ,CAAC,WAAW,EAAE,GAAG,CAAC;IAC1B,yCAAyC;IACzC,QAAQ,CAAC,WAAW,EAAE,GAAG,CAAC;IAC1B,8CAA8C;IAC9C,QAAQ,CAAC,WAAW,EAAE,GAAG,CAAC;IAC1B,0CAA0C;IAC1C,QAAQ,CAAC,WAAW,EAAE,GAAG,CAAC;IAC1B,wCAAwC;IACxC,QAAQ,CAAC,WAAW,EAAE,GAAG,CAAC;IAC1B,4CAA4C;IAC5C,QAAQ,CAAC,WAAW,EAAE,GAAG,CAAC;IAC1B,wCAAwC;IACxC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,+CAA+C;IAC/C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,oDAAoD;IACpD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,0DAA0D;IAC1D,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,kEAAkE;IAClE,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,uDAAuD;IACvD,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,sCAAsC;IACtC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAChC,CAAC;AAEF,0FAA0F;AAC1F,eAAO,MAAM,wBAAwB,EAAE,SAAS,cAAc,EAwF7D,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"corporate-blobs.form.d.ts","sourceRoot":"","sources":["../../../../catalog/shaders/corporate-blobs/corporate-blobs.form.tsx"],"names":[],"mappings":"AAMA,OAAO,EAIL,KAAK,oBAAoB,EAC1B,MAAM,8CAA8C,CAAC;AAGtD,wBAAgB,kBAAkB,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,oBAAoB,2CA6BvF","sourcesContent":["// Corporate-blobs' 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: \"blobs\".\n\nimport {\n Control,\n ControlForm,\n ControlSection,\n type KaleidoscopeControls,\n} from '../../../src/components/preset-control-panel';\nimport { CORPORATE_BLOBS_CONTROLS } from './corporate-blobs';\n\nexport function CorporateBlobsForm({ uniforms, onPatch, disabled }: KaleidoscopeControls) {\n return (\n <ControlForm\n id=\"blobs\"\n uniforms={uniforms.blobs ?? {}}\n onPatch={onPatch}\n disabled={disabled}\n controls={CORPORATE_BLOBS_CONTROLS}\n >\n <ControlSection title=\"blobs\">\n <Control uniform=\"uColor\" />\n <Control uniform=\"uBlobColor1\" />\n <Control uniform=\"uBlobColor2\" />\n <Control uniform=\"uBlobColor3\" />\n <Control uniform=\"uBlobColor4\" />\n <Control uniform=\"uBlobColor5\" />\n <Control uniform=\"uBlobColor6\" />\n <Control uniform=\"uBlobColor7\" />\n <Control uniform=\"uBlobColor8\" />\n <Control uniform=\"uGlobalAlpha\" />\n <Control uniform=\"uScale\" />\n <Control uniform=\"uEdgePull\" />\n <Control uniform=\"uCenterClear\" />\n <Control uniform=\"uMotionAmount\" />\n <Control uniform=\"uMotionSpeed\" />\n <Control uniform=\"uEdgeSoftness\" />\n </ControlSection>\n </ControlForm>\n );\n}\n"]}
1
+ {"version":3,"file":"corporate-blobs.form.d.ts","sourceRoot":"","sources":["../../../../catalog/shaders/corporate-blobs/corporate-blobs.form.tsx"],"names":[],"mappings":"AAMA,OAAO,EAIL,KAAK,oBAAoB,EAC1B,MAAM,8CAA8C,CAAC;AAGtD,wBAAgB,kBAAkB,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,oBAAoB,2CA6BvF"}
@@ -1 +1 @@
1
- {"version":3,"file":"fireflies.d.ts","sourceRoot":"","sources":["../../../../catalog/shaders/fireflies/fireflies.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,mCAAmC,CAAC;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEvD,uDAAuD;AACvD,MAAM,MAAM,iBAAiB,GAAG;IAC9B,0CAA0C;IAC1C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,qCAAqC;IACrC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,4BAA4B;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,mCAAmC;IACnC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,gFAAgF;IAChF,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC;CACtB,CAAC;AAEF,mFAAmF;AACnF,eAAO,MAAM,kBAAkB,EAAE,SAAS,cAAc,EAsCvD,CAAC","sourcesContent":["// Fireflies layer-shader interface: typed uniforms + control descriptor. A\n// transparent overlay of drifting glowing dots (use blend 'additive'). Shader\n// source is ./fireflies.frag.\n\nimport type { RGB } from '../../../src/lib/primitives.types';\nimport type { UniformControl } from '../_shared/types';\n\n/** Typed uniforms for the `fireflies` layer shader. */\nexport type FirefliesUniforms = {\n /** Radius of each firefly's soft glow. */\n readonly uGlowSize: number;\n /** Size of the bright center dot. */\n readonly uDotSize: number;\n /** Drift movement speed. */\n readonly uSpeed: number;\n /** Twinkle (fade in/out) speed. */\n readonly uTwinkle: number;\n /** Firefly tint, RGB each channel 0..1 (the warm default is the amber look). */\n readonly uColor: RGB;\n};\n\n/** The `fireflies` shader's tunable uniforms; defaults are the warm amber look. */\nexport const FIREFLIES_CONTROLS: readonly UniformControl[] = [\n {\n name: 'uGlowSize',\n kind: 'float',\n default: 0.035,\n min: 0.005,\n max: 0.1,\n step: 0.001,\n doc: 'Glow radius.',\n },\n {\n name: 'uDotSize',\n kind: 'float',\n default: 0.006,\n min: 0.001,\n max: 0.02,\n step: 0.001,\n doc: 'Bright center size.',\n },\n {\n name: 'uSpeed',\n kind: 'float',\n default: 0.35,\n min: 0,\n max: 1,\n step: 0.01,\n doc: 'Movement speed.',\n },\n {\n name: 'uTwinkle',\n kind: 'float',\n default: 2.5,\n min: 0,\n max: 5,\n step: 0.1,\n doc: 'Fade in/out speed.',\n },\n { name: 'uColor', kind: 'color', default: [1.0, 0.82, 0.32], doc: 'Firefly tint.' },\n];\n"]}
1
+ {"version":3,"file":"fireflies.d.ts","sourceRoot":"","sources":["../../../../catalog/shaders/fireflies/fireflies.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,mCAAmC,CAAC;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEvD,uDAAuD;AACvD,MAAM,MAAM,iBAAiB,GAAG;IAC9B,0CAA0C;IAC1C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,qCAAqC;IACrC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,4BAA4B;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,mCAAmC;IACnC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,gFAAgF;IAChF,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC;CACtB,CAAC;AAEF,mFAAmF;AACnF,eAAO,MAAM,kBAAkB,EAAE,SAAS,cAAc,EAsCvD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"fireflies.form.d.ts","sourceRoot":"","sources":["../../../../catalog/shaders/fireflies/fireflies.form.tsx"],"names":[],"mappings":"AAMA,OAAO,EAIL,KAAK,oBAAoB,EAC1B,MAAM,8CAA8C,CAAC;AAGtD,wBAAgB,aAAa,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,oBAAoB,2CAkBlF","sourcesContent":["// Fireflies' 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: \"fireflies\".\n\nimport {\n Control,\n ControlForm,\n ControlSection,\n type KaleidoscopeControls,\n} from '../../../src/components/preset-control-panel';\nimport { FIREFLIES_CONTROLS } from './fireflies';\n\nexport function FirefliesForm({ uniforms, onPatch, disabled }: KaleidoscopeControls) {\n return (\n <ControlForm\n id=\"fireflies\"\n uniforms={uniforms.fireflies ?? {}}\n onPatch={onPatch}\n disabled={disabled}\n controls={FIREFLIES_CONTROLS}\n >\n <ControlSection title=\"fireflies\">\n <Control uniform=\"uGlowSize\" />\n <Control uniform=\"uDotSize\" />\n <Control uniform=\"uSpeed\" />\n <Control uniform=\"uTwinkle\" />\n <Control uniform=\"uColor\" />\n </ControlSection>\n </ControlForm>\n );\n}\n"]}
1
+ {"version":3,"file":"fireflies.form.d.ts","sourceRoot":"","sources":["../../../../catalog/shaders/fireflies/fireflies.form.tsx"],"names":[],"mappings":"AAMA,OAAO,EAIL,KAAK,oBAAoB,EAC1B,MAAM,8CAA8C,CAAC;AAGtD,wBAAgB,aAAa,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,oBAAoB,2CAkBlF"}
@@ -1 +1 @@
1
- {"version":3,"file":"godrays.d.ts","sourceRoot":"","sources":["../../../../catalog/shaders/godrays/godrays.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,mCAAmC,CAAC;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEvD,qDAAqD;AACrD,MAAM,MAAM,eAAe,GAAG;IAC5B,iCAAiC;IACjC,QAAQ,CAAC,WAAW,EAAE,GAAG,CAAC;IAC1B,2BAA2B;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,mBAAmB;IACnB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,8CAA8C;IAC9C,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,sDAAsD;IACtD,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,4CAA4C;IAC5C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,qCAAqC;IACrC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,mCAAmC;IACnC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,8BAA8B;IAC9B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B,CAAC;AAEF,yFAAyF;AACzF,eAAO,MAAM,gBAAgB,EAAE,SAAS,cAAc,EA0ErD,CAAC","sourcesContent":["// God rays layer-shader interface: typed uniforms + control descriptor. An\n// additive overlay (premultiplied), reusable on any target. Shader source is\n// ./godrays.frag.\n\nimport type { RGB } from '../../../src/lib/primitives.types';\nimport type { UniformControl } from '../_shared/types';\n\n/** Typed uniforms for the `godrays` layer shader. */\nexport type GodraysUniforms = {\n /** Ray tint (linear-ish RGB). */\n readonly uLightColor: RGB;\n /** Number of ray bands. */\n readonly uRayCount: number;\n /** Drift speed. */\n readonly uRaySpeed: number;\n /** Overall brightness / additive strength. */\n readonly uRayIntensity: number;\n /** Edge falloff exponent; higher = crisper shafts. */\n readonly uRaySoftness: number;\n /** Extra glow concentrated near the top. */\n readonly uTopGlow: number;\n /** Vertical falloff from the top. */\n readonly uFadeDistance: number;\n /** Horizontal wobble magnitude. */\n readonly uWobbleAmount: number;\n /** Wobble animation speed. */\n readonly uWobbleSpeed: number;\n};\n\n/** The `godrays` shader's tunable uniforms; defaults are the neutral cool-white look. */\nexport const GODRAYS_CONTROLS: readonly UniformControl[] = [\n { name: 'uLightColor', kind: 'color', default: [0.85, 0.95, 1.0], doc: 'Ray tint.' },\n {\n name: 'uRayCount',\n kind: 'float',\n default: 16,\n min: 2,\n max: 40,\n step: 1,\n doc: 'Number of ray bands.',\n },\n {\n name: 'uRaySpeed',\n kind: 'float',\n default: 0.95,\n min: 0,\n max: 3,\n step: 0.05,\n doc: 'Drift speed.',\n },\n {\n name: 'uRayIntensity',\n kind: 'float',\n default: 0.85,\n min: 0,\n max: 3,\n step: 0.05,\n doc: 'Brightness / additive strength.',\n },\n {\n name: 'uRaySoftness',\n kind: 'float',\n default: 2.4,\n min: 0.5,\n max: 6,\n step: 0.1,\n doc: 'Edge falloff; higher = crisper.',\n },\n {\n name: 'uTopGlow',\n kind: 'float',\n default: 0.65,\n min: 0,\n max: 1.5,\n step: 0.05,\n doc: 'Extra glow near the top.',\n },\n {\n name: 'uFadeDistance',\n kind: 'float',\n default: 1.25,\n min: 0.2,\n max: 3,\n step: 0.05,\n doc: 'Vertical falloff from the top.',\n },\n {\n name: 'uWobbleAmount',\n kind: 'float',\n default: 0.08,\n min: 0,\n max: 0.3,\n step: 0.01,\n doc: 'Horizontal wobble.',\n },\n {\n name: 'uWobbleSpeed',\n kind: 'float',\n default: 0.55,\n min: 0,\n max: 2,\n step: 0.05,\n doc: 'Wobble speed.',\n },\n];\n"]}
1
+ {"version":3,"file":"godrays.d.ts","sourceRoot":"","sources":["../../../../catalog/shaders/godrays/godrays.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,mCAAmC,CAAC;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEvD,qDAAqD;AACrD,MAAM,MAAM,eAAe,GAAG;IAC5B,iCAAiC;IACjC,QAAQ,CAAC,WAAW,EAAE,GAAG,CAAC;IAC1B,2BAA2B;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,mBAAmB;IACnB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,8CAA8C;IAC9C,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,sDAAsD;IACtD,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,4CAA4C;IAC5C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,qCAAqC;IACrC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,mCAAmC;IACnC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,8BAA8B;IAC9B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B,CAAC;AAEF,yFAAyF;AACzF,eAAO,MAAM,gBAAgB,EAAE,SAAS,cAAc,EA0ErD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"godrays.form.d.ts","sourceRoot":"","sources":["../../../../catalog/shaders/godrays/godrays.form.tsx"],"names":[],"mappings":"AAMA,OAAO,EAIL,KAAK,oBAAoB,EAC1B,MAAM,8CAA8C,CAAC;AAGtD,wBAAgB,WAAW,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,oBAAoB,2CAsBhF","sourcesContent":["// Godrays' 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: \"rays\".\n\nimport {\n Control,\n ControlForm,\n ControlSection,\n type KaleidoscopeControls,\n} from '../../../src/components/preset-control-panel';\nimport { GODRAYS_CONTROLS } from './godrays';\n\nexport function GodraysForm({ uniforms, onPatch, disabled }: KaleidoscopeControls) {\n return (\n <ControlForm\n id=\"rays\"\n uniforms={uniforms.rays ?? {}}\n onPatch={onPatch}\n disabled={disabled}\n controls={GODRAYS_CONTROLS}\n >\n <ControlSection title=\"godrays\">\n <Control uniform=\"uLightColor\" />\n <Control uniform=\"uRayCount\" />\n <Control uniform=\"uRaySpeed\" />\n <Control uniform=\"uRayIntensity\" />\n <Control uniform=\"uRaySoftness\" />\n <Control uniform=\"uTopGlow\" />\n <Control uniform=\"uFadeDistance\" />\n <Control uniform=\"uWobbleAmount\" />\n <Control uniform=\"uWobbleSpeed\" />\n </ControlSection>\n </ControlForm>\n );\n}\n"]}
1
+ {"version":3,"file":"godrays.form.d.ts","sourceRoot":"","sources":["../../../../catalog/shaders/godrays/godrays.form.tsx"],"names":[],"mappings":"AAMA,OAAO,EAIL,KAAK,oBAAoB,EAC1B,MAAM,8CAA8C,CAAC;AAGtD,wBAAgB,WAAW,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,oBAAoB,2CAsBhF"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../catalog/shaders/index.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,6CAA6C,CAAC;AAC/F,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAChF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,+CAA+C,CAAC;AAChG,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAExE,OAAO,EAAE,eAAe,EAAE,KAAK,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACvE,YAAY,EAAE,2BAA2B,EAAE,MAAM,6CAA6C,CAAC;AAC/F,OAAO,EAAE,6BAA6B,EAAE,MAAM,6CAA6C,CAAC;AAC5F,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,YAAY,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,YAAY,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAChF,OAAO,EAAE,wBAAwB,EAAE,MAAM,mCAAmC,CAAC;AAC7E,YAAY,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,YAAY,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,YAAY,EAAE,0BAA0B,EAAE,MAAM,+CAA+C,CAAC;AAChG,OAAO,EAAE,8BAA8B,EAAE,MAAM,+CAA+C,CAAC;AAC/F,YAAY,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,YAAY,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,YAAY,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AAEpE;;;;;GAKG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAChC,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC;IAClC,QAAQ,CAAC,SAAS,EAAE,iBAAiB,CAAC;IACtC,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAChC,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAChC,QAAQ,CAAC,YAAY,EAAE,oBAAoB,CAAC;IAC5C,QAAQ,CAAC,sBAAsB,EAAE,2BAA2B,CAAC;IAC7D,QAAQ,CAAC,uBAAuB,EAAE,0BAA0B,CAAC;IAC7D,QAAQ,CAAC,iBAAiB,EAAE,sBAAsB,CAAC;CACpD,CAAC;AAEF,uDAAuD;AACvD,MAAM,MAAM,mBAAmB,GAAG,MAAM,iBAAiB,CAAC;AAE1D;;;;;;;;GAQG;AACH,MAAM,MAAM,kBAAkB,GAAG;IAC/B,QAAQ,CAAC,KAAK,EAAE;QAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;CACvC,GAAG;IACF,QAAQ,EAAE,CAAC,IAAI,MAAM,iBAAiB,GAAG;QAAE,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAA;KAAE;CAC9F,CAAC;AAEF,kEAAkE;AAClE,MAAM,MAAM,eAAe,GAAG,MAAM,kBAAkB,CAAC","sourcesContent":["// Per-shader interface barrel. Each layer shader exports its typed uniforms and\n// a control descriptor (the runtime metadata the demo generates tuning controls\n// from, and the shader's documentation). The per-shader `*_CONTROLS` are\n// re-exported individually; a consumer imports the one its preset's layer needs.\n\nimport type { AnamorphicLensFlareUniforms } from './anamorphic-lensflare/anamorphic-lensflare';\nimport type { BlurUniforms } from './blur/blur';\nimport type { CloudsUniforms } from './clouds/clouds';\nimport type { CorporateBlobsUniforms } from './corporate-blobs/corporate-blobs';\nimport type { FirefliesUniforms } from './fireflies/fireflies';\nimport type { GodraysUniforms } from './godrays/godrays';\nimport type { LightBeamsAndMotesUniforms } from './light-beams-and-motes/light-beams-and-motes';\nimport type { NebulaUniforms } from './nebula/nebula';\nimport type { PlasmaUniforms } from './plasma/plasma';\nimport type { SimianlightsUniforms } from './simianlights/simianlights';\n\nexport { defaultUniforms, type UniformControl } from './_shared/types';\nexport type { AnamorphicLensFlareUniforms } from './anamorphic-lensflare/anamorphic-lensflare';\nexport { ANAMORPHIC_LENSFLARE_CONTROLS } from './anamorphic-lensflare/anamorphic-lensflare';\nexport type { BlurUniforms } from './blur/blur';\nexport { BLUR_CONTROLS } from './blur/blur';\nexport type { CloudsUniforms } from './clouds/clouds';\nexport { CLOUDS_CONTROLS } from './clouds/clouds';\nexport type { CorporateBlobsUniforms } from './corporate-blobs/corporate-blobs';\nexport { CORPORATE_BLOBS_CONTROLS } from './corporate-blobs/corporate-blobs';\nexport type { FirefliesUniforms } from './fireflies/fireflies';\nexport { FIREFLIES_CONTROLS } from './fireflies/fireflies';\nexport type { GodraysUniforms } from './godrays/godrays';\nexport { GODRAYS_CONTROLS } from './godrays/godrays';\nexport type { LightBeamsAndMotesUniforms } from './light-beams-and-motes/light-beams-and-motes';\nexport { LIGHT_BEAMS_AND_MOTES_CONTROLS } from './light-beams-and-motes/light-beams-and-motes';\nexport type { NebulaUniforms } from './nebula/nebula';\nexport { NEBULA_CONTROLS } from './nebula/nebula';\nexport type { PlasmaUniforms } from './plasma/plasma';\nexport { PLASMA_CONTROLS } from './plasma/plasma';\nexport type { SimianlightsUniforms } from './simianlights/simianlights';\nexport { SIMIANLIGHTS_CONTROLS } from './simianlights/simianlights';\n\n/**\n * The uniform-bearing layer shaders → their typed uniforms. `image` and `direct`\n * carry no uniforms, so they are absent. This is the map `PatchFor` re-indexes by\n * a layer's literal `shader` to type its `uniforms` as `Partial<PlasmaUniforms>`,\n * giving authors IntelliSense on a `kaleidoscope(id, patches)` call.\n */\nexport type ShaderUniformsMap = {\n readonly blur: BlurUniforms;\n readonly clouds: CloudsUniforms;\n readonly godrays: GodraysUniforms;\n readonly fireflies: FirefliesUniforms;\n readonly plasma: PlasmaUniforms;\n readonly nebula: NebulaUniforms;\n readonly simianlights: SimianlightsUniforms;\n readonly 'anamorphic-lensflare': AnamorphicLensFlareUniforms;\n readonly 'light-beams-and-motes': LightBeamsAndMotesUniforms;\n readonly 'corporate-blobs': CorporateBlobsUniforms;\n};\n\n/** A patchable (uniform-bearing) layer shader name. */\nexport type PatchableShaderName = keyof ShaderUniformsMap;\n\n/**\n * What each layer `shader` accepts in a preset, DERIVED from `ShaderUniformsMap`\n * so adding a shader there flows through automatically (no hand-mirrored list):\n * every uniform-bearing shader's options are a `Partial` of its uniforms, plus\n * the two non-uniform layer kinds. The `KaleidoscopeLayer` discriminant narrows\n * over this.\n * - `image` replaces the target with a still image (needs `source`).\n * - `direct` passes the target through unchanged (a matrix passthrough).\n */\nexport type LayerShaderOptions = {\n readonly image: { readonly source: string };\n readonly direct: Record<never, never>;\n} & {\n readonly [K in keyof ShaderUniformsMap]: { readonly uniforms: Partial<ShaderUniformsMap[K]> };\n};\n\n/** A layer shader name (the `KaleidoscopeLayer` discriminant). */\nexport type LayerShaderName = keyof LayerShaderOptions;\n"]}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../catalog/shaders/index.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,6CAA6C,CAAC;AAC/F,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAChF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,+CAA+C,CAAC;AAChG,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAExE,OAAO,EAAE,eAAe,EAAE,KAAK,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACvE,YAAY,EAAE,2BAA2B,EAAE,MAAM,6CAA6C,CAAC;AAC/F,OAAO,EAAE,6BAA6B,EAAE,MAAM,6CAA6C,CAAC;AAC5F,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,YAAY,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,YAAY,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAChF,OAAO,EAAE,wBAAwB,EAAE,MAAM,mCAAmC,CAAC;AAC7E,YAAY,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,YAAY,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,YAAY,EAAE,0BAA0B,EAAE,MAAM,+CAA+C,CAAC;AAChG,OAAO,EAAE,8BAA8B,EAAE,MAAM,+CAA+C,CAAC;AAC/F,YAAY,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,YAAY,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,YAAY,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AAEpE;;;;;GAKG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAChC,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC;IAClC,QAAQ,CAAC,SAAS,EAAE,iBAAiB,CAAC;IACtC,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAChC,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAChC,QAAQ,CAAC,YAAY,EAAE,oBAAoB,CAAC;IAC5C,QAAQ,CAAC,sBAAsB,EAAE,2BAA2B,CAAC;IAC7D,QAAQ,CAAC,uBAAuB,EAAE,0BAA0B,CAAC;IAC7D,QAAQ,CAAC,iBAAiB,EAAE,sBAAsB,CAAC;CACpD,CAAC;AAEF,uDAAuD;AACvD,MAAM,MAAM,mBAAmB,GAAG,MAAM,iBAAiB,CAAC;AAE1D;;;;;;;;GAQG;AACH,MAAM,MAAM,kBAAkB,GAAG;IAC/B,QAAQ,CAAC,KAAK,EAAE;QAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;CACvC,GAAG;IACF,QAAQ,EAAE,CAAC,IAAI,MAAM,iBAAiB,GAAG;QAAE,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAA;KAAE;CAC9F,CAAC;AAEF,kEAAkE;AAClE,MAAM,MAAM,eAAe,GAAG,MAAM,kBAAkB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"light-beams-and-motes.d.ts","sourceRoot":"","sources":["../../../../catalog/shaders/light-beams-and-motes/light-beams-and-motes.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,mCAAmC,CAAC;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEvD,mEAAmE;AACnE,MAAM,MAAM,0BAA0B,GAAG;IACvC,sDAAsD;IACtD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,wDAAwD;IACxD,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,2DAA2D;IAC3D,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,yEAAyE;IACzE,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC,oBAAoB;IACpB,QAAQ,CAAC,WAAW,EAAE,GAAG,CAAC;IAC1B,uCAAuC;IACvC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,kDAAkD;IAClD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,yEAAyE;IACzE,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC,oBAAoB;IACpB,QAAQ,CAAC,WAAW,EAAE,GAAG,CAAC;IAC1B,uCAAuC;IACvC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,kDAAkD;IAClD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,yEAAyE;IACzE,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC,oBAAoB;IACpB,QAAQ,CAAC,WAAW,EAAE,GAAG,CAAC;IAC1B,uCAAuC;IACvC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,kDAAkD;IAClD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,kCAAkC;IAClC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,gDAAgD;IAChD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,8CAA8C;IAC9C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B,CAAC;AA6BF,gGAAgG;AAChG,eAAO,MAAM,8BAA8B,EAAE,SAAS,cAAc,EA0DnE,CAAC","sourcesContent":["// Light-beams-and-motes layer-shader interface: typed uniforms + control\n// descriptor. A transparent overlay of dust motes drifting inside three\n// independently positioned, colored, and lit polygon light beams (use blend\n// 'additive'). Shader source is ./light-beams-and-motes.frag. Each beam owns a\n// 4-point quad (row-major TL, TR, BL, BR; y-up), a color, a fill strength, and an\n// on/off flag; the motes are shared. Defaults reproduce the stock prototype look.\n\nimport type { RGB } from '../../../src/lib/primitives.types';\nimport type { UniformControl } from '../_shared/types';\n\n/** Typed uniforms for the `light-beams-and-motes` layer shader. */\nexport type LightBeamsAndMotesUniforms = {\n /** Animation rate; 1 = stock, 0 freezes the field. */\n readonly uSpeed: number;\n /** Beam polygon edge softness (shared by all beams). */\n readonly uBeamSoftness: number;\n /** Overall overlay opacity, applied to the final alpha. */\n readonly uOverlayAlpha: number;\n /** Beam 1 quad corners row-major (TL, TR, BL, BR), flat [x0,y0, ...]. */\n readonly uBeam1Poly: readonly number[];\n /** Beam 1 color. */\n readonly uBeam1Color: RGB;\n /** Beam 1 fill strength (absolute). */\n readonly uBeam1Alpha: number;\n /** Beam 1 on/off; 0 skips it entirely, 1 = on. */\n readonly uBeam1On: number;\n /** Beam 2 quad corners row-major (TL, TR, BL, BR), flat [x0,y0, ...]. */\n readonly uBeam2Poly: readonly number[];\n /** Beam 2 color. */\n readonly uBeam2Color: RGB;\n /** Beam 2 fill strength (absolute). */\n readonly uBeam2Alpha: number;\n /** Beam 2 on/off; 0 skips it entirely, 1 = on. */\n readonly uBeam2On: number;\n /** Beam 3 quad corners row-major (TL, TR, BL, BR), flat [x0,y0, ...]. */\n readonly uBeam3Poly: readonly number[];\n /** Beam 3 color. */\n readonly uBeam3Color: RGB;\n /** Beam 3 fill strength (absolute). */\n readonly uBeam3Alpha: number;\n /** Beam 3 on/off; 0 skips it entirely, 1 = on. */\n readonly uBeam3On: number;\n /** Mote brightness (absolute). */\n readonly uMoteAlpha: number;\n /** Mote glow radius, in mote-size multiples. */\n readonly uGlowSize: number;\n /** Active motes (<= 128); fewer = cheaper. */\n readonly uMoteCount: number;\n};\n\n// Per-beam control triples, generated so beam 1/2/3 stay identical in shape.\nconst beamControls = (\n n: 1 | 2 | 3,\n poly: readonly number[],\n color: RGB,\n alpha: number,\n): readonly UniformControl[] => [\n { name: `uBeam${n}On`, kind: 'switch', default: 1, doc: `Beam ${n} on/off (0 skips it).` },\n { name: `uBeam${n}Color`, kind: 'color', default: color, doc: `Beam ${n} color.` },\n {\n name: `uBeam${n}Alpha`,\n kind: 'float',\n default: alpha,\n min: 0,\n max: 1,\n step: 0.01,\n doc: `Beam ${n} fill strength.`,\n },\n {\n name: `uBeam${n}Poly`,\n kind: 'polygon',\n points: 4,\n default: poly,\n doc: `Beam ${n} corners row-major (TL, TR, BL, BR), y-up.`,\n },\n];\n\n/** The `light-beams-and-motes` shader's tunable uniforms; defaults reproduce the stock look. */\nexport const LIGHT_BEAMS_AND_MOTES_CONTROLS: readonly UniformControl[] = [\n {\n name: 'uSpeed',\n kind: 'float',\n default: 1,\n min: 0,\n max: 3,\n step: 0.01,\n doc: 'Animation rate; 0 freezes.',\n },\n {\n name: 'uBeamSoftness',\n kind: 'float',\n default: 0.055,\n min: 0.005,\n max: 0.2,\n step: 0.005,\n doc: 'Beam edge softness.',\n },\n {\n name: 'uOverlayAlpha',\n kind: 'float',\n default: 0.72,\n min: 0,\n max: 1,\n step: 0.01,\n doc: 'Overall overlay opacity.',\n },\n ...beamControls(1, [0.02, 1.05, 0.17, 1.05, 0.36, 0, 0.68, 0], [1.0, 0.42, 0.32], 0.13),\n ...beamControls(2, [0.45, 1.05, 0.57, 1.05, 0.33, 0, 0.73, 0], [0.54, 1.0, 0.62], 0.086),\n ...beamControls(3, [0.82, 1.05, 0.99, 1.05, 0.38, 0, 0.7, 0], [0.55, 0.66, 1.0], 0.104),\n {\n name: 'uMoteCount',\n kind: 'float',\n default: 128,\n min: 0,\n max: 128,\n step: 1,\n doc: 'Active motes (fewer = cheaper).',\n },\n {\n name: 'uMoteAlpha',\n kind: 'float',\n default: 0.48,\n min: 0,\n max: 2,\n step: 0.01,\n doc: 'Mote brightness.',\n },\n {\n name: 'uGlowSize',\n kind: 'float',\n default: 3.2,\n min: 1,\n max: 6,\n step: 0.1,\n doc: 'Mote glow radius (size multiples).',\n },\n];\n"]}
1
+ {"version":3,"file":"light-beams-and-motes.d.ts","sourceRoot":"","sources":["../../../../catalog/shaders/light-beams-and-motes/light-beams-and-motes.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,mCAAmC,CAAC;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEvD,mEAAmE;AACnE,MAAM,MAAM,0BAA0B,GAAG;IACvC,sDAAsD;IACtD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,wDAAwD;IACxD,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,2DAA2D;IAC3D,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,yEAAyE;IACzE,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC,oBAAoB;IACpB,QAAQ,CAAC,WAAW,EAAE,GAAG,CAAC;IAC1B,uCAAuC;IACvC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,kDAAkD;IAClD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,yEAAyE;IACzE,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC,oBAAoB;IACpB,QAAQ,CAAC,WAAW,EAAE,GAAG,CAAC;IAC1B,uCAAuC;IACvC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,kDAAkD;IAClD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,yEAAyE;IACzE,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC,oBAAoB;IACpB,QAAQ,CAAC,WAAW,EAAE,GAAG,CAAC;IAC1B,uCAAuC;IACvC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,kDAAkD;IAClD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,kCAAkC;IAClC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,gDAAgD;IAChD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,8CAA8C;IAC9C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B,CAAC;AA6BF,gGAAgG;AAChG,eAAO,MAAM,8BAA8B,EAAE,SAAS,cAAc,EA0DnE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"light-beams-and-motes.form.d.ts","sourceRoot":"","sources":["../../../../catalog/shaders/light-beams-and-motes/light-beams-and-motes.form.tsx"],"names":[],"mappings":"AAOA,OAAO,EAIL,KAAK,oBAAoB,EAC1B,MAAM,8CAA8C,CAAC;AAGtD,wBAAgB,sBAAsB,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,oBAAoB,2CAuC3F","sourcesContent":["// Light-beams-and-motes' editor form: the shader OWNS its control layout. The\n// knobs are PACKAGED BY THING -- each beam's on/color/strength/position sit in one\n// section (three beams = three sections), and the mote knobs sit in their own --\n// so related controls are edited together. A beam's position is a <Control> on its\n// polygon uniform, which resolves to the 2x2 Point grid. Conventional layer id:\n// \"beams\".\n\nimport {\n Control,\n ControlForm,\n ControlSection,\n type KaleidoscopeControls,\n} from '../../../src/components/preset-control-panel';\nimport { LIGHT_BEAMS_AND_MOTES_CONTROLS } from './light-beams-and-motes';\n\nexport function LightBeamsAndMotesForm({ uniforms, onPatch, disabled }: KaleidoscopeControls) {\n return (\n <ControlForm\n id=\"beams\"\n uniforms={uniforms.beams ?? {}}\n onPatch={onPatch}\n disabled={disabled}\n controls={LIGHT_BEAMS_AND_MOTES_CONTROLS}\n >\n <ControlSection title=\"beam 1\">\n <Control uniform=\"uBeam1On\" />\n <Control uniform=\"uBeam1Color\" />\n <Control uniform=\"uBeam1Alpha\" />\n <Control uniform=\"uBeam1Poly\" />\n </ControlSection>\n <ControlSection title=\"beam 2\">\n <Control uniform=\"uBeam2On\" />\n <Control uniform=\"uBeam2Color\" />\n <Control uniform=\"uBeam2Alpha\" />\n <Control uniform=\"uBeam2Poly\" />\n </ControlSection>\n <ControlSection title=\"beam 3\">\n <Control uniform=\"uBeam3On\" />\n <Control uniform=\"uBeam3Color\" />\n <Control uniform=\"uBeam3Alpha\" />\n <Control uniform=\"uBeam3Poly\" />\n </ControlSection>\n <ControlSection title=\"motes\">\n <Control uniform=\"uMoteCount\" />\n <Control uniform=\"uMoteAlpha\" />\n <Control uniform=\"uGlowSize\" />\n </ControlSection>\n <ControlSection title=\"shared\">\n <Control uniform=\"uSpeed\" />\n <Control uniform=\"uBeamSoftness\" />\n <Control uniform=\"uOverlayAlpha\" />\n </ControlSection>\n </ControlForm>\n );\n}\n"]}
1
+ {"version":3,"file":"light-beams-and-motes.form.d.ts","sourceRoot":"","sources":["../../../../catalog/shaders/light-beams-and-motes/light-beams-and-motes.form.tsx"],"names":[],"mappings":"AAOA,OAAO,EAIL,KAAK,oBAAoB,EAC1B,MAAM,8CAA8C,CAAC;AAGtD,wBAAgB,sBAAsB,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,oBAAoB,2CAuC3F"}
@@ -1 +1 @@
1
- {"version":3,"file":"nebula.d.ts","sourceRoot":"","sources":["../../../../catalog/shaders/nebula/nebula.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,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,iFAAiF;AACjF,eAAO,MAAM,eAAe,EAAE,SAAS,cAAc,EA+CpD,CAAC","sourcesContent":["// Nebula layer-shader interface: typed uniforms + control descriptor. A deep-\n// space starfield BACKGROUND layer (opaque), uniform-ized from the fixed\n// Deadlights V2 backdrop so a composite can color-grade and pace it (the nebula\n// composite runs it full-frame behind the masked subject). Shader source is\n// ./nebula.frag.\n\nimport type { RGB } from '../../../src/lib/primitives.types';\nimport type { UniformControl } from '../_shared/types';\n\n/** Typed uniforms for the `nebula` layer shader. */\nexport type NebulaUniforms = {\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 `nebula` shader's tunable uniforms; defaults reproduce the stock look. */\nexport const NEBULA_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"]}
1
+ {"version":3,"file":"nebula.d.ts","sourceRoot":"","sources":["../../../../catalog/shaders/nebula/nebula.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,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,iFAAiF;AACjF,eAAO,MAAM,eAAe,EAAE,SAAS,cAAc,EA+CpD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"nebula.form.d.ts","sourceRoot":"","sources":["../../../../catalog/shaders/nebula/nebula.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,2CAmB/E","sourcesContent":["// Nebula'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: \"nebula\".\n\nimport {\n Control,\n ControlForm,\n ControlSection,\n type KaleidoscopeControls,\n} from '../../../src/components/preset-control-panel';\nimport { NEBULA_CONTROLS } from './nebula';\n\nexport function NebulaForm({ uniforms, onPatch, disabled }: KaleidoscopeControls) {\n return (\n <ControlForm\n id=\"nebula\"\n uniforms={uniforms.nebula ?? {}}\n onPatch={onPatch}\n disabled={disabled}\n controls={NEBULA_CONTROLS}\n >\n <ControlSection title=\"nebula\">\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"]}
1
+ {"version":3,"file":"nebula.form.d.ts","sourceRoot":"","sources":["../../../../catalog/shaders/nebula/nebula.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,2CAmB/E"}
@@ -1 +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"]}
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"}
@@ -1 +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"]}
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"}
@@ -1 +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"]}
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"}
@@ -1 +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"]}
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"}
@@ -1 +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"]}
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"}
@@ -1 +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"]}
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"}
@@ -1 +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"]}
1
+ {"version":3,"file":"scope.d.ts","sourceRoot":"","sources":["../../../../src/components/form/scope.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,mBAAmB,wCAAqC,CAAC"}
@@ -1 +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"]}
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"}
@@ -1 +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"]}
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"}
@@ -1 +1 @@
1
- {"version":3,"file":"layout.d.ts","sourceRoot":"","sources":["../../../../src/components/preset-book-menu/layout.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,EAAE,KAAK,SAAS,EAAoB,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAEhF,UAAU,yBAAyB;IACjC;;;;OAIG;IACH,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC;IAC7B;;;;;OAKG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,CAAC;IACjC,0EAA0E;IAC1E,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC;IAC7B,mFAAmF;IACnF,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACxC,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,GAAG,SAAS,CAAC;CACnD;AAID,wBAAgB,oBAAoB,CAAC,EACnC,QAAQ,EACR,WAAW,EACX,QAAQ,EACR,KAAK,GACN,EAAE,yBAAyB,2CAkB3B","sourcesContent":["// Zone container for the composite picker: a tab bar above, then (when the\n// active family has categories) a left-hand category menu beside the body.\n// Presentational only; the composite fills the zones.\n\nimport type { ReactNode } from 'react';\nimport { type StyleProp, StyleSheet, View, type ViewStyle } from 'react-native';\n\ninterface PresetBookMenuLayoutProps {\n /**\n * The family tab bar; conventionally a row of tab buttons, one per family.\n * The layout already wraps this in a `tablist`-role row with flex/gap, so the\n * filler should be the bare tab elements (don't add another row wrapper).\n */\n readonly tabsZone: ReactNode;\n /**\n * The category menu for the active family (a column of buttons, one per\n * category). Omit (or pass nothing) for a flat family: the body then spans\n * full width with no left column. The layout wraps this in the left column;\n * the filler should be the bare item elements.\n */\n readonly sidebarZone?: ReactNode;\n /** The active family's renderer (a PresetGrid); fills the body column. */\n readonly bodyZone: ReactNode;\n /** NativeWind class for the container; resolved via the `./nativewind` interop. */\n readonly className?: string | undefined;\n readonly style?: StyleProp<ViewStyle> | undefined;\n}\n\n// `className` is consumed by the ./nativewind cssInterop at the boundary and\n// arrives merged into `style`, so it is not destructured/read here.\nexport function PresetBookMenuLayout({\n tabsZone,\n sidebarZone,\n bodyZone,\n style,\n}: PresetBookMenuLayoutProps) {\n return (\n <View style={[styles.container, style]}>\n <View accessibilityRole=\"tablist\" accessibilityLabel=\"Effect families\" style={styles.tabs}>\n {tabsZone}\n </View>\n {sidebarZone ? (\n <View style={styles.split}>\n <View accessibilityRole=\"menu\" accessibilityLabel=\"Categories\" style={styles.sidebar}>\n {sidebarZone}\n </View>\n <View style={styles.bodyFlex}>{bodyZone}</View>\n </View>\n ) : (\n <View style={styles.body}>{bodyZone}</View>\n )}\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n container: { gap: 8, width: '100%' },\n tabs: { flexDirection: 'row', flexWrap: 'wrap', gap: 6 },\n split: { flexDirection: 'row', gap: 12, width: '100%', alignItems: 'flex-start' },\n sidebar: { flexShrink: 0, gap: 4, minWidth: 96 },\n bodyFlex: { flex: 1 },\n body: { width: '100%' },\n});\n"]}
1
+ {"version":3,"file":"layout.d.ts","sourceRoot":"","sources":["../../../../src/components/preset-book-menu/layout.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,EAAE,KAAK,SAAS,EAAoB,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAEhF,UAAU,yBAAyB;IACjC;;;;OAIG;IACH,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC;IAC7B;;;;;OAKG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,CAAC;IACjC,0EAA0E;IAC1E,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC;IAC7B,mFAAmF;IACnF,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACxC,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,GAAG,SAAS,CAAC;CACnD;AAID,wBAAgB,oBAAoB,CAAC,EACnC,QAAQ,EACR,WAAW,EACX,QAAQ,EACR,KAAK,GACN,EAAE,yBAAyB,2CAkB3B"}
@@ -1 +1 @@
1
- {"version":3,"file":"preset-book-menu.types.d.ts","sourceRoot":"","sources":["../../../../src/components/preset-book-menu/preset-book-menu.types.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAEnF;;;GAGG;AACH,MAAM,MAAM,MAAM,GAAG,MAAM,CAAC;AAE5B;;;;GAIG;AACH,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC;AAE9B;;;;GAIG;AACH,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,6EAA6E;IAC7E,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC;IACzC;;;OAGG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;CAC/C;AAED;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC;CAC9B;AAED;;;;;GAKG;AACH,MAAM,MAAM,UAAU,GAAG,CACvB,MAAM,EAAE,UAAU,EAClB,KAAK,EAAE,eAAe,GAAG;IACvB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IAC1C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB,KACE,SAAS,CAAC;AAEf;;;;;GAKG;AACH,MAAM,WAAW,uBAAuB,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM;IAChE,gEAAgE;IAChE,QAAQ,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC;IACzB;;;OAGG;IACH,QAAQ,CAAC,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,KAAK,IAAI,CAAC;CAC3C;AAED,yEAAyE;AACzE,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACxC,8EAA8E;IAC9E,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACxC,yDAAyD;IACzD,QAAQ,CAAC,UAAU,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC;CAC9C;AAED,wEAAwE;AACxE,MAAM,WAAW,mBAAmB,CAAC,CAAC,SAAS,sBAAsB,GAAG,sBAAsB,CAC5F,SAAQ,uBAAuB,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,EAC/C,wBAAwB;IAC1B,kCAAkC;IAClC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;IACpB,uEAAuE;IACvE,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,GAAG,SAAS,CAAC;IAClD,wEAAwE;IACxE,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,MAAM,CAAC,GAAG,MAAM,KAAK,MAAM,CAAC,GAAG,SAAS,CAAC;IACnE,iEAAiE;IACjE,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,CAAC,GAAG,SAAS,CAAC;IAChE,uEAAuE;IACvE,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,QAAQ,KAAK,MAAM,CAAC,GAAG,SAAS,CAAC;CAC1E","sourcesContent":["// Shared contract for the drop-in picker components (#28).\n//\n// These types are the seam between the composite picker, its family renderers,\n// and the per-item leaves. The composite reads the consumer's preset book,\n// flattens each preset to a `PresetView`, groups by `family` (the book entry's\n// taxonomy root), and dispatches to a family-appropriate control. Selection is\n// controlled: the\n// component emits the chosen preset id; the host applies it via `kaleidoscope`.\n//\n// No runtime imports from platform-specific packages live here (it is the\n// shared `.types.ts` for the platform-split resolver too); only `react` types.\n\nimport type { ReactNode } from 'react';\nimport type { StyleProp, ViewStyle } from 'react-native';\nimport type { KaleidoscopePresetBook } from '../../kaleidoscope.preset-book.types';\n\n/**\n * A composite's family; the grouping (tab) axis. This is the book entry's\n * taxonomy root (`taxonomy[0]`, e.g. 'Worlds', 'Backgrounds').\n */\nexport type Family = string;\n\n/**\n * A composite's category; the second grouping axis under a family (the\n * left-hand menu). This is the book entry's `taxonomy[1]` (e.g. 'Wizard Tower'\n * under 'Worlds', 'Office' under 'Backgrounds'). Absent for a depth-1 preset.\n */\nexport type Category = string;\n\n/**\n * A preset flattened for display. `id` is the book key the picker emits and the\n * effect dispatches by; `source` is a thumbnail source (the composite's\n * `thumbnail`) when present, feeding the thumbnail tile/resolver.\n */\nexport interface PresetView {\n readonly id: string;\n readonly label: string;\n readonly family: Family;\n /** The preset's category (`taxonomy[1]`); undefined for a depth-1 preset. */\n readonly category?: Category | undefined;\n /**\n * Thumbnail source (web URL or native preset name as `string`, or a Metro\n * asset module id as `number`); present when the book entry has one.\n */\n readonly source?: string | number | undefined;\n}\n\n/**\n * The item's own interaction state, passed to a render-prop so a BYO tile/button\n * can reflect it. This is the leaf's interaction surface (its own selected/press\n * lifecycle), not a relayed parent-state flag.\n */\nexport interface PresetItemState {\n readonly selected: boolean;\n readonly disabled: boolean;\n readonly onPress: () => void;\n}\n\n/**\n * Render-prop for one preset tile. `uri` is the resolved thumbnail source\n * (undefined renders the recessed variant); `testID` is the tile's deterministic\n * `accessibilityIdentifier` (`kld.preset.<id>`), which a BYO tile should apply to\n * its pressable root so Maestro can address it.\n */\nexport type RenderTile = (\n preset: PresetView,\n state: PresetItemState & {\n readonly uri: string | number | undefined;\n readonly testID: string;\n },\n) => ReactNode;\n\n/**\n * Controlled single-selection contract shared by every picker surface. `K` is\n * the id type: the composite narrows it to `keyof P` so `value`/`onSelect` speak\n * the book's keys (no cast at the call site), matching how `kaleidoscope(cmd)`\n * narrows. Standalone primitives default `K` to `string`.\n */\nexport interface PresetBookMenuSelection<K extends string = string> {\n /** The selected preset id, or null when nothing is selected. */\n readonly value: K | null;\n /**\n * Emitted with the chosen id, or null when the selection is toggled off\n * (clicking the selected item clears it, mapping to `kaleidoscope(null)`).\n */\n readonly onSelect: (id: K | null) => void;\n}\n\n/** Props common to the picker surfaces; styling and templating hooks. */\nexport interface PresetBookMenuStyleProps {\n readonly disabled?: boolean | undefined;\n /** Container class; resolved by NativeWind via the `./nativewind` interop. */\n readonly className?: string | undefined;\n /** Override the per-preset tile rendering (BYO tile). */\n readonly renderTile?: RenderTile | undefined;\n}\n\n/** Props for the drop-in composite picker (the tabbed kitchen sink). */\nexport interface PresetBookMenuProps<P extends KaleidoscopePresetBook = KaleidoscopePresetBook>\n extends PresetBookMenuSelection<keyof P & string>,\n PresetBookMenuStyleProps {\n /** The consumer's preset book. */\n readonly presets: P;\n /** RN style override for the container; applied after the defaults. */\n readonly style?: StyleProp<ViewStyle> | undefined;\n /** Map a preset id to a display label; defaults to a title-cased id. */\n readonly labelFor?: ((id: keyof P & string) => string) | undefined;\n /** Label a family tab; defaults to a title-cased family name. */\n readonly tabLabelFor?: ((family: Family) => string) | undefined;\n /** Label a category menu item; defaults to the raw category string. */\n readonly categoryLabelFor?: ((category: Category) => string) | undefined;\n}\n"]}
1
+ {"version":3,"file":"preset-book-menu.types.d.ts","sourceRoot":"","sources":["../../../../src/components/preset-book-menu/preset-book-menu.types.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAEnF;;;GAGG;AACH,MAAM,MAAM,MAAM,GAAG,MAAM,CAAC;AAE5B;;;;GAIG;AACH,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC;AAE9B;;;;GAIG;AACH,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,6EAA6E;IAC7E,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC;IACzC;;;OAGG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;CAC/C;AAED;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC;CAC9B;AAED;;;;;GAKG;AACH,MAAM,MAAM,UAAU,GAAG,CACvB,MAAM,EAAE,UAAU,EAClB,KAAK,EAAE,eAAe,GAAG;IACvB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IAC1C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB,KACE,SAAS,CAAC;AAEf;;;;;GAKG;AACH,MAAM,WAAW,uBAAuB,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM;IAChE,gEAAgE;IAChE,QAAQ,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC;IACzB;;;OAGG;IACH,QAAQ,CAAC,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,KAAK,IAAI,CAAC;CAC3C;AAED,yEAAyE;AACzE,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACxC,8EAA8E;IAC9E,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACxC,yDAAyD;IACzD,QAAQ,CAAC,UAAU,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC;CAC9C;AAED,wEAAwE;AACxE,MAAM,WAAW,mBAAmB,CAAC,CAAC,SAAS,sBAAsB,GAAG,sBAAsB,CAC5F,SAAQ,uBAAuB,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,EAC/C,wBAAwB;IAC1B,kCAAkC;IAClC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;IACpB,uEAAuE;IACvE,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,GAAG,SAAS,CAAC;IAClD,wEAAwE;IACxE,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,MAAM,CAAC,GAAG,MAAM,KAAK,MAAM,CAAC,GAAG,SAAS,CAAC;IACnE,iEAAiE;IACjE,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,CAAC,GAAG,SAAS,CAAC;IAChE,uEAAuE;IACvE,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,QAAQ,KAAK,MAAM,CAAC,GAAG,SAAS,CAAC;CAC1E"}
@@ -1 +1 @@
1
- {"version":3,"file":"preset-grid.d.ts","sourceRoot":"","sources":["../../../../src/components/preset-book-menu/preset-grid.tsx"],"names":[],"mappings":"AAWA,OAAO,EAAE,KAAK,SAAS,EAAoB,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAGhF,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAGvE,UAAU,eAAe;IACvB,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC;IAC5C,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IAC/C,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACxC,mEAAmE;IACnE,QAAQ,CAAC,UAAU,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC;IAC7C,wFAAwF;IACxF,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACxC,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,GAAG,SAAS,CAAC;CACnD;AAaD,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,2CAmChD","sourcesContent":["// Family renderer: one family's presets as a uniform tile grid. Every family\n// renders through this; the per-preset tile decides wallpaper-vs-recessed by\n// whether it has a resolved thumbnail, so a family with no thumbnails just\n// renders recessed buttons of the same footprint. The tile renderer is the\n// `renderTile` slot or the default.\n//\n// The thumbnail URI comes from the platform-split `resolveImageUri`: the\n// source URL on web, the in-bundle file:// URI on native; undefined for a preset\n// with no thumbnail (the tile then renders its recessed variant).\n\nimport { Fragment } from 'react';\nimport { type StyleProp, StyleSheet, View, type ViewStyle } from 'react-native';\nimport { presetTileTestId } from '../../lib/test-id';\nimport { PresetTile } from '../preset-tile';\nimport type { PresetView, RenderTile } from './preset-book-menu.types';\nimport { resolveImageUri } from './resolve-image-uri';\n\ninterface PresetGridProps {\n readonly presets: ReadonlyArray<PresetView>;\n readonly value: string | null;\n readonly onSelect: (id: string | null) => void;\n readonly disabled?: boolean | undefined;\n /** Override the tile rendering (BYO tile, e.g. to add a badge). */\n readonly renderTile?: RenderTile | undefined;\n /** NativeWind class for the grid container; resolved via the `./nativewind` interop. */\n readonly className?: string | undefined;\n readonly style?: StyleProp<ViewStyle> | undefined;\n}\n\nconst defaultRenderTile: RenderTile = (preset, state) => (\n <PresetTile\n label={preset.label}\n uri={state.uri}\n selected={state.selected}\n disabled={state.disabled}\n onPress={state.onPress}\n testID={state.testID}\n />\n);\n\nexport function PresetGrid(props: PresetGridProps) {\n const { presets, value, onSelect, disabled = false, renderTile, style } = props;\n const renderItem = renderTile ?? defaultRenderTile;\n // Resolve each preset's thumbnail URI; pure in (id, source), so React Compiler\n // memoizes the map by `presets` when the library is compiled.\n // The native resolver looks the thumbnail up by id in Bundle.main. For image\n // presets the preset id and the thumbnail's bundle filename coincide (a\n // background's image id IS its preset id); for composites they differ (the\n // composite's thumb is bundled as `<composite-id>-thumb.webp`), so pass the\n // source as the lookup key when it is a string and falls back to the preset\n // id otherwise.\n const uriById = new Map(\n presets.map((p) => {\n const lookupId = typeof p.source === 'string' ? p.source : p.id;\n return [p.id, resolveImageUri(lookupId, p.source)] as const;\n }),\n );\n return (\n <View accessibilityRole=\"radiogroup\" accessibilityLabel=\"Presets\" style={[styles.grid, style]}>\n {presets.map((preset) => {\n const selected = value === preset.id;\n return (\n <Fragment key={preset.id}>\n {renderItem(preset, {\n selected,\n disabled,\n uri: uriById.get(preset.id),\n onPress: () => onSelect(selected ? null : preset.id),\n testID: presetTileTestId(preset.id),\n })}\n </Fragment>\n );\n })}\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n grid: { flexDirection: 'row', flexWrap: 'wrap', gap: 8, width: '100%' },\n});\n"]}
1
+ {"version":3,"file":"preset-grid.d.ts","sourceRoot":"","sources":["../../../../src/components/preset-book-menu/preset-grid.tsx"],"names":[],"mappings":"AAWA,OAAO,EAAE,KAAK,SAAS,EAAoB,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAGhF,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAGvE,UAAU,eAAe;IACvB,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC;IAC5C,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IAC/C,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACxC,mEAAmE;IACnE,QAAQ,CAAC,UAAU,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC;IAC7C,wFAAwF;IACxF,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACxC,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,GAAG,SAAS,CAAC;CACnD;AAaD,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,2CAmChD"}
@@ -1 +1 @@
1
- {"version":3,"file":"resolve-image-uri.d.ts","sourceRoot":"","sources":["../../../../src/components/preset-book-menu/resolve-image-uri.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAajE,eAAO,MAAM,eAAe,EAAE,eAM7B,CAAC","sourcesContent":["// Native variant: the prebuild copied the curated WebP to a conventional\n// in-bundle location; the native module returns a displayable URI for it\n// (Android `asset:///...` so Fresco's asset fetcher loads it, iOS the\n// `Bundle.main` file URL). No second copy of the image.\n//\n// The `resolveImageUri` Expo function is optional here: a native build\n// predating it (or a non-background effect build) simply lacks it, so guard with\n// `?.` and fall back to the source (the preset name), which renders no thumbnail\n// rather than crashing.\n\nimport { requireNativeModule } from 'expo-modules-core';\nimport type { ResolveImageUri } from './resolve-image-uri.types';\n\ninterface ImageUriModule {\n readonly resolveImageUri?: (id: string) => string | null;\n}\n\n// Resolve the module once, lazily; it is registered at the Expo module's\n// OnCreate, before any picker renders. Hoisted out of the per-call path so a\n// grid of N tiles does not perform N module lookups per render.\nlet cachedModule: ImageUriModule | undefined;\nconst nativeModule = (): ImageUriModule =>\n (cachedModule ??= requireNativeModule<ImageUriModule>('RnWebrtcKaleidoscope'));\n\nexport const resolveImageUri: ResolveImageUri = (id, source) => {\n // A numeric source is a Metro asset module id (from `require('./foo.webp')`)\n // and is consumable directly by `<Image source={number}>`; the native module\n // resolves only string preset names, so pass numbers straight through.\n if (typeof source === 'number') return source;\n return nativeModule().resolveImageUri?.(id) ?? source;\n};\n"]}
1
+ {"version":3,"file":"resolve-image-uri.d.ts","sourceRoot":"","sources":["../../../../src/components/preset-book-menu/resolve-image-uri.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAajE,eAAO,MAAM,eAAe,EAAE,eAM7B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"resolve-image-uri.types.d.ts","sourceRoot":"","sources":["../../../../src/components/preset-book-menu/resolve-image-uri.types.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;GAUG;AACH,MAAM,MAAM,eAAe,GAAG,CAC5B,EAAE,EAAE,MAAM,EACV,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,KAChC,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC","sourcesContent":["// Shared contract for the platform-split thumbnail resolver. No runtime imports\n// from platform-specific packages (web and native variants both import this).\n\n/**\n * Resolve a displayable thumbnail source for a preset.\n * - Web: the preset `source` is already a usable image URL; returned as-is.\n * - Native: the bundled WebP lives at a conventional in-bundle location; the\n * native module returns a `file://` URI for it (no second copy of the image).\n * When `source` is a `number` (a Metro asset module id), it bypasses the\n * native module and is returned as-is so `<Image source={number}>` can load\n * it directly through Metro's asset pipeline.\n * Returns `undefined` when no thumbnail can be resolved (the tile shows just its\n * label).\n */\nexport type ResolveImageUri = (\n id: string,\n source: string | number | undefined,\n) => string | number | undefined;\n"]}
1
+ {"version":3,"file":"resolve-image-uri.types.d.ts","sourceRoot":"","sources":["../../../../src/components/preset-book-menu/resolve-image-uri.types.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;GAUG;AACH,MAAM,MAAM,eAAe,GAAG,CAC5B,EAAE,EAAE,MAAM,EACV,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,KAChC,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"resolve-image-uri.web.d.ts","sourceRoot":"","sources":["../../../../src/components/preset-book-menu/resolve-image-uri.web.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAEjE,eAAO,MAAM,eAAe,EAAE,eAAyC,CAAC","sourcesContent":["// Web variant: the preset source is already a bundled image URL, so the\n// thumbnail URI is the source itself.\n//\n// How this file gets picked over the native sibling: Metro resolves the bare\n// `../resolve-image-uri` import to `.web.ts` via platform extensions; for\n// non-Metro dist consumers it is selected by the top-level `browser` FIELD remap\n// in package.json (dist/.../resolve-image-uri.js -> .web.js). That is a\n// different mechanism than the `backgrounds/*` subpath `exports` browser\n// CONDITIONS, because this file is reached by an internal relative import, not a\n// subpath export. Adding another platform-split file under src/ui consumed via a\n// bare import means extending that `browser` field, not adding an exports entry.\n\nimport type { ResolveImageUri } from './resolve-image-uri.types';\n\nexport const resolveImageUri: ResolveImageUri = (_id, source) => source;\n"]}
1
+ {"version":3,"file":"resolve-image-uri.web.d.ts","sourceRoot":"","sources":["../../../../src/components/preset-book-menu/resolve-image-uri.web.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAEjE,eAAO,MAAM,eAAe,EAAE,eAAyC,CAAC"}